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

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 +1280 -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 +740 -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 +1521 -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 +1585 -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 +807 -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 +5 -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 +2113 -0
  385. package/src/ControlRpcs.ts +443 -0
  386. package/src/ControlRuntime.ts +1597 -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 +2476 -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 @@
1
+ {"version":3,"file":"JevSessionChecker.js","sourceRoot":"","sources":["../../src/JevSessionChecker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Session activity judged by the host's existing evaluator.\n * @since 1.0.0\n */\n\nimport * as Fault from \"@smthrs/flow/Fault\"\nimport type * as Evaluator from \"@smthrs/model/Evaluator\"\nimport { Effect, Schema } from \"effect\"\nimport type { HealthChecker, ProbeReport } from \"./Health.ts\"\n\n/** The configured judge could not produce a usable observation.\n * @category errors\n * @since 1.0.0\n */\nexport class JevProbeError extends Schema.TaggedError<JevProbeError>()(\"JevProbeError\", {\n reason: Schema.Literals([\"unconfigured\", \"http\", \"timeout\", \"unreachable\", \"malformed\"]),\n status: Schema.optional(Schema.Number)\n}) {}\nFault.register(\n \"JevProbeError\",\n {\n unconfigured: \"policy\",\n http: \"dependency\",\n timeout: \"dependency\",\n unreachable: \"dependency\",\n malformed: \"dependency\"\n } satisfies Fault.Rows<JevProbeError[\"reason\"]>,\n \"reason\"\n)\n/** Maximum terminal evidence retained for one judgment.\n * @category constants\n * @since 1.0.0\n */\nexport const jevStateTailCharacters = 4 * 1024\n/** Subscription judgments have a bounded deadline.\n * @category constants\n * @since 1.0.0\n */\nexport const jevRequestTimeoutMs = 45_000\n/** Probe budget, longer than the request deadline.\n * @category constants\n * @since 1.0.0\n */\nexport const jevProbeTimeoutMs = 50_000\n/** Minimum confidence for an activity report.\n * @category constants\n * @since 1.0.0\n */\nexport const jevConfidenceFloor = 0.7\n/** The host evaluator and its bounded request deadline.\n * @category models\n * @since 1.0.0\n */\nexport interface JevSessionCheckerOptions {\n readonly evaluator?: Evaluator.Evaluator | undefined\n readonly timeoutMs?: number | undefined\n}\nconst lifecycleReport: ProbeReport = { activity: \"unknown\", reason: \"ok\" }\nconst activityCriteria = {\n \"working\": \"the agent is executing tools, editing files, or producing work\",\n \"idle\": \"the agent finished and is producing nothing\",\n \"needs-input\": \"the agent asked the person a question, requested approval or a credential, and is waiting\"\n} as const\n\nconst questions = {\n activity: {\n type: \"choice\",\n instructions: \"Read the tail of this agent session's output. What is the agent doing right now?\",\n criteria: activityCriteria\n },\n question: {\n type: \"boolean\",\n instructions: \"Does the output end with the agent waiting for a person to answer?\"\n }\n} as const\n\n/** Uses the same judge as flow completion, with no independent auth path.\n * @category constructors\n * @since 1.0.0\n */\nexport const makeJevSessionChecker = (options: JevSessionCheckerOptions = {}): HealthChecker => ({\n id: \"jev.session\",\n defaults: { timeoutMs: jevProbeTimeoutMs, ttlMs: 60_000 },\n probe: (context) =>\n Effect.gen(function*() {\n const session = context.session\n const tail = session?.outputTail\n if (session === undefined || !session.alive || tail === undefined || tail === \"\") return lifecycleReport\n if (options.evaluator === undefined) return yield* Effect.fail(new JevProbeError({ reason: \"unconfigured\" }))\n const result = yield* options.evaluator.evaluate({\n state: { alive: session.alive, exitCode: session.exitCode, outputTail: tail.slice(-jevStateTailCharacters) },\n questions\n }).pipe(\n Effect.mapError((error) =>\n new JevProbeError({\n reason: error.code === \"timeout\"\n ? \"timeout\"\n : error.code === \"refused\"\n ? \"http\"\n : error.code === \"unreachable\"\n ? \"unreachable\"\n : \"malformed\",\n ...(error.status === undefined ? {} : { status: error.status })\n })\n ),\n Effect.timeoutOrElse({\n duration: options.timeoutMs ?? jevRequestTimeoutMs,\n orElse: () => Effect.fail(new JevProbeError({ reason: \"timeout\" }))\n })\n )\n const answer = result.answers.activity\n if (answer?.type !== \"choice\" || !Object.hasOwn(activityCriteria, answer.choice)) {\n return yield* Effect.fail(new JevProbeError({ reason: \"malformed\" }))\n }\n const confidence = result.confidence?.activity ?? answer.probabilities?.[answer.choice] ?? 0\n if (!Number.isFinite(confidence) || confidence < jevConfidenceFloor || confidence > 1) return lifecycleReport\n const choice = answer.choice as keyof typeof activityCriteria\n return choice === \"needs-input\"\n ? { activity: choice, reason: \"prompt-detected\" }\n : { activity: choice, reason: \"ok\" }\n })\n})\n/** Registered but unconfigured until a host supplies its evaluator.\n * @category constants\n * @since 1.0.0\n */\nexport const jevSessionChecker: HealthChecker = makeJevSessionChecker()\n"]}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Run ancestry as the control plane reads it.
3
+ *
4
+ * A run's ancestry is recorded by whoever created the run, in four different
5
+ * places: the run row's `parent_run_id`, `lineage_id`, and `round_ordinal`
6
+ * columns; the `flows_run_parents` edge a spawn writes; the `created` and
7
+ * `handed-off` run decisions the engine journals; and the `fork-created`
8
+ * marker time travel writes on a forked child. This module owns the one
9
+ * vocabulary they all project onto — {@link Origin} — and the pure functions
10
+ * that do the projecting, so the durable runtime and the watch stream cannot
11
+ * disagree about what a run's ancestry means.
12
+ *
13
+ * The two event types named here are produced by `@smthrs/engine-store` and
14
+ * `@smthrs/time-travel`. They are named as strings rather than imported
15
+ * because the control plane reads journals, not engines: a control plane that
16
+ * depended on the engine could not project a journal written by a different
17
+ * one.
18
+ *
19
+ * @since 0.1.0
20
+ */
21
+ import { Schema } from "effect";
22
+ import type { ControlEvent } from "./ControlSchema.ts";
23
+ /**
24
+ * How a run came to exist.
25
+ *
26
+ * The three values are the lineage-edge kinds of
27
+ * `docs/pages/concepts/time-travel.md`: a `child` is a run its parent spawned, a
28
+ * `fork` is a run branched off a parent frame, and a `continuation` is a later
29
+ * round of one trampoline lineage. A rewind is deliberately absent — it
30
+ * truncates a run in place and creates none — and a run with no ancestor has
31
+ * no origin at all.
32
+ *
33
+ * @category models
34
+ * @since 0.1.0
35
+ */
36
+ export declare const Origin: Schema.Literals<readonly ["child", "fork", "continuation"]>;
37
+ /**
38
+ * How a run came to exist.
39
+ *
40
+ * @category models
41
+ * @since 0.1.0
42
+ */
43
+ export type Origin = typeof Origin.Type;
44
+ /**
45
+ * The ancestry facts an origin is decided from.
46
+ *
47
+ * @category models
48
+ * @since 0.1.0
49
+ */
50
+ export interface Ancestry {
51
+ readonly parentRunId?: string | undefined;
52
+ readonly roundOrdinal?: number | undefined;
53
+ /** Whether a `fork-created` marker names this run. */
54
+ readonly forked?: boolean | undefined;
55
+ }
56
+ /**
57
+ * The journal event type carrying an engine run decision.
58
+ *
59
+ * @category constants
60
+ * @since 0.1.0
61
+ */
62
+ export declare const runDecisionEventType = "flows.engine.run-decision";
63
+ /**
64
+ * The journal event type time travel writes on a forked child.
65
+ *
66
+ * @category constants
67
+ * @since 0.1.0
68
+ */
69
+ export declare const forkCreatedEventType = "flows.time-travel.fork-created";
70
+ /**
71
+ * The kind `watch` reports a derived ancestry delta under.
72
+ *
73
+ * @category constants
74
+ * @since 0.1.0
75
+ */
76
+ export declare const lineageEventType = "control.run.lineage";
77
+ /**
78
+ * Decides how a run came to exist from its ancestry facts.
79
+ *
80
+ * A fork wins over a plain child because a fork records `parent_run_id` too:
81
+ * without the marker every fork would be reported as an ordinary child.
82
+ *
83
+ * @param ancestry the run's recorded ancestry
84
+ * @category projections
85
+ * @since 0.1.0
86
+ */
87
+ export declare const originOf: (ancestry: Ancestry) => Origin | undefined;
88
+ /**
89
+ * Derives the ancestry edge one journal entry discloses, if it discloses one.
90
+ *
91
+ * Three entries do, and each names a different pair:
92
+ *
93
+ * | Entry | Ancestor | Descendant |
94
+ * | --- | --- | --- |
95
+ * | `created` naming `parentExecutionId`, at round 0 or with no round | the spawning run | the entry's run |
96
+ * | `handed-off` naming `nextExecutionId` | the entry's run | the next round |
97
+ * | `fork-created` | the forked-from run | the entry's run |
98
+ *
99
+ * The handoff is what carries a trampoline, and a continuation round's own
100
+ * `created` decision is deliberately skipped. The engine journals BOTH in one
101
+ * transaction: `RunDriver` creates the next round with
102
+ * `{decision: "created", lineageId, roundOrdinal, parentExecutionId}` and then
103
+ * records `{decision: "handed-off", nextExecutionId}` on the round that
104
+ * finished. Both name the same pair, so deriving from both would report one
105
+ * run as a `child` of its predecessor on one entry and a `continuation` of it
106
+ * on the other. The handoff is the one kept, because it reaches a consumer
107
+ * watching the run that hands off — which is the run an operator is already
108
+ * following when a trampoline advances.
109
+ *
110
+ * A `created` decision at round 0, or with no round at all, is an ordinary
111
+ * spawn and derives a `child` edge.
112
+ *
113
+ * Everything else derives nothing. This is a projection over entries the
114
+ * control plane did not write, so an entry it does not recognize is not an
115
+ * error.
116
+ *
117
+ * @param event the projected journal entry
118
+ * @category projections
119
+ * @since 0.1.0
120
+ */
121
+ export declare const derive: (event: ControlEvent) => ControlEvent | undefined;
122
+ /**
123
+ * Expands one projected entry into itself plus any ancestry delta it
124
+ * discloses.
125
+ *
126
+ * @param event the projected journal entry
127
+ * @category projections
128
+ * @since 0.1.0
129
+ */
130
+ export declare const expand: (event: ControlEvent) => ReadonlyArray<ControlEvent>;
131
+ //# sourceMappingURL=Lineage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lineage.d.ts","sourceRoot":"","sources":["../../src/Lineage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,MAAM,6DAAqD,CAAA;AAExE;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,sDAAsD;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACtC;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,8BAA8B,CAAA;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,mCAAmC,CAAA;AAEpE;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,wBAAwB,CAAA;AAErD;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,GAAI,UAAU,QAAQ,KAAG,MAAM,GAAG,SAItD,CAAA;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,YAAY,KAAG,YAAY,GAAG,SA8C3D,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,YAAY,KAAG,aAAa,CAAC,YAAY,CAGtE,CAAA"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Run ancestry as the control plane reads it.
3
+ *
4
+ * A run's ancestry is recorded by whoever created the run, in four different
5
+ * places: the run row's `parent_run_id`, `lineage_id`, and `round_ordinal`
6
+ * columns; the `flows_run_parents` edge a spawn writes; the `created` and
7
+ * `handed-off` run decisions the engine journals; and the `fork-created`
8
+ * marker time travel writes on a forked child. This module owns the one
9
+ * vocabulary they all project onto — {@link Origin} — and the pure functions
10
+ * that do the projecting, so the durable runtime and the watch stream cannot
11
+ * disagree about what a run's ancestry means.
12
+ *
13
+ * The two event types named here are produced by `@smthrs/engine-store` and
14
+ * `@smthrs/time-travel`. They are named as strings rather than imported
15
+ * because the control plane reads journals, not engines: a control plane that
16
+ * depended on the engine could not project a journal written by a different
17
+ * one.
18
+ *
19
+ * @since 0.1.0
20
+ */
21
+ import { Schema } from "effect";
22
+ /**
23
+ * How a run came to exist.
24
+ *
25
+ * The three values are the lineage-edge kinds of
26
+ * `docs/pages/concepts/time-travel.md`: a `child` is a run its parent spawned, a
27
+ * `fork` is a run branched off a parent frame, and a `continuation` is a later
28
+ * round of one trampoline lineage. A rewind is deliberately absent — it
29
+ * truncates a run in place and creates none — and a run with no ancestor has
30
+ * no origin at all.
31
+ *
32
+ * @category models
33
+ * @since 0.1.0
34
+ */
35
+ export const Origin = Schema.Literals(["child", "fork", "continuation"]);
36
+ /**
37
+ * The journal event type carrying an engine run decision.
38
+ *
39
+ * @category constants
40
+ * @since 0.1.0
41
+ */
42
+ export const runDecisionEventType = "flows.engine.run-decision";
43
+ /**
44
+ * The journal event type time travel writes on a forked child.
45
+ *
46
+ * @category constants
47
+ * @since 0.1.0
48
+ */
49
+ export const forkCreatedEventType = "flows.time-travel.fork-created";
50
+ /**
51
+ * The kind `watch` reports a derived ancestry delta under.
52
+ *
53
+ * @category constants
54
+ * @since 0.1.0
55
+ */
56
+ export const lineageEventType = "control.run.lineage";
57
+ /**
58
+ * Decides how a run came to exist from its ancestry facts.
59
+ *
60
+ * A fork wins over a plain child because a fork records `parent_run_id` too:
61
+ * without the marker every fork would be reported as an ordinary child.
62
+ *
63
+ * @param ancestry the run's recorded ancestry
64
+ * @category projections
65
+ * @since 0.1.0
66
+ */
67
+ export const originOf = (ancestry) => {
68
+ if (ancestry.forked === true)
69
+ return "fork";
70
+ if (ancestry.roundOrdinal !== undefined && ancestry.roundOrdinal > 0)
71
+ return "continuation";
72
+ return ancestry.parentRunId === undefined ? undefined : "child";
73
+ };
74
+ const record = (value) => typeof value === "object" && value !== null && !Array.isArray(value)
75
+ ? value
76
+ : undefined;
77
+ const text = (value) => typeof value === "string" && value.length > 0 ? value : undefined;
78
+ const ordinal = (value) => typeof value === "number" && Number.isSafeInteger(value) && value >= 0 ? value : undefined;
79
+ /**
80
+ * Derives the ancestry edge one journal entry discloses, if it discloses one.
81
+ *
82
+ * Three entries do, and each names a different pair:
83
+ *
84
+ * | Entry | Ancestor | Descendant |
85
+ * | --- | --- | --- |
86
+ * | `created` naming `parentExecutionId`, at round 0 or with no round | the spawning run | the entry's run |
87
+ * | `handed-off` naming `nextExecutionId` | the entry's run | the next round |
88
+ * | `fork-created` | the forked-from run | the entry's run |
89
+ *
90
+ * The handoff is what carries a trampoline, and a continuation round's own
91
+ * `created` decision is deliberately skipped. The engine journals BOTH in one
92
+ * transaction: `RunDriver` creates the next round with
93
+ * `{decision: "created", lineageId, roundOrdinal, parentExecutionId}` and then
94
+ * records `{decision: "handed-off", nextExecutionId}` on the round that
95
+ * finished. Both name the same pair, so deriving from both would report one
96
+ * run as a `child` of its predecessor on one entry and a `continuation` of it
97
+ * on the other. The handoff is the one kept, because it reaches a consumer
98
+ * watching the run that hands off — which is the run an operator is already
99
+ * following when a trampoline advances.
100
+ *
101
+ * A `created` decision at round 0, or with no round at all, is an ordinary
102
+ * spawn and derives a `child` edge.
103
+ *
104
+ * Everything else derives nothing. This is a projection over entries the
105
+ * control plane did not write, so an entry it does not recognize is not an
106
+ * error.
107
+ *
108
+ * @param event the projected journal entry
109
+ * @category projections
110
+ * @since 0.1.0
111
+ */
112
+ export const derive = (event) => {
113
+ if (event.runId === undefined)
114
+ return undefined;
115
+ const payload = record(event.payload);
116
+ if (payload === undefined)
117
+ return undefined;
118
+ const edge = event.kind === forkCreatedEventType
119
+ ? { runId: event.runId, parentRunId: text(payload["parentRunId"]), forked: true }
120
+ : event.kind !== runDecisionEventType
121
+ ? undefined
122
+ : payload["decision"] === "created"
123
+ // A continuation round's `created` names its predecessor too. The handoff
124
+ // the previous round journals in the SAME transaction already discloses
125
+ // that edge, so deriving here as well would contradict it.
126
+ ? (ordinal(payload["roundOrdinal"]) ?? 0) > 0
127
+ ? undefined
128
+ : { runId: event.runId, parentRunId: text(payload["parentExecutionId"]), forked: false }
129
+ : payload["decision"] === "handed-off"
130
+ ? {
131
+ runId: text(payload["nextExecutionId"]),
132
+ parentRunId: event.runId,
133
+ forked: false,
134
+ lineageId: text(payload["lineageId"]),
135
+ roundOrdinal: ordinal(payload["roundOrdinal"])
136
+ }
137
+ : undefined;
138
+ if (edge === undefined || edge.runId === undefined || edge.parentRunId === undefined)
139
+ return undefined;
140
+ const lineageId = "lineageId" in edge ? edge.lineageId : undefined;
141
+ const roundOrdinal = "roundOrdinal" in edge ? edge.roundOrdinal : undefined;
142
+ const origin = originOf({
143
+ parentRunId: edge.parentRunId,
144
+ ...(roundOrdinal === undefined ? {} : { roundOrdinal }),
145
+ forked: edge.forked
146
+ });
147
+ return {
148
+ sequence: event.sequence,
149
+ kind: lineageEventType,
150
+ runId: event.runId,
151
+ occurredAt: event.occurredAt,
152
+ payload: {
153
+ runId: edge.runId,
154
+ parentRunId: edge.parentRunId,
155
+ ...(lineageId === undefined ? {} : { lineageId }),
156
+ ...(roundOrdinal === undefined ? {} : { roundOrdinal }),
157
+ /* v8 ignore next -- `originOf` answers nothing only without a parent, and the guard above already refused an edge with no parent */
158
+ ...(origin === undefined ? {} : { origin })
159
+ }
160
+ };
161
+ };
162
+ /**
163
+ * Expands one projected entry into itself plus any ancestry delta it
164
+ * discloses.
165
+ *
166
+ * @param event the projected journal entry
167
+ * @category projections
168
+ * @since 0.1.0
169
+ */
170
+ export const expand = (event) => {
171
+ const derived = derive(event);
172
+ return derived === undefined ? [event] : [event, derived];
173
+ };
174
+ //# sourceMappingURL=Lineage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lineage.js","sourceRoot":"","sources":["../../src/Lineage.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Run ancestry as the control plane reads it.\n *\n * A run's ancestry is recorded by whoever created the run, in four different\n * places: the run row's `parent_run_id`, `lineage_id`, and `round_ordinal`\n * columns; the `flows_run_parents` edge a spawn writes; the `created` and\n * `handed-off` run decisions the engine journals; and the `fork-created`\n * marker time travel writes on a forked child. This module owns the one\n * vocabulary they all project onto — {@link Origin} — and the pure functions\n * that do the projecting, so the durable runtime and the watch stream cannot\n * disagree about what a run's ancestry means.\n *\n * The two event types named here are produced by `@smthrs/engine-store` and\n * `@smthrs/time-travel`. They are named as strings rather than imported\n * because the control plane reads journals, not engines: a control plane that\n * depended on the engine could not project a journal written by a different\n * one.\n *\n * @since 0.1.0\n */\n\nimport { Schema } from \"effect\"\nimport type { ControlEvent } from \"./ControlSchema.ts\"\n\n/**\n * How a run came to exist.\n *\n * The three values are the lineage-edge kinds of\n * `docs/pages/concepts/time-travel.md`: a `child` is a run its parent spawned, a\n * `fork` is a run branched off a parent frame, and a `continuation` is a later\n * round of one trampoline lineage. A rewind is deliberately absent — it\n * truncates a run in place and creates none — and a run with no ancestor has\n * no origin at all.\n *\n * @category models\n * @since 0.1.0\n */\nexport const Origin = Schema.Literals([\"child\", \"fork\", \"continuation\"])\n\n/**\n * How a run came to exist.\n *\n * @category models\n * @since 0.1.0\n */\nexport type Origin = typeof Origin.Type\n\n/**\n * The ancestry facts an origin is decided from.\n *\n * @category models\n * @since 0.1.0\n */\nexport interface Ancestry {\n readonly parentRunId?: string | undefined\n readonly roundOrdinal?: number | undefined\n /** Whether a `fork-created` marker names this run. */\n readonly forked?: boolean | undefined\n}\n\n/**\n * The journal event type carrying an engine run decision.\n *\n * @category constants\n * @since 0.1.0\n */\nexport const runDecisionEventType = \"flows.engine.run-decision\"\n\n/**\n * The journal event type time travel writes on a forked child.\n *\n * @category constants\n * @since 0.1.0\n */\nexport const forkCreatedEventType = \"flows.time-travel.fork-created\"\n\n/**\n * The kind `watch` reports a derived ancestry delta under.\n *\n * @category constants\n * @since 0.1.0\n */\nexport const lineageEventType = \"control.run.lineage\"\n\n/**\n * Decides how a run came to exist from its ancestry facts.\n *\n * A fork wins over a plain child because a fork records `parent_run_id` too:\n * without the marker every fork would be reported as an ordinary child.\n *\n * @param ancestry the run's recorded ancestry\n * @category projections\n * @since 0.1.0\n */\nexport const originOf = (ancestry: Ancestry): Origin | undefined => {\n if (ancestry.forked === true) return \"fork\"\n if (ancestry.roundOrdinal !== undefined && ancestry.roundOrdinal > 0) return \"continuation\"\n return ancestry.parentRunId === undefined ? undefined : \"child\"\n}\n\nconst record = (value: unknown): Readonly<Record<string, unknown>> | undefined =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Readonly<Record<string, unknown>>\n : undefined\n\nconst text = (value: unknown): string | undefined => typeof value === \"string\" && value.length > 0 ? value : undefined\n\nconst ordinal = (value: unknown): number | undefined =>\n typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0 ? value : undefined\n\n/**\n * Derives the ancestry edge one journal entry discloses, if it discloses one.\n *\n * Three entries do, and each names a different pair:\n *\n * | Entry | Ancestor | Descendant |\n * | --- | --- | --- |\n * | `created` naming `parentExecutionId`, at round 0 or with no round | the spawning run | the entry's run |\n * | `handed-off` naming `nextExecutionId` | the entry's run | the next round |\n * | `fork-created` | the forked-from run | the entry's run |\n *\n * The handoff is what carries a trampoline, and a continuation round's own\n * `created` decision is deliberately skipped. The engine journals BOTH in one\n * transaction: `RunDriver` creates the next round with\n * `{decision: \"created\", lineageId, roundOrdinal, parentExecutionId}` and then\n * records `{decision: \"handed-off\", nextExecutionId}` on the round that\n * finished. Both name the same pair, so deriving from both would report one\n * run as a `child` of its predecessor on one entry and a `continuation` of it\n * on the other. The handoff is the one kept, because it reaches a consumer\n * watching the run that hands off — which is the run an operator is already\n * following when a trampoline advances.\n *\n * A `created` decision at round 0, or with no round at all, is an ordinary\n * spawn and derives a `child` edge.\n *\n * Everything else derives nothing. This is a projection over entries the\n * control plane did not write, so an entry it does not recognize is not an\n * error.\n *\n * @param event the projected journal entry\n * @category projections\n * @since 0.1.0\n */\nexport const derive = (event: ControlEvent): ControlEvent | undefined => {\n if (event.runId === undefined) return undefined\n const payload = record(event.payload)\n if (payload === undefined) return undefined\n const edge = event.kind === forkCreatedEventType\n ? { runId: event.runId, parentRunId: text(payload[\"parentRunId\"]), forked: true }\n : event.kind !== runDecisionEventType\n ? undefined\n : payload[\"decision\"] === \"created\"\n // A continuation round's `created` names its predecessor too. The handoff\n // the previous round journals in the SAME transaction already discloses\n // that edge, so deriving here as well would contradict it.\n ? (ordinal(payload[\"roundOrdinal\"]) ?? 0) > 0\n ? undefined\n : { runId: event.runId, parentRunId: text(payload[\"parentExecutionId\"]), forked: false }\n : payload[\"decision\"] === \"handed-off\"\n ? {\n runId: text(payload[\"nextExecutionId\"]),\n parentRunId: event.runId,\n forked: false,\n lineageId: text(payload[\"lineageId\"]),\n roundOrdinal: ordinal(payload[\"roundOrdinal\"])\n }\n : undefined\n if (edge === undefined || edge.runId === undefined || edge.parentRunId === undefined) return undefined\n const lineageId = \"lineageId\" in edge ? edge.lineageId : undefined\n const roundOrdinal = \"roundOrdinal\" in edge ? edge.roundOrdinal : undefined\n const origin = originOf({\n parentRunId: edge.parentRunId,\n ...(roundOrdinal === undefined ? {} : { roundOrdinal }),\n forked: edge.forked\n })\n return {\n sequence: event.sequence,\n kind: lineageEventType,\n runId: event.runId,\n occurredAt: event.occurredAt,\n payload: {\n runId: edge.runId,\n parentRunId: edge.parentRunId,\n ...(lineageId === undefined ? {} : { lineageId }),\n ...(roundOrdinal === undefined ? {} : { roundOrdinal }),\n /* v8 ignore next -- `originOf` answers nothing only without a parent, and the guard above already refused an edge with no parent */\n ...(origin === undefined ? {} : { origin })\n }\n }\n}\n\n/**\n * Expands one projected entry into itself plus any ancestry delta it\n * discloses.\n *\n * @param event the projected journal entry\n * @category projections\n * @since 0.1.0\n */\nexport const expand = (event: ControlEvent): ReadonlyArray<ControlEvent> => {\n const derived = derive(event)\n return derived === undefined ? [event] : [event, derived]\n}\n"]}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Control-plane and credential schema migrations.
3
+ *
4
+ * This package reserves the migration block immediately after time travel.
5
+ * Hosts compose this set with the journal and run-store sets before opening a
6
+ * shared control database.
7
+ *
8
+ * @since 0.1.0
9
+ */
10
+ import * as DatabaseMigrations from "@smthrs/database/Migrations";
11
+ import * as Layer from "effect/Layer";
12
+ /**
13
+ * The control package's namespaced migration set.
14
+ *
15
+ * @category migrations
16
+ * @since 0.1.0
17
+ */
18
+ export declare const set: DatabaseMigrations.MigrationSet;
19
+ /**
20
+ * Creates every durable control-plane and credential table.
21
+ *
22
+ * @category migrations
23
+ * @since 0.1.0
24
+ */
25
+ export declare const run: import("effect/Effect").Effect<readonly (readonly [id: number, name: string])[], import("effect/unstable/sql/SqlError").SqlError | import("effect/unstable/sql/Migrator").MigrationError, import("effect/unstable/sql/SqlClient").SqlClient>;
26
+ /**
27
+ * Layer that runs control migrations before exposing the database to control
28
+ * services.
29
+ *
30
+ * @category layers
31
+ * @since 0.1.0
32
+ */
33
+ export declare const layer: Layer.Layer<never, import("effect/unstable/sql/SqlError").SqlError | import("effect/unstable/sql/Migrator").MigrationError, import("effect/unstable/sql/SqlClient").SqlClient>;
34
+ //# sourceMappingURL=Migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Migrations.d.ts","sourceRoot":"","sources":["../../src/Migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,kBAAkB,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AASrC;;;;;GAKG;AACH,eAAO,MAAM,GAAG,EAAE,kBAAkB,CAAC,YAYpC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,GAAG,8OAAgC,CAAA;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,gLAA2B,CAAA"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Control-plane and credential schema migrations.
3
+ *
4
+ * This package reserves the migration block immediately after time travel.
5
+ * Hosts compose this set with the journal and run-store sets before opening a
6
+ * shared control database.
7
+ *
8
+ * @since 0.1.0
9
+ */
10
+ import * as DatabaseMigrations from "@smthrs/database/Migrations";
11
+ import * as Layer from "effect/Layer";
12
+ import { initial } from "./migrations/0001_control_tables.js";
13
+ import { runKeys } from "./migrations/0002_run_keys.js";
14
+ import { signalCommands } from "./migrations/0003_signal_commands.js";
15
+ import { approvalDecisions } from "./migrations/0004_approval_decisions.js";
16
+ import { signalPrincipals } from "./migrations/0005_signal_principals.js";
17
+ import { runPrincipals } from "./migrations/0006_run_principals.js";
18
+ import { resumeConsent } from "./migrations/0007_resume_consent.js";
19
+ /**
20
+ * The control package's namespaced migration set.
21
+ *
22
+ * @category migrations
23
+ * @since 0.1.0
24
+ */
25
+ export const set = {
26
+ namespace: "control",
27
+ idOffset: DatabaseMigrations.idBlock * 6,
28
+ migrations: {
29
+ "0001_control_tables": initial,
30
+ "0002_run_keys": runKeys,
31
+ "0003_signal_commands": signalCommands,
32
+ "0004_approval_decisions": approvalDecisions,
33
+ "0005_signal_principals": signalPrincipals,
34
+ "0006_run_principals": runPrincipals,
35
+ "0007_resume_consent": resumeConsent
36
+ }
37
+ };
38
+ /**
39
+ * Creates every durable control-plane and credential table.
40
+ *
41
+ * @category migrations
42
+ * @since 0.1.0
43
+ */
44
+ export const run = DatabaseMigrations.run([set]);
45
+ /**
46
+ * Layer that runs control migrations before exposing the database to control
47
+ * services.
48
+ *
49
+ * @category layers
50
+ * @since 0.1.0
51
+ */
52
+ export const layer = Layer.effectDiscard(run);
53
+ //# sourceMappingURL=Migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Migrations.js","sourceRoot":"","sources":["../../src/Migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,kBAAkB,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAA;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAEnE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,GAAG,GAAoC;IAClD,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,kBAAkB,CAAC,OAAO,GAAG,CAAC;IACxC,UAAU,EAAE;QACV,qBAAqB,EAAE,OAAO;QAC9B,eAAe,EAAE,OAAO;QACxB,sBAAsB,EAAE,cAAc;QACtC,yBAAyB,EAAE,iBAAiB;QAC5C,wBAAwB,EAAE,gBAAgB;QAC1C,qBAAqB,EAAE,aAAa;QACpC,qBAAqB,EAAE,aAAa;KACrC;CACF,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AAEhD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA","sourcesContent":["/**\n * Control-plane and credential schema migrations.\n *\n * This package reserves the migration block immediately after time travel.\n * Hosts compose this set with the journal and run-store sets before opening a\n * shared control database.\n *\n * @since 0.1.0\n */\n\nimport * as DatabaseMigrations from \"@smthrs/database/Migrations\"\nimport * as Layer from \"effect/Layer\"\nimport { initial } from \"./migrations/0001_control_tables.ts\"\nimport { runKeys } from \"./migrations/0002_run_keys.ts\"\nimport { signalCommands } from \"./migrations/0003_signal_commands.ts\"\nimport { approvalDecisions } from \"./migrations/0004_approval_decisions.ts\"\nimport { signalPrincipals } from \"./migrations/0005_signal_principals.ts\"\nimport { runPrincipals } from \"./migrations/0006_run_principals.ts\"\nimport { resumeConsent } from \"./migrations/0007_resume_consent.ts\"\n\n/**\n * The control package's namespaced migration set.\n *\n * @category migrations\n * @since 0.1.0\n */\nexport const set: DatabaseMigrations.MigrationSet = {\n namespace: \"control\",\n idOffset: DatabaseMigrations.idBlock * 6,\n migrations: {\n \"0001_control_tables\": initial,\n \"0002_run_keys\": runKeys,\n \"0003_signal_commands\": signalCommands,\n \"0004_approval_decisions\": approvalDecisions,\n \"0005_signal_principals\": signalPrincipals,\n \"0006_run_principals\": runPrincipals,\n \"0007_resume_consent\": resumeConsent\n }\n}\n\n/**\n * Creates every durable control-plane and credential table.\n *\n * @category migrations\n * @since 0.1.0\n */\nexport const run = DatabaseMigrations.run([set])\n\n/**\n * Layer that runs control migrations before exposing the database to control\n * services.\n *\n * @category layers\n * @since 0.1.0\n */\nexport const layer = Layer.effectDiscard(run)\n"]}