reactor-effect-client 0.3.4 → 0.5.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 (76) hide show
  1. package/README.md +7 -3
  2. package/dist/SessionTypes.d.ts +0 -11
  3. package/dist/SessionTypes.d.ts.map +1 -1
  4. package/dist/SessionTypes.js.map +1 -1
  5. package/dist/coordinator/_internal/client.d.ts +0 -6
  6. package/dist/coordinator/_internal/client.d.ts.map +1 -1
  7. package/dist/coordinator/_internal/client.js.map +1 -1
  8. package/dist/coordinator/_internal/recording.d.ts +0 -2
  9. package/dist/coordinator/_internal/recording.d.ts.map +1 -1
  10. package/dist/coordinator/_internal/recording.js.map +1 -1
  11. package/dist/coordinator/_internal/schemas.d.ts +0 -12
  12. package/dist/coordinator/_internal/schemas.d.ts.map +1 -1
  13. package/dist/coordinator/_internal/schemas.js.map +1 -1
  14. package/dist/duration.d.ts +2 -0
  15. package/dist/duration.d.ts.map +1 -1
  16. package/dist/duration.js +1 -1
  17. package/dist/duration.js.map +1 -1
  18. package/dist/h3/types.d.ts +0 -8
  19. package/dist/h3/types.d.ts.map +1 -1
  20. package/dist/orchestration/elapsed.d.ts +9 -0
  21. package/dist/orchestration/elapsed.d.ts.map +1 -0
  22. package/dist/orchestration/elapsed.js +8 -0
  23. package/dist/orchestration/elapsed.js.map +1 -0
  24. package/dist/orchestration/h3-source.d.ts.map +1 -1
  25. package/dist/orchestration/h3-source.js +34 -11
  26. package/dist/orchestration/h3-source.js.map +1 -1
  27. package/dist/orchestration/index.d.ts +2 -2
  28. package/dist/orchestration/index.d.ts.map +1 -1
  29. package/dist/orchestration/index.js +1 -1
  30. package/dist/orchestration/index.js.map +1 -1
  31. package/dist/orchestration/queries.d.ts.map +1 -1
  32. package/dist/orchestration/queries.js +3 -0
  33. package/dist/orchestration/queries.js.map +1 -1
  34. package/dist/orchestration/references.d.ts +0 -2
  35. package/dist/orchestration/references.d.ts.map +1 -1
  36. package/dist/orchestration/references.js.map +1 -1
  37. package/dist/orchestration/renewal-state.d.ts +18 -4
  38. package/dist/orchestration/renewal-state.d.ts.map +1 -1
  39. package/dist/orchestration/renewal-state.js +9 -4
  40. package/dist/orchestration/renewal-state.js.map +1 -1
  41. package/dist/orchestration/renewal.d.ts +12 -9
  42. package/dist/orchestration/renewal.d.ts.map +1 -1
  43. package/dist/orchestration/renewal.js +104 -15
  44. package/dist/orchestration/renewal.js.map +1 -1
  45. package/dist/orchestration/scheduler-key.d.ts +13 -0
  46. package/dist/orchestration/scheduler-key.d.ts.map +1 -0
  47. package/dist/orchestration/scheduler-key.js +62 -0
  48. package/dist/orchestration/scheduler-key.js.map +1 -0
  49. package/dist/orchestration/scheduler-policy.d.ts +81 -0
  50. package/dist/orchestration/scheduler-policy.d.ts.map +1 -0
  51. package/dist/orchestration/scheduler-policy.js +203 -0
  52. package/dist/orchestration/scheduler-policy.js.map +1 -0
  53. package/dist/orchestration/scheduler.d.ts +182 -0
  54. package/dist/orchestration/scheduler.d.ts.map +1 -0
  55. package/dist/orchestration/scheduler.js +1430 -0
  56. package/dist/orchestration/scheduler.js.map +1 -0
  57. package/dist/orchestration/source-slot.d.ts +4 -1
  58. package/dist/orchestration/source-slot.d.ts.map +1 -1
  59. package/dist/orchestration/source-slot.js +36 -5
  60. package/dist/orchestration/source-slot.js.map +1 -1
  61. package/dist/orchestration/types.d.ts +77 -6
  62. package/dist/orchestration/types.d.ts.map +1 -1
  63. package/dist/orchestration/types.js.map +1 -1
  64. package/dist/session/files.d.ts +0 -2
  65. package/dist/session/files.d.ts.map +1 -1
  66. package/dist/session/files.js.map +1 -1
  67. package/dist/simulation/_internal/source.d.ts.map +1 -1
  68. package/dist/simulation/_internal/source.js +42 -28
  69. package/dist/simulation/_internal/source.js.map +1 -1
  70. package/dist/simulation/types.d.ts +0 -4
  71. package/dist/simulation/types.d.ts.map +1 -1
  72. package/package.json +2 -2
  73. package/dist/orchestration/lineup.d.ts +0 -90
  74. package/dist/orchestration/lineup.d.ts.map +0 -1
  75. package/dist/orchestration/lineup.js +0 -222
  76. package/dist/orchestration/lineup.js.map +0 -1
@@ -0,0 +1,203 @@
1
+ import * as Option from "effect/Option";
2
+ const preferredSession = (state) => Option.getOrUndefined(state.preferredSessionId);
3
+ /** Ready material on a retiring source is not runway for the replacement. */
4
+ export const runwaySeconds = (state, nowMs, playingStartedMs, owned, items) => {
5
+ const preferred = preferredSession(state);
6
+ const playing = Option.getOrUndefined(state.playing);
7
+ const record = playing === undefined ? undefined : Option.getOrUndefined(playing.record);
8
+ const started = playing === undefined ? undefined : playingStartedMs.get(playing.clipId);
9
+ const rest = record === undefined || started === undefined
10
+ ? 0
11
+ : Math.max(0, record.durationSeconds - (nowMs - started) / 1000);
12
+ return (rest +
13
+ state.ready
14
+ .filter((clip) => {
15
+ if (preferred !== undefined && clip.sessionId !== preferred)
16
+ return false;
17
+ const owner = owned.get(clip.clipId);
18
+ if (owner?._tag !== "Item")
19
+ return true;
20
+ const item = items.find((candidate) => candidate.key === owner.key);
21
+ return item?.atMs === undefined || item.atMs <= nowMs;
22
+ })
23
+ .reduce((seconds, clip) => seconds + clip.durationSeconds, 0));
24
+ };
25
+ /** A pure, single-action policy. The actor re-reads Engine after each applied action. */
26
+ export const plan = (snapshot) => {
27
+ const { engine, items, nowMs, owned } = snapshot;
28
+ const runway = runwaySeconds(engine, nowMs, snapshot.playingStartedMs, owned, items);
29
+ const nextAnchorMs = items
30
+ .filter((item) => item.phase !== "Terminal" && item.atMs !== undefined && item.atMs > nowMs)
31
+ .reduce((earliest, item) => Math.min(earliest, item.atMs ?? Infinity), Infinity);
32
+ const anchorGapSeconds = nextAnchorMs === Infinity ? 0 : (nextAnchorMs - nowMs) / 1000;
33
+ const fillTarget = Math.max(snapshot.targetSeconds, anchorGapSeconds);
34
+ const filling = anchorGapSeconds > runway ||
35
+ (snapshot.refillActive ? runway < snapshot.targetSeconds : runway < snapshot.floorSeconds);
36
+ const base = { runwaySeconds: runway, refillActive: filling };
37
+ // Sweep every status; expiry behind a nonexpired head must not be stranded.
38
+ for (const item of items) {
39
+ if (item.phase !== "Accepted" && item.phase !== "Building" && item.phase !== "Ready")
40
+ continue;
41
+ const lateBy = item.atMs === undefined ? undefined : nowMs - item.atMs;
42
+ const atExpired = lateBy === undefined || item.late === "nextBoundary"
43
+ ? false
44
+ : item.late === "drop"
45
+ ? lateBy > 0
46
+ : lateBy > item.late.skipIfLaterThanMs;
47
+ if ((item.firm && item.startByMs !== undefined && nowMs > item.startByMs) || atExpired)
48
+ return { ...base, action: { _tag: "Withdraw", key: item.key, reason: "late" } };
49
+ }
50
+ const preferred = preferredSession(engine);
51
+ const retiring = Option.getOrUndefined(engine.retiringSessionId);
52
+ if (preferred !== undefined &&
53
+ retiring !== undefined &&
54
+ engine.handoffReady === true &&
55
+ !engine.queued.some((clip) => clip.sessionId === retiring) &&
56
+ Option.getOrUndefined(engine.building)?.record.sessionId !== retiring &&
57
+ !items.some((item) => (item.phase === "Building" || item.phase === "Unknown") &&
58
+ (item.sessionId ?? item.unknownSessionId) === retiring) &&
59
+ engine.ready.some((clip) => clip.sessionId === preferred && owned.get(clip.clipId)?._tag === "Item")) {
60
+ const staleFiller = engine.ready.filter((clip) => clip.sessionId === retiring && owned.get(clip.clipId)?._tag === "Filler");
61
+ if (staleFiller.length > 0)
62
+ return {
63
+ ...base,
64
+ action: { _tag: "WithdrawFiller", clipIds: staleFiller.map((clip) => clip.clipId) },
65
+ };
66
+ }
67
+ // Physical sources are independent queues. A move never ranks across them.
68
+ let offset = 0;
69
+ for (const session of engine.sessions) {
70
+ const actual = engine.ready.filter((clip) => clip.sessionId === session.sessionId);
71
+ if (session.availability !== "Ready") {
72
+ offset += actual.length;
73
+ continue;
74
+ }
75
+ const rank = (clipId) => {
76
+ const clip = owned.get(clipId);
77
+ if (clip === undefined)
78
+ return [-1, 0];
79
+ if (clip._tag === "Filler")
80
+ return [snapshot.lanes.length, clip.index];
81
+ const item = items.find((value) => value.key === clip.key);
82
+ if (item?.atMs !== undefined && nowMs < item.atMs)
83
+ return [snapshot.lanes.length + 1, item.admission];
84
+ return [Math.max(0, snapshot.lanes.indexOf(item?.lane ?? "")), item?.admission ?? 0];
85
+ };
86
+ const desired = [...actual].sort((a, b) => {
87
+ const left = rank(a.clipId);
88
+ const right = rank(b.clipId);
89
+ return left[0] - right[0] || left[1] - right[1];
90
+ });
91
+ for (let index = 0; index < actual.length; index++) {
92
+ if (actual[index]?.clipId === desired[index]?.clipId)
93
+ continue;
94
+ const wanted = desired[index];
95
+ if (owned.has(wanted.clipId)) {
96
+ const action = { _tag: "Order", clipId: wanted.clipId, position: offset + index };
97
+ const signature = engine.ready.map((record) => record.clipId).join(",") +
98
+ ":" +
99
+ action.clipId +
100
+ ":" +
101
+ action.position;
102
+ if (snapshot.blockedMove !== signature)
103
+ return { ...base, action };
104
+ }
105
+ const displaced = actual[index];
106
+ if (owned.has(displaced.clipId)) {
107
+ const action = {
108
+ _tag: "Order",
109
+ clipId: displaced.clipId,
110
+ position: offset + desired.findIndex((clip) => clip.clipId === displaced.clipId),
111
+ };
112
+ const signature = engine.ready.map((record) => record.clipId).join(",") +
113
+ ":" +
114
+ action.clipId +
115
+ ":" +
116
+ action.position;
117
+ if (snapshot.blockedMove !== signature)
118
+ return { ...base, action };
119
+ }
120
+ }
121
+ offset += actual.length;
122
+ }
123
+ // Reorder movable Ready runway before treating a future At clip as exposed.
124
+ // A wall-clock correction can otherwise require removing and rebuilding it.
125
+ const playing = Option.getOrUndefined(engine.playing);
126
+ const playingRecord = playing === undefined ? undefined : Option.getOrUndefined(playing.record);
127
+ const playingStarted = playing === undefined ? undefined : snapshot.playingStartedMs.get(playing.clipId);
128
+ const playingRest = playingRecord === undefined || playingStarted === undefined
129
+ ? 0
130
+ : Math.max(0, playingRecord.durationSeconds - (nowMs - playingStarted) / 1000);
131
+ const exposedAnchor = items.find((item) => {
132
+ if (item.phase !== "Ready" ||
133
+ item.clipId === undefined ||
134
+ item.atMs === undefined ||
135
+ item.atMs <= nowMs)
136
+ return false;
137
+ const index = engine.ready.findIndex((clip) => clip.clipId === item.clipId);
138
+ if (index < 0)
139
+ return false;
140
+ const sessionId = engine.ready[index].sessionId;
141
+ const ahead = engine.ready
142
+ .slice(0, index)
143
+ .filter((clip) => {
144
+ if (clip.sessionId !== sessionId)
145
+ return false;
146
+ const owner = owned.get(clip.clipId);
147
+ if (owner?._tag !== "Item")
148
+ return true;
149
+ const prior = items.find((candidate) => candidate.key === owner.key);
150
+ return prior?.atMs === undefined || prior.atMs <= nowMs;
151
+ })
152
+ .reduce((seconds, clip) => seconds + clip.durationSeconds, 0);
153
+ return playingRest + ahead < (item.atMs - nowMs) / 1000;
154
+ });
155
+ if (exposedAnchor?.clipId !== undefined)
156
+ return {
157
+ ...base,
158
+ action: { _tag: "DeferAt", key: exposedAnchor.key, clipId: exposedAnchor.clipId },
159
+ };
160
+ const preferredAvailability = engine.sessions.find((session) => session.sessionId === preferred)?.availability;
161
+ if (!snapshot.accepting || preferredAvailability !== "Ready")
162
+ return base;
163
+ const activeFiller = [...owned.entries()].filter(([clipId, owner]) => owner._tag === "Filler" &&
164
+ (owner.sessionId === undefined || owner.sessionId === preferred) &&
165
+ !engine.ready.some((clip) => clip.clipId === clipId) &&
166
+ Option.getOrUndefined(engine.playing)?.clipId !== clipId &&
167
+ !engine.failed.includes(clipId)).length;
168
+ const inflight = items.filter((item) => (item.phase === "Building" || item.phase === "Unknown") &&
169
+ (item.sessionId ?? item.unknownSessionId ?? preferred) === preferred).length +
170
+ activeFiller +
171
+ (snapshot.fillerUnknown &&
172
+ (snapshot.fillerUnknownSessionId === undefined || snapshot.fillerUnknownSessionId === preferred)
173
+ ? 1
174
+ : 0);
175
+ if (inflight >= snapshot.maxBuildsInFlight)
176
+ return base;
177
+ const eligible = items
178
+ .filter((item) => item.phase === "Accepted" &&
179
+ (item.retryAtMs === undefined || nowMs >= item.retryAtMs) &&
180
+ (item.notBeforeMs === undefined || nowMs >= item.notBeforeMs) &&
181
+ // Autoplay cannot hold a Ready clip. Admit a future anchor only once
182
+ // known material ahead of it covers the time until that anchor.
183
+ (item.atMs === undefined || item.atMs <= nowMs || runway >= (item.atMs - nowMs) / 1000))
184
+ .sort((a, b) => {
185
+ const lane = snapshot.lanes.indexOf(a.lane) - snapshot.lanes.indexOf(b.lane);
186
+ return (lane || (a.startByMs ?? Infinity) - (b.startByMs ?? Infinity) || a.admission - b.admission);
187
+ });
188
+ if (eligible[0] !== undefined)
189
+ return { ...base, action: { _tag: "Build", key: eligible[0].key } };
190
+ if (snapshot.fillerEnabled &&
191
+ filling &&
192
+ runway < fillTarget &&
193
+ !(snapshot.fillerUnknown &&
194
+ (snapshot.fillerUnknownSessionId === undefined ||
195
+ snapshot.fillerUnknownSessionId === preferred)) &&
196
+ nowMs >= snapshot.fillerRetryAtMs)
197
+ return {
198
+ ...base,
199
+ action: { _tag: "BuildFiller", targetSeconds: fillTarget - runway },
200
+ };
201
+ return base;
202
+ };
203
+ //# sourceMappingURL=scheduler-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler-policy.js","sourceRoot":"","sources":["../../src/orchestration/scheduler-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ import * as Context from "effect/Context";
2
+ import * as Duration from "effect/Duration";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ import * as Schema from "effect/Schema";
6
+ import type * as Scope from "effect/Scope";
7
+ import * as Stream from "effect/Stream";
8
+ import { ReactorError } from "../errors.js";
9
+ import type { ReactorFailure } from "../errors.js";
10
+ import { PolicyFailure } from "./request.js";
11
+ import type { ClipRequest } from "./request.js";
12
+ import type { EngineError } from "./types.js";
13
+ import { Engine } from "./types.js";
14
+ /** Stable caller identity for a scheduled item. */
15
+ export declare const ItemKey: Schema.brand<Schema.NonEmptyString, "ItemKey">;
16
+ export type ItemKey = typeof ItemKey.Type;
17
+ export interface LaneSpec {
18
+ /** Lanes are listed from highest to lowest priority. */
19
+ readonly name: string;
20
+ }
21
+ export type StartMode = {
22
+ readonly _tag: "Follow";
23
+ } | {
24
+ readonly _tag: "At";
25
+ /** Epoch milliseconds; its monotonic deadline follows wall-clock corrections. */
26
+ readonly time: number;
27
+ readonly late: {
28
+ readonly _tag: "nextBoundary";
29
+ } | {
30
+ readonly _tag: "skipIfLaterThan";
31
+ readonly by: Duration.Input;
32
+ } | {
33
+ readonly _tag: "drop";
34
+ };
35
+ };
36
+ export interface ItemSpec {
37
+ readonly key: ItemKey;
38
+ readonly lane: string;
39
+ readonly request: ClipRequest;
40
+ /** Relative to admission, measured on the monotonic clock. */
41
+ readonly window?: {
42
+ readonly notBefore?: Duration.Input;
43
+ readonly startBy?: Duration.Input;
44
+ readonly firm: boolean;
45
+ };
46
+ readonly start?: StartMode;
47
+ }
48
+ export interface FillContext {
49
+ readonly index: number;
50
+ readonly runwaySeconds: number;
51
+ /** For an `At` anchor, the uncovered gap that filler should approach. */
52
+ readonly targetSeconds?: number;
53
+ }
54
+ export interface SchedulerOptions {
55
+ readonly lanes: ReadonlyArray<LaneSpec>;
56
+ readonly filler: {
57
+ /** Ready airtime, including the estimated rest of the playing clip. */
58
+ readonly runway: {
59
+ readonly floor: Duration.Input;
60
+ readonly target: Duration.Input;
61
+ };
62
+ /** Pure callback; each admitted index is requested once. */
63
+ readonly clip: (context: FillContext) => ClipRequest;
64
+ };
65
+ /** Provider build admissions in flight on the preferred source, independent of runway. Defaults to one. */
66
+ readonly maxBuildsInFlight?: number;
67
+ /** Completed keys retained for idempotency, oldest first; defaults to 4096. Active keys are never evicted. */
68
+ readonly maxHistory?: number;
69
+ }
70
+ export type ItemFailureReason = {
71
+ readonly _tag: "Scheduler";
72
+ readonly cause: ReactorFailure;
73
+ } | {
74
+ readonly _tag: "Command";
75
+ readonly cause: EngineError;
76
+ } | {
77
+ readonly _tag: "Clip";
78
+ readonly message: string;
79
+ };
80
+ export type AsRunStatus = {
81
+ readonly _tag: "Accepted";
82
+ } | {
83
+ readonly _tag: "Building";
84
+ } | {
85
+ readonly _tag: "Ready";
86
+ readonly sessionId: string;
87
+ } | {
88
+ readonly _tag: "Started";
89
+ readonly at: number;
90
+ readonly sessionId: string;
91
+ readonly durationSeconds: number;
92
+ readonly lateByMillis?: number;
93
+ } | {
94
+ readonly _tag: "Ended";
95
+ readonly at: number;
96
+ readonly termination: "finished" | "stopped";
97
+ readonly airedSeconds: number;
98
+ } | {
99
+ readonly _tag: "Dropped";
100
+ readonly reason: "late" | "withdrawn";
101
+ } | {
102
+ readonly _tag: "Failed";
103
+ readonly reason: ItemFailureReason;
104
+ } | {
105
+ readonly _tag: "Unobserved";
106
+ } | {
107
+ readonly _tag: "Unknown";
108
+ /** The original source retired without keyed proof; no further reconciliation is possible. */
109
+ readonly terminal?: true;
110
+ };
111
+ /** The first observed start or a disposition that rules out a known start. */
112
+ export type FirstDecisiveStatus = Extract<AsRunStatus, {
113
+ readonly _tag: "Started" | "Ended" | "Dropped" | "Failed" | "Unobserved";
114
+ }> | {
115
+ readonly _tag: "Unknown";
116
+ readonly terminal: true;
117
+ };
118
+ export interface AsRunEvent {
119
+ readonly key: ItemKey;
120
+ /** Epoch milliseconds when this evidence was observed. */
121
+ readonly at: number;
122
+ readonly status: AsRunStatus;
123
+ }
124
+ export interface ItemHandle {
125
+ readonly key: ItemKey;
126
+ /** Resolves when the item starts or cannot be known to start. */
127
+ readonly started: Effect.Effect<AsRunStatus>;
128
+ /** Resolves when the item ends or cannot be known to end. */
129
+ readonly outcome: Effect.Effect<AsRunStatus>;
130
+ /** Retains the first decisive evidence, even if later as-run events or a lost reply follow. */
131
+ readonly firstDecisive: Effect.Effect<FirstDecisiveStatus>;
132
+ }
133
+ export type WithdrawOutcome = "withdrawn" | "already-started" | "not-found";
134
+ export interface DrainOptions {
135
+ /** Finish only current playback, or every item already accepted. Defaults to playing. */
136
+ readonly finish?: "playing" | "accepted";
137
+ }
138
+ export interface SchedulerState {
139
+ readonly accepting: boolean;
140
+ readonly runwaySeconds: number;
141
+ readonly playing: ItemKey | "filler" | "other" | null;
142
+ readonly lanes: ReadonlyArray<{
143
+ readonly name: string;
144
+ readonly keys: ReadonlyArray<ItemKey>;
145
+ }>;
146
+ readonly sessions: ReadonlyArray<{
147
+ readonly sessionId: string;
148
+ readonly ready: ReadonlyArray<ItemKey | "filler" | "other">;
149
+ }>;
150
+ readonly starved: number;
151
+ }
152
+ declare const KeyMismatch_base: Schema.Class<KeyMismatch, Schema.TaggedStruct<"KeyMismatch", {
153
+ readonly key: Schema.brand<Schema.NonEmptyString, "ItemKey">;
154
+ }>, import("effect/Cause").YieldableError>;
155
+ export declare class KeyMismatch extends KeyMismatch_base {
156
+ static of(key: ItemKey): KeyMismatch;
157
+ }
158
+ declare const WouldMissDeadline_base: Schema.Class<WouldMissDeadline, Schema.TaggedStruct<"WouldMissDeadline", {
159
+ readonly key: Schema.brand<Schema.NonEmptyString, "ItemKey">;
160
+ }>, import("effect/Cause").YieldableError>;
161
+ export declare class WouldMissDeadline extends WouldMissDeadline_base {
162
+ static of(key: ItemKey): WouldMissDeadline;
163
+ }
164
+ export interface SchedulerShape {
165
+ readonly submit: (item: ItemSpec) => Effect.Effect<ItemHandle, KeyMismatch | WouldMissDeadline | EngineError>;
166
+ readonly withdraw: (key: ItemKey) => Effect.Effect<WithdrawOutcome, EngineError>;
167
+ readonly drain: (options?: DrainOptions) => Effect.Effect<void, EngineError>;
168
+ /** Original terminal failure, including Closed when the owning scope ends. */
169
+ readonly failure: Effect.Effect<ReactorFailure>;
170
+ readonly state: Effect.Effect<SchedulerState>;
171
+ /** Lifecycle evidence is ordered per item; subscribers receive later events. */
172
+ readonly asRun: Stream.Stream<AsRunEvent>;
173
+ }
174
+ export declare const lineup: (filler: SchedulerOptions["filler"]) => SchedulerOptions;
175
+ declare const Scheduler_base: Context.ServiceClass<Scheduler, "reactor-effect-client/Orchestration/Scheduler", SchedulerShape>;
176
+ export declare class Scheduler extends Scheduler_base {
177
+ static readonly lineup: typeof lineup;
178
+ }
179
+ export declare const makeScheduler: (options: SchedulerOptions) => Effect.Effect<SchedulerShape, ReactorError | PolicyFailure, Engine | Scope.Scope>;
180
+ export declare const layerScheduler: (options: SchedulerOptions) => Layer.Layer<Scheduler, ReactorError | PolicyFailure, Engine>;
181
+ export {};
182
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/orchestration/scheduler.ts"],"names":[],"mappings":"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"}