brass-runtime 1.15.0 → 1.16.1

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 (209) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +673 -136
  3. package/dist/agent/cli/main.cjs +40 -35
  4. package/dist/agent/cli/main.js +9 -4
  5. package/dist/agent/cli/main.mjs +9 -4
  6. package/dist/agent/index.cjs +8 -4
  7. package/dist/agent/index.d.ts +1 -1
  8. package/dist/agent/index.js +7 -3
  9. package/dist/agent/index.mjs +7 -3
  10. package/dist/chunk-2HQTDLHF.mjs +683 -0
  11. package/dist/chunk-36I3M4UC.mjs +370 -0
  12. package/dist/chunk-3AYM6WPJ.js +1629 -0
  13. package/dist/chunk-3LOYJFRR.cjs +300 -0
  14. package/dist/chunk-3RG5ZIWI.js +10 -0
  15. package/dist/chunk-3Y2RIUMM.js +300 -0
  16. package/dist/{chunk-VEZNF5GZ.cjs → chunk-4ROBZFL6.cjs} +130 -126
  17. package/dist/{chunk-3QMOKAS5.js → chunk-52OB2ROS.js} +9 -5
  18. package/dist/chunk-52PPNNI4.cjs +416 -0
  19. package/dist/chunk-5EC274J5.cjs +2874 -0
  20. package/dist/chunk-5QC7LRZ3.js +229 -0
  21. package/dist/chunk-5VRJNBLZ.mjs +2874 -0
  22. package/dist/chunk-62AZW6UT.cjs +313 -0
  23. package/dist/chunk-6IXXWIUM.js +683 -0
  24. package/dist/chunk-74ZTY6CP.js +2871 -0
  25. package/dist/chunk-76YMRMH2.cjs +777 -0
  26. package/dist/chunk-7CMJS3QE.mjs +2871 -0
  27. package/dist/{chunk-4NHES7VK.mjs → chunk-7JIJOVCT.js} +27 -13
  28. package/dist/chunk-A2OM6NEH.mjs +194 -0
  29. package/dist/chunk-AGR5B2BC.cjs +683 -0
  30. package/dist/chunk-AVNQLJ5V.js +777 -0
  31. package/dist/chunk-B33ICAKP.js +313 -0
  32. package/dist/{chunk-ELOOF35R.mjs → chunk-B5JD23U7.mjs} +1 -1
  33. package/dist/chunk-BABBZK4Y.js +2024 -0
  34. package/dist/chunk-C3MDXTRZ.js +354 -0
  35. package/dist/chunk-CIZFIMK5.js +2193 -0
  36. package/dist/chunk-CZIVE6NT.cjs +354 -0
  37. package/dist/chunk-DNFJLJMW.mjs +354 -0
  38. package/dist/chunk-DNFO2EIZ.mjs +777 -0
  39. package/dist/chunk-EJ6BPYVR.mjs +416 -0
  40. package/dist/chunk-ENKODRU3.cjs +2193 -0
  41. package/dist/chunk-EOC4UHBS.mjs +229 -0
  42. package/dist/{chunk-BMH5AV44.js → chunk-FH2X7BVP.js} +756 -440
  43. package/dist/{chunk-PPUXIH5R.js → chunk-FHQGHPMO.mjs} +27 -13
  44. package/dist/{chunk-TGIFUAK4.cjs → chunk-GLE2WY7Z.cjs} +951 -635
  45. package/dist/{chunk-BDF4AMWX.mjs → chunk-GYM3LLGS.mjs} +756 -440
  46. package/dist/chunk-HLWLMW2F.mjs +2024 -0
  47. package/dist/chunk-JF5WGYJJ.cjs +194 -0
  48. package/dist/chunk-KH4SYAOS.mjs +1629 -0
  49. package/dist/chunk-KN32XNTH.mjs +313 -0
  50. package/dist/chunk-KQLYONSE.cjs +2871 -0
  51. package/dist/{chunk-STVLQ3XD.cjs → chunk-KZJQ723N.cjs} +92 -78
  52. package/dist/chunk-L2SYFEBS.js +194 -0
  53. package/dist/chunk-L6VB5N7Q.cjs +104 -0
  54. package/dist/{chunk-K6M7MDZ4.mjs → chunk-MBEJI5HF.mjs} +9 -5
  55. package/dist/chunk-MIIYDLGM.js +2874 -0
  56. package/dist/chunk-MOO4L7F4.mjs +104 -0
  57. package/dist/chunk-MT3OWDPC.mjs +2193 -0
  58. package/dist/chunk-MVGUEJ5Z.cjs +370 -0
  59. package/dist/chunk-OBGZSXTJ.cjs +10 -0
  60. package/dist/chunk-PD4EJTQC.cjs +229 -0
  61. package/dist/chunk-PWC3RBQE.mjs +300 -0
  62. package/dist/chunk-Q2I37RP3.cjs +1629 -0
  63. package/dist/chunk-RKGKFN2A.js +416 -0
  64. package/dist/{chunk-R3R2FVLG.cjs → chunk-SA6HUJVI.cjs} +5 -5
  65. package/dist/chunk-TRM4JUZQ.js +104 -0
  66. package/dist/chunk-UB4B6OFY.js +370 -0
  67. package/dist/{chunk-TO7IKXYT.js → chunk-UCUBNWM2.js} +1 -1
  68. package/dist/chunk-VN44DYYT.cjs +2024 -0
  69. package/dist/chunk-Y6FXYEAI.mjs +10 -0
  70. package/dist/client-CZHU674n.d.ts +820 -0
  71. package/dist/core/index.cjs +198 -4
  72. package/dist/core/index.d.ts +311 -212
  73. package/dist/core/index.js +237 -43
  74. package/dist/core/index.mjs +237 -43
  75. package/dist/{effect-CMOQKX8y.d.ts → effect-DIUHZ9IN.d.ts} +195 -1
  76. package/dist/effectRunner-CFLC32IK.cjs +8 -0
  77. package/dist/effectRunner-L4S7IPT3.js +8 -0
  78. package/dist/effectRunner-NNGG75QA.mjs +8 -0
  79. package/dist/http/index.cjs +1227 -2971
  80. package/dist/http/index.d.ts +826 -280
  81. package/dist/http/index.js +1089 -2833
  82. package/dist/http/index.mjs +1089 -2833
  83. package/dist/http/testing.cjs +161 -0
  84. package/dist/http/testing.d.ts +43 -0
  85. package/dist/http/testing.js +161 -0
  86. package/dist/http/testing.mjs +161 -0
  87. package/dist/index.cjs +486 -250
  88. package/dist/index.d.ts +87 -95
  89. package/dist/index.js +391 -155
  90. package/dist/index.mjs +391 -155
  91. package/dist/observability/index.cjs +162 -0
  92. package/dist/observability/index.d.ts +152 -0
  93. package/dist/observability/index.js +162 -0
  94. package/dist/observability/index.mjs +162 -0
  95. package/dist/perf/cli.cjs +401 -0
  96. package/dist/perf/cli.d.ts +1 -0
  97. package/dist/perf/cli.js +401 -0
  98. package/dist/perf/cli.mjs +401 -0
  99. package/dist/perf/index.cjs +141 -0
  100. package/dist/perf/index.d.ts +483 -0
  101. package/dist/perf/index.js +141 -0
  102. package/dist/perf/index.mjs +141 -0
  103. package/dist/schedule-CK3Ml_7p.d.ts +259 -0
  104. package/dist/schema/index.cjs +29 -0
  105. package/dist/schema/index.d.ts +179 -0
  106. package/dist/schema/index.js +29 -0
  107. package/dist/schema/index.mjs +29 -0
  108. package/dist/server-GJPg8ZSG.d.ts +675 -0
  109. package/dist/{stream-FQm9h4Mg.d.ts → stream-B4oK9JFP.d.ts} +1 -1
  110. package/dist/tracer-Hwt1cl7h.d.ts +189 -0
  111. package/dist/tracing-DqbTKGcf.d.ts +148 -0
  112. package/docs/ARCHITECTURE.md +292 -0
  113. package/docs/README.md +63 -0
  114. package/docs/adr/0001-ai-context-pack.md +32 -0
  115. package/docs/agent-apply-mode.md +104 -0
  116. package/docs/agent-approvals.md +110 -0
  117. package/docs/agent-batch.md +185 -0
  118. package/docs/agent-boundaries.md +112 -0
  119. package/docs/agent-chat-sessions.md +160 -0
  120. package/docs/agent-ci.md +17 -0
  121. package/docs/agent-cli.md +405 -0
  122. package/docs/agent-config.md +480 -0
  123. package/docs/agent-context-discovery.md +159 -0
  124. package/docs/agent-copilot-like-dx.md +126 -0
  125. package/docs/agent-declarative-optimized-planning.md +138 -0
  126. package/docs/agent-dx.md +224 -0
  127. package/docs/agent-env-files.md +126 -0
  128. package/docs/agent-follow-up-context.md +43 -0
  129. package/docs/agent-global-usage.md +180 -0
  130. package/docs/agent-init.md +109 -0
  131. package/docs/agent-install-and-configure.md +516 -0
  132. package/docs/agent-language-workspace-ux.md +99 -0
  133. package/docs/agent-llm-adapters.md +123 -0
  134. package/docs/agent-local-install.md +190 -0
  135. package/docs/agent-local-tests.md +51 -0
  136. package/docs/agent-observability.md +155 -0
  137. package/docs/agent-patch-quality-loop.md +162 -0
  138. package/docs/agent-presets.md +22 -0
  139. package/docs/agent-project-commands.md +237 -0
  140. package/docs/agent-project-intelligence.md +156 -0
  141. package/docs/agent-redaction.md +18 -0
  142. package/docs/agent-release-readiness.md +76 -0
  143. package/docs/agent-rollback-safety.md +162 -0
  144. package/docs/agent-rollback.md +23 -0
  145. package/docs/agent-run-artifacts.md +16 -0
  146. package/docs/agent-vscode-auto-discovery.md +137 -0
  147. package/docs/agent-vscode-batch-runner.md +100 -0
  148. package/docs/agent-vscode-chat-layout.md +90 -0
  149. package/docs/agent-vscode-clean-install.md +147 -0
  150. package/docs/agent-vscode-code-actions.md +70 -0
  151. package/docs/agent-vscode-diff-preview.md +45 -0
  152. package/docs/agent-vscode-inline-assist.md +56 -0
  153. package/docs/agent-vscode-install.md +186 -0
  154. package/docs/agent-vscode-model-setup.md +97 -0
  155. package/docs/agent-vscode-patch-preview.md +92 -0
  156. package/docs/agent-vscode-problems.md +79 -0
  157. package/docs/agent-vscode-project-dashboard.md +106 -0
  158. package/docs/agent-vscode-run-history.md +92 -0
  159. package/docs/agent-vscode-ux.md +73 -0
  160. package/docs/ai/INVARIANTS.md +84 -0
  161. package/docs/ai/PROJECT_MAP.md +338 -0
  162. package/docs/ai/PUBLIC_API.md +336 -0
  163. package/docs/ai/VALIDATION_MATRIX.md +67 -0
  164. package/docs/api-polish.md +37 -0
  165. package/docs/cancellation.md +162 -0
  166. package/docs/coverage.md +46 -0
  167. package/docs/getting-started.md +159 -0
  168. package/docs/guides/README.md +40 -0
  169. package/docs/guides/circuit-breaker.md +89 -0
  170. package/docs/guides/error-handling.md +91 -0
  171. package/docs/guides/getting-started.md +107 -0
  172. package/docs/guides/layers.md +189 -0
  173. package/docs/guides/metrics.md +101 -0
  174. package/docs/guides/resource-management.md +141 -0
  175. package/docs/guides/retry.md +215 -0
  176. package/docs/guides/semaphore.md +66 -0
  177. package/docs/guides/streams.md +117 -0
  178. package/docs/guides/supervisors.md +98 -0
  179. package/docs/guides/testing.md +162 -0
  180. package/docs/guides/tracing.md +71 -0
  181. package/docs/http-recipes.md +399 -0
  182. package/docs/http.md +749 -0
  183. package/docs/modules.md +285 -0
  184. package/docs/observability-collector-smoke.md +31 -0
  185. package/docs/observability-framework-examples.md +98 -0
  186. package/docs/observability.md +542 -0
  187. package/docs/otel-collector-smoke.yaml +27 -0
  188. package/docs/performance-profiler.md +199 -0
  189. package/docs/production-readiness.md +73 -0
  190. package/docs/recipes/README.md +12 -0
  191. package/docs/recipes/http-server.md +45 -0
  192. package/docs/recipes/layers.md +44 -0
  193. package/docs/recipes/performance.md +47 -0
  194. package/docs/recipes/runtime.md +41 -0
  195. package/docs/recipes/testing.md +41 -0
  196. package/docs/release.md +53 -0
  197. package/docs/wasm-bounded-queues.md +44 -0
  198. package/docs/wasm-engine-observability-benchmarks.md +85 -0
  199. package/docs/wasm-fiber-engine.md +117 -0
  200. package/docs/wasm-scheduler-state-machine.md +122 -0
  201. package/docs/wasm-stream-chunks.md +54 -0
  202. package/package.json +48 -2
  203. package/dist/chunk-AR22SXML.js +0 -1043
  204. package/dist/chunk-BDYEENHT.js +0 -224
  205. package/dist/chunk-JFPU5GQI.mjs +0 -1043
  206. package/dist/chunk-MS34J5LY.cjs +0 -224
  207. package/dist/chunk-UMAZLXAB.mjs +0 -224
  208. package/dist/chunk-XPZNXSVN.cjs +0 -1043
  209. package/dist/tracing-DNT9jEbr.d.ts +0 -106
@@ -1,6 +1,9 @@
1
- import { A as Async, E as Exit, aa as Runtime } from '../effect-CMOQKX8y.js';
2
- export { n as AbortablePromiseFinish, o as AbortablePromiseLabelStats, p as AbortablePromiseOptions, q as AbortablePromiseOutcome, r as AbortablePromiseStats, t as AsyncWithPromise, C as CancelToken, v as Canceler, w as Cause, b as Fiber, c as FiberId, d as FiberStatus, _ as Interrupted, a1 as None, a2 as NoopHooks, O as Option, R as RuntimeFiber, ad as RuntimeOptions, S as Scope, ak as ScopeId, al as Some, Z as ZIO, aq as abortablePromiseStats, ar as acquireRelease, as as async, at as asyncCatchAll, au as asyncFail, av as asyncFlatMap, aw as asyncFold, ax as asyncInterruptible, ay as asyncMap, az as asyncMapError, aA as asyncSucceed, aB as asyncSync, aC as asyncTotal, aD as catchAll, aE as end, aG as fail, aH as flatMap, aI as fork, aJ as fromPromiseAbortable, aK as getBenchmarkBudget, aL as getCurrentFiber, aP as linkAbortController, aR as makeCancelToken, aS as map, aT as mapAsync, aU as mapError, aV as mapTryAsync, aW as none, aX as orElseOptional, aY as resetAbortablePromiseStats, a_ as runtimeForCaller, b1 as setBenchmarkBudget, b2 as some, b3 as succeed, b4 as sync, b5 as toPromise, b6 as toPromiseByCaller, b7 as unit, b8 as unsafeGetCurrentRuntime, b9 as unsafeRunAsync, ba as unsafeRunFoldWithEnv, bb as withAsyncPromise, bc as withCurrentFiber, bd as withScope, be as withScopeAsync } from '../effect-CMOQKX8y.js';
3
- export { C as CircuitBreaker, a as CircuitBreakerConfig, b as CircuitBreakerError, c as CircuitBreakerState, d as CircuitBreakerStats, S as Span, e as SpanContext, f as SpanEvent, g as SpanStatus, T as Tracer, h as TracerConfig, m as makeCircuitBreaker, i as makeTracer } from '../tracing-DNT9jEbr.js';
1
+ import { A as Async, h as RuntimeOptions, f as Runtime, E as Exit, aI as Task, ax as ScheduleResult, aC as SchedulerStats, R as RuntimeHooks, d as RuntimeEventRecord, g as RuntimeRegistry, k as Fiber } from '../effect-DIUHZ9IN.js';
2
+ export { u as AbortablePromiseFinish, v as AbortablePromiseLabelStats, w as AbortablePromiseOptions, x as AbortablePromiseOutcome, y as AbortablePromiseStats, C as AsyncWithPromise, G as CancelToken, H as Canceler, I as Cause, K as CausePrettyOptions, L as ContextNode, _ as FiberContext, l as FiberId, a0 as FiberInfo, a4 as FiberRunState, m as FiberStatus, ag as Interrupted, ah as InterruptibilityMode, J as JSONValue, ak as None, al as NoopHooks, O as Option, ar as RestoreInterruptibility, a as RuntimeEmitContext, c as RuntimeEvent, i as RuntimeFiber, e as RuntimeSpanLink, S as Scope, aE as ScopeId, aF as ScopeInfo, aG as Some, T as TraceContext, Z as ZIO, aL as abortablePromiseStats, aM as acquireRelease, aN as async, aO as asyncCatchAll, aP as asyncFail, aQ as asyncFlatMap, aR as asyncFold, aS as asyncInterruptible, aT as asyncMap, aU as asyncMapError, aV as asyncSucceed, aW as asyncSync, aX as asyncTotal, aY as catchAll, aZ as ctxExtend, a_ as ctxToObject, a$ as emptyContext, b0 as end, b2 as fail, b3 as flatMap, b4 as fork, b5 as formatCause, b6 as fromPromiseAbortable, b7 as getBenchmarkBudget, b8 as getCurrentFiber, bb as interruptible, bc as isCause, be as linkAbortController, bg as makeCancelToken, bi as makeRuntimeEventRecord, bj as map, bk as mapAsync, bl as mapError, bm as mapTryAsync, bn as none, bo as orElseOptional, bp as prettyCause, bq as resetAbortablePromiseStats, bs as runtimeEventRecordContext, bt as runtimeForCaller, bw as setBenchmarkBudget, bx as some, by as succeed, bz as sync, bA as toPromise, bB as toPromiseByCaller, bC as uninterruptible, bD as uninterruptibleMask, bE as unit, bF as unsafeGetCurrentRuntime, bG as unsafeRunAsync, bH as unsafeRunFoldWithEnv, bI as withAsyncPromise, bJ as withCurrentFiber, bK as withScope, bL as withScopeAsync } from '../effect-DIUHZ9IN.js';
3
+ export { M as ManagedResource, R as Resource, R as ResourceDescriptor, S as Span, a as SpanContext, b as SpanEvent, c as SpanStatus, T as Tracer, d as TracerConfig, e as bracket, f as ensuring, m as makeResource, g as makeTracer, h as managed, i as managedAll, r as resource, j as resourceAll, k as resourceFromManaged, l as resourceSucceed, u as useManaged, n as useResource } from '../tracing-DqbTKGcf.js';
4
+ import { R as RuntimeClock, g as RuntimeTimerId, f as RuntimeClockEnv, S as Schedule } from '../schedule-CK3Ml_7p.js';
5
+ export { c as CircuitBreaker, d as CircuitBreakerConfig, C as CircuitBreakerError, e as CircuitBreakerState, b as CircuitBreakerStats, h as ScheduleDecision, i as ScheduleDriver, j as ScheduleDriverDecision, k as ScheduleDriverOptions, l as ScheduleDriverSnapshot, a as ScheduleObserver, m as ScheduleObserverEvent, n as ScheduleStepContext, o as andThenSchedule, p as contramapSchedule, q as elapsed, r as exponential, s as fibonacci, t as fixed, u as forever, v as intersect, w as jitter, x as jittered, y as jitteredSchedule, z as linear, A as liveClock, B as makeCircuitBreaker, D as makeScheduleDriver, E as mapSchedule, F as maxDelay, G as maxElapsed, H as namedSchedule, I as never, J as once, K as pollWithSchedule, L as recurs, M as repeatWithSchedule, N as repeatWithScheduleAlias, O as retryWithSchedule, P as retryWithScheduleAlias, Q as runSchedule, T as runtimeClockFromEnv, U as scheduleDriver, V as spaced, W as takeSchedule, X as tapDecision, Y as union, Z as untilInput, _ as untilOutput, $ as upTo, a0 as whileInput, a1 as whileOutput, a2 as windowed } from '../schedule-CK3Ml_7p.js';
6
+ export { B as BrassEnv, C as Counter, E as EventBus, f as EventBusOptions, g as EventHandler, G as Gauge, H as Histogram, h as HistogramBuckets, I as InMemoryTracer, e as InMemoryTracerOptions, i as InMemoryTracerStats, a as MetricExemplar, b as MetricSnapshot, j as MetricType, k as MetricValue, M as MetricsRegistry, R as RuntimeSpan, l as RuntimeSpanEvent, d as RuntimeTraceIdGenerator, m as defaultTracer, n as makeMetrics, r as runtimeHooksToEventHandler } from '../tracer-Hwt1cl7h.js';
4
7
 
5
8
  type TimeoutError = {
6
9
  readonly _tag: "TimeoutError";
@@ -67,73 +70,29 @@ declare function retryWithBackoff<R, E, A>(effect: Async<R, E, A>, opts?: {
67
70
  shouldRetry?: (error: unknown, attempt: number) => boolean;
68
71
  }): Async<R, E, A>;
69
72
 
73
+ type EffectSuccess<T> = T extends Async<any, any, infer A> ? A : never;
74
+ type EffectFailure<T> = T extends Async<any, infer E, any> ? E : never;
75
+ type EffectEnvironment<T> = T extends Async<infer R, any, any> ? R : never;
76
+ type MakeRuntimeOptions<R> = Omit<RuntimeOptions<R>, "env">;
70
77
  /**
71
- * Acquires a resource, uses it, and guarantees release regardless of outcome.
78
+ * Create a runtime with a compact options shape.
72
79
  *
73
- * - `acquire` runs uninterruptibly (once started, it completes)
74
- * - `use` runs with the acquired resource
75
- * - `release` runs after `use` completes (success, failure, or interruption)
76
- *
77
- * ```ts
78
- * const result = bracket(
79
- * openConnection(), // acquire
80
- * (conn) => queryDatabase(conn), // use
81
- * (conn, exit) => conn.close() // release (always runs)
82
- * );
83
- * ```
84
- */
85
- declare function bracket<R, E, A, B>(acquire: Async<R, E, A>, use: (resource: A) => Async<R, E, B>, release: (resource: A, exit: Exit<E, B>) => Async<R, any, void>): Async<R, E, B>;
86
- /**
87
- * Runs `effect` and then runs `finalizer` regardless of the outcome.
88
- * The finalizer receives the exit value for inspection.
89
- *
90
- * ```ts
91
- * const result = ensuring(
92
- * doWork(),
93
- * (exit) => logCompletion(exit)
94
- * );
95
- * ```
80
+ * This is an additive DX helper over `new Runtime({ env, ...options })`.
96
81
  */
97
- declare function ensuring<R, E, A>(effect: Async<R, E, A>, finalizer: (exit: Exit<E, A>) => Async<R, any, void>): Async<R, E, A>;
82
+ declare function makeRuntime<R extends object = {}>(env?: R, options?: MakeRuntimeOptions<R>): Runtime<R>;
98
83
  /**
99
- * A Managed resource describes how to acquire and release a resource.
100
- * It can be used multiple times — each `use` call acquires a fresh instance.
101
- *
102
- * ```ts
103
- * const dbPool = managed(
104
- * createPool({ max: 10 }),
105
- * (pool) => pool.close()
106
- * );
84
+ * Run an effect and resolve with its success value.
107
85
  *
108
- * // Use it:
109
- * const result = useManaged(dbPool, (pool) => pool.query("SELECT 1"));
110
- * ```
111
- */
112
- type Managed<R, E, A> = {
113
- readonly _tag: "Managed";
114
- readonly acquire: Async<R, E, A>;
115
- readonly release: (resource: A, exit: Exit<any, any>) => Async<R, any, void>;
116
- };
117
- /**
118
- * Creates a Managed resource descriptor.
86
+ * Accepts either a plain environment or an existing Runtime. For advanced
87
+ * lifecycle/hooks/scheduler behavior, pass the Runtime explicitly.
119
88
  */
120
- declare function managed<R, E, A>(acquire: Async<R, E, A>, release: (resource: A, exit?: Exit<any, any>) => Async<R, any, void>): Managed<R, E, A>;
89
+ declare function runPromise<R, E, A>(effect: Async<R, E, A>, envOrRuntime?: R | Runtime<R>): Promise<A>;
121
90
  /**
122
- * Uses a Managed resource: acquires, runs the body, and releases.
91
+ * Run an effect and resolve with the full Exit, preserving typed failures and
92
+ * Cause structure instead of throwing/rejecting.
123
93
  */
124
- declare function useManaged<R, E, A, B>(m: Managed<R, E, A>, body: (resource: A) => Async<R, E, B>): Async<R, E, B>;
125
- /**
126
- * Combines multiple Managed resources. All are acquired in order,
127
- * and released in reverse order (LIFO).
128
- *
129
- * ```ts
130
- * const resources = managedAll([dbPool, cacheConn, fileHandle]);
131
- * const result = useManaged(resources, ([db, cache, file]) => ...);
132
- * ```
133
- */
134
- declare function managedAll<R, E, Resources extends readonly any[]>(manageds: {
135
- [K in keyof Resources]: Managed<R, E, Resources[K]>;
136
- }): Managed<R, E, Resources>;
94
+ declare function runExit<R, E, A>(effect: Async<R, E, A>, envOrRuntime?: R | Runtime<R>): Promise<Exit<E, A>>;
95
+ declare const runEffect: typeof runPromise;
137
96
 
138
97
  type Semaphore = {
139
98
  /** Current number of available permits. */
@@ -209,52 +168,28 @@ declare function makeRef<A>(initial: A): Ref<A>;
209
168
  */
210
169
  declare function derivedRef<A, B>(parent: Ref<A>, get: (a: A) => B, set: (a: A, b: B) => A): Ref<B>;
211
170
 
212
- type ScheduleDecision = {
213
- readonly continue: boolean;
214
- readonly delayMs: number;
171
+ type FiberRef<A> = {
172
+ readonly id: number;
173
+ readonly initial: A;
174
+ readonly get: () => Async<unknown, never, A>;
175
+ readonly set: (value: A) => Async<unknown, never, void>;
176
+ readonly update: (f: (current: A) => A) => Async<unknown, never, A>;
177
+ readonly modify: <B>(f: (current: A) => [B, A]) => Async<unknown, never, B>;
178
+ readonly locally: <R, E, B>(value: A, effect: Async<R, E, B>) => Async<R, E, B>;
179
+ readonly locallyWith: <R, E, B>(f: (current: A) => A, effect: Async<R, E, B>) => Async<R, E, B>;
180
+ readonly unsafeGet: () => A;
181
+ readonly unsafeSet: (value: A) => void;
215
182
  };
216
- /**
217
- * A Schedule<I, O> takes an input I (typically the error or output of an effect)
218
- * and decides whether to continue and with what delay.
219
- */
220
- type Schedule<I, O> = {
221
- readonly _tag: "Schedule";
222
- /** Initial state */
223
- readonly initial: () => any;
224
- /** Given current state and input, produce a decision and next state */
225
- readonly step: (state: any, input: I) => [ScheduleDecision, any, O];
226
- };
227
- /** Retry/repeat up to N times with no delay. */
228
- declare function recurs(n: number): Schedule<unknown, number>;
229
- /** Fixed delay between each retry/repeat. */
230
- declare function fixed(delayMs: number): Schedule<unknown, number>;
231
- /** Exponential backoff: delay doubles each time, capped at maxDelayMs. */
232
- declare function exponential(baseMs: number, maxMs?: number): Schedule<unknown, number>;
233
- /** Exponential backoff with full jitter (random in [0, delay]). */
234
- declare function jittered(baseMs: number, maxMs?: number): Schedule<unknown, number>;
235
- /** Stop after a total elapsed time. */
236
- declare function elapsed(maxMs: number): Schedule<unknown, number>;
237
- /** Only continue while a predicate holds on the input. */
238
- declare function whileInput<I>(pred: (input: I) => boolean): Schedule<I, I>;
239
- /** Limit a schedule to N repetitions. */
240
- declare function take<I, O>(schedule: Schedule<I, O>, n: number): Schedule<I, O>;
241
- /** Compose two schedules: use the first, then switch to the second. */
242
- declare function andThen<I, O1, O2>(first: Schedule<I, O1>, second: Schedule<I, O2>): Schedule<I, O1 | O2>;
243
- /** Run both schedules and continue while BOTH say continue. Use max delay. */
244
- declare function intersect<I, O1, O2>(left: Schedule<I, O1>, right: Schedule<I, O2>): Schedule<I, [O1, O2]>;
245
- /** Run both schedules and continue while EITHER says continue. Use min delay. */
246
- declare function union<I, O1, O2>(left: Schedule<I, O1>, right: Schedule<I, O2>): Schedule<I, [O1, O2]>;
247
- /**
248
- * Retry an effect according to a schedule.
249
- * The schedule receives the error as input on each failure.
250
- */
251
- declare function retryWithSchedule<R, E, A, O>(effect: Async<R, E, A>, schedule: Schedule<E, O>): Async<R, E, A>;
252
- /**
253
- * Repeat an effect according to a schedule.
254
- * The schedule receives the success value as input on each iteration.
255
- * Returns the last successful value.
256
- */
257
- declare function repeatWithSchedule<R, E, A, O>(effect: Async<R, E, A>, schedule: Schedule<A, O>): Async<R, E, A>;
183
+ declare function makeFiberRef<A>(initial: A): FiberRef<A>;
184
+ declare function getFiberRef<A>(ref: FiberRef<A>): Async<unknown, never, A>;
185
+ declare function setFiberRef<A>(ref: FiberRef<A>, value: A): Async<unknown, never, void>;
186
+ declare function updateFiberRef<A>(ref: FiberRef<A>, f: (current: A) => A): Async<unknown, never, A>;
187
+ declare function modifyFiberRef<A, B>(ref: FiberRef<A>, f: (current: A) => [B, A]): Async<unknown, never, B>;
188
+ declare function locallyFiberRef<R, E, A, B>(ref: FiberRef<A>, value: A, effect: Async<R, E, B>): Async<R, E, B>;
189
+ declare function locallyFiberRefWith<R, E, A, B>(ref: FiberRef<A>, f: (current: A) => A, effect: Async<R, E, B>): Async<R, E, B>;
190
+ declare function unsafeGetFiberRef<A>(ref: FiberRef<A>): A;
191
+ declare function unsafeSetFiberRef<A>(ref: FiberRef<A>, value: A): void;
192
+ declare function fiberRefSnapshot(): ReadonlyMap<number, unknown>;
258
193
 
259
194
  type ShutdownConfig = {
260
195
  /** Max time to wait for in-flight work to complete. Default: 30000ms */
@@ -304,24 +239,92 @@ declare function gracefulShutdown<R>(runtime: Runtime<R>, config?: ShutdownConfi
304
239
  declare function registerShutdownHooks<R>(runtime: Runtime<R>, config?: ShutdownConfig): () => void;
305
240
 
306
241
  type TestRuntimeOptions = {
307
- /** If true, effects run synchronously where possible. Default: true */
242
+ /** Back-compat alias for autoFlush. When false, scheduled tasks only run when flushed. */
308
243
  readonly synchronous?: boolean;
244
+ /** Automatically flush scheduled tasks in a microtask. Default: true. */
245
+ readonly autoFlush?: boolean;
246
+ /** Initial virtual clock time in milliseconds. Default: 0. */
247
+ readonly initialTimeMs?: number;
248
+ /** Safety limit for flushAll/runAllTimers. Default: 10_000. */
249
+ readonly maxSteps?: number;
250
+ };
251
+ type TestScheduledTask = {
252
+ readonly tag: string;
253
+ readonly run: Task;
254
+ };
255
+ declare class TestScheduler {
256
+ private readonly options;
257
+ private readonly queue;
258
+ private readonly maxSteps;
259
+ private autoFlushScheduled;
260
+ private flushing;
261
+ private enqueuedTasks;
262
+ private executedTasks;
263
+ private droppedTasks;
264
+ private scheduledFlushes;
265
+ private completedFlushes;
266
+ constructor(options?: Pick<TestRuntimeOptions, "autoFlush" | "synchronous" | "maxSteps">);
267
+ schedule(task: Task, tag?: string): ScheduleResult;
268
+ scheduleBatch(tasks: Array<{
269
+ fn: Task;
270
+ tag: string;
271
+ }>): ScheduleResult[];
272
+ stats(): SchedulerStats;
273
+ pending(): readonly TestScheduledTask[];
274
+ size(): number;
275
+ flush(maxTasks?: number): number;
276
+ flushAll(maxSteps?: number): number;
277
+ private requestAutoFlush;
278
+ }
279
+ type TestClockTimerSnapshot = {
280
+ readonly id: number;
281
+ readonly dueAt: number;
282
+ readonly delayMs: number;
283
+ };
284
+ declare class TestClock implements RuntimeClock {
285
+ private readonly flushScheduler;
286
+ private readonly maxSteps;
287
+ private nowMs;
288
+ private nextId;
289
+ private nextSeq;
290
+ private readonly timers;
291
+ constructor(initialTimeMs?: number, flushScheduler?: () => void, maxSteps?: number);
292
+ now(): number;
293
+ setTimeout(task: () => void, ms: number): RuntimeTimerId;
294
+ clearTimeout(timer: RuntimeTimerId): void;
295
+ pendingTimers(): readonly TestClockTimerSnapshot[];
296
+ adjust(ms: number): number;
297
+ advance(ms: number): number;
298
+ advanceTo(targetMs: number): number;
299
+ runDue(): number;
300
+ runAll(maxSteps?: number): number;
301
+ clear(): void;
302
+ private nextDueTimer;
303
+ }
304
+ type TestRuntime<R> = {
305
+ readonly env: R & RuntimeClockEnv;
306
+ readonly runtime: Runtime<R & RuntimeClockEnv>;
307
+ readonly scheduler: TestScheduler;
308
+ readonly clock: TestClock;
309
+ readonly run: <E, A>(effect: Async<any, E, A>) => Promise<A>;
310
+ readonly runExit: <E, A>(effect: Async<any, E, A>) => Promise<Exit<E, A>>;
311
+ readonly fork: <E, A>(effect: Async<any, E, A>) => ReturnType<Runtime<R & RuntimeClockEnv>["fork"]>;
312
+ readonly flush: (maxTasks?: number) => number;
313
+ readonly flushAll: (maxSteps?: number) => number;
314
+ readonly advance: (ms: number) => number;
315
+ readonly advanceTo: (targetMs: number) => number;
316
+ readonly runDueTimers: () => number;
317
+ readonly runAllTimers: (maxSteps?: number) => number;
309
318
  };
310
319
  /**
311
- * Creates a test runtime that provides controlled execution.
312
- *
313
- * ```ts
314
- * const { runtime, run, runExit } = makeTestRuntime();
320
+ * Creates a deterministic TypeScript test runtime.
315
321
  *
316
- * const result = await run(myEffect);
317
- * const exit = await runExit(myEffect); // get full Exit (success or failure)
318
- * ```
322
+ * The returned runtime uses:
323
+ * - a `TestScheduler` that can be flushed manually,
324
+ * - a `TestClock` for virtual `sleep`, `timeout`, retry backoff, and `Runtime.delay`,
325
+ * - the normal TS fiber interpreter, so tests exercise the same runtime model as production.
319
326
  */
320
- declare function makeTestRuntime<R = {}>(env?: R, options?: TestRuntimeOptions): {
321
- runtime: Runtime<R>;
322
- run: <E, A>(effect: Async<R, E, A>) => Promise<A>;
323
- runExit: <E, A>(effect: Async<R, E, A>) => Promise<Exit<E, A>>;
324
- };
327
+ declare function makeTestRuntime<R extends object = {}>(env?: R, options?: TestRuntimeOptions): TestRuntime<R>;
325
328
  /**
326
329
  * Asserts that an effect succeeds with a specific value.
327
330
  *
@@ -379,20 +382,43 @@ declare function delayedEffect<A>(ms: number, value: A): Async<unknown, never, A
379
382
  */
380
383
  declare function neverEffect<A = never>(): Async<unknown, never, A>;
381
384
 
382
- /**
383
- * A Layer describes how to build a service.
384
- *
385
- * - RIn: dependencies required to build this service
386
- * - E: possible failure during construction
387
- * - ROut: the service produced
388
- */
389
- type Layer<RIn, E, ROut> = {
390
- readonly _tag: "Layer";
391
- readonly build: (deps: RIn) => Async<unknown, E, {
392
- service: ROut;
393
- release: () => Async<unknown, never, void>;
394
- }>;
385
+ type ServiceTag<A> = {
386
+ readonly _tag: "ServiceTag";
387
+ readonly key: symbol;
388
+ readonly name: string;
389
+ };
390
+ declare class MissingLayerServiceError extends Error {
391
+ readonly _tag: "MissingLayerService";
392
+ readonly serviceName: string;
393
+ constructor(serviceName: string);
394
+ }
395
+ declare function formatLayerError(error: unknown): string;
396
+ declare function makeServiceTag<A>(name: string): ServiceTag<A>;
397
+ declare const serviceTag: typeof makeServiceTag;
398
+ declare const defineService: typeof makeServiceTag;
399
+ declare class LayerContext<Services = unknown> {
400
+ private readonly services;
401
+ constructor(entries?: Iterable<readonly [ServiceTag<any>, unknown]> | Map<symbol, unknown>);
402
+ static empty(): LayerContext<unknown>;
403
+ get<A>(tag: ServiceTag<A>): A | undefined;
404
+ unsafeGet<A>(tag: ServiceTag<A>): A;
405
+ has(tag: ServiceTag<unknown>): boolean;
406
+ add<A>(tag: ServiceTag<A>, service: A): LayerContext<Services & A>;
407
+ merge<Other>(other: LayerContext<Other>): LayerContext<Services & Other>;
408
+ size(): number;
409
+ }
410
+ type LayerScope = {
411
+ readonly get: <RIn, E, ROut>(layer: Layer<RIn, E, ROut>, deps?: RIn) => Async<unknown, E, ROut>;
412
+ readonly close: () => Async<unknown, never, void>;
413
+ readonly size: () => number;
414
+ };
415
+ type BuiltLayer<ROut> = {
416
+ readonly service: ROut;
417
+ readonly scope: LayerScope;
418
+ readonly close: () => Async<unknown, never, void>;
419
+ readonly use: <E, A>(body: (service: ROut) => Async<unknown, E, A>) => Async<unknown, E, A>;
395
420
  };
421
+ declare function makeLayerScope(): LayerScope;
396
422
  /**
397
423
  * Creates a Layer from an acquire/release pair.
398
424
  *
@@ -404,6 +430,11 @@ type Layer<RIn, E, ROut> = {
404
430
  * ```
405
431
  */
406
432
  declare function layer<ROut, E = never>(acquire: () => Async<unknown, E, ROut>, release?: (service: ROut) => Async<unknown, never, void>): Layer<unknown, E, ROut>;
433
+ declare function layerValue<A>(tag: ServiceTag<A>, value: A): Layer<LayerContext, never, LayerContext>;
434
+ declare function layerEffect<E, A>(tag: ServiceTag<A>, acquire: (deps: LayerContext) => Async<unknown, E, A>, release?: (service: A) => Async<unknown, never, void>): Layer<LayerContext, E, LayerContext>;
435
+ declare const layerFromContext: typeof layerEffect;
436
+ declare const defineLayer: typeof layerEffect;
437
+ declare function getService<A>(tag: ServiceTag<A>): Async<LayerContext, MissingLayerServiceError, A>;
407
438
  /**
408
439
  * Creates a Layer that depends on another service.
409
440
  *
@@ -449,6 +480,7 @@ declare function merge<R1, E1, A, R2, E2, B>(left: Layer<R1, E1, A>, right: Laye
449
480
  * Map the output of a layer.
450
481
  */
451
482
  declare function mapLayer<RIn, E, A, B>(l: Layer<RIn, E, A>, f: (a: A) => B): Layer<RIn, E, B>;
483
+ declare function buildLayer<RIn, E, ROut>(l: Layer<RIn, E, ROut>, deps?: RIn): Async<unknown, E, BuiltLayer<ROut>>;
452
484
  /**
453
485
  * Builds a layer, runs an effect with the produced service, and releases.
454
486
  *
@@ -459,6 +491,44 @@ declare function mapLayer<RIn, E, A, B>(l: Layer<RIn, E, A>, f: (a: A) => B): La
459
491
  * ```
460
492
  */
461
493
  declare function provideLayer<RIn, E, ROut, E2, A>(l: Layer<RIn, E, ROut>, use: (service: ROut) => Async<unknown, E2, A>, deps?: RIn): Async<unknown, E | E2, A>;
494
+ declare function provideLayerContext<E, E2, A>(l: Layer<LayerContext, E, LayerContext>, use: (context: LayerContext) => Async<unknown, E2, A>, deps?: LayerContext): Async<unknown, E | E2, A>;
495
+ declare const provide: typeof provideLayer;
496
+ declare const provideContext: typeof provideLayerContext;
497
+ /**
498
+ * A Layer describes how to build a service.
499
+ *
500
+ * - RIn: dependencies required to build this service
501
+ * - E: possible failure during construction
502
+ * - ROut: the service produced
503
+ */
504
+ type Layer<RIn, E, ROut> = {
505
+ readonly _tag: "Layer";
506
+ readonly build: (deps: RIn) => Async<unknown, E, {
507
+ service: ROut;
508
+ release: () => Async<unknown, never, void>;
509
+ }>;
510
+ readonly buildScoped?: (deps: RIn, scope: LayerScope) => Async<unknown, E, ROut>;
511
+ };
512
+ declare const Layer: Readonly<{
513
+ make: typeof layer;
514
+ from: typeof layerFrom;
515
+ succeed: typeof layerSucceed;
516
+ fail: typeof layerFail;
517
+ value: typeof layerValue;
518
+ effect: typeof layerEffect;
519
+ define: typeof layerEffect;
520
+ fromContext: typeof layerEffect;
521
+ compose: typeof compose;
522
+ merge: typeof merge;
523
+ map: typeof mapLayer;
524
+ provide: typeof provideLayer;
525
+ provideContext: typeof provideLayerContext;
526
+ build: typeof buildLayer;
527
+ scope: typeof makeLayerScope;
528
+ context: typeof LayerContext.empty;
529
+ tag: typeof makeServiceTag;
530
+ service: typeof getService;
531
+ }>;
462
532
 
463
533
  type WorkerPoolConfig = {
464
534
  /** Number of worker threads. Default: number of CPUs - 1 */
@@ -517,85 +587,32 @@ type WorkerPoolStats = {
517
587
  */
518
588
  declare function makeWorkerPool(config?: WorkerPoolConfig): WorkerPool;
519
589
 
520
- type MetricType = "counter" | "gauge" | "histogram";
521
- type MetricValue = {
522
- readonly name: string;
523
- readonly type: MetricType;
524
- readonly value: number;
525
- readonly labels: Record<string, string>;
526
- readonly timestamp: number;
527
- };
528
- type HistogramBuckets = {
529
- readonly boundaries: readonly number[];
530
- counts: number[];
531
- sum: number;
532
- count: number;
533
- min: number;
534
- max: number;
535
- };
536
- type MetricsRegistry = {
537
- /** Create or get a counter. */
538
- readonly counter: (name: string, labels?: Record<string, string>) => Counter;
539
- /** Create or get a gauge. */
540
- readonly gauge: (name: string, labels?: Record<string, string>) => Gauge;
541
- /** Create or get a histogram. */
542
- readonly histogram: (name: string, boundaries?: number[], labels?: Record<string, string>) => Histogram;
543
- /** Get all current metric values. */
544
- readonly snapshot: () => MetricSnapshot;
545
- /** Reset all metrics. */
546
- readonly reset: () => void;
547
- };
548
- type Counter = {
549
- readonly increment: (n?: number) => void;
550
- readonly value: () => number;
551
- };
552
- type Gauge = {
553
- readonly set: (value: number) => void;
554
- readonly increment: (n?: number) => void;
555
- readonly decrement: (n?: number) => void;
556
- readonly value: () => number;
557
- };
558
- type Histogram = {
559
- readonly observe: (value: number) => void;
560
- readonly buckets: () => HistogramBuckets;
561
- readonly percentile: (p: number) => number;
562
- };
563
- type MetricSnapshot = {
564
- readonly counters: Array<{
565
- name: string;
566
- labels: Record<string, string>;
567
- value: number;
568
- }>;
569
- readonly gauges: Array<{
570
- name: string;
571
- labels: Record<string, string>;
572
- value: number;
573
- }>;
574
- readonly histograms: Array<{
575
- name: string;
576
- labels: Record<string, string>;
577
- buckets: HistogramBuckets;
578
- }>;
590
+ type RuntimeRecorderOptions = {
591
+ readonly maxEvents?: number;
579
592
  };
580
- /**
581
- * Creates a metrics registry.
582
- *
583
- * ```ts
584
- * const metrics = makeMetrics();
585
- *
586
- * const requestCount = metrics.counter("http_requests_total", { method: "GET" });
587
- * requestCount.increment();
588
- *
589
- * const latency = metrics.histogram("http_request_duration_ms");
590
- * latency.observe(42.5);
591
- *
592
- * const activeConns = metrics.gauge("active_connections");
593
- * activeConns.set(10);
594
- *
595
- * console.log(metrics.snapshot());
596
- * ```
597
- */
598
- declare function makeMetrics(): MetricsRegistry;
593
+ type RuntimeRecorderStats = {
594
+ readonly size: number;
595
+ readonly capacity: number;
596
+ readonly dropped: number;
597
+ readonly firstSeq?: number;
598
+ readonly lastSeq?: number;
599
+ };
600
+ type RuntimeRecorderExplainOptions = {
601
+ readonly maxEvents?: number;
602
+ };
603
+ type RuntimeRecorder = RuntimeHooks & {
604
+ readonly hooks: RuntimeHooks;
605
+ readonly snapshot: () => readonly RuntimeEventRecord[];
606
+ readonly clear: () => void;
607
+ readonly stats: () => RuntimeRecorderStats;
608
+ readonly explain: (options?: RuntimeRecorderExplainOptions) => string;
609
+ };
610
+ declare function makeRuntimeRecorder(options?: RuntimeRecorderOptions): RuntimeRecorder;
611
+
612
+ type LogLevel = "debug" | "info" | "warn" | "error";
613
+ declare function consoleJsonLogger(): RuntimeHooks;
614
+
615
+ declare function dumpAllFibers(reg: RuntimeRegistry): string;
599
616
 
600
617
  /**
601
618
  * Base type for tagged errors. All errors should extend this pattern:
@@ -670,4 +687,86 @@ declare function tagError<R, E, A, Tag extends string, Fields extends Record<str
670
687
  */
671
688
  declare function orElse<R, E, A, R2, E2, B>(effect: Async<R, E, A>, fallback: (error: E) => Async<R2, E2, B>): Async<R & R2, E2, A | B>;
672
689
 
673
- export { Async, type Counter, Exit, type Gauge, type Histogram, type HistogramBuckets, type Layer, type Managed as ManagedResource, type MetricSnapshot, type MetricType, type MetricValue, type MetricsRegistry, type Ref, type RetryPolicy, type RetryState, Runtime, type Schedule, type ScheduleDecision, type Semaphore, type SemaphoreStats, type ShutdownConfig, type ShutdownStats, type TaggedError, type TestRuntimeOptions, type TimeoutError, type WorkerPool, type WorkerPoolConfig, type WorkerPoolError, type WorkerPoolStats, andThen as andThenSchedule, assertCompletesWithin, assertFails, assertFailsWith, assertSucceeds, bracket, catchTag, catchTags, compose as composeLayer, delayedEffect, derivedRef, elapsed, ensuring, exponential, fixed, flakyEffect, gracefulShutdown, intersect, jittered, layer, layerFail, layerFrom, layerSucceed, makeMetrics, makeRef, makeSemaphore, makeTestRuntime, makeWorkerPool, managed, managedAll, mapError as mapErrorTyped, mapLayer, merge as mergeLayer, neverEffect, orElse, provideLayer, recurs, registerShutdownHooks, repeatWithSchedule, retry, retryN, retryWithBackoff, retryWithSchedule, sleep, tagError, take as takeSchedule, timeout, union, useManaged, whileInput };
690
+ type SupervisorStrategy = "one-for-one" | "all-for-one";
691
+ type SupervisorEscalation = "ignore" | "shutdown";
692
+ type SupervisorRestartMode = "never" | "always" | "on-failure";
693
+ type SupervisedChildStatus = "running" | "restarting" | "succeeded" | "failed" | "interrupted";
694
+ type SupervisorRestartContext = {
695
+ readonly supervisorId: number;
696
+ readonly childId: number;
697
+ readonly name?: string;
698
+ readonly restartCount: number;
699
+ readonly exit: Exit<any, any>;
700
+ };
701
+ type SupervisorRestartPolicy = SupervisorRestartMode | {
702
+ readonly mode?: SupervisorRestartMode;
703
+ readonly maxRestarts?: number;
704
+ readonly withinMs?: number;
705
+ readonly delayMs?: number | ((context: SupervisorRestartContext) => number);
706
+ readonly schedule?: Schedule<SupervisorRestartContext, unknown>;
707
+ };
708
+ type SupervisorEvent = {
709
+ readonly type: "child-start" | "child-end" | "child-restart" | "child-escalate" | "shutdown";
710
+ readonly supervisorId: number;
711
+ readonly childId?: number;
712
+ readonly name?: string;
713
+ readonly status?: SupervisedChildStatus;
714
+ readonly restartCount?: number;
715
+ readonly delayMs?: number;
716
+ readonly exit?: Exit<any, any>;
717
+ readonly reason?: string;
718
+ };
719
+ type SupervisorConfig = {
720
+ readonly strategy?: SupervisorStrategy;
721
+ readonly restart?: SupervisorRestartPolicy;
722
+ readonly escalation?: SupervisorEscalation;
723
+ readonly clock?: () => number;
724
+ readonly onEvent?: (event: SupervisorEvent) => void;
725
+ };
726
+ type SupervisedChildSpec<R, E, A> = {
727
+ readonly name?: string;
728
+ readonly effect: Async<R, E, A> | (() => Async<R, E, A>);
729
+ readonly restart?: SupervisorRestartPolicy;
730
+ };
731
+ type SupervisedFiber<E, A> = {
732
+ readonly id: number;
733
+ readonly name?: string;
734
+ readonly current: () => Fiber<E, A> | undefined;
735
+ readonly status: () => SupervisedChildStatus;
736
+ readonly restartCount: () => number;
737
+ readonly interrupt: () => void;
738
+ readonly join: (cb: (exit: Exit<E, A>) => void) => void;
739
+ };
740
+ declare class Supervisor<R> {
741
+ private readonly runtime;
742
+ readonly id: number;
743
+ private readonly records;
744
+ private readonly strategy;
745
+ private readonly restart;
746
+ private readonly escalation;
747
+ private readonly clock;
748
+ private readonly onEvent?;
749
+ private closed;
750
+ constructor(runtime: Runtime<R>, config?: SupervisorConfig);
751
+ start<E, A>(spec: SupervisedChildSpec<R, E, A>): SupervisedFiber<E, A>;
752
+ startAll<const Specs extends readonly SupervisedChildSpec<R, any, any>[]>(specs: Specs): {
753
+ [K in keyof Specs]: Specs[K] extends SupervisedChildSpec<R, infer E, infer A> ? SupervisedFiber<E, A> : never;
754
+ };
755
+ shutdown(): Async<R, never, void>;
756
+ private handle;
757
+ private launch;
758
+ private onChildExit;
759
+ private restartAll;
760
+ private scheduleRestart;
761
+ private nextDelay;
762
+ private escalate;
763
+ private finish;
764
+ private restartContext;
765
+ private emit;
766
+ private scheduleClock;
767
+ }
768
+ declare function makeSupervisor<R>(runtime: Runtime<R>, config?: SupervisorConfig): Supervisor<R>;
769
+ declare function supervise<R, E, A>(runtime: Runtime<R>, spec: SupervisedChildSpec<R, E, A>, config?: SupervisorConfig): SupervisedFiber<E, A>;
770
+ declare function joinSupervised<E, A>(fiber: SupervisedFiber<E, A>): Async<unknown, E, A>;
771
+
772
+ export { Async, type BuiltLayer, type EffectEnvironment, type EffectFailure, type EffectSuccess, Exit, Fiber, type FiberRef, Layer, LayerContext, type LayerScope, type LogLevel, type MakeRuntimeOptions, MissingLayerServiceError, type Ref, type RetryPolicy, type RetryState, Runtime, RuntimeClock, RuntimeClockEnv, RuntimeEventRecord, RuntimeHooks, RuntimeOptions, type RuntimeRecorder, type RuntimeRecorderExplainOptions, type RuntimeRecorderOptions, type RuntimeRecorderStats, RuntimeRegistry, RuntimeTimerId, Schedule, type Semaphore, type SemaphoreStats, type ServiceTag, type ShutdownConfig, type ShutdownStats, type SupervisedChildSpec, type SupervisedChildStatus, type SupervisedFiber, Supervisor, type SupervisorConfig, type SupervisorEscalation, type SupervisorEvent, type SupervisorRestartContext, type SupervisorRestartMode, type SupervisorRestartPolicy, type SupervisorStrategy, type TaggedError, TestClock, type TestClockTimerSnapshot, type TestRuntime, type TestRuntimeOptions, type TestScheduledTask, TestScheduler, type TimeoutError, type WorkerPool, type WorkerPoolConfig, type WorkerPoolError, type WorkerPoolStats, assertCompletesWithin, assertFails, assertFailsWith, assertSucceeds, buildLayer, catchTag, catchTags, compose as composeLayer, consoleJsonLogger, defineLayer, defineService, delayedEffect, derivedRef, dumpAllFibers, fiberRefSnapshot, flakyEffect, formatLayerError, getFiberRef, getService, gracefulShutdown, joinSupervised, layer, layerEffect, layerFail, layerFrom, layerFromContext, layerSucceed, layerValue, locallyFiberRef, locallyFiberRefWith, makeFiberRef, makeLayerScope, makeRef, makeRuntime, makeRuntimeRecorder, makeSemaphore, makeServiceTag, makeSupervisor, makeTestRuntime, makeWorkerPool, mapError as mapErrorTyped, mapLayer, merge as mergeLayer, modifyFiberRef, neverEffect, orElse, provide, provideContext, provideLayer, provideLayerContext, registerShutdownHooks, retry, retryN, retryWithBackoff, runEffect, runExit, runPromise, serviceTag, setFiberRef, sleep, supervise, tagError, timeout, unsafeGetFiberRef, unsafeSetFiberRef, updateFiberRef };