@smthrs/control 0.0.0-stage → 1.0.0-rc.4

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 (418) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/LICENSE +21 -0
  3. package/README.md +168 -2
  4. package/dist/cjs/ApprovalAuthority.d.ts +73 -0
  5. package/dist/cjs/ApprovalAuthority.d.ts.map +1 -0
  6. package/dist/cjs/ApprovalAuthority.js +62 -0
  7. package/dist/cjs/ApprovalAuthority.js.map +7 -0
  8. package/dist/cjs/Cancellation.d.ts +107 -0
  9. package/dist/cjs/Cancellation.d.ts.map +1 -0
  10. package/dist/cjs/Cancellation.js +72 -0
  11. package/dist/cjs/Cancellation.js.map +7 -0
  12. package/dist/cjs/Channels.d.ts +170 -0
  13. package/dist/cjs/Channels.d.ts.map +1 -0
  14. package/dist/cjs/Channels.js +278 -0
  15. package/dist/cjs/Channels.js.map +7 -0
  16. package/dist/cjs/Control.d.ts +202 -0
  17. package/dist/cjs/Control.d.ts.map +1 -0
  18. package/dist/cjs/Control.js +47 -0
  19. package/dist/cjs/Control.js.map +7 -0
  20. package/dist/cjs/ControlClient.d.ts +52 -0
  21. package/dist/cjs/ControlClient.d.ts.map +1 -0
  22. package/dist/cjs/ControlClient.js +191 -0
  23. package/dist/cjs/ControlClient.js.map +7 -0
  24. package/dist/cjs/ControlError.d.ts +318 -0
  25. package/dist/cjs/ControlError.d.ts.map +1 -0
  26. package/dist/cjs/ControlError.js +249 -0
  27. package/dist/cjs/ControlError.js.map +7 -0
  28. package/dist/cjs/ControlExecutor.d.ts +372 -0
  29. package/dist/cjs/ControlExecutor.d.ts.map +1 -0
  30. package/dist/cjs/ControlExecutor.js +123 -0
  31. package/dist/cjs/ControlExecutor.js.map +7 -0
  32. package/dist/cjs/ControlFacts.d.ts +454 -0
  33. package/dist/cjs/ControlFacts.d.ts.map +1 -0
  34. package/dist/cjs/ControlFacts.js +261 -0
  35. package/dist/cjs/ControlFacts.js.map +7 -0
  36. package/dist/cjs/ControlLive.d.ts +23 -0
  37. package/dist/cjs/ControlLive.d.ts.map +1 -0
  38. package/dist/cjs/ControlLive.js +1293 -0
  39. package/dist/cjs/ControlLive.js.map +7 -0
  40. package/dist/cjs/ControlRpcs.d.ts +1204 -0
  41. package/dist/cjs/ControlRpcs.d.ts.map +1 -0
  42. package/dist/cjs/ControlRpcs.js +247 -0
  43. package/dist/cjs/ControlRpcs.js.map +7 -0
  44. package/dist/cjs/ControlRuntime.d.ts +635 -0
  45. package/dist/cjs/ControlRuntime.d.ts.map +1 -0
  46. package/dist/cjs/ControlRuntime.js +744 -0
  47. package/dist/cjs/ControlRuntime.js.map +7 -0
  48. package/dist/cjs/ControlSchema.d.ts +2642 -0
  49. package/dist/cjs/ControlSchema.d.ts.map +1 -0
  50. package/dist/cjs/ControlSchema.js +634 -0
  51. package/dist/cjs/ControlSchema.js.map +7 -0
  52. package/dist/cjs/ControlServer.d.ts +51 -0
  53. package/dist/cjs/ControlServer.d.ts.map +1 -0
  54. package/dist/cjs/ControlServer.js +121 -0
  55. package/dist/cjs/ControlServer.js.map +7 -0
  56. package/dist/cjs/Credential.d.ts +136 -0
  57. package/dist/cjs/Credential.d.ts.map +1 -0
  58. package/dist/cjs/Credential.js +168 -0
  59. package/dist/cjs/Credential.js.map +7 -0
  60. package/dist/cjs/CredentialCipher.d.ts +90 -0
  61. package/dist/cjs/CredentialCipher.d.ts.map +1 -0
  62. package/dist/cjs/CredentialCipher.js +45 -0
  63. package/dist/cjs/CredentialCipher.js.map +7 -0
  64. package/dist/cjs/CredentialStore.d.ts +97 -0
  65. package/dist/cjs/CredentialStore.d.ts.map +1 -0
  66. package/dist/cjs/CredentialStore.js +81 -0
  67. package/dist/cjs/CredentialStore.js.map +7 -0
  68. package/dist/cjs/DispatchReader.d.ts +112 -0
  69. package/dist/cjs/DispatchReader.d.ts.map +1 -0
  70. package/dist/cjs/DispatchReader.js +45 -0
  71. package/dist/cjs/DispatchReader.js.map +7 -0
  72. package/dist/cjs/Health.d.ts +333 -0
  73. package/dist/cjs/Health.d.ts.map +1 -0
  74. package/dist/cjs/Health.js +311 -0
  75. package/dist/cjs/Health.js.map +7 -0
  76. package/dist/cjs/JevSessionChecker.d.ts +57 -0
  77. package/dist/cjs/JevSessionChecker.d.ts.map +1 -0
  78. package/dist/cjs/JevSessionChecker.js +113 -0
  79. package/dist/cjs/JevSessionChecker.js.map +7 -0
  80. package/dist/cjs/Lineage.d.ts +131 -0
  81. package/dist/cjs/Lineage.d.ts.map +1 -0
  82. package/dist/cjs/Lineage.js +81 -0
  83. package/dist/cjs/Lineage.js.map +7 -0
  84. package/dist/cjs/Migrations.d.ts +34 -0
  85. package/dist/cjs/Migrations.d.ts.map +1 -0
  86. package/dist/cjs/Migrations.js +60 -0
  87. package/dist/cjs/Migrations.js.map +7 -0
  88. package/dist/cjs/Monitor.d.ts +282 -0
  89. package/dist/cjs/Monitor.d.ts.map +1 -0
  90. package/dist/cjs/Monitor.js +283 -0
  91. package/dist/cjs/Monitor.js.map +7 -0
  92. package/dist/cjs/ScopedToken.d.ts +193 -0
  93. package/dist/cjs/ScopedToken.d.ts.map +1 -0
  94. package/dist/cjs/ScopedToken.js +135 -0
  95. package/dist/cjs/ScopedToken.js.map +7 -0
  96. package/dist/cjs/SqlControlRuntime.d.ts +161 -0
  97. package/dist/cjs/SqlControlRuntime.d.ts.map +1 -0
  98. package/dist/cjs/SqlControlRuntime.js +1522 -0
  99. package/dist/cjs/SqlControlRuntime.js.map +7 -0
  100. package/dist/cjs/SqlCredentialStore.d.ts +43 -0
  101. package/dist/cjs/SqlCredentialStore.d.ts.map +1 -0
  102. package/dist/cjs/SqlCredentialStore.js +113 -0
  103. package/dist/cjs/SqlCredentialStore.js.map +7 -0
  104. package/dist/cjs/Steering.d.ts +69 -0
  105. package/dist/cjs/Steering.d.ts.map +1 -0
  106. package/dist/cjs/Steering.js +49 -0
  107. package/dist/cjs/Steering.js.map +7 -0
  108. package/dist/cjs/SystemFlows.d.ts +223 -0
  109. package/dist/cjs/SystemFlows.d.ts.map +1 -0
  110. package/dist/cjs/SystemFlows.js +195 -0
  111. package/dist/cjs/SystemFlows.js.map +7 -0
  112. package/dist/cjs/WebCryptoCipher.d.ts +49 -0
  113. package/dist/cjs/WebCryptoCipher.d.ts.map +1 -0
  114. package/dist/cjs/WebCryptoCipher.js +129 -0
  115. package/dist/cjs/WebCryptoCipher.js.map +7 -0
  116. package/dist/cjs/WebhookChannel.d.ts +113 -0
  117. package/dist/cjs/WebhookChannel.d.ts.map +1 -0
  118. package/dist/cjs/WebhookChannel.js +98 -0
  119. package/dist/cjs/WebhookChannel.js.map +7 -0
  120. package/dist/cjs/index.d.ts +160 -0
  121. package/dist/cjs/index.d.ts.map +1 -0
  122. package/dist/cjs/index.js +91 -0
  123. package/dist/cjs/index.js.map +7 -0
  124. package/dist/cjs/internal/MutationBoundary.d.ts +27 -0
  125. package/dist/cjs/internal/MutationBoundary.d.ts.map +1 -0
  126. package/dist/cjs/internal/MutationBoundary.js +50 -0
  127. package/dist/cjs/internal/MutationBoundary.js.map +7 -0
  128. package/dist/cjs/internal/activeFibers.d.ts +12 -0
  129. package/dist/cjs/internal/activeFibers.d.ts.map +1 -0
  130. package/dist/cjs/internal/activeFibers.js +30 -0
  131. package/dist/cjs/internal/activeFibers.js.map +7 -0
  132. package/dist/cjs/internal/issues.d.ts +28 -0
  133. package/dist/cjs/internal/issues.d.ts.map +1 -0
  134. package/dist/cjs/internal/issues.js +34 -0
  135. package/dist/cjs/internal/issues.js.map +7 -0
  136. package/dist/cjs/internal/planning.d.ts +347 -0
  137. package/dist/cjs/internal/planning.d.ts.map +1 -0
  138. package/dist/cjs/internal/planning.js +137 -0
  139. package/dist/cjs/internal/planning.js.map +7 -0
  140. package/dist/cjs/internal/sqlSchemaErrors.d.ts +18 -0
  141. package/dist/cjs/internal/sqlSchemaErrors.d.ts.map +1 -0
  142. package/dist/cjs/internal/sqlSchemaErrors.js +40 -0
  143. package/dist/cjs/internal/sqlSchemaErrors.js.map +7 -0
  144. package/dist/cjs/migrations/0001_control_tables.d.ts +18 -0
  145. package/dist/cjs/migrations/0001_control_tables.d.ts.map +1 -0
  146. package/dist/cjs/migrations/0001_control_tables.js +115 -0
  147. package/dist/cjs/migrations/0001_control_tables.js.map +7 -0
  148. package/dist/cjs/migrations/0002_run_keys.d.ts +15 -0
  149. package/dist/cjs/migrations/0002_run_keys.d.ts.map +1 -0
  150. package/dist/cjs/migrations/0002_run_keys.js +44 -0
  151. package/dist/cjs/migrations/0002_run_keys.js.map +7 -0
  152. package/dist/cjs/migrations/0003_signal_commands.d.ts +13 -0
  153. package/dist/cjs/migrations/0003_signal_commands.d.ts.map +1 -0
  154. package/dist/cjs/migrations/0003_signal_commands.js +50 -0
  155. package/dist/cjs/migrations/0003_signal_commands.js.map +7 -0
  156. package/dist/cjs/migrations/0004_approval_decisions.d.ts +13 -0
  157. package/dist/cjs/migrations/0004_approval_decisions.d.ts.map +1 -0
  158. package/dist/cjs/migrations/0004_approval_decisions.js +45 -0
  159. package/dist/cjs/migrations/0004_approval_decisions.js.map +7 -0
  160. package/dist/cjs/migrations/0005_signal_principals.d.ts +18 -0
  161. package/dist/cjs/migrations/0005_signal_principals.d.ts.map +1 -0
  162. package/dist/cjs/migrations/0005_signal_principals.js +45 -0
  163. package/dist/cjs/migrations/0005_signal_principals.js.map +7 -0
  164. package/dist/cjs/migrations/0006_run_principals.d.ts +18 -0
  165. package/dist/cjs/migrations/0006_run_principals.d.ts.map +1 -0
  166. package/dist/cjs/migrations/0006_run_principals.js +49 -0
  167. package/dist/cjs/migrations/0006_run_principals.js.map +7 -0
  168. package/dist/cjs/migrations/0007_resume_consent.d.ts +18 -0
  169. package/dist/cjs/migrations/0007_resume_consent.d.ts.map +1 -0
  170. package/dist/cjs/migrations/0007_resume_consent.js +46 -0
  171. package/dist/cjs/migrations/0007_resume_consent.js.map +7 -0
  172. package/dist/cjs/package.json +1 -0
  173. package/dist/cjs/test/TestControl.d.ts +19 -0
  174. package/dist/cjs/test/TestControl.d.ts.map +1 -0
  175. package/dist/cjs/test/TestControl.js +62 -0
  176. package/dist/cjs/test/TestControl.js.map +7 -0
  177. package/dist/esm/ApprovalAuthority.d.ts +73 -0
  178. package/dist/esm/ApprovalAuthority.d.ts.map +1 -0
  179. package/dist/esm/ApprovalAuthority.js +72 -0
  180. package/dist/esm/ApprovalAuthority.js.map +1 -0
  181. package/dist/esm/Cancellation.d.ts +107 -0
  182. package/dist/esm/Cancellation.d.ts.map +1 -0
  183. package/dist/esm/Cancellation.js +116 -0
  184. package/dist/esm/Cancellation.js.map +1 -0
  185. package/dist/esm/Channels.d.ts +170 -0
  186. package/dist/esm/Channels.d.ts.map +1 -0
  187. package/dist/esm/Channels.js +312 -0
  188. package/dist/esm/Channels.js.map +1 -0
  189. package/dist/esm/Control.d.ts +202 -0
  190. package/dist/esm/Control.d.ts.map +1 -0
  191. package/dist/esm/Control.js +42 -0
  192. package/dist/esm/Control.js.map +1 -0
  193. package/dist/esm/ControlClient.d.ts +52 -0
  194. package/dist/esm/ControlClient.d.ts.map +1 -0
  195. package/dist/esm/ControlClient.js +217 -0
  196. package/dist/esm/ControlClient.js.map +1 -0
  197. package/dist/esm/ControlError.d.ts +318 -0
  198. package/dist/esm/ControlError.d.ts.map +1 -0
  199. package/dist/esm/ControlError.js +359 -0
  200. package/dist/esm/ControlError.js.map +1 -0
  201. package/dist/esm/ControlExecutor.d.ts +372 -0
  202. package/dist/esm/ControlExecutor.d.ts.map +1 -0
  203. package/dist/esm/ControlExecutor.js +212 -0
  204. package/dist/esm/ControlExecutor.js.map +1 -0
  205. package/dist/esm/ControlFacts.d.ts +454 -0
  206. package/dist/esm/ControlFacts.d.ts.map +1 -0
  207. package/dist/esm/ControlFacts.js +324 -0
  208. package/dist/esm/ControlFacts.js.map +1 -0
  209. package/dist/esm/ControlLive.d.ts +23 -0
  210. package/dist/esm/ControlLive.d.ts.map +1 -0
  211. package/dist/esm/ControlLive.js +1589 -0
  212. package/dist/esm/ControlLive.js.map +1 -0
  213. package/dist/esm/ControlRpcs.d.ts +1204 -0
  214. package/dist/esm/ControlRpcs.d.ts.map +1 -0
  215. package/dist/esm/ControlRpcs.js +299 -0
  216. package/dist/esm/ControlRpcs.js.map +1 -0
  217. package/dist/esm/ControlRuntime.d.ts +635 -0
  218. package/dist/esm/ControlRuntime.d.ts.map +1 -0
  219. package/dist/esm/ControlRuntime.js +808 -0
  220. package/dist/esm/ControlRuntime.js.map +1 -0
  221. package/dist/esm/ControlSchema.d.ts +2642 -0
  222. package/dist/esm/ControlSchema.d.ts.map +1 -0
  223. package/dist/esm/ControlSchema.js +1030 -0
  224. package/dist/esm/ControlSchema.js.map +1 -0
  225. package/dist/esm/ControlServer.d.ts +51 -0
  226. package/dist/esm/ControlServer.d.ts.map +1 -0
  227. package/dist/esm/ControlServer.js +145 -0
  228. package/dist/esm/ControlServer.js.map +1 -0
  229. package/dist/esm/Credential.d.ts +136 -0
  230. package/dist/esm/Credential.d.ts.map +1 -0
  231. package/dist/esm/Credential.js +190 -0
  232. package/dist/esm/Credential.js.map +1 -0
  233. package/dist/esm/CredentialCipher.d.ts +90 -0
  234. package/dist/esm/CredentialCipher.d.ts.map +1 -0
  235. package/dist/esm/CredentialCipher.js +56 -0
  236. package/dist/esm/CredentialCipher.js.map +1 -0
  237. package/dist/esm/CredentialStore.d.ts +97 -0
  238. package/dist/esm/CredentialStore.d.ts.map +1 -0
  239. package/dist/esm/CredentialStore.js +101 -0
  240. package/dist/esm/CredentialStore.js.map +1 -0
  241. package/dist/esm/DispatchReader.d.ts +112 -0
  242. package/dist/esm/DispatchReader.d.ts.map +1 -0
  243. package/dist/esm/DispatchReader.js +76 -0
  244. package/dist/esm/DispatchReader.js.map +1 -0
  245. package/dist/esm/Health.d.ts +333 -0
  246. package/dist/esm/Health.d.ts.map +1 -0
  247. package/dist/esm/Health.js +400 -0
  248. package/dist/esm/Health.js.map +1 -0
  249. package/dist/esm/JevSessionChecker.d.ts +57 -0
  250. package/dist/esm/JevSessionChecker.d.ts.map +1 -0
  251. package/dist/esm/JevSessionChecker.js +108 -0
  252. package/dist/esm/JevSessionChecker.js.map +1 -0
  253. package/dist/esm/Lineage.d.ts +131 -0
  254. package/dist/esm/Lineage.d.ts.map +1 -0
  255. package/dist/esm/Lineage.js +174 -0
  256. package/dist/esm/Lineage.js.map +1 -0
  257. package/dist/esm/Migrations.d.ts +34 -0
  258. package/dist/esm/Migrations.d.ts.map +1 -0
  259. package/dist/esm/Migrations.js +53 -0
  260. package/dist/esm/Migrations.js.map +1 -0
  261. package/dist/esm/Monitor.d.ts +282 -0
  262. package/dist/esm/Monitor.d.ts.map +1 -0
  263. package/dist/esm/Monitor.js +415 -0
  264. package/dist/esm/Monitor.js.map +1 -0
  265. package/dist/esm/ScopedToken.d.ts +193 -0
  266. package/dist/esm/ScopedToken.d.ts.map +1 -0
  267. package/dist/esm/ScopedToken.js +224 -0
  268. package/dist/esm/ScopedToken.js.map +1 -0
  269. package/dist/esm/SqlControlRuntime.d.ts +161 -0
  270. package/dist/esm/SqlControlRuntime.d.ts.map +1 -0
  271. package/dist/esm/SqlControlRuntime.js +1756 -0
  272. package/dist/esm/SqlControlRuntime.js.map +1 -0
  273. package/dist/esm/SqlCredentialStore.d.ts +43 -0
  274. package/dist/esm/SqlCredentialStore.d.ts.map +1 -0
  275. package/dist/esm/SqlCredentialStore.js +97 -0
  276. package/dist/esm/SqlCredentialStore.js.map +1 -0
  277. package/dist/esm/Steering.d.ts +69 -0
  278. package/dist/esm/Steering.d.ts.map +1 -0
  279. package/dist/esm/Steering.js +89 -0
  280. package/dist/esm/Steering.js.map +1 -0
  281. package/dist/esm/SystemFlows.d.ts +223 -0
  282. package/dist/esm/SystemFlows.d.ts.map +1 -0
  283. package/dist/esm/SystemFlows.js +198 -0
  284. package/dist/esm/SystemFlows.js.map +1 -0
  285. package/dist/esm/WebCryptoCipher.d.ts +49 -0
  286. package/dist/esm/WebCryptoCipher.d.ts.map +1 -0
  287. package/dist/esm/WebCryptoCipher.js +123 -0
  288. package/dist/esm/WebCryptoCipher.js.map +1 -0
  289. package/dist/esm/WebhookChannel.d.ts +113 -0
  290. package/dist/esm/WebhookChannel.d.ts.map +1 -0
  291. package/dist/esm/WebhookChannel.js +109 -0
  292. package/dist/esm/WebhookChannel.js.map +1 -0
  293. package/dist/esm/index.d.ts +160 -0
  294. package/dist/esm/index.d.ts.map +1 -0
  295. package/dist/esm/index.js +160 -0
  296. package/dist/esm/index.js.map +1 -0
  297. package/dist/esm/internal/MutationBoundary.d.ts +27 -0
  298. package/dist/esm/internal/MutationBoundary.d.ts.map +1 -0
  299. package/dist/esm/internal/MutationBoundary.js +40 -0
  300. package/dist/esm/internal/MutationBoundary.js.map +1 -0
  301. package/dist/esm/internal/activeFibers.d.ts +12 -0
  302. package/dist/esm/internal/activeFibers.d.ts.map +1 -0
  303. package/dist/esm/internal/activeFibers.js +17 -0
  304. package/dist/esm/internal/activeFibers.js.map +1 -0
  305. package/dist/esm/internal/issues.d.ts +28 -0
  306. package/dist/esm/internal/issues.d.ts.map +1 -0
  307. package/dist/esm/internal/issues.js +35 -0
  308. package/dist/esm/internal/issues.js.map +1 -0
  309. package/dist/esm/internal/planning.d.ts +347 -0
  310. package/dist/esm/internal/planning.d.ts.map +1 -0
  311. package/dist/esm/internal/planning.js +199 -0
  312. package/dist/esm/internal/planning.js.map +1 -0
  313. package/dist/esm/internal/sqlSchemaErrors.d.ts +18 -0
  314. package/dist/esm/internal/sqlSchemaErrors.d.ts.map +1 -0
  315. package/dist/esm/internal/sqlSchemaErrors.js +38 -0
  316. package/dist/esm/internal/sqlSchemaErrors.js.map +1 -0
  317. package/dist/esm/migrations/0001_control_tables.d.ts +18 -0
  318. package/dist/esm/migrations/0001_control_tables.d.ts.map +1 -0
  319. package/dist/esm/migrations/0001_control_tables.js +96 -0
  320. package/dist/esm/migrations/0001_control_tables.js.map +1 -0
  321. package/dist/esm/migrations/0002_run_keys.d.ts +15 -0
  322. package/dist/esm/migrations/0002_run_keys.d.ts.map +1 -0
  323. package/dist/esm/migrations/0002_run_keys.js +22 -0
  324. package/dist/esm/migrations/0002_run_keys.js.map +1 -0
  325. package/dist/esm/migrations/0003_signal_commands.d.ts +13 -0
  326. package/dist/esm/migrations/0003_signal_commands.d.ts.map +1 -0
  327. package/dist/esm/migrations/0003_signal_commands.js +26 -0
  328. package/dist/esm/migrations/0003_signal_commands.js.map +1 -0
  329. package/dist/esm/migrations/0004_approval_decisions.d.ts +13 -0
  330. package/dist/esm/migrations/0004_approval_decisions.d.ts.map +1 -0
  331. package/dist/esm/migrations/0004_approval_decisions.js +25 -0
  332. package/dist/esm/migrations/0004_approval_decisions.js.map +1 -0
  333. package/dist/esm/migrations/0005_signal_principals.d.ts +18 -0
  334. package/dist/esm/migrations/0005_signal_principals.d.ts.map +1 -0
  335. package/dist/esm/migrations/0005_signal_principals.js +27 -0
  336. package/dist/esm/migrations/0005_signal_principals.js.map +1 -0
  337. package/dist/esm/migrations/0006_run_principals.d.ts +18 -0
  338. package/dist/esm/migrations/0006_run_principals.d.ts.map +1 -0
  339. package/dist/esm/migrations/0006_run_principals.js +30 -0
  340. package/dist/esm/migrations/0006_run_principals.js.map +1 -0
  341. package/dist/esm/migrations/0007_resume_consent.d.ts +18 -0
  342. package/dist/esm/migrations/0007_resume_consent.d.ts.map +1 -0
  343. package/dist/esm/migrations/0007_resume_consent.js +27 -0
  344. package/dist/esm/migrations/0007_resume_consent.js.map +1 -0
  345. package/dist/esm/test/TestControl.d.ts +19 -0
  346. package/dist/esm/test/TestControl.d.ts.map +1 -0
  347. package/dist/esm/test/TestControl.js +30 -0
  348. package/dist/esm/test/TestControl.js.map +1 -0
  349. package/docs/README.md +189 -0
  350. package/docs/api.md +982 -0
  351. package/docs/concepts/authority.md +109 -0
  352. package/docs/concepts/cancellation.md +129 -0
  353. package/docs/concepts/lineage.md +132 -0
  354. package/docs/concepts/ownership.md +139 -0
  355. package/docs/concepts/projections.md +203 -0
  356. package/docs/concepts/receipts.md +128 -0
  357. package/docs/guides/approvals.md +284 -0
  358. package/docs/guides/cancel-and-resume.md +162 -0
  359. package/docs/guides/durable-storage.md +147 -0
  360. package/docs/guides/implement-an-executor.md +173 -0
  361. package/docs/guides/ingest-a-webhook.md +177 -0
  362. package/docs/guides/list-runs.md +160 -0
  363. package/docs/guides/monitor-runs.md +176 -0
  364. package/docs/guides/observe-health.md +147 -0
  365. package/docs/guides/postgres-tests.md +7 -0
  366. package/docs/guides/serve-over-rpc.md +220 -0
  367. package/docs/guides/signal-a-run.md +53 -0
  368. package/docs/guides/steer-a-run.md +138 -0
  369. package/docs/guides/store-credentials.md +164 -0
  370. package/docs/guides/testing.md +139 -0
  371. package/docs/guides/watch-a-run.md +154 -0
  372. package/docs/installation.md +106 -0
  373. package/docs/quickstart.md +163 -0
  374. package/docs/troubleshooting.md +208 -0
  375. package/package.json +405 -3
  376. package/src/ApprovalAuthority.ts +114 -0
  377. package/src/Cancellation.ts +172 -0
  378. package/src/Channels.ts +493 -0
  379. package/src/Control.ts +337 -0
  380. package/src/ControlClient.ts +319 -0
  381. package/src/ControlError.ts +378 -0
  382. package/src/ControlExecutor.ts +490 -0
  383. package/src/ControlFacts.ts +383 -0
  384. package/src/ControlLive.ts +2127 -0
  385. package/src/ControlRpcs.ts +443 -0
  386. package/src/ControlRuntime.ts +1601 -0
  387. package/src/ControlSchema.ts +1380 -0
  388. package/src/ControlServer.ts +182 -0
  389. package/src/Credential.ts +310 -0
  390. package/src/CredentialCipher.ts +110 -0
  391. package/src/CredentialStore.ts +152 -0
  392. package/src/DispatchReader.ts +122 -0
  393. package/src/Health.ts +591 -0
  394. package/src/JevSessionChecker.ts +127 -0
  395. package/src/Lineage.ts +203 -0
  396. package/src/Migrations.ts +56 -0
  397. package/src/Monitor.ts +600 -0
  398. package/src/ScopedToken.ts +306 -0
  399. package/src/SqlControlRuntime.ts +2478 -0
  400. package/src/SqlCredentialStore.ts +148 -0
  401. package/src/Steering.ts +96 -0
  402. package/src/SystemFlows.ts +225 -0
  403. package/src/WebCryptoCipher.ts +169 -0
  404. package/src/WebhookChannel.ts +166 -0
  405. package/src/index.ts +188 -0
  406. package/src/internal/MutationBoundary.ts +46 -0
  407. package/src/internal/activeFibers.ts +22 -0
  408. package/src/internal/issues.ts +40 -0
  409. package/src/internal/planning.ts +262 -0
  410. package/src/internal/sqlSchemaErrors.ts +37 -0
  411. package/src/migrations/0001_control_tables.ts +99 -0
  412. package/src/migrations/0002_run_keys.ts +23 -0
  413. package/src/migrations/0003_signal_commands.ts +27 -0
  414. package/src/migrations/0004_approval_decisions.ts +25 -0
  415. package/src/migrations/0005_signal_principals.ts +27 -0
  416. package/src/migrations/0006_run_principals.ts +31 -0
  417. package/src/migrations/0007_resume_consent.ts +28 -0
  418. package/src/test/TestControl.ts +47 -0
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key2 of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key2) && key2 !== except)
16
+ __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var ControlFacts_exports = {};
30
+ __export(ControlFacts_exports, {
31
+ ApprovalDecisionFact: () => ApprovalDecisionFact,
32
+ ApprovalRequestFact: () => ApprovalRequestFact,
33
+ GuardIncident: () => GuardIncident,
34
+ LifecycleProvenance: () => LifecycleProvenance,
35
+ RunFact: () => RunFact,
36
+ approvalDecisionFact: () => approvalDecisionFact,
37
+ commitApprovalRequest: () => commitApprovalRequest,
38
+ commitRun: () => commitRun,
39
+ fold: () => fold,
40
+ runFact: () => runFact,
41
+ version: () => version
42
+ });
43
+ module.exports = __toCommonJS(ControlFacts_exports);
44
+ var import_journal = require("@smthrs/journal");
45
+ var import_effect = require("effect");
46
+ var ControlSchema = __toESM(require("./ControlSchema.js"), 1);
47
+ const version = 1;
48
+ const RunFact = import_effect.Schema.Struct({
49
+ factVersion: import_effect.Schema.Literal(version),
50
+ baseline: import_effect.Schema.Literals(["created", "legacy"]),
51
+ run: ControlSchema.RunSummary
52
+ });
53
+ const runFact = (run, baseline = "legacy") => {
54
+ if (run.executionObservation !== void 0 || run.executionView !== void 0) {
55
+ throw new Error("A control fact cannot persist an executor observation");
56
+ }
57
+ return import_effect.Schema.decodeUnknownSync(RunFact)({ factVersion: version, baseline, run: structuredClone(run) });
58
+ };
59
+ const GuardIncident = import_effect.Schema.Struct({
60
+ classification: import_effect.Schema.Literals(["Runaway", "Stuck"]),
61
+ source: import_effect.Schema.Literals(["tokens", "usd", "latency", "model-call", "tool-call", "cell"]),
62
+ message: import_effect.Schema.String,
63
+ used: import_effect.Schema.optional(import_effect.Schema.Number),
64
+ reserved: import_effect.Schema.optional(import_effect.Schema.Number),
65
+ max: import_effect.Schema.optional(import_effect.Schema.Number),
66
+ next: import_effect.Schema.optional(import_effect.Schema.Number),
67
+ allowance: import_effect.Schema.optional(import_effect.Schema.Number),
68
+ subject: import_effect.Schema.optional(import_effect.Schema.String)
69
+ });
70
+ const ApprovalRequestFact = import_effect.Schema.Struct({
71
+ factVersion: import_effect.Schema.Literal(version),
72
+ runId: import_effect.Schema.String,
73
+ requestId: import_effect.Schema.String,
74
+ question: import_effect.Schema.String,
75
+ payload: ControlSchema.ApprovalPayload,
76
+ incident: import_effect.Schema.optional(GuardIncident)
77
+ });
78
+ const ApprovalDecisionFact = import_effect.Schema.Struct({
79
+ factVersion: import_effect.Schema.Literal(version),
80
+ tokenId: import_effect.Schema.String,
81
+ approvalTarget: ControlSchema.ApprovalTarget
82
+ });
83
+ const approvalDecisionFact = (tokenId, approvalTarget) => import_effect.Schema.decodeUnknownSync(ApprovalDecisionFact)({
84
+ factVersion: version,
85
+ tokenId,
86
+ approvalTarget: structuredClone(approvalTarget)
87
+ });
88
+ const commitRun = (journal, change, sourceId, eventType, detail = {}, baseline = "legacy") => journal.transact(import_effect.Effect.gen(function* () {
89
+ const run = yield* change;
90
+ yield* journal.emitDurableUnfenced(
91
+ new import_journal.JournalEvent.Input({
92
+ runId: import_journal.JournalEvent.RunId.make(run.runId),
93
+ sourceId: import_journal.JournalEvent.SourceId.make(sourceId),
94
+ eventType,
95
+ payload: JSON.parse(
96
+ JSON.stringify({ ...detail, runId: run.runId, status: run.status, ...runFact(run, baseline) })
97
+ )
98
+ })
99
+ );
100
+ return run;
101
+ }));
102
+ const commitApprovalRequest = (journal, runtime, input, sourceId) => import_effect.Effect.suspend(() => {
103
+ const fact = import_effect.Schema.decodeUnknownSync(ApprovalRequestFact)({ ...structuredClone(input), factVersion: version });
104
+ const target = fact.payload.target;
105
+ if (target._tag !== "Node" || target.runId !== fact.runId || target.requestId !== fact.requestId) {
106
+ return import_effect.Effect.fail(
107
+ new import_journal.Journal.JournalError({
108
+ code: "invalid_event",
109
+ message: "Approval request identity does not match its target"
110
+ })
111
+ );
112
+ }
113
+ return journal.transact(import_effect.Effect.gen(function* () {
114
+ const token = yield* runtime.registerApproval(target);
115
+ if (token._tag === "Pending") {
116
+ yield* journal.emitDurableUnfenced(
117
+ new import_journal.JournalEvent.Input({
118
+ runId: import_journal.JournalEvent.RunId.make(fact.runId),
119
+ sourceId: import_journal.JournalEvent.SourceId.make(sourceId),
120
+ eventType: "control.approval.requested",
121
+ payload: JSON.parse(JSON.stringify(fact))
122
+ })
123
+ );
124
+ }
125
+ return token;
126
+ }));
127
+ });
128
+ const LifecycleProvenance = import_effect.Schema.Struct({
129
+ control: import_effect.Schema.Literals(["events", "legacy-snapshot", "unverified-snapshot"]),
130
+ execution: import_effect.Schema.Literals(["control", "engine-observed", "engine-missing"]),
131
+ baseline: import_effect.Schema.optional(import_effect.Schema.Literals(["created", "legacy"])),
132
+ fromSequence: import_effect.Schema.optional(import_effect.Schema.Number),
133
+ throughSequence: import_effect.Schema.optional(import_effect.Schema.Number)
134
+ });
135
+ const record = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
136
+ const string = (value) => typeof value === "string" ? value : void 0;
137
+ const key = (runId, requestId) => JSON.stringify([runId, requestId]);
138
+ const lifecycleKinds = /* @__PURE__ */ new Set([
139
+ "control.run.accepted",
140
+ "control.run.running",
141
+ "control.run.pending",
142
+ "control.run.parked",
143
+ "control.run.waiting-approval",
144
+ "control.run.completed",
145
+ "control.run.failed",
146
+ "control.run.cancelled",
147
+ "control.run.resume",
148
+ "control.run.claimed",
149
+ "control.steer.woke"
150
+ ]);
151
+ const consistentStatus = (kind, run) => {
152
+ if (kind === "control.run.pending") return run.status === "accepted";
153
+ if (kind === "control.run.resume" || kind === "control.run.claimed" || kind === "control.steer.woke") return true;
154
+ return kind === `control.run.${run.status}`;
155
+ };
156
+ const coordinationFields = [
157
+ "runId",
158
+ "flowId",
159
+ "createdAt",
160
+ "updatedAt",
161
+ "planId",
162
+ "planDigest",
163
+ "ownerId",
164
+ "parkedBy"
165
+ ];
166
+ const fold = (events, snapshot, observedApprovals = []) => {
167
+ let latest;
168
+ let first;
169
+ let uncovered = false;
170
+ const requests = /* @__PURE__ */ new Map();
171
+ for (const row of observedApprovals) {
172
+ if (snapshot !== void 0 && row.runId !== snapshot.runId) continue;
173
+ const target = row.payload.target;
174
+ if (target._tag !== "Node" || target.runId !== row.runId || target.requestId !== row.requestId) continue;
175
+ requests.set(key(row.runId, row.requestId), { row: { ...row, status: "pending" }, versioned: true });
176
+ }
177
+ const decisions = /* @__PURE__ */ new Map();
178
+ for (const event of events) {
179
+ if (snapshot !== void 0 && event.runId !== snapshot.runId) continue;
180
+ const payload = record(event.payload);
181
+ if (lifecycleKinds.has(event.kind) || payload.factVersion !== void 0 && event.kind.startsWith("control.run.")) {
182
+ if (import_effect.Schema.is(RunFact)(payload) && payload.run.runId === event.runId && payload.run.executionObservation === void 0 && payload.run.executionView === void 0 && consistentStatus(event.kind, payload.run)) {
183
+ latest = { fact: payload, sequence: event.sequence };
184
+ first ??= { baseline: payload.baseline, sequence: event.sequence };
185
+ if (uncovered) first = { baseline: "legacy", sequence: event.sequence };
186
+ uncovered = false;
187
+ } else if (payload.factVersion !== void 0 || latest !== void 0) uncovered = true;
188
+ }
189
+ if (event.kind === "control.approval.requested") {
190
+ const versioned = payload.factVersion !== void 0;
191
+ if (versioned && !import_effect.Schema.is(ApprovalRequestFact)(payload)) continue;
192
+ const runId = string(payload.runId) ?? event.runId;
193
+ const requestId = string(payload.requestId);
194
+ if (runId === void 0 || requestId === void 0 || event.runId !== runId || payload.payload === void 0) continue;
195
+ const submitted = payload.payload;
196
+ if (versioned && (submitted.target._tag !== "Node" || submitted.target.runId !== runId || submitted.target.requestId !== requestId)) continue;
197
+ const identity = key(runId, requestId);
198
+ if (requests.has(identity)) continue;
199
+ const decision = decisions.get(identity);
200
+ requests.set(identity, {
201
+ versioned,
202
+ row: {
203
+ runId,
204
+ requestId,
205
+ title: string(payload.question) ?? `Approval needed \u2014 ${requestId}`,
206
+ request: event.payload,
207
+ payload: submitted,
208
+ requestedAt: typeof payload.at === "number" && Number.isFinite(payload.at) ? payload.at : event.occurredAt,
209
+ status: decision !== void 0 && (decision.digest === void 0 || decision.digest === record(record(submitted).target).digest) ? decision.status : "pending"
210
+ }
211
+ });
212
+ }
213
+ if (event.kind === "control.approval.approved" || event.kind === "control.approval.denied") {
214
+ const status = event.kind === "control.approval.approved" ? "approved" : "denied";
215
+ let identity;
216
+ let digest;
217
+ if (payload.factVersion !== void 0) {
218
+ if (!import_effect.Schema.is(ApprovalDecisionFact)(payload) || payload.approvalTarget._tag !== "Node" || payload.approvalTarget.runId !== event.runId || payload.tokenId !== payload.approvalTarget.requestId) continue;
219
+ identity = key(payload.approvalTarget.runId, payload.approvalTarget.requestId);
220
+ digest = payload.approvalTarget.digest;
221
+ } else {
222
+ const tokenId = string(payload.tokenId) ?? string(payload.requestId);
223
+ if (tokenId !== void 0 && event.runId !== void 0) identity = key(event.runId, tokenId);
224
+ else {
225
+ identity = [...requests].find(
226
+ ([, request2]) => !request2.versioned && request2.row.status === "pending" && request2.row.runId === event.runId
227
+ )?.[0];
228
+ }
229
+ }
230
+ if (identity === void 0 || decisions.has(identity)) continue;
231
+ const request = requests.get(identity);
232
+ if (request !== void 0 && digest !== void 0 && record(record(request.row.payload).target).digest !== digest) continue;
233
+ decisions.set(identity, { status, ...digest === void 0 ? {} : { digest } });
234
+ if (request !== void 0) requests.set(identity, { ...request, row: { ...request.row, status } });
235
+ }
236
+ }
237
+ const matches = !uncovered && latest !== void 0 && (snapshot === void 0 || coordinationFields.every((field) => latest.fact.run[field] === snapshot[field]) && (snapshot.executionObservation === "observed" || latest.fact.run.status === snapshot.status));
238
+ const run = snapshot === void 0 ? uncovered ? void 0 : latest?.fact.run : matches ? {
239
+ ...snapshot,
240
+ ...latest.fact.run,
241
+ ...snapshot.executionObservation === "observed" ? {
242
+ status: snapshot.status,
243
+ waitingReason: snapshot.waitingReason,
244
+ parentRunId: snapshot.parentRunId,
245
+ lineageId: snapshot.lineageId,
246
+ roundOrdinal: snapshot.roundOrdinal,
247
+ pendingWaits: snapshot.pendingWaits
248
+ } : {}
249
+ } : snapshot;
250
+ return {
251
+ run,
252
+ provenance: {
253
+ control: uncovered ? "unverified-snapshot" : latest === void 0 ? "legacy-snapshot" : matches ? "events" : "unverified-snapshot",
254
+ execution: snapshot?.executionObservation === "observed" ? "engine-observed" : snapshot?.executionObservation === "missing" ? "engine-missing" : "control",
255
+ ...first === void 0 ? {} : { baseline: first.baseline, fromSequence: first.sequence },
256
+ ...latest === void 0 ? {} : { throughSequence: latest.sequence }
257
+ },
258
+ approvals: [...requests.values()].map(({ row }) => row)
259
+ };
260
+ };
261
+ //# sourceMappingURL=ControlFacts.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ControlFacts.ts"],
4
+ "sourcesContent": ["/**\n * Versioned control lifecycle facts and their shared read projection.\n * @since 1.0.0\n */\n\nimport { Journal, JournalEvent } from \"@smthrs/journal\"\nimport { Effect, Schema } from \"effect\"\nimport type * as ControlRuntime from \"./ControlRuntime.ts\"\nimport * as ControlSchema from \"./ControlSchema.ts\"\n\n/** This is the control producer contract, independent of the harness journal format.\n * @category facts\n * @since 1.0.0\n */\nexport const version = 1\n\n/** A committed control snapshot. A baseline claims no history before its sequence.\n * @category facts\n * @since 1.0.0\n */\nexport const RunFact = Schema.Struct({\n factVersion: Schema.Literal(version),\n baseline: Schema.Literals([\"created\", \"legacy\"]),\n run: ControlSchema.RunSummary\n})\n\n/** Capture the exact result of a fenced write, inside its journal transaction.\n * @category facts\n * @since 1.0.0\n */\nexport const runFact = (\n run: ControlSchema.RunSummary,\n baseline: \"created\" | \"legacy\" = \"legacy\"\n): typeof RunFact.Type => {\n if (run.executionObservation !== undefined || run.executionView !== undefined) {\n throw new Error(\"A control fact cannot persist an executor observation\")\n }\n return Schema.decodeUnknownSync(RunFact)({ factVersion: version, baseline, run: structuredClone(run) })\n}\n\n/** The exact facts of the guard that parked a run, frozen when it tripped.\n *\n * `Runaway` is a run spending past an approved ceiling (`tokens`, `usd`,\n * `latency`). `Stuck` is one operation that ran past its time limit\n * (`model-call`, `tool-call`, `cell`). Every number is in the source's unit,\n * tokens, dollars, or milliseconds: `used`, `reserved`, `max`, and `next` are\n * a budget's spend, held forecast, ceiling, and refused call; `max` is a\n * timeout's limit.\n * `allowance` is what Continue authorizes: the raised ceiling for a budget,\n * one more run of `max` for a timeout. `subject` names the operation a\n * timeout interrupted.\n * @category facts\n * @since 1.0.0\n */\nexport const GuardIncident = Schema.Struct({\n classification: Schema.Literals([\"Runaway\", \"Stuck\"]),\n source: Schema.Literals([\"tokens\", \"usd\", \"latency\", \"model-call\", \"tool-call\", \"cell\"]),\n message: Schema.String,\n used: Schema.optional(Schema.Number),\n reserved: Schema.optional(Schema.Number),\n max: Schema.optional(Schema.Number),\n next: Schema.optional(Schema.Number),\n allowance: Schema.optional(Schema.Number),\n subject: Schema.optional(Schema.String)\n})\n\n/** The identity-bearing request admitted with its approval token.\n *\n * `incident` is present on a request a guard made, so a restarted host reads\n * the facts the park was made on rather than measuring them again.\n * @category facts\n * @since 1.0.0\n */\nexport const ApprovalRequestFact = Schema.Struct({\n factVersion: Schema.Literal(version),\n runId: Schema.String,\n requestId: Schema.String,\n question: Schema.String,\n payload: ControlSchema.ApprovalPayload,\n incident: Schema.optional(GuardIncident)\n})\n\n/** The exact target a committed decision resolves; old target-tag fields remain readable.\n * @category facts\n * @since 1.0.0\n */\nexport const ApprovalDecisionFact = Schema.Struct({\n factVersion: Schema.Literal(version),\n tokenId: Schema.String,\n approvalTarget: ControlSchema.ApprovalTarget\n})\n\n/** Capture and validate the target the decision writer has actually resolved.\n * @category facts\n * @since 1.0.0\n */\nexport const approvalDecisionFact = (\n tokenId: string,\n approvalTarget: ControlSchema.ApprovalTarget\n): typeof ApprovalDecisionFact.Type =>\n Schema.decodeUnknownSync(ApprovalDecisionFact)({\n factVersion: version,\n tokenId,\n approvalTarget: structuredClone(approvalTarget)\n })\n\n/** Commit a fenced control write and the exact resulting lifecycle fact together.\n * @category facts\n * @since 1.0.0\n */\nexport const commitRun = <E, R>(\n journal: Journal.Service,\n change: Effect.Effect<ControlSchema.RunSummary, E, R>,\n sourceId: string,\n eventType: string,\n detail: Readonly<Record<string, unknown>> = {},\n baseline: \"created\" | \"legacy\" = \"legacy\"\n) =>\n journal.transact(Effect.gen(function*() {\n const run = yield* change\n yield* journal.emitDurableUnfenced(\n new JournalEvent.Input({\n runId: JournalEvent.RunId.make(run.runId),\n sourceId: JournalEvent.SourceId.make(sourceId),\n eventType,\n payload: JSON.parse(\n JSON.stringify({ ...detail, runId: run.runId, status: run.status, ...runFact(run, baseline) })\n )\n })\n )\n return run\n }))\n\n/** The token and submit-ready request have one durable admission boundary.\n * @category facts\n * @since 1.0.0\n */\nexport const commitApprovalRequest = (\n journal: Journal.Service,\n runtime: Pick<ControlRuntime.Service, \"registerApproval\">,\n input: Omit<typeof ApprovalRequestFact.Type, \"factVersion\">,\n sourceId: string\n) =>\n Effect.suspend(() => {\n const fact = Schema.decodeUnknownSync(ApprovalRequestFact)({ ...structuredClone(input), factVersion: version })\n const target = fact.payload.target\n if (target._tag !== \"Node\" || target.runId !== fact.runId || target.requestId !== fact.requestId) {\n return Effect.fail(\n new Journal.JournalError({\n code: \"invalid_event\",\n message: \"Approval request identity does not match its target\"\n })\n )\n }\n return journal.transact(Effect.gen(function*() {\n const token = yield* runtime.registerApproval(target)\n if (token._tag === \"Pending\") {\n yield* journal.emitDurableUnfenced(\n new JournalEvent.Input({\n runId: JournalEvent.RunId.make(fact.runId),\n sourceId: JournalEvent.SourceId.make(sourceId),\n eventType: \"control.approval.requested\",\n payload: JSON.parse(JSON.stringify(fact))\n })\n )\n }\n return token\n }))\n })\n\n/** Honest coverage of the displayed lifecycle; engine rows are a separate authority.\n * @category facts\n * @since 1.0.0\n */\nexport const LifecycleProvenance = Schema.Struct({\n control: Schema.Literals([\"events\", \"legacy-snapshot\", \"unverified-snapshot\"]),\n execution: Schema.Literals([\"control\", \"engine-observed\", \"engine-missing\"]),\n baseline: Schema.optional(Schema.Literals([\"created\", \"legacy\"])),\n fromSequence: Schema.optional(Schema.Number),\n throughSequence: Schema.optional(Schema.Number)\n})\n\n/** Submit-ready approval state derived solely from admitted facts.\n * @category facts\n * @since 1.0.0\n */\nexport interface Approval {\n readonly runId: string\n readonly waitRunId?: string | undefined\n readonly questionProvenance?: \"events\" | \"legacy-observation\" | \"unverified-observation\" | undefined\n readonly requestId: string\n readonly title: string\n readonly request: ControlSchema.ControlEvent[\"payload\"]\n readonly payload: ControlSchema.ApprovalPayload\n readonly requestedAt: number\n readonly status: \"pending\" | \"approved\" | \"denied\"\n}\n\nconst record = (value: unknown): Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value) ? value as Record<string, unknown> : {}\nconst string = (value: unknown): string | undefined => typeof value === \"string\" ? value : undefined\nconst key = (runId: string, requestId: string): string => JSON.stringify([runId, requestId])\nconst lifecycleKinds = new Set([\n \"control.run.accepted\",\n \"control.run.running\",\n \"control.run.pending\",\n \"control.run.parked\",\n \"control.run.waiting-approval\",\n \"control.run.completed\",\n \"control.run.failed\",\n \"control.run.cancelled\",\n \"control.run.resume\",\n \"control.run.claimed\",\n \"control.steer.woke\"\n])\nconst consistentStatus = (kind: string, run: ControlSchema.RunSummary): boolean => {\n if (kind === \"control.run.pending\") return run.status === \"accepted\"\n if (kind === \"control.run.resume\" || kind === \"control.run.claimed\" || kind === \"control.steer.woke\") return true\n return kind === `control.run.${run.status}`\n}\nconst coordinationFields = [\n \"runId\",\n \"flowId\",\n \"createdAt\",\n \"updatedAt\",\n \"planId\",\n \"planDigest\",\n \"ownerId\",\n \"parkedBy\"\n] as const\n\n/**\n * One fold for gateway snapshots and subscriptions. Current writers are strict;\n * legacy unnamed decisions may close only a legacy request in the same run.\n * Observed human waits may seed the approval projection without claiming a\n * journaled request. They still require an exact named decision, and share the\n * same digest binding as admitted requests.\n * Duplicate requests never reopen decisions, and a new-style unknown identity\n * never consumes another gate. Snapshot fallback is explicitly unverified.\n * @category facts\n * @since 1.0.0\n */\nexport const fold = (\n events: ReadonlyArray<ControlSchema.ControlEvent>,\n snapshot?: ControlSchema.RunSummary,\n observedApprovals: ReadonlyArray<Approval> = []\n): {\n readonly run: ControlSchema.RunSummary | undefined\n readonly provenance: typeof LifecycleProvenance.Type\n readonly approvals: ReadonlyArray<Approval>\n} => {\n let latest: { readonly fact: typeof RunFact.Type; readonly sequence: number } | undefined\n let first: { readonly baseline: \"created\" | \"legacy\"; readonly sequence: number } | undefined\n let uncovered = false\n const requests = new Map<string, { readonly row: Approval; readonly versioned: boolean }>()\n for (const row of observedApprovals) {\n if (snapshot !== undefined && row.runId !== snapshot.runId) continue\n const target = row.payload.target\n if (target._tag !== \"Node\" || target.runId !== row.runId || target.requestId !== row.requestId) continue\n requests.set(key(row.runId, row.requestId), { row: { ...row, status: \"pending\" }, versioned: true })\n }\n const decisions = new Map<string, { readonly status: \"approved\" | \"denied\"; readonly digest?: string }>()\n for (const event of events) {\n if (snapshot !== undefined && event.runId !== snapshot.runId) continue\n const payload = record(event.payload)\n if (lifecycleKinds.has(event.kind) || payload.factVersion !== undefined && event.kind.startsWith(\"control.run.\")) {\n if (\n Schema.is(RunFact)(payload) && payload.run.runId === event.runId &&\n payload.run.executionObservation === undefined && payload.run.executionView === undefined &&\n consistentStatus(event.kind, payload.run)\n ) {\n latest = { fact: payload, sequence: event.sequence }\n first ??= { baseline: payload.baseline, sequence: event.sequence }\n // This full snapshot establishes a new baseline after a gap; the\n // earlier prefix can no longer be claimed as continuously covered.\n if (uncovered) first = { baseline: \"legacy\", sequence: event.sequence }\n uncovered = false\n } else if (payload.factVersion !== undefined || latest !== undefined) uncovered = true\n }\n if (event.kind === \"control.approval.requested\") {\n const versioned = payload.factVersion !== undefined\n if (versioned && !Schema.is(ApprovalRequestFact)(payload)) continue\n const runId = string(payload.runId) ?? event.runId\n const requestId = string(payload.requestId)\n if (\n runId === undefined || requestId === undefined || event.runId !== runId ||\n payload.payload === undefined\n ) continue\n // Historical payloads were open JSON. Preserve their read-only display;\n // only the versioned contract can establish exact target correspondence.\n const submitted = payload.payload as ControlSchema.ApprovalPayload\n if (\n versioned &&\n (submitted.target._tag !== \"Node\" || submitted.target.runId !== runId ||\n submitted.target.requestId !== requestId)\n ) continue\n const identity = key(runId, requestId)\n if (requests.has(identity)) continue\n const decision = decisions.get(identity)\n requests.set(identity, {\n versioned,\n row: {\n runId,\n requestId,\n title: string(payload.question) ?? `Approval needed \u2014 ${requestId}`,\n request: event.payload,\n payload: submitted,\n requestedAt: typeof payload.at === \"number\" && Number.isFinite(payload.at) ? payload.at : event.occurredAt,\n status: decision !== undefined &&\n (decision.digest === undefined || decision.digest === record(record(submitted).target).digest)\n ? decision.status :\n \"pending\"\n }\n })\n }\n if (event.kind === \"control.approval.approved\" || event.kind === \"control.approval.denied\") {\n const status = event.kind === \"control.approval.approved\" ? \"approved\" : \"denied\"\n let identity: string | undefined\n let digest: string | undefined\n if (payload.factVersion !== undefined) {\n if (\n !Schema.is(ApprovalDecisionFact)(payload) || payload.approvalTarget._tag !== \"Node\" ||\n payload.approvalTarget.runId !== event.runId || payload.tokenId !== payload.approvalTarget.requestId\n ) continue\n identity = key(payload.approvalTarget.runId, payload.approvalTarget.requestId)\n digest = payload.approvalTarget.digest\n } else {\n const tokenId = string(payload.tokenId) ?? string(payload.requestId)\n if (tokenId !== undefined && event.runId !== undefined) identity = key(event.runId, tokenId)\n else {identity = [...requests].find(([, request]) =>\n !request.versioned && request.row.status === \"pending\" &&\n request.row.runId === event.runId\n )?.[0]}\n }\n if (identity === undefined || decisions.has(identity)) continue\n const request = requests.get(identity)\n if (\n request !== undefined && digest !== undefined && record(record(request.row.payload).target).digest !== digest\n ) continue\n decisions.set(identity, { status, ...(digest === undefined ? {} : { digest }) })\n if (request !== undefined) requests.set(identity, { ...request, row: { ...request.row, status } })\n }\n }\n const matches = !uncovered && latest !== undefined && (snapshot === undefined ||\n coordinationFields.every((field) => latest.fact.run[field] === snapshot[field]) &&\n (snapshot.executionObservation === \"observed\" || latest.fact.run.status === snapshot.status))\n const run = snapshot === undefined ? uncovered ? undefined : latest?.fact.run : matches\n ? {\n ...snapshot,\n ...latest!.fact.run,\n ...(snapshot.executionObservation === \"observed\" ?\n {\n status: snapshot.status,\n waitingReason: snapshot.waitingReason,\n parentRunId: snapshot.parentRunId,\n lineageId: snapshot.lineageId,\n roundOrdinal: snapshot.roundOrdinal,\n pendingWaits: snapshot.pendingWaits\n } :\n {})\n }\n : snapshot\n return {\n run,\n provenance: {\n control: uncovered\n ? \"unverified-snapshot\"\n : latest === undefined\n ? \"legacy-snapshot\"\n : matches\n ? \"events\"\n : \"unverified-snapshot\",\n execution: snapshot?.executionObservation === \"observed\" ?\n \"engine-observed\"\n : snapshot?.executionObservation === \"missing\"\n ? \"engine-missing\"\n : \"control\",\n ...(first === undefined ? {} : { baseline: first.baseline, fromSequence: first.sequence }),\n ...(latest === undefined ? {} : { throughSequence: latest.sequence })\n },\n approvals: [...requests.values()].map(({ row }) => row)\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["request"]
7
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * In-process Control implementation over `ControlRuntime`, the flow
3
+ * registry, and the append-only journal.
4
+ *
5
+ * @since 0.1.0
6
+ */
7
+ import { Journal } from "@smthrs/journal";
8
+ import { NotificationQueue } from "@smthrs/notifications";
9
+ import { Registry } from "@smthrs/registry";
10
+ import { Layer } from "effect";
11
+ import { Control } from "./Control.ts";
12
+ import { ControlRuntime } from "./ControlRuntime.ts";
13
+ /**
14
+ * Live in-process Control layer.
15
+ *
16
+ * Writes delegate to `ControlRuntime`; journal events are observational
17
+ * records. `watch` only replays and follows committed journal entries.
18
+ *
19
+ * @category layers
20
+ * @since 0.1.0
21
+ */
22
+ export declare const layer: Layer.Layer<Control, never, ControlRuntime | Journal.Journal | NotificationQueue.NotificationQueue | Registry.Registry>;
23
+ //# sourceMappingURL=ControlLive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControlLive.d.ts","sourceRoot":"","sources":["../../src/ControlLive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,OAAO,EAAgB,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAiC,KAAK,EAAqC,MAAM,QAAQ,CAAA;AAEhG,OAAO,EAEL,OAAO,EAOR,MAAM,cAAc,CAAA;AAoBrB,OAAO,EAAE,cAAc,EAAoE,MAAM,qBAAqB,CAAA;AA6RtH;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAC7B,OAAO,EACP,KAAK,EACL,cAAc,GAAG,OAAO,CAAC,OAAO,GAAG,iBAAiB,CAAC,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAwvD3F,CAAA"}