@usine/orchestrator 0.1.0 → 0.2.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 (122) hide show
  1. package/README.md +46 -21
  2. package/dist/board/items.d.ts +18 -0
  3. package/dist/board/items.d.ts.map +1 -0
  4. package/dist/board/items.js +46 -0
  5. package/dist/board/items.js.map +1 -0
  6. package/dist/board/projection.d.ts +6 -5
  7. package/dist/board/projection.d.ts.map +1 -1
  8. package/dist/board/projection.js +25 -65
  9. package/dist/board/projection.js.map +1 -1
  10. package/dist/board/tasks.d.ts +8 -0
  11. package/dist/board/tasks.d.ts.map +1 -0
  12. package/dist/board/tasks.js +86 -0
  13. package/dist/board/tasks.js.map +1 -0
  14. package/dist/credentials.d.ts +6 -6
  15. package/dist/credentials.d.ts.map +1 -1
  16. package/dist/credentials.js +6 -6
  17. package/dist/credentials.js.map +1 -1
  18. package/dist/exe-dev.d.ts +5 -4
  19. package/dist/exe-dev.d.ts.map +1 -1
  20. package/dist/exe-dev.js +5 -4
  21. package/dist/exe-dev.js.map +1 -1
  22. package/dist/idle-triggers.d.ts +1 -1
  23. package/dist/idle-triggers.d.ts.map +1 -1
  24. package/dist/idle-triggers.js +3 -1
  25. package/dist/idle-triggers.js.map +1 -1
  26. package/dist/label-reconciler.d.ts +30 -0
  27. package/dist/label-reconciler.d.ts.map +1 -0
  28. package/dist/label-reconciler.js +119 -0
  29. package/dist/label-reconciler.js.map +1 -0
  30. package/dist/local.d.ts +17 -12
  31. package/dist/local.d.ts.map +1 -1
  32. package/dist/local.js +20 -13
  33. package/dist/local.js.map +1 -1
  34. package/dist/operator/attempt.d.ts +69 -0
  35. package/dist/operator/attempt.d.ts.map +1 -0
  36. package/dist/operator/attempt.js +62 -0
  37. package/dist/operator/attempt.js.map +1 -0
  38. package/dist/operator/board.d.ts +119 -0
  39. package/dist/operator/board.d.ts.map +1 -0
  40. package/dist/operator/board.js +101 -0
  41. package/dist/operator/board.js.map +1 -0
  42. package/dist/operator/http.d.ts +180 -0
  43. package/dist/operator/http.d.ts.map +1 -0
  44. package/dist/operator/http.js +150 -0
  45. package/dist/operator/http.js.map +1 -0
  46. package/dist/operator/need.d.ts +66 -0
  47. package/dist/operator/need.d.ts.map +1 -0
  48. package/dist/operator/need.js +70 -0
  49. package/dist/operator/need.js.map +1 -0
  50. package/dist/operator/operator.d.ts +68 -0
  51. package/dist/operator/operator.d.ts.map +1 -0
  52. package/dist/operator/operator.js +402 -0
  53. package/dist/operator/operator.js.map +1 -0
  54. package/dist/operator/overview.d.ts +51 -0
  55. package/dist/operator/overview.d.ts.map +1 -0
  56. package/dist/operator/overview.js +48 -0
  57. package/dist/operator/overview.js.map +1 -0
  58. package/dist/operator/projection.d.ts +12 -9
  59. package/dist/operator/projection.d.ts.map +1 -1
  60. package/dist/operator/projection.js +44 -17
  61. package/dist/operator/projection.js.map +1 -1
  62. package/dist/operator/run.d.ts +62 -0
  63. package/dist/operator/run.d.ts.map +1 -0
  64. package/dist/operator/run.js +61 -0
  65. package/dist/operator/run.js.map +1 -0
  66. package/dist/operator/transcript.d.ts +59 -0
  67. package/dist/operator/transcript.d.ts.map +1 -0
  68. package/dist/operator/transcript.js +66 -0
  69. package/dist/operator/transcript.js.map +1 -0
  70. package/dist/orchestrator.d.ts +3 -2
  71. package/dist/orchestrator.d.ts.map +1 -1
  72. package/dist/orchestrator.js +1 -1
  73. package/dist/orchestrator.js.map +1 -1
  74. package/dist/polling/cycle.d.ts +51 -0
  75. package/dist/polling/cycle.d.ts.map +1 -0
  76. package/dist/polling/cycle.js +44 -0
  77. package/dist/polling/cycle.js.map +1 -0
  78. package/dist/polling/hints.d.ts +20 -0
  79. package/dist/polling/hints.d.ts.map +1 -0
  80. package/dist/polling/hints.js +54 -0
  81. package/dist/polling/hints.js.map +1 -0
  82. package/dist/polling/loop-evaluation.d.ts +21 -0
  83. package/dist/polling/loop-evaluation.d.ts.map +1 -0
  84. package/dist/polling/loop-evaluation.js +131 -0
  85. package/dist/polling/loop-evaluation.js.map +1 -0
  86. package/dist/polling/polling.d.ts +36 -0
  87. package/dist/polling/polling.d.ts.map +1 -0
  88. package/dist/polling/polling.js +296 -0
  89. package/dist/polling/polling.js.map +1 -0
  90. package/dist/polling/repository-sync.d.ts +45 -0
  91. package/dist/polling/repository-sync.d.ts.map +1 -0
  92. package/dist/polling/repository-sync.js +169 -0
  93. package/dist/polling/repository-sync.js.map +1 -0
  94. package/dist/polling-triggers.d.ts +3 -39
  95. package/dist/polling-triggers.d.ts.map +1 -1
  96. package/dist/polling-triggers.js +3 -393
  97. package/dist/polling-triggers.js.map +1 -1
  98. package/dist/schedule-triggers.d.ts +17 -15
  99. package/dist/schedule-triggers.d.ts.map +1 -1
  100. package/dist/schedule-triggers.js +53 -43
  101. package/dist/schedule-triggers.js.map +1 -1
  102. package/dist/scheduler.d.ts +5 -5
  103. package/dist/scheduler.d.ts.map +1 -1
  104. package/dist/scheduler.js +30 -44
  105. package/dist/scheduler.js.map +1 -1
  106. package/dist/trigger-submission.d.ts +33 -24
  107. package/dist/trigger-submission.d.ts.map +1 -1
  108. package/dist/trigger-submission.js +30 -37
  109. package/dist/trigger-submission.js.map +1 -1
  110. package/package.json +50 -14
  111. package/dist/index.d.ts +0 -11
  112. package/dist/index.d.ts.map +0 -1
  113. package/dist/index.js +0 -11
  114. package/dist/index.js.map +0 -1
  115. package/dist/operator/model.d.ts +0 -280
  116. package/dist/operator/model.d.ts.map +0 -1
  117. package/dist/operator/model.js +0 -242
  118. package/dist/operator/model.js.map +0 -1
  119. package/dist/operator/service.d.ts +0 -36
  120. package/dist/operator/service.d.ts.map +0 -1
  121. package/dist/operator/service.js +0 -248
  122. package/dist/operator/service.js.map +0 -1
@@ -1,242 +0,0 @@
1
- import { Agent, Attempt, AttemptChannel, AttemptFailure, Item, Loop, Repository, Run, RunState, Worker, } from "@usine/core";
2
- import { GitHubLabelName, LaneItemState, LaneName, LaneSource } from "@usine/config";
3
- import { TranscriptSequence } from "@usine/engine";
4
- import { Schema } from "effect";
5
- import { RepositoryPollFailure } from "../polling-triggers.js";
6
- import { ScheduleFailure } from "../schedule-triggers.js";
7
- /** Cursor for tailing the append-only transcript without replaying older events. */
8
- export const TranscriptCursor = TranscriptSequence;
9
- export const ProjectStatus = Schema.Literals(["clear", "active", "needs-you"]);
10
- export const RunStateTag = Schema.Literals(RunState.STATE_TAGS);
11
- const NullableString = Schema.NullOr(Schema.String);
12
- /** Operator-safe failure variants. Infrastructure defect causes never cross this boundary. */
13
- export class InfraFailureView extends Schema.TaggedClass("@usine/orchestrator/InfraFailureView")("InfraFailure", { message: Schema.String }) {
14
- }
15
- export class AgentFailureView extends Schema.TaggedClass("@usine/orchestrator/AgentFailureView")("AgentFailure", { message: Schema.String }) {
16
- }
17
- export class RunawayFailureView extends Schema.TaggedClass("@usine/orchestrator/RunawayFailureView")("RunawayFailure", { ceiling: AttemptFailure.RunawayCeiling }) {
18
- }
19
- export const FailureView = Schema.Union([InfraFailureView, AgentFailureView, RunawayFailureView]);
20
- export class SucceededAttemptView extends Schema.TaggedClass("@usine/orchestrator/SucceededAttemptView")("Succeeded", {}) {
21
- }
22
- export class FailedAttemptView extends Schema.TaggedClass("@usine/orchestrator/FailedAttemptView")("Failed", { failure: FailureView }) {
23
- }
24
- export class CanceledAttemptView extends Schema.TaggedClass("@usine/orchestrator/CanceledAttemptView")("Canceled", {}) {
25
- }
26
- export const AttemptOutcomeView = Schema.Union([
27
- SucceededAttemptView,
28
- FailedAttemptView,
29
- CanceledAttemptView,
30
- ]);
31
- export class AttemptView extends Schema.Class("@usine/orchestrator/AttemptView")({
32
- id: Attempt.AttemptId,
33
- number: Attempt.AttemptNumber,
34
- worker: Worker.Name,
35
- brain: Agent.BrainSpec,
36
- startedAt: Schema.String,
37
- outcome: Schema.NullOr(AttemptOutcomeView),
38
- }) {
39
- }
40
- export class RunView extends Schema.Class("@usine/orchestrator/RunView")({
41
- id: Run.RunId,
42
- itemKey: Item.ItemKey,
43
- loop: Loop.LoopName,
44
- repository: Repository.Name,
45
- agent: Agent.Name,
46
- state: RunStateTag,
47
- loopPaused: Schema.Boolean,
48
- openedAt: Schema.String,
49
- task: Schema.String,
50
- attempts: Schema.Array(AttemptView),
51
- resultMessage: NullableString,
52
- pullRequestUrl: NullableString,
53
- canApprove: Schema.Boolean,
54
- canRetry: Schema.Boolean,
55
- canCancel: Schema.Boolean,
56
- }) {
57
- }
58
- export const BoardLaneId = Schema.NonEmptyString.pipe(Schema.brand("BoardLaneId"));
59
- export const BoardLaneOrigin = Schema.Literals(["authored", "proposed", "fallback"]);
60
- export class BoardItemView extends Schema.Class("@usine/orchestrator/BoardItemView")({
61
- itemKey: Item.ItemKey,
62
- kind: Schema.Literals(["issue", "pr"]),
63
- number: Item.Number,
64
- title: Schema.String,
65
- url: Schema.NonEmptyString,
66
- state: LaneItemState,
67
- labels: Schema.Array(GitHubLabelName),
68
- /** All runs retained for a card, including every action the operator can take. */
69
- runs: Schema.Array(RunView),
70
- run: Schema.NullOr(RunView),
71
- needsYou: Schema.Boolean,
72
- }) {
73
- }
74
- const BoardLaneViewFields = {
75
- id: BoardLaneId,
76
- name: LaneName,
77
- sources: Schema.Array(LaneSource),
78
- origin: BoardLaneOrigin,
79
- items: Schema.Array(BoardItemView),
80
- };
81
- export class WritableBoardLaneView extends Schema.TaggedClass("@usine/orchestrator/WritableBoardLaneView")("WritableBoardLane", {
82
- ...BoardLaneViewFields,
83
- labels: Schema.Array(GitHubLabelName).check(Schema.isNonEmpty()),
84
- }) {
85
- }
86
- export class ReadOnlyBoardLaneView extends Schema.TaggedClass("@usine/orchestrator/ReadOnlyBoardLaneView")("ReadOnlyBoardLane", BoardLaneViewFields) {
87
- }
88
- export const BoardLaneView = Schema.Union([WritableBoardLaneView, ReadOnlyBoardLaneView]);
89
- export class BoardProjectionError extends Schema.TaggedError("@usine/orchestrator/BoardProjectionError")("BoardProjectionError", {
90
- repository: Repository.Name,
91
- itemKey: Item.ItemKey,
92
- message: Schema.NonEmptyString,
93
- }) {
94
- }
95
- export class BoardView extends Schema.Class("@usine/orchestrator/BoardView")({
96
- lanes: Schema.Array(BoardLaneView),
97
- failures: Schema.Array(BoardProjectionError),
98
- }) {
99
- }
100
- export class ProjectView extends Schema.Class("@usine/orchestrator/ProjectView")({
101
- repository: Repository.Name,
102
- status: ProjectStatus,
103
- runs: Schema.Array(RunView),
104
- board: BoardView,
105
- }) {
106
- }
107
- export class BoardMove extends Schema.Class("@usine/orchestrator/BoardMove")({
108
- repository: Repository.Name,
109
- item: Item.Number,
110
- toLane: BoardLaneId,
111
- }) {
112
- }
113
- export class BoardProjectNotFoundError extends Schema.TaggedError("@usine/orchestrator/BoardProjectNotFoundError")("BoardProjectNotFoundError", {
114
- repository: Repository.Name,
115
- }) {
116
- }
117
- export class BoardItemNotFoundError extends Schema.TaggedError("@usine/orchestrator/BoardItemNotFoundError")("BoardItemNotFoundError", {
118
- repository: Repository.Name,
119
- item: Item.Number,
120
- }) {
121
- }
122
- export class BoardLaneNotFoundError extends Schema.TaggedError("@usine/orchestrator/BoardLaneNotFoundError")("BoardLaneNotFoundError", {
123
- repository: Repository.Name,
124
- lane: BoardLaneId,
125
- }) {
126
- }
127
- export class BoardLaneReadOnlyError extends Schema.TaggedError("@usine/orchestrator/BoardLaneReadOnlyError")("BoardLaneReadOnlyError", {
128
- repository: Repository.Name,
129
- lane: BoardLaneId,
130
- }) {
131
- }
132
- export class LoopView extends Schema.Class("@usine/orchestrator/LoopView")({
133
- name: Loop.LoopName,
134
- trigger: Schema.String,
135
- agent: Agent.Name,
136
- paused: Schema.Boolean,
137
- }) {
138
- }
139
- export class ApprovalNeed extends Schema.TaggedClass("@usine/orchestrator/ApprovalNeed")("ApprovalNeed", {
140
- id: Schema.String,
141
- repository: Repository.Name,
142
- runId: Run.RunId,
143
- loop: Loop.LoopName,
144
- }) {
145
- }
146
- export class RunFailureNeed extends Schema.TaggedClass("@usine/orchestrator/RunFailureNeed")("RunFailureNeed", {
147
- id: Schema.String,
148
- repository: Repository.Name,
149
- runId: Run.RunId,
150
- loop: Loop.LoopName,
151
- failure: FailureView,
152
- }) {
153
- }
154
- export class PollFailureNeed extends Schema.TaggedClass("@usine/orchestrator/PollFailureNeed")("PollFailureNeed", {
155
- id: Schema.String,
156
- failure: RepositoryPollFailure,
157
- }) {
158
- }
159
- export class BoardProjectionNeed extends Schema.TaggedClass("@usine/orchestrator/BoardProjectionNeed")("BoardProjectionNeed", {
160
- id: Schema.String,
161
- failure: BoardProjectionError,
162
- }) {
163
- }
164
- export class ScheduleFailureNeed extends Schema.TaggedClass("@usine/orchestrator/ScheduleFailureNeed")("ScheduleFailureNeed", {
165
- id: Schema.String,
166
- failure: ScheduleFailure,
167
- }) {
168
- }
169
- export const NeedView = Schema.Union([
170
- ApprovalNeed,
171
- BoardProjectionNeed,
172
- RunFailureNeed,
173
- PollFailureNeed,
174
- ScheduleFailureNeed,
175
- ]);
176
- export class FailedTranscriptView extends Schema.TaggedClass("@usine/orchestrator/FailedTranscriptView")("Failed", { failure: FailureView }) {
177
- }
178
- export const TranscriptPayload = Schema.Union([
179
- AttemptChannel.Started,
180
- AttemptChannel.SessionEvent,
181
- AttemptChannel.Final,
182
- FailedTranscriptView,
183
- AttemptChannel.Interrupted,
184
- AttemptChannel.Steer,
185
- AttemptChannel.Interrupt,
186
- ]);
187
- export class TranscriptEventView extends Schema.Class("@usine/orchestrator/TranscriptEventView")({
188
- sequence: TranscriptCursor,
189
- attemptId: Attempt.AttemptId,
190
- receivedAt: Schema.String,
191
- direction: AttemptChannel.Direction,
192
- payload: TranscriptPayload,
193
- }) {
194
- }
195
- /** Cursor for loading one earlier page without mixing Attempts across Runs. */
196
- export class TranscriptPageCursor extends Schema.Class("@usine/orchestrator/TranscriptPageCursor")({
197
- attemptId: Attempt.AttemptId,
198
- before: TranscriptCursor,
199
- }) {
200
- }
201
- export class ColdTranscriptRequest extends Schema.TaggedClass("@usine/orchestrator/ColdTranscriptRequest")("ColdTranscriptRequest", {}) {
202
- }
203
- export class TailTranscriptRequest extends Schema.TaggedClass("@usine/orchestrator/TailTranscriptRequest")("TailTranscriptRequest", { after: TranscriptCursor }) {
204
- }
205
- export class EarlierTranscriptRequest extends Schema.TaggedClass("@usine/orchestrator/EarlierTranscriptRequest")("EarlierTranscriptRequest", {
206
- attemptId: Attempt.AttemptId,
207
- before: TranscriptCursor,
208
- }) {
209
- }
210
- export const TranscriptRequest = Schema.Union([
211
- ColdTranscriptRequest,
212
- TailTranscriptRequest,
213
- EarlierTranscriptRequest,
214
- ]);
215
- export class TranscriptAttemptNotFoundError extends Schema.TaggedError("@usine/orchestrator/TranscriptAttemptNotFoundError")("TranscriptAttemptNotFoundError", {
216
- runId: Run.RunId,
217
- attemptId: Attempt.AttemptId,
218
- }) {
219
- }
220
- export class RunDetailView extends Schema.Class("@usine/orchestrator/RunDetailView")({
221
- run: RunView,
222
- eventDedupKey: Schema.String,
223
- eventPayload: Schema.Json,
224
- transcript: Schema.Array(TranscriptEventView),
225
- earlierTranscript: Schema.Array(TranscriptPageCursor),
226
- }) {
227
- }
228
- export class ReadyOverview extends Schema.TaggedClass("@usine/orchestrator/ReadyOverview")("Ready", {
229
- projects: Schema.Array(ProjectView),
230
- loops: Schema.Array(LoopView),
231
- needsYou: Schema.Array(NeedView),
232
- }) {
233
- }
234
- export class NeedsSetupOverview extends Schema.TaggedClass("@usine/orchestrator/NeedsSetupOverview")("NeedsSetup", {
235
- errorTag: Schema.NonEmptyString,
236
- projects: Schema.Array(ProjectView),
237
- loops: Schema.Array(LoopView),
238
- needsYou: Schema.Array(NeedView),
239
- }) {
240
- }
241
- export const FactoryOverview = Schema.Union([ReadyOverview, NeedsSetupOverview]);
242
- //# sourceMappingURL=model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/operator/model.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- import type { LoadedInstance } from "@usine/config";
2
- import { Loop, Run } from "@usine/core";
3
- import { ItemProjectionReader, LoopControl, RepositoryLabelProjectionReader, RunEngine, RunReader, type EnginePersistenceError, type LoopRuntimeState, type RunEngineError, type RunStoreError } from "@usine/engine";
4
- import { GitHubItemWriter, type GitHubAppError } from "@usine/github";
5
- import { Context, Effect, Layer } from "effect";
6
- import { PollingTriggers } from "../polling-triggers.ts";
7
- import { ScheduleTriggers } from "../schedule-triggers.ts";
8
- import { type BoardItemNotFoundError, type BoardLaneNotFoundError, type BoardLaneReadOnlyError, type BoardMove, type BoardProjectNotFoundError, ReadyOverview, RunDetailView, type TranscriptAttemptNotFoundError, type TranscriptRequest } from "./model.ts";
9
- export type BoardMoveError = BoardItemNotFoundError | BoardLaneNotFoundError | BoardLaneReadOnlyError | BoardProjectNotFoundError | EnginePersistenceError | GitHubAppError;
10
- export type OperatorError = RunEngineError | TranscriptAttemptNotFoundError | BoardMoveError;
11
- export type OperatorObservationError = RunStoreError | TranscriptAttemptNotFoundError;
12
- declare const OperatorObservation_base: Context.ServiceClass<OperatorObservation, "@usine/orchestrator/OperatorObservation", {
13
- readonly overview: (instance: LoadedInstance) => Effect.Effect<ReadyOverview, OperatorObservationError>;
14
- readonly detail: (runId: Run.RunId, request?: TranscriptRequest) => Effect.Effect<RunDetailView, OperatorObservationError>;
15
- }>;
16
- /** Read-only operator surface; safe to build without trigger execution. */
17
- export declare class OperatorObservation extends OperatorObservation_base {
18
- static readonly layer: Layer.Layer<OperatorObservation, never, ItemProjectionReader | LoopControl | PollingTriggers | RepositoryLabelProjectionReader | RunReader | ScheduleTriggers>;
19
- }
20
- declare const Operator_base: Context.ServiceClass<Operator, "@usine/orchestrator/Operator", {
21
- readonly overview: (instance: LoadedInstance) => Effect.Effect<ReadyOverview, OperatorObservationError>;
22
- readonly detail: (runId: Run.RunId, request?: TranscriptRequest) => Effect.Effect<RunDetailView, OperatorObservationError>;
23
- } & {
24
- readonly approve: (runId: Run.RunId) => Effect.Effect<void, OperatorError>;
25
- readonly retry: (runId: Run.RunId) => Effect.Effect<void, OperatorError>;
26
- readonly cancel: (runId: Run.RunId) => Effect.Effect<void, OperatorError>;
27
- readonly moveBoardItem: (instance: LoadedInstance, move: BoardMove) => Effect.Effect<void, BoardMoveError>;
28
- readonly pause: (loop: Loop.LoopName) => Effect.Effect<LoopRuntimeState, EnginePersistenceError>;
29
- readonly unpause: (loop: Loop.LoopName) => Effect.Effect<LoopRuntimeState, EnginePersistenceError>;
30
- }>;
31
- /** Observe-and-intervene application service; transports only translate this API. */
32
- export declare class Operator extends Operator_base {
33
- static readonly layer: Layer.Layer<Operator, never, GitHubItemWriter | ItemProjectionReader | LoopControl | PollingTriggers | RepositoryLabelProjectionReader | RunEngine | RunReader | ScheduleTriggers>;
34
- }
35
- export {};
36
- //# sourceMappingURL=service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/operator/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAS,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,+BAA+B,EAC/B,SAAS,EACT,SAAS,EACT,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAErB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,OAAO,EAAY,MAAM,EAAE,KAAK,EAA2B,MAAM,QAAQ,CAAC;AAEnF,OAAO,EAAE,eAAe,EAA8B,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAwB,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,sBAAsB,EAE3B,KAAK,sBAAsB,EAE3B,KAAK,SAAS,EAEd,KAAK,yBAAyB,EAM9B,aAAa,EACb,aAAa,EAGb,KAAK,8BAA8B,EACnC,KAAK,iBAAiB,EAGvB,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,cAAc,GACtB,sBAAsB,GACtB,sBAAsB,GACtB,sBAAsB,GACtB,yBAAyB,GACzB,sBAAsB,GACtB,cAAc,CAAC;AACnB,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,8BAA8B,GAAG,cAAc,CAAC;AAC7F,MAAM,MAAM,wBAAwB,GAAG,aAAa,GAAG,8BAA8B,CAAC;;uBAkO/D,CACjB,QAAQ,EAAE,cAAc,KACrB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,wBAAwB,CAAC;qBAC1C,CACf,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,OAAO,CAAC,EAAE,iBAAiB,KACxB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,wBAAwB,CAAC;;AAV/D,2EAA2E;AAC3E,qBAAa,mBAAoB,SAAQ,wBAWK;IAC5C,MAAM,CAAC,QAAQ,CAAC,KAAK,iKAA8D;CACpF;;uBAVsB,CACjB,QAAQ,EAAE,cAAc,KACrB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,wBAAwB,CAAC;qBAC1C,CACf,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,OAAO,CAAC,EAAE,iBAAiB,KACxB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,wBAAwB,CAAC;;sBAsHzC,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;oBAC1D,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;qBACvD,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;4BACjD,CACtB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,SAAS,KACZ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC;oBACxB,CACd,IAAI,EAAE,IAAI,CAAC,QAAQ,KAChB,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;sBAC1C,CAChB,IAAI,EAAE,IAAI,CAAC,QAAQ,KAChB,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;;AAhBhE,qFAAqF;AACrF,qBAAa,QAAS,SAAQ,aAiBK;IACjC,MAAM,CAAC,QAAQ,CAAC,KAAK,qLAEnB;CACH"}
@@ -1,248 +0,0 @@
1
- import { Event, Loop, Run } from "@usine/core";
2
- import { ItemProjectionReader, LoopControl, RepositoryLabelProjectionReader, RunEngine, RunReader, } from "@usine/engine";
3
- import { GitHubItemWriter } from "@usine/github";
4
- import { Context, DateTime, Effect, Layer, Option, SynchronizedRef } from "effect";
5
- import { labelMutationForBoardMove, projectBoard } from "../board/projection.js";
6
- import { PollingTriggers } from "../polling-triggers.js";
7
- import { ScheduleTriggers } from "../schedule-triggers.js";
8
- import { ApprovalNeed, BoardItemNotFoundError as BoardItemNotFound, BoardLaneNotFoundError as BoardLaneNotFound, BoardLaneReadOnlyError as BoardLaneReadOnly, BoardProjectionNeed, BoardProjectNotFoundError as BoardProjectNotFound, ColdTranscriptRequest, LoopView, PollFailureNeed, ProjectView, ReadyOverview, RunDetailView, RunFailureNeed, ScheduleFailureNeed, } from "./model.js";
9
- import { readTranscript, runView } from "./projection.js";
10
- /** Settled Runs kept in the overview beside every open one; history stays bounded. */
11
- const OVERVIEW_CLOSED_RUNS = 100;
12
- /** Newest Items projected onto a Board; older ones fall off instead of growing the overview. */
13
- const OVERVIEW_BOARD_ITEMS = 500;
14
- const makeOperatorObservation = Effect.gen(function* () {
15
- const reader = yield* RunReader;
16
- const controls = yield* LoopControl;
17
- const itemReader = yield* ItemProjectionReader;
18
- const repositoryLabels = yield* RepositoryLabelProjectionReader;
19
- const polling = yield* PollingTriggers;
20
- const schedules = yield* ScheduleTriggers;
21
- const cache = yield* SynchronizedRef.make(Option.none());
22
- const projectOverview = Effect.fn("Operator.projectOverview")(function* (instance, pollFailures, scheduleFailures, revision) {
23
- const [snapshots, states] = yield* Effect.all([reader.list({ closedLimit: OVERVIEW_CLOSED_RUNS }), controls.states], { concurrency: "unbounded" });
24
- const paused = new Set(states.filter((state) => state.paused).map((state) => state.loop));
25
- const views = snapshots.map((snapshot) => runView(snapshot, paused));
26
- const runsByRepository = new Map();
27
- for (const view of views) {
28
- const projectRuns = runsByRepository.get(view.repository) ?? [];
29
- projectRuns.push(view);
30
- runsByRepository.set(view.repository, projectRuns);
31
- }
32
- const projects = yield* Effect.forEach(instance.config.repos, (repository) => Effect.gen(function* () {
33
- const { name } = repository;
34
- const projectRuns = runsByRepository.get(name) ?? [];
35
- const [boardItems, labelProjection] = yield* Effect.all([
36
- itemReader.list(name, { limit: OVERVIEW_BOARD_ITEMS }),
37
- repositoryLabels.get(name),
38
- ], { concurrency: "unbounded" });
39
- const board = yield* projectBoard(repository, Option.match(labelProjection, {
40
- onNone: () => [],
41
- onSome: ({ labels }) => labels,
42
- }), boardItems, projectRuns);
43
- const status = board.failures.length > 0 ||
44
- projectRuns.some((run) => run.state === "Waiting" || run.state === "Failed")
45
- ? "needs-you"
46
- : projectRuns.some((run) => run.canCancel)
47
- ? "active"
48
- : "clear";
49
- return new ProjectView({ repository: name, status, runs: projectRuns, board });
50
- }), { concurrency: 4 });
51
- const loops = instance.loops.map((loop) => new LoopView({
52
- name: loop.name,
53
- trigger: loop.trigger.on,
54
- agent: loop.agent,
55
- paused: paused.has(loop.name),
56
- }));
57
- const needsYou = [];
58
- for (const run of views) {
59
- if (run.state === "Waiting") {
60
- needsYou.push(new ApprovalNeed({
61
- id: `approval:${run.id}`,
62
- repository: run.repository,
63
- runId: run.id,
64
- loop: run.loop,
65
- }));
66
- }
67
- else if (run.state === "Failed") {
68
- const attempt = run.attempts.at(-1);
69
- if (attempt?.outcome?._tag !== "Failed") {
70
- return yield* Effect.die(new Error(`Failed Run ${run.id} has no failed Attempt`));
71
- }
72
- needsYou.push(new RunFailureNeed({
73
- id: `run-failure:${run.id}`,
74
- repository: run.repository,
75
- runId: run.id,
76
- loop: run.loop,
77
- failure: attempt.outcome.failure,
78
- }));
79
- }
80
- }
81
- for (const project of projects) {
82
- for (const failure of project.board.failures) {
83
- needsYou.push(new BoardProjectionNeed({
84
- id: `board-projection:${failure.repository}:${failure.itemKey}`,
85
- failure,
86
- }));
87
- }
88
- }
89
- pollFailures.forEach((failure, index) => {
90
- needsYou.push(new PollFailureNeed({
91
- id: `poll-failure:${failure.repository}:${failure.errorTag}:${index}`,
92
- failure,
93
- }));
94
- });
95
- scheduleFailures.forEach((failure, index) => {
96
- needsYou.push(new ScheduleFailureNeed({
97
- id: `schedule-failure:${failure.loop}:${failure._tag}:${index}`,
98
- failure,
99
- }));
100
- });
101
- const projected = new ReadyOverview({ projects, loops, needsYou });
102
- yield* Effect.logDebug("Refreshed operator overview", {
103
- revision,
104
- runs: views.length,
105
- needsYou: needsYou.length,
106
- });
107
- return projected;
108
- });
109
- const overview = Effect.fn("Operator.overview")((instance) => SynchronizedRef.modifyEffect(cache, (cached) => Effect.gen(function* () {
110
- const [revision, latestPoll, latestSchedule] = yield* Effect.all([reader.revision(), polling.latest, schedules.latest], { concurrency: "unbounded" });
111
- const pollFailures = Option.match(latestPoll, {
112
- onNone: () => [],
113
- onSome: ({ failures }) => failures,
114
- });
115
- const scheduleFailures = Option.match(latestSchedule, {
116
- onNone: () => [],
117
- onSome: ({ failures }) => failures,
118
- });
119
- // A missing invalidation singleton means staleness is undetectable, so the
120
- // cache is bypassed entirely rather than trusted.
121
- const token = Option.map(revision, (value) => JSON.stringify([
122
- value,
123
- instance.config.repos.map(({ name, lanes }) => [name, lanes]),
124
- instance.loops.map(({ name, agent, trigger }) => [name, agent, trigger.on]),
125
- pollFailures,
126
- scheduleFailures,
127
- ]));
128
- if (Option.isNone(token)) {
129
- yield* Effect.logWarning("Projection revision singleton is missing; the overview cache is bypassed");
130
- const projected = yield* projectOverview(instance, pollFailures, scheduleFailures, revision);
131
- return [projected, Option.none()];
132
- }
133
- if (Option.isSome(cached) && cached.value.token === token.value) {
134
- yield* Effect.logDebug("Reusing unchanged operator overview", {
135
- revision,
136
- });
137
- return [cached.value.overview, cached];
138
- }
139
- const projected = yield* projectOverview(instance, pollFailures, scheduleFailures, revision);
140
- return [projected, Option.some({ token: token.value, overview: projected })];
141
- })));
142
- const detail = Effect.fn("Operator.detail")(function* (runId, request = new ColdTranscriptRequest()) {
143
- yield* Effect.annotateCurrentSpan({ runId });
144
- const [snapshot, states] = yield* Effect.all([reader.inspect(runId), controls.states], { concurrency: "unbounded" });
145
- const paused = new Set(states.filter((state) => state.paused).map((state) => state.loop));
146
- const transcript = yield* readTranscript(reader, snapshot, request);
147
- return new RunDetailView({
148
- run: runView(snapshot, paused),
149
- eventDedupKey: snapshot.event.dedupKey,
150
- eventPayload: snapshot.event.payload,
151
- transcript: transcript.events,
152
- earlierTranscript: transcript.earlier,
153
- });
154
- });
155
- return { detail, overview };
156
- });
157
- /** Read-only operator surface; safe to build without trigger execution. */
158
- export class OperatorObservation extends Context.Service()("@usine/orchestrator/OperatorObservation") {
159
- static layer = Layer.effect(OperatorObservation, makeOperatorObservation);
160
- }
161
- const makeOperator = Effect.gen(function* () {
162
- const observation = yield* OperatorObservation;
163
- const runs = yield* RunEngine;
164
- const controls = yield* LoopControl;
165
- const items = yield* ItemProjectionReader;
166
- const repositoryLabels = yield* RepositoryLabelProjectionReader;
167
- const github = yield* GitHubItemWriter;
168
- const approve = Effect.fn("Operator.approve")(function* (runId) {
169
- yield* Effect.annotateCurrentSpan({ runId });
170
- const receivedAt = yield* DateTime.now;
171
- const dedupKey = Event.DedupKey.make(JSON.stringify(["operator-approval", runId]));
172
- yield* runs.approve(runId, new Event.Event({
173
- id: Event.EventId.make(dedupKey),
174
- dedupKey,
175
- payload: { runId, decision: "approved" },
176
- receivedAt,
177
- }));
178
- yield* Effect.logInfo("Operator approved Run", { runId });
179
- });
180
- const retry = Effect.fn("Operator.retry")(function* (runId) {
181
- yield* Effect.annotateCurrentSpan({ runId });
182
- yield* runs.retry(runId);
183
- yield* Effect.logInfo("Operator retried Run", { runId });
184
- });
185
- const cancel = Effect.fn("Operator.cancel")(function* (runId) {
186
- yield* Effect.annotateCurrentSpan({ runId });
187
- yield* runs.cancel(runId);
188
- yield* Effect.logInfo("Operator canceled Run", { runId });
189
- });
190
- const pause = Effect.fn("Operator.pause")(function* (loop) {
191
- yield* Effect.annotateCurrentSpan({ loop });
192
- return yield* controls.pause(loop);
193
- });
194
- const unpause = Effect.fn("Operator.unpause")(function* (loop) {
195
- yield* Effect.annotateCurrentSpan({ loop });
196
- return yield* controls.unpause(loop);
197
- });
198
- const moveBoardItem = Effect.fn("Operator.moveBoardItem")(function* (instance, move) {
199
- yield* Effect.annotateCurrentSpan({
200
- repository: move.repository,
201
- item: move.item,
202
- lane: move.toLane,
203
- });
204
- const repository = instance.config.repos.find(({ name }) => name === move.repository);
205
- if (repository === undefined) {
206
- return yield* new BoardProjectNotFound({ repository: move.repository });
207
- }
208
- const [storedItems, labelProjection] = yield* Effect.all([
209
- items.list(move.repository, { limit: OVERVIEW_BOARD_ITEMS }),
210
- repositoryLabels.get(move.repository),
211
- ], { concurrency: "unbounded" });
212
- const board = yield* projectBoard(repository, Option.match(labelProjection, {
213
- onNone: () => [],
214
- onSome: ({ labels }) => labels,
215
- }), storedItems, []);
216
- const source = board.lanes.find(({ items: laneItems }) => laneItems.some(({ number }) => number === move.item));
217
- if (source === undefined) {
218
- return yield* new BoardItemNotFound({ repository: move.repository, item: move.item });
219
- }
220
- const target = board.lanes.find(({ id }) => id === move.toLane);
221
- if (target === undefined) {
222
- return yield* new BoardLaneNotFound({ repository: move.repository, lane: move.toLane });
223
- }
224
- if (target._tag === "ReadOnlyBoardLane") {
225
- return yield* new BoardLaneReadOnly({ repository: move.repository, lane: move.toLane });
226
- }
227
- const mutation = labelMutationForBoardMove(board, target);
228
- const applied = yield* github.updateLabels(move.repository, move.item, mutation);
229
- yield* Effect.logInfo("Operator moved a Board card; the next poll projects the new lane", {
230
- repository: move.repository,
231
- item: move.item,
232
- fromLane: source.id,
233
- toLane: target.id,
234
- addedLabels: mutation.add.join(", "),
235
- removedLabels: mutation.remove.join(", "),
236
- labels: applied.join(", "),
237
- });
238
- }, Effect.tapError((error) => Effect.logWarning("Board move rejected", {
239
- errorTag: error._tag,
240
- message: error.message,
241
- })));
242
- return { ...observation, approve, cancel, moveBoardItem, pause, retry, unpause };
243
- });
244
- /** Observe-and-intervene application service; transports only translate this API. */
245
- export class Operator extends Context.Service()("@usine/orchestrator/Operator") {
246
- static layer = Layer.effect(Operator, makeOperator).pipe(Layer.provide(OperatorObservation.layer));
247
- }
248
- //# sourceMappingURL=service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/operator/service.ts"],"names":[],"mappings":"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"}