brass-runtime 1.16.0 → 1.17.0

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 (219) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +287 -23
  3. package/dist/agent/cli/main.cjs +38 -38
  4. package/dist/agent/cli/main.js +6 -6
  5. package/dist/agent/cli/main.mjs +6 -6
  6. package/dist/agent/index.cjs +7 -7
  7. package/dist/agent/index.d.ts +1 -1
  8. package/dist/agent/index.js +6 -6
  9. package/dist/agent/index.mjs +6 -6
  10. package/dist/chunk-2HQTDLHF.mjs +683 -0
  11. package/dist/chunk-36I3M4UC.mjs +370 -0
  12. package/dist/{chunk-QY5FKYEQ.js → chunk-3AYM6WPJ.js} +570 -51
  13. package/dist/chunk-3LOYJFRR.cjs +300 -0
  14. package/dist/chunk-3Y2RIUMM.js +300 -0
  15. package/dist/{chunk-7XOPAB5Q.js → chunk-4P2HHGAX.mjs} +83 -5
  16. package/dist/{chunk-N6VHMOWB.cjs → chunk-4ROBZFL6.cjs} +128 -128
  17. package/dist/{chunk-NC5SDRYE.js → chunk-52OB2ROS.js} +4 -4
  18. package/dist/{chunk-JX3LZQJH.cjs → chunk-52PPNNI4.cjs} +82 -20
  19. package/dist/{chunk-5YOQOXEQ.cjs → chunk-5EC274J5.cjs} +676 -293
  20. package/dist/chunk-5QC7LRZ3.js +229 -0
  21. package/dist/{chunk-7TL2LHQJ.js → chunk-5VRJNBLZ.mjs} +524 -141
  22. package/dist/chunk-62AZW6UT.cjs +313 -0
  23. package/dist/chunk-6IXXWIUM.js +683 -0
  24. package/dist/chunk-6RY2FFN4.mjs +2024 -0
  25. package/dist/chunk-74ZTY6CP.js +2871 -0
  26. package/dist/chunk-7CMJS3QE.mjs +2871 -0
  27. package/dist/{chunk-2WC63LJK.mjs → chunk-7JIJOVCT.js} +20 -10
  28. package/dist/chunk-7X3K5RMS.js +2024 -0
  29. package/dist/chunk-7ZPEZ57L.cjs +2024 -0
  30. package/dist/{chunk-FM4W4QPL.js → chunk-A2OM6NEH.mjs} +5 -4
  31. package/dist/chunk-AGR5B2BC.cjs +683 -0
  32. package/dist/chunk-B33ICAKP.js +313 -0
  33. package/dist/{chunk-J3H54ZRV.mjs → chunk-B5JD23U7.mjs} +1 -1
  34. package/dist/{chunk-F5EUMJL7.mjs → chunk-BKK77SBA.js} +83 -5
  35. package/dist/{chunk-U5KWK3PX.mjs → chunk-C3MDXTRZ.js} +11 -0
  36. package/dist/{chunk-SPUEME2B.cjs → chunk-CZIVE6NT.cjs} +12 -1
  37. package/dist/{chunk-TDVMADDN.js → chunk-DNFJLJMW.mjs} +11 -0
  38. package/dist/{chunk-XDZOO4L5.js → chunk-EJ6BPYVR.mjs} +79 -17
  39. package/dist/chunk-EOC4UHBS.mjs +229 -0
  40. package/dist/chunk-F6XWZQY4.cjs +777 -0
  41. package/dist/{chunk-7LVI2GIN.js → chunk-FH2X7BVP.js} +507 -72
  42. package/dist/{chunk-OOGJ73B6.js → chunk-FHQGHPMO.mjs} +20 -10
  43. package/dist/{chunk-WQ5QNU5R.cjs → chunk-GLE2WY7Z.cjs} +652 -217
  44. package/dist/{chunk-G6IQOE4P.mjs → chunk-GYM3LLGS.mjs} +507 -72
  45. package/dist/{chunk-TVN5I4U6.cjs → chunk-JF5WGYJJ.cjs} +25 -24
  46. package/dist/{chunk-CY33PGEX.mjs → chunk-KH4SYAOS.mjs} +570 -51
  47. package/dist/chunk-KN32XNTH.mjs +313 -0
  48. package/dist/chunk-KQLYONSE.cjs +2871 -0
  49. package/dist/{chunk-7HUOJA4W.cjs → chunk-KZJQ723N.cjs} +90 -80
  50. package/dist/{chunk-CCKHV5BT.mjs → chunk-L2SYFEBS.js} +5 -4
  51. package/dist/{chunk-IJT6RRQ5.cjs → chunk-L6VB5N7Q.cjs} +20 -9
  52. package/dist/{chunk-ZGLD4TVZ.mjs → chunk-MBEJI5HF.mjs} +4 -4
  53. package/dist/{chunk-PRWCB3QL.mjs → chunk-MIIYDLGM.js} +524 -141
  54. package/dist/{chunk-H55LI6WY.js → chunk-MOO4L7F4.mjs} +15 -4
  55. package/dist/chunk-MVGUEJ5Z.cjs +370 -0
  56. package/dist/chunk-PD4EJTQC.cjs +229 -0
  57. package/dist/chunk-PWC3RBQE.mjs +300 -0
  58. package/dist/{chunk-MWXMNYJS.cjs → chunk-Q2I37RP3.cjs} +643 -124
  59. package/dist/{chunk-VFIUZG7J.mjs → chunk-RKGKFN2A.js} +79 -17
  60. package/dist/{chunk-NYL4D7SK.cjs → chunk-SA6HUJVI.cjs} +5 -5
  61. package/dist/chunk-SK7UZRNI.mjs +777 -0
  62. package/dist/{chunk-K2T3DV26.mjs → chunk-TRM4JUZQ.js} +15 -4
  63. package/dist/chunk-UB4B6OFY.js +370 -0
  64. package/dist/{chunk-G3XGCZDQ.js → chunk-UCUBNWM2.js} +1 -1
  65. package/dist/chunk-VWIPB6I5.js +777 -0
  66. package/dist/{chunk-JNFRRJYH.cjs → chunk-WBGRHGBP.cjs} +270 -192
  67. package/dist/{client-CtFmoDvM.d.ts → client-CZHU674n.d.ts} +211 -36
  68. package/dist/core/index.cjs +135 -9
  69. package/dist/core/index.d.ts +238 -33
  70. package/dist/core/index.js +155 -29
  71. package/dist/core/index.mjs +155 -29
  72. package/dist/{effect-CGNl5Rqp.d.ts → effect-DIUHZ9IN.d.ts} +89 -1
  73. package/dist/effectRunner-CFLC32IK.cjs +8 -0
  74. package/dist/{effectRunner-A4CHJXJI.js → effectRunner-L4S7IPT3.js} +2 -2
  75. package/dist/{effectRunner-OPUF6QRN.mjs → effectRunner-NNGG75QA.mjs} +2 -2
  76. package/dist/http/index.cjs +324 -2986
  77. package/dist/http/index.d.ts +54 -68
  78. package/dist/http/index.js +238 -2900
  79. package/dist/http/index.mjs +238 -2900
  80. package/dist/http/testing.cjs +14 -12
  81. package/dist/http/testing.d.ts +5 -4
  82. package/dist/http/testing.js +10 -8
  83. package/dist/http/testing.mjs +10 -8
  84. package/dist/index.cjs +423 -255
  85. package/dist/index.d.ts +87 -69
  86. package/dist/index.js +301 -133
  87. package/dist/index.mjs +301 -133
  88. package/dist/observability/index.cjs +18 -531
  89. package/dist/observability/index.d.ts +81 -8
  90. package/dist/observability/index.js +25 -538
  91. package/dist/observability/index.mjs +25 -538
  92. package/dist/perf/cli.cjs +401 -0
  93. package/dist/perf/cli.d.ts +1 -0
  94. package/dist/perf/cli.js +401 -0
  95. package/dist/perf/cli.mjs +401 -0
  96. package/dist/perf/index.cjs +141 -0
  97. package/dist/perf/index.d.ts +483 -0
  98. package/dist/perf/index.js +141 -0
  99. package/dist/perf/index.mjs +141 -0
  100. package/dist/schedule-CK3Ml_7p.d.ts +259 -0
  101. package/dist/schema/index.cjs +6 -2
  102. package/dist/schema/index.d.ts +3 -1
  103. package/dist/schema/index.js +5 -1
  104. package/dist/schema/index.mjs +5 -1
  105. package/dist/{server-C8hDXA74.d.ts → server-D6JZ15_e.d.ts} +16 -4
  106. package/dist/{stream-dvSs0QS5.d.ts → stream-B4oK9JFP.d.ts} +1 -1
  107. package/dist/{tracer-B5tRH9H7.d.ts → tracer-Hwt1cl7h.d.ts} +13 -54
  108. package/dist/{tracing-Dt9S_6V8.d.ts → tracing-DqbTKGcf.d.ts} +1 -1
  109. package/docs/ARCHITECTURE.md +292 -0
  110. package/docs/README.md +65 -0
  111. package/docs/adr/0001-ai-context-pack.md +32 -0
  112. package/docs/agent-apply-mode.md +104 -0
  113. package/docs/agent-approvals.md +110 -0
  114. package/docs/agent-batch.md +185 -0
  115. package/docs/agent-boundaries.md +112 -0
  116. package/docs/agent-chat-sessions.md +160 -0
  117. package/docs/agent-ci.md +17 -0
  118. package/docs/agent-cli.md +405 -0
  119. package/docs/agent-config.md +480 -0
  120. package/docs/agent-context-discovery.md +159 -0
  121. package/docs/agent-copilot-like-dx.md +126 -0
  122. package/docs/agent-declarative-optimized-planning.md +138 -0
  123. package/docs/agent-dx.md +224 -0
  124. package/docs/agent-env-files.md +126 -0
  125. package/docs/agent-follow-up-context.md +43 -0
  126. package/docs/agent-global-usage.md +180 -0
  127. package/docs/agent-init.md +109 -0
  128. package/docs/agent-install-and-configure.md +516 -0
  129. package/docs/agent-language-workspace-ux.md +99 -0
  130. package/docs/agent-llm-adapters.md +123 -0
  131. package/docs/agent-local-install.md +190 -0
  132. package/docs/agent-local-tests.md +51 -0
  133. package/docs/agent-observability.md +155 -0
  134. package/docs/agent-patch-quality-loop.md +162 -0
  135. package/docs/agent-presets.md +22 -0
  136. package/docs/agent-project-commands.md +237 -0
  137. package/docs/agent-project-intelligence.md +156 -0
  138. package/docs/agent-redaction.md +18 -0
  139. package/docs/agent-release-readiness.md +76 -0
  140. package/docs/agent-rollback-safety.md +162 -0
  141. package/docs/agent-rollback.md +23 -0
  142. package/docs/agent-run-artifacts.md +16 -0
  143. package/docs/agent-vscode-auto-discovery.md +137 -0
  144. package/docs/agent-vscode-batch-runner.md +100 -0
  145. package/docs/agent-vscode-chat-layout.md +90 -0
  146. package/docs/agent-vscode-clean-install.md +147 -0
  147. package/docs/agent-vscode-code-actions.md +70 -0
  148. package/docs/agent-vscode-diff-preview.md +45 -0
  149. package/docs/agent-vscode-inline-assist.md +56 -0
  150. package/docs/agent-vscode-install.md +186 -0
  151. package/docs/agent-vscode-model-setup.md +97 -0
  152. package/docs/agent-vscode-patch-preview.md +92 -0
  153. package/docs/agent-vscode-problems.md +79 -0
  154. package/docs/agent-vscode-project-dashboard.md +106 -0
  155. package/docs/agent-vscode-run-history.md +92 -0
  156. package/docs/agent-vscode-ux.md +73 -0
  157. package/docs/ai/INVARIANTS.md +84 -0
  158. package/docs/ai/PROJECT_MAP.md +338 -0
  159. package/docs/ai/PUBLIC_API.md +339 -0
  160. package/docs/ai/VALIDATION_MATRIX.md +67 -0
  161. package/docs/api-polish.md +37 -0
  162. package/docs/cancellation.md +162 -0
  163. package/docs/coverage.md +46 -0
  164. package/docs/framework-integrations.md +38 -0
  165. package/docs/frameworks/angular.md +153 -0
  166. package/docs/frameworks/express.md +125 -0
  167. package/docs/frameworks/fastify.md +124 -0
  168. package/docs/frameworks/nestjs.md +282 -0
  169. package/docs/frameworks/nextjs.md +147 -0
  170. package/docs/frameworks/react.md +139 -0
  171. package/docs/frameworks/vanilla.md +224 -0
  172. package/docs/getting-started.md +159 -0
  173. package/docs/guides/README.md +40 -0
  174. package/docs/guides/circuit-breaker.md +89 -0
  175. package/docs/guides/error-handling.md +91 -0
  176. package/docs/guides/getting-started.md +107 -0
  177. package/docs/guides/layers.md +189 -0
  178. package/docs/guides/metrics.md +101 -0
  179. package/docs/guides/resource-management.md +141 -0
  180. package/docs/guides/retry.md +215 -0
  181. package/docs/guides/semaphore.md +66 -0
  182. package/docs/guides/streams.md +117 -0
  183. package/docs/guides/supervisors.md +98 -0
  184. package/docs/guides/testing.md +162 -0
  185. package/docs/guides/tracing.md +71 -0
  186. package/docs/http-recipes.md +399 -0
  187. package/docs/http.md +749 -0
  188. package/docs/modules.md +285 -0
  189. package/docs/nestjs.md +6 -0
  190. package/docs/observability-collector-smoke.md +31 -0
  191. package/docs/observability-framework-examples.md +110 -0
  192. package/docs/observability.md +649 -0
  193. package/docs/otel-collector-smoke.yaml +27 -0
  194. package/docs/performance-profiler.md +199 -0
  195. package/docs/production-readiness.md +73 -0
  196. package/docs/recipes/README.md +12 -0
  197. package/docs/recipes/http-server.md +45 -0
  198. package/docs/recipes/layers.md +44 -0
  199. package/docs/recipes/performance.md +47 -0
  200. package/docs/recipes/runtime.md +41 -0
  201. package/docs/recipes/testing.md +41 -0
  202. package/docs/release.md +53 -0
  203. package/docs/wasm-bounded-queues.md +44 -0
  204. package/docs/wasm-engine-observability-benchmarks.md +85 -0
  205. package/docs/wasm-fiber-engine.md +117 -0
  206. package/docs/wasm-scheduler-state-machine.md +122 -0
  207. package/docs/wasm-stream-chunks.md +54 -0
  208. package/package.json +22 -2
  209. package/dist/chunk-45F7OKGT.cjs +0 -104
  210. package/dist/chunk-7V4KY4RL.mjs +0 -104
  211. package/dist/chunk-DJQ7OMMB.cjs +0 -144
  212. package/dist/chunk-GOV47PPB.mjs +0 -552
  213. package/dist/chunk-JF4XXPZ5.cjs +0 -552
  214. package/dist/chunk-KCPT2D6G.js +0 -552
  215. package/dist/chunk-NOYZIMUJ.mjs +0 -144
  216. package/dist/chunk-PNVFW245.js +0 -144
  217. package/dist/chunk-ROJC3NBJ.js +0 -104
  218. package/dist/effectRunner-3ZHAD3LE.cjs +0 -8
  219. package/dist/schedule-Fque9Abz.d.ts +0 -70
@@ -1,9 +1,9 @@
1
- import { A as Async, f as Runtime, E as Exit, R as RuntimeHooks, g as RuntimeRegistry, k as Fiber } from '../effect-CGNl5Rqp.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 ContextNode, Y as FiberContext, l as FiberId, $ as FiberInfo, a3 as FiberRunState, m as FiberStatus, af as Interrupted, J as JSONValue, ai as None, aj as NoopHooks, O as Option, c as RuntimeEmitContext, b as RuntimeEvent, d as RuntimeEventRecord, i as RuntimeFiber, h as RuntimeOptions, e as RuntimeSpanLink, S as Scope, aB as ScopeId, aC as ScopeInfo, aD as Some, T as TraceContext, Z as ZIO, aI as abortablePromiseStats, aJ as acquireRelease, aK as async, aL as asyncCatchAll, aM as asyncFail, aN as asyncFlatMap, aO as asyncFold, aP as asyncInterruptible, aQ as asyncMap, aR as asyncMapError, aS as asyncSucceed, aT as asyncSync, aU as asyncTotal, aV as catchAll, aW as ctxExtend, aX as ctxToObject, aY as emptyContext, aZ as end, a$ as fail, b0 as flatMap, b1 as fork, b2 as fromPromiseAbortable, b3 as getBenchmarkBudget, b4 as getCurrentFiber, b8 as linkAbortController, ba as makeCancelToken, bc as makeRuntimeEventRecord, bd as map, be as mapAsync, bf as mapError, bg as mapTryAsync, bh as none, bi as orElseOptional, bj as resetAbortablePromiseStats, bl as runtimeEventRecordContext, bm as runtimeForCaller, bp as setBenchmarkBudget, bq as some, br as succeed, bs as sync, bt as toPromise, bu as toPromiseByCaller, bv as unit, bw as unsafeGetCurrentRuntime, bx as unsafeRunAsync, by as unsafeRunFoldWithEnv, bz as withAsyncPromise, bA as withCurrentFiber, bB as withScope, bC as withScopeAsync } from '../effect-CGNl5Rqp.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-Dt9S_6V8.js';
4
- import { S as Schedule } from '../schedule-Fque9Abz.js';
5
- export { a as ScheduleDecision, b as andThenSchedule, c as contramapSchedule, e as elapsed, d as exponential, f as fibonacci, g as fixed, i as intersect, j as jitter, h as jittered, k as jitteredSchedule, m as mapSchedule, r as recurs, l as repeatWithSchedule, n as retryWithSchedule, t as takeSchedule, u as union, w as whileInput, o as windowed } from '../schedule-Fque9Abz.js';
6
- export { B as BrassEnv, f as CircuitBreaker, g as CircuitBreakerConfig, h as CircuitBreakerError, i as CircuitBreakerState, C as CircuitBreakerStats, j as Counter, E as EventBus, k as EventBusOptions, l as EventHandler, G as Gauge, H as Histogram, m as HistogramBuckets, I as InMemoryTracer, e as InMemoryTracerOptions, n as InMemoryTracerStats, a as MetricExemplar, b as MetricSnapshot, o as MetricType, p as MetricValue, M as MetricsRegistry, R as RuntimeSpan, q as RuntimeSpanEvent, d as RuntimeTraceIdGenerator, r as defaultTracer, s as makeCircuitBreaker, t as makeMetrics, u as runtimeHooksToEventHandler } from '../tracer-B5tRH9H7.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';
7
7
 
8
8
  type TimeoutError = {
9
9
  readonly _tag: "TimeoutError";
@@ -70,6 +70,30 @@ declare function retryWithBackoff<R, E, A>(effect: Async<R, E, A>, opts?: {
70
70
  shouldRetry?: (error: unknown, attempt: number) => boolean;
71
71
  }): Async<R, E, A>;
72
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">;
77
+ /**
78
+ * Create a runtime with a compact options shape.
79
+ *
80
+ * This is an additive DX helper over `new Runtime({ env, ...options })`.
81
+ */
82
+ declare function makeRuntime<R extends object = {}>(env?: R, options?: MakeRuntimeOptions<R>): Runtime<R>;
83
+ /**
84
+ * Run an effect and resolve with its success value.
85
+ *
86
+ * Accepts either a plain environment or an existing Runtime. For advanced
87
+ * lifecycle/hooks/scheduler behavior, pass the Runtime explicitly.
88
+ */
89
+ declare function runPromise<R, E, A>(effect: Async<R, E, A>, envOrRuntime?: R | Runtime<R>): Promise<A>;
90
+ /**
91
+ * Run an effect and resolve with the full Exit, preserving typed failures and
92
+ * Cause structure instead of throwing/rejecting.
93
+ */
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;
96
+
73
97
  type Semaphore = {
74
98
  /** Current number of available permits. */
75
99
  readonly available: () => number;
@@ -144,6 +168,29 @@ declare function makeRef<A>(initial: A): Ref<A>;
144
168
  */
145
169
  declare function derivedRef<A, B>(parent: Ref<A>, get: (a: A) => B, set: (a: A, b: B) => A): Ref<B>;
146
170
 
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;
182
+ };
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>;
193
+
147
194
  type ShutdownConfig = {
148
195
  /** Max time to wait for in-flight work to complete. Default: 30000ms */
149
196
  readonly timeoutMs?: number;
@@ -192,24 +239,92 @@ declare function gracefulShutdown<R>(runtime: Runtime<R>, config?: ShutdownConfi
192
239
  declare function registerShutdownHooks<R>(runtime: Runtime<R>, config?: ShutdownConfig): () => void;
193
240
 
194
241
  type TestRuntimeOptions = {
195
- /** If true, effects run synchronously where possible. Default: true */
242
+ /** Back-compat alias for autoFlush. When false, scheduled tasks only run when flushed. */
196
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;
197
318
  };
198
319
  /**
199
- * Creates a test runtime that provides controlled execution.
200
- *
201
- * ```ts
202
- * const { runtime, run, runExit } = makeTestRuntime();
320
+ * Creates a deterministic TypeScript test runtime.
203
321
  *
204
- * const result = await run(myEffect);
205
- * const exit = await runExit(myEffect); // get full Exit (success or failure)
206
- * ```
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.
207
326
  */
208
- declare function makeTestRuntime<R = {}>(env?: R, options?: TestRuntimeOptions): {
209
- runtime: Runtime<R>;
210
- run: <E, A>(effect: Async<R, E, A>) => Promise<A>;
211
- runExit: <E, A>(effect: Async<R, E, A>) => Promise<Exit<E, A>>;
212
- };
327
+ declare function makeTestRuntime<R extends object = {}>(env?: R, options?: TestRuntimeOptions): TestRuntime<R>;
213
328
  /**
214
329
  * Asserts that an effect succeeds with a specific value.
215
330
  *
@@ -267,20 +382,43 @@ declare function delayedEffect<A>(ms: number, value: A): Async<unknown, never, A
267
382
  */
268
383
  declare function neverEffect<A = never>(): Async<unknown, never, A>;
269
384
 
270
- /**
271
- * A Layer describes how to build a service.
272
- *
273
- * - RIn: dependencies required to build this service
274
- * - E: possible failure during construction
275
- * - ROut: the service produced
276
- */
277
- type Layer<RIn, E, ROut> = {
278
- readonly _tag: "Layer";
279
- readonly build: (deps: RIn) => Async<unknown, E, {
280
- service: ROut;
281
- release: () => Async<unknown, never, void>;
282
- }>;
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;
283
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>;
420
+ };
421
+ declare function makeLayerScope(): LayerScope;
284
422
  /**
285
423
  * Creates a Layer from an acquire/release pair.
286
424
  *
@@ -292,6 +430,11 @@ type Layer<RIn, E, ROut> = {
292
430
  * ```
293
431
  */
294
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>;
295
438
  /**
296
439
  * Creates a Layer that depends on another service.
297
440
  *
@@ -337,6 +480,7 @@ declare function merge<R1, E1, A, R2, E2, B>(left: Layer<R1, E1, A>, right: Laye
337
480
  * Map the output of a layer.
338
481
  */
339
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>>;
340
484
  /**
341
485
  * Builds a layer, runs an effect with the produced service, and releases.
342
486
  *
@@ -347,6 +491,44 @@ declare function mapLayer<RIn, E, A, B>(l: Layer<RIn, E, A>, f: (a: A) => B): La
347
491
  * ```
348
492
  */
349
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
+ }>;
350
532
 
351
533
  type WorkerPoolConfig = {
352
534
  /** Number of worker threads. Default: number of CPUs - 1 */
@@ -405,6 +587,28 @@ type WorkerPoolStats = {
405
587
  */
406
588
  declare function makeWorkerPool(config?: WorkerPoolConfig): WorkerPool;
407
589
 
590
+ type RuntimeRecorderOptions = {
591
+ readonly maxEvents?: number;
592
+ };
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
+
408
612
  type LogLevel = "debug" | "info" | "warn" | "error";
409
613
  declare function consoleJsonLogger(): RuntimeHooks;
410
614
 
@@ -559,9 +763,10 @@ declare class Supervisor<R> {
559
763
  private finish;
560
764
  private restartContext;
561
765
  private emit;
766
+ private scheduleClock;
562
767
  }
563
768
  declare function makeSupervisor<R>(runtime: Runtime<R>, config?: SupervisorConfig): Supervisor<R>;
564
769
  declare function supervise<R, E, A>(runtime: Runtime<R>, spec: SupervisedChildSpec<R, E, A>, config?: SupervisorConfig): SupervisedFiber<E, A>;
565
770
  declare function joinSupervised<E, A>(fiber: SupervisedFiber<E, A>): Async<unknown, E, A>;
566
771
 
567
- export { Async, Exit, Fiber, type Layer, type LogLevel, type Ref, type RetryPolicy, type RetryState, Runtime, RuntimeHooks, RuntimeRegistry, Schedule, type Semaphore, type SemaphoreStats, 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, type TestRuntimeOptions, type TimeoutError, type WorkerPool, type WorkerPoolConfig, type WorkerPoolError, type WorkerPoolStats, assertCompletesWithin, assertFails, assertFailsWith, assertSucceeds, catchTag, catchTags, compose as composeLayer, consoleJsonLogger, delayedEffect, derivedRef, dumpAllFibers, flakyEffect, gracefulShutdown, joinSupervised, layer, layerFail, layerFrom, layerSucceed, makeRef, makeSemaphore, makeSupervisor, makeTestRuntime, makeWorkerPool, mapError as mapErrorTyped, mapLayer, merge as mergeLayer, neverEffect, orElse, provideLayer, registerShutdownHooks, retry, retryN, retryWithBackoff, sleep, supervise, tagError, timeout };
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 };