@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,112 @@
1
+ /**
2
+ * Read port from the control plane into a trigger store.
3
+ *
4
+ * `Control.list` answers `{ _tag: "triggers" }` and `{ _tag: "fires" }` through
5
+ * this port. The port lives here rather than in `@smthrs/triggers` because that
6
+ * package already depends on this one (its scheduler launches runs through
7
+ * `Control`), so the adapter over a real `TriggerStore` is composed by the host
8
+ * and the plane only ever sees the interface.
9
+ *
10
+ * A composition that provides no reader, or provides {@link layerNone}, makes
11
+ * `Control.list` refuse the two variants with a typed `InvalidInput` naming the
12
+ * gap. It never answers an empty page: an empty page means "this host has no
13
+ * triggers", and a host that cannot read its store has no grounds to say so.
14
+ *
15
+ * @since 1.0.0
16
+ */
17
+ import { Context, Effect, Layer } from "effect";
18
+ import type { ControlError } from "./ControlError.ts";
19
+ import { InvalidInput } from "./ControlError.ts";
20
+ import type { FireSummary, ListRequest, TriggerSummary } from "./ControlSchema.ts";
21
+ /**
22
+ * The `triggers` listing request as the port receives it.
23
+ *
24
+ * @category models
25
+ * @since 1.0.0
26
+ */
27
+ export type TriggersRequest = Extract<ListRequest, {
28
+ readonly _tag: "triggers";
29
+ }>;
30
+ /**
31
+ * The `fires` listing request as the port receives it.
32
+ *
33
+ * @category models
34
+ * @since 1.0.0
35
+ */
36
+ export type FiresRequest = Extract<ListRequest, {
37
+ readonly _tag: "fires";
38
+ }>;
39
+ /**
40
+ * The reader `Control.list` pages trigger and fire rows from.
41
+ *
42
+ * Each method receives the whole request and answers every row it has for it,
43
+ * newest fire first. A reader may narrow by the request's `filters` (a SQL
44
+ * adapter pushes them into the query); `Control.list` applies the same filters
45
+ * again and pages the rows with `cursor` and `limit`, so a reader that returns
46
+ * every row is still correct. Paging stays in the plane so both variants page
47
+ * exactly as `flows` and `runs` do.
48
+ *
49
+ * @category services
50
+ * @since 1.0.0
51
+ */
52
+ export interface Service {
53
+ readonly list: (request: TriggersRequest) => Effect.Effect<ReadonlyArray<TriggerSummary>, ControlError>;
54
+ readonly fires: (request: FiresRequest) => Effect.Effect<ReadonlyArray<FireSummary>, ControlError>;
55
+ }
56
+ declare const DispatchReader_base: Context.ServiceClass<DispatchReader, "/control/DispatchReader", Service>;
57
+ /**
58
+ * The {@link Service} tag.
59
+ *
60
+ * @category services
61
+ * @since 1.0.0
62
+ */
63
+ export declare class DispatchReader extends DispatchReader_base {
64
+ }
65
+ /**
66
+ * The refusal a host without a trigger store answers both variants with.
67
+ *
68
+ * @category constants
69
+ * @since 1.0.0
70
+ */
71
+ export declare const noStoreIssue = "this host serves no trigger store";
72
+ /**
73
+ * The typed refusal for a host without a trigger store: `InvalidInput` with
74
+ * code `invalid_input` and {@link noStoreIssue} as the issue, the same shape
75
+ * `Control.list` refuses an unsupported run filter with.
76
+ *
77
+ * @category constructors
78
+ * @since 1.0.0
79
+ */
80
+ export declare const refuse: () => InvalidInput;
81
+ /**
82
+ * Builds a {@link Service} from an implementation of its methods.
83
+ *
84
+ * @category constructors
85
+ * @since 1.0.0
86
+ */
87
+ export declare const make: (implementation: Service) => Service;
88
+ /**
89
+ * A {@link Service} that serves no trigger store: both methods fail with
90
+ * {@link refuse}.
91
+ *
92
+ * @category constructors
93
+ * @since 1.0.0
94
+ */
95
+ export declare const makeNone: () => Service;
96
+ /**
97
+ * Provides {@link DispatchReader} from an implementation.
98
+ *
99
+ * @category layers
100
+ * @since 1.0.0
101
+ */
102
+ export declare const layer: (implementation: Service) => Layer.Layer<DispatchReader>;
103
+ /**
104
+ * Provides {@link makeNone}: a reader that refuses both listings because this
105
+ * host serves no trigger store.
106
+ *
107
+ * @category layers
108
+ * @since 1.0.0
109
+ */
110
+ export declare const layerNone: Layer.Layer<DispatchReader>;
111
+ export {};
112
+ //# sourceMappingURL=DispatchReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DispatchReader.d.ts","sourceRoot":"","sources":["../../src/DispatchReader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAElF;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,CAAA;AAEjF;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAAA;AAE3E;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,CAAA;IACvG,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,CAAA;CACnG;;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,mBAEnC;CAAG;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,YAAY,sCAAsC,CAAA;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,QAAO,YAAyD,CAAA;AAEnF;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,gBAAgB,OAAO,KAAG,OAA4C,CAAA;AAE3F;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,QAAO,OAIxB,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,gBAAgB,OAAO,KAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CACrB,CAAA;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,CAA6C,CAAA"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var DispatchReader_exports = {};
20
+ __export(DispatchReader_exports, {
21
+ DispatchReader: () => DispatchReader,
22
+ layer: () => layer,
23
+ layerNone: () => layerNone,
24
+ make: () => make,
25
+ makeNone: () => makeNone,
26
+ noStoreIssue: () => noStoreIssue,
27
+ refuse: () => refuse
28
+ });
29
+ module.exports = __toCommonJS(DispatchReader_exports);
30
+ var import_effect = require("effect");
31
+ var import_ControlError = require("./ControlError.js");
32
+ class DispatchReader extends import_effect.Context.Service()(
33
+ "/control/DispatchReader"
34
+ ) {
35
+ }
36
+ const noStoreIssue = "this host serves no trigger store";
37
+ const refuse = () => new import_ControlError.InvalidInput({ issue: noStoreIssue });
38
+ const make = (implementation) => DispatchReader.of(implementation);
39
+ const makeNone = () => make({
40
+ list: import_effect.Effect.fn("DispatchReader.list")(() => import_effect.Effect.fail(refuse())),
41
+ fires: import_effect.Effect.fn("DispatchReader.fires")(() => import_effect.Effect.fail(refuse()))
42
+ });
43
+ const layer = (implementation) => import_effect.Layer.succeed(DispatchReader)(make(implementation));
44
+ const layerNone = import_effect.Layer.succeed(DispatchReader)(makeNone());
45
+ //# sourceMappingURL=DispatchReader.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/DispatchReader.ts"],
4
+ "sourcesContent": ["/**\n * Read port from the control plane into a trigger store.\n *\n * `Control.list` answers `{ _tag: \"triggers\" }` and `{ _tag: \"fires\" }` through\n * this port. The port lives here rather than in `@smthrs/triggers` because that\n * package already depends on this one (its scheduler launches runs through\n * `Control`), so the adapter over a real `TriggerStore` is composed by the host\n * and the plane only ever sees the interface.\n *\n * A composition that provides no reader, or provides {@link layerNone}, makes\n * `Control.list` refuse the two variants with a typed `InvalidInput` naming the\n * gap. It never answers an empty page: an empty page means \"this host has no\n * triggers\", and a host that cannot read its store has no grounds to say so.\n *\n * @since 1.0.0\n */\n\nimport { Context, Effect, Layer } from \"effect\"\nimport type { ControlError } from \"./ControlError.ts\"\nimport { InvalidInput } from \"./ControlError.ts\"\nimport type { FireSummary, ListRequest, TriggerSummary } from \"./ControlSchema.ts\"\n\n/**\n * The `triggers` listing request as the port receives it.\n *\n * @category models\n * @since 1.0.0\n */\nexport type TriggersRequest = Extract<ListRequest, { readonly _tag: \"triggers\" }>\n\n/**\n * The `fires` listing request as the port receives it.\n *\n * @category models\n * @since 1.0.0\n */\nexport type FiresRequest = Extract<ListRequest, { readonly _tag: \"fires\" }>\n\n/**\n * The reader `Control.list` pages trigger and fire rows from.\n *\n * Each method receives the whole request and answers every row it has for it,\n * newest fire first. A reader may narrow by the request's `filters` (a SQL\n * adapter pushes them into the query); `Control.list` applies the same filters\n * again and pages the rows with `cursor` and `limit`, so a reader that returns\n * every row is still correct. Paging stays in the plane so both variants page\n * exactly as `flows` and `runs` do.\n *\n * @category services\n * @since 1.0.0\n */\nexport interface Service {\n readonly list: (request: TriggersRequest) => Effect.Effect<ReadonlyArray<TriggerSummary>, ControlError>\n readonly fires: (request: FiresRequest) => Effect.Effect<ReadonlyArray<FireSummary>, ControlError>\n}\n\n/**\n * The {@link Service} tag.\n *\n * @category services\n * @since 1.0.0\n */\nexport class DispatchReader extends Context.Service<DispatchReader, Service>()(\n \"/control/DispatchReader\"\n) {}\n\n/**\n * The refusal a host without a trigger store answers both variants with.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const noStoreIssue = \"this host serves no trigger store\"\n\n/**\n * The typed refusal for a host without a trigger store: `InvalidInput` with\n * code `invalid_input` and {@link noStoreIssue} as the issue, the same shape\n * `Control.list` refuses an unsupported run filter with.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const refuse = (): InvalidInput => new InvalidInput({ issue: noStoreIssue })\n\n/**\n * Builds a {@link Service} from an implementation of its methods.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const make = (implementation: Service): Service => DispatchReader.of(implementation)\n\n/**\n * A {@link Service} that serves no trigger store: both methods fail with\n * {@link refuse}.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const makeNone = (): Service =>\n make({\n list: Effect.fn(\"DispatchReader.list\")(() => Effect.fail(refuse())),\n fires: Effect.fn(\"DispatchReader.fires\")(() => Effect.fail(refuse()))\n })\n\n/**\n * Provides {@link DispatchReader} from an implementation.\n *\n * @category layers\n * @since 1.0.0\n */\nexport const layer = (implementation: Service): Layer.Layer<DispatchReader> =>\n Layer.succeed(DispatchReader)(make(implementation))\n\n/**\n * Provides {@link makeNone}: a reader that refuses both listings because this\n * host serves no trigger store.\n *\n * @category layers\n * @since 1.0.0\n */\nexport const layerNone: Layer.Layer<DispatchReader> = Layer.succeed(DispatchReader)(makeNone())\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA,oBAAuC;AAEvC,0BAA6B;AA2CtB,MAAM,uBAAuB,sBAAQ,QAAiC;AAAA,EAC3E;AACF,EAAE;AAAC;AAQI,MAAM,eAAe;AAUrB,MAAM,SAAS,MAAoB,IAAI,iCAAa,EAAE,OAAO,aAAa,CAAC;AAQ3E,MAAM,OAAO,CAAC,mBAAqC,eAAe,GAAG,cAAc;AASnF,MAAM,WAAW,MACtB,KAAK;AAAA,EACH,MAAM,qBAAO,GAAG,qBAAqB,EAAE,MAAM,qBAAO,KAAK,OAAO,CAAC,CAAC;AAAA,EAClE,OAAO,qBAAO,GAAG,sBAAsB,EAAE,MAAM,qBAAO,KAAK,OAAO,CAAC,CAAC;AACtE,CAAC;AAQI,MAAM,QAAQ,CAAC,mBACpB,oBAAM,QAAQ,cAAc,EAAE,KAAK,cAAc,CAAC;AAS7C,MAAM,YAAyC,oBAAM,QAAQ,cAAc,EAAE,SAAS,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,333 @@
1
+ /** Observational health contracts shared by durable runs and native sessions.
2
+ * @since 1.0.0
3
+ */
4
+ import type * as Evaluator from "@smthrs/model/Evaluator";
5
+ import { Cause, Effect, Schema } from "effect";
6
+ import type { ControlEvent, RunSummary } from "./ControlSchema.ts";
7
+ /** Authoritative subject lifecycle.
8
+ * @category schemas
9
+ * @since 1.0.0
10
+ */
11
+ export declare const SubjectState: Schema.Literals<readonly ["accepted", "running", "parked", "waiting-approval", "completed", "failed", "cancelled", "spawning", "exited"]>;
12
+ /** Authoritative subject lifecycle.
13
+ * @category models
14
+ * @since 1.0.0
15
+ */
16
+ export type SubjectState = typeof SubjectState.Type;
17
+ /** Health vocabulary shared with Monitor.
18
+ * @category schemas
19
+ * @since 1.0.0
20
+ */
21
+ export declare const HealthState: Schema.Literals<readonly ["healthy", "stalled", "wedged-node", "runaway-loop", "awaiting-human", "failing", "unknown"]>;
22
+ /** Derived subject health.
23
+ * @category models
24
+ * @since 1.0.0
25
+ */
26
+ export type HealthState = typeof HealthState.Type;
27
+ /** Only explicit semantic checks establish activity.
28
+ * @category schemas
29
+ * @since 1.0.0
30
+ */
31
+ export declare const Activity: Schema.Literals<readonly ["working", "idle", "needs-input", "unknown"]>;
32
+ /** Semantic activity.
33
+ * @category models
34
+ * @since 1.0.0
35
+ */
36
+ export type Activity = typeof Activity.Type;
37
+ /** Attention never confers permission to act. `needs-resume` is a run parked over
38
+ * executions its owner released: nothing restarts them until `smthrs runs resume`.
39
+ * @category schemas
40
+ * @since 1.0.0
41
+ */
42
+ export declare const Attention: Schema.Literals<readonly ["none", "awaiting-approval", "needs-input", "needs-resume", "unhealthy"]>;
43
+ /** Human attention.
44
+ * @category models
45
+ * @since 1.0.0
46
+ */
47
+ export type Attention = typeof Attention.Type;
48
+ /** Whether a successful reading still describes this subject.
49
+ * @category schemas
50
+ * @since 1.0.0
51
+ */
52
+ export declare const Freshness: Schema.Literals<readonly ["fresh", "stale", "unobserved"]>;
53
+ /** Reading freshness.
54
+ * @category models
55
+ * @since 1.0.0
56
+ */
57
+ export type Freshness = typeof Freshness.Type;
58
+ /** Public reasons; arbitrary exception text and terminal bytes never cross this boundary.
59
+ * @category schemas
60
+ * @since 1.0.0
61
+ */
62
+ export declare const ReasonCode: Schema.Literals<readonly ["ok", "no-progress", "awaiting-reply", "prompt-detected", "quota-wait", "timer-wait", "event-wait", "released", "unreachable", "probe-timeout", "probe-error", "owner-changed"]>;
63
+ /** Public reason code.
64
+ * @category models
65
+ * @since 1.0.0
66
+ */
67
+ export type ReasonCode = typeof ReasonCode.Type;
68
+ /** Validated checker output, containing no authority or ordering fields.
69
+ * @category schemas
70
+ * @since 1.0.0
71
+ */
72
+ export declare const ProbeReport: Schema.Struct<{
73
+ readonly activity: Schema.Literals<readonly ["working", "idle", "needs-input", "unknown"]>;
74
+ readonly reason: Schema.optional<Schema.Literals<readonly ["ok", "no-progress", "awaiting-reply", "prompt-detected", "quota-wait", "timer-wait", "event-wait", "released", "unreachable", "probe-timeout", "probe-error", "owner-changed"]>>;
75
+ }>;
76
+ /** Validated checker output.
77
+ * @category models
78
+ * @since 1.0.0
79
+ */
80
+ export type ProbeReport = typeof ProbeReport.Type;
81
+ /** A host-stamped observation; its journal sequence is supplied by the durable writer.
82
+ * @category schemas
83
+ * @since 1.0.0
84
+ */
85
+ export declare const HealthObservation: Schema.Struct<{
86
+ readonly subjectId: Schema.String;
87
+ readonly state: Schema.Literals<readonly ["accepted", "running", "parked", "waiting-approval", "completed", "failed", "cancelled", "spawning", "exited"]>;
88
+ readonly checkerId: Schema.String;
89
+ readonly monitorId: Schema.String;
90
+ readonly incarnation: Schema.String;
91
+ readonly evidenceSeq: Schema.Int;
92
+ readonly observedAt: Schema.Int;
93
+ readonly expiresAt: Schema.Int;
94
+ readonly durationMs: Schema.Int;
95
+ readonly baseHealth: Schema.optional<Schema.Literals<readonly ["healthy", "stalled", "wedged-node", "runaway-loop", "awaiting-human", "failing", "unknown"]>>;
96
+ readonly outcome: Schema.Literals<readonly ["ok", "timeout", "error", "interrupted", "discarded"]>;
97
+ readonly report: Schema.optional<Schema.Struct<{
98
+ readonly activity: Schema.Literals<readonly ["working", "idle", "needs-input", "unknown"]>;
99
+ readonly reason: Schema.optional<Schema.Literals<readonly ["ok", "no-progress", "awaiting-reply", "prompt-detected", "quota-wait", "timer-wait", "event-wait", "released", "unreachable", "probe-timeout", "probe-error", "owner-changed"]>>;
100
+ }>>;
101
+ readonly reason: Schema.optional<Schema.Literals<readonly ["ok", "no-progress", "awaiting-reply", "prompt-detected", "quota-wait", "timer-wait", "event-wait", "released", "unreachable", "probe-timeout", "probe-error", "owner-changed"]>>;
102
+ }>;
103
+ /** A host-stamped observation.
104
+ * @category models
105
+ * @since 1.0.0
106
+ */
107
+ export type HealthObservation = typeof HealthObservation.Type;
108
+ /** One observation with its authoritative publication order.
109
+ * @category models
110
+ * @since 1.0.0
111
+ */
112
+ export interface RecordedObservation {
113
+ readonly observation: HealthObservation;
114
+ readonly sequence: number;
115
+ }
116
+ /** The additive wire contract rendered by every status surface.
117
+ * @category schemas
118
+ * @since 1.0.0
119
+ */
120
+ export declare const StatusRollup: Schema.Struct<{
121
+ readonly subjectId: Schema.String;
122
+ readonly state: Schema.Literals<readonly ["accepted", "running", "parked", "waiting-approval", "completed", "failed", "cancelled", "spawning", "exited"]>;
123
+ readonly activity: Schema.Literals<readonly ["working", "idle", "needs-input", "unknown"]>;
124
+ readonly health: Schema.Literals<readonly ["healthy", "stalled", "wedged-node", "runaway-loop", "awaiting-human", "failing", "unknown"]>;
125
+ readonly attention: Schema.Literals<readonly ["none", "awaiting-approval", "needs-input", "needs-resume", "unhealthy"]>;
126
+ readonly freshness: Schema.Literals<readonly ["fresh", "stale", "unobserved"]>;
127
+ readonly reason: Schema.optional<Schema.Literals<readonly ["ok", "no-progress", "awaiting-reply", "prompt-detected", "quota-wait", "timer-wait", "event-wait", "released", "unreachable", "probe-timeout", "probe-error", "owner-changed"]>>;
128
+ readonly provenance: Schema.optional<Schema.Struct<{
129
+ readonly checkerId: Schema.String;
130
+ readonly monitorId: Schema.String;
131
+ readonly observedAt: Schema.Int;
132
+ readonly expiresAt: Schema.Int;
133
+ readonly evidenceSeq: Schema.Int;
134
+ readonly incarnation: Schema.String;
135
+ readonly version: Schema.Int;
136
+ }>>;
137
+ readonly updatedAt: Schema.Int;
138
+ }>;
139
+ /** The additive wire contract.
140
+ * @category models
141
+ * @since 1.0.0
142
+ */
143
+ export type StatusRollup = typeof StatusRollup.Type;
144
+ /** Durable event type for observational health.
145
+ * @category constants
146
+ * @since 1.0.0
147
+ */
148
+ export declare const statusObservedEventType = "control.status.observed";
149
+ /** Opaque identity of the authoritative run ownership and lifecycle point being observed.
150
+ * Equality is meaningful; lexical or numeric ordering is not.
151
+ * @category getters
152
+ * @since 1.0.0
153
+ */
154
+ export declare const runIncarnation: (run: RunSummary) => string;
155
+ /** Read-only evidence, deliberately excluding mutation ports and terminal text by default.
156
+ * Checkers are trusted host TypeScript, not a sandbox: captured ambient authority remains their author's responsibility.
157
+ * @category models
158
+ * @since 1.0.0
159
+ */
160
+ export interface ProbeContext {
161
+ readonly subjectId: string;
162
+ readonly state: SubjectState;
163
+ readonly events: ReadonlyArray<ControlEvent>;
164
+ readonly summary?: RunSummary | undefined;
165
+ readonly session?: {
166
+ readonly alive: boolean;
167
+ readonly exitCode: number | null;
168
+ readonly outputCursor: number;
169
+ readonly outputTail?: string | undefined;
170
+ } | undefined;
171
+ readonly sinceCursor: number;
172
+ }
173
+ /** Bounded polling, expiry and failure backoff.
174
+ * @category models
175
+ * @since 1.0.0
176
+ */
177
+ export interface CheckPolicy {
178
+ readonly intervalMs: number;
179
+ readonly timeoutMs: number;
180
+ readonly ttlMs: number;
181
+ /** Grace for silent work before the flow host considers missing progress unhealthy. */
182
+ readonly stallAfterMs: number;
183
+ readonly backoff: {
184
+ readonly initialMs: number;
185
+ readonly maxMs: number;
186
+ readonly factor: number;
187
+ };
188
+ }
189
+ /** Trusted host checker; supply service requirements around its Effect before registration.
190
+ * @category models
191
+ * @since 1.0.0
192
+ */
193
+ export interface HealthChecker<C = unknown> {
194
+ readonly id: string;
195
+ readonly configSchema?: Schema.Codec<C, unknown> | undefined;
196
+ readonly defaults?: Partial<CheckPolicy> | undefined;
197
+ readonly probe: (context: ProbeContext, config: C) => Effect.Effect<ProbeReport, unknown>;
198
+ }
199
+ /** Data may select a registered checker but never executable code.
200
+ * @category models
201
+ * @since 1.0.0
202
+ */
203
+ export interface HealthBinding {
204
+ readonly checkerId: string;
205
+ readonly config?: unknown;
206
+ readonly policy?: Partial<CheckPolicy> | undefined;
207
+ readonly exposeOutput?: boolean | undefined;
208
+ }
209
+ /** Trusted host health configuration.
210
+ * @category models
211
+ * @since 1.0.0
212
+ */
213
+ export interface HealthConfig {
214
+ readonly checkers?: ReadonlyArray<HealthChecker<any>> | undefined;
215
+ readonly bindings?: Readonly<Record<string, HealthBinding>> | undefined;
216
+ readonly limits?: {
217
+ readonly maxSubjects?: number;
218
+ readonly maxConcurrentProbes?: number;
219
+ } | undefined;
220
+ }
221
+ /** Fully admitted checker binding.
222
+ * @category models
223
+ * @since 1.0.0
224
+ */
225
+ export interface ResolvedCheck {
226
+ readonly checker: HealthChecker<any>;
227
+ readonly config: unknown;
228
+ readonly policy: CheckPolicy;
229
+ readonly exposeOutput: boolean;
230
+ }
231
+ /** Host registry, built once before admitting subjects.
232
+ * @category models
233
+ * @since 1.0.0
234
+ */
235
+ export interface Registry {
236
+ readonly resolve: (key: string) => ResolvedCheck;
237
+ readonly limits: {
238
+ readonly maxSubjects: number;
239
+ readonly maxConcurrentProbes: number;
240
+ };
241
+ }
242
+ declare const HealthConfigurationError_base: Schema.Class<HealthConfigurationError, Schema.TaggedStruct<"HealthConfigurationError", {
243
+ readonly reason: Schema.Literals<readonly ["invalid-policy", "invalid-checker", "invalid-config"]>;
244
+ }>, Cause.YieldableError>;
245
+ /** Invalid trusted configuration fails startup instead of silently running another policy.
246
+ * @category errors
247
+ * @since 1.0.0
248
+ */
249
+ export declare class HealthConfigurationError extends HealthConfigurationError_base {
250
+ }
251
+ /** Safe cadence used by unconfigured hosts.
252
+ * @category constants
253
+ * @since 1.0.0
254
+ */
255
+ export declare const defaultPolicy: CheckPolicy;
256
+ /** A known engine wait is a lifecycle fact, not missing progress.
257
+ * @category getters
258
+ * @since 1.0.0
259
+ */
260
+ export declare const waitReason: (state: SubjectState, waitingReason?: string) => ReasonCode | undefined;
261
+ /** Flow default observes lifecycle without inventing semantic activity.
262
+ * @category constants
263
+ * @since 1.0.0
264
+ */
265
+ export declare const lifecycleRunChecker: HealthChecker;
266
+ /** Session default never interprets silence or output movement as task activity.
267
+ * @category constants
268
+ * @since 1.0.0
269
+ */
270
+ export declare const lifecycleSessionChecker: HealthChecker;
271
+ /** Checkers every host may bind by id, beyond the lifecycle default it always has.
272
+ *
273
+ * Registration is not a binding. A host opts in by naming one of these as a
274
+ * `HealthBinding.checkerId`; a host that names none keeps the lifecycle
275
+ * default, and no entry here is ever consulted for an unbound subject.
276
+ *
277
+ * @category constants
278
+ * @since 1.0.0
279
+ */
280
+ export declare const registeredCheckers: ReadonlyArray<HealthChecker<any>>;
281
+ /** Admit a host registry and all configured bindings. Unknown checker ids use the lifecycle default.
282
+ * @category constructors
283
+ * @since 1.0.0
284
+ */
285
+ export declare const makeRegistry: (config?: HealthConfig, kind?: "run" | "session", evaluator?: Evaluator.Evaluator) => Registry;
286
+ /** Failure delay, bounded even when a subject has failed for a long time.
287
+ * @category getters
288
+ * @since 1.0.0
289
+ */
290
+ export declare const nextDelay: (policy: CheckPolicy, consecutiveFailures: number) => number;
291
+ /** Host-only ordering stamp captured before a probe.
292
+ * @category models
293
+ * @since 1.0.0
294
+ */
295
+ export interface ObservationStamp {
296
+ readonly monitorId: string;
297
+ readonly incarnation: string;
298
+ readonly evidenceSeq: number;
299
+ }
300
+ /** Evaluate one trusted checker with bounded timeout and safe failure values. Scope interruption propagates.
301
+ * The host must still compare current ownership/lifecycle before durably publishing the returned observation.
302
+ * @category constructors
303
+ * @since 1.0.0
304
+ */
305
+ export declare const evaluate: (check: ResolvedCheck, context: ProbeContext, stamp: ObservationStamp) => Effect.Effect<HealthObservation>;
306
+ /** Select evidence for the current opaque owner incarnation, breaking equal evidence ties by durable sequence.
307
+ * @category projections
308
+ * @since 1.0.0
309
+ */
310
+ export declare const latestObservation: (candidates: ReadonlyArray<RecordedObservation>, subjectId: string, incarnation: string) => RecordedObservation | undefined;
311
+ /** Authoritative facts supplied independently of checker output.
312
+ * @category models
313
+ * @since 1.0.0
314
+ */
315
+ export interface RollupInput {
316
+ readonly subjectId: string;
317
+ readonly state: SubjectState;
318
+ readonly incarnation: string;
319
+ readonly waitingReason?: string | undefined;
320
+ readonly exitCode?: number | null | undefined;
321
+ readonly baseHealth?: HealthState | undefined;
322
+ readonly latest?: RecordedObservation | undefined;
323
+ readonly evidenceSeq?: number | undefined;
324
+ readonly now: number;
325
+ readonly updatedAt: number;
326
+ }
327
+ /** Pure precedence: lifecycle and approvals win, and stale probes never establish activity.
328
+ * @category projections
329
+ * @since 1.0.0
330
+ */
331
+ export declare const rollup: (input: RollupInput) => StatusRollup;
332
+ export {};
333
+ //# sourceMappingURL=Health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Health.d.ts","sourceRoot":"","sources":["../../src/Health.ts"],"names":[],"mappings":"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"}