@ixo/editor 6.32.1 → 6.34.0

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 (526) hide show
  1. package/dist/BidConfig-YLGSEIOS.js +154 -0
  2. package/dist/BidConfig-YLGSEIOS.js.map +1 -0
  3. package/dist/BidFlowDetail-TJCJBJZZ.js +365 -0
  4. package/dist/BidFlowDetail-TJCJBJZZ.js.map +1 -0
  5. package/dist/CalendarEventCreateConfig-J2LU6LJO.js +155 -0
  6. package/dist/CalendarEventCreateConfig-J2LU6LJO.js.map +1 -0
  7. package/dist/CalendarEventCreateFlowDetail-ZWHZWDOK.js +174 -0
  8. package/dist/CalendarEventCreateFlowDetail-ZWHZWDOK.js.map +1 -0
  9. package/dist/CalendarEventListConfig-GQNNF4ZB.js +116 -0
  10. package/dist/CalendarEventListConfig-GQNNF4ZB.js.map +1 -0
  11. package/dist/CalendarEventListFlowDetail-SSRTOXIX.js +58 -0
  12. package/dist/CalendarEventListFlowDetail-SSRTOXIX.js.map +1 -0
  13. package/dist/CalendarEventUpdateConfig-KACZA6GH.js +133 -0
  14. package/dist/CalendarEventUpdateConfig-KACZA6GH.js.map +1 -0
  15. package/dist/CalendarEventUpdateFlowDetail-CD6NHHOU.js +155 -0
  16. package/dist/CalendarEventUpdateFlowDetail-CD6NHHOU.js.map +1 -0
  17. package/dist/ClaimConfig-3HKPGK55.js +200 -0
  18. package/dist/ClaimConfig-3HKPGK55.js.map +1 -0
  19. package/dist/ClaimFlowDetail-UVEQMEI5.js +641 -0
  20. package/dist/ClaimFlowDetail-UVEQMEI5.js.map +1 -0
  21. package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js +149 -0
  22. package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js.map +1 -0
  23. package/dist/CollectionLifecycleFlowDetail-WFCSVIIG.js +647 -0
  24. package/dist/CollectionLifecycleFlowDetail-WFCSVIIG.js.map +1 -0
  25. package/dist/CollectionUsersConfig-RI2X3YY2.js +271 -0
  26. package/dist/CollectionUsersConfig-RI2X3YY2.js.map +1 -0
  27. package/dist/CollectionUsersFlowDetail-ZLCJBWHG.js +1276 -0
  28. package/dist/CollectionUsersFlowDetail-ZLCJBWHG.js.map +1 -0
  29. package/dist/CredentialStoreConfig-G66AQDGZ.js +75 -0
  30. package/dist/CredentialStoreConfig-G66AQDGZ.js.map +1 -0
  31. package/dist/CredentialStoreFlowDetail-FL7QAM3S.js +99 -0
  32. package/dist/CredentialStoreFlowDetail-FL7QAM3S.js.map +1 -0
  33. package/dist/DesignPodConfig-LJ7H2CZ6.js +8 -0
  34. package/dist/DesignPodConfig-LJ7H2CZ6.js.map +1 -0
  35. package/dist/DesignPodFlowDetail-JHJWGNVY.js +309 -0
  36. package/dist/DesignPodFlowDetail-JHJWGNVY.js.map +1 -0
  37. package/dist/DomainCardPreviewConfig-Q3X5M4WF.js +37 -0
  38. package/dist/DomainCardPreviewConfig-Q3X5M4WF.js.map +1 -0
  39. package/dist/DomainCardPreviewFlowDetail-Y2FE7O5Z.js +131 -0
  40. package/dist/DomainCardPreviewFlowDetail-Y2FE7O5Z.js.map +1 -0
  41. package/dist/DomainIndexerLookupConfig-N4VONQUY.js +41 -0
  42. package/dist/DomainIndexerLookupConfig-N4VONQUY.js.map +1 -0
  43. package/dist/DomainIndexerLookupFlowDetail-GJ7WWK7I.js +70 -0
  44. package/dist/DomainIndexerLookupFlowDetail-GJ7WWK7I.js.map +1 -0
  45. package/dist/DomainSignConfig-XFIXROVK.js +47 -0
  46. package/dist/DomainSignConfig-XFIXROVK.js.map +1 -0
  47. package/dist/DomainSignFlowDetail-BXZ6JBPR.js +206 -0
  48. package/dist/DomainSignFlowDetail-BXZ6JBPR.js.map +1 -0
  49. package/dist/DomainSingleSelectionConfig-ZNKIXB4P.js +101 -0
  50. package/dist/DomainSingleSelectionConfig-ZNKIXB4P.js.map +1 -0
  51. package/dist/DomainSingleSelectionFlowDetail-HWTQXSLA.js +147 -0
  52. package/dist/DomainSingleSelectionFlowDetail-HWTQXSLA.js.map +1 -0
  53. package/dist/EmailSendConfig-YEGZ5Q77.js +215 -0
  54. package/dist/EmailSendConfig-YEGZ5Q77.js.map +1 -0
  55. package/dist/EntityCreateOracleConfig-UZ6ZIMP5.js +150 -0
  56. package/dist/EntityCreateOracleConfig-UZ6ZIMP5.js.map +1 -0
  57. package/dist/EntityCreateOracleFlowDetail-H2X7CPYU.js +120 -0
  58. package/dist/EntityCreateOracleFlowDetail-H2X7CPYU.js.map +1 -0
  59. package/dist/EntitySingleSelectionConfig-DL57KNKM.js +30 -0
  60. package/dist/EntitySingleSelectionConfig-DL57KNKM.js.map +1 -0
  61. package/dist/EntitySingleSelectionFlowDetail-GFQGX3GA.js +118 -0
  62. package/dist/EntitySingleSelectionFlowDetail-GFQGX3GA.js.map +1 -0
  63. package/dist/EntityTransferConfig-JVZ3H35B.js +62 -0
  64. package/dist/EntityTransferConfig-JVZ3H35B.js.map +1 -0
  65. package/dist/EntityTransferFlowDetail-XEXM34XB.js +132 -0
  66. package/dist/EntityTransferFlowDetail-XEXM34XB.js.map +1 -0
  67. package/dist/EvalEngineConfig-CHC4IRN3.js +464 -0
  68. package/dist/EvalEngineConfig-CHC4IRN3.js.map +1 -0
  69. package/dist/EvalEngineFlowDetail-PUFRNO4U.js +4291 -0
  70. package/dist/EvalEngineFlowDetail-PUFRNO4U.js.map +1 -0
  71. package/dist/EvaluateBidConfig-OE4CM43G.js +151 -0
  72. package/dist/EvaluateBidConfig-OE4CM43G.js.map +1 -0
  73. package/dist/EvaluateBidFlowDetail-2S2N4YTW.js +564 -0
  74. package/dist/EvaluateBidFlowDetail-2S2N4YTW.js.map +1 -0
  75. package/dist/EvaluateClaimConfig-3D4F5LHU.js +297 -0
  76. package/dist/EvaluateClaimConfig-3D4F5LHU.js.map +1 -0
  77. package/dist/EvaluateClaimFlowDetail-QYR7PJRD.js +2237 -0
  78. package/dist/EvaluateClaimFlowDetail-QYR7PJRD.js.map +1 -0
  79. package/dist/FormSubmitConfig-UFZYMLUN.js +59 -0
  80. package/dist/FormSubmitConfig-UFZYMLUN.js.map +1 -0
  81. package/dist/FormSubmitFlowDetail-IAHDJS6P.js +169 -0
  82. package/dist/FormSubmitFlowDetail-IAHDJS6P.js.map +1 -0
  83. package/dist/GovernanceAuthzExecFlowDetail-SQBGU5BX.js +166 -0
  84. package/dist/GovernanceAuthzExecFlowDetail-SQBGU5BX.js.map +1 -0
  85. package/dist/GovernanceAuthzGrantFlowDetail-DZPNLANT.js +88 -0
  86. package/dist/GovernanceAuthzGrantFlowDetail-DZPNLANT.js.map +1 -0
  87. package/dist/GovernanceAuthzRevokeFlowDetail-3JZ4IUJG.js +88 -0
  88. package/dist/GovernanceAuthzRevokeFlowDetail-3JZ4IUJG.js.map +1 -0
  89. package/dist/GovernanceChainVoteFlowDetail-475UDNG6.js +83 -0
  90. package/dist/GovernanceChainVoteFlowDetail-475UDNG6.js.map +1 -0
  91. package/dist/GovernanceConfigConfig-V3WM4WBP.js +30 -0
  92. package/dist/GovernanceConfigConfig-V3WM4WBP.js.map +1 -0
  93. package/dist/GovernanceConfigFlowDetail-SQ5PPDRX.js +267 -0
  94. package/dist/GovernanceConfigFlowDetail-SQ5PPDRX.js.map +1 -0
  95. package/dist/GovernanceContractExecuteFlowDetail-H2ZV6W2E.js +113 -0
  96. package/dist/GovernanceContractExecuteFlowDetail-H2ZV6W2E.js.map +1 -0
  97. package/dist/GovernanceContractInstantiateFlowDetail-YJJMGM54.js +144 -0
  98. package/dist/GovernanceContractInstantiateFlowDetail-YJJMGM54.js.map +1 -0
  99. package/dist/GovernanceContractManageCw20FlowDetail-OCBMW3YJ.js +72 -0
  100. package/dist/GovernanceContractManageCw20FlowDetail-OCBMW3YJ.js.map +1 -0
  101. package/dist/GovernanceContractMigrateFlowDetail-JDNIKTT3.js +104 -0
  102. package/dist/GovernanceContractMigrateFlowDetail-JDNIKTT3.js.map +1 -0
  103. package/dist/GovernanceContractUpdateAdminFlowDetail-SZBOAOCC.js +68 -0
  104. package/dist/GovernanceContractUpdateAdminFlowDetail-SZBOAOCC.js.map +1 -0
  105. package/dist/GovernanceCustomMessageFlowDetail-CXD4ZATO.js +78 -0
  106. package/dist/GovernanceCustomMessageFlowDetail-CXD4ZATO.js.map +1 -0
  107. package/dist/GovernanceDaoAcceptToMarketplaceFlowDetail-Q6ZBNY7Z.js +98 -0
  108. package/dist/GovernanceDaoAcceptToMarketplaceFlowDetail-Q6ZBNY7Z.js.map +1 -0
  109. package/dist/GovernanceDaoAdminExecFlowDetail-JAEAY2US.js +94 -0
  110. package/dist/GovernanceDaoAdminExecFlowDetail-JAEAY2US.js.map +1 -0
  111. package/dist/GovernanceDaoCreateEntityFlowDetail-7RVNTVAB.js +96 -0
  112. package/dist/GovernanceDaoCreateEntityFlowDetail-7RVNTVAB.js.map +1 -0
  113. package/dist/GovernanceDaoJoinFlowDetail-XYCTCNHO.js +68 -0
  114. package/dist/GovernanceDaoJoinFlowDetail-XYCTCNHO.js.map +1 -0
  115. package/dist/GovernanceDaoManageStorageFlowDetail-LMLYLYYC.js +93 -0
  116. package/dist/GovernanceDaoManageStorageFlowDetail-LMLYLYYC.js.map +1 -0
  117. package/dist/GovernanceDaoManageSubDaosFlowDetail-YUFQ67JN.js +84 -0
  118. package/dist/GovernanceDaoManageSubDaosFlowDetail-YUFQ67JN.js.map +1 -0
  119. package/dist/GovernanceDaoUpdateInfoFlowDetail-G5FIBY4L.js +104 -0
  120. package/dist/GovernanceDaoUpdateInfoFlowDetail-G5FIBY4L.js.map +1 -0
  121. package/dist/GovernanceMemberProposalConfig-IGPXEFDB.js +42 -0
  122. package/dist/GovernanceMemberProposalConfig-IGPXEFDB.js.map +1 -0
  123. package/dist/GovernanceMemberProposalFlowDetail-T3VURONF.js +240 -0
  124. package/dist/GovernanceMemberProposalFlowDetail-T3VURONF.js.map +1 -0
  125. package/dist/GovernanceNftBurnFlowDetail-AG4I2O7H.js +69 -0
  126. package/dist/GovernanceNftBurnFlowDetail-AG4I2O7H.js.map +1 -0
  127. package/dist/GovernanceNftManageCollectionsFlowDetail-UAAGO3Q6.js +71 -0
  128. package/dist/GovernanceNftManageCollectionsFlowDetail-UAAGO3Q6.js.map +1 -0
  129. package/dist/GovernanceNftTransferFlowDetail-KXM7DTOV.js +130 -0
  130. package/dist/GovernanceNftTransferFlowDetail-KXM7DTOV.js.map +1 -0
  131. package/dist/GovernanceSettingsProposalConfig-4SLJTBLW.js +42 -0
  132. package/dist/GovernanceSettingsProposalConfig-4SLJTBLW.js.map +1 -0
  133. package/dist/GovernanceSettingsProposalFlowDetail-VFZPSCLR.js +165 -0
  134. package/dist/GovernanceSettingsProposalFlowDetail-VFZPSCLR.js.map +1 -0
  135. package/dist/GovernanceStakingStakeFlowDetail-ULLJ7FLM.js +123 -0
  136. package/dist/GovernanceStakingStakeFlowDetail-ULLJ7FLM.js.map +1 -0
  137. package/dist/GovernanceStakingStakeToGroupFlowDetail-CSPKJA3H.js +84 -0
  138. package/dist/GovernanceStakingStakeToGroupFlowDetail-CSPKJA3H.js.map +1 -0
  139. package/dist/GovernanceSubmissionConfigProposalFlowDetail-MZCPSZF2.js +111 -0
  140. package/dist/GovernanceSubmissionConfigProposalFlowDetail-MZCPSZF2.js.map +1 -0
  141. package/dist/GovernanceTransactionMintFlowDetail-Y2WRAODH.js +66 -0
  142. package/dist/GovernanceTransactionMintFlowDetail-Y2WRAODH.js.map +1 -0
  143. package/dist/GovernanceTransactionPerformTokenSwapFlowDetail-GEK6PMMI.js +133 -0
  144. package/dist/GovernanceTransactionPerformTokenSwapFlowDetail-GEK6PMMI.js.map +1 -0
  145. package/dist/GovernanceTransactionSendFundsConfig-VBKMLSF3.js +42 -0
  146. package/dist/GovernanceTransactionSendFundsConfig-VBKMLSF3.js.map +1 -0
  147. package/dist/GovernanceTransactionSendFundsFlowDetail-5TZB64VL.js +182 -0
  148. package/dist/GovernanceTransactionSendFundsFlowDetail-5TZB64VL.js.map +1 -0
  149. package/dist/GovernanceTransactionSendGroupTokenFlowDetail-EGOWVZM2.js +155 -0
  150. package/dist/GovernanceTransactionSendGroupTokenFlowDetail-EGOWVZM2.js.map +1 -0
  151. package/dist/GovernanceTransactionWithdrawTokenSwapFlowDetail-6XWVO5O6.js +56 -0
  152. package/dist/GovernanceTransactionWithdrawTokenSwapFlowDetail-6XWVO5O6.js.map +1 -0
  153. package/dist/GovernanceValidatorActionsFlowDetail-ZMLPAFUB.js +117 -0
  154. package/dist/GovernanceValidatorActionsFlowDetail-ZMLPAFUB.js.map +1 -0
  155. package/dist/HarvestConfig-AIGOGBFR.js +56 -0
  156. package/dist/HarvestConfig-AIGOGBFR.js.map +1 -0
  157. package/dist/HarvestFlowDetail-X3RUH3X3.js +131 -0
  158. package/dist/HarvestFlowDetail-X3RUH3X3.js.map +1 -0
  159. package/dist/HttpRequestConfig-OQEJIIJY.js +194 -0
  160. package/dist/HttpRequestConfig-OQEJIIJY.js.map +1 -0
  161. package/dist/HttpRequestFlowDetail-JVLV533Z.js +116 -0
  162. package/dist/HttpRequestFlowDetail-JVLV533Z.js.map +1 -0
  163. package/dist/IdentityCreateConfig-ZBUOJ6AL.js +94 -0
  164. package/dist/IdentityCreateConfig-ZBUOJ6AL.js.map +1 -0
  165. package/dist/IdentityCreateFlowDetail-WGKO43IH.js +83 -0
  166. package/dist/IdentityCreateFlowDetail-WGKO43IH.js.map +1 -0
  167. package/dist/IidCreateConfig-RRV2DYXI.js +75 -0
  168. package/dist/IidCreateConfig-RRV2DYXI.js.map +1 -0
  169. package/dist/IidCreateFlowDetail-6M32S6XS.js +57 -0
  170. package/dist/IidCreateFlowDetail-6M32S6XS.js.map +1 -0
  171. package/dist/KycVerifyConfig-VCG65K5K.js +65 -0
  172. package/dist/KycVerifyConfig-VCG65K5K.js.map +1 -0
  173. package/dist/KycVerifyFlowDetail-EWOMXSD3.js +421 -0
  174. package/dist/KycVerifyFlowDetail-EWOMXSD3.js.map +1 -0
  175. package/dist/ListDomainFlowsConfig-3JZEPTOJ.js +37 -0
  176. package/dist/ListDomainFlowsConfig-3JZEPTOJ.js.map +1 -0
  177. package/dist/ListDomainFlowsFlowDetail-XX5AXDZZ.js +257 -0
  178. package/dist/ListDomainFlowsFlowDetail-XX5AXDZZ.js.map +1 -0
  179. package/dist/LoadBatchesConfig-IMODIWRT.js +38 -0
  180. package/dist/LoadBatchesConfig-IMODIWRT.js.map +1 -0
  181. package/dist/LoadBatchesFlowDetail-GB24T76O.js +101 -0
  182. package/dist/LoadBatchesFlowDetail-GB24T76O.js.map +1 -0
  183. package/dist/MatrixDmConfig-NBII27CS.js +120 -0
  184. package/dist/MatrixDmConfig-NBII27CS.js.map +1 -0
  185. package/dist/MatrixRegisterConfig-N2U4FBYF.js +62 -0
  186. package/dist/MatrixRegisterConfig-N2U4FBYF.js.map +1 -0
  187. package/dist/MatrixRegisterFlowDetail-D5YNL5QX.js +86 -0
  188. package/dist/MatrixRegisterFlowDetail-D5YNL5QX.js.map +1 -0
  189. package/dist/MemberMultiSelectConfig-E7WUB2WD.js +30 -0
  190. package/dist/MemberMultiSelectConfig-E7WUB2WD.js.map +1 -0
  191. package/dist/MemberMultiSelectFlowDetail-6C4ZMSDR.js +392 -0
  192. package/dist/MemberMultiSelectFlowDetail-6C4ZMSDR.js.map +1 -0
  193. package/dist/OracleConfig-R7TDTTKN.js +56 -0
  194. package/dist/OracleConfig-R7TDTTKN.js.map +1 -0
  195. package/dist/OracleConfigureOracleConfig-QFF74X3N.js +198 -0
  196. package/dist/OracleConfigureOracleConfig-QFF74X3N.js.map +1 -0
  197. package/dist/OracleConfigureOracleFlowDetail-73BHAN76.js +255 -0
  198. package/dist/OracleConfigureOracleFlowDetail-73BHAN76.js.map +1 -0
  199. package/dist/OracleContractConfig-PHY5L7W2.js +38 -0
  200. package/dist/OracleContractConfig-PHY5L7W2.js.map +1 -0
  201. package/dist/OracleContractFlowDetail-M3PM4AU4.js +78 -0
  202. package/dist/OracleContractFlowDetail-M3PM4AU4.js.map +1 -0
  203. package/dist/OracleDeployConfig-QBG76ATZ.js +10 -0
  204. package/dist/OracleDeployConfig-QBG76ATZ.js.map +1 -0
  205. package/dist/OracleDeployFlowDetail-WKTMD2AD.js +231 -0
  206. package/dist/OracleDeployFlowDetail-WKTMD2AD.js.map +1 -0
  207. package/dist/OracleDeploySetupConfig-75XPGFJQ.js +10 -0
  208. package/dist/OracleDeploySetupConfig-75XPGFJQ.js.map +1 -0
  209. package/dist/OracleDeploySetupFlowDetail-R3BQ7EAU.js +165 -0
  210. package/dist/OracleDeploySetupFlowDetail-R3BQ7EAU.js.map +1 -0
  211. package/dist/OracleDeployStartConfig-NA6GZ4VQ.js +10 -0
  212. package/dist/OracleDeployStartConfig-NA6GZ4VQ.js.map +1 -0
  213. package/dist/OracleDeployStartFlowDetail-EL3CMDMG.js +89 -0
  214. package/dist/OracleDeployStartFlowDetail-EL3CMDMG.js.map +1 -0
  215. package/dist/OracleFlowDetail-5JCJK3GH.js +76 -0
  216. package/dist/OracleFlowDetail-5JCJK3GH.js.map +1 -0
  217. package/dist/OraclePromptConfig-YBRESISH.js +39 -0
  218. package/dist/OraclePromptConfig-YBRESISH.js.map +1 -0
  219. package/dist/OraclePromptFlowDetail-O3XNK7HY.js +112 -0
  220. package/dist/OraclePromptFlowDetail-O3XNK7HY.js.map +1 -0
  221. package/dist/OracleStoreConfigConfig-TUZWTJMA.js +134 -0
  222. package/dist/OracleStoreConfigConfig-TUZWTJMA.js.map +1 -0
  223. package/dist/OracleStoreConfigFlowDetail-Q6AUUSUL.js +99 -0
  224. package/dist/OracleStoreConfigFlowDetail-Q6AUUSUL.js.map +1 -0
  225. package/dist/OracleStoreSecretsAndConfigConfig-SZPYEK7U.js +198 -0
  226. package/dist/OracleStoreSecretsAndConfigConfig-SZPYEK7U.js.map +1 -0
  227. package/dist/OracleStoreSecretsAndConfigFlowDetail-BFV2EHLT.js +220 -0
  228. package/dist/OracleStoreSecretsAndConfigFlowDetail-BFV2EHLT.js.map +1 -0
  229. package/dist/OracleStoreSecretsConfig-PQMF7LFT.js +191 -0
  230. package/dist/OracleStoreSecretsConfig-PQMF7LFT.js.map +1 -0
  231. package/dist/OracleStoreSecretsFlowDetail-DNNOPHVA.js +197 -0
  232. package/dist/OracleStoreSecretsFlowDetail-DNNOPHVA.js.map +1 -0
  233. package/dist/ProposalCreateConfig-U5IHZNT7.js +161 -0
  234. package/dist/ProposalCreateConfig-U5IHZNT7.js.map +1 -0
  235. package/dist/ProposalCreateFlowDetail-4VZZPAWH.js +235 -0
  236. package/dist/ProposalCreateFlowDetail-4VZZPAWH.js.map +1 -0
  237. package/dist/ProposalVoteConfig-MH4MU7SL.js +150 -0
  238. package/dist/ProposalVoteConfig-MH4MU7SL.js.map +1 -0
  239. package/dist/ProposalVoteFlowDetail-IJJ3OHAB.js +280 -0
  240. package/dist/ProposalVoteFlowDetail-IJJ3OHAB.js.map +1 -0
  241. package/dist/ProtocolSelectConfig-S5U3P6K7.js +48 -0
  242. package/dist/ProtocolSelectConfig-S5U3P6K7.js.map +1 -0
  243. package/dist/ProtocolSelectFlowDetail-XBSJIEIH.js +116 -0
  244. package/dist/ProtocolSelectFlowDetail-XBSJIEIH.js.map +1 -0
  245. package/dist/RetireConfig-MV37WWZ6.js +59 -0
  246. package/dist/RetireConfig-MV37WWZ6.js.map +1 -0
  247. package/dist/RetireFlowDetail-VZ5O4SXI.js +147 -0
  248. package/dist/RetireFlowDetail-VZ5O4SXI.js.map +1 -0
  249. package/dist/SandboxProvisionConfig-ZGG4IRHM.js +46 -0
  250. package/dist/SandboxProvisionConfig-ZGG4IRHM.js.map +1 -0
  251. package/dist/SandboxProvisionFlowDetail-RUY64INV.js +79 -0
  252. package/dist/SandboxProvisionFlowDetail-RUY64INV.js.map +1 -0
  253. package/dist/WalletFundConfig-CMM3EP3B.js +117 -0
  254. package/dist/WalletFundConfig-CMM3EP3B.js.map +1 -0
  255. package/dist/WalletFundFlowDetail-TXWCZA4K.js +279 -0
  256. package/dist/WalletFundFlowDetail-TXWCZA4K.js.map +1 -0
  257. package/dist/WalletGenerateAndFundConfig-364RSEND.js +10 -0
  258. package/dist/WalletGenerateAndFundConfig-364RSEND.js.map +1 -0
  259. package/dist/WalletGenerateAndFundFlowDetail-C2LZW3NO.js +54 -0
  260. package/dist/WalletGenerateAndFundFlowDetail-C2LZW3NO.js.map +1 -0
  261. package/dist/WalletGenerateConfig-YYLCS65G.js +10 -0
  262. package/dist/WalletGenerateConfig-YYLCS65G.js.map +1 -0
  263. package/dist/WalletGenerateFlowDetail-CQCNDGJA.js +53 -0
  264. package/dist/WalletGenerateFlowDetail-CQCNDGJA.js.map +1 -0
  265. package/dist/XeroContactCreateConfig-OWG5PA3B.js +102 -0
  266. package/dist/XeroContactCreateConfig-OWG5PA3B.js.map +1 -0
  267. package/dist/XeroContactCreateFlowDetail-6MAINCF6.js +127 -0
  268. package/dist/XeroContactCreateFlowDetail-6MAINCF6.js.map +1 -0
  269. package/dist/XeroInvoiceCreateConfig-O74RUSZM.js +403 -0
  270. package/dist/XeroInvoiceCreateConfig-O74RUSZM.js.map +1 -0
  271. package/dist/XeroInvoiceCreateFlowDetail-UL7KS6CZ.js +631 -0
  272. package/dist/XeroInvoiceCreateFlowDetail-UL7KS6CZ.js.map +1 -0
  273. package/dist/XeroInvoiceListConfig-UR3GONBJ.js +113 -0
  274. package/dist/XeroInvoiceListConfig-UR3GONBJ.js.map +1 -0
  275. package/dist/XeroInvoiceListFlowDetail-LYHODWH6.js +58 -0
  276. package/dist/XeroInvoiceListFlowDetail-LYHODWH6.js.map +1 -0
  277. package/dist/XeroPaymentCreateConfig-RPMAIK6E.js +116 -0
  278. package/dist/XeroPaymentCreateConfig-RPMAIK6E.js.map +1 -0
  279. package/dist/XeroPaymentCreateFlowDetail-CF35MVIM.js +573 -0
  280. package/dist/XeroPaymentCreateFlowDetail-CF35MVIM.js.map +1 -0
  281. package/dist/action-manifest.json +2091 -393
  282. package/dist/chunk-2GAYKKTL.js +9 -0
  283. package/dist/chunk-2GAYKKTL.js.map +1 -0
  284. package/dist/chunk-2WPEATI7.js +315 -0
  285. package/dist/chunk-2WPEATI7.js.map +1 -0
  286. package/dist/chunk-3O42FYT3.js +3333 -0
  287. package/dist/chunk-3O42FYT3.js.map +1 -0
  288. package/dist/chunk-3TUYY4HK.js +20 -0
  289. package/dist/chunk-3TUYY4HK.js.map +1 -0
  290. package/dist/chunk-3XSLBJYI.js +554 -0
  291. package/dist/chunk-3XSLBJYI.js.map +1 -0
  292. package/dist/chunk-4DGCCXD6.js +710 -0
  293. package/dist/chunk-4DGCCXD6.js.map +1 -0
  294. package/dist/chunk-4NAFQF6V.js +11 -0
  295. package/dist/chunk-4NAFQF6V.js.map +1 -0
  296. package/dist/chunk-4PONO4US.js +799 -0
  297. package/dist/chunk-4PONO4US.js.map +1 -0
  298. package/dist/chunk-4TMOIK5M.js +21 -0
  299. package/dist/chunk-4TMOIK5M.js.map +1 -0
  300. package/dist/chunk-5IH3VC5I.js +102 -0
  301. package/dist/chunk-5IH3VC5I.js.map +1 -0
  302. package/dist/chunk-5NTKDOP6.js +89 -0
  303. package/dist/chunk-5NTKDOP6.js.map +1 -0
  304. package/dist/chunk-5O2SFRGU.js +18 -0
  305. package/dist/chunk-5O2SFRGU.js.map +1 -0
  306. package/dist/chunk-632JLECF.js +55 -0
  307. package/dist/chunk-632JLECF.js.map +1 -0
  308. package/dist/chunk-676HDB7K.js +95 -0
  309. package/dist/chunk-676HDB7K.js.map +1 -0
  310. package/dist/chunk-6ESTNTSH.js +223 -0
  311. package/dist/chunk-6ESTNTSH.js.map +1 -0
  312. package/dist/chunk-6GKJR52N.js +15 -0
  313. package/dist/chunk-6GKJR52N.js.map +1 -0
  314. package/dist/chunk-6L4ZIKYU.js +23 -0
  315. package/dist/chunk-6L4ZIKYU.js.map +1 -0
  316. package/dist/chunk-76YX5R4L.js +11 -0
  317. package/dist/chunk-76YX5R4L.js.map +1 -0
  318. package/dist/chunk-7J3GFMN3.js +32 -0
  319. package/dist/chunk-7J3GFMN3.js.map +1 -0
  320. package/dist/chunk-7LSARC2G.js +102 -0
  321. package/dist/chunk-7LSARC2G.js.map +1 -0
  322. package/dist/chunk-7W7UUUIE.js +609 -0
  323. package/dist/chunk-7W7UUUIE.js.map +1 -0
  324. package/dist/chunk-7ZLW7H37.js +21 -0
  325. package/dist/chunk-7ZLW7H37.js.map +1 -0
  326. package/dist/chunk-AAZHI22G.js +18 -0
  327. package/dist/chunk-AAZHI22G.js.map +1 -0
  328. package/dist/chunk-ACNE455I.js +76 -0
  329. package/dist/chunk-ACNE455I.js.map +1 -0
  330. package/dist/chunk-BKLSSLPZ.js +27 -0
  331. package/dist/chunk-BKLSSLPZ.js.map +1 -0
  332. package/dist/chunk-BZ7UPUTY.js +417 -0
  333. package/dist/chunk-BZ7UPUTY.js.map +1 -0
  334. package/dist/chunk-CGFAICUE.js +28 -0
  335. package/dist/chunk-CGFAICUE.js.map +1 -0
  336. package/dist/chunk-CMCEWQ3C.js +19 -0
  337. package/dist/chunk-CMCEWQ3C.js.map +1 -0
  338. package/dist/chunk-CP4UV436.js +41 -0
  339. package/dist/chunk-CP4UV436.js.map +1 -0
  340. package/dist/chunk-D2CQPNQG.js +27508 -0
  341. package/dist/chunk-D2CQPNQG.js.map +1 -0
  342. package/dist/chunk-DIQRZP7Z.js +51 -0
  343. package/dist/chunk-DIQRZP7Z.js.map +1 -0
  344. package/dist/chunk-EBFFDDAS.js +13 -0
  345. package/dist/chunk-EBFFDDAS.js.map +1 -0
  346. package/dist/chunk-EGVS23DR.js +85 -0
  347. package/dist/chunk-EGVS23DR.js.map +1 -0
  348. package/dist/chunk-EKBQ7K4N.js +15 -0
  349. package/dist/chunk-EKBQ7K4N.js.map +1 -0
  350. package/dist/chunk-EKQCZRAN.js +24 -0
  351. package/dist/chunk-EKQCZRAN.js.map +1 -0
  352. package/dist/chunk-EYKZIZ5J.js +48 -0
  353. package/dist/chunk-EYKZIZ5J.js.map +1 -0
  354. package/dist/{chunk-NEOPTPDF.js → chunk-F4PTFXZH.js} +11554 -22046
  355. package/dist/chunk-F4PTFXZH.js.map +1 -0
  356. package/dist/chunk-FFYZXA75.js +58 -0
  357. package/dist/chunk-FFYZXA75.js.map +1 -0
  358. package/dist/chunk-GFGDHPZ2.js +22 -0
  359. package/dist/chunk-GFGDHPZ2.js.map +1 -0
  360. package/dist/chunk-GR3CDFID.js +18 -0
  361. package/dist/chunk-GR3CDFID.js.map +1 -0
  362. package/dist/chunk-GR4SIU32.js +104 -0
  363. package/dist/chunk-GR4SIU32.js.map +1 -0
  364. package/dist/chunk-H5E46IIS.js +18 -0
  365. package/dist/chunk-H5E46IIS.js.map +1 -0
  366. package/dist/chunk-HFHVAMZL.js +22 -0
  367. package/dist/chunk-HFHVAMZL.js.map +1 -0
  368. package/dist/chunk-HRRI4BLF.js +4456 -0
  369. package/dist/chunk-HRRI4BLF.js.map +1 -0
  370. package/dist/chunk-HT6L7A5M.js +12 -0
  371. package/dist/chunk-HT6L7A5M.js.map +1 -0
  372. package/dist/chunk-I2FPFISM.js +301 -0
  373. package/dist/chunk-I2FPFISM.js.map +1 -0
  374. package/dist/chunk-IADAQJDH.js +28 -0
  375. package/dist/chunk-IADAQJDH.js.map +1 -0
  376. package/dist/chunk-IBOBCMQQ.js +99 -0
  377. package/dist/chunk-IBOBCMQQ.js.map +1 -0
  378. package/dist/chunk-IFWKRCFF.js +56 -0
  379. package/dist/chunk-IFWKRCFF.js.map +1 -0
  380. package/dist/chunk-IH4T7V4C.js +40 -0
  381. package/dist/chunk-IH4T7V4C.js.map +1 -0
  382. package/dist/chunk-IIIZZ4E4.js +1679 -0
  383. package/dist/chunk-IIIZZ4E4.js.map +1 -0
  384. package/dist/chunk-ILSFU3WD.js +83 -0
  385. package/dist/chunk-ILSFU3WD.js.map +1 -0
  386. package/dist/chunk-IX3VBV3L.js +43 -0
  387. package/dist/chunk-IX3VBV3L.js.map +1 -0
  388. package/dist/chunk-JBBFSORW.js +846 -0
  389. package/dist/chunk-JBBFSORW.js.map +1 -0
  390. package/dist/chunk-JIDTNKKL.js +1183 -0
  391. package/dist/chunk-JIDTNKKL.js.map +1 -0
  392. package/dist/chunk-JSPE6NGZ.js +22 -0
  393. package/dist/chunk-JSPE6NGZ.js.map +1 -0
  394. package/dist/chunk-JVROGQ7Q.js +150 -0
  395. package/dist/chunk-JVROGQ7Q.js.map +1 -0
  396. package/dist/chunk-K4WUMWNJ.js +32 -0
  397. package/dist/chunk-K4WUMWNJ.js.map +1 -0
  398. package/dist/chunk-K74XQ4Q5.js +11 -0
  399. package/dist/chunk-K74XQ4Q5.js.map +1 -0
  400. package/dist/chunk-KLLMJ4U3.js +22 -0
  401. package/dist/chunk-KLLMJ4U3.js.map +1 -0
  402. package/dist/chunk-LTKVCJ2E.js +27 -0
  403. package/dist/chunk-LTKVCJ2E.js.map +1 -0
  404. package/dist/chunk-M36DJTFZ.js +34 -0
  405. package/dist/chunk-M36DJTFZ.js.map +1 -0
  406. package/dist/chunk-MHM52LCJ.js +154 -0
  407. package/dist/chunk-MHM52LCJ.js.map +1 -0
  408. package/dist/chunk-MQCDMHRZ.js +59 -0
  409. package/dist/chunk-MQCDMHRZ.js.map +1 -0
  410. package/dist/chunk-N3ORMGAI.js +348 -0
  411. package/dist/chunk-N3ORMGAI.js.map +1 -0
  412. package/dist/chunk-NCSGIRRQ.js +28 -0
  413. package/dist/chunk-NCSGIRRQ.js.map +1 -0
  414. package/dist/chunk-NIXT2SBH.js +1423 -0
  415. package/dist/chunk-NIXT2SBH.js.map +1 -0
  416. package/dist/chunk-NJAII6CO.js +148 -0
  417. package/dist/chunk-NJAII6CO.js.map +1 -0
  418. package/dist/chunk-NKE4TL43.js +92 -0
  419. package/dist/chunk-NKE4TL43.js.map +1 -0
  420. package/dist/chunk-NZ7AXA7B.js +1 -0
  421. package/dist/chunk-NZ7AXA7B.js.map +1 -0
  422. package/dist/chunk-OCAYEGI2.js +26 -0
  423. package/dist/chunk-OCAYEGI2.js.map +1 -0
  424. package/dist/chunk-OMLI45ER.js +90 -0
  425. package/dist/chunk-OMLI45ER.js.map +1 -0
  426. package/dist/chunk-P7OBLJAG.js +88 -0
  427. package/dist/chunk-P7OBLJAG.js.map +1 -0
  428. package/dist/chunk-PAY3CBWL.js +2321 -0
  429. package/dist/chunk-PAY3CBWL.js.map +1 -0
  430. package/dist/chunk-PFF6VY35.js +257 -0
  431. package/dist/chunk-PFF6VY35.js.map +1 -0
  432. package/dist/chunk-PYNDJDWZ.js +1758 -0
  433. package/dist/chunk-PYNDJDWZ.js.map +1 -0
  434. package/dist/chunk-QDQ6UMMN.js +53 -0
  435. package/dist/chunk-QDQ6UMMN.js.map +1 -0
  436. package/dist/chunk-QGT3G2XG.js +24 -0
  437. package/dist/chunk-QGT3G2XG.js.map +1 -0
  438. package/dist/chunk-QZYCJ2GZ.js +55 -0
  439. package/dist/chunk-QZYCJ2GZ.js.map +1 -0
  440. package/dist/chunk-REZ7RFSA.js +124 -0
  441. package/dist/chunk-REZ7RFSA.js.map +1 -0
  442. package/dist/chunk-RRYBAE6E.js +2449 -0
  443. package/dist/chunk-RRYBAE6E.js.map +1 -0
  444. package/dist/chunk-RWUZOB62.js +34 -0
  445. package/dist/chunk-RWUZOB62.js.map +1 -0
  446. package/dist/chunk-SB5UCPZH.js +116 -0
  447. package/dist/chunk-SB5UCPZH.js.map +1 -0
  448. package/dist/chunk-SEJJ7CRI.js +99 -0
  449. package/dist/chunk-SEJJ7CRI.js.map +1 -0
  450. package/dist/chunk-SHBFGRPV.js +45 -0
  451. package/dist/chunk-SHBFGRPV.js.map +1 -0
  452. package/dist/chunk-SOFJ4GC5.js +45 -0
  453. package/dist/chunk-SOFJ4GC5.js.map +1 -0
  454. package/dist/chunk-STH2HPZK.js +44 -0
  455. package/dist/chunk-STH2HPZK.js.map +1 -0
  456. package/dist/chunk-TK3JNKME.js +28 -0
  457. package/dist/chunk-TK3JNKME.js.map +1 -0
  458. package/dist/chunk-TMONHFE3.js +46 -0
  459. package/dist/chunk-TMONHFE3.js.map +1 -0
  460. package/dist/chunk-TR4KO3AG.js +44 -0
  461. package/dist/chunk-TR4KO3AG.js.map +1 -0
  462. package/dist/chunk-TS2LNBF2.js +68 -0
  463. package/dist/chunk-TS2LNBF2.js.map +1 -0
  464. package/dist/chunk-UZUMBFPP.js +26 -0
  465. package/dist/chunk-UZUMBFPP.js.map +1 -0
  466. package/dist/chunk-VRZ5LMOW.js +176 -0
  467. package/dist/chunk-VRZ5LMOW.js.map +1 -0
  468. package/dist/chunk-WLGGY6Z6.js +75 -0
  469. package/dist/chunk-WLGGY6Z6.js.map +1 -0
  470. package/dist/chunk-WO7V6ZNC.js +11 -0
  471. package/dist/chunk-WO7V6ZNC.js.map +1 -0
  472. package/dist/chunk-WXSENSRP.js +64 -0
  473. package/dist/chunk-WXSENSRP.js.map +1 -0
  474. package/dist/chunk-XEKBZ2SA.js +19 -0
  475. package/dist/chunk-XEKBZ2SA.js.map +1 -0
  476. package/dist/chunk-XPBKU3JX.js +61 -0
  477. package/dist/chunk-XPBKU3JX.js.map +1 -0
  478. package/dist/chunk-XRYXBXWH.js +24 -0
  479. package/dist/chunk-XRYXBXWH.js.map +1 -0
  480. package/dist/chunk-XVA7QRVH.js +22 -0
  481. package/dist/chunk-XVA7QRVH.js.map +1 -0
  482. package/dist/chunk-YCTHHBSS.js +37 -0
  483. package/dist/chunk-YCTHHBSS.js.map +1 -0
  484. package/dist/chunk-YHPWD5NE.js +70 -0
  485. package/dist/chunk-YHPWD5NE.js.map +1 -0
  486. package/dist/chunk-YLNEKJQ5.js +126 -0
  487. package/dist/chunk-YLNEKJQ5.js.map +1 -0
  488. package/dist/chunk-YN4CEKCF.js +73 -0
  489. package/dist/chunk-YN4CEKCF.js.map +1 -0
  490. package/dist/chunk-YYNMESIF.js +17 -0
  491. package/dist/chunk-YYNMESIF.js.map +1 -0
  492. package/dist/chunk-Z6PRMCV6.js +1 -0
  493. package/dist/chunk-Z6PRMCV6.js.map +1 -0
  494. package/dist/chunk-ZDNW6VQG.js +11 -0
  495. package/dist/chunk-ZDNW6VQG.js.map +1 -0
  496. package/dist/chunk-ZP4D73DO.js +36 -0
  497. package/dist/chunk-ZP4D73DO.js.map +1 -0
  498. package/dist/chunk-ZUATADUV.js +26 -0
  499. package/dist/chunk-ZUATADUV.js.map +1 -0
  500. package/dist/{connections-1NtNQrsY.d.ts → connections-CEcurtWI.d.ts} +74 -9
  501. package/dist/core/index.cjs +14041 -6973
  502. package/dist/core/index.cjs.map +1 -1
  503. package/dist/core/index.d.ts +422 -138
  504. package/dist/core/index.js +425 -183
  505. package/dist/core/index.js.map +1 -1
  506. package/dist/flow-vnext/index.cjs +2842 -0
  507. package/dist/flow-vnext/index.cjs.map +1 -0
  508. package/dist/flow-vnext/index.d.ts +3 -0
  509. package/dist/flow-vnext/index.js +119 -0
  510. package/dist/flow-vnext/index.js.map +1 -0
  511. package/dist/{graphql-client-Bn0tN049.d.ts → graphql-client-B2tREsx6.d.ts} +3 -1
  512. package/dist/index-b9xxXGFs.d.ts +1230 -0
  513. package/dist/index.d.ts +5 -3
  514. package/dist/index.js +202 -37
  515. package/dist/index.js.map +1 -1
  516. package/dist/legacy-BpgIqaQ5.d.ts +14 -0
  517. package/dist/mantine/index.d.ts +7 -4
  518. package/dist/mantine/index.js +84 -30
  519. package/dist/mantine/index.js.map +1 -1
  520. package/dist/{runtime-BFwvCQDF.d.ts → types-Dqk5MTfW.d.ts} +6096 -5386
  521. package/package.json +12 -2
  522. package/dist/chunk-5JF23UP3.js +0 -59687
  523. package/dist/chunk-5JF23UP3.js.map +0 -1
  524. package/dist/chunk-A4CWC4AG.js +0 -374
  525. package/dist/chunk-A4CWC4AG.js.map +0 -1
  526. package/dist/chunk-NEOPTPDF.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/flow-vnext/index.ts","../../src/core/lib/flowEngine/vnext/canonical.ts","../../src/core/lib/flowEngine/vnext/contracts.ts","../../src/core/lib/flowEngine/vnext/ids.ts","../../src/core/lib/flowEngine/vnext/events.ts","../../src/core/lib/flowEngine/vnext/effectClaims.ts","../../src/core/lib/actionRegistry/manifestV2.ts","../../src/core/lib/actionRegistry/manifestV2.schema.ts","../../src/core/lib/flowEngine/vnext/actionContracts.ts","../../src/core/lib/flowEngine/vnext/peerExecutor.ts","../../src/core/lib/flowEngine/vnext/legacy.ts","../../src/core/lib/flowEngine/vnext/topicReceipts.ts","../../src/core/lib/flowEngine/vnext/matrixStores.ts","../../src/core/lib/flowEngine/vnext/composio.ts","../../src/core/lib/yjsTypes.ts","../../src/core/lib/flowEngine/vnext/runProjections.ts"],"sourcesContent":["export * from '../core/lib/flowEngine/vnext';\n","export type CanonicalJsonValue = null | boolean | number | string | CanonicalJsonValue[] | { [key: string]: CanonicalJsonValue };\n\n/** Recursively freeze canonical data after it crosses a signature boundary. */\nexport function deepFreezeJson<T>(value: T): T {\n if (!value || typeof value !== 'object') return value;\n for (const nested of Object.values(value as Record<string, unknown>)) deepFreezeJson(nested);\n return Object.freeze(value);\n}\n\nfunction isPlainObject(value: object): value is Record<string, unknown> {\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction assertValidUnicode(value: string): void {\n for (let index = 0; index < value.length; index += 1) {\n const codeUnit = value.charCodeAt(index);\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (!(next >= 0xdc00 && next <= 0xdfff)) {\n throw new TypeError('Canonical JSON contains an unpaired Unicode surrogate');\n }\n index += 1;\n } else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {\n throw new TypeError('Canonical JSON contains an unpaired Unicode surrogate');\n }\n }\n}\n\n/** RFC 8785 JSON canonicalization for portable Flow contracts. */\nexport function canonicalizeJson(value: CanonicalJsonValue): string {\n const ancestors = new Set<object>();\n\n const serialize = (candidate: unknown): string => {\n if (candidate === null || typeof candidate === 'boolean') return JSON.stringify(candidate);\n\n if (typeof candidate === 'string') {\n assertValidUnicode(candidate);\n return JSON.stringify(candidate);\n }\n\n if (typeof candidate === 'number') {\n if (!Number.isFinite(candidate)) throw new TypeError('Canonical JSON numbers must be finite');\n return JSON.stringify(candidate);\n }\n\n if (typeof candidate !== 'object') {\n throw new TypeError(`Canonical JSON contains a non-JSON value: ${typeof candidate}`);\n }\n\n if (ancestors.has(candidate)) throw new TypeError('Canonical JSON contains a circular reference');\n ancestors.add(candidate);\n try {\n if (Array.isArray(candidate)) return `[${candidate.map((entry) => serialize(entry)).join(',')}]`;\n if (!isPlainObject(candidate)) throw new TypeError('Canonical JSON contains a non-plain object');\n\n return `{${Object.keys(candidate)\n .sort()\n .map((key) => {\n assertValidUnicode(key);\n return `${JSON.stringify(key)}:${serialize(candidate[key])}`;\n })\n .join(',')}}`;\n } finally {\n ancestors.delete(candidate);\n }\n };\n\n return serialize(value);\n}\n\n/** Compute a portable SHA-256 content address over RFC 8785 bytes. */\nexport async function digestCanonicalJson(value: CanonicalJsonValue): Promise<`sha256:${string}`> {\n if (!globalThis.crypto?.subtle) throw new Error('Web Crypto is required to digest a Flow contract');\n const bytes = new TextEncoder().encode(canonicalizeJson(value));\n const digest = await globalThis.crypto.subtle.digest('SHA-256', bytes);\n const hex = Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, '0')).join('');\n return `sha256:${hex}`;\n}\n","import { canonicalizeJson, deepFreezeJson, digestCanonicalJson, type CanonicalJsonValue } from './canonical';\n\nexport type Brand<Value, Name extends string> = Value & { readonly __brand: Name };\nexport type FlowId = Brand<string, 'FlowId'>;\nexport type FlowRevisionId = Brand<string, 'FlowRevisionId'>;\nexport type Sha256Digest = Brand<`sha256:${string}`, 'Sha256Digest'>;\nexport type RunId = Brand<string, 'RunId'>;\nexport type AttemptId = Brand<string, 'AttemptId'>;\nexport type EventId = Brand<string, 'EventId'>;\nexport type ReceiptId = Brand<string, 'ReceiptId'>;\nexport type IdempotencyKey = Brand<string, 'IdempotencyKey'>;\nexport type DID = Brand<string, 'DID'>;\n\nexport type FlowJsonValue = CanonicalJsonValue;\nexport type FlowJsonObject = { [key: string]: FlowJsonValue };\n\nexport type ActionSafety = 'pure' | 'provider_idempotent' | 'fenced' | 'approval_only';\nexport type EffectDisposition = 'not_started' | 'armed' | 'succeeded' | 'failed_before_effect' | 'needs_verification';\nexport type FlowDataClassification = 'public' | 'shared' | 'confidential' | 'restricted';\n\nexport interface FlowDefinitionRef {\n flowId: FlowId;\n revision: FlowRevisionId;\n digest: Sha256Digest;\n}\n\n/** Identity fields copied from, and verified against, a signed Topic request. */\nexport interface TopicRequestRefV1 {\n requestId: string;\n requestKind: string;\n requestDigest: Sha256Digest;\n}\n\nexport interface ActionContractRef {\n type: string;\n can: string;\n contractVersion: string;\n contractDigest: Sha256Digest;\n manifestDigest: Sha256Digest;\n}\n\nexport interface ActionContractV1 extends ActionContractRef {\n kind: 'qi.action.contract';\n schemaVersion: '1.0';\n inputSchema: FlowJsonObject;\n outputSchema: FlowJsonObject;\n safety: ActionSafety;\n handlerVersion: string;\n dataClassification: FlowDataClassification;\n requiredServices: readonly string[];\n idempotency: {\n providerKey: boolean;\n readback: 'required' | 'supported' | 'unavailable';\n compensation: 'required' | 'supported' | 'unavailable';\n };\n}\n\nexport type FlowTriggerV1 =\n | { kind: 'manual' }\n | { kind: 'flow.start' }\n | { kind: 'step.event'; sourceBlockId: string; eventName: string }\n | { kind: 'step.event.all'; sources: readonly { sourceBlockId: string; eventName: string; alias: string; optional?: boolean }[] }\n | { kind: 'schedule'; scheduleRef: string; scheduleRevision?: number }\n | { kind: 'topic.request'; requestKind: string };\n\nexport interface FlowStepTtlV1 {\n absoluteDueDate?: string;\n fromEnablement?: string;\n fromCommitment?: string;\n}\n\nexport interface FlowStepDefinitionV1 {\n stepId: string;\n blockId: string;\n title: string;\n description?: string;\n action: ActionContractRef;\n resource: string;\n configuration: FlowJsonObject;\n inputs: FlowJsonObject;\n trigger: FlowTriggerV1;\n conditions: readonly FlowJsonObject[];\n actor: FlowJsonObject;\n ttlMs?: number;\n ttl?: FlowStepTtlV1;\n}\n\nexport interface FlowDefinitionRevisionPayloadV1 {\n kind: 'qi.flow.definition-revision';\n schemaVersion: '1.0';\n ref: Omit<FlowDefinitionRef, 'digest'>;\n parent?: FlowDefinitionRef;\n publishedAt: string;\n publishedBy: DID;\n actionManifestDigest: Sha256Digest;\n title: string;\n goal?: string;\n steps: readonly FlowStepDefinitionV1[];\n participantRequirements: readonly FlowJsonObject[];\n connectionRequirements: readonly FlowJsonObject[];\n source?: {\n operation: 'republish-legacy' | 'instantiate-template' | 'fork';\n ref: string;\n };\n}\n\nexport interface FlowContractIntegrityV1 {\n canonicalization: 'RFC8785';\n digest: { algorithm: 'SHA-256'; value: Sha256Digest };\n signature: { algorithm: string; verificationMethod: string; value: string };\n}\n\nexport type FlowDefinitionRevisionV1 = FlowDefinitionRevisionPayloadV1 & { integrity: FlowContractIntegrityV1 };\n\ndeclare const verifiedFlowDefinitionRevision: unique symbol;\nexport type VerifiedFlowDefinitionRevisionV1 = Readonly<FlowDefinitionRevisionV1> & {\n readonly [verifiedFlowDefinitionRevision]: true;\n};\n\nexport interface RuntimeContractV1 {\n kind: 'qi.flow.runtime-contract';\n protocolVersion: '1';\n minimumPeerVersion: string;\n definition: FlowDefinitionRef;\n actionManifestDigest: Sha256Digest;\n topicProtocolVersion: string;\n enabledFeatures: readonly string[];\n}\n\nexport interface ExecutionPolicyPayloadV1 {\n kind: 'qi.flow.execution-policy';\n schemaVersion: '1.0';\n definition: FlowDefinitionRef;\n mode: 'enabled' | 'pause_new_effects';\n issuedAt: string;\n expiresAt?: string;\n issuedBy: DID;\n reason?: string;\n}\n\nexport type ExecutionPolicyV1 = ExecutionPolicyPayloadV1 & { integrity: FlowContractIntegrityV1 };\n\ndeclare const verifiedExecutionPolicy: unique symbol;\nexport type VerifiedExecutionPolicyV1 = Readonly<ExecutionPolicyV1> & { readonly [verifiedExecutionPolicy]: true };\n\nexport interface ExecutionPolicySigner {\n issuerDid: DID;\n verificationMethod: string;\n algorithm: string;\n sign(data: Uint8Array): Promise<string>;\n}\n\nexport interface ExecutionPolicyTrustPolicy {\n trustedIssuerDids: readonly DID[];\n revokedIssuerDids?: readonly DID[];\n allowedSignatureAlgorithms: readonly string[];\n verifySignature(input: { issuerDid: DID; verificationMethod: string; algorithm: string; data: Uint8Array; signature: string }): Promise<boolean>;\n}\n\nexport interface VerifiedInvocation {\n cid: string;\n issuer: DID;\n audience: DID;\n can: string;\n with: string;\n expiresAt?: string;\n proofCids: readonly string[];\n definitionDigest: Sha256Digest;\n actionContractDigest?: Sha256Digest;\n idempotencyKey?: IdempotencyKey;\n /** Present only when the authorizer verified the signed Topic request caveat. */\n topicRequest?: Readonly<TopicRequestRefV1>;\n}\n\nexport interface FlowDefinitionRevisionSigner {\n issuerDid: DID;\n verificationMethod: string;\n algorithm: string;\n sign(data: Uint8Array): Promise<string>;\n}\n\nexport interface FlowDefinitionRevisionTrustPolicy {\n trustedIssuerDids: readonly DID[];\n revokedIssuerDids?: readonly DID[];\n allowedSignatureAlgorithms: readonly string[];\n verifySignature(input: { issuerDid: DID; verificationMethod: string; algorithm: string; data: Uint8Array; signature: string }): Promise<boolean>;\n}\n\nexport class FlowDefinitionVerificationError extends Error {\n constructor(\n readonly code: 'INVALID_DEFINITION' | 'DIGEST_MISMATCH' | 'SIGNER_MISMATCH' | 'UNTRUSTED_ISSUER' | 'REVOKED_ISSUER' | 'DISALLOWED_SIGNATURE_ALGORITHM' | 'INVALID_SIGNATURE',\n message: string\n ) {\n super(message);\n this.name = 'FlowDefinitionVerificationError';\n }\n}\n\nconst DEFINITION_SIGNATURE_DOMAIN = 'qi.flow.definition.v1\\0';\nconst EXECUTION_POLICY_SIGNATURE_DOMAIN = 'qi.flow.execution-policy.v1\\0';\n\nfunction asCanonical(value: unknown): CanonicalJsonValue {\n return value as CanonicalJsonValue;\n}\n\nfunction signatureInput(digest: Sha256Digest): Uint8Array {\n return new TextEncoder().encode(`${DEFINITION_SIGNATURE_DOMAIN}${digest}`);\n}\n\nfunction policySignatureInput(digest: Sha256Digest): Uint8Array {\n return new TextEncoder().encode(`${EXECUTION_POLICY_SIGNATURE_DOMAIN}${digest}`);\n}\n\nfunction assertExecutionPolicyPayload(payload: ExecutionPolicyPayloadV1): void {\n if (payload.kind !== 'qi.flow.execution-policy' || payload.schemaVersion !== '1.0') throw new Error('Unsupported Flow execution policy');\n if (payload.mode !== 'enabled' && payload.mode !== 'pause_new_effects') throw new Error('Unsupported Flow execution policy mode');\n if (!payload.definition.digest || !payload.issuedBy || !payload.issuedAt) throw new Error('Execution policy identity, issuer, and timestamp are required');\n if (payload.expiresAt && Date.parse(payload.expiresAt) <= Date.parse(payload.issuedAt)) throw new Error('Execution policy expiry must be after issuance');\n}\n\nexport async function computeExecutionPolicyDigest(payload: ExecutionPolicyPayloadV1): Promise<Sha256Digest> {\n assertExecutionPolicyPayload(payload);\n return (await digestCanonicalJson(asCanonical(payload))) as Sha256Digest;\n}\n\nexport async function signExecutionPolicy(payload: ExecutionPolicyPayloadV1, signer: ExecutionPolicySigner): Promise<ExecutionPolicyV1> {\n const snapshot = JSON.parse(canonicalizeJson(asCanonical(payload))) as ExecutionPolicyPayloadV1;\n assertExecutionPolicyPayload(snapshot);\n if (signer.issuerDid !== snapshot.issuedBy || !signer.verificationMethod.startsWith(`${snapshot.issuedBy}#`)) {\n throw new Error('Execution policy signer does not match the issuer');\n }\n const digest = await computeExecutionPolicyDigest(snapshot);\n const signature = await signer.sign(policySignatureInput(digest));\n if (!signature) throw new Error('Execution policy signer returned an empty signature');\n return {\n ...snapshot,\n integrity: {\n canonicalization: 'RFC8785',\n digest: { algorithm: 'SHA-256', value: digest },\n signature: { algorithm: signer.algorithm, verificationMethod: signer.verificationMethod, value: signature },\n },\n };\n}\n\nexport async function verifyExecutionPolicy(candidate: ExecutionPolicyV1, policy: ExecutionPolicyTrustPolicy, now = new Date()): Promise<VerifiedExecutionPolicyV1> {\n const snapshot = JSON.parse(canonicalizeJson(asCanonical(candidate))) as ExecutionPolicyV1;\n const { integrity, ...payload } = snapshot;\n assertExecutionPolicyPayload(payload);\n const digest = await computeExecutionPolicyDigest(payload);\n if (digest !== integrity.digest.value) throw new Error('Execution policy digest does not match its content');\n if (!policy.trustedIssuerDids.includes(payload.issuedBy)) throw new Error(`Execution policy issuer is not trusted: ${payload.issuedBy}`);\n if (policy.revokedIssuerDids?.includes(payload.issuedBy)) throw new Error(`Execution policy issuer is revoked: ${payload.issuedBy}`);\n if (!policy.allowedSignatureAlgorithms.includes(integrity.signature.algorithm))\n throw new Error(`Execution policy signature algorithm is not allowed: ${integrity.signature.algorithm}`);\n if (!integrity.signature.verificationMethod.startsWith(`${payload.issuedBy}#`)) throw new Error('Execution policy verification method does not belong to the issuer');\n if (payload.expiresAt && Date.parse(payload.expiresAt) <= now.getTime()) throw new Error('Execution policy is expired');\n const valid = await policy.verifySignature({\n issuerDid: payload.issuedBy,\n verificationMethod: integrity.signature.verificationMethod,\n algorithm: integrity.signature.algorithm,\n data: policySignatureInput(digest),\n signature: integrity.signature.value,\n });\n if (!valid) throw new Error('Execution policy signature verification failed');\n return deepFreezeJson(snapshot) as VerifiedExecutionPolicyV1;\n}\n\nfunction assertDefinitionPayload(payload: FlowDefinitionRevisionPayloadV1): void {\n if (payload.kind !== 'qi.flow.definition-revision' || payload.schemaVersion !== '1.0') {\n throw new FlowDefinitionVerificationError('INVALID_DEFINITION', 'Unsupported Flow definition contract');\n }\n if (!payload.ref.flowId || !payload.ref.revision || !payload.publishedBy || payload.steps.length === 0) {\n throw new FlowDefinitionVerificationError('INVALID_DEFINITION', 'Flow definition identity, publisher, and steps are required');\n }\n const stepIds = new Set<string>();\n for (const step of payload.steps) {\n if (!step.stepId || !step.blockId || !step.action.contractDigest || !step.action.manifestDigest) {\n throw new FlowDefinitionVerificationError('INVALID_DEFINITION', 'Every Flow step must pin its identity and Action contract');\n }\n if (step.action.manifestDigest !== payload.actionManifestDigest) {\n throw new FlowDefinitionVerificationError('INVALID_DEFINITION', `Flow step ${step.stepId} does not use the revision Action manifest`);\n }\n if (stepIds.has(step.stepId)) throw new FlowDefinitionVerificationError('INVALID_DEFINITION', `Duplicate Flow step id: ${step.stepId}`);\n if (step.trigger.kind === 'schedule') {\n if (!step.trigger.scheduleRef || (step.trigger.scheduleRevision !== undefined && (!Number.isInteger(step.trigger.scheduleRevision) || step.trigger.scheduleRevision < 1))) {\n throw new FlowDefinitionVerificationError('INVALID_DEFINITION', `Flow step ${step.stepId} has an invalid schedule binding`);\n }\n }\n if (step.trigger.kind === 'topic.request' && !step.trigger.requestKind.trim()) {\n throw new FlowDefinitionVerificationError('INVALID_DEFINITION', `Flow step ${step.stepId} has an invalid Topic request kind`);\n }\n if (step.ttlMs !== undefined && (!Number.isFinite(step.ttlMs) || step.ttlMs < 0)) {\n throw new FlowDefinitionVerificationError('INVALID_DEFINITION', `Flow step ${step.stepId} has an invalid ttlMs`);\n }\n if (step.ttl?.absoluteDueDate && !Number.isFinite(Date.parse(step.ttl.absoluteDueDate))) {\n throw new FlowDefinitionVerificationError('INVALID_DEFINITION', `Flow step ${step.stepId} has an invalid absolute TTL`);\n }\n for (const duration of [step.ttl?.fromEnablement, step.ttl?.fromCommitment]) {\n const match = duration ? /^P(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?)?$/u.exec(duration) : undefined;\n if (duration && (!match || !match.slice(1).some((part) => Number(part ?? 0) > 0))) {\n throw new FlowDefinitionVerificationError('INVALID_DEFINITION', `Flow step ${step.stepId} has an invalid relative TTL`);\n }\n }\n stepIds.add(step.stepId);\n }\n}\n\nexport async function computeFlowDefinitionDigest(payload: FlowDefinitionRevisionPayloadV1): Promise<Sha256Digest> {\n assertDefinitionPayload(payload);\n return (await digestCanonicalJson(asCanonical(payload))) as Sha256Digest;\n}\n\nexport async function signFlowDefinitionRevision(payload: FlowDefinitionRevisionPayloadV1, signer: FlowDefinitionRevisionSigner): Promise<FlowDefinitionRevisionV1> {\n const snapshot = JSON.parse(canonicalizeJson(asCanonical(payload))) as FlowDefinitionRevisionPayloadV1;\n assertDefinitionPayload(snapshot);\n if (signer.issuerDid !== snapshot.publishedBy || !signer.verificationMethod.startsWith(`${snapshot.publishedBy}#`)) {\n throw new FlowDefinitionVerificationError('SIGNER_MISMATCH', 'Flow definition signer does not match the publisher');\n }\n const digest = await computeFlowDefinitionDigest(snapshot);\n const signature = await signer.sign(signatureInput(digest));\n if (!signature) throw new FlowDefinitionVerificationError('INVALID_SIGNATURE', 'Flow definition signer returned an empty signature');\n return {\n ...snapshot,\n integrity: {\n canonicalization: 'RFC8785',\n digest: { algorithm: 'SHA-256', value: digest },\n signature: { algorithm: signer.algorithm, verificationMethod: signer.verificationMethod, value: signature },\n },\n };\n}\n\nexport async function verifyFlowDefinitionRevision(candidate: FlowDefinitionRevisionV1, policy: FlowDefinitionRevisionTrustPolicy): Promise<VerifiedFlowDefinitionRevisionV1> {\n const snapshot = JSON.parse(canonicalizeJson(asCanonical(candidate))) as FlowDefinitionRevisionV1;\n const { integrity, ...payload } = snapshot;\n assertDefinitionPayload(payload);\n const digest = await computeFlowDefinitionDigest(payload);\n if (digest !== integrity.digest.value) throw new FlowDefinitionVerificationError('DIGEST_MISMATCH', 'Flow definition digest does not match its content');\n if (!policy.trustedIssuerDids.includes(payload.publishedBy)) {\n throw new FlowDefinitionVerificationError('UNTRUSTED_ISSUER', `Flow definition issuer is not trusted: ${payload.publishedBy}`);\n }\n if (policy.revokedIssuerDids?.includes(payload.publishedBy)) {\n throw new FlowDefinitionVerificationError('REVOKED_ISSUER', `Flow definition issuer is revoked: ${payload.publishedBy}`);\n }\n if (!policy.allowedSignatureAlgorithms.includes(integrity.signature.algorithm)) {\n throw new FlowDefinitionVerificationError('DISALLOWED_SIGNATURE_ALGORITHM', `Flow definition signature algorithm is not allowed: ${integrity.signature.algorithm}`);\n }\n if (!integrity.signature.verificationMethod.startsWith(`${payload.publishedBy}#`)) {\n throw new FlowDefinitionVerificationError('SIGNER_MISMATCH', 'Flow definition verification method does not belong to the publisher');\n }\n const verified = await policy.verifySignature({\n issuerDid: payload.publishedBy,\n verificationMethod: integrity.signature.verificationMethod,\n algorithm: integrity.signature.algorithm,\n data: signatureInput(digest),\n signature: integrity.signature.value,\n });\n if (!verified) throw new FlowDefinitionVerificationError('INVALID_SIGNATURE', 'Flow definition signature verification failed');\n return deepFreezeJson(snapshot) as VerifiedFlowDefinitionRevisionV1;\n}\n\nexport interface FlowDefinitionRevisionRepository {\n get(ref: FlowDefinitionRef): Promise<VerifiedFlowDefinitionRevisionV1 | null>;\n publish(revision: FlowDefinitionRevisionV1, expectedParent?: FlowDefinitionRef): Promise<'published' | 'exists' | 'parent_conflict'>;\n}\n\nexport interface VerifiedActionContractResolver {\n resolve(ref: ActionContractRef): Promise<ActionContractV1>;\n}\n\nexport const FLOW_CAPABILITIES = {\n definitionRead: 'flow/definition.read',\n definitionWrite: 'flow/definition.write',\n definitionPublish: 'flow/definition.publish',\n definitionClone: 'flow/definition.clone',\n runStart: 'flow/run.start',\n runClose: 'flow/run.close',\n runCancel: 'flow/run.cancel',\n actionExecute: 'flow/action.execute',\n topicBindFlow: 'topic/bind-flow',\n topicRequestAction: 'topic/request-action',\n topicRecordAction: 'topic/record-action',\n} as const;\n\nfunction segment(value: string): string {\n return encodeURIComponent(value);\n}\n\nexport function buildFlowResourceUri(\n definition: Pick<FlowDefinitionRef, 'flowId' | 'revision'>,\n target?: { kind: 'run'; runId: RunId } | { kind: 'step'; stepId: string; runId?: RunId }\n): string {\n const root = `ixo:flow:${segment(definition.flowId)}@${segment(definition.revision)}`;\n if (!target) return root;\n if (target.kind === 'run') return `${root}/runs/${segment(target.runId)}`;\n const run = target.runId ? `/runs/${segment(target.runId)}` : '';\n return `${root}${run}/steps/${segment(target.stepId)}`;\n}\n","import { digestCanonicalJson } from './canonical';\nimport type { ActionContractRef, AttemptId, EventId, FlowDefinitionRef, FlowJsonValue, IdempotencyKey, ReceiptId, RunId, Sha256Digest } from './contracts';\n\nasync function deriveId<Id extends string>(namespace: string, parts: FlowJsonValue): Promise<Id> {\n const digest = await digestCanonicalJson({ namespace, parts });\n return `${namespace}:${digest.slice('sha256:'.length)}` as Id;\n}\n\nexport function deriveRunId(definition: FlowDefinitionRef, launchKind: string, launchNonce: string): Promise<RunId> {\n return deriveId<RunId>('run', [definition.digest, launchKind, launchNonce]);\n}\n\nexport function deriveAttemptId(params: { runId: RunId; stepId: string; idempotencyKey: IdempotencyKey; inputDigest: Sha256Digest }): Promise<AttemptId> {\n return deriveId<AttemptId>('attempt', [params.runId, params.stepId, params.idempotencyKey, params.inputDigest]);\n}\n\nexport function deriveEventId(unsignedEvent: FlowJsonValue): Promise<EventId> {\n return deriveId<EventId>('event', unsignedEvent);\n}\n\nexport function deriveReceiptId(params: { topicRequestId: string; attemptId: AttemptId; phase: string; eventId: EventId }): Promise<ReceiptId> {\n return deriveId<ReceiptId>('receipt', [params.topicRequestId, params.attemptId, params.phase, params.eventId]);\n}\n\nexport function deriveEffectClaimKey(params: {\n definition: FlowDefinitionRef;\n runId: RunId;\n stepId: string;\n attemptId: AttemptId;\n actorDid: string;\n inputDigest: Sha256Digest;\n action: ActionContractRef;\n topicBindingId?: string;\n}): Promise<Sha256Digest> {\n return digestCanonicalJson([\n params.definition.digest,\n params.runId,\n params.stepId,\n params.attemptId,\n params.actorDid,\n params.inputDigest,\n params.action.contractDigest,\n params.topicBindingId ?? null,\n ]) as Promise<Sha256Digest>;\n}\n","import { canonicalizeJson, deepFreezeJson, digestCanonicalJson, type CanonicalJsonValue } from './canonical';\nimport { deriveEventId } from './ids';\nimport type { AttemptId, DID, EffectDisposition, EventId, FlowDefinitionRef, FlowJsonObject, FlowJsonValue, IdempotencyKey, ReceiptId, RunId, Sha256Digest } from './contracts';\n\nexport interface RunGenesisV1 {\n kind: 'qi.flow.run-genesis';\n schemaVersion: '1.0';\n runId: RunId;\n definition: FlowDefinitionRef;\n launchKind: 'manual' | 'topic.request' | 'schedule' | 'event';\n launchNonce: string;\n requiredStepIds: readonly string[];\n startedBy: DID;\n startedAt: string;\n topicBindingId?: string;\n}\n\nexport interface ActionOutcomeEvidenceV1 {\n name: string;\n payload: FlowJsonObject;\n payloadDigest: Sha256Digest;\n}\n\nexport type RunTerminalStatusV1 = 'completed' | 'failed' | 'cancelled';\n\nexport interface RunFinalizationAttemptSummaryV1 {\n attemptId: AttemptId;\n stepId: string;\n disposition: EffectDisposition;\n receiptIds: readonly ReceiptId[];\n}\n\nexport interface RunFinalizationSummaryV1 {\n kind: 'qi.flow.run-finalization-summary';\n schemaVersion: '1.0';\n status: RunTerminalStatusV1;\n cancelRequested: boolean;\n requiredStepIds: readonly string[];\n frontierEventIds: readonly EventId[];\n attempts: readonly RunFinalizationAttemptSummaryV1[];\n}\n\nexport type FlowEventPayloadV1 =\n | { kind: 'run.started'; genesis: RunGenesisV1 }\n | { kind: 'run.cancel_requested'; reason?: string }\n | { kind: 'action.requested'; attemptId: AttemptId; stepId: string; inputDigest: Sha256Digest }\n | { kind: 'action.approval_proposed'; attemptId: AttemptId; stepId: string; proposalDigest: Sha256Digest }\n | { kind: 'action.started'; attemptId: AttemptId; stepId: string }\n | { kind: 'action.effect_armed'; attemptId: AttemptId; stepId: string; claimKey: Sha256Digest; fencingEpoch: number }\n | {\n kind: 'action.succeeded';\n attemptId: AttemptId;\n stepId: string;\n outputDigest: Sha256Digest;\n outcomes?: readonly ActionOutcomeEvidenceV1[];\n providerCorrelation?: string;\n claimKey?: Sha256Digest;\n fencingEpoch?: number;\n }\n | ({ kind: 'action.outcome_emitted'; attemptId: AttemptId; stepId: string } & ActionOutcomeEvidenceV1)\n | { kind: 'action.failed_before_effect'; attemptId: AttemptId; stepId: string; error: FlowJsonObject }\n | { kind: 'action.needs_verification'; attemptId: AttemptId; stepId: string; providerCorrelation?: string; reason: string }\n | { kind: 'receipt.persisted'; attemptId: AttemptId; receiptId: ReceiptId; receiptDigest: Sha256Digest }\n | { kind: 'run.finalized'; status: RunTerminalStatusV1; summary: RunFinalizationSummaryV1; summaryDigest: Sha256Digest }\n | { kind: 'log'; level: 'debug' | 'info' | 'warn' | 'error'; message: string; data?: FlowJsonValue };\n\nexport interface UnsignedFlowEventEnvelopeV1 {\n kind: 'qi.flow.event';\n schemaVersion: '1.0';\n runId: RunId;\n definition: FlowDefinitionRef;\n producer: DID;\n actor: DID;\n occurredAt: string;\n parents: readonly EventId[];\n causationId?: EventId;\n correlationId: string;\n idempotencyKey: IdempotencyKey;\n commandFingerprint: Sha256Digest;\n /** Content references for verified UCAN invocations/delegations; never raw credentials. */\n proofReferences: readonly string[];\n payload: FlowEventPayloadV1;\n}\n\nexport type FlowEventEnvelopeV1 = UnsignedFlowEventEnvelopeV1 & {\n eventId: EventId;\n signature: { algorithm: string; verificationMethod: string; value: string };\n};\n\ndeclare const verifiedFlowEvent: unique symbol;\nexport type VerifiedFlowEventEnvelopeV1 = Readonly<FlowEventEnvelopeV1> & { readonly [verifiedFlowEvent]: true };\n\nexport interface FlowEventSigner {\n producerDid: DID;\n verificationMethod: string;\n algorithm: string;\n sign(data: Uint8Array): Promise<string>;\n}\n\nexport interface FlowEventTrustPolicy {\n isTrustedProducer(did: DID, verificationMethod: string): Promise<boolean>;\n allowedSignatureAlgorithms: readonly string[];\n verifySignature(input: { producerDid: DID; verificationMethod: string; algorithm: string; data: Uint8Array; signature: string }): Promise<boolean>;\n}\n\nconst EVENT_SIGNATURE_DOMAIN = 'qi.flow.event.v1\\0';\n\n/** A deterministic carrier-content failure. Infrastructure failures from trust services are intentionally not wrapped. */\nexport class FlowEventValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'FlowEventValidationError';\n }\n}\n\nfunction signatureInput(eventId: EventId): Uint8Array {\n return new TextEncoder().encode(`${EVENT_SIGNATURE_DOMAIN}${eventId}`);\n}\n\nfunction flowEventSnapshot(value: unknown): FlowEventEnvelopeV1 {\n let snapshot: unknown;\n try {\n snapshot = JSON.parse(canonicalizeJson(value as CanonicalJsonValue));\n } catch {\n throw new FlowEventValidationError('Flow event content cannot be canonicalized');\n }\n if (!snapshot || typeof snapshot !== 'object' || Array.isArray(snapshot)) throw new FlowEventValidationError('Flow event envelope is malformed');\n return snapshot as FlowEventEnvelopeV1;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every((entry) => typeof entry === 'string');\n}\n\nfunction hasDefinitionRefShape(value: unknown): boolean {\n return isRecord(value) && typeof value.flowId === 'string' && typeof value.revision === 'string' && typeof value.digest === 'string';\n}\n\nfunction hasAttemptShape(payload: Record<string, unknown>): boolean {\n return typeof payload.attemptId === 'string' && typeof payload.stepId === 'string';\n}\n\nfunction assertVerifiedEnvelopeShape(snapshot: FlowEventEnvelopeV1): void {\n if (\n snapshot.kind !== 'qi.flow.event' ||\n snapshot.schemaVersion !== '1.0' ||\n typeof snapshot.eventId !== 'string' ||\n typeof snapshot.runId !== 'string' ||\n !hasDefinitionRefShape(snapshot.definition) ||\n typeof snapshot.producer !== 'string' ||\n typeof snapshot.actor !== 'string' ||\n typeof snapshot.occurredAt !== 'string' ||\n !isStringArray(snapshot.parents) ||\n (snapshot.causationId !== undefined && typeof snapshot.causationId !== 'string') ||\n typeof snapshot.correlationId !== 'string' ||\n typeof snapshot.idempotencyKey !== 'string' ||\n typeof snapshot.commandFingerprint !== 'string' ||\n !isStringArray(snapshot.proofReferences) ||\n !isRecord(snapshot.signature) ||\n typeof snapshot.signature.algorithm !== 'string' ||\n typeof snapshot.signature.verificationMethod !== 'string' ||\n typeof snapshot.signature.value !== 'string' ||\n !isRecord(snapshot.payload) ||\n typeof snapshot.payload.kind !== 'string'\n ) {\n throw new FlowEventValidationError('Flow event envelope is malformed');\n }\n\n const payload = snapshot.payload as unknown as Record<string, unknown>;\n switch (payload.kind) {\n case 'run.started': {\n const genesis = payload.genesis;\n if (\n !isRecord(genesis) ||\n genesis.kind !== 'qi.flow.run-genesis' ||\n genesis.schemaVersion !== '1.0' ||\n typeof genesis.runId !== 'string' ||\n !hasDefinitionRefShape(genesis.definition) ||\n !['manual', 'topic.request', 'schedule', 'event'].includes(String(genesis.launchKind)) ||\n typeof genesis.launchNonce !== 'string' ||\n !isStringArray(genesis.requiredStepIds) ||\n typeof genesis.startedBy !== 'string' ||\n typeof genesis.startedAt !== 'string' ||\n (genesis.topicBindingId !== undefined && typeof genesis.topicBindingId !== 'string')\n ) {\n throw new FlowEventValidationError('Flow run genesis is malformed');\n }\n break;\n }\n case 'run.cancel_requested':\n if (payload.reason !== undefined && typeof payload.reason !== 'string') throw new FlowEventValidationError('Flow cancellation reason is malformed');\n break;\n case 'action.requested':\n if (!hasAttemptShape(payload) || typeof payload.inputDigest !== 'string') throw new FlowEventValidationError('Flow Action request is malformed');\n break;\n case 'action.approval_proposed':\n if (!hasAttemptShape(payload) || typeof payload.proposalDigest !== 'string') throw new FlowEventValidationError('Flow Action approval proposal is malformed');\n break;\n case 'action.started':\n if (!hasAttemptShape(payload)) throw new FlowEventValidationError('Flow Action start is malformed');\n break;\n case 'action.effect_armed':\n if (!hasAttemptShape(payload) || typeof payload.claimKey !== 'string' || !Number.isSafeInteger(payload.fencingEpoch) || Number(payload.fencingEpoch) < 1) {\n throw new FlowEventValidationError('Flow Action fence is malformed');\n }\n break;\n case 'action.succeeded':\n if (\n !hasAttemptShape(payload) ||\n typeof payload.outputDigest !== 'string' ||\n (payload.providerCorrelation !== undefined && typeof payload.providerCorrelation !== 'string') ||\n (payload.claimKey !== undefined && typeof payload.claimKey !== 'string') ||\n (payload.fencingEpoch !== undefined && (!Number.isSafeInteger(payload.fencingEpoch) || Number(payload.fencingEpoch) < 1)) ||\n (payload.outcomes !== undefined && !Array.isArray(payload.outcomes))\n ) {\n throw new FlowEventValidationError('Flow Action success is malformed');\n }\n break;\n case 'action.outcome_emitted':\n if (!hasAttemptShape(payload)) throw new FlowEventValidationError('Flow Action outcome is malformed');\n break;\n case 'action.failed_before_effect':\n if (!hasAttemptShape(payload) || !isRecord(payload.error)) throw new FlowEventValidationError('Flow Action failure is malformed');\n break;\n case 'action.needs_verification':\n if (!hasAttemptShape(payload) || typeof payload.reason !== 'string' || (payload.providerCorrelation !== undefined && typeof payload.providerCorrelation !== 'string')) {\n throw new FlowEventValidationError('Flow Action verification state is malformed');\n }\n break;\n case 'receipt.persisted':\n if (typeof payload.attemptId !== 'string' || typeof payload.receiptId !== 'string' || typeof payload.receiptDigest !== 'string') {\n throw new FlowEventValidationError('Flow receipt evidence is malformed');\n }\n break;\n case 'run.finalized': {\n const summary = payload.summary;\n if (\n !['completed', 'failed', 'cancelled'].includes(String(payload.status)) ||\n !isRecord(summary) ||\n summary.kind !== 'qi.flow.run-finalization-summary' ||\n summary.schemaVersion !== '1.0' ||\n summary.status !== payload.status ||\n typeof summary.cancelRequested !== 'boolean' ||\n !isStringArray(summary.requiredStepIds) ||\n !isStringArray(summary.frontierEventIds) ||\n !Array.isArray(summary.attempts) ||\n !summary.attempts.every(\n (attempt) =>\n isRecord(attempt) &&\n typeof attempt.attemptId === 'string' &&\n typeof attempt.stepId === 'string' &&\n ['not_started', 'armed', 'succeeded', 'failed_before_effect', 'needs_verification'].includes(String(attempt.disposition)) &&\n isStringArray(attempt.receiptIds)\n ) ||\n typeof payload.summaryDigest !== 'string'\n ) {\n throw new FlowEventValidationError('Flow run finalization is malformed');\n }\n break;\n }\n case 'log':\n if (!['debug', 'info', 'warn', 'error'].includes(String(payload.level)) || typeof payload.message !== 'string') {\n throw new FlowEventValidationError('Flow log event is malformed');\n }\n break;\n default:\n throw new FlowEventValidationError(`Unsupported Flow event payload: ${String(payload.kind)}`);\n }\n}\n\nexport async function signFlowEvent(unsigned: UnsignedFlowEventEnvelopeV1, signer: FlowEventSigner): Promise<FlowEventEnvelopeV1> {\n const snapshot = flowEventSnapshot(unsigned);\n const { eventId: _eventId, signature: _signature, ...unsignedSnapshot } = snapshot;\n if (unsignedSnapshot.producer !== signer.producerDid || !signer.verificationMethod.startsWith(`${unsignedSnapshot.producer}#`)) {\n throw new Error('Flow event signer does not match the producer');\n }\n const eventId = await deriveEventId(unsignedSnapshot as unknown as FlowJsonValue);\n const signature = await signer.sign(signatureInput(eventId));\n if (!signature) throw new Error('Flow event signer returned an empty signature');\n return {\n ...unsignedSnapshot,\n eventId,\n signature: { algorithm: signer.algorithm, verificationMethod: signer.verificationMethod, value: signature },\n };\n}\n\nexport async function verifyFlowEvent(event: FlowEventEnvelopeV1, policy: FlowEventTrustPolicy): Promise<VerifiedFlowEventEnvelopeV1> {\n const snapshot = flowEventSnapshot(event);\n assertVerifiedEnvelopeShape(snapshot);\n const { eventId, signature, ...unsigned } = snapshot;\n // `snapshot` already crossed the synchronous canonical-JSON boundary. A\n // digest failure here is infrastructure failure and must keep replay down.\n const expectedId = await deriveEventId(unsigned as unknown as FlowJsonValue);\n if (expectedId !== eventId) throw new FlowEventValidationError('Flow event content does not match its event id');\n const outcomes = snapshot.payload.kind === 'action.succeeded' ? snapshot.payload.outcomes ?? [] : snapshot.payload.kind === 'action.outcome_emitted' ? [snapshot.payload] : [];\n const seenOutcomes = new Set<string>();\n for (const outcome of outcomes) {\n if (typeof outcome.name !== 'string' || !outcome.name.trim()) throw new FlowEventValidationError('Flow event outcome name is required');\n if (!outcome.payload || typeof outcome.payload !== 'object' || Array.isArray(outcome.payload) || typeof outcome.payloadDigest !== 'string') {\n throw new FlowEventValidationError(`Flow event outcome payload is malformed: ${outcome.name}`);\n }\n const actualDigest = (await digestCanonicalJson(outcome.payload)) as Sha256Digest;\n if (actualDigest !== outcome.payloadDigest) throw new FlowEventValidationError(`Flow event outcome payload digest mismatch: ${outcome.name}`);\n const identity = `${outcome.name}\\0${outcome.payloadDigest}`;\n if (seenOutcomes.has(identity)) throw new FlowEventValidationError(`Flow event contains a duplicate outcome: ${outcome.name}`);\n seenOutcomes.add(identity);\n }\n if (snapshot.payload.kind === 'run.finalized') {\n if (!snapshot.payload.summary || typeof snapshot.payload.summary !== 'object' || Array.isArray(snapshot.payload.summary)) {\n throw new FlowEventValidationError('Flow run finalization summary is malformed');\n }\n const actualDigest = (await digestCanonicalJson(snapshot.payload.summary as unknown as CanonicalJsonValue)) as Sha256Digest;\n if (actualDigest !== snapshot.payload.summaryDigest) throw new FlowEventValidationError('Flow run finalization summary digest mismatch');\n }\n if (!signature.verificationMethod.startsWith(`${snapshot.producer}#`)) throw new FlowEventValidationError('Flow event verification method does not belong to the producer');\n if (!policy.allowedSignatureAlgorithms.includes(signature.algorithm)) {\n throw new FlowEventValidationError(`Flow event signature algorithm is not allowed: ${signature.algorithm}`);\n }\n if (!(await policy.isTrustedProducer(snapshot.producer, signature.verificationMethod))) {\n throw new FlowEventValidationError(`Flow event producer is not trusted: ${snapshot.producer}`);\n }\n if (\n !(await policy.verifySignature({\n producerDid: snapshot.producer,\n verificationMethod: signature.verificationMethod,\n algorithm: signature.algorithm,\n data: signatureInput(eventId),\n signature: signature.value,\n }))\n ) {\n throw new FlowEventValidationError('Flow event signature verification failed');\n }\n return deepFreezeJson(snapshot) as VerifiedFlowEventEnvelopeV1;\n}\n\nexport interface FlowEventAppendResult {\n outcome: 'appended' | 'duplicate' | 'conflict';\n eventId: EventId;\n streamVersion: number;\n}\n\nexport interface RejectedMatrixFlowEventV1 {\n /** Matrix room-event identity of the rejected carrier, never the producer-claimed Flow event ID. */\n carrierEventId: string;\n event: FlowEventEnvelopeV1;\n reason: string;\n}\n\nexport interface MatrixFlowEventObservationV1 {\n acceptedEvents: readonly VerifiedFlowEventEnvelopeV1[];\n rejectedEvents: readonly RejectedMatrixFlowEventV1[];\n}\n\nexport interface MatrixFlowEventStore {\n append(event: FlowEventEnvelopeV1, transactionId: string): Promise<FlowEventAppendResult>;\n /** Observe authenticated events and rejected carrier payloads separately. */\n inspect(runId: RunId, options?: { after?: EventId; limit?: number }): Promise<MatrixFlowEventObservationV1>;\n /** Convenience replay view containing authenticated events only. */\n read(runId: RunId, options?: { after?: EventId; limit?: number }): Promise<readonly VerifiedFlowEventEnvelopeV1[]>;\n}\n\nexport function matrixFlowEventTransactionId(event: Pick<FlowEventEnvelopeV1, 'eventId'>): string {\n return `qi-flow-v1-${event.eventId}`;\n}\n\nexport interface ReducedAttemptV1 {\n attemptId: AttemptId;\n stepId: string;\n disposition: EffectDisposition;\n outputDigest?: Sha256Digest;\n providerCorrelation?: string;\n receiptIds: readonly ReceiptId[];\n outcomes: readonly ActionOutcomeEvidenceV1[];\n}\n\nexport interface ReducedFlowRunV1 {\n runId: RunId;\n definition: FlowDefinitionRef;\n status: 'queued' | 'running' | 'cancelling' | 'needs_verification' | 'completed' | 'failed' | 'cancelled';\n attempts: Readonly<Record<string, ReducedAttemptV1>>;\n cancelRequested: boolean;\n frontierEventIds: readonly EventId[];\n finalizationCandidate?: {\n status: RunTerminalStatusV1;\n summary: RunFinalizationSummaryV1;\n };\n finalizedEventIds: readonly EventId[];\n acceptedEventIds: readonly EventId[];\n invalidEvents: readonly { eventId: EventId; reason: string }[];\n}\n\nfunction eventHasAncestor(event: FlowEventEnvelopeV1, ancestor: EventId, byId: Map<EventId, FlowEventEnvelopeV1>, seen = new Set<EventId>()): boolean {\n if (seen.has(event.eventId)) return false;\n seen.add(event.eventId);\n for (const parent of event.parents) {\n if (parent === ancestor) return true;\n const parentEvent = byId.get(parent);\n if (parentEvent && eventHasAncestor(parentEvent, ancestor, byId, seen)) return true;\n }\n return false;\n}\n\nfunction causalOrder(\n events: readonly FlowEventEnvelopeV1[],\n byId: Map<EventId, FlowEventEnvelopeV1>\n): {\n ordered: FlowEventEnvelopeV1[];\n cyclic: Set<EventId>;\n} {\n const indegree = new Map(events.map((event) => [event.eventId, 0]));\n const children = new Map<EventId, EventId[]>();\n for (const event of events) {\n for (const parent of event.parents) {\n if (!byId.has(parent)) continue;\n indegree.set(event.eventId, (indegree.get(event.eventId) ?? 0) + 1);\n children.set(parent, [...(children.get(parent) ?? []), event.eventId]);\n }\n }\n\n const ready = events\n .filter((event) => indegree.get(event.eventId) === 0)\n .map((event) => event.eventId)\n .sort();\n const ordered: FlowEventEnvelopeV1[] = [];\n while (ready.length > 0) {\n const eventId = ready.shift() as EventId;\n const event = byId.get(eventId);\n if (!event) continue;\n ordered.push(event);\n for (const childId of (children.get(eventId) ?? []).sort()) {\n const next = (indegree.get(childId) ?? 0) - 1;\n indegree.set(childId, next);\n if (next === 0) {\n ready.push(childId);\n ready.sort();\n }\n }\n }\n\n const orderedIds = new Set(ordered.map((event) => event.eventId));\n return { ordered, cyclic: new Set(events.filter((event) => !orderedIds.has(event.eventId)).map((event) => event.eventId)) };\n}\n\nfunction hasAcceptedAncestor(\n event: FlowEventEnvelopeV1,\n byId: Map<EventId, FlowEventEnvelopeV1>,\n accepted: Set<EventId>,\n predicate: (candidate: FlowEventEnvelopeV1) => boolean\n): boolean {\n const pending = [...event.parents];\n const seen = new Set<EventId>();\n while (pending.length > 0) {\n const eventId = pending.pop() as EventId;\n if (seen.has(eventId)) continue;\n seen.add(eventId);\n const candidate = byId.get(eventId);\n if (!candidate || !accepted.has(eventId)) continue;\n if (predicate(candidate)) return true;\n pending.push(...candidate.parents);\n }\n return false;\n}\n\nfunction attemptChainError(event: FlowEventEnvelopeV1, byId: Map<EventId, FlowEventEnvelopeV1>, accepted: Set<EventId>): string | undefined {\n const payload = event.payload;\n if (!('attemptId' in payload) || payload.kind === 'action.requested') return undefined;\n if (payload.kind === 'receipt.persisted') {\n return hasAcceptedAncestor(event, byId, accepted, (candidate) => candidate.payload.kind === 'action.succeeded' && candidate.payload.attemptId === payload.attemptId)\n ? undefined\n : 'missing_success_ancestor';\n }\n if (!('stepId' in payload)) return undefined;\n const sameAttemptAndStep = (candidate: FlowEventEnvelopeV1): boolean => {\n const candidatePayload = candidate.payload;\n return 'attemptId' in candidatePayload && 'stepId' in candidatePayload && candidatePayload.attemptId === payload.attemptId && candidatePayload.stepId === payload.stepId;\n };\n if (payload.kind === 'action.outcome_emitted') {\n return hasAcceptedAncestor(event, byId, accepted, (candidate) => {\n if (!sameAttemptAndStep(candidate) || candidate.payload.kind !== 'action.succeeded') return false;\n return (candidate.payload.outcomes ?? []).some(\n (outcome) => outcome.name === payload.name && outcome.payloadDigest === payload.payloadDigest && canonicalizeJson(outcome.payload) === canonicalizeJson(payload.payload)\n );\n })\n ? undefined\n : 'missing_declaring_success_ancestor';\n }\n if (payload.kind === 'action.started' || payload.kind === 'action.effect_armed' || payload.kind === 'action.approval_proposed') {\n return hasAcceptedAncestor(event, byId, accepted, (candidate) => sameAttemptAndStep(candidate) && candidate.payload.kind === 'action.requested')\n ? undefined\n : 'missing_request_ancestor';\n }\n if (payload.kind === 'action.failed_before_effect') {\n return hasAcceptedAncestor(event, byId, accepted, (candidate) => sameAttemptAndStep(candidate) && candidate.payload.kind === 'action.started')\n ? undefined\n : 'missing_started_ancestor';\n }\n if (payload.kind === 'action.succeeded') {\n const hasStarted = hasAcceptedAncestor(event, byId, accepted, (candidate) => sameAttemptAndStep(candidate) && candidate.payload.kind === 'action.started');\n const hasArmed = hasAcceptedAncestor(event, byId, accepted, (candidate) => sameAttemptAndStep(candidate) && candidate.payload.kind === 'action.effect_armed');\n const hasClaimKey = payload.claimKey !== undefined;\n const hasFencingEpoch = payload.fencingEpoch !== undefined;\n if (hasClaimKey !== hasFencingEpoch) return 'incomplete_fence_evidence';\n if (hasClaimKey && hasFencingEpoch) {\n return hasAcceptedAncestor(\n event,\n byId,\n accepted,\n (candidate) =>\n sameAttemptAndStep(candidate) &&\n candidate.payload.kind === 'action.effect_armed' &&\n candidate.payload.claimKey === payload.claimKey &&\n candidate.payload.fencingEpoch === payload.fencingEpoch\n )\n ? undefined\n : 'missing_matching_fence_ancestor';\n }\n if (hasArmed && !hasStarted) return 'missing_fence_evidence';\n return hasStarted ? undefined : 'missing_execution_ancestor';\n }\n if (payload.kind === 'action.needs_verification') {\n return hasAcceptedAncestor(\n event,\n byId,\n accepted,\n (candidate) => sameAttemptAndStep(candidate) && (candidate.payload.kind === 'action.started' || candidate.payload.kind === 'action.effect_armed')\n )\n ? undefined\n : 'missing_execution_ancestor';\n }\n return undefined;\n}\n\nconst DISPOSITION_RANK: Record<EffectDisposition, number> = {\n not_started: 0,\n armed: 1,\n failed_before_effect: 2,\n needs_verification: 3,\n succeeded: 4,\n};\n\nfunction compareCodeUnits(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction sortedUnique<T extends string>(values: readonly T[]): T[] {\n return [...new Set(values)].sort(compareCodeUnits);\n}\n\nfunction sameStringSet(left: readonly string[], right: readonly string[]): boolean {\n return canonicalizeJson(sortedUnique(left)) === canonicalizeJson(sortedUnique(right));\n}\n\nfunction acceptedFrontier(events: readonly FlowEventEnvelopeV1[], accepted: ReadonlySet<EventId>): EventId[] {\n const acceptedEvents = events.filter((event) => accepted.has(event.eventId));\n const referencedParents = new Set(acceptedEvents.flatMap((event) => event.parents.filter((parent) => accepted.has(parent))));\n return acceptedEvents\n .map((event) => event.eventId)\n .filter((eventId) => !referencedParents.has(eventId))\n .sort(compareCodeUnits);\n}\n\n/** Order-independent fold over structurally valid, already-authenticated events. */\nexport function reduceFlowEvents(genesis: RunGenesisV1, input: readonly FlowEventEnvelopeV1[]): ReducedFlowRunV1 {\n const unique = new Map<EventId, FlowEventEnvelopeV1>();\n for (const event of input) if (!unique.has(event.eventId)) unique.set(event.eventId, event);\n const events = [...unique.values()];\n const canonicalDefinition = canonicalizeJson(genesis.definition as unknown as CanonicalJsonValue);\n const belongsToRun = (event: FlowEventEnvelopeV1): boolean =>\n event.runId === genesis.runId && canonicalizeJson(event.definition as unknown as CanonicalJsonValue) === canonicalDefinition;\n const runEvents = events.filter(belongsToRun);\n const byId = new Map(events.map((event) => [event.eventId, event]));\n const { ordered, cyclic } = causalOrder(events, byId);\n const commandFingerprints = new Map<IdempotencyKey, Set<Sha256Digest>>();\n const attemptSteps = new Map<AttemptId, Set<string>>();\n const runGenesisValues = new Set(\n runEvents\n .filter((event) => event.payload.kind === 'run.started')\n .map((event) => (event.payload.kind === 'run.started' ? canonicalizeJson(event.payload.genesis as unknown as CanonicalJsonValue) : ''))\n );\n const canonicalGenesis = canonicalizeJson(genesis as unknown as CanonicalJsonValue);\n for (const event of runEvents) {\n const fingerprints = commandFingerprints.get(event.idempotencyKey) ?? new Set<Sha256Digest>();\n fingerprints.add(event.commandFingerprint);\n commandFingerprints.set(event.idempotencyKey, fingerprints);\n if ('attemptId' in event.payload && 'stepId' in event.payload) {\n const steps = attemptSteps.get(event.payload.attemptId) ?? new Set<string>();\n steps.add(event.payload.stepId);\n attemptSteps.set(event.payload.attemptId, steps);\n }\n }\n const attempts = new Map<AttemptId, ReducedAttemptV1>();\n const accepted: EventId[] = [];\n const acceptedSet = new Set<EventId>();\n const invalid: Array<{ eventId: EventId; reason: string }> = [];\n const invalidReasons = new Map<EventId, string>();\n const cancelEvents: FlowEventEnvelopeV1[] = [];\n const finalizationEvents: FlowEventEnvelopeV1[] = [];\n\n const cycleEvents = events.filter((event) => cyclic.has(event.eventId)).sort((left, right) => compareCodeUnits(left.eventId, right.eventId));\n for (const event of [...ordered, ...cycleEvents]) {\n let reason: string | undefined;\n if (!belongsToRun(event)) reason = 'run_or_definition_mismatch';\n if (!reason && event.payload.kind === 'run.started' && runGenesisValues.size > 1) reason = 'run_genesis_conflict';\n if (!reason && event.payload.kind === 'run.started' && canonicalizeJson(event.payload.genesis as unknown as CanonicalJsonValue) !== canonicalGenesis) {\n reason = 'run_genesis_mismatch';\n }\n if (!reason && (commandFingerprints.get(event.idempotencyKey)?.size ?? 0) > 1) reason = 'idempotency_fingerprint_conflict';\n if (!reason && event.parents.some((parent) => !byId.has(parent))) reason = 'missing_parent';\n if (!reason && cyclic.has(event.eventId)) reason = 'causal_cycle';\n if (!reason && 'attemptId' in event.payload && (attemptSteps.get(event.payload.attemptId)?.size ?? 0) > 1) reason = 'attempt_step_conflict';\n if (!reason && event.parents.some((parent) => invalidReasons.has(parent))) reason = 'invalid_parent';\n if (!reason) reason = attemptChainError(event, byId, acceptedSet);\n\n if (!reason && event.payload.kind !== 'log' && hasAcceptedAncestor(event, byId, acceptedSet, (candidate) => candidate.payload.kind === 'run.finalized')) {\n reason = 'event_descends_from_finalization';\n }\n\n if (!reason && event.payload.kind === 'action.requested') {\n const causallyCancelled = cancelEvents.some((cancel) => eventHasAncestor(event, cancel.eventId, byId));\n if (causallyCancelled) reason = 'action_descends_from_cancellation';\n }\n\n if (reason) {\n invalid.push({ eventId: event.eventId, reason });\n invalidReasons.set(event.eventId, reason);\n continue;\n }\n\n accepted.push(event.eventId);\n acceptedSet.add(event.eventId);\n const payload = event.payload;\n if (payload.kind === 'run.cancel_requested') cancelEvents.push(event);\n if (payload.kind === 'run.finalized') finalizationEvents.push(event);\n if (!('attemptId' in payload)) continue;\n\n const current = attempts.get(payload.attemptId) ?? {\n attemptId: payload.attemptId,\n stepId: 'stepId' in payload ? payload.stepId : '',\n disposition: 'not_started' as const,\n receiptIds: [],\n outcomes: [],\n };\n\n let next: ReducedAttemptV1 = current;\n if (payload.kind === 'action.effect_armed' && DISPOSITION_RANK[current.disposition] < DISPOSITION_RANK.armed) {\n next = { ...current, stepId: payload.stepId, disposition: 'armed' };\n }\n if (payload.kind === 'action.succeeded') {\n next = { ...current, stepId: payload.stepId, disposition: 'succeeded', outputDigest: payload.outputDigest, providerCorrelation: payload.providerCorrelation };\n }\n if (payload.kind === 'action.failed_before_effect' && DISPOSITION_RANK[current.disposition] < DISPOSITION_RANK.failed_before_effect) {\n next = { ...current, stepId: payload.stepId, disposition: 'failed_before_effect' };\n }\n if (payload.kind === 'action.needs_verification' && DISPOSITION_RANK[current.disposition] < DISPOSITION_RANK.needs_verification) {\n next = { ...current, stepId: payload.stepId, disposition: 'needs_verification', providerCorrelation: payload.providerCorrelation };\n }\n if (payload.kind === 'receipt.persisted') {\n next = { ...current, receiptIds: [...new Set([...current.receiptIds, payload.receiptId])].sort() };\n }\n if (payload.kind === 'action.outcome_emitted') {\n const outcomes = [...current.outcomes, { name: payload.name, payload: payload.payload, payloadDigest: payload.payloadDigest }];\n next = {\n ...current,\n outcomes: outcomes\n .filter((outcome, index) => outcomes.findIndex((candidate) => candidate.name === outcome.name && candidate.payloadDigest === outcome.payloadDigest) === index)\n .sort((left, right) => compareCodeUnits(left.name, right.name) || compareCodeUnits(left.payloadDigest, right.payloadDigest)),\n };\n }\n attempts.set(payload.attemptId, next);\n }\n\n const values = [...attempts.values()];\n const unresolved = values.some((attempt) => attempt.disposition === 'armed' || attempt.disposition === 'needs_verification');\n const completedSteps = new Set(values.filter((attempt) => attempt.disposition === 'succeeded').map((attempt) => attempt.stepId));\n const completed = genesis.requiredStepIds.every((stepId) => completedSteps.has(stepId));\n const failed = values.some((attempt) => attempt.disposition === 'failed_before_effect');\n const cancelRequested = cancelEvents.length > 0;\n const active = values.some((attempt) => attempt.disposition === 'not_started' || attempt.disposition === 'armed');\n const acceptedStateEvents = new Set(\n accepted.filter((eventId) => {\n const kind = byId.get(eventId)?.payload.kind;\n return kind !== 'run.finalized' && kind !== 'log';\n })\n );\n const frontierEventIds = acceptedFrontier(events, acceptedStateEvents);\n const hasAcceptedStart = [...acceptedStateEvents].some((eventId) => byId.get(eventId)?.payload.kind === 'run.started');\n const missingTopicReceipt = genesis.topicBindingId !== undefined && values.some((attempt) => attempt.disposition === 'succeeded' && attempt.receiptIds.length === 0);\n const missingDeclaredOutcome = accepted.some((eventId) => {\n const success = byId.get(eventId);\n if (success?.payload.kind !== 'action.succeeded') return false;\n const successPayload = success.payload;\n return (successPayload.outcomes ?? []).some(\n (declared) =>\n !accepted.some((candidateId) => {\n const candidate = byId.get(candidateId);\n return (\n candidate?.payload.kind === 'action.outcome_emitted' &&\n candidate.payload.attemptId === successPayload.attemptId &&\n candidate.payload.stepId === successPayload.stepId &&\n candidate.payload.name === declared.name &&\n candidate.payload.payloadDigest === declared.payloadDigest &&\n canonicalizeJson(candidate.payload.payload) === canonicalizeJson(declared.payload) &&\n eventHasAncestor(candidate, success.eventId, byId)\n );\n })\n );\n });\n let finalizableStatus: RunTerminalStatusV1 | undefined;\n if (hasAcceptedStart && !unresolved && !missingTopicReceipt && !missingDeclaredOutcome) {\n if (completed) finalizableStatus = 'completed';\n else if (cancelRequested && !active) finalizableStatus = 'cancelled';\n else if (failed && !active) finalizableStatus = 'failed';\n }\n const finalizationSummary = finalizableStatus\n ? ({\n kind: 'qi.flow.run-finalization-summary',\n schemaVersion: '1.0',\n status: finalizableStatus,\n cancelRequested,\n requiredStepIds: sortedUnique(genesis.requiredStepIds),\n frontierEventIds,\n attempts: values\n .map((attempt) => ({\n attemptId: attempt.attemptId,\n stepId: attempt.stepId,\n disposition: attempt.disposition,\n receiptIds: sortedUnique(attempt.receiptIds),\n }))\n .sort((left, right) => compareCodeUnits(left.attemptId, right.attemptId)),\n } satisfies RunFinalizationSummaryV1)\n : undefined;\n\n const validFinalizationIds: EventId[] = [];\n for (const event of finalizationEvents) {\n if (invalidReasons.has(event.eventId) || event.payload.kind !== 'run.finalized') continue;\n let reason: string | undefined;\n if (!sameStringSet(event.parents, frontierEventIds)) reason = 'incomplete_finalization_frontier';\n else if (!finalizableStatus || !finalizationSummary) reason = 'run_not_finalizable';\n else if (event.payload.status !== finalizableStatus) reason = 'finalization_status_mismatch';\n else if (canonicalizeJson(event.payload.summary as unknown as CanonicalJsonValue) !== canonicalizeJson(finalizationSummary as unknown as CanonicalJsonValue)) {\n reason = 'finalization_summary_mismatch';\n }\n if (reason) {\n invalid.push({ eventId: event.eventId, reason });\n invalidReasons.set(event.eventId, reason);\n } else {\n validFinalizationIds.push(event.eventId);\n }\n }\n\n let status: ReducedFlowRunV1['status'] = acceptedStateEvents.size === 0 ? 'queued' : 'running';\n if (unresolved) status = 'needs_verification';\n else if (validFinalizationIds.length > 0 && finalizableStatus) status = finalizableStatus;\n else if (cancelRequested) status = 'cancelling';\n\n const validAccepted = accepted.filter((eventId) => !invalidReasons.has(eventId));\n\n return {\n runId: genesis.runId,\n definition: genesis.definition,\n status,\n attempts: Object.fromEntries([...attempts.entries()].sort(([left], [right]) => compareCodeUnits(left, right))),\n cancelRequested,\n frontierEventIds,\n ...(finalizableStatus && finalizationSummary ? { finalizationCandidate: { status: finalizableStatus, summary: finalizationSummary } } : {}),\n finalizedEventIds: validFinalizationIds.sort(compareCodeUnits),\n acceptedEventIds: validAccepted.sort(compareCodeUnits),\n invalidEvents: invalid.sort((left, right) => compareCodeUnits(left.eventId, right.eventId)),\n };\n}\n\nexport async function fingerprintFlowCommand(command: FlowJsonValue): Promise<Sha256Digest> {\n return (await digestCanonicalJson(command as CanonicalJsonValue)) as Sha256Digest;\n}\n","import type { CanonicalJsonValue } from './canonical';\nimport type { DID, EventId, ExecutionPolicyV1, IdempotencyKey, Sha256Digest, VerifiedInvocation } from './contracts';\n\nexport type EffectClaimStatus = 'claimed' | 'armed' | 'success_prepared' | 'succeeded' | 'failed_before_effect' | 'needs_verification';\n\nexport interface EffectClaimRecordV1 {\n kind: 'qi.flow.effect-claim';\n schemaVersion: '1.0';\n claimKey: Sha256Digest;\n fingerprint: Sha256Digest;\n status: EffectClaimStatus;\n leaseOwner: DID;\n fencingEpoch: number;\n leaseExpiresAt: number;\n providerIdempotencyKey: IdempotencyKey;\n providerCorrelation?: string;\n /** Opaque result evidence retained so Matrix append can be replayed after a crash. */\n outputDigest?: Sha256Digest;\n /** Opaque digest of the normalized declared outcome set; never outcome payloads. */\n outcomesDigest?: Sha256Digest;\n successEventId?: EventId;\n policyDigest: Sha256Digest;\n updatedAt: number;\n}\n\nexport interface EffectClaimAdmissionV1 {\n /** Raw authorization material for the remote admission boundary. Never persisted by the ledger. */\n authorization: CanonicalJsonValue;\n /** Process-local verified view used by in-process ledgers and remote-client expectations. */\n invocation: VerifiedInvocation;\n /** Signed execution policy. Never persisted; only its digest is retained. */\n policy: ExecutionPolicyV1;\n commandFingerprint: Sha256Digest;\n}\n\nexport interface EffectClaimRequestV1 {\n claimKey: Sha256Digest;\n leaseOwner: DID;\n leaseTtlMs: number;\n providerIdempotencyKey: IdempotencyKey;\n policyDigest: Sha256Digest;\n admission: EffectClaimAdmissionV1;\n}\n\nexport type EffectClaimResultV1 =\n | { outcome: 'claimed' | 'existing'; record: EffectClaimRecordV1 }\n | { outcome: 'conflict' | 'paused'; record?: EffectClaimRecordV1; reason: string };\n\nexport interface EffectClaimLedger {\n claim(request: EffectClaimRequestV1): Promise<EffectClaimResultV1>;\n renew(claimKey: Sha256Digest, leaseOwner: DID, fencingEpoch: number, leaseTtlMs: number, admission: EffectClaimAdmissionV1): Promise<EffectClaimRecordV1>;\n arm(claimKey: Sha256Digest, leaseOwner: DID, fencingEpoch: number, admission: EffectClaimAdmissionV1, providerCorrelation?: string): Promise<EffectClaimRecordV1>;\n prepareSuccess(\n claimKey: Sha256Digest,\n leaseOwner: DID,\n fencingEpoch: number,\n outputDigest: Sha256Digest,\n outcomesDigest: Sha256Digest,\n admission: EffectClaimAdmissionV1,\n providerCorrelation?: string\n ): Promise<EffectClaimRecordV1>;\n resolve(\n claimKey: Sha256Digest,\n leaseOwner: DID,\n fencingEpoch: number,\n outcome: 'succeeded' | 'failed_before_effect',\n admission: EffectClaimAdmissionV1,\n providerCorrelation?: string,\n successEventId?: EventId\n ): Promise<EffectClaimRecordV1>;\n markNeedsVerification(\n claimKey: Sha256Digest,\n leaseOwner: DID,\n fencingEpoch: number,\n admission: EffectClaimAdmissionV1,\n providerCorrelation?: string\n ): Promise<EffectClaimRecordV1>;\n read(claimKey: Sha256Digest, admission: EffectClaimAdmissionV1): Promise<EffectClaimRecordV1 | null>;\n}\n\nexport class EffectClaimTransitionError extends Error {\n constructor(\n readonly code: 'FINGERPRINT_CONFLICT' | 'POLICY_PAUSED' | 'LEASE_HELD' | 'STALE_FENCE' | 'INVALID_TRANSITION',\n message: string\n ) {\n super(message);\n this.name = 'EffectClaimTransitionError';\n }\n}\n\n/** Pure state transition used by the Durable Object and conformance tests. */\nexport function claimEffect(existing: EffectClaimRecordV1 | null, request: EffectClaimRequestV1, now: number): EffectClaimResultV1 {\n if (existing?.fingerprint !== undefined && existing.fingerprint !== request.admission.commandFingerprint) {\n return { outcome: 'conflict', record: existing, reason: 'Idempotency key already belongs to a different command fingerprint' };\n }\n if (existing && existing.providerIdempotencyKey !== request.providerIdempotencyKey) {\n return { outcome: 'conflict', record: existing, reason: 'Effect claim already belongs to a different provider idempotency key' };\n }\n if (existing) {\n const recovery = existing.status === 'armed' || existing.status === 'needs_verification' || existing.status === 'success_prepared';\n if (recovery) {\n if (existing.leaseExpiresAt > now) return { outcome: 'existing', record: existing };\n return {\n outcome: 'claimed',\n record: {\n ...existing,\n leaseOwner: request.leaseOwner,\n // A prepared success has already consumed the effect fence. Recovery\n // only drains its immutable result evidence into Matrix.\n fencingEpoch: existing.status === 'success_prepared' ? existing.fencingEpoch : existing.fencingEpoch + 1,\n leaseExpiresAt: now + request.leaseTtlMs,\n policyDigest: request.policyDigest,\n updatedAt: now,\n },\n };\n }\n if (existing.status !== 'claimed') {\n return { outcome: 'existing', record: existing };\n }\n if (existing.leaseExpiresAt > now) return { outcome: 'existing', record: existing };\n // Reacquiring an expired, unarmed reservation while paused is recovery:\n // arm remains blocked, but the new fence may close it as failed-before-effect.\n if (request.admission.policy.mode !== 'enabled') {\n return {\n outcome: 'claimed',\n record: {\n ...existing,\n leaseOwner: request.leaseOwner,\n fencingEpoch: existing.fencingEpoch + 1,\n leaseExpiresAt: now + request.leaseTtlMs,\n policyDigest: request.policyDigest,\n updatedAt: now,\n },\n };\n }\n }\n if (request.admission.policy.mode !== 'enabled') return { outcome: 'paused', record: existing ?? undefined, reason: 'Execution policy pauses new effects' };\n return {\n outcome: 'claimed',\n record: {\n kind: 'qi.flow.effect-claim',\n schemaVersion: '1.0',\n claimKey: request.claimKey,\n fingerprint: request.admission.commandFingerprint,\n status: 'claimed',\n leaseOwner: request.leaseOwner,\n fencingEpoch: (existing?.fencingEpoch ?? 0) + 1,\n leaseExpiresAt: now + request.leaseTtlMs,\n providerIdempotencyKey: request.providerIdempotencyKey,\n policyDigest: request.policyDigest,\n updatedAt: now,\n },\n };\n}\n\nfunction assertFence(record: EffectClaimRecordV1, owner: DID, epoch: number, now: number): void {\n if (record.leaseOwner !== owner || record.fencingEpoch !== epoch) {\n throw new EffectClaimTransitionError('STALE_FENCE', 'Effect claim owner or fencing epoch is stale');\n }\n if (record.leaseExpiresAt <= now) throw new EffectClaimTransitionError('STALE_FENCE', 'Effect claim lease has expired');\n}\n\nexport function renewEffectClaim(record: EffectClaimRecordV1, owner: DID, epoch: number, leaseTtlMs: number, now: number): EffectClaimRecordV1 {\n assertFence(record, owner, epoch, now);\n if (record.status !== 'claimed') throw new EffectClaimTransitionError('INVALID_TRANSITION', 'Only an unarmed claim can renew its lease');\n return { ...record, leaseExpiresAt: now + leaseTtlMs, updatedAt: now };\n}\n\nexport function armEffectClaim(record: EffectClaimRecordV1, owner: DID, epoch: number, now: number, providerCorrelation?: string): EffectClaimRecordV1 {\n assertFence(record, owner, epoch, now);\n if (record.status === 'armed' && record.providerCorrelation === providerCorrelation) return record;\n if (record.status !== 'claimed') throw new EffectClaimTransitionError('INVALID_TRANSITION', 'Only a claimed effect can be armed');\n return { ...record, status: 'armed', ...(providerCorrelation !== undefined ? { providerCorrelation } : {}), updatedAt: now };\n}\n\nexport function prepareEffectSuccess(\n record: EffectClaimRecordV1,\n owner: DID,\n epoch: number,\n outputDigest: Sha256Digest,\n outcomesDigest: Sha256Digest,\n now: number,\n providerCorrelation?: string\n): EffectClaimRecordV1 {\n assertFence(record, owner, epoch, now);\n if (record.status === 'success_prepared') {\n if (record.outputDigest !== outputDigest || record.outcomesDigest !== outcomesDigest) {\n throw new EffectClaimTransitionError('INVALID_TRANSITION', 'Prepared effect success has different result evidence');\n }\n return record;\n }\n if (record.status !== 'armed' && record.status !== 'needs_verification') {\n throw new EffectClaimTransitionError('INVALID_TRANSITION', 'Only an armed or verified effect can prepare success');\n }\n const nextCorrelation = providerCorrelation ?? record.providerCorrelation;\n return {\n ...record,\n status: 'success_prepared',\n outputDigest,\n outcomesDigest,\n ...(nextCorrelation !== undefined ? { providerCorrelation: nextCorrelation } : {}),\n updatedAt: now,\n };\n}\n\nexport function resolveEffectClaim(\n record: EffectClaimRecordV1,\n owner: DID,\n epoch: number,\n outcome: 'succeeded' | 'failed_before_effect',\n now: number,\n providerCorrelation?: string,\n successEventId?: EventId\n): EffectClaimRecordV1 {\n if (outcome === 'failed_before_effect' && successEventId !== undefined) {\n throw new EffectClaimTransitionError('INVALID_TRANSITION', 'Failed-before-effect resolution cannot include success evidence');\n }\n if (record.status === outcome) {\n const expectedCorrelation = providerCorrelation ?? record.providerCorrelation;\n const sameCorrelation = record.providerCorrelation === expectedCorrelation;\n const sameSuccess = outcome !== 'succeeded' || record.successEventId === successEventId;\n if (record.leaseOwner === owner && record.fencingEpoch === epoch && sameCorrelation && sameSuccess) return record;\n throw new EffectClaimTransitionError('INVALID_TRANSITION', 'Resolved effect evidence does not match the existing terminal record');\n }\n assertFence(record, owner, epoch, now);\n if (outcome === 'failed_before_effect' && record.status !== 'claimed') {\n throw new EffectClaimTransitionError('INVALID_TRANSITION', 'An armed effect cannot be reported as failed before effect');\n }\n if (outcome === 'succeeded' && (record.status !== 'success_prepared' || !record.outputDigest || !record.outcomesDigest)) {\n throw new EffectClaimTransitionError('INVALID_TRANSITION', 'Effect success must be prepared before it can be finalized');\n }\n if (outcome === 'succeeded' && !successEventId) {\n throw new EffectClaimTransitionError('INVALID_TRANSITION', 'Effect success requires its durable Matrix event id');\n }\n const nextCorrelation = providerCorrelation ?? record.providerCorrelation;\n return {\n ...record,\n status: outcome,\n ...(nextCorrelation !== undefined ? { providerCorrelation: nextCorrelation } : {}),\n ...(successEventId ? { successEventId } : {}),\n updatedAt: now,\n };\n}\n\nexport function markEffectNeedsVerification(record: EffectClaimRecordV1, owner: DID, epoch: number, now: number, providerCorrelation?: string): EffectClaimRecordV1 {\n assertFence(record, owner, epoch, now);\n if (record.status === 'needs_verification' && record.providerCorrelation === (providerCorrelation ?? record.providerCorrelation)) return record;\n if (record.status !== 'armed') throw new EffectClaimTransitionError('INVALID_TRANSITION', 'Only an armed effect can become ambiguous');\n const nextCorrelation = providerCorrelation ?? record.providerCorrelation;\n return { ...record, status: 'needs_verification', ...(nextCorrelation !== undefined ? { providerCorrelation: nextCorrelation } : {}), updatedAt: now };\n}\n","import Ajv2020 from 'ajv/dist/2020.js';\n\nimport { ACTION_MANIFEST_V2_SCHEMA } from './manifestV2.schema';\n\n/** JSON values accepted by the Manifest v2 portable contract. */\nexport type ManifestV2JsonValue = null | boolean | number | string | ManifestV2JsonValue[] | { [key: string]: ManifestV2JsonValue };\n\nexport interface ActionManifestV2Package {\n name: string;\n version: string;\n sourceCommit: string;\n buildId?: string;\n distributionUrl?: string;\n}\n\nexport interface ActionManifestV2Issuer {\n did: string;\n verificationMethod: string;\n}\n\nexport interface ActionManifestV2Compatibility {\n engine: {\n versionRange: string;\n };\n flowSchemaVersions: string[];\n features: string[];\n}\n\n/**\n * The complete action and primitive groups are introduced by the registry\n * migration. Keeping their extension fields JSON-only prevents executable\n * functions or class instances from crossing this portable boundary.\n */\nexport type ActionManifestV2Action = {\n type: string;\n contractVersion: string;\n aliases?: string[];\n} & Record<string, ManifestV2JsonValue>;\n\nexport type ActionManifestV2Primitive = {\n type: string;\n contractVersion: string;\n aliases?: string[];\n} & Record<string, ManifestV2JsonValue>;\n\n/** The unsigned, portable portion of an Action Manifest v2 envelope. */\nexport interface ActionManifestV2Payload {\n manifestVersion: '2.0';\n manifestId: string;\n generatedAt: string;\n package: ActionManifestV2Package;\n issuer: ActionManifestV2Issuer;\n compatibility: ActionManifestV2Compatibility;\n actions: ActionManifestV2Action[];\n primitives: ActionManifestV2Primitive[];\n}\n\nexport interface ActionManifestV2Integrity {\n canonicalization: 'RFC8785';\n digest: {\n algorithm: 'SHA-256';\n value: `sha256:${string}`;\n };\n signature: {\n algorithm: string;\n verificationMethod: string;\n value: string;\n };\n}\n\nexport type SignedActionManifestV2 = ActionManifestV2Payload & {\n integrity: ActionManifestV2Integrity;\n};\n\ndeclare const verifiedActionManifestV2: unique symbol;\n\ntype DeepReadonly<T> = T extends readonly (infer Item)[] ? readonly DeepReadonly<Item>[] : T extends object ? { readonly [Key in keyof T]: DeepReadonly<T[Key]> } : T;\n\n/** A manifest that crossed the trust-policy boundary successfully. */\nexport type VerifiedActionManifestV2 = DeepReadonly<SignedActionManifestV2> & {\n readonly [verifiedActionManifestV2]: true;\n};\n\nexport interface ActionManifestV2Signer {\n issuerDid: string;\n verificationMethod: string;\n algorithm: string;\n sign(data: Uint8Array): Promise<string>;\n}\n\nexport interface ActionManifestV2SignatureVerificationInput {\n issuerDid: string;\n verificationMethod: string;\n algorithm: string;\n data: Uint8Array;\n signature: string;\n}\n\nexport interface ActionManifestV2TrustPolicy {\n trustedIssuerDids: readonly string[];\n revokedIssuerDids?: readonly string[];\n allowedSignatureAlgorithms: readonly string[];\n verifySignature(input: ActionManifestV2SignatureVerificationInput): Promise<boolean>;\n}\n\nexport type ActionManifestV2VerificationErrorCode =\n | 'INVALID_MANIFEST'\n | 'UNSUPPORTED_MANIFEST_VERSION'\n | 'UNSIGNED_MANIFEST'\n | 'SIGNER_MISMATCH'\n | 'DUPLICATE_CONTRACT_TYPE'\n | 'AMBIGUOUS_ALIAS'\n | 'UNSORTED_CONTRACTS'\n | 'UNTRUSTED_ISSUER'\n | 'REVOKED_ISSUER'\n | 'VERIFICATION_METHOD_MISMATCH'\n | 'DISALLOWED_SIGNATURE_ALGORITHM'\n | 'DIGEST_MISMATCH'\n | 'INVALID_SIGNATURE';\n\nexport class ActionManifestV2VerificationError extends Error {\n readonly code: ActionManifestV2VerificationErrorCode;\n\n constructor(code: ActionManifestV2VerificationErrorCode, message: string) {\n super(message);\n this.name = 'ActionManifestV2VerificationError';\n this.code = code;\n }\n}\n\nconst validateSignedManifest = new Ajv2020({ allErrors: true, strict: false }).compile(ACTION_MANIFEST_V2_SCHEMA);\nconst SIGNATURE_DOMAIN = 'qi.action-manifest.v2\\0';\n\nfunction isPlainObject(value: object): value is Record<string, unknown> {\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction assertValidUnicode(value: string): void {\n for (let index = 0; index < value.length; index += 1) {\n const codeUnit = value.charCodeAt(index);\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (!(next >= 0xdc00 && next <= 0xdfff)) {\n throw new TypeError('Manifest v2 contains an unpaired Unicode surrogate');\n }\n index += 1;\n } else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {\n throw new TypeError('Manifest v2 contains an unpaired Unicode surrogate');\n }\n }\n}\n\n/**\n * Serialize a Manifest v2 payload using the RFC 8785 JSON Canonicalization\n * Scheme. Invalid JSON-domain values are rejected rather than being silently\n * omitted or coerced.\n */\nexport function canonicalizeManifestV2Payload(payload: ActionManifestV2Payload): string {\n const ancestors = new Set<object>();\n\n const serialize = (value: unknown): string => {\n if (value === null || typeof value === 'boolean') {\n return JSON.stringify(value);\n }\n\n if (typeof value === 'string') {\n assertValidUnicode(value);\n return JSON.stringify(value);\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new TypeError('Manifest v2 contains a non-finite number');\n }\n return JSON.stringify(value);\n }\n\n if (typeof value !== 'object') {\n throw new TypeError(`Manifest v2 contains a non-JSON value: ${typeof value}`);\n }\n\n if (ancestors.has(value)) {\n throw new TypeError('Manifest v2 contains a circular reference');\n }\n\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n return `[${value.map((entry) => serialize(entry)).join(',')}]`;\n }\n\n if (!isPlainObject(value)) {\n throw new TypeError('Manifest v2 contains a non-plain object');\n }\n\n return `{${Object.keys(value)\n .sort()\n .map((key) => {\n assertValidUnicode(key);\n return `${JSON.stringify(key)}:${serialize(value[key])}`;\n })\n .join(',')}}`;\n } finally {\n ancestors.delete(value);\n }\n };\n\n return serialize(payload);\n}\n\n/** Compute the content address for the unsigned Manifest v2 payload. */\nexport async function computeActionManifestV2Digest(payload: ActionManifestV2Payload): Promise<string> {\n if (!globalThis.crypto?.subtle) {\n throw new Error('Web Crypto is required to digest an Action Manifest v2 contract');\n }\n\n const canonicalPayload = canonicalizeManifestV2Payload(payload);\n const digest = await globalThis.crypto.subtle.digest('SHA-256', new TextEncoder().encode(canonicalPayload));\n const hex = Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, '0')).join('');\n return `sha256:${hex}`;\n}\n\nfunction signatureInput(digest: string): Uint8Array {\n return new TextEncoder().encode(`${SIGNATURE_DOMAIN}${digest}`);\n}\n\nfunction schemaFailure(): ActionManifestV2VerificationError {\n const details = (validateSignedManifest.errors || []).map((error) => `${error.instancePath || '/'} ${error.message || 'is invalid'}`).join('; ');\n return new ActionManifestV2VerificationError('INVALID_MANIFEST', details ? `Action Manifest v2 is invalid: ${details}` : 'Action Manifest v2 is invalid');\n}\n\nfunction payloadFromSignedManifest(manifest: SignedActionManifestV2): ActionManifestV2Payload {\n const { integrity: _integrity, ...payload } = manifest;\n return payload;\n}\n\nfunction assertContractIdentities(payload: ActionManifestV2Payload): void {\n const contracts = [...payload.actions, ...payload.primitives];\n const canonicalTypes = new Set<string>();\n\n for (const contract of contracts) {\n if (canonicalTypes.has(contract.type)) {\n throw new ActionManifestV2VerificationError('DUPLICATE_CONTRACT_TYPE', `Manifest contains duplicate canonical contract type: ${contract.type}`);\n }\n canonicalTypes.add(contract.type);\n }\n\n for (const [groupName, group] of [\n ['actions', payload.actions],\n ['primitives', payload.primitives],\n ] as const) {\n for (let index = 1; index < group.length; index += 1) {\n if (group[index - 1].type > group[index].type) {\n throw new ActionManifestV2VerificationError('UNSORTED_CONTRACTS', `Manifest ${groupName} must be sorted by canonical type`);\n }\n }\n }\n\n const claimedNames = new Map(Array.from(canonicalTypes, (type) => [type, type]));\n for (const contract of contracts) {\n const aliases = contract.aliases;\n if (!Array.isArray(aliases)) continue;\n\n for (const alias of aliases) {\n const existingOwner = claimedNames.get(alias);\n if (existingOwner) {\n throw new ActionManifestV2VerificationError('AMBIGUOUS_ALIAS', `Manifest alias ${alias} conflicts with contract ${existingOwner}`);\n }\n claimedNames.set(alias, contract.type);\n }\n }\n}\n\nfunction deepFreeze<T extends object>(value: T): DeepReadonly<T> {\n for (const child of Object.values(value)) {\n if (typeof child === 'object' && child !== null && !Object.isFrozen(child)) {\n deepFreeze(child);\n }\n }\n return Object.freeze(value) as DeepReadonly<T>;\n}\n\n/**\n * Sign a portable Manifest v2 payload. The host owns key resolution and the\n * concrete signature algorithm; this module owns canonical bytes and issuer\n * binding.\n */\nexport async function signActionManifestV2(payload: ActionManifestV2Payload, signer: ActionManifestV2Signer): Promise<SignedActionManifestV2> {\n if (signer.issuerDid !== payload.issuer.did || signer.verificationMethod !== payload.issuer.verificationMethod) {\n throw new ActionManifestV2VerificationError('SIGNER_MISMATCH', 'The Manifest v2 signer does not match the declared issuer verification method');\n }\n\n assertContractIdentities(payload);\n let digest: string;\n try {\n digest = await computeActionManifestV2Digest(payload);\n } catch (error) {\n throw new ActionManifestV2VerificationError(\n 'INVALID_MANIFEST',\n error instanceof Error ? `Action Manifest v2 cannot be canonicalized: ${error.message}` : 'Action Manifest v2 cannot be canonicalized'\n );\n }\n const signature = await signer.sign(signatureInput(digest));\n if (!signature) {\n throw new ActionManifestV2VerificationError('INVALID_SIGNATURE', 'The Manifest v2 signer returned an empty signature');\n }\n\n const signed: SignedActionManifestV2 = {\n ...payload,\n integrity: {\n canonicalization: 'RFC8785',\n digest: {\n algorithm: 'SHA-256',\n value: digest as `sha256:${string}`,\n },\n signature: {\n algorithm: signer.algorithm,\n verificationMethod: signer.verificationMethod,\n value: signature,\n },\n },\n };\n\n if (!validateSignedManifest(signed)) {\n throw schemaFailure();\n }\n assertContractIdentities(payload);\n\n return signed;\n}\n\n/**\n * Load a signed manifest across the execution trust boundary. Every failure\n * throws; this API never returns a partially trusted or downgraded contract.\n */\nexport async function verifyActionManifestV2(candidate: unknown, trustPolicy: ActionManifestV2TrustPolicy): Promise<VerifiedActionManifestV2> {\n if (typeof candidate !== 'object' || candidate === null || !('manifestVersion' in candidate) || (candidate as { manifestVersion?: unknown }).manifestVersion !== '2.0') {\n throw new ActionManifestV2VerificationError('UNSUPPORTED_MANIFEST_VERSION', 'Only Action Manifest version 2.0 can cross this execution boundary');\n }\n\n if (!('integrity' in candidate) || typeof (candidate as { integrity?: unknown }).integrity !== 'object') {\n throw new ActionManifestV2VerificationError('UNSIGNED_MANIFEST', 'A signature and digest are required to load Action Manifest v2 for execution');\n }\n\n if (!validateSignedManifest(candidate)) {\n throw schemaFailure();\n }\n\n const manifest = candidate as SignedActionManifestV2;\n const { issuer, integrity } = manifest;\n assertContractIdentities(manifest);\n\n if (!trustPolicy.trustedIssuerDids.includes(issuer.did)) {\n throw new ActionManifestV2VerificationError('UNTRUSTED_ISSUER', `Manifest issuer is not trusted: ${issuer.did}`);\n }\n if (trustPolicy.revokedIssuerDids?.includes(issuer.did)) {\n throw new ActionManifestV2VerificationError('REVOKED_ISSUER', `Manifest issuer is revoked: ${issuer.did}`);\n }\n if (integrity.signature.verificationMethod !== issuer.verificationMethod || !integrity.signature.verificationMethod.startsWith(`${issuer.did}#`)) {\n throw new ActionManifestV2VerificationError('VERIFICATION_METHOD_MISMATCH', 'The signature verification method does not belong to the declared manifest issuer');\n }\n if (!trustPolicy.allowedSignatureAlgorithms.includes(integrity.signature.algorithm)) {\n throw new ActionManifestV2VerificationError('DISALLOWED_SIGNATURE_ALGORITHM', `Manifest signature algorithm is not allowed: ${integrity.signature.algorithm}`);\n }\n\n let digest: string;\n try {\n digest = await computeActionManifestV2Digest(payloadFromSignedManifest(manifest));\n } catch (error) {\n throw new ActionManifestV2VerificationError(\n 'INVALID_MANIFEST',\n error instanceof Error ? `Action Manifest v2 cannot be canonicalized: ${error.message}` : 'Action Manifest v2 cannot be canonicalized'\n );\n }\n if (digest !== integrity.digest.value) {\n throw new ActionManifestV2VerificationError('DIGEST_MISMATCH', 'Manifest payload does not match its signed digest');\n }\n\n let validSignature = false;\n try {\n validSignature = await trustPolicy.verifySignature({\n issuerDid: issuer.did,\n verificationMethod: integrity.signature.verificationMethod,\n algorithm: integrity.signature.algorithm,\n data: signatureInput(digest),\n signature: integrity.signature.value,\n });\n } catch {\n validSignature = false;\n }\n if (!validSignature) {\n throw new ActionManifestV2VerificationError('INVALID_SIGNATURE', 'Manifest signature verification failed');\n }\n\n const trustedSnapshot = JSON.parse(JSON.stringify(manifest)) as SignedActionManifestV2;\n return deepFreeze(trustedSnapshot) as VerifiedActionManifestV2;\n}\n","/** JSON Schema 2020-12 for the signed Manifest v2 envelope. */\nexport const ACTION_MANIFEST_V2_SCHEMA = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: 'https://ixo.world/schemas/qi/action-manifest-v2.schema.json',\n type: 'object',\n additionalProperties: false,\n required: ['manifestVersion', 'manifestId', 'generatedAt', 'package', 'issuer', 'compatibility', 'actions', 'primitives', 'integrity'],\n properties: {\n manifestVersion: { const: '2.0' },\n manifestId: { type: 'string', minLength: 1 },\n generatedAt: {\n type: 'string',\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d+)?(?:Z|[+-]\\\\d{2}:\\\\d{2})$',\n },\n package: {\n type: 'object',\n additionalProperties: false,\n required: ['name', 'version', 'sourceCommit'],\n properties: {\n name: { type: 'string', minLength: 1 },\n version: { type: 'string', minLength: 1 },\n sourceCommit: { type: 'string', minLength: 1 },\n buildId: { type: 'string', minLength: 1 },\n distributionUrl: { type: 'string', pattern: '^[a-zA-Z][a-zA-Z0-9+.-]*:' },\n },\n },\n issuer: {\n type: 'object',\n additionalProperties: false,\n required: ['did', 'verificationMethod'],\n properties: {\n did: { type: 'string', pattern: '^did:[a-z0-9]+:.+' },\n verificationMethod: { type: 'string', pattern: '^did:[a-z0-9]+:.+#.+' },\n },\n },\n compatibility: {\n type: 'object',\n additionalProperties: false,\n required: ['engine', 'flowSchemaVersions', 'features'],\n properties: {\n engine: {\n type: 'object',\n additionalProperties: false,\n required: ['versionRange'],\n properties: {\n versionRange: { type: 'string', minLength: 1 },\n },\n },\n flowSchemaVersions: {\n type: 'array',\n minItems: 1,\n uniqueItems: true,\n items: { type: 'string', minLength: 1 },\n },\n features: {\n type: 'array',\n minItems: 1,\n uniqueItems: true,\n items: { type: 'string', minLength: 1 },\n },\n },\n },\n actions: {\n type: 'array',\n items: { $ref: '#/$defs/contract' },\n },\n primitives: {\n type: 'array',\n items: { $ref: '#/$defs/contract' },\n },\n integrity: {\n type: 'object',\n additionalProperties: false,\n required: ['canonicalization', 'digest', 'signature'],\n properties: {\n canonicalization: { const: 'RFC8785' },\n digest: {\n type: 'object',\n additionalProperties: false,\n required: ['algorithm', 'value'],\n properties: {\n algorithm: { const: 'SHA-256' },\n value: { type: 'string', pattern: '^sha256:[0-9a-f]{64}$' },\n },\n },\n signature: {\n type: 'object',\n additionalProperties: false,\n required: ['algorithm', 'verificationMethod', 'value'],\n properties: {\n algorithm: { type: 'string', minLength: 1 },\n verificationMethod: { type: 'string', pattern: '^did:[a-z0-9]+:.+#.+' },\n value: { type: 'string', minLength: 1 },\n },\n },\n },\n },\n },\n $defs: {\n contract: {\n type: 'object',\n required: ['type', 'contractVersion'],\n properties: {\n type: { type: 'string', minLength: 1 },\n contractVersion: { type: 'string', minLength: 1 },\n aliases: {\n type: 'array',\n uniqueItems: true,\n items: { type: 'string', minLength: 1 },\n },\n },\n },\n },\n} as const;\n","import {\n verifyActionManifestV2,\n type ActionManifestV2Action,\n type ActionManifestV2TrustPolicy,\n type SignedActionManifestV2,\n type VerifiedActionManifestV2,\n} from '../../actionRegistry/manifestV2';\nimport { digestCanonicalJson, type CanonicalJsonValue } from './canonical';\nimport {\n type ActionContractRef,\n type ActionContractV1,\n type ActionSafety,\n type FlowDataClassification,\n type FlowJsonObject,\n type Sha256Digest,\n type VerifiedActionContractResolver,\n} from './contracts';\n\nexport interface HistoricalActionManifestRepository {\n getByDigest(digest: Sha256Digest): Promise<SignedActionManifestV2 | null>;\n}\n\nexport type ActionContractResolutionErrorCode =\n | 'MANIFEST_NOT_FOUND'\n | 'MANIFEST_DIGEST_MISMATCH'\n | 'ACTION_NOT_FOUND'\n | 'ACTION_VERSION_MISMATCH'\n | 'INVALID_ACTION_CONTRACT'\n | 'ACTION_CONTRACT_DIGEST_MISMATCH';\n\nexport class ActionContractResolutionError extends Error {\n constructor(\n readonly code: ActionContractResolutionErrorCode,\n message: string\n ) {\n super(message);\n this.name = 'ActionContractResolutionError';\n }\n}\n\nconst SAFETY_CLASSES = new Set<ActionSafety>(['pure', 'provider_idempotent', 'fenced', 'approval_only']);\nconst DATA_CLASSIFICATIONS = new Set<FlowDataClassification>(['public', 'shared', 'confidential', 'restricted']);\nconst PROCEDURES = new Set(['required', 'supported', 'unavailable']);\n\nfunction object(value: unknown, field: string): FlowJsonObject {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new ActionContractResolutionError('INVALID_ACTION_CONTRACT', `${field} must be a JSON object`);\n }\n return value as FlowJsonObject;\n}\n\nfunction strings(value: unknown, field: string): string[] {\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== 'string' || entry.length === 0)) {\n throw new ActionContractResolutionError('INVALID_ACTION_CONTRACT', `${field} must be an array of non-empty strings`);\n }\n return [...value];\n}\n\nfunction requiredString(action: ActionManifestV2Action, field: string): string {\n const value = action[field];\n if (typeof value !== 'string' || value.length === 0) {\n throw new ActionContractResolutionError('INVALID_ACTION_CONTRACT', `${action.type}.${field} must be a non-empty string`);\n }\n return value;\n}\n\nfunction parseActionContract(action: ActionManifestV2Action, manifestDigest: Sha256Digest): Omit<ActionContractV1, 'contractDigest'> {\n const can = requiredString(action, 'can');\n const safety = requiredString(action, 'safety') as ActionSafety;\n if (!SAFETY_CLASSES.has(safety)) {\n throw new ActionContractResolutionError('INVALID_ACTION_CONTRACT', `${action.type}.safety is not a supported safety class`);\n }\n const dataClassification = requiredString(action, 'dataClassification') as FlowDataClassification;\n if (!DATA_CLASSIFICATIONS.has(dataClassification)) {\n throw new ActionContractResolutionError('INVALID_ACTION_CONTRACT', `${action.type}.dataClassification is not supported`);\n }\n\n const providerIdempotency = object(action.providerIdempotency, `${action.type}.providerIdempotency`);\n if (typeof providerIdempotency.supported !== 'boolean') {\n throw new ActionContractResolutionError('INVALID_ACTION_CONTRACT', `${action.type}.providerIdempotency.supported must be boolean`);\n }\n const readback = requiredString(action, 'readbackProcedure');\n const compensation = requiredString(action, 'compensationProcedure');\n if (!PROCEDURES.has(readback) || !PROCEDURES.has(compensation)) {\n throw new ActionContractResolutionError('INVALID_ACTION_CONTRACT', `${action.type} readback and compensation procedures must be explicit`);\n }\n if ((safety === 'provider_idempotent' || safety === 'fenced') && readback === 'unavailable') {\n throw new ActionContractResolutionError('INVALID_ACTION_CONTRACT', `${action.type} cannot perform external effects without a readback procedure`);\n }\n if (safety === 'provider_idempotent' && providerIdempotency.supported !== true) {\n throw new ActionContractResolutionError('INVALID_ACTION_CONTRACT', `${action.type} declares provider idempotency without provider support`);\n }\n\n return {\n kind: 'qi.action.contract',\n schemaVersion: '1.0',\n type: action.type,\n can,\n contractVersion: action.contractVersion,\n manifestDigest,\n inputSchema: object(action.inputSchema, `${action.type}.inputSchema`),\n outputSchema: object(action.outputSchema, `${action.type}.outputSchema`),\n safety,\n handlerVersion: requiredString(action, 'handlerVersion'),\n dataClassification,\n requiredServices: strings(action.requiredServices, `${action.type}.requiredServices`),\n idempotency: {\n providerKey: providerIdempotency.supported,\n readback: readback as ActionContractV1['idempotency']['readback'],\n compensation: compensation as ActionContractV1['idempotency']['compensation'],\n },\n };\n}\n\nexport async function computeActionContractDigest(contract: Omit<ActionContractV1, 'contractDigest'>): Promise<Sha256Digest> {\n return (await digestCanonicalJson(contract as unknown as CanonicalJsonValue)) as Sha256Digest;\n}\n\n/**\n * Resolve a contract only from a signed historical manifest pinned by digest.\n * The live registry is deliberately not an input to this execution boundary.\n */\nexport class HistoricalManifestActionContractResolver implements VerifiedActionContractResolver {\n private readonly verifiedManifests = new Map<Sha256Digest, Promise<VerifiedActionManifestV2>>();\n\n constructor(\n private readonly repository: HistoricalActionManifestRepository,\n private readonly trustPolicy: ActionManifestV2TrustPolicy\n ) {}\n\n async resolve(ref: ActionContractRef): Promise<ActionContractV1> {\n const manifest = await this.loadManifest(ref.manifestDigest);\n const action = manifest.actions.find((candidate) => candidate.type === ref.type);\n if (!action) throw new ActionContractResolutionError('ACTION_NOT_FOUND', `Action ${ref.type} is not present in ${ref.manifestDigest}`);\n if (action.contractVersion !== ref.contractVersion) {\n throw new ActionContractResolutionError('ACTION_VERSION_MISMATCH', `Action ${ref.type} contract version does not match its Flow revision`);\n }\n\n const unsigned = parseActionContract(action as ActionManifestV2Action, ref.manifestDigest);\n const contractDigest = await computeActionContractDigest(unsigned);\n if (contractDigest !== ref.contractDigest) {\n throw new ActionContractResolutionError('ACTION_CONTRACT_DIGEST_MISMATCH', `Action ${ref.type} contract bytes do not match the pinned digest`);\n }\n if (unsigned.can !== ref.can) {\n throw new ActionContractResolutionError('INVALID_ACTION_CONTRACT', `Action ${ref.type} capability does not match the Flow revision`);\n }\n return Object.freeze({ ...unsigned, contractDigest });\n }\n\n private loadManifest(digest: Sha256Digest): Promise<VerifiedActionManifestV2> {\n const cached = this.verifiedManifests.get(digest);\n if (cached) return cached;\n const pending = this.verifyManifest(digest);\n this.verifiedManifests.set(digest, pending);\n pending.catch(() => this.verifiedManifests.delete(digest));\n return pending;\n }\n\n private async verifyManifest(digest: Sha256Digest): Promise<VerifiedActionManifestV2> {\n const signed = await this.repository.getByDigest(digest);\n if (!signed) throw new ActionContractResolutionError('MANIFEST_NOT_FOUND', `Historical Action manifest is unavailable: ${digest}`);\n const verified = await verifyActionManifestV2(signed, this.trustPolicy);\n if (verified.integrity.digest.value !== digest) {\n throw new ActionContractResolutionError('MANIFEST_DIGEST_MISMATCH', `Historical manifest repository returned the wrong digest for ${digest}`);\n }\n return verified;\n }\n}\n","import Ajv2020 from 'ajv/dist/2020.js';\nimport { canonicalizeJson, deepFreezeJson, digestCanonicalJson, type CanonicalJsonValue } from './canonical';\nimport type {\n ActionContractV1,\n AttemptId,\n DID,\n FlowDefinitionRef,\n FlowJsonObject,\n FlowStepDefinitionV1,\n IdempotencyKey,\n RunId,\n Sha256Digest,\n TopicRequestRefV1,\n VerifiedExecutionPolicyV1,\n VerifiedFlowDefinitionRevisionV1,\n VerifiedInvocation,\n VerifiedActionContractResolver,\n} from './contracts';\nimport { buildFlowResourceUri, FLOW_CAPABILITIES } from './contracts';\nimport type { EffectClaimAdmissionV1, EffectClaimLedger, EffectClaimRecordV1 } from './effectClaims';\nimport {\n fingerprintFlowCommand,\n matrixFlowEventTransactionId,\n reduceFlowEvents,\n signFlowEvent,\n type ActionOutcomeEvidenceV1,\n type FlowEventEnvelopeV1,\n type FlowEventSigner,\n type MatrixFlowEventStore,\n type RunGenesisV1,\n} from './events';\nimport { deriveAttemptId, deriveEffectClaimKey, deriveRunId } from './ids';\n\nexport interface VerifiedAttemptAuthorization {\n flow: VerifiedInvocation;\n action: VerifiedInvocation;\n topic?: VerifiedInvocation;\n provider?: VerifiedInvocation;\n /** Peer-issued, ledger-addressed invocation derived from the command proof chain. */\n effectClaim?: {\n authorization: CanonicalJsonValue;\n invocation: VerifiedInvocation;\n };\n}\n\n/** Host-specific UCAN verification lives behind this fail-closed boundary. */\nexport interface InvocationAuthorizer {\n authorizeRunStart(request: {\n authorization: CanonicalJsonValue;\n executorDid: DID;\n definition: FlowDefinitionRef;\n runId: RunId;\n actor: DID;\n issuedAt: string;\n idempotencyKey: IdempotencyKey;\n }): Promise<VerifiedInvocation>;\n authorizeRunControl(request: {\n authorization: CanonicalJsonValue;\n executorDid: DID;\n definition: FlowDefinitionRef;\n runId: RunId;\n actor: DID;\n issuedAt: string;\n idempotencyKey: IdempotencyKey;\n can: typeof FLOW_CAPABILITIES.runCancel | typeof FLOW_CAPABILITIES.runClose;\n }): Promise<VerifiedInvocation>;\n authorizeAttempt(request: {\n authorization: CanonicalJsonValue;\n executorDid: DID;\n definition: FlowDefinitionRef;\n runId: RunId;\n stepId: string;\n action: ActionContractV1;\n actor: DID;\n idempotencyKey: IdempotencyKey;\n effectClaimAudience?: DID;\n topicBinding?: { bindingId: string; topicResource: string };\n /** The authorizer must bind this reference to signed Topic request evidence. */\n topicRequest?: TopicRequestRefV1;\n }): Promise<VerifiedAttemptAuthorization>;\n}\n\nexport type ProviderInvocationResult =\n | { outcome: 'succeeded'; output: FlowJsonObject; outcomes?: readonly ActionOutcomeInputV1[]; providerCorrelation?: string }\n | { outcome: 'failed_before_effect'; error: FlowJsonObject }\n | { outcome: 'ambiguous'; providerCorrelation?: string; reason: string };\n\nexport type ProviderReadbackResult =\n | { outcome: 'succeeded'; output: FlowJsonObject; outcomes?: readonly ActionOutcomeInputV1[]; providerCorrelation?: string }\n | { outcome: 'not_found' }\n | { outcome: 'unknown'; providerCorrelation?: string; reason: string };\n\nexport interface ActionOutcomeInputV1 {\n name: string;\n payload: FlowJsonObject;\n}\n\nexport const UNIVERSAL_ACTION_COMPLETED_OUTCOME = 'step.completed';\n\nexport interface ManifestBoundActionAdapter {\n invoke(request: {\n contract: ActionContractV1;\n inputs: FlowJsonObject;\n providerIdempotencyKey: IdempotencyKey;\n invocation: VerifiedAttemptAuthorization;\n /** Must be called immediately before the adapter starts an external effect. */\n assertEffectAllowed: () => void;\n }): Promise<ProviderInvocationResult>;\n readback(request: {\n contract: ActionContractV1;\n inputs: FlowJsonObject;\n providerIdempotencyKey: IdempotencyKey;\n providerCorrelation?: string;\n invocation: VerifiedAttemptAuthorization;\n }): Promise<ProviderReadbackResult>;\n}\n\nexport interface StartPeerRunCommandV1 {\n definition: VerifiedFlowDefinitionRevisionV1;\n launchKind: RunGenesisV1['launchKind'];\n launchNonce: string;\n actor: DID;\n issuedAt: string;\n idempotencyKey: IdempotencyKey;\n authorization: CanonicalJsonValue;\n topicBindingId?: string;\n}\n\nexport interface ExecutePeerAttemptCommandV1 {\n definition: VerifiedFlowDefinitionRevisionV1;\n genesis: RunGenesisV1;\n stepId: string;\n actor: DID;\n issuedAt: string;\n idempotencyKey: IdempotencyKey;\n inputs: FlowJsonObject;\n authorization: CanonicalJsonValue;\n policy: VerifiedExecutionPolicyV1;\n topicBinding?: { bindingId: string; topicResource: string };\n topicRequest?: TopicRequestRefV1;\n}\n\nexport interface CancelPeerRunCommandV1 {\n definition: VerifiedFlowDefinitionRevisionV1;\n genesis: RunGenesisV1;\n actor: DID;\n issuedAt: string;\n idempotencyKey: IdempotencyKey;\n authorization: CanonicalJsonValue;\n reason?: string;\n}\n\nexport interface FinalizePeerRunCommandV1 {\n definition: VerifiedFlowDefinitionRevisionV1;\n genesis: RunGenesisV1;\n actor: DID;\n issuedAt: string;\n idempotencyKey: IdempotencyKey;\n authorization: CanonicalJsonValue;\n}\n\nexport type PeerAttemptResult =\n | { outcome: 'succeeded'; attemptId: AttemptId; outputDigest: Sha256Digest; providerCorrelation?: string }\n | { outcome: 'failed_before_effect'; attemptId: AttemptId }\n | { outcome: 'needs_verification'; attemptId: AttemptId; providerCorrelation?: string }\n | { outcome: 'approval_required'; attemptId: AttemptId; proposalDigest: Sha256Digest }\n | { outcome: 'deferred'; attemptId: AttemptId; reason: string };\n\nexport interface PeerExecutor {\n startRun(command: StartPeerRunCommandV1): Promise<RunGenesisV1>;\n cancelRun(command: CancelPeerRunCommandV1): Promise<FlowEventEnvelopeV1>;\n finalizeRun(command: FinalizePeerRunCommandV1): Promise<FlowEventEnvelopeV1>;\n executeAttempt(command: ExecutePeerAttemptCommandV1): Promise<PeerAttemptResult>;\n}\n\nexport class PeerExecutionError extends Error {\n constructor(\n readonly code:\n | 'DEFINITION_MISMATCH'\n | 'STEP_NOT_FOUND'\n | 'POLICY_MISMATCH'\n | 'POLICY_PAUSED'\n | 'AUTHORIZATION_MISMATCH'\n | 'EVENT_CONFLICT'\n | 'EVENT_UNAVAILABLE'\n | 'CLAIM_CONFLICT'\n | 'STEP_EXPIRED'\n | 'POLICY_EXPIRED'\n | 'COMMAND_TIME_INVALID'\n | 'TOPIC_BINDING_REQUIRED'\n | 'ELIGIBILITY_EVIDENCE_REQUIRED'\n | 'ACTION_CONTRACT_INVALID'\n | 'INPUT_SCHEMA_INVALID'\n | 'OUTPUT_SCHEMA_INVALID'\n | 'RUN_CANCELLING'\n | 'RUN_FINALIZED'\n | 'RUN_NOT_FINALIZABLE',\n message: string\n ) {\n super(message);\n this.name = 'PeerExecutionError';\n }\n}\n\nexport interface CreatePeerExecutorOptions {\n executorDid: DID;\n signer: FlowEventSigner;\n events: MatrixFlowEventStore;\n contracts: VerifiedActionContractResolver;\n authorizer: InvocationAuthorizer;\n actions: ManifestBoundActionAdapter;\n effectClaims: EffectClaimLedger;\n effectClaimAudience?: DID;\n now?: () => number;\n}\n\nfunction definitionRef(definition: VerifiedFlowDefinitionRevisionV1): FlowDefinitionRef {\n return { ...definition.ref, digest: definition.integrity.digest.value };\n}\n\nfunction proofReferences(authorization: VerifiedAttemptAuthorization | VerifiedInvocation): string[] {\n const invocations =\n 'flow' in authorization ? [authorization.flow, authorization.action, authorization.topic, authorization.provider, authorization.effectClaim?.invocation] : [authorization];\n return [...new Set(invocations.flatMap((invocation) => (invocation ? [invocation.cid, ...invocation.proofCids] : [])))].sort();\n}\n\nfunction assertInvocation(\n invocation: VerifiedInvocation,\n expected: { audience: DID; can: string; with: string; definitionDigest: Sha256Digest; actionContractDigest?: Sha256Digest; idempotencyKey: IdempotencyKey }\n): void {\n if (\n invocation.audience !== expected.audience ||\n invocation.can !== expected.can ||\n invocation.with !== expected.with ||\n invocation.definitionDigest !== expected.definitionDigest ||\n invocation.actionContractDigest !== expected.actionContractDigest ||\n invocation.idempotencyKey !== expected.idempotencyKey\n ) {\n throw new PeerExecutionError('AUTHORIZATION_MISMATCH', `Verified invocation does not authorize ${expected.can} on ${expected.with}`);\n }\n}\n\nfunction outputDigest(output: FlowJsonObject): Promise<Sha256Digest> {\n return digestCanonicalJson(output) as Promise<Sha256Digest>;\n}\n\nfunction compareCodeUnits(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nasync function actionOutcomes(output: Sha256Digest, provided: readonly ActionOutcomeInputV1[] = []): Promise<ActionOutcomeEvidenceV1[]> {\n const inputs: ActionOutcomeInputV1[] = [\n { name: UNIVERSAL_ACTION_COMPLETED_OUTCOME, payload: { outputDigest: output } },\n ...provided.filter((outcome) => outcome.name.trim() !== UNIVERSAL_ACTION_COMPLETED_OUTCOME),\n ];\n const outcomes = await Promise.all(\n inputs.map(async ({ name, payload }) => {\n const normalizedName = name.trim();\n if (!normalizedName) throw new PeerExecutionError('EVENT_CONFLICT', 'Action outcome name cannot be empty');\n const snapshot = JSON.parse(canonicalizeJson(payload)) as FlowJsonObject;\n return { name: normalizedName, payload: snapshot, payloadDigest: (await digestCanonicalJson(snapshot)) as Sha256Digest };\n })\n );\n return outcomes\n .filter((outcome, index) => outcomes.findIndex((candidate) => candidate.name === outcome.name && candidate.payloadDigest === outcome.payloadDigest) === index)\n .sort((left, right) => compareCodeUnits(left.name, right.name) || compareCodeUnits(left.payloadDigest, right.payloadDigest));\n}\n\nfunction actionOutcomesDigest(outcomes: readonly ActionOutcomeEvidenceV1[]): Promise<Sha256Digest> {\n return digestCanonicalJson(outcomes as unknown as CanonicalJsonValue) as Promise<Sha256Digest>;\n}\n\nfunction canonicalSnapshot<T>(value: CanonicalJsonValue): T {\n return deepFreezeJson(JSON.parse(canonicalizeJson(value)) as T);\n}\n\nfunction snapshotStartCommand(command: StartPeerRunCommandV1): StartPeerRunCommandV1 {\n return canonicalSnapshot<StartPeerRunCommandV1>({\n definition: command.definition as unknown as CanonicalJsonValue,\n launchKind: command.launchKind,\n launchNonce: command.launchNonce,\n actor: command.actor,\n issuedAt: command.issuedAt,\n idempotencyKey: command.idempotencyKey,\n authorization: command.authorization,\n ...(command.topicBindingId !== undefined ? { topicBindingId: command.topicBindingId } : {}),\n });\n}\n\nfunction snapshotAttemptCommand(command: ExecutePeerAttemptCommandV1): ExecutePeerAttemptCommandV1 {\n return canonicalSnapshot<ExecutePeerAttemptCommandV1>({\n definition: command.definition as unknown as CanonicalJsonValue,\n genesis: command.genesis as unknown as CanonicalJsonValue,\n stepId: command.stepId,\n actor: command.actor,\n issuedAt: command.issuedAt,\n idempotencyKey: command.idempotencyKey,\n inputs: command.inputs,\n authorization: command.authorization,\n policy: command.policy as unknown as CanonicalJsonValue,\n ...(command.topicBinding ? { topicBinding: command.topicBinding } : {}),\n ...(command.topicRequest ? { topicRequest: command.topicRequest as unknown as CanonicalJsonValue } : {}),\n });\n}\n\nfunction snapshotCancelCommand(command: CancelPeerRunCommandV1): CancelPeerRunCommandV1 {\n return canonicalSnapshot<CancelPeerRunCommandV1>({\n definition: command.definition as unknown as CanonicalJsonValue,\n genesis: command.genesis as unknown as CanonicalJsonValue,\n actor: command.actor,\n issuedAt: command.issuedAt,\n idempotencyKey: command.idempotencyKey,\n authorization: command.authorization,\n ...(command.reason !== undefined ? { reason: command.reason } : {}),\n });\n}\n\nfunction snapshotFinalizeCommand(command: FinalizePeerRunCommandV1): FinalizePeerRunCommandV1 {\n return canonicalSnapshot<FinalizePeerRunCommandV1>({\n definition: command.definition as unknown as CanonicalJsonValue,\n genesis: command.genesis as unknown as CanonicalJsonValue,\n actor: command.actor,\n issuedAt: command.issuedAt,\n idempotencyKey: command.idempotencyKey,\n authorization: command.authorization,\n });\n}\n\nfunction durationMs(value: string): number | undefined {\n const match = /^P(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?)?$/u.exec(value);\n if (!match) return undefined;\n const [, days, hours, minutes] = match;\n const total = Number(days ?? 0) * 86_400_000 + Number(hours ?? 0) * 3_600_000 + Number(minutes ?? 0) * 60_000;\n return total > 0 ? total : undefined;\n}\n\nfunction assertStepWithinTtl(step: FlowStepDefinitionV1, genesis: RunGenesisV1, now: number): void {\n const startedAt = Date.parse(genesis.startedAt);\n const deadlines: number[] = [];\n if (step.ttlMs !== undefined) {\n if (!Number.isFinite(startedAt)) throw new PeerExecutionError('STEP_EXPIRED', 'Run start time is unavailable for the signed step TTL');\n deadlines.push(startedAt + step.ttlMs);\n }\n if (step.ttl?.absoluteDueDate) deadlines.push(Date.parse(step.ttl.absoluteDueDate));\n for (const relative of [step.ttl?.fromEnablement, step.ttl?.fromCommitment]) {\n if (!relative) continue;\n const relativeMs = durationMs(relative);\n if (!Number.isFinite(startedAt) || relativeMs === undefined) {\n throw new PeerExecutionError('STEP_EXPIRED', 'The signed relative step TTL cannot be proven unexpired');\n }\n // v1 has no separately signed enablement/commitment timestamp yet. Run\n // start is the earliest possible anchor, so this conservative deadline\n // can deny late work but can never permit an effect beyond the authored TTL.\n deadlines.push(startedAt + relativeMs);\n }\n if (deadlines.some((deadline) => !Number.isFinite(deadline) || now >= deadline)) {\n throw new PeerExecutionError('STEP_EXPIRED', `Flow step ${step.stepId} is outside its signed execution window`);\n }\n}\n\nfunction assertCommandTime(issuedAtValue: string, executionNow: number): void {\n const issuedAt = Date.parse(issuedAtValue);\n if (!Number.isFinite(issuedAt) || issuedAt > executionNow) {\n throw new PeerExecutionError('COMMAND_TIME_INVALID', 'Command time must be valid and no later than executor time');\n }\n}\n\nasync function assertRunGenesis(definitionRevision: VerifiedFlowDefinitionRevisionV1, genesis: RunGenesisV1): Promise<FlowDefinitionRef> {\n const definition = definitionRef(definitionRevision);\n const expectedRunId = await deriveRunId(definition, genesis.launchKind, genesis.launchNonce);\n const expectedStepIds = definitionRevision.steps.map((candidate) => candidate.stepId);\n if (\n genesis.runId !== expectedRunId ||\n canonicalizeJson(genesis.definition as unknown as CanonicalJsonValue) !== canonicalizeJson(definition as unknown as CanonicalJsonValue) ||\n canonicalizeJson(genesis.requiredStepIds as unknown as CanonicalJsonValue) !== canonicalizeJson(expectedStepIds) ||\n !Number.isFinite(Date.parse(genesis.startedAt))\n ) {\n throw new PeerExecutionError('DEFINITION_MISMATCH', 'Run genesis does not match the immutable Flow definition');\n }\n return definition;\n}\n\nexport function createPeerExecutor(options: CreatePeerExecutorOptions): PeerExecutor {\n const schemaCompiler = new Ajv2020({ allErrors: true, strict: false });\n type SchemaValidator = ReturnType<typeof schemaCompiler.compile>;\n const validators = new Map<Sha256Digest, { input: SchemaValidator; output: SchemaValidator }>();\n\n function contractValidators(contract: ActionContractV1): { input: SchemaValidator; output: SchemaValidator } {\n let resolved = validators.get(contract.contractDigest);\n if (!resolved) {\n try {\n const input = schemaCompiler.compile(contract.inputSchema);\n const output = schemaCompiler.compile(contract.outputSchema);\n if ((input as SchemaValidator & { $async?: boolean }).$async || (output as SchemaValidator & { $async?: boolean }).$async) {\n throw new Error('Asynchronous JSON Schema validation is not supported by the peer executor');\n }\n resolved = { input, output };\n } catch (error) {\n throw new PeerExecutionError('ACTION_CONTRACT_INVALID', `Pinned Action schema is invalid: ${error instanceof Error ? error.message : String(error)}`);\n }\n validators.set(contract.contractDigest, resolved);\n }\n return resolved;\n }\n\n function assertValidInputs(contract: ActionContractV1, inputs: FlowJsonObject): void {\n const validate = contractValidators(contract).input;\n if (!validate(inputs)) {\n throw new PeerExecutionError('INPUT_SCHEMA_INVALID', `Action inputs do not match the pinned schema: ${schemaCompiler.errorsText(validate.errors)}`);\n }\n }\n\n async function validatedOutputDigest(contract: ActionContractV1, candidate: FlowJsonObject): Promise<Sha256Digest> {\n const output = canonicalSnapshot<FlowJsonObject>(candidate);\n const validate = contractValidators(contract).output;\n if (!validate(output)) {\n throw new PeerExecutionError('OUTPUT_SCHEMA_INVALID', `Action output does not match the pinned schema: ${schemaCompiler.errorsText(validate.errors)}`);\n }\n return outputDigest(output);\n }\n\n function assertExecutionWindow(command: ExecutePeerAttemptCommandV1, step: FlowStepDefinitionV1): void {\n const executionNow = options.now?.() ?? Date.now();\n if (command.policy.expiresAt && (!Number.isFinite(Date.parse(command.policy.expiresAt)) || executionNow >= Date.parse(command.policy.expiresAt))) {\n throw new PeerExecutionError('POLICY_EXPIRED', 'Signed execution policy has expired');\n }\n assertStepWithinTtl(step, command.genesis, executionNow);\n }\n\n const append = async (envelope: Omit<FlowEventEnvelopeV1, 'eventId' | 'signature'>): Promise<FlowEventEnvelopeV1> => {\n const event = await signFlowEvent(envelope, options.signer);\n try {\n const result = await options.events.append(event, matrixFlowEventTransactionId(event));\n if (result.outcome === 'conflict') throw new PeerExecutionError('EVENT_CONFLICT', `Matrix transaction conflicts for ${event.eventId}`);\n } catch (error) {\n if (error instanceof PeerExecutionError) throw error;\n throw new PeerExecutionError('EVENT_UNAVAILABLE', `Matrix could not durably append ${event.payload.kind}: ${error instanceof Error ? error.message : String(error)}`);\n }\n return event;\n };\n\n const eventBase = (params: {\n runId: RunId;\n definition: FlowDefinitionRef;\n actor: DID;\n issuedAt: string;\n idempotencyKey: IdempotencyKey;\n commandFingerprint: Sha256Digest;\n parents: readonly FlowEventEnvelopeV1['eventId'][];\n proofs: readonly string[];\n }) => ({\n kind: 'qi.flow.event' as const,\n schemaVersion: '1.0' as const,\n runId: params.runId,\n definition: params.definition,\n producer: options.executorDid,\n actor: params.actor,\n occurredAt: params.issuedAt,\n parents: params.parents,\n correlationId: params.idempotencyKey,\n idempotencyKey: params.idempotencyKey,\n commandFingerprint: params.commandFingerprint,\n proofReferences: params.proofs,\n });\n\n const readAnchoredRun = async (definition: FlowDefinitionRef, genesis: RunGenesisV1) => {\n let runEvents: readonly FlowEventEnvelopeV1[];\n try {\n runEvents = await options.events.read(genesis.runId);\n } catch (error) {\n throw new PeerExecutionError('EVENT_UNAVAILABLE', `Matrix could not inspect run state: ${error instanceof Error ? error.message : String(error)}`);\n }\n const reducedRun = reduceFlowEvents(genesis, runEvents);\n const acceptedEventIds = new Set(reducedRun.acceptedEventIds);\n const canonicalGenesis = canonicalizeJson(genesis as unknown as CanonicalJsonValue);\n if (\n !runEvents.some(\n (event) =>\n acceptedEventIds.has(event.eventId) &&\n event.payload.kind === 'run.started' &&\n canonicalizeJson(event.payload.genesis as unknown as CanonicalJsonValue) === canonicalGenesis\n )\n ) {\n throw new PeerExecutionError('DEFINITION_MISMATCH', 'Run genesis is not anchored by a verified run-start event');\n }\n if (canonicalizeJson(reducedRun.definition as unknown as CanonicalJsonValue) !== canonicalizeJson(definition as unknown as CanonicalJsonValue)) {\n throw new PeerExecutionError('DEFINITION_MISMATCH', 'Reduced run definition does not match the immutable Flow definition');\n }\n return { runEvents, reducedRun, acceptedEventIds };\n };\n\n async function startRun(command: StartPeerRunCommandV1): Promise<RunGenesisV1> {\n command = snapshotStartCommand(command);\n const definition = definitionRef(command.definition);\n const runId = await deriveRunId(definition, command.launchKind, command.launchNonce);\n const executionNow = options.now?.() ?? Date.now();\n assertCommandTime(command.issuedAt, executionNow);\n if (command.launchKind === 'topic.request' && !command.topicBindingId?.trim()) {\n throw new PeerExecutionError('TOPIC_BINDING_REQUIRED', 'Topic run start requires a non-empty binding');\n }\n const genesis: RunGenesisV1 = {\n kind: 'qi.flow.run-genesis',\n schemaVersion: '1.0',\n runId,\n definition,\n launchKind: command.launchKind,\n launchNonce: command.launchNonce,\n requiredStepIds: command.definition.steps.map((step) => step.stepId),\n startedBy: command.actor,\n startedAt: command.issuedAt,\n ...(command.topicBindingId ? { topicBindingId: command.topicBindingId } : {}),\n };\n let runEvents: readonly FlowEventEnvelopeV1[];\n try {\n runEvents = await options.events.read(runId);\n } catch (error) {\n throw new PeerExecutionError('EVENT_UNAVAILABLE', `Matrix could not inspect existing run starts: ${error instanceof Error ? error.message : String(error)}`);\n }\n const canonicalDefinition = canonicalizeJson(definition as unknown as CanonicalJsonValue);\n const canonicalGenesis = canonicalizeJson(genesis as unknown as CanonicalJsonValue);\n const existingStarts = runEvents.filter(\n (event) => event.runId === runId && canonicalizeJson(event.definition as unknown as CanonicalJsonValue) === canonicalDefinition && event.payload.kind === 'run.started'\n );\n if (existingStarts.some((event) => event.payload.kind === 'run.started' && canonicalizeJson(event.payload.genesis as unknown as CanonicalJsonValue) !== canonicalGenesis)) {\n throw new PeerExecutionError('EVENT_CONFLICT', `Run ${runId} already has different signed genesis evidence`);\n }\n if (existingStarts.length > 0) {\n const reducedRun = reduceFlowEvents(genesis, runEvents);\n const acceptedEventIds = new Set(reducedRun.acceptedEventIds);\n const acceptedStart = existingStarts.find((event) => acceptedEventIds.has(event.eventId));\n if (acceptedStart?.payload.kind === 'run.started') return acceptedStart.payload.genesis;\n throw new PeerExecutionError('EVENT_CONFLICT', `Run ${runId} has invalid signed genesis evidence`);\n }\n const invocation = await options.authorizer.authorizeRunStart({\n authorization: command.authorization,\n executorDid: options.executorDid,\n definition,\n runId,\n actor: command.actor,\n issuedAt: command.issuedAt,\n idempotencyKey: command.idempotencyKey,\n });\n assertInvocation(invocation, {\n audience: options.executorDid,\n can: FLOW_CAPABILITIES.runStart,\n with: buildFlowResourceUri(definition, { kind: 'run', runId }),\n definitionDigest: definition.digest,\n idempotencyKey: command.idempotencyKey,\n });\n const fingerprint = await fingerprintFlowCommand(genesis as unknown as CanonicalJsonValue);\n await append({\n ...eventBase({\n runId,\n definition,\n actor: command.actor,\n issuedAt: command.issuedAt,\n idempotencyKey: command.idempotencyKey,\n commandFingerprint: fingerprint,\n parents: [],\n proofs: proofReferences(invocation),\n }),\n payload: { kind: 'run.started', genesis },\n });\n return genesis;\n }\n\n async function cancelRun(command: CancelPeerRunCommandV1): Promise<FlowEventEnvelopeV1> {\n command = snapshotCancelCommand(command);\n const definition = await assertRunGenesis(command.definition, command.genesis);\n assertCommandTime(command.issuedAt, options.now?.() ?? Date.now());\n const { runEvents, reducedRun, acceptedEventIds } = await readAnchoredRun(definition, command.genesis);\n if (reducedRun.finalizedEventIds.length > 0) throw new PeerExecutionError('RUN_FINALIZED', `Run ${command.genesis.runId} is already finalized`);\n const commandFingerprint = await fingerprintFlowCommand({\n definitionDigest: definition.digest,\n runId: command.genesis.runId,\n kind: 'run.cancel_requested',\n reason: command.reason ?? null,\n });\n const sameKey = runEvents.filter((event) => event.idempotencyKey === command.idempotencyKey);\n const existing = sameKey.find(\n (event) =>\n acceptedEventIds.has(event.eventId) &&\n event.commandFingerprint === commandFingerprint &&\n event.payload.kind === 'run.cancel_requested' &&\n event.payload.reason === command.reason\n );\n if (existing) return existing;\n if (sameKey.length > 0) throw new PeerExecutionError('EVENT_CONFLICT', 'The cancellation command key is already bound to different evidence');\n const invocation = await options.authorizer.authorizeRunControl({\n authorization: command.authorization,\n executorDid: options.executorDid,\n definition,\n runId: command.genesis.runId,\n actor: command.actor,\n issuedAt: command.issuedAt,\n idempotencyKey: command.idempotencyKey,\n can: FLOW_CAPABILITIES.runCancel,\n });\n assertInvocation(invocation, {\n audience: options.executorDid,\n can: FLOW_CAPABILITIES.runCancel,\n with: buildFlowResourceUri(definition, { kind: 'run', runId: command.genesis.runId }),\n definitionDigest: definition.digest,\n idempotencyKey: command.idempotencyKey,\n });\n return append({\n ...eventBase({\n runId: command.genesis.runId,\n definition,\n actor: command.actor,\n issuedAt: command.issuedAt,\n idempotencyKey: command.idempotencyKey,\n commandFingerprint,\n parents: reducedRun.frontierEventIds,\n proofs: proofReferences(invocation),\n }),\n payload: { kind: 'run.cancel_requested', ...(command.reason !== undefined ? { reason: command.reason } : {}) },\n });\n }\n\n async function finalizeRun(command: FinalizePeerRunCommandV1): Promise<FlowEventEnvelopeV1> {\n command = snapshotFinalizeCommand(command);\n const definition = await assertRunGenesis(command.definition, command.genesis);\n assertCommandTime(command.issuedAt, options.now?.() ?? Date.now());\n const { runEvents, reducedRun, acceptedEventIds } = await readAnchoredRun(definition, command.genesis);\n const existingFinalization = runEvents.find(\n (event) => acceptedEventIds.has(event.eventId) && reducedRun.finalizedEventIds.includes(event.eventId) && event.payload.kind === 'run.finalized'\n );\n if (existingFinalization) return existingFinalization;\n const candidate = reducedRun.finalizationCandidate;\n if (!candidate) throw new PeerExecutionError('RUN_NOT_FINALIZABLE', `Run ${command.genesis.runId} has no causally complete terminal state`);\n const summaryDigest = (await digestCanonicalJson(candidate.summary as unknown as CanonicalJsonValue)) as Sha256Digest;\n const commandFingerprint = await fingerprintFlowCommand({\n definitionDigest: definition.digest,\n runId: command.genesis.runId,\n kind: 'run.finalized',\n status: candidate.status,\n summaryDigest,\n });\n const sameKey = runEvents.filter((event) => event.idempotencyKey === command.idempotencyKey);\n if (sameKey.length > 0) throw new PeerExecutionError('EVENT_CONFLICT', 'The finalization command key is already bound to stale or different evidence');\n const invocation = await options.authorizer.authorizeRunControl({\n authorization: command.authorization,\n executorDid: options.executorDid,\n definition,\n runId: command.genesis.runId,\n actor: command.actor,\n issuedAt: command.issuedAt,\n idempotencyKey: command.idempotencyKey,\n can: FLOW_CAPABILITIES.runClose,\n });\n assertInvocation(invocation, {\n audience: options.executorDid,\n can: FLOW_CAPABILITIES.runClose,\n with: buildFlowResourceUri(definition, { kind: 'run', runId: command.genesis.runId }),\n definitionDigest: definition.digest,\n idempotencyKey: command.idempotencyKey,\n });\n return append({\n ...eventBase({\n runId: command.genesis.runId,\n definition,\n actor: command.actor,\n issuedAt: command.issuedAt,\n idempotencyKey: command.idempotencyKey,\n commandFingerprint,\n parents: candidate.summary.frontierEventIds,\n proofs: proofReferences(invocation),\n }),\n payload: { kind: 'run.finalized', status: candidate.status, summary: candidate.summary, summaryDigest },\n });\n }\n\n async function executeAttempt(command: ExecutePeerAttemptCommandV1): Promise<PeerAttemptResult> {\n command = snapshotAttemptCommand(command);\n const inputs = command.inputs;\n const definition = await assertRunGenesis(command.definition, command.genesis);\n const executionNow = options.now?.() ?? Date.now();\n assertCommandTime(command.issuedAt, executionNow);\n if (command.policy.definition.digest !== definition.digest) throw new PeerExecutionError('POLICY_MISMATCH', 'Execution policy is for a different Flow definition');\n const { runEvents, reducedRun, acceptedEventIds } = await readAnchoredRun(definition, command.genesis);\n if (reducedRun.finalizedEventIds.length > 0) throw new PeerExecutionError('RUN_FINALIZED', `Run ${command.genesis.runId} is already finalized`);\n const step = command.definition.steps.find((candidate) => candidate.stepId === command.stepId);\n if (!step) throw new PeerExecutionError('STEP_NOT_FOUND', `Flow step is not in the immutable definition: ${command.stepId}`);\n // V1 has no signed trigger or condition evidence contract. Manual work and\n // exact Topic requests have separate authority gates; every other path must\n // wait for signed eligibility evidence instead of inferring readiness.\n if ((step.trigger.kind !== 'manual' && step.trigger.kind !== 'topic.request') || step.conditions.length > 0) {\n throw new PeerExecutionError('ELIGIBILITY_EVIDENCE_REQUIRED', `Flow step ${step.stepId} requires signed eligibility evidence`);\n }\n const hasSignedTopicContext = step.trigger.kind === 'topic.request' || command.genesis.launchKind === 'topic.request' || command.genesis.topicBindingId !== undefined;\n if (\n (hasSignedTopicContext && (!command.genesis.topicBindingId || !command.topicBinding || command.topicBinding.bindingId !== command.genesis.topicBindingId)) ||\n (!hasSignedTopicContext && command.topicBinding)\n ) {\n throw new PeerExecutionError('AUTHORIZATION_MISMATCH', 'Topic execution requires the exact binding recorded by the signed step and run genesis');\n }\n if (\n (step.trigger.kind === 'topic.request' &&\n (!command.topicRequest ||\n command.topicRequest.requestKind !== step.trigger.requestKind ||\n !command.topicRequest.requestId.trim() ||\n !/^sha256:[0-9a-f]{64}$/u.test(command.topicRequest.requestDigest))) ||\n (!hasSignedTopicContext && command.topicRequest)\n ) {\n throw new PeerExecutionError('AUTHORIZATION_MISMATCH', 'Topic execution requires signed request evidence for the immutable request kind');\n }\n const contract = await options.contracts.resolve(step.action);\n assertValidInputs(contract, inputs);\n const inputDigest = (await digestCanonicalJson(command.inputs)) as Sha256Digest;\n const attemptId = await deriveAttemptId({ runId: command.genesis.runId, stepId: command.stepId, idempotencyKey: command.idempotencyKey, inputDigest });\n const resource = buildFlowResourceUri(definition, { kind: 'step', stepId: command.stepId, runId: command.genesis.runId });\n const authorization = await options.authorizer.authorizeAttempt({\n authorization: command.authorization,\n executorDid: options.executorDid,\n definition,\n runId: command.genesis.runId,\n stepId: command.stepId,\n action: contract,\n actor: command.actor,\n idempotencyKey: command.idempotencyKey,\n effectClaimAudience: options.effectClaimAudience,\n topicBinding: command.topicBinding,\n topicRequest: command.topicRequest,\n });\n const invocationExpectation = {\n audience: options.executorDid,\n with: resource,\n definitionDigest: definition.digest,\n actionContractDigest: contract.contractDigest,\n idempotencyKey: command.idempotencyKey,\n };\n assertInvocation(authorization.flow, { ...invocationExpectation, can: FLOW_CAPABILITIES.actionExecute });\n assertInvocation(authorization.action, { ...invocationExpectation, can: contract.can });\n if (hasSignedTopicContext) {\n if (!authorization.topic) throw new PeerExecutionError('AUTHORIZATION_MISMATCH', 'Topic-bound execution requires a verified Topic invocation');\n assertInvocation(authorization.topic, {\n ...invocationExpectation,\n can: FLOW_CAPABILITIES.topicRequestAction,\n with: command.topicBinding!.topicResource,\n });\n if (\n command.topicRequest &&\n (!authorization.topic.topicRequest ||\n canonicalizeJson(authorization.topic.topicRequest as unknown as CanonicalJsonValue) !== canonicalizeJson(command.topicRequest as unknown as CanonicalJsonValue))\n ) {\n throw new PeerExecutionError('AUTHORIZATION_MISMATCH', 'Verified Topic invocation does not bind the requested Topic request evidence');\n }\n }\n const commandFingerprint = await fingerprintFlowCommand({\n definitionDigest: definition.digest,\n runId: command.genesis.runId,\n stepId: command.stepId,\n attemptId,\n actor: command.actor,\n inputDigest,\n actionContractDigest: contract.contractDigest,\n topicBindingId: command.topicBinding?.bindingId ?? null,\n topicRequest: (command.topicRequest as unknown as CanonicalJsonValue) ?? null,\n });\n const base = {\n runId: command.genesis.runId,\n definition,\n actor: command.actor,\n issuedAt: command.issuedAt,\n idempotencyKey: command.idempotencyKey,\n commandFingerprint,\n proofs: proofReferences(authorization),\n };\n let claimAdmission: EffectClaimAdmissionV1 | undefined;\n if (contract.safety === 'fenced') {\n if (!options.effectClaimAudience || !authorization.effectClaim) {\n throw new PeerExecutionError('AUTHORIZATION_MISMATCH', 'Fenced execution requires a peer-issued invocation addressed to the effect claim ledger');\n }\n assertInvocation(authorization.effectClaim.invocation, {\n ...invocationExpectation,\n audience: options.effectClaimAudience,\n can: FLOW_CAPABILITIES.actionExecute,\n });\n if (authorization.effectClaim.invocation.issuer !== options.executorDid) {\n throw new PeerExecutionError('AUTHORIZATION_MISMATCH', 'Effect claim invocation must be issued by the peer that owns the lease');\n }\n claimAdmission = {\n authorization: authorization.effectClaim.authorization,\n invocation: authorization.effectClaim.invocation,\n policy: command.policy,\n commandFingerprint,\n };\n }\n const existingRequest = runEvents.find(\n (event) =>\n acceptedEventIds.has(event.eventId) && event.payload.kind === 'action.requested' && event.payload.attemptId === attemptId && event.payload.stepId === command.stepId\n );\n if (\n existingRequest &&\n (existingRequest.commandFingerprint !== commandFingerprint || (existingRequest.payload.kind === 'action.requested' && existingRequest.payload.inputDigest !== inputDigest))\n ) {\n throw new PeerExecutionError('EVENT_CONFLICT', 'The reserved attempt has different command evidence');\n }\n if (reducedRun.cancelRequested && !existingRequest) {\n throw new PeerExecutionError('RUN_CANCELLING', 'Run cancellation was observed before this attempt was reserved');\n }\n const existingAttempt = reducedRun.attempts[attemptId];\n const existingSuccesses = runEvents.filter(\n (event) =>\n acceptedEventIds.has(event.eventId) && event.payload.kind === 'action.succeeded' && event.payload.attemptId === attemptId && event.payload.stepId === command.stepId\n );\n const acceptedEvents = runEvents.filter((event) => acceptedEventIds.has(event.eventId));\n if (existingRequest && contract.safety !== 'fenced' && existingAttempt?.stepId === command.stepId) {\n if (existingAttempt.disposition === 'succeeded') {\n if (!existingAttempt.outputDigest) throw new PeerExecutionError('EVENT_CONFLICT', 'Accepted Action success is missing its output digest');\n if (existingSuccesses.length === 0) throw new PeerExecutionError('EVENT_CONFLICT', 'Reduced Action success has no accepted event');\n for (const success of existingSuccesses) await persistActionOutcomeEvents(success, acceptedEvents);\n return {\n outcome: 'succeeded',\n attemptId,\n outputDigest: existingAttempt.outputDigest,\n providerCorrelation: existingAttempt.providerCorrelation,\n };\n }\n if (existingAttempt.disposition === 'failed_before_effect') return { outcome: 'failed_before_effect', attemptId };\n }\n const effectMayHaveStarted = runEvents.some(\n (event) =>\n acceptedEventIds.has(event.eventId) &&\n (event.payload.kind === 'action.started' || event.payload.kind === 'action.effect_armed') &&\n event.payload.attemptId === attemptId &&\n event.payload.stepId === command.stepId\n );\n if (!existingRequest && contract.safety !== 'fenced') assertExecutionWindow(command, step);\n if (command.policy.mode === 'pause_new_effects' && contract.safety === 'provider_idempotent' && !effectMayHaveStarted) {\n throw new PeerExecutionError('POLICY_PAUSED', 'Signed execution policy pauses new external effects');\n }\n const requested =\n existingRequest ??\n (await append({\n ...eventBase({ ...base, parents: reducedRun.frontierEventIds }),\n payload: { kind: 'action.requested', attemptId, stepId: command.stepId, inputDigest },\n }));\n\n if (contract.safety === 'approval_only') {\n assertExecutionWindow(command, step);\n const proposalDigest = (await digestCanonicalJson({ attemptId, inputs: command.inputs, action: contract.contractDigest })) as Sha256Digest;\n await append({\n ...eventBase({ ...base, parents: [requested.eventId] }),\n payload: { kind: 'action.approval_proposed', attemptId, stepId: command.stepId, proposalDigest },\n });\n return { outcome: 'approval_required', attemptId, proposalDigest };\n }\n\n const providerIdempotencyKey = `provider:${attemptId}` as IdempotencyKey;\n let claim: EffectClaimRecordV1 | undefined;\n let attemptParent = requested;\n if (contract.safety === 'fenced') {\n if (!claimAdmission) throw new PeerExecutionError('AUTHORIZATION_MISMATCH', 'Effect claim authorization is unavailable');\n const claimKey = await deriveEffectClaimKey({\n definition,\n runId: command.genesis.runId,\n stepId: command.stepId,\n attemptId,\n actorDid: command.actor,\n inputDigest,\n action: step.action,\n topicBindingId: command.topicBinding?.bindingId,\n });\n const claimed = await options.effectClaims.claim({\n claimKey,\n leaseOwner: options.executorDid,\n leaseTtlMs: 30_000,\n providerIdempotencyKey,\n policyDigest: command.policy.integrity.digest.value,\n admission: claimAdmission,\n });\n if (claimed.outcome === 'paused') throw new PeerExecutionError('POLICY_PAUSED', claimed.reason);\n if (claimed.outcome === 'conflict') throw new PeerExecutionError('CLAIM_CONFLICT', claimed.reason);\n if (!claimed.record) throw new PeerExecutionError('CLAIM_CONFLICT', 'Effect claim ledger returned no claim record');\n const claimedRecord = claimed.record;\n claim = claimedRecord;\n const claimSuccess = claimedRecord.successEventId\n ? existingSuccesses.find((event) => event.eventId === claimedRecord.successEventId)\n : existingSuccesses.find(\n (event) => event.payload.kind === 'action.succeeded' && event.payload.claimKey === claimedRecord.claimKey && event.payload.fencingEpoch === claimedRecord.fencingEpoch\n );\n if (claimedRecord.status === 'succeeded') {\n return reconcileFenced(command, contract, authorization, attemptId, providerIdempotencyKey, claimedRecord, claimAdmission, base, requested, claimSuccess, acceptedEvents);\n }\n if (claimed.outcome === 'existing' && claimedRecord.leaseOwner !== options.executorDid) {\n return { outcome: 'deferred', attemptId, reason: `Effect claim is owned by ${claimedRecord.leaseOwner}` };\n }\n if (claimedRecord.status === 'armed' || claimedRecord.status === 'needs_verification' || claimedRecord.status === 'success_prepared') {\n return reconcileFenced(command, contract, authorization, attemptId, providerIdempotencyKey, claimedRecord, claimAdmission, base, requested, claimSuccess, acceptedEvents);\n }\n claim = await options.effectClaims.arm(claimedRecord.claimKey, options.executorDid, claimedRecord.fencingEpoch, claimAdmission);\n try {\n attemptParent = await append({\n ...eventBase({ ...base, parents: [requested.eventId] }),\n payload: { kind: 'action.effect_armed', attemptId, stepId: command.stepId, claimKey, fencingEpoch: claim.fencingEpoch },\n });\n } catch (error) {\n await options.effectClaims.markNeedsVerification(claim.claimKey, options.executorDid, claim.fencingEpoch, claimAdmission, claim.providerCorrelation);\n throw error;\n }\n } else {\n attemptParent = await append({\n ...eventBase({ ...base, parents: [requested.eventId] }),\n payload: { kind: 'action.started', attemptId, stepId: command.stepId },\n });\n }\n\n if (!effectMayHaveStarted) {\n try {\n assertExecutionWindow(command, step);\n } catch (error) {\n if (!claim) throw error;\n if (!claimAdmission) throw new PeerExecutionError('AUTHORIZATION_MISMATCH', 'Effect claim authorization is unavailable');\n const reason = error instanceof Error ? error.message : String(error);\n await options.effectClaims.markNeedsVerification(claim.claimKey, options.executorDid, claim.fencingEpoch, claimAdmission, claim.providerCorrelation);\n await append({\n ...eventBase({ ...base, parents: [attemptParent.eventId] }),\n payload: {\n kind: 'action.needs_verification',\n attemptId,\n stepId: command.stepId,\n ...(claim.providerCorrelation ? { providerCorrelation: claim.providerCorrelation } : {}),\n reason,\n },\n });\n return { outcome: 'needs_verification', attemptId, providerCorrelation: claim.providerCorrelation };\n }\n }\n const provider = await options.actions.invoke({\n contract,\n inputs: command.inputs,\n providerIdempotencyKey,\n invocation: authorization,\n assertEffectAllowed: () => assertExecutionWindow(command, step),\n });\n if (provider.outcome === 'succeeded') {\n const digest = await validatedOutputDigest(contract, provider.output);\n return persistSuccess(command, attemptId, digest, provider.outcomes, provider.providerCorrelation, claim, claimAdmission, base, attemptParent);\n }\n if (provider.outcome === 'failed_before_effect' && !claim) {\n await append({\n ...eventBase({ ...base, parents: [attemptParent.eventId] }),\n payload: { kind: 'action.failed_before_effect', attemptId, stepId: command.stepId, error: provider.error },\n });\n return { outcome: 'failed_before_effect', attemptId };\n }\n const ambiguous =\n provider.outcome === 'ambiguous' ? provider : { outcome: 'ambiguous' as const, reason: 'Provider reported failure after the effect was armed; readback is required' };\n return reconcileAmbiguity(command, contract, authorization, attemptId, providerIdempotencyKey, claim, claimAdmission, base, attemptParent, ambiguous);\n }\n\n async function reconcileFenced(\n command: ExecutePeerAttemptCommandV1,\n contract: ActionContractV1,\n authorization: VerifiedAttemptAuthorization,\n attemptId: AttemptId,\n providerIdempotencyKey: IdempotencyKey,\n claim: EffectClaimRecordV1,\n admission: EffectClaimAdmissionV1,\n base: Omit<Parameters<typeof eventBase>[0], 'parents'>,\n requested: FlowEventEnvelopeV1,\n existingSuccess?: FlowEventEnvelopeV1,\n existingEvents: readonly FlowEventEnvelopeV1[] = []\n ): Promise<PeerAttemptResult> {\n if (existingSuccess?.payload.kind === 'action.succeeded') {\n const success = existingSuccess.payload;\n const outcomesMatch = claim.outcomesDigest === undefined ? success.outcomes === undefined : (await actionOutcomesDigest(success.outcomes ?? [])) === claim.outcomesDigest;\n if (success.claimKey !== claim.claimKey || success.fencingEpoch !== claim.fencingEpoch || success.outputDigest !== claim.outputDigest || !outcomesMatch) {\n throw new PeerExecutionError('EVENT_CONFLICT', 'Accepted fenced success does not match the durable prepared evidence');\n }\n if (claim.status === 'success_prepared') {\n await options.effectClaims.resolve(claim.claimKey, options.executorDid, claim.fencingEpoch, 'succeeded', admission, success.providerCorrelation, existingSuccess.eventId);\n } else if (claim.status !== 'succeeded' || claim.successEventId !== existingSuccess.eventId) {\n throw new PeerExecutionError('EVENT_CONFLICT', 'Accepted fenced success has no prepared or finalized effect claim');\n }\n await persistActionOutcomeEvents(existingSuccess, existingEvents);\n return {\n outcome: 'succeeded',\n attemptId,\n outputDigest: success.outputDigest,\n ...(success.providerCorrelation !== undefined ? { providerCorrelation: success.providerCorrelation } : {}),\n };\n }\n if (claim.status === 'succeeded') {\n throw new PeerExecutionError('EVENT_CONFLICT', 'Finalized effect claim references a Matrix success event that is unavailable');\n }\n const armed = await append({\n ...eventBase({ ...base, parents: [requested.eventId] }),\n payload: {\n kind: 'action.effect_armed',\n attemptId,\n stepId: command.stepId,\n claimKey: claim.claimKey,\n fencingEpoch: claim.fencingEpoch,\n },\n });\n if (claim.status === 'success_prepared' && claim.outputDigest && claim.outcomesDigest) {\n const readback = await options.actions.readback({\n contract,\n inputs: command.inputs,\n providerIdempotencyKey,\n providerCorrelation: claim.providerCorrelation,\n invocation: authorization,\n });\n if (readback.outcome === 'succeeded') {\n const digest = await validatedOutputDigest(contract, readback.output);\n const outcomes = await actionOutcomes(digest, readback.outcomes);\n if (digest === claim.outputDigest && (await actionOutcomesDigest(outcomes)) === claim.outcomesDigest) {\n return persistSuccess(command, attemptId, digest, readback.outcomes, readback.providerCorrelation, claim, admission, base, armed);\n }\n }\n const providerCorrelation =\n readback.outcome === 'succeeded' || readback.outcome === 'unknown' ? readback.providerCorrelation ?? claim.providerCorrelation : claim.providerCorrelation;\n await append({\n ...eventBase({ ...base, parents: [armed.eventId] }),\n payload: {\n kind: 'action.needs_verification',\n attemptId,\n stepId: command.stepId,\n ...(providerCorrelation !== undefined ? { providerCorrelation } : {}),\n reason: 'Prepared provider result could not be reproduced with its complete outcome evidence',\n },\n });\n return { outcome: 'needs_verification', attemptId, ...(providerCorrelation !== undefined ? { providerCorrelation } : {}) };\n }\n return reconcileAmbiguity(command, contract, authorization, attemptId, providerIdempotencyKey, claim, admission, base, armed, {\n outcome: 'ambiguous',\n providerCorrelation: claim.providerCorrelation,\n reason: 'Recovered an armed effect claim',\n });\n }\n\n async function persistSuccess(\n command: ExecutePeerAttemptCommandV1,\n attemptId: AttemptId,\n digest: Sha256Digest,\n providedOutcomes: readonly ActionOutcomeInputV1[] | undefined,\n providerCorrelation: string | undefined,\n claim: EffectClaimRecordV1 | undefined,\n admission: EffectClaimAdmissionV1 | undefined,\n base: Omit<Parameters<typeof eventBase>[0], 'parents'>,\n attemptParent: FlowEventEnvelopeV1\n ): Promise<PeerAttemptResult> {\n const outcomes = await actionOutcomes(digest, providedOutcomes);\n const outcomesDigest = await actionOutcomesDigest(outcomes);\n let durableClaim = claim;\n if (claim && !admission) throw new PeerExecutionError('AUTHORIZATION_MISMATCH', 'Effect claim authorization is unavailable');\n if (claim && claim.status !== 'success_prepared' && claim.status !== 'succeeded') {\n durableClaim = await options.effectClaims.prepareSuccess(claim.claimKey, options.executorDid, claim.fencingEpoch, digest, outcomesDigest, admission!, providerCorrelation);\n }\n if (durableClaim && (durableClaim.outputDigest !== digest || durableClaim.outcomesDigest !== outcomesDigest)) {\n throw new PeerExecutionError('EVENT_CONFLICT', 'Prepared effect claim does not match the complete Action result evidence');\n }\n const success = await append({\n ...eventBase({ ...base, parents: [attemptParent.eventId] }),\n payload: {\n kind: 'action.succeeded',\n attemptId,\n stepId: command.stepId,\n outputDigest: digest,\n outcomes,\n ...(providerCorrelation !== undefined ? { providerCorrelation } : {}),\n ...(durableClaim ? { claimKey: durableClaim.claimKey, fencingEpoch: durableClaim.fencingEpoch } : {}),\n },\n });\n if (durableClaim?.status === 'success_prepared') {\n await options.effectClaims.resolve(durableClaim.claimKey, options.executorDid, durableClaim.fencingEpoch, 'succeeded', admission!, providerCorrelation, success.eventId);\n }\n await persistActionOutcomeEvents(success);\n return { outcome: 'succeeded', attemptId, outputDigest: digest, providerCorrelation };\n }\n\n async function persistActionOutcomeEvents(success: FlowEventEnvelopeV1, existingEvents: readonly FlowEventEnvelopeV1[] = []): Promise<void> {\n if (success.payload.kind !== 'action.succeeded') throw new PeerExecutionError('EVENT_CONFLICT', 'Action outcomes require accepted success evidence');\n const successPayload = success.payload;\n for (const outcome of successPayload.outcomes ?? []) {\n const exists = existingEvents.some(\n (event) =>\n event.payload.kind === 'action.outcome_emitted' &&\n event.payload.attemptId === successPayload.attemptId &&\n event.payload.stepId === successPayload.stepId &&\n event.payload.name === outcome.name &&\n event.payload.payloadDigest === outcome.payloadDigest &&\n event.parents.includes(success.eventId)\n );\n if (exists) continue;\n await append({\n ...eventBase({\n runId: success.runId,\n definition: success.definition,\n actor: success.actor,\n issuedAt: success.occurredAt,\n idempotencyKey: success.idempotencyKey,\n commandFingerprint: success.commandFingerprint,\n parents: [success.eventId],\n proofs: success.proofReferences,\n }),\n causationId: success.eventId,\n payload: {\n kind: 'action.outcome_emitted',\n attemptId: successPayload.attemptId,\n stepId: successPayload.stepId,\n ...outcome,\n },\n });\n }\n }\n\n async function reconcileAmbiguity(\n command: ExecutePeerAttemptCommandV1,\n contract: ActionContractV1,\n authorization: VerifiedAttemptAuthorization,\n attemptId: AttemptId,\n providerIdempotencyKey: IdempotencyKey,\n claim: EffectClaimRecordV1 | undefined,\n admission: EffectClaimAdmissionV1 | undefined,\n base: Omit<Parameters<typeof eventBase>[0], 'parents'>,\n attemptParent: FlowEventEnvelopeV1,\n ambiguous: Extract<ProviderInvocationResult, { outcome: 'ambiguous' }>\n ): Promise<PeerAttemptResult> {\n const readback = await options.actions.readback({\n contract,\n inputs: command.inputs,\n providerIdempotencyKey,\n providerCorrelation: ambiguous.providerCorrelation,\n invocation: authorization,\n });\n if (readback.outcome === 'succeeded') {\n const digest = await validatedOutputDigest(contract, readback.output);\n return persistSuccess(command, attemptId, digest, readback.outcomes, readback.providerCorrelation, claim, admission, base, attemptParent);\n }\n if (readback.outcome === 'not_found' && !claim) {\n await append({\n ...eventBase({ ...base, parents: [attemptParent.eventId] }),\n payload: { kind: 'action.failed_before_effect', attemptId, stepId: command.stepId, error: { code: 'PROVIDER_CONFIRMED_NOT_FOUND' } },\n });\n return { outcome: 'failed_before_effect', attemptId };\n }\n const correlation = readback.outcome === 'unknown' ? readback.providerCorrelation ?? ambiguous.providerCorrelation : ambiguous.providerCorrelation;\n if (claim && claim.status === 'armed') {\n if (!admission) throw new PeerExecutionError('AUTHORIZATION_MISMATCH', 'Effect claim authorization is unavailable');\n await options.effectClaims.markNeedsVerification(claim.claimKey, options.executorDid, claim.fencingEpoch, admission, correlation);\n }\n await append({\n ...eventBase({ ...base, parents: [attemptParent.eventId] }),\n payload: {\n kind: 'action.needs_verification',\n attemptId,\n stepId: command.stepId,\n ...(correlation !== undefined ? { providerCorrelation: correlation } : {}),\n reason: ambiguous.reason,\n },\n });\n return { outcome: 'needs_verification', attemptId, ...(correlation !== undefined ? { providerCorrelation: correlation } : {}) };\n }\n\n return { startRun, cancelRun, finalizeRun, executeAttempt };\n}\n","export type LegacyFlowOperation = 'run.start' | 'schedule.activate' | 'topic.bind' | 'composio.bind';\n\nexport interface FlowProtocolGateV1 {\n kind: 'qi.flow.protocol-gate';\n schemaVersion: '1.0';\n legacyMode: 'read_only' | 'execution_enabled';\n}\n\nexport class LegacyFlowFrozenError extends Error {\n constructor(readonly operation: LegacyFlowOperation) {\n super(`Legacy Flow operation ${operation} is frozen; explicitly republish authored meaning as a new vNext revision`);\n this.name = 'LegacyFlowFrozenError';\n }\n}\n\n/** Shared fail-closed guard for every legacy execution/binding adapter. */\nexport function assertLegacyFlowOperationAllowed(gate: FlowProtocolGateV1 | undefined, operation: LegacyFlowOperation): void {\n if (gate?.legacyMode === 'read_only') throw new LegacyFlowFrozenError(operation);\n}\n","import { canonicalizeJson, digestCanonicalJson, type CanonicalJsonValue } from './canonical';\nimport type { AttemptId, EventId, ReceiptId, Sha256Digest } from './contracts';\nimport { deriveReceiptId } from './ids';\n\nexport interface TopicReceiptOutboxRecordV1 {\n kind: 'qi.flow.topic-receipt-outbox-record';\n schemaVersion: '1.0';\n receiptId: ReceiptId;\n receiptDigest: Sha256Digest;\n topicRequestId: string;\n attemptId: AttemptId;\n phase: string;\n eventId: EventId;\n /** Exact RFC 8785 bytes, encoded as UTF-8 text, replayed without reconstruction. */\n canonicalReceipt: string;\n persistedAt: string;\n delivery?: { deliveredAt: string; operationId: string; topicRevision: string };\n}\n\nexport interface TopicReceiptOutbox {\n persist(record: TopicReceiptOutboxRecordV1): Promise<'persisted' | 'duplicate' | 'conflict'>;\n pending(limit?: number): Promise<readonly TopicReceiptOutboxRecordV1[]>;\n markDelivered(receiptId: ReceiptId, receiptDigest: Sha256Digest, delivery: { deliveredAt: string; operationId: string; topicRevision: string }): Promise<void>;\n}\n\nexport interface TopicReceiptDelivery {\n deliver(request: { receiptId: ReceiptId; receiptDigest: Sha256Digest; canonicalReceipt: string }): Promise<{ operationId: string; topicRevision: string }>;\n}\n\nexport async function persistSignedTopicReceipt(params: {\n outbox: TopicReceiptOutbox;\n topicRequestId: string;\n attemptId: AttemptId;\n phase: string;\n eventId: EventId;\n signedReceipt: CanonicalJsonValue;\n persistedAt: string;\n}): Promise<TopicReceiptOutboxRecordV1> {\n const outbox = params.outbox;\n const snapshot = JSON.parse(\n canonicalizeJson({\n topicRequestId: params.topicRequestId,\n attemptId: params.attemptId,\n phase: params.phase,\n eventId: params.eventId,\n signedReceipt: params.signedReceipt,\n persistedAt: params.persistedAt,\n })\n ) as Omit<typeof params, 'outbox'>;\n const canonicalReceipt = canonicalizeJson(snapshot.signedReceipt);\n const receiptDigest = (await digestCanonicalJson(snapshot.signedReceipt)) as Sha256Digest;\n const receiptId = await deriveReceiptId({\n topicRequestId: snapshot.topicRequestId,\n attemptId: snapshot.attemptId,\n phase: snapshot.phase,\n eventId: snapshot.eventId,\n });\n const record: TopicReceiptOutboxRecordV1 = {\n kind: 'qi.flow.topic-receipt-outbox-record',\n schemaVersion: '1.0',\n receiptId,\n receiptDigest,\n topicRequestId: snapshot.topicRequestId,\n attemptId: snapshot.attemptId,\n phase: snapshot.phase,\n eventId: snapshot.eventId,\n canonicalReceipt,\n persistedAt: snapshot.persistedAt,\n };\n const outcome = await outbox.persist(record);\n if (outcome === 'conflict') throw new Error(`Topic receipt identity ${receiptId} is already bound to different signed bytes`);\n return record;\n}\n\n/** Replay only bytes that were durably persisted before delivery. */\nexport async function drainTopicReceiptOutbox(\n outbox: TopicReceiptOutbox,\n delivery: TopicReceiptDelivery,\n now: () => Date = () => new Date(),\n limit = 100\n): Promise<Array<{ receiptId: ReceiptId; outcome: 'delivered' | 'failed'; error?: string }>> {\n const outcomes: Array<{ receiptId: ReceiptId; outcome: 'delivered' | 'failed'; error?: string }> = [];\n for (const record of await outbox.pending(limit)) {\n try {\n const delivered = await delivery.deliver({\n receiptId: record.receiptId,\n receiptDigest: record.receiptDigest,\n canonicalReceipt: record.canonicalReceipt,\n });\n await outbox.markDelivered(record.receiptId, record.receiptDigest, { ...delivered, deliveredAt: now().toISOString() });\n outcomes.push({ receiptId: record.receiptId, outcome: 'delivered' });\n } catch (error) {\n outcomes.push({ receiptId: record.receiptId, outcome: 'failed', error: error instanceof Error ? error.message : String(error) });\n }\n }\n return outcomes;\n}\n","import { canonicalizeJson, deepFreezeJson, digestCanonicalJson, type CanonicalJsonValue } from './canonical';\nimport {\n verifyFlowDefinitionRevision,\n type DID,\n type FlowDefinitionRef,\n type FlowDefinitionRevisionRepository,\n type FlowDefinitionRevisionTrustPolicy,\n type FlowDefinitionRevisionV1,\n type FlowRevisionId,\n type Sha256Digest,\n type VerifiedFlowDefinitionRevisionV1,\n} from './contracts';\nimport {\n matrixFlowEventTransactionId,\n verifyFlowEvent,\n FlowEventValidationError,\n type FlowEventAppendResult,\n type FlowEventEnvelopeV1,\n type FlowEventTrustPolicy,\n type MatrixFlowEventObservationV1,\n type MatrixFlowEventStore,\n type VerifiedFlowEventEnvelopeV1,\n} from './events';\n\nexport const MATRIX_FLOW_EVENT_TYPE = 'ixo.qi.flow.event.v1';\nexport const MATRIX_FLOW_DEFINITION_ANCHOR_TYPE = 'ixo.qi.flow.definition-anchor.v1';\n\nexport interface MatrixRunEventCarrierV1 {\n carrierEventId: string;\n event: FlowEventEnvelopeV1;\n}\n\nexport interface MatrixRunEventPageV1 {\n carriers: readonly MatrixRunEventCarrierV1[];\n /** Opaque Matrix pagination cursor. Omit only when the transport is exhausted. */\n nextCursor?: string;\n}\n\nexport interface MatrixRunEventTransport {\n append(params: { roomId: string; eventType: typeof MATRIX_FLOW_EVENT_TYPE; transactionId: string; content: { event: FlowEventEnvelopeV1 } }): Promise<FlowEventAppendResult>;\n read(params: { roomId: string; runId: string; afterEventId?: string; cursor?: string; limit?: number }): Promise<MatrixRunEventPageV1>;\n}\n\n/** Thin Matrix carrier adapter; protocol validation remains in the shared kernel. */\nexport class MatrixRoomFlowEventStore implements MatrixFlowEventStore {\n constructor(\n private readonly roomId: string,\n private readonly transport: MatrixRunEventTransport,\n private readonly trust: FlowEventTrustPolicy\n ) {}\n\n async append(event: FlowEventEnvelopeV1, transactionId: string): Promise<FlowEventAppendResult> {\n const verified = await verifyFlowEvent(event, this.trust);\n const expectedTransactionId = matrixFlowEventTransactionId(verified);\n if (transactionId !== expectedTransactionId) throw new Error(`Matrix Flow event append requires deterministic transaction ID ${expectedTransactionId}`);\n const result = await this.transport.append({ roomId: this.roomId, eventType: MATRIX_FLOW_EVENT_TYPE, transactionId, content: { event: verified } });\n if (result.outcome !== 'conflict' && result.eventId !== verified.eventId) {\n throw new Error(`Matrix Flow event append acknowledged unexpected event ID ${result.eventId}`);\n }\n return result;\n }\n\n async inspect(runId: FlowEventEnvelopeV1['runId'], options: { after?: FlowEventEnvelopeV1['eventId']; limit?: number } = {}): Promise<MatrixFlowEventObservationV1> {\n const acceptedEvents: VerifiedFlowEventEnvelopeV1[] = [];\n const rejectedEvents: MatrixFlowEventObservationV1['rejectedEvents'][number][] = [];\n const seenCursors = new Set<string>();\n let cursor: string | undefined;\n do {\n const remaining = options.limit === undefined ? undefined : options.limit - acceptedEvents.length;\n if (remaining !== undefined && remaining <= 0) break;\n const page = await this.transport.read({ roomId: this.roomId, runId, afterEventId: options.after, cursor, limit: remaining });\n for (const carrier of page.carriers) {\n if (options.limit !== undefined && acceptedEvents.length >= options.limit) break;\n let eventSnapshot: FlowEventEnvelopeV1;\n try {\n eventSnapshot = deepFreezeJson(JSON.parse(canonicalizeJson(carrier.event as unknown as CanonicalJsonValue)) as FlowEventEnvelopeV1);\n } catch {\n eventSnapshot = deepFreezeJson(structuredClone(carrier.event));\n rejectedEvents.push({ carrierEventId: carrier.carrierEventId, event: eventSnapshot, reason: 'Flow event content cannot be canonicalized' });\n continue;\n }\n try {\n acceptedEvents.push(await verifyFlowEvent(eventSnapshot, this.trust));\n } catch (error) {\n if (!(error instanceof FlowEventValidationError)) throw error;\n rejectedEvents.push({ carrierEventId: carrier.carrierEventId, event: eventSnapshot, reason: error.message });\n }\n }\n if (page.nextCursor === undefined) break;\n if (seenCursors.has(page.nextCursor)) throw new Error('Matrix Flow event transport returned a repeated cursor');\n seenCursors.add(page.nextCursor);\n cursor = page.nextCursor;\n } while (true);\n return { acceptedEvents, rejectedEvents };\n }\n\n async read(runId: FlowEventEnvelopeV1['runId'], options: { after?: FlowEventEnvelopeV1['eventId']; limit?: number } = {}): Promise<readonly VerifiedFlowEventEnvelopeV1[]> {\n return (await this.inspect(runId, options)).acceptedEvents;\n }\n}\n\nexport interface RevisionCipher {\n algorithm: string;\n keyReference: string;\n encrypt(plaintext: Uint8Array): Promise<Uint8Array>;\n decrypt(ciphertext: Uint8Array): Promise<Uint8Array>;\n}\n\nexport interface MatrixDefinitionAnchorPayloadV1 {\n kind: 'qi.flow.definition-anchor';\n schemaVersion: '1.0';\n definition: FlowDefinitionRef;\n mediaUri: string;\n ciphertextDigest: Sha256Digest;\n encryption: { algorithm: string; keyReference: string };\n anchoredAt: string;\n anchoredBy: DID;\n}\n\nexport type MatrixDefinitionAnchorV1 = MatrixDefinitionAnchorPayloadV1 & {\n integrity: {\n canonicalization: 'RFC8785';\n digest: { algorithm: 'SHA-256'; value: Sha256Digest };\n signature: { algorithm: string; verificationMethod: string; value: string };\n };\n};\n\nexport interface MatrixDefinitionAnchorSigner {\n issuerDid: DID;\n verificationMethod: string;\n algorithm: string;\n sign(data: Uint8Array): Promise<string>;\n}\n\nexport interface MatrixDefinitionAnchorTrustPolicy {\n trustedIssuerDids: readonly DID[];\n allowedSignatureAlgorithms: readonly string[];\n verifySignature(input: { issuerDid: DID; verificationMethod: string; algorithm: string; data: Uint8Array; signature: string }): Promise<boolean>;\n}\n\nexport interface MatrixDefinitionTransport {\n putMedia(params: { ciphertext: Uint8Array; ciphertextDigest: Sha256Digest; contentType: 'application/vnd.ixo.qi-flow-revision+json' }): Promise<string>;\n getMedia(mediaUri: string): Promise<Uint8Array>;\n publishAnchor(params: {\n roomId: string;\n eventType: typeof MATRIX_FLOW_DEFINITION_ANCHOR_TYPE;\n transactionId: string;\n anchor: MatrixDefinitionAnchorV1;\n expectedParent?: FlowDefinitionRef;\n }): Promise<'published' | 'exists' | 'parent_conflict'>;\n getAnchor(roomId: string, flowId: string, revision: FlowRevisionId): Promise<MatrixDefinitionAnchorV1 | null>;\n}\n\nconst ANCHOR_DOMAIN = 'qi.flow.definition-anchor.v1\\0';\n\nfunction anchorSignatureInput(digest: Sha256Digest): Uint8Array {\n return new TextEncoder().encode(`${ANCHOR_DOMAIN}${digest}`);\n}\n\nexport async function signMatrixDefinitionAnchor(payload: MatrixDefinitionAnchorPayloadV1, signer: MatrixDefinitionAnchorSigner): Promise<MatrixDefinitionAnchorV1> {\n const snapshot = JSON.parse(canonicalizeJson(payload as unknown as CanonicalJsonValue)) as MatrixDefinitionAnchorPayloadV1;\n if (snapshot.anchoredBy !== signer.issuerDid || !signer.verificationMethod.startsWith(`${snapshot.anchoredBy}#`)) {\n throw new Error('Matrix definition anchor signer does not match the issuer');\n }\n const digest = (await digestCanonicalJson(snapshot as unknown as CanonicalJsonValue)) as Sha256Digest;\n const signature = await signer.sign(anchorSignatureInput(digest));\n if (!signature) throw new Error('Matrix definition anchor signer returned an empty signature');\n return {\n ...snapshot,\n integrity: {\n canonicalization: 'RFC8785',\n digest: { algorithm: 'SHA-256', value: digest },\n signature: { algorithm: signer.algorithm, verificationMethod: signer.verificationMethod, value: signature },\n },\n };\n}\n\nexport async function verifyMatrixDefinitionAnchor(anchor: MatrixDefinitionAnchorV1, trust: MatrixDefinitionAnchorTrustPolicy): Promise<MatrixDefinitionAnchorV1> {\n const snapshot = JSON.parse(canonicalizeJson(anchor as unknown as CanonicalJsonValue)) as MatrixDefinitionAnchorV1;\n const { integrity, ...payload } = snapshot;\n const digest = (await digestCanonicalJson(payload as unknown as CanonicalJsonValue)) as Sha256Digest;\n if (digest !== integrity.digest.value) throw new Error('Matrix definition anchor digest mismatch');\n if (!trust.trustedIssuerDids.includes(payload.anchoredBy)) throw new Error(`Matrix definition anchor issuer is not trusted: ${payload.anchoredBy}`);\n if (!trust.allowedSignatureAlgorithms.includes(integrity.signature.algorithm)) throw new Error('Matrix definition anchor signature algorithm is not allowed');\n if (!integrity.signature.verificationMethod.startsWith(`${payload.anchoredBy}#`)) throw new Error('Matrix definition anchor verification method does not belong to the issuer');\n if (\n !(await trust.verifySignature({\n issuerDid: payload.anchoredBy,\n verificationMethod: integrity.signature.verificationMethod,\n algorithm: integrity.signature.algorithm,\n data: anchorSignatureInput(digest),\n signature: integrity.signature.value,\n }))\n ) {\n throw new Error('Matrix definition anchor signature is invalid');\n }\n return deepFreezeJson(snapshot);\n}\n\nexport class EncryptedMatrixFlowDefinitionRevisionRepository implements FlowDefinitionRevisionRepository {\n constructor(\n private readonly roomId: string,\n private readonly transport: MatrixDefinitionTransport,\n private readonly cipher: RevisionCipher,\n private readonly anchorSigner: MatrixDefinitionAnchorSigner,\n private readonly anchorTrust: MatrixDefinitionAnchorTrustPolicy,\n private readonly definitionTrust: FlowDefinitionRevisionTrustPolicy,\n private readonly now: () => Date = () => new Date()\n ) {}\n\n async publish(revision: FlowDefinitionRevisionV1, expectedParent?: FlowDefinitionRef): Promise<'published' | 'exists' | 'parent_conflict'> {\n const expectedParentSnapshot = expectedParent ? deepFreezeJson(JSON.parse(canonicalizeJson(expectedParent as unknown as CanonicalJsonValue)) as FlowDefinitionRef) : undefined;\n const verified = await verifyFlowDefinitionRevision(revision, this.definitionTrust);\n if (canonicalizeJson((verified.parent ?? null) as unknown as CanonicalJsonValue) !== canonicalizeJson((expectedParentSnapshot ?? null) as unknown as CanonicalJsonValue)) {\n return 'parent_conflict';\n }\n const definition: FlowDefinitionRef = { ...verified.ref, digest: verified.integrity.digest.value };\n const plaintext = new TextEncoder().encode(canonicalizeJson(verified as unknown as CanonicalJsonValue));\n const ciphertext = Uint8Array.from(await this.cipher.encrypt(plaintext));\n const ciphertextDigest = (await digestCanonicalJson(Array.from(ciphertext))) as Sha256Digest;\n const mediaUri = await this.transport.putMedia({\n ciphertext,\n ciphertextDigest,\n contentType: 'application/vnd.ixo.qi-flow-revision+json',\n });\n const anchor = await signMatrixDefinitionAnchor(\n {\n kind: 'qi.flow.definition-anchor',\n schemaVersion: '1.0',\n definition,\n mediaUri,\n ciphertextDigest,\n encryption: { algorithm: this.cipher.algorithm, keyReference: this.cipher.keyReference },\n anchoredAt: this.now().toISOString(),\n anchoredBy: this.anchorSigner.issuerDid,\n },\n this.anchorSigner\n );\n return this.transport.publishAnchor({\n roomId: this.roomId,\n eventType: MATRIX_FLOW_DEFINITION_ANCHOR_TYPE,\n transactionId: `qi-flow-definition-v1-${definition.digest.slice('sha256:'.length)}`,\n anchor,\n expectedParent: expectedParentSnapshot,\n });\n }\n\n async get(ref: FlowDefinitionRef): Promise<VerifiedFlowDefinitionRevisionV1 | null> {\n const candidate = await this.transport.getAnchor(this.roomId, ref.flowId, ref.revision);\n if (!candidate) return null;\n const anchor = await verifyMatrixDefinitionAnchor(candidate, this.anchorTrust);\n if (anchor.definition.digest !== ref.digest || anchor.definition.flowId !== ref.flowId || anchor.definition.revision !== ref.revision) {\n throw new Error('Matrix definition anchor does not match the requested revision');\n }\n if (anchor.encryption.algorithm !== this.cipher.algorithm || anchor.encryption.keyReference !== this.cipher.keyReference) {\n throw new Error('Matrix definition anchor encryption binding is unavailable');\n }\n const ciphertext = await this.transport.getMedia(anchor.mediaUri);\n const ciphertextDigest = (await digestCanonicalJson(Array.from(ciphertext))) as Sha256Digest;\n if (ciphertextDigest !== anchor.ciphertextDigest) throw new Error('Encrypted Matrix revision media digest mismatch');\n const plaintext = await this.cipher.decrypt(ciphertext);\n const revision = JSON.parse(new TextDecoder().decode(plaintext)) as FlowDefinitionRevisionV1;\n const verified = await verifyFlowDefinitionRevision(revision, this.definitionTrust);\n if (verified.ref.flowId !== anchor.definition.flowId || verified.ref.revision !== anchor.definition.revision || verified.integrity.digest.value !== anchor.definition.digest) {\n throw new Error('Decrypted Matrix revision does not match its signed anchor');\n }\n return verified;\n }\n}\n","import { canonicalizeJson, deepFreezeJson, digestCanonicalJson, type CanonicalJsonValue } from './canonical';\nimport type { ActionContractV1, DID, FlowContractIntegrityV1, FlowJsonObject, IdempotencyKey, Sha256Digest } from './contracts';\nimport type { ManifestBoundActionAdapter, ProviderInvocationResult, ProviderReadbackResult, VerifiedAttemptAuthorization } from './peerExecutor';\n\nexport interface ComposioActionAvailabilityPayloadV1 {\n kind: 'qi.composio.action-availability';\n schemaVersion: '1.0';\n issuedBy: DID;\n actionContractDigest: Sha256Digest;\n handlerIdentity: string;\n handlerVersion: string;\n inputSchemaDigest: Sha256Digest;\n outputSchemaDigest: Sha256Digest;\n toolkit: string;\n toolSlug: string;\n readbackToolSlug?: string;\n accountBinding: { bindingId: string; connectedAccountReference: string };\n ucanAudience: string;\n providerIdempotency: boolean;\n readback: 'required' | 'supported' | 'unavailable';\n compensation: 'required' | 'supported' | 'unavailable';\n redaction: { inputPaths: readonly string[]; outputPaths: readonly string[] };\n receiptCorrelation: { field: string };\n status: 'available' | 'unavailable';\n unavailableReasons: readonly string[];\n checkedAt: string;\n expiresAt: string;\n}\n\nexport type ComposioActionAvailabilityV1 = ComposioActionAvailabilityPayloadV1 & { integrity: FlowContractIntegrityV1 };\n\ndeclare const verifiedComposioAvailability: unique symbol;\nexport type VerifiedComposioActionAvailabilityV1 = Readonly<ComposioActionAvailabilityV1> & { readonly [verifiedComposioAvailability]: true };\n\nexport interface ComposioAvailabilitySigner {\n issuerDid: DID;\n verificationMethod: string;\n algorithm: string;\n sign(data: Uint8Array): Promise<string>;\n}\n\nexport interface ComposioAvailabilityTrustPolicy {\n trustedIssuerDids: readonly DID[];\n revokedIssuerDids?: readonly DID[];\n allowedSignatureAlgorithms: readonly string[];\n verifySignature(input: { issuerDid: DID; verificationMethod: string; algorithm: string; data: Uint8Array; signature: string }): Promise<boolean>;\n}\n\nexport interface ComposioAvailabilityResolver {\n resolve(actionContractDigest: Sha256Digest): Promise<VerifiedComposioActionAvailabilityV1>;\n}\n\nexport interface ExplicitComposioGateway {\n execute(request: {\n toolSlug: string;\n bindingId: string;\n connectedAccountReference: string;\n arguments: FlowJsonObject;\n providerIdempotencyKey: IdempotencyKey;\n providerInvocationReference: string;\n }): Promise<ProviderInvocationResult>;\n readback(request: {\n toolSlug: string;\n bindingId: string;\n connectedAccountReference: string;\n arguments: FlowJsonObject;\n providerIdempotencyKey: IdempotencyKey;\n providerCorrelation?: string;\n providerInvocationReference: string;\n }): Promise<ProviderReadbackResult>;\n}\n\nexport class ComposioContractMismatchError extends Error {\n constructor(readonly reason: string) {\n super(`Composio Action is unavailable: ${reason}`);\n this.name = 'ComposioContractMismatchError';\n }\n}\n\nconst COMPOSIO_AVAILABILITY_SIGNATURE_DOMAIN = 'qi.composio.action-availability.v1\\0';\n\nfunction availabilitySignatureInput(digest: Sha256Digest): Uint8Array {\n return new TextEncoder().encode(`${COMPOSIO_AVAILABILITY_SIGNATURE_DOMAIN}${digest}`);\n}\n\nfunction assertAvailabilityPayload(payload: ComposioActionAvailabilityPayloadV1): void {\n if (payload.kind !== 'qi.composio.action-availability' || payload.schemaVersion !== '1.0') throw new ComposioContractMismatchError('unsupported availability contract');\n if (\n !payload.issuedBy ||\n !payload.actionContractDigest ||\n !payload.handlerIdentity ||\n !payload.toolSlug ||\n !payload.accountBinding.bindingId ||\n !payload.accountBinding.connectedAccountReference ||\n !payload.ucanAudience\n ) {\n throw new ComposioContractMismatchError('availability identity and execution binding are required');\n }\n if (payload.readback !== 'unavailable' && !payload.readbackToolSlug?.trim()) {\n throw new ComposioContractMismatchError('required or supported readback must declare an explicit readback tool');\n }\n const checkedAt = Date.parse(payload.checkedAt);\n const expiresAt = Date.parse(payload.expiresAt);\n if (!Number.isFinite(checkedAt) || !Number.isFinite(expiresAt) || expiresAt <= checkedAt) {\n throw new ComposioContractMismatchError('availability timestamps are invalid');\n }\n}\n\nexport async function computeComposioAvailabilityDigest(payload: ComposioActionAvailabilityPayloadV1): Promise<Sha256Digest> {\n assertAvailabilityPayload(payload);\n return (await digestCanonicalJson(payload as unknown as CanonicalJsonValue)) as Sha256Digest;\n}\n\nexport async function signComposioActionAvailability(payload: ComposioActionAvailabilityPayloadV1, signer: ComposioAvailabilitySigner): Promise<ComposioActionAvailabilityV1> {\n const snapshot = JSON.parse(canonicalizeJson(payload as unknown as CanonicalJsonValue)) as ComposioActionAvailabilityPayloadV1;\n assertAvailabilityPayload(snapshot);\n if (signer.issuerDid !== snapshot.issuedBy || !signer.verificationMethod.startsWith(`${snapshot.issuedBy}#`)) {\n throw new ComposioContractMismatchError('availability signer does not match the issuer');\n }\n const digest = await computeComposioAvailabilityDigest(snapshot);\n const signature = await signer.sign(availabilitySignatureInput(digest));\n if (!signature) throw new ComposioContractMismatchError('availability signer returned an empty signature');\n return {\n ...snapshot,\n integrity: {\n canonicalization: 'RFC8785',\n digest: { algorithm: 'SHA-256', value: digest },\n signature: { algorithm: signer.algorithm, verificationMethod: signer.verificationMethod, value: signature },\n },\n };\n}\n\nexport async function verifyComposioActionAvailability(\n candidate: ComposioActionAvailabilityV1,\n policy: ComposioAvailabilityTrustPolicy,\n now = new Date()\n): Promise<VerifiedComposioActionAvailabilityV1> {\n const snapshot = JSON.parse(canonicalizeJson(candidate as unknown as CanonicalJsonValue)) as ComposioActionAvailabilityV1;\n const { integrity, ...payload } = snapshot;\n assertAvailabilityPayload(payload);\n const digest = await computeComposioAvailabilityDigest(payload);\n if (digest !== integrity.digest.value) throw new ComposioContractMismatchError('availability digest does not match its content');\n if (!policy.trustedIssuerDids.includes(payload.issuedBy)) throw new ComposioContractMismatchError('availability issuer is not trusted');\n if (policy.revokedIssuerDids?.includes(payload.issuedBy)) throw new ComposioContractMismatchError('availability issuer is revoked');\n if (!policy.allowedSignatureAlgorithms.includes(integrity.signature.algorithm)) throw new ComposioContractMismatchError('availability signature algorithm is not allowed');\n if (!integrity.signature.verificationMethod.startsWith(`${payload.issuedBy}#`)) {\n throw new ComposioContractMismatchError('availability verification method does not belong to the issuer');\n }\n if (Date.parse(payload.expiresAt) <= now.getTime()) throw new ComposioContractMismatchError('availability contract is expired');\n const valid = await policy.verifySignature({\n issuerDid: payload.issuedBy,\n verificationMethod: integrity.signature.verificationMethod,\n algorithm: integrity.signature.algorithm,\n data: availabilitySignatureInput(digest),\n signature: integrity.signature.value,\n });\n if (!valid) throw new ComposioContractMismatchError('availability signature verification failed');\n return deepFreezeJson(snapshot) as VerifiedComposioActionAvailabilityV1;\n}\n\nasync function assertAvailability(\n contract: ActionContractV1,\n availability: VerifiedComposioActionAvailabilityV1,\n authorization: VerifiedAttemptAuthorization,\n now: Date\n): Promise<void> {\n if (Date.parse(availability.expiresAt) <= now.getTime()) throw new ComposioContractMismatchError('availability contract is expired');\n if (availability.status !== 'available') throw new ComposioContractMismatchError(availability.unavailableReasons.join('; ') || 'availability endpoint is unhealthy');\n if (availability.actionContractDigest !== contract.contractDigest) throw new ComposioContractMismatchError('Action contract digest mismatch');\n if (availability.handlerVersion !== contract.handlerVersion) throw new ComposioContractMismatchError('handler version mismatch');\n if ((await digestCanonicalJson(contract.inputSchema)) !== availability.inputSchemaDigest) throw new ComposioContractMismatchError('input schema digest mismatch');\n if ((await digestCanonicalJson(contract.outputSchema)) !== availability.outputSchemaDigest) throw new ComposioContractMismatchError('output schema digest mismatch');\n if (availability.providerIdempotency !== contract.idempotency.providerKey) throw new ComposioContractMismatchError('provider idempotency contract mismatch');\n if (availability.readback !== contract.idempotency.readback || availability.compensation !== contract.idempotency.compensation) {\n throw new ComposioContractMismatchError('recovery procedure mismatch');\n }\n if (availability.readback !== 'unavailable' && !availability.readbackToolSlug?.trim()) {\n throw new ComposioContractMismatchError('required or supported readback must declare an explicit readback tool');\n }\n const provider = authorization.provider;\n if (!provider) throw new ComposioContractMismatchError('verified provider invocation is missing');\n if (\n provider.audience !== availability.ucanAudience ||\n provider.can !== 'composio/execute' ||\n provider.with !== `ixo:composio:binding:${availability.accountBinding.bindingId}` ||\n provider.actionContractDigest !== contract.contractDigest ||\n provider.definitionDigest !== authorization.flow.definitionDigest ||\n provider.idempotencyKey !== authorization.flow.idempotencyKey\n ) {\n throw new ComposioContractMismatchError('provider UCAN does not authorize this Flow command and Action');\n }\n}\n\n/**\n * Executes only the tool slug and account binding declared by the signed\n * availability contract. No dynamic discovery result can reach execution.\n */\nexport class ManifestBoundComposioActionAdapter implements ManifestBoundActionAdapter {\n constructor(\n private readonly availability: ComposioAvailabilityResolver,\n private readonly gateway: ExplicitComposioGateway,\n private readonly now: () => Date = () => new Date()\n ) {}\n\n async invoke(request: {\n contract: ActionContractV1;\n inputs: FlowJsonObject;\n providerIdempotencyKey: IdempotencyKey;\n invocation: VerifiedAttemptAuthorization;\n assertEffectAllowed: () => void;\n }): Promise<ProviderInvocationResult> {\n const available = await this.availability.resolve(request.contract.contractDigest);\n await assertAvailability(request.contract, available, request.invocation, this.now());\n request.assertEffectAllowed();\n return this.gateway.execute({\n toolSlug: available.toolSlug,\n bindingId: available.accountBinding.bindingId,\n connectedAccountReference: available.accountBinding.connectedAccountReference,\n arguments: request.inputs,\n providerIdempotencyKey: request.providerIdempotencyKey,\n providerInvocationReference: request.invocation.provider!.cid,\n });\n }\n\n async readback(request: {\n contract: ActionContractV1;\n inputs: FlowJsonObject;\n providerIdempotencyKey: IdempotencyKey;\n providerCorrelation?: string;\n invocation: VerifiedAttemptAuthorization;\n }): Promise<ProviderReadbackResult> {\n const available = await this.availability.resolve(request.contract.contractDigest);\n await assertAvailability(request.contract, available, request.invocation, this.now());\n if (!available.readbackToolSlug) return { outcome: 'unknown', providerCorrelation: request.providerCorrelation, reason: 'Manifest declares no explicit readback tool' };\n return this.gateway.readback({\n toolSlug: available.readbackToolSlug,\n bindingId: available.accountBinding.bindingId,\n connectedAccountReference: available.accountBinding.connectedAccountReference,\n arguments: request.inputs,\n providerIdempotencyKey: request.providerIdempotencyKey,\n providerCorrelation: request.providerCorrelation,\n providerInvocationReference: request.invocation.provider!.cid,\n });\n }\n}\n","import type * as Y from 'yjs';\n\n/**\n * Resolve an existing top-level Y.Map without creating an absent shared type.\n *\n * A remote update may leave `Doc.share` holding an unspecialized\n * `AbstractType` until `getMap` is called locally. Checking `share.has` first\n * distinguishes that harmless local specialization from creating a brand-new\n * shared map on an otherwise empty document.\n */\nexport function getExistingYMap<T = unknown>(yDoc: Y.Doc, key: string): Y.Map<T> | undefined {\n if (!yDoc.share.has(key)) return undefined;\n return yDoc.getMap<T>(key);\n}\n\n/**\n * Structural Y.Map guard.\n *\n * Yjs is a peer dependency and local multi-repo development can legitimately\n * load two compatible package instances. `instanceof Y.Map` then rejects a\n * real map created by the consumer's instance. Shared-state boundaries use\n * this guard so behavior follows the CRDT shape rather than constructor\n * identity.\n */\nexport function isYMapLike<T = unknown>(value: unknown): value is Y.Map<T> {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as {\n get?: unknown;\n set?: unknown;\n has?: unknown;\n forEach?: unknown;\n };\n return typeof candidate.get === 'function' && typeof candidate.set === 'function' && typeof candidate.has === 'function' && typeof candidate.forEach === 'function';\n}\n\n/**\n * Structural Y.XmlElement guard.\n *\n * `nodeName` is what separates an element from Y.XmlText/Y.XmlHook inside the\n * same fragment, so checking it (plus the attribute API) matches exactly the\n * nodes `instanceof Y.XmlElement` accepted — without tying the answer to which\n * yjs instance constructed the document. A deployed host that loads yjs as CJS\n * while this package's dist loads it as ESM gets two instances of the same\n * version; constructor checks then reject every real element and a populated\n * document reads as empty.\n */\nexport function isYXmlElementLike(value: unknown): value is Y.XmlElement {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as {\n nodeName?: unknown;\n getAttribute?: unknown;\n getAttributes?: unknown;\n };\n return typeof candidate.nodeName === 'string' && typeof candidate.getAttribute === 'function' && typeof candidate.getAttributes === 'function';\n}\n\n/** Structural Y.Array guard — same dual-instance rationale as isYMapLike. */\nexport function isYArrayLike<T = unknown>(value: unknown): value is Y.Array<T> {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as {\n toArray?: unknown;\n push?: unknown;\n length?: unknown;\n };\n return typeof candidate.toArray === 'function' && typeof candidate.push === 'function' && typeof candidate.length === 'number';\n}\n\n/** Structural Y.Doc guard — same dual-instance rationale as isYMapLike. */\nexport function isYDocLike(value: unknown): value is Y.Doc {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as {\n getMap?: unknown;\n getXmlFragment?: unknown;\n transact?: unknown;\n };\n return typeof candidate.getMap === 'function' && typeof candidate.getXmlFragment === 'function' && typeof candidate.transact === 'function';\n}\n","import * as Y from 'yjs';\nimport { canonicalizeJson, deepFreezeJson, digestCanonicalJson, type CanonicalJsonValue } from './canonical';\nimport type { AttemptId, DID, EffectDisposition, EventId, FlowDefinitionRef, ReceiptId, RunId, Sha256Digest } from './contracts';\nimport { reduceFlowEvents, type ActionOutcomeEvidenceV1, type FlowEventEnvelopeV1, type RunGenesisV1, type VerifiedFlowEventEnvelopeV1 } from './events';\nimport { isYMapLike } from '../../yjsTypes';\n\nexport const FLOW_RUN_PROJECTIONS_MAP_KEY = 'qi.flow.runProjections';\nconst FLOW_RUN_PROJECTION_KEY_SEPARATOR = '::';\n\nexport interface FlowRunAttemptProjectionV1 {\n attemptId: AttemptId;\n stepId: string;\n disposition: EffectDisposition;\n outputDigest?: Sha256Digest;\n providerCorrelation?: string;\n receiptIds: readonly ReceiptId[];\n outcomes: readonly ActionOutcomeEvidenceV1[];\n}\n\nexport interface FlowRunTimelineEntryV1 {\n eventId: EventId;\n kind: FlowEventEnvelopeV1['payload']['kind'];\n occurredAt: string;\n actor: DID;\n producer: DID;\n parents: readonly EventId[];\n attemptId?: AttemptId;\n stepId?: string;\n}\n\nexport interface FlowRunProjectionV1 {\n kind: 'qi.flow.run-projection';\n schemaVersion: '1.0';\n runId: RunId;\n definition: FlowDefinitionRef;\n sourceEventIds: readonly EventId[];\n sourceEventSetDigest: Sha256Digest;\n headEventIds: readonly EventId[];\n status: ReturnType<typeof reduceFlowEvents>['status'];\n cancelRequested: boolean;\n attempts: Readonly<Record<string, FlowRunAttemptProjectionV1>>;\n timeline: readonly FlowRunTimelineEntryV1[];\n invalidEvents: readonly { eventId: EventId; reason: string }[];\n}\n\nexport type FlowRunProjectionRepairResult =\n | { outcome: 'unchanged' }\n | { outcome: 'stale'; currentSourceEventSetDigest: Sha256Digest }\n | { outcome: 'repaired'; previousSourceEventSetDigest?: Sha256Digest };\n\nconst RUN_STATUSES = new Set<FlowRunProjectionV1['status']>(['queued', 'running', 'cancelling', 'needs_verification', 'completed', 'failed', 'cancelled']);\nconst EFFECT_DISPOSITIONS = new Set<EffectDisposition>(['not_started', 'armed', 'succeeded', 'failed_before_effect', 'needs_verification']);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every((entry) => typeof entry === 'string');\n}\n\nfunction isDigest(value: unknown): value is Sha256Digest {\n return typeof value === 'string' && /^sha256:[0-9a-f]{64}$/u.test(value);\n}\n\nfunction hasValidProjectionShape(value: unknown): value is FlowRunProjectionV1 {\n if (!isRecord(value)) return false;\n if (value.kind !== 'qi.flow.run-projection' || value.schemaVersion !== '1.0' || typeof value.runId !== 'string' || !isDigest(value.sourceEventSetDigest)) return false;\n if (!isRecord(value.definition) || typeof value.definition.flowId !== 'string' || typeof value.definition.revision !== 'string' || !isDigest(value.definition.digest))\n return false;\n const sourceEventIds = value.sourceEventIds;\n if (!isStringArray(sourceEventIds) || canonicalizeJson(sourceEventIds) !== canonicalizeJson([...new Set(sourceEventIds)].sort())) return false;\n const headEventIds = value.headEventIds;\n if (\n !isStringArray(headEventIds) ||\n canonicalizeJson(headEventIds) !== canonicalizeJson([...new Set(headEventIds)].sort()) ||\n !headEventIds.every((eventId) => sourceEventIds.includes(eventId))\n )\n return false;\n if (typeof value.status !== 'string' || !RUN_STATUSES.has(value.status as FlowRunProjectionV1['status']) || typeof value.cancelRequested !== 'boolean') return false;\n const timeline = value.timeline;\n if (!isRecord(value.attempts) || !Array.isArray(timeline) || !Array.isArray(value.invalidEvents)) return false;\n for (const [attemptId, attempt] of Object.entries(value.attempts)) {\n if (!isRecord(attempt) || attempt.attemptId !== attemptId || typeof attempt.stepId !== 'string' || typeof attempt.disposition !== 'string') return false;\n if (!EFFECT_DISPOSITIONS.has(attempt.disposition as EffectDisposition) || !isStringArray(attempt.receiptIds) || !Array.isArray(attempt.outcomes)) return false;\n if (attempt.outputDigest !== undefined && !isDigest(attempt.outputDigest)) return false;\n if (attempt.providerCorrelation !== undefined && typeof attempt.providerCorrelation !== 'string') return false;\n if (!attempt.outcomes.every((outcome) => isRecord(outcome) && typeof outcome.name === 'string' && isRecord(outcome.payload) && isDigest(outcome.payloadDigest))) return false;\n }\n if (\n !timeline.every(\n (entry) =>\n isRecord(entry) &&\n typeof entry.eventId === 'string' &&\n sourceEventIds.includes(entry.eventId) &&\n typeof entry.kind === 'string' &&\n typeof entry.occurredAt === 'string' &&\n typeof entry.actor === 'string' &&\n typeof entry.producer === 'string' &&\n isStringArray(entry.parents) &&\n (entry.attemptId === undefined || typeof entry.attemptId === 'string') &&\n (entry.stepId === undefined || typeof entry.stepId === 'string')\n )\n )\n return false;\n if (!headEventIds.every((eventId) => timeline.some((entry) => isRecord(entry) && entry.eventId === eventId))) return false;\n return value.invalidEvents.every((entry) => isRecord(entry) && typeof entry.eventId === 'string' && sourceEventIds.includes(entry.eventId) && typeof entry.reason === 'string');\n}\n\nfunction orderAcceptedEvents(events: readonly VerifiedFlowEventEnvelopeV1[], acceptedEventIds: readonly EventId[]): VerifiedFlowEventEnvelopeV1[] {\n const accepted = new Set(acceptedEventIds);\n const byId = new Map<EventId, VerifiedFlowEventEnvelopeV1>();\n for (const event of events) if (accepted.has(event.eventId) && !byId.has(event.eventId)) byId.set(event.eventId, event);\n const indegree = new Map([...byId.keys()].map((eventId) => [eventId, 0]));\n const children = new Map<EventId, EventId[]>();\n for (const event of byId.values()) {\n for (const parent of event.parents) {\n if (!byId.has(parent)) continue;\n indegree.set(event.eventId, (indegree.get(event.eventId) ?? 0) + 1);\n children.set(parent, [...(children.get(parent) ?? []), event.eventId]);\n }\n }\n const ready = [...byId.keys()].filter((eventId) => indegree.get(eventId) === 0).sort();\n const ordered: VerifiedFlowEventEnvelopeV1[] = [];\n while (ready.length > 0) {\n const eventId = ready.shift() as EventId;\n const event = byId.get(eventId);\n if (!event) continue;\n ordered.push(event);\n for (const childId of (children.get(eventId) ?? []).sort()) {\n const next = (indegree.get(childId) ?? 0) - 1;\n indegree.set(childId, next);\n if (next === 0) {\n ready.push(childId);\n ready.sort();\n }\n }\n }\n return ordered;\n}\n\nfunction projectAttempt(attempt: ReturnType<typeof reduceFlowEvents>['attempts'][string]): FlowRunAttemptProjectionV1 {\n return {\n attemptId: attempt.attemptId,\n stepId: attempt.stepId,\n disposition: attempt.disposition,\n receiptIds: [...attempt.receiptIds],\n outcomes: attempt.outcomes.map((outcome) => ({ ...outcome, payload: { ...outcome.payload } })),\n ...(attempt.outputDigest !== undefined ? { outputDigest: attempt.outputDigest } : {}),\n ...(attempt.providerCorrelation !== undefined ? { providerCorrelation: attempt.providerCorrelation } : {}),\n };\n}\n\nfunction projectTimelineEntry(event: VerifiedFlowEventEnvelopeV1): FlowRunTimelineEntryV1 {\n const payload = event.payload;\n return {\n eventId: event.eventId,\n kind: payload.kind,\n occurredAt: event.occurredAt,\n actor: event.actor,\n producer: event.producer,\n parents: [...event.parents],\n ...('attemptId' in payload ? { attemptId: payload.attemptId } : {}),\n ...('stepId' in payload ? { stepId: payload.stepId } : {}),\n };\n}\n\nexport async function projectFlowRun(genesis: RunGenesisV1, events: readonly VerifiedFlowEventEnvelopeV1[]): Promise<FlowRunProjectionV1> {\n const genesisSnapshot = deepFreezeJson(JSON.parse(canonicalizeJson(genesis as unknown as CanonicalJsonValue)) as RunGenesisV1);\n const eventSnapshot = deepFreezeJson(JSON.parse(canonicalizeJson(events as unknown as CanonicalJsonValue)) as VerifiedFlowEventEnvelopeV1[]);\n const reduced = reduceFlowEvents(genesisSnapshot, eventSnapshot);\n const sourceEventIds = [...new Set(eventSnapshot.map((event) => event.eventId))].sort();\n const sourceEventSetDigest = (await digestCanonicalJson(sourceEventIds)) as Sha256Digest;\n const ordered = orderAcceptedEvents(eventSnapshot, reduced.acceptedEventIds);\n const accepted = new Set(reduced.acceptedEventIds);\n const referencedParents = new Set(ordered.flatMap((event) => event.parents.filter((parent) => accepted.has(parent))));\n const headEventIds = ordered\n .map((event) => event.eventId)\n .filter((eventId) => !referencedParents.has(eventId))\n .sort();\n const projection: FlowRunProjectionV1 = {\n kind: 'qi.flow.run-projection',\n schemaVersion: '1.0',\n runId: reduced.runId,\n definition: reduced.definition,\n sourceEventIds,\n sourceEventSetDigest,\n headEventIds,\n status: reduced.status,\n cancelRequested: reduced.cancelRequested,\n attempts: Object.fromEntries(Object.entries(reduced.attempts).map(([id, attempt]) => [id, projectAttempt(attempt)])),\n timeline: ordered.map(projectTimelineEntry),\n invalidEvents: reduced.invalidEvents.map((event) => ({ ...event })),\n };\n return deepFreezeJson(JSON.parse(canonicalizeJson(projection as unknown as CanonicalJsonValue)) as FlowRunProjectionV1);\n}\n\nasync function snapshotProjection(value: unknown): Promise<FlowRunProjectionV1 | null> {\n if (!value || typeof value !== 'object') return null;\n let snapshot: unknown;\n try {\n snapshot = JSON.parse(canonicalizeJson(value as CanonicalJsonValue));\n } catch {\n return null;\n }\n if (!hasValidProjectionShape(snapshot)) return null;\n if ((await digestCanonicalJson(snapshot.sourceEventIds as unknown as CanonicalJsonValue)) !== snapshot.sourceEventSetDigest) return null;\n return deepFreezeJson(snapshot);\n}\n\nfunction canonicalStoredProjection(value: unknown): string | null {\n try {\n return canonicalizeJson(value as CanonicalJsonValue);\n } catch {\n return null;\n }\n}\n\nexport function flowRunProjectionStorageKey(runId: RunId, sourceEventSetDigest: Sha256Digest): string {\n return `${encodeURIComponent(runId)}${FLOW_RUN_PROJECTION_KEY_SEPARATOR}${sourceEventSetDigest}`;\n}\n\nfunction projectionStoragePrefix(runId: RunId): string {\n return `${encodeURIComponent(runId)}${FLOW_RUN_PROJECTION_KEY_SEPARATOR}`;\n}\n\nasync function storedRunProjections(map: Y.Map<unknown>, runId: RunId): Promise<FlowRunProjectionV1[]> {\n const projections: FlowRunProjectionV1[] = [];\n const pending: Promise<void>[] = [];\n const prefix = projectionStoragePrefix(runId);\n map.forEach((value, key) => {\n if (!key.startsWith(prefix)) return;\n pending.push(\n snapshotProjection(value).then((projection) => {\n if (projection?.runId === runId && key === flowRunProjectionStorageKey(runId, projection.sourceEventSetDigest)) projections.push(projection);\n })\n );\n });\n await Promise.all(pending);\n return projections;\n}\n\n/**\n * Reads a rebuildable projection only when every stored field matches the\n * projection derived from the caller's verified Matrix event set.\n */\nexport async function readFlowRunProjection(doc: Y.Doc, genesis: RunGenesisV1, events: readonly VerifiedFlowEventEnvelopeV1[]): Promise<FlowRunProjectionV1 | null> {\n const map = doc.share.get(FLOW_RUN_PROJECTIONS_MAP_KEY);\n if (!isYMapLike(map)) return null;\n const expected = await projectFlowRun(genesis, events);\n const projection = await snapshotProjection(map.get(flowRunProjectionStorageKey(expected.runId, expected.sourceEventSetDigest)));\n if (!projection || projection.runId !== expected.runId) return null;\n return canonicalizeJson(projection as unknown as CanonicalJsonValue) === canonicalizeJson(expected as unknown as CanonicalJsonValue) ? projection : null;\n}\n\nexport async function repairFlowRunProjection(\n doc: Y.Doc,\n genesis: RunGenesisV1,\n events: readonly VerifiedFlowEventEnvelopeV1[],\n verifiedEvidence: readonly VerifiedFlowEventEnvelopeV1[] = events\n): Promise<FlowRunProjectionRepairResult> {\n const projection = await projectFlowRun(genesis, events);\n const canonicalProjection = canonicalizeJson(projection as unknown as CanonicalJsonValue);\n const map = doc.getMap<unknown>(FLOW_RUN_PROJECTIONS_MAP_KEY);\n const storageKey = flowRunProjectionStorageKey(projection.runId, projection.sourceEventSetDigest);\n while (true) {\n const observedValue = map.get(storageKey);\n const observedCanonical = canonicalStoredProjection(observedValue);\n const current = await snapshotProjection(observedValue);\n if (canonicalStoredProjection(map.get(storageKey)) !== observedCanonical) continue;\n const incomingIds = new Set(projection.sourceEventIds);\n const verifiedIds = new Set(verifiedEvidence.map((event) => event.eventId));\n const blocking = (await storedRunProjections(map, projection.runId))\n .filter((candidate) => candidate.sourceEventIds.every((eventId) => verifiedIds.has(eventId)))\n .filter((candidate) => !candidate.sourceEventIds.every((eventId) => incomingIds.has(eventId)))\n .sort((left, right) => left.sourceEventSetDigest.localeCompare(right.sourceEventSetDigest))[0];\n if (canonicalStoredProjection(map.get(storageKey)) !== observedCanonical) continue;\n if (blocking) {\n return { outcome: 'stale', currentSourceEventSetDigest: blocking.sourceEventSetDigest };\n }\n if (current && canonicalizeJson(current as unknown as CanonicalJsonValue) === canonicalProjection) return { outcome: 'unchanged' };\n let changedWhileWriting = false;\n doc.transact(() => {\n if (canonicalStoredProjection(map.get(storageKey)) !== observedCanonical) {\n changedWhileWriting = true;\n return;\n }\n map.set(storageKey, JSON.parse(canonicalProjection) as FlowRunProjectionV1);\n // Remove the pre-vNext candidate slot. It is never trusted by reads and\n // keeping it would allow a flat-key LWW value to masquerade as current.\n map.delete(projection.runId);\n }, 'vnext-run-projection-repair');\n if (changedWhileWriting) continue;\n return {\n outcome: 'repaired',\n ...(current ? { previousSourceEventSetDigest: current.sourceEventSetDigest } : {}),\n };\n }\n}\n"],"mappings":"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","names":["signatureInput","outputDigest","Ajv2020","isPlainObject","assertValidUnicode","signatureInput","signatureInput","import__","compareCodeUnits","Ajv2020","isRecord","isStringArray"]}