@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,127 @@
1
+ /**
2
+ * Session activity judged by the host's existing evaluator.
3
+ * @since 1.0.0
4
+ */
5
+
6
+ import * as Fault from "@smthrs/flow/Fault"
7
+ import type * as Evaluator from "@smthrs/model/Evaluator"
8
+ import { Effect, Schema } from "effect"
9
+ import type { HealthChecker, ProbeReport } from "./Health.ts"
10
+
11
+ /** The configured judge could not produce a usable observation.
12
+ * @category errors
13
+ * @since 1.0.0
14
+ */
15
+ export class JevProbeError extends Schema.TaggedError<JevProbeError>()("JevProbeError", {
16
+ reason: Schema.Literals(["unconfigured", "http", "timeout", "unreachable", "malformed"]),
17
+ status: Schema.optional(Schema.Number)
18
+ }) {}
19
+ Fault.register(
20
+ "JevProbeError",
21
+ {
22
+ unconfigured: "policy",
23
+ http: "dependency",
24
+ timeout: "dependency",
25
+ unreachable: "dependency",
26
+ malformed: "dependency"
27
+ } satisfies Fault.Rows<JevProbeError["reason"]>,
28
+ "reason"
29
+ )
30
+ /** Maximum terminal evidence retained for one judgment.
31
+ * @category constants
32
+ * @since 1.0.0
33
+ */
34
+ export const jevStateTailCharacters = 4 * 1024
35
+ /** Subscription judgments have a bounded deadline.
36
+ * @category constants
37
+ * @since 1.0.0
38
+ */
39
+ export const jevRequestTimeoutMs = 45_000
40
+ /** Probe budget, longer than the request deadline.
41
+ * @category constants
42
+ * @since 1.0.0
43
+ */
44
+ export const jevProbeTimeoutMs = 50_000
45
+ /** Minimum confidence for an activity report.
46
+ * @category constants
47
+ * @since 1.0.0
48
+ */
49
+ export const jevConfidenceFloor = 0.7
50
+ /** The host evaluator and its bounded request deadline.
51
+ * @category models
52
+ * @since 1.0.0
53
+ */
54
+ export interface JevSessionCheckerOptions {
55
+ readonly evaluator?: Evaluator.Evaluator | undefined
56
+ readonly timeoutMs?: number | undefined
57
+ }
58
+ const lifecycleReport: ProbeReport = { activity: "unknown", reason: "ok" }
59
+ const activityCriteria = {
60
+ "working": "the agent is executing tools, editing files, or producing work",
61
+ "idle": "the agent finished and is producing nothing",
62
+ "needs-input": "the agent asked the person a question, requested approval or a credential, and is waiting"
63
+ } as const
64
+
65
+ const questions = {
66
+ activity: {
67
+ type: "choice",
68
+ instructions: "Read the tail of this agent session's output. What is the agent doing right now?",
69
+ criteria: activityCriteria
70
+ },
71
+ question: {
72
+ type: "boolean",
73
+ instructions: "Does the output end with the agent waiting for a person to answer?"
74
+ }
75
+ } as const
76
+
77
+ /** Uses the same judge as flow completion, with no independent auth path.
78
+ * @category constructors
79
+ * @since 1.0.0
80
+ */
81
+ export const makeJevSessionChecker = (options: JevSessionCheckerOptions = {}): HealthChecker => ({
82
+ id: "jev.session",
83
+ defaults: { timeoutMs: jevProbeTimeoutMs, ttlMs: 60_000 },
84
+ probe: (context) =>
85
+ Effect.gen(function*() {
86
+ const session = context.session
87
+ const tail = session?.outputTail
88
+ if (session === undefined || !session.alive || tail === undefined || tail === "") return lifecycleReport
89
+ if (options.evaluator === undefined) return yield* Effect.fail(new JevProbeError({ reason: "unconfigured" }))
90
+ const result = yield* options.evaluator.evaluate({
91
+ state: { alive: session.alive, exitCode: session.exitCode, outputTail: tail.slice(-jevStateTailCharacters) },
92
+ questions
93
+ }).pipe(
94
+ Effect.mapError((error) =>
95
+ new JevProbeError({
96
+ reason: error.code === "timeout"
97
+ ? "timeout"
98
+ : error.code === "refused"
99
+ ? "http"
100
+ : error.code === "unreachable"
101
+ ? "unreachable"
102
+ : "malformed",
103
+ ...(error.status === undefined ? {} : { status: error.status })
104
+ })
105
+ ),
106
+ Effect.timeoutOrElse({
107
+ duration: options.timeoutMs ?? jevRequestTimeoutMs,
108
+ orElse: () => Effect.fail(new JevProbeError({ reason: "timeout" }))
109
+ })
110
+ )
111
+ const answer = result.answers.activity
112
+ if (answer?.type !== "choice" || !Object.hasOwn(activityCriteria, answer.choice)) {
113
+ return yield* Effect.fail(new JevProbeError({ reason: "malformed" }))
114
+ }
115
+ const confidence = result.confidence?.activity ?? answer.probabilities?.[answer.choice] ?? 0
116
+ if (!Number.isFinite(confidence) || confidence < jevConfidenceFloor || confidence > 1) return lifecycleReport
117
+ const choice = answer.choice as keyof typeof activityCriteria
118
+ return choice === "needs-input"
119
+ ? { activity: choice, reason: "prompt-detected" }
120
+ : { activity: choice, reason: "ok" }
121
+ })
122
+ })
123
+ /** Registered but unconfigured until a host supplies its evaluator.
124
+ * @category constants
125
+ * @since 1.0.0
126
+ */
127
+ export const jevSessionChecker: HealthChecker = makeJevSessionChecker()
package/src/Lineage.ts ADDED
@@ -0,0 +1,203 @@
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
+
22
+ import { Schema } from "effect"
23
+ import type { ControlEvent } from "./ControlSchema.ts"
24
+
25
+ /**
26
+ * How a run came to exist.
27
+ *
28
+ * The three values are the lineage-edge kinds of
29
+ * `docs/pages/concepts/time-travel.md`: a `child` is a run its parent spawned, a
30
+ * `fork` is a run branched off a parent frame, and a `continuation` is a later
31
+ * round of one trampoline lineage. A rewind is deliberately absent — it
32
+ * truncates a run in place and creates none — and a run with no ancestor has
33
+ * no origin at all.
34
+ *
35
+ * @category models
36
+ * @since 0.1.0
37
+ */
38
+ export const Origin = Schema.Literals(["child", "fork", "continuation"])
39
+
40
+ /**
41
+ * How a run came to exist.
42
+ *
43
+ * @category models
44
+ * @since 0.1.0
45
+ */
46
+ export type Origin = typeof Origin.Type
47
+
48
+ /**
49
+ * The ancestry facts an origin is decided from.
50
+ *
51
+ * @category models
52
+ * @since 0.1.0
53
+ */
54
+ export interface Ancestry {
55
+ readonly parentRunId?: string | undefined
56
+ readonly roundOrdinal?: number | undefined
57
+ /** Whether a `fork-created` marker names this run. */
58
+ readonly forked?: boolean | undefined
59
+ }
60
+
61
+ /**
62
+ * The journal event type carrying an engine run decision.
63
+ *
64
+ * @category constants
65
+ * @since 0.1.0
66
+ */
67
+ export const runDecisionEventType = "flows.engine.run-decision"
68
+
69
+ /**
70
+ * The journal event type time travel writes on a forked child.
71
+ *
72
+ * @category constants
73
+ * @since 0.1.0
74
+ */
75
+ export const forkCreatedEventType = "flows.time-travel.fork-created"
76
+
77
+ /**
78
+ * The kind `watch` reports a derived ancestry delta under.
79
+ *
80
+ * @category constants
81
+ * @since 0.1.0
82
+ */
83
+ export const lineageEventType = "control.run.lineage"
84
+
85
+ /**
86
+ * Decides how a run came to exist from its ancestry facts.
87
+ *
88
+ * A fork wins over a plain child because a fork records `parent_run_id` too:
89
+ * without the marker every fork would be reported as an ordinary child.
90
+ *
91
+ * @param ancestry the run's recorded ancestry
92
+ * @category projections
93
+ * @since 0.1.0
94
+ */
95
+ export const originOf = (ancestry: Ancestry): Origin | undefined => {
96
+ if (ancestry.forked === true) return "fork"
97
+ if (ancestry.roundOrdinal !== undefined && ancestry.roundOrdinal > 0) return "continuation"
98
+ return ancestry.parentRunId === undefined ? undefined : "child"
99
+ }
100
+
101
+ const record = (value: unknown): Readonly<Record<string, unknown>> | undefined =>
102
+ typeof value === "object" && value !== null && !Array.isArray(value)
103
+ ? value as Readonly<Record<string, unknown>>
104
+ : undefined
105
+
106
+ const text = (value: unknown): string | undefined => typeof value === "string" && value.length > 0 ? value : undefined
107
+
108
+ const ordinal = (value: unknown): number | undefined =>
109
+ typeof value === "number" && Number.isSafeInteger(value) && value >= 0 ? value : undefined
110
+
111
+ /**
112
+ * Derives the ancestry edge one journal entry discloses, if it discloses one.
113
+ *
114
+ * Three entries do, and each names a different pair:
115
+ *
116
+ * | Entry | Ancestor | Descendant |
117
+ * | --- | --- | --- |
118
+ * | `created` naming `parentExecutionId`, at round 0 or with no round | the spawning run | the entry's run |
119
+ * | `handed-off` naming `nextExecutionId` | the entry's run | the next round |
120
+ * | `fork-created` | the forked-from run | the entry's run |
121
+ *
122
+ * The handoff is what carries a trampoline, and a continuation round's own
123
+ * `created` decision is deliberately skipped. The engine journals BOTH in one
124
+ * transaction: `RunDriver` creates the next round with
125
+ * `{decision: "created", lineageId, roundOrdinal, parentExecutionId}` and then
126
+ * records `{decision: "handed-off", nextExecutionId}` on the round that
127
+ * finished. Both name the same pair, so deriving from both would report one
128
+ * run as a `child` of its predecessor on one entry and a `continuation` of it
129
+ * on the other. The handoff is the one kept, because it reaches a consumer
130
+ * watching the run that hands off — which is the run an operator is already
131
+ * following when a trampoline advances.
132
+ *
133
+ * A `created` decision at round 0, or with no round at all, is an ordinary
134
+ * spawn and derives a `child` edge.
135
+ *
136
+ * Everything else derives nothing. This is a projection over entries the
137
+ * control plane did not write, so an entry it does not recognize is not an
138
+ * error.
139
+ *
140
+ * @param event the projected journal entry
141
+ * @category projections
142
+ * @since 0.1.0
143
+ */
144
+ export const derive = (event: ControlEvent): ControlEvent | undefined => {
145
+ if (event.runId === undefined) return undefined
146
+ const payload = record(event.payload)
147
+ if (payload === undefined) return undefined
148
+ const edge = event.kind === forkCreatedEventType
149
+ ? { runId: event.runId, parentRunId: text(payload["parentRunId"]), forked: true }
150
+ : event.kind !== runDecisionEventType
151
+ ? undefined
152
+ : payload["decision"] === "created"
153
+ // A continuation round's `created` names its predecessor too. The handoff
154
+ // the previous round journals in the SAME transaction already discloses
155
+ // that edge, so deriving here as well would contradict it.
156
+ ? (ordinal(payload["roundOrdinal"]) ?? 0) > 0
157
+ ? undefined
158
+ : { runId: event.runId, parentRunId: text(payload["parentExecutionId"]), forked: false }
159
+ : payload["decision"] === "handed-off"
160
+ ? {
161
+ runId: text(payload["nextExecutionId"]),
162
+ parentRunId: event.runId,
163
+ forked: false,
164
+ lineageId: text(payload["lineageId"]),
165
+ roundOrdinal: ordinal(payload["roundOrdinal"])
166
+ }
167
+ : undefined
168
+ if (edge === undefined || edge.runId === undefined || edge.parentRunId === undefined) return undefined
169
+ const lineageId = "lineageId" in edge ? edge.lineageId : undefined
170
+ const roundOrdinal = "roundOrdinal" in edge ? edge.roundOrdinal : undefined
171
+ const origin = originOf({
172
+ parentRunId: edge.parentRunId,
173
+ ...(roundOrdinal === undefined ? {} : { roundOrdinal }),
174
+ forked: edge.forked
175
+ })
176
+ return {
177
+ sequence: event.sequence,
178
+ kind: lineageEventType,
179
+ runId: event.runId,
180
+ occurredAt: event.occurredAt,
181
+ payload: {
182
+ runId: edge.runId,
183
+ parentRunId: edge.parentRunId,
184
+ ...(lineageId === undefined ? {} : { lineageId }),
185
+ ...(roundOrdinal === undefined ? {} : { roundOrdinal }),
186
+ /* v8 ignore next -- `originOf` answers nothing only without a parent, and the guard above already refused an edge with no parent */
187
+ ...(origin === undefined ? {} : { origin })
188
+ }
189
+ }
190
+ }
191
+
192
+ /**
193
+ * Expands one projected entry into itself plus any ancestry delta it
194
+ * discloses.
195
+ *
196
+ * @param event the projected journal entry
197
+ * @category projections
198
+ * @since 0.1.0
199
+ */
200
+ export const expand = (event: ControlEvent): ReadonlyArray<ControlEvent> => {
201
+ const derived = derive(event)
202
+ return derived === undefined ? [event] : [event, derived]
203
+ }
@@ -0,0 +1,56 @@
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
+
11
+ import * as DatabaseMigrations from "@smthrs/database/Migrations"
12
+ import * as Layer from "effect/Layer"
13
+ import { initial } from "./migrations/0001_control_tables.ts"
14
+ import { runKeys } from "./migrations/0002_run_keys.ts"
15
+ import { signalCommands } from "./migrations/0003_signal_commands.ts"
16
+ import { approvalDecisions } from "./migrations/0004_approval_decisions.ts"
17
+ import { signalPrincipals } from "./migrations/0005_signal_principals.ts"
18
+ import { runPrincipals } from "./migrations/0006_run_principals.ts"
19
+ import { resumeConsent } from "./migrations/0007_resume_consent.ts"
20
+
21
+ /**
22
+ * The control package's namespaced migration set.
23
+ *
24
+ * @category migrations
25
+ * @since 0.1.0
26
+ */
27
+ export const set: DatabaseMigrations.MigrationSet = {
28
+ namespace: "control",
29
+ idOffset: DatabaseMigrations.idBlock * 6,
30
+ migrations: {
31
+ "0001_control_tables": initial,
32
+ "0002_run_keys": runKeys,
33
+ "0003_signal_commands": signalCommands,
34
+ "0004_approval_decisions": approvalDecisions,
35
+ "0005_signal_principals": signalPrincipals,
36
+ "0006_run_principals": runPrincipals,
37
+ "0007_resume_consent": resumeConsent
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Creates every durable control-plane and credential table.
43
+ *
44
+ * @category migrations
45
+ * @since 0.1.0
46
+ */
47
+ export const run = DatabaseMigrations.run([set])
48
+
49
+ /**
50
+ * Layer that runs control migrations before exposing the database to control
51
+ * services.
52
+ *
53
+ * @category layers
54
+ * @since 0.1.0
55
+ */
56
+ export const layer = Layer.effectDiscard(run)