@usine/orchestrator 0.2.1 → 0.3.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 (173) hide show
  1. package/README.md +151 -52
  2. package/dist/board/items.d.ts +9 -1
  3. package/dist/board/items.d.ts.map +1 -1
  4. package/dist/board/items.js +16 -4
  5. package/dist/board/items.js.map +1 -1
  6. package/dist/board/projection.d.ts +7 -1
  7. package/dist/board/projection.d.ts.map +1 -1
  8. package/dist/board/projection.js +53 -14
  9. package/dist/board/projection.js.map +1 -1
  10. package/dist/board/tasks.d.ts +14 -2
  11. package/dist/board/tasks.d.ts.map +1 -1
  12. package/dist/board/tasks.js +23 -8
  13. package/dist/board/tasks.js.map +1 -1
  14. package/dist/credentials.d.ts +5 -6
  15. package/dist/credentials.d.ts.map +1 -1
  16. package/dist/credentials.js +22 -15
  17. package/dist/credentials.js.map +1 -1
  18. package/dist/current-instance/changes.d.ts +87 -0
  19. package/dist/current-instance/changes.d.ts.map +1 -0
  20. package/dist/current-instance/changes.js +138 -0
  21. package/dist/current-instance/changes.js.map +1 -0
  22. package/dist/current-instance/current-instance.d.ts +89 -0
  23. package/dist/current-instance/current-instance.d.ts.map +1 -0
  24. package/dist/current-instance/current-instance.js +163 -0
  25. package/dist/current-instance/current-instance.js.map +1 -0
  26. package/dist/exe-dev.d.ts +6 -2
  27. package/dist/exe-dev.d.ts.map +1 -1
  28. package/dist/exe-dev.js +7 -8
  29. package/dist/exe-dev.js.map +1 -1
  30. package/dist/idle-triggers.d.ts +1 -1
  31. package/dist/idle-triggers.d.ts.map +1 -1
  32. package/dist/idle-triggers.js +1 -1
  33. package/dist/idle-triggers.js.map +1 -1
  34. package/dist/label-reconciler.d.ts +5 -2
  35. package/dist/label-reconciler.d.ts.map +1 -1
  36. package/dist/label-reconciler.js.map +1 -1
  37. package/dist/local.d.ts +4 -18
  38. package/dist/local.d.ts.map +1 -1
  39. package/dist/local.js +7 -45
  40. package/dist/local.js.map +1 -1
  41. package/dist/loop-matches.d.ts +28 -0
  42. package/dist/loop-matches.d.ts.map +1 -0
  43. package/dist/loop-matches.js +74 -0
  44. package/dist/loop-matches.js.map +1 -0
  45. package/dist/operator/attempt.d.ts +57 -10
  46. package/dist/operator/attempt.d.ts.map +1 -1
  47. package/dist/operator/attempt.js +49 -10
  48. package/dist/operator/attempt.js.map +1 -1
  49. package/dist/operator/board.d.ts +43 -16
  50. package/dist/operator/board.d.ts.map +1 -1
  51. package/dist/operator/board.js +43 -16
  52. package/dist/operator/board.js.map +1 -1
  53. package/dist/operator/configuration.d.ts +258 -0
  54. package/dist/operator/configuration.d.ts.map +1 -0
  55. package/dist/operator/configuration.js +410 -0
  56. package/dist/operator/configuration.js.map +1 -0
  57. package/dist/operator/desk.d.ts +181 -0
  58. package/dist/operator/desk.d.ts.map +1 -0
  59. package/dist/operator/desk.js +463 -0
  60. package/dist/operator/desk.js.map +1 -0
  61. package/dist/operator/github-changes.d.ts +88 -0
  62. package/dist/operator/github-changes.d.ts.map +1 -0
  63. package/dist/operator/github-changes.js +266 -0
  64. package/dist/operator/github-changes.js.map +1 -0
  65. package/dist/operator/http.d.ts +152 -57
  66. package/dist/operator/http.d.ts.map +1 -1
  67. package/dist/operator/http.js +140 -21
  68. package/dist/operator/http.js.map +1 -1
  69. package/dist/operator/need.d.ts +44 -11
  70. package/dist/operator/need.d.ts.map +1 -1
  71. package/dist/operator/need.js +46 -9
  72. package/dist/operator/need.js.map +1 -1
  73. package/dist/operator/operator.d.ts +109 -29
  74. package/dist/operator/operator.d.ts.map +1 -1
  75. package/dist/operator/operator.js +254 -52
  76. package/dist/operator/operator.js.map +1 -1
  77. package/dist/operator/overview.d.ts +7 -7
  78. package/dist/operator/overview.d.ts.map +1 -1
  79. package/dist/operator/overview.js +5 -5
  80. package/dist/operator/overview.js.map +1 -1
  81. package/dist/operator/projection.d.ts +54 -5
  82. package/dist/operator/projection.d.ts.map +1 -1
  83. package/dist/operator/projection.js +100 -9
  84. package/dist/operator/projection.js.map +1 -1
  85. package/dist/operator/run.d.ts +71 -6
  86. package/dist/operator/run.d.ts.map +1 -1
  87. package/dist/operator/run.js +69 -6
  88. package/dist/operator/run.js.map +1 -1
  89. package/dist/operator/task.d.ts +93 -0
  90. package/dist/operator/task.d.ts.map +1 -0
  91. package/dist/operator/task.js +204 -0
  92. package/dist/operator/task.js.map +1 -0
  93. package/dist/operator/transcript.d.ts +12 -12
  94. package/dist/operator/transcript.d.ts.map +1 -1
  95. package/dist/operator/transcript.js +11 -9
  96. package/dist/operator/transcript.js.map +1 -1
  97. package/dist/operator/usage.d.ts +111 -0
  98. package/dist/operator/usage.d.ts.map +1 -0
  99. package/dist/operator/usage.js +219 -0
  100. package/dist/operator/usage.js.map +1 -0
  101. package/dist/orchestrator.d.ts +8 -5
  102. package/dist/orchestrator.d.ts.map +1 -1
  103. package/dist/orchestrator.js +4 -2
  104. package/dist/orchestrator.js.map +1 -1
  105. package/dist/polling/cycle.d.ts +28 -10
  106. package/dist/polling/cycle.d.ts.map +1 -1
  107. package/dist/polling/cycle.js +20 -6
  108. package/dist/polling/cycle.js.map +1 -1
  109. package/dist/polling/evaluation-failures.d.ts +42 -0
  110. package/dist/polling/evaluation-failures.d.ts.map +1 -0
  111. package/dist/polling/evaluation-failures.js +103 -0
  112. package/dist/polling/evaluation-failures.js.map +1 -0
  113. package/dist/polling/hints.d.ts +2 -2
  114. package/dist/polling/hints.d.ts.map +1 -1
  115. package/dist/polling/hints.js +2 -2
  116. package/dist/polling/hints.js.map +1 -1
  117. package/dist/polling/loop-evaluation.d.ts +21 -11
  118. package/dist/polling/loop-evaluation.d.ts.map +1 -1
  119. package/dist/polling/loop-evaluation.js +70 -27
  120. package/dist/polling/loop-evaluation.js.map +1 -1
  121. package/dist/polling/open-issues.d.ts +23 -0
  122. package/dist/polling/open-issues.d.ts.map +1 -0
  123. package/dist/polling/open-issues.js +77 -0
  124. package/dist/polling/open-issues.js.map +1 -0
  125. package/dist/polling/polling.d.ts +20 -11
  126. package/dist/polling/polling.d.ts.map +1 -1
  127. package/dist/polling/polling.js +201 -51
  128. package/dist/polling/polling.js.map +1 -1
  129. package/dist/polling/repository-sync.d.ts +20 -14
  130. package/dist/polling/repository-sync.d.ts.map +1 -1
  131. package/dist/polling/repository-sync.js +34 -27
  132. package/dist/polling/repository-sync.js.map +1 -1
  133. package/dist/polling-triggers.d.ts +1 -1
  134. package/dist/polling-triggers.d.ts.map +1 -1
  135. package/dist/polling-triggers.js +1 -1
  136. package/dist/polling-triggers.js.map +1 -1
  137. package/dist/reloads.d.ts +14 -0
  138. package/dist/reloads.d.ts.map +1 -0
  139. package/dist/reloads.js +7 -0
  140. package/dist/reloads.js.map +1 -0
  141. package/dist/runtime.d.ts +24 -0
  142. package/dist/runtime.d.ts.map +1 -0
  143. package/dist/runtime.js +58 -0
  144. package/dist/runtime.js.map +1 -0
  145. package/dist/schedule-triggers.d.ts +14 -10
  146. package/dist/schedule-triggers.d.ts.map +1 -1
  147. package/dist/schedule-triggers.js +36 -31
  148. package/dist/schedule-triggers.js.map +1 -1
  149. package/dist/scheduler.d.ts +35 -4
  150. package/dist/scheduler.d.ts.map +1 -1
  151. package/dist/scheduler.js +327 -41
  152. package/dist/scheduler.js.map +1 -1
  153. package/dist/ssh.d.ts +39 -0
  154. package/dist/ssh.d.ts.map +1 -0
  155. package/dist/ssh.js +75 -0
  156. package/dist/ssh.js.map +1 -0
  157. package/dist/trigger-condition.d.ts +12 -0
  158. package/dist/trigger-condition.d.ts.map +1 -0
  159. package/dist/trigger-condition.js +88 -0
  160. package/dist/trigger-condition.js.map +1 -0
  161. package/dist/trigger-submission.d.ts +16 -13
  162. package/dist/trigger-submission.d.ts.map +1 -1
  163. package/dist/trigger-submission.js +19 -14
  164. package/dist/trigger-submission.js.map +1 -1
  165. package/dist/worker-engine.d.ts +10 -0
  166. package/dist/worker-engine.d.ts.map +1 -0
  167. package/dist/worker-engine.js +25 -0
  168. package/dist/worker-engine.js.map +1 -0
  169. package/dist/worker-status.d.ts +70 -0
  170. package/dist/worker-status.d.ts.map +1 -0
  171. package/dist/worker-status.js +55 -0
  172. package/dist/worker-status.js.map +1 -0
  173. package/package.json +31 -10
@@ -0,0 +1,163 @@
1
+ import { InstanceFolder } from "@usine/config/instance-folder";
2
+ import { AgentName } from "@usine/core/agent";
3
+ import { WorkerName } from "@usine/core/worker";
4
+ import { ExecutorError } from "@usine/executor";
5
+ import { Array as EffectArray, Context, Effect, Layer, Match, Option, Ref, Schema, Semaphore, SubscriptionRef, } from "effect";
6
+ import { agentsWithNewBrains, InstanceReload, instanceReload, RestartBlock, restartChanges, } from "./changes.js";
7
+ /** A reload changed `usine.yaml` in a way that needs a restart, so the running instance is kept. */
8
+ export class RestartRequiredError extends Schema.TaggedError("@usine/orchestrator/RestartRequiredError")("RestartRequiredError", {
9
+ blocks: Schema.NonEmptyArray(RestartBlock),
10
+ /**
11
+ * The changed fields as paths into `usine.yaml`, such as `webhooks` or
12
+ * `workers.build-1.destination`.
13
+ */
14
+ fields: Schema.NonEmptyArray(Schema.NonEmptyString),
15
+ /** An operator summary of each change, stating that the running configuration is kept. */
16
+ message: Schema.NonEmptyString,
17
+ }) {
18
+ }
19
+ /** Returns the refusal for a reload that makes `changes`. */
20
+ export const restartRequired = (changes) => new RestartRequiredError({
21
+ blocks: EffectArray.dedupe(EffectArray.map(changes, ({ block }) => block)),
22
+ fields: EffectArray.map(changes, ({ field }) => field),
23
+ message: `These usine.yaml changes require a restart: ${changes.map(({ reason }) => reason).join("; ")}. The running configuration is unchanged. Restart usine up to apply them.`,
24
+ });
25
+ /**
26
+ * A reload adds Workers, slots, or brains that failed Worker preflight, so the running instance is
27
+ * kept.
28
+ */
29
+ export class ReloadPreflightError extends Schema.TaggedError("@usine/orchestrator/ReloadPreflightError")("ReloadPreflightError", {
30
+ /**
31
+ * The reloaded Agents with brains that no running Agent has, which preflight checked on every
32
+ * Worker.
33
+ */
34
+ agents: Schema.Array(AgentName),
35
+ /**
36
+ * The Workers added or given more slots by the reload, which preflight checked with every
37
+ * rostered brain.
38
+ */
39
+ workers: Schema.Array(WorkerName),
40
+ /**
41
+ * An operator summary of the additions and the failed check, stating that the running
42
+ * configuration is kept.
43
+ */
44
+ message: Schema.NonEmptyString,
45
+ cause: ExecutorError,
46
+ }) {
47
+ }
48
+ /**
49
+ * Returns the refusal for a reload whose preflight of `agents` and `workers` failed with `cause`.
50
+ */
51
+ export const reloadPreflightFailed = (agents, workers, cause) => {
52
+ const quoted = (names) => names.map((name) => `"${name}"`).join(", ");
53
+ const subjects = [
54
+ ...(agents.length === 0
55
+ ? []
56
+ : [`${agents.length === 1 ? "agent" : "agents"} ${quoted(agents)}`]),
57
+ ...(workers.length === 0
58
+ ? []
59
+ : [
60
+ `${workers.length === 1 ? "worker" : "workers"} ${quoted(workers)} (added or given more slots by the reload)`,
61
+ ]),
62
+ ];
63
+ const detail = cause._tag === "WorkerCapabilityError"
64
+ ? `Worker "${cause.worker}": ${cause.message}`
65
+ : cause.message;
66
+ const sentence = `${detail.charAt(0).toUpperCase()}${detail.slice(1)}`.replace(/\.$/u, "");
67
+ return new ReloadPreflightError({
68
+ agents,
69
+ workers,
70
+ message: `Worker preflight failed for ${subjects.join(" and ")}. ${sentence}. The running configuration is unchanged. Fix the worker, usine.yaml, or the agent file, then reload again.`,
71
+ cause,
72
+ });
73
+ };
74
+ const rejectionLogFields = (error) => Match.valueTags(error, {
75
+ FactoryConfigError: ({ _tag, file, stage, message }) => ({
76
+ errorTag: _tag,
77
+ file,
78
+ stage,
79
+ message,
80
+ }),
81
+ RestartRequiredError: ({ _tag, blocks, fields, message }) => ({
82
+ errorTag: _tag,
83
+ blocks,
84
+ fields,
85
+ message,
86
+ }),
87
+ ReloadPreflightError: ({ _tag, agents, workers, message, cause }) => ({
88
+ errorTag: _tag,
89
+ agents,
90
+ workers,
91
+ causeTag: cause._tag,
92
+ message,
93
+ }),
94
+ });
95
+ /**
96
+ * The instance folder snapshot that the orchestrator runs, replaced by each reload. Consumers read
97
+ * it each time they act; a Run keeps the Agent, task, and parent model it opened with.
98
+ */
99
+ export class CurrentInstance extends Context.Service()("@usine/orchestrator/CurrentInstance") {
100
+ /**
101
+ * Starts from `initial`, the folder that `usine up` loaded at startup, and reloads `directory`.
102
+ */
103
+ static layer = (directory, initial) => Layer.effect(CurrentInstance, Effect.gen(function* () {
104
+ const folder = yield* InstanceFolder;
105
+ const current = yield* SubscriptionRef.make(initial);
106
+ const registered = yield* Ref.make(Option.none());
107
+ const reloading = yield* Semaphore.make(1);
108
+ const beforeWorkersStart = Effect.fn("CurrentInstance.beforeWorkersStart")(function* (running, loaded) {
109
+ const agents = agentsWithNewBrains(running, loaded).map(({ name }) => name);
110
+ if (agents.length > 0) {
111
+ yield* Effect.logInfo("The reload adds brains before the Workers start; their startup preflight checks them", { agents });
112
+ }
113
+ return Effect.void;
114
+ });
115
+ // Once the Workers have prepared the reload, it runs to completion, so their additions are
116
+ // applied.
117
+ const reload = Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
118
+ const running = yield* SubscriptionRef.get(current);
119
+ const loaded = yield* restore(folder.load(directory));
120
+ const workers = yield* Ref.get(registered);
121
+ const restart = restartChanges(running, loaded, Option.isSome(workers));
122
+ if (EffectArray.isReadonlyArrayNonEmpty(restart)) {
123
+ return yield* restartRequired(restart);
124
+ }
125
+ const applyWorkers = yield* restore(Option.isSome(workers)
126
+ ? workers.value(running, loaded)
127
+ : beforeWorkersStart(running, loaded));
128
+ const changes = instanceReload(running, loaded);
129
+ yield* SubscriptionRef.set(current, loaded).pipe(Effect.andThen(applyWorkers));
130
+ yield* Effect.logInfo("Instance folder reloaded; new Runs use the new configuration", {
131
+ loopsAdded: changes.loops.added,
132
+ loopsRemoved: changes.loops.removed,
133
+ loopsChanged: changes.loops.changed,
134
+ agentsAdded: changes.agents.added,
135
+ agentsRemoved: changes.agents.removed,
136
+ agentsChanged: changes.agents.changed,
137
+ labelsAdded: changes.labels.added,
138
+ labelsRemoved: changes.labels.removed,
139
+ labelsChanged: changes.labels.changed,
140
+ reposAdded: changes.repos.added,
141
+ reposRemoved: changes.repos.removed,
142
+ reposChanged: changes.repos.changed,
143
+ workersAdded: changes.workers.added,
144
+ workersRemoved: changes.workers.removed,
145
+ workersChanged: changes.workers.changed,
146
+ settingsChanged: changes.settingsChanged,
147
+ operatorChanged: changes.operatorChanged,
148
+ quarantinedLoops: changes.quarantinedLoops.map(({ file }) => file),
149
+ invalidAgents: changes.invalidAgents.map(({ file }) => file),
150
+ });
151
+ return changes;
152
+ })).pipe(Effect.tapError((error) => Effect.logWarning("Instance folder reload rejected; the running configuration is unchanged", rejectionLogFields(error))), reloading.withPermits(1), Effect.withSpan("CurrentInstance.reload", { attributes: { directory } }));
153
+ const registerWorkers = (workers) => Effect.acquireRelease(Ref.set(registered, Option.some(workers)), () => Ref.set(registered, Option.none()));
154
+ return {
155
+ get: SubscriptionRef.get(current),
156
+ changes: SubscriptionRef.changes(current),
157
+ reload,
158
+ registerWorkers,
159
+ };
160
+ }));
161
+ }
162
+ export { InstanceReload, RestartBlock } from "./changes.js";
163
+ //# sourceMappingURL=current-instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current-instance.js","sourceRoot":"","sources":["../../src/current-instance/current-instance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,KAAK,IAAI,WAAW,EACpB,OAAO,EACP,MAAM,EACN,KAAK,EACL,KAAK,EACL,MAAM,EACN,GAAG,EACH,MAAM,EAEN,SAAS,EAET,eAAe,GAChB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,YAAY,EAEZ,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,oGAAoG;AACpG,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,WAAW,CAC1D,0CAA0C,CAC3C,CAAC,sBAAsB,EAAE;IACxB,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;IAC1C;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC;IACnD,0FAA0F;IAC1F,OAAO,EAAE,MAAM,CAAC,cAAc;CAC/B,CAAC;CAAG;AAEL,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,OAAyD,EACnC,EAAE,CACxB,IAAI,oBAAoB,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC1E,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;IACtD,OAAO,EAAE,+CAA+C,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,2EAA2E;CAClL,CAAC,CAAC;AAEL;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,WAAW,CAC1D,0CAA0C,CAC3C,CAAC,sBAAsB,EAAE;IACxB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;IAC/B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;IACjC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC,cAAc;IAC9B,KAAK,EAAE,aAAa;CACrB,CAAC;CAAG;AAEL;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,MAAgC,EAChC,OAAkC,EAClC,KAAoB,EACE,EAAE;IACxB,MAAM,MAAM,GAAG,CAAC,KAA4B,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7F,MAAM,QAAQ,GAAG;QACf,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YACtB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,4CAA4C;aAC9G,CAAC;KACP,CAAC;IACF,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,KAAK,uBAAuB;QACpC,CAAC,CAAC,WAAW,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,OAAO,EAAE;QAC9C,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACpB,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3F,OAAO,IAAI,oBAAoB,CAAC;QAC9B,MAAM;QACN,OAAO;QACP,OAAO,EAAE,+BAA+B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,6GAA6G;QACxL,KAAK;KACN,CAAC,CAAC;AACL,CAAC,CAAC;AAeF,MAAM,kBAAkB,GAAG,CAAC,KAA0B,EAAE,EAAE,CACxD,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;IACrB,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACvD,QAAQ,EAAE,IAAI;QACd,IAAI;QACJ,KAAK;QACL,OAAO;KACR,CAAC;IACF,oBAAoB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5D,QAAQ,EAAE,IAAI;QACd,MAAM;QACN,MAAM;QACN,OAAO;KACR,CAAC;IACF,oBAAoB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,QAAQ,EAAE,IAAI;QACd,MAAM;QACN,OAAO;QACP,QAAQ,EAAE,KAAK,CAAC,IAAI;QACpB,OAAO;KACR,CAAC;CACH,CAAC,CAAC;AAEL;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,OAAO,CAAC,OAAO,EAmBjD,CAAC,qCAAqC,CAAC;IACxC;;OAEG;IACH,MAAM,CAAU,KAAK,GAAG,CACtB,SAA4B,EAC5B,OAAuB,EAC8B,EAAE,CACvD,KAAK,CAAC,MAAM,CACV,eAAe,EACf,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAgB,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE3C,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,oCAAoC,CAAC,CAAC,QAAQ,CAAC,EAClF,OAAuB,EACvB,MAAsB;YAEtB,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAC5E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACnB,sFAAsF,EACtF,EAAE,MAAM,EAAE,CACX,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,2FAA2F;QAC3F,WAAW;QACX,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,EAAE,EAAE,CACpD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACxE,IAAI,WAAW,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjD,OAAO,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,OAAO,CACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;gBACpB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;gBAChC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CACxC,CAAC;YACF,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAChD,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;YAC/E,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,8DAA8D,EAAE;gBACpF,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;gBAC/B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;gBACnC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;gBACnC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;gBACjC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;gBACrC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;gBACrC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;gBACjC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;gBACrC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;gBACrC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;gBAC/B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;gBACnC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;gBACnC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;gBACnC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;gBACvC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;gBACvC,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;gBAClE,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;aAC7D,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CACH,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,UAAU,CACf,yEAAyE,EACzE,kBAAkB,CAAC,KAAK,CAAC,CAC1B,CACF,EACD,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EACxB,MAAM,CAAC,QAAQ,CAAC,wBAAwB,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CACzE,CAAC;QAEF,MAAM,eAAe,GAAG,CAAC,OAAqB,EAAE,EAAE,CAChD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CACpE,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CACnC,CAAC;QAEJ,OAAO;YACL,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;YACjC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC;YACzC,MAAM;YACN,eAAe;SAChB,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;CACL;AAED,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
package/dist/exe-dev.d.ts CHANGED
@@ -3,6 +3,10 @@ import type { UsineConfig } from "@usine/config/factory";
3
3
  import type { InstanceDirectory } from "@usine/core/instance";
4
4
  import { type ExeDevExecutorOptions } from "@usine/executor/exe-dev";
5
5
  import { Layer } from "effect";
6
- /** The full engine composition for a local orchestrator driving exe.dev Workers; brains are the instance roster checked at startup. */
7
- export declare const layer: (instanceDirectory: InstanceDirectory, config: UsineConfig, brains: ReadonlyArray<BrainSpec>, options: ExeDevExecutorOptions) => Layer.Layer<import("@usine/engine/cursor").CursorStore | import("@usine/engine/cycle-budget").CycleBudgets | import("@usine/engine/item-projection").ItemProjectionReader | import("@usine/engine/item-projection").ItemProjectionWriter | import("@usine/engine/loop-control").LoopControl | import("@usine/engine/repository-label-projection").RepositoryLabelProjectionReader | import("@usine/engine/repository-label-projection").RepositoryLabelProjectionWriter | import("@usine/engine/engine").RunEngine | import("@usine/engine/run-reader").RunReader, import("@usine/engine/engine").AttemptCancellationError | import("@usine/executor").CredentialUnavailableError | import("@usine/engine/engine").EnginePersistenceError | import("@usine/executor").ExecutorOperationError | import("@usine/engine/engine").RunInterventionRejectedError | import("@usine/engine/engine").RunNotFoundError | import("@usine/engine/engine").RunOperationRejectedError | import("./scheduler.ts").UnsupportedWorkerError | import("@usine/executor").WorkerCapabilityError, never>;
6
+ /**
7
+ * Provides the full engine and `WorkerStatus` for exe.dev Workers. Requires `GitHubApp`,
8
+ * `TriggerCondition`, `AttemptRuntime` (built before the engine), `ClaudeLoginLock`, and
9
+ * `CurrentInstance`.
10
+ */
11
+ export declare const layer: (instanceDirectory: InstanceDirectory, config: UsineConfig, brains: ReadonlyArray<BrainSpec>, options: ExeDevExecutorOptions) => Layer.Layer<import("@usine/engine/board-moves").BoardMoves | import("@usine/engine/cursor").CursorStore | import("@usine/engine/cycle-budget").CycleBudgets | import("@usine/engine/item-projection").ItemProjectionReader | import("@usine/engine/item-projection").ItemProjectionWriter | import("@usine/engine/loop-control").LoopControl | import("@usine/engine/repository-label-projection").RepositoryLabelProjectionReader | import("@usine/engine/repository-label-projection").RepositoryLabelProjectionWriter | import("@usine/engine/engine").RunEngine | import("@usine/engine/run-reader").RunReader | import("@usine/engine/step-executor").StepExecutor | import("./worker-status.ts").WorkerStatus, import("@usine/engine/engine").AttemptCancellationError | import("@usine/executor").CredentialUnavailableError | import("@usine/engine/engine").EnginePersistenceError | import("@usine/executor").ExecutorOperationError | import("@usine/engine/engine").RunInterventionRejectedError | import("@usine/engine/engine").RunNotFoundError | import("@usine/engine/engine").RunOperationRejectedError | import("@usine/engine/engine").RunRetryBlockedError | import("./scheduler.ts").UnsupportedWorkerError | import("@usine/executor").WorkerCapabilityError, import("@usine/durable/attempt-runtime").AttemptRuntime | import("@usine/agents/runtime").ClaudeLoginLock | import("./current-instance/current-instance.ts").CurrentInstance | import("@usine/github/github-app").GitHubApp | import("@usine/engine/trigger-condition").TriggerCondition>;
8
12
  //# sourceMappingURL=exe-dev.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exe-dev.d.ts","sourceRoot":"","sources":["../src/exe-dev.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAG/B,uIAAuI;AACvI,eAAO,MAAM,KAAK,sBACG,iBAAiB,UAC5B,WAAW,UACX,aAAa,CAAC,SAAS,CAAC,WACvB,qBAAqB,whCAU/B,CAAC"}
1
+ {"version":3,"file":"exe-dev.d.ts","sourceRoot":"","sources":["../src/exe-dev.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAgC,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEnG,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAG/B;;;;GAIG;AACH,eAAO,MAAM,KAAK,sBACG,iBAAiB,UAC5B,WAAW,UACX,aAAa,CAAC,SAAS,CAAC,WACvB,qBAAqB,m/CAK/B,CAAC"}
package/dist/exe-dev.js CHANGED
@@ -1,17 +1,16 @@
1
1
  import { NodeServices } from "@effect/platform-node";
2
2
  import { layer as exeDevExecutorLayer } from "@usine/executor/exe-dev";
3
- import { CredentialGrantMinutes } from "@usine/executor/exe-dev";
4
3
  import { layer as localEngineLayer } from "@usine/engine/local-sqlite";
5
4
  import { Layer } from "effect";
6
5
  import { stepExecutorLayer } from "./scheduler.js";
7
- /** The full engine composition for a local orchestrator driving exe.dev Workers; brains are the instance roster checked at startup. */
6
+ /**
7
+ * Provides the full engine and `WorkerStatus` for exe.dev Workers. Requires `GitHubApp`,
8
+ * `TriggerCondition`, `AttemptRuntime` (built before the engine), `ClaudeLoginLock`, and
9
+ * `CurrentInstance`.
10
+ */
8
11
  export const layer = (instanceDirectory, config, brains, options) => {
9
- const executor = exeDevExecutorLayer({
10
- ...options,
11
- credentialGrantMinutes: options.credentialGrantMinutes ??
12
- CredentialGrantMinutes.make(config.settings.maxAttemptMinutes + 5),
13
- }).pipe(Layer.provide(NodeServices.layer));
12
+ const executor = exeDevExecutorLayer(options).pipe(Layer.provide(NodeServices.layer));
14
13
  const stepExecutor = stepExecutorLayer(config, brains).pipe(Layer.provide(executor));
15
- return localEngineLayer(instanceDirectory).pipe(Layer.provide(stepExecutor));
14
+ return localEngineLayer(instanceDirectory).pipe(Layer.provideMerge(stepExecutor));
16
15
  };
17
16
  //# sourceMappingURL=exe-dev.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exe-dev.js","sourceRoot":"","sources":["../src/exe-dev.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,KAAK,IAAI,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAA8B,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,uIAAuI;AACvI,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,iBAAoC,EACpC,MAAmB,EACnB,MAAgC,EAChC,OAA8B,EAC9B,EAAE;IACF,MAAM,QAAQ,GAAG,mBAAmB,CAAC;QACnC,GAAG,OAAO;QACV,sBAAsB,EACpB,OAAO,CAAC,sBAAsB;YAC9B,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,GAAG,CAAC,CAAC;KACrE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,OAAO,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAC/E,CAAC,CAAC"}
1
+ {"version":3,"file":"exe-dev.js","sourceRoot":"","sources":["../src/exe-dev.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,KAAK,IAAI,mBAAmB,EAA8B,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,iBAAoC,EACpC,MAAmB,EACnB,MAAgC,EAChC,OAA8B,EAC9B,EAAE;IACF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACtF,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,OAAO,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;AACpF,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { Layer } from "effect";
2
2
  import { PollingTriggers } from "./polling-triggers.ts";
3
3
  import { ScheduleTriggers } from "./schedule-triggers.ts";
4
- /** Trigger services that never poll or tick, for observing an instance that still needs setup. */
4
+ /** Trigger services that never poll or tick, for an instance that still needs setup. */
5
5
  export declare const idleTriggersLayer: Layer.Layer<PollingTriggers | ScheduleTriggers, never, never>;
6
6
  //# sourceMappingURL=idle-triggers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"idle-triggers.d.ts","sourceRoot":"","sources":["../src/idle-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAa,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAiB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,+DAkC7B,CAAC"}
1
+ {"version":3,"file":"idle-triggers.d.ts","sourceRoot":"","sources":["../src/idle-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAa,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAiB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,+DAkC7B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { Effect, Layer, Option } from "effect";
2
2
  import { PollCycle, PollingTriggers } from "./polling-triggers.js";
3
3
  import { ScheduleCycle, ScheduleTriggers } from "./schedule-triggers.js";
4
- /** Trigger services that never poll or tick, for observing an instance that still needs setup. */
4
+ /** Trigger services that never poll or tick, for an instance that still needs setup. */
5
5
  export const idleTriggersLayer = Layer.mergeAll(Layer.succeed(PollingTriggers)({
6
6
  hint: () => Effect.void,
7
7
  latest: Effect.succeed(Option.none()),
@@ -1 +1 @@
1
- {"version":3,"file":"idle-triggers.js","sourceRoot":"","sources":["../src/idle-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,kGAAkG;AAClG,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAC7C,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;IACvB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,EAAE,GAAG,EAAE,CACT,MAAM,CAAC,OAAO,CACZ,IAAI,SAAS,CAAC;QACZ,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,EAAE;QACZ,iBAAiB,EAAE,EAAE;QACrB,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;KAC1B,CAAC,CACH;IACH,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK;CACxB,CAAC,EACF,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,EAAE,GAAG,EAAE,CACT,MAAM,CAAC,OAAO,CACZ,IAAI,aAAa,CAAC;QAChB,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;KAC1B,CAAC,CACH;IACH,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK;CACxB,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"idle-triggers.js","sourceRoot":"","sources":["../src/idle-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,wFAAwF;AACxF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAC7C,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;IACvB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,EAAE,GAAG,EAAE,CACT,MAAM,CAAC,OAAO,CACZ,IAAI,SAAS,CAAC;QACZ,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,EAAE;QACZ,iBAAiB,EAAE,EAAE;QACrB,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;KAC1B,CAAC,CACH;IACH,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK;CACxB,CAAC,EACF,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,EAAE,GAAG,EAAE,CACT,MAAM,CAAC,OAAO,CACZ,IAAI,aAAa,CAAC;QAChB,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;KAC1B,CAAC,CACH;IACH,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK;CACxB,CAAC,CACH,CAAC"}
@@ -14,9 +14,12 @@ export declare class LabelPreflightFinding extends LabelPreflightFinding_base {
14
14
  export interface LabelReconciliation {
15
15
  readonly labels: ReadonlyArray<StoredRepositoryLabel>;
16
16
  readonly findings: ReadonlyArray<LabelPreflightFinding>;
17
- /** True when a label was created, so the poll cursor must drop its catalog ETag. */
17
+ /** Whether a label was created, so the poll cursor must drop its catalog ETag. */
18
18
  readonly catalogChanged: boolean;
19
- /** When a creation rate limit asks the next cycle to wait; this cycle's triggers still run. */
19
+ /**
20
+ * The time a creation rate limit asks the next cycle to wait until. This cycle's triggers still
21
+ * run.
22
+ */
20
23
  readonly nextPollAt: Option.Option<DateTime.Utc>;
21
24
  }
22
25
  declare const LabelReconciler_base: Context.ServiceClass<LabelReconciler, "@usine/orchestrator/LabelReconciler", {
@@ -1 +1 @@
1
- {"version":3,"file":"label-reconciler.d.ts","sourceRoot":"","sources":["../src/label-reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,aAAa,EAAmB,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAsB,MAAM,4BAA4B,CAAC;AAEnF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;;AAElF,qBAAa,qBAAsB,SAAQ,0BAOzC;CAAG;AAEL,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACxD,oFAAoF;IACpF,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,+FAA+F;IAC/F,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;CAClD;;wBA2CuB,CAClB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,EACtC,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,KAC3C,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;;AAR3C,wFAAwF;AACxF,qBAAa,eAAgB,SAAQ,oBASK;IACxC,MAAM,CAAC,QAAQ,CAAC,KAAK,yDAkGnB;CACH"}
1
+ {"version":3,"file":"label-reconciler.d.ts","sourceRoot":"","sources":["../src/label-reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,aAAa,EAAmB,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAsB,MAAM,4BAA4B,CAAC;AAEnF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;;AAElF,qBAAa,qBAAsB,SAAQ,0BAOzC;CAAG;AAEL,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACxD,kFAAkF;IAClF,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;CAClD;;wBA2CuB,CAClB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,EACtC,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,KAC3C,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;;AAR3C,wFAAwF;AACxF,qBAAa,eAAgB,SAAQ,oBASK;IACxC,MAAM,CAAC,QAAQ,CAAC,KAAK,yDAkGnB;CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"label-reconciler.js","sourceRoot":"","sources":["../src/label-reconciler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"label-reconciler.js","sourceRoot":"","sources":["../src/label-reconciler.ts"],"names":[],"mappings":"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"}
package/dist/local.d.ts CHANGED
@@ -1,25 +1,11 @@
1
- import { BrainSpec } from "@usine/core/agent/brain";
2
- import type { LoadedInstance } from "@usine/config/instance";
1
+ import type { BrainSpec } from "@usine/core/agent/brain";
3
2
  import type { UsineConfig } from "@usine/config/factory";
4
- import { ConfigParser } from "@usine/config/parser";
5
3
  import type { InstanceDirectory } from "@usine/core/instance";
6
4
  import { type LocalExecutorOptions } from "@usine/executor/local";
7
- import { GitHubItemWriter } from "@usine/github/item-writer";
8
- import { GitHubPolling } from "@usine/github/polling";
9
5
  import { Layer } from "effect";
10
- import { LabelReconciler } from "./label-reconciler.ts";
11
- import { Operator, OperatorObservation } from "./operator/operator.ts";
12
- import { Orchestrator } from "./orchestrator.ts";
13
- import { PollingTriggers } from "./polling-triggers.ts";
14
- import { ScheduleTriggers } from "./schedule-triggers.ts";
15
- /** The full engine composition for local Workers. Supply the roster’s brains for startup preflight and provide the credential provider. */
16
- export declare const layer: (instanceDirectory: InstanceDirectory, config: UsineConfig, brains: ReadonlyArray<BrainSpec>, options: Omit<LocalExecutorOptions, "instanceDirectory" | "runHost"> & Partial<Pick<LocalExecutorOptions, "runHost">>) => Layer.Layer<import("@usine/engine/cursor").CursorStore | import("@usine/engine/cycle-budget").CycleBudgets | import("@usine/engine/item-projection").ItemProjectionReader | import("@usine/engine/item-projection").ItemProjectionWriter | import("@usine/engine/loop-control").LoopControl | import("@usine/engine/repository-label-projection").RepositoryLabelProjectionReader | import("@usine/engine/repository-label-projection").RepositoryLabelProjectionWriter | import("@usine/engine/engine").RunEngine | import("@usine/engine/run-reader").RunReader, import("@usine/engine/engine").AttemptCancellationError | import("@usine/executor").CredentialUnavailableError | import("@usine/engine/engine").EnginePersistenceError | import("@usine/executor").ExecutorOperationError | import("@usine/engine/engine").RunInterventionRejectedError | import("@usine/engine/engine").RunNotFoundError | import("@usine/engine/engine").RunOperationRejectedError | import("./scheduler.ts").UnsupportedWorkerError | import("@usine/executor").WorkerCapabilityError, import("@usine/executor").CredentialProvider>;
17
- /** A read-only operator composition for when trigger credentials are not available yet. */
18
- export declare const operatorObservationLayer: (instanceDirectory: InstanceDirectory) => Layer.Layer<OperatorObservation, import("@usine/engine/engine").AttemptCancellationError | import("@usine/engine/engine").EnginePersistenceError | import("@usine/engine/engine").RunInterventionRejectedError | import("@usine/engine/engine").RunNotFoundError | import("@usine/engine/engine").RunOperationRejectedError, never>;
19
6
  /**
20
- * The full Node composition for one loaded local factory: both trigger
21
- * streams, the durable engine, worker execution, and the operator surface.
22
- * The caller supplies the GitHub credentials.
7
+ * Provides the full engine and `WorkerStatus` for local Workers. Requires the credential provider,
8
+ * `GitHubApp`, `TriggerCondition`, `AttemptRuntime`, `ClaudeLoginLock`, and `CurrentInstance`.
23
9
  */
24
- export declare const runtimeLayer: (instanceDirectory: InstanceDirectory, instance: LoadedInstance, options: Omit<LocalExecutorOptions, "instanceDirectory" | "runHost"> & Partial<Pick<LocalExecutorOptions, "runHost">>) => Layer.Layer<ConfigParser | import("@usine/engine/cursor").CursorStore | import("@usine/engine/cycle-budget").CycleBudgets | import("@usine/expression/expression-engine").ExpressionEngine | GitHubItemWriter | GitHubPolling | import("@usine/engine/item-projection").ItemProjectionReader | import("@usine/engine/item-projection").ItemProjectionWriter | LabelReconciler | import("@usine/engine/loop-control").LoopControl | Operator | Orchestrator | PollingTriggers | import("@usine/engine/repository-label-projection").RepositoryLabelProjectionReader | import("@usine/engine/repository-label-projection").RepositoryLabelProjectionWriter | import("@usine/engine/engine").RunEngine | import("@usine/engine/run-reader").RunReader | ScheduleTriggers, import("@usine/github/github-app").AppAuthenticationError | import("@usine/engine/engine").AttemptCancellationError | import("@usine/executor").CredentialUnavailableError | import("@usine/engine/engine").EnginePersistenceError | import("@usine/executor").ExecutorOperationError | import("@usine/engine/engine").RunInterventionRejectedError | import("@usine/engine/engine").RunNotFoundError | import("@usine/engine/engine").RunOperationRejectedError | import("./scheduler.ts").UnsupportedWorkerError | import("@usine/executor").WorkerCapabilityError, import("@usine/github/github-app").GitHubCredentials>;
10
+ export declare const layer: (instanceDirectory: InstanceDirectory, config: UsineConfig, brains: ReadonlyArray<BrainSpec>, options: Omit<LocalExecutorOptions, "instanceDirectory">) => Layer.Layer<import("@usine/engine/board-moves").BoardMoves | import("@usine/engine/cursor").CursorStore | import("@usine/engine/cycle-budget").CycleBudgets | import("@usine/engine/item-projection").ItemProjectionReader | import("@usine/engine/item-projection").ItemProjectionWriter | import("@usine/engine/loop-control").LoopControl | import("@usine/engine/repository-label-projection").RepositoryLabelProjectionReader | import("@usine/engine/repository-label-projection").RepositoryLabelProjectionWriter | import("@usine/engine/engine").RunEngine | import("@usine/engine/run-reader").RunReader | import("@usine/engine/step-executor").StepExecutor | import("./worker-status.ts").WorkerStatus, import("@usine/engine/engine").AttemptCancellationError | import("@usine/executor").CredentialUnavailableError | import("@usine/engine/engine").EnginePersistenceError | import("@usine/executor").ExecutorOperationError | import("@usine/engine/engine").RunInterventionRejectedError | import("@usine/engine/engine").RunNotFoundError | import("@usine/engine/engine").RunOperationRejectedError | import("@usine/engine/engine").RunRetryBlockedError | import("./scheduler.ts").UnsupportedWorkerError | import("@usine/executor").WorkerCapabilityError, import("@usine/durable/attempt-runtime").AttemptRuntime | import("@usine/agents/runtime").ClaudeLoginLock | import("@usine/executor").CredentialProvider | import("./current-instance/current-instance.ts").CurrentInstance | import("@usine/github/github-app").GitHubApp | import("@usine/engine/trigger-condition").TriggerCondition>;
25
11
  //# sourceMappingURL=local.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAA+B,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAO/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAI/B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,2IAA2I;AAC3I,eAAO,MAAM,KAAK,sBACG,iBAAiB,UAC5B,WAAW,UACX,aAAa,CAAC,SAAS,CAAC,WACvB,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,GAAG,SAAS,CAAC,GAClE,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC,+jCASjD,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,wBAAwB,sBAAuB,iBAAiB,wUAG1E,CAAC;AAEJ;;;;GAIG;AACH,eAAO,MAAM,YAAY,sBACJ,iBAAiB,YAC1B,cAAc,WACf,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,GAAG,SAAS,CAAC,GAClE,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC,u0CA2CjD,CAAC"}
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAA+B,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE/F,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAG/B;;;GAGG;AACH,eAAO,MAAM,KAAK,sBACG,iBAAiB,UAC5B,WAAW,UACX,aAAa,CAAC,SAAS,CAAC,WACvB,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,kiDAOzD,CAAC"}
package/dist/local.js CHANGED
@@ -1,53 +1,15 @@
1
- import { BrainSpec } from "@usine/core/agent/brain";
2
1
  import { NodeServices } from "@effect/platform-node";
3
- import { ConfigParser } from "@usine/config/parser";
4
2
  import { layer as localExecutorLayer } from "@usine/executor/local";
5
- import { layer as localEngineLayer, observationLayer as localObservationLayer, } from "@usine/engine/local-sqlite";
6
- import { MarcbachmannCelLayer } from "@usine/expression/marcbachmann-cel";
7
- import { GitHubApp } from "@usine/github/github-app";
8
- import { GitHubItemWriter } from "@usine/github/item-writer";
9
- import { GitHubLabelWriter } from "@usine/github/label-writer";
10
- import { GitHubPolling } from "@usine/github/polling";
11
- import { executableCommand } from "@usine/run-host/executable";
3
+ import { layer as localEngineLayer } from "@usine/engine/local-sqlite";
12
4
  import { Layer } from "effect";
13
- import { FetchHttpClient } from "effect/unstable/http";
14
- import { gitHubCredentialLayer } from "./credentials.js";
15
- import { idleTriggersLayer } from "./idle-triggers.js";
16
- import { LabelReconciler } from "./label-reconciler.js";
17
- import { Operator, OperatorObservation } from "./operator/operator.js";
18
- import { Orchestrator } from "./orchestrator.js";
19
- import { PollingTriggers } from "./polling-triggers.js";
20
- import { ScheduleTriggers } from "./schedule-triggers.js";
21
5
  import { stepExecutorLayer } from "./scheduler.js";
22
- /** The full engine composition for local Workers. Supply the roster’s brains for startup preflight and provide the credential provider. */
23
- export const layer = (instanceDirectory, config, brains, options) => {
24
- const executor = localExecutorLayer({
25
- runHost: options.runHost ?? executableCommand(),
26
- ...options,
27
- instanceDirectory,
28
- }).pipe(Layer.provide(NodeServices.layer));
29
- const stepExecutor = stepExecutorLayer(config, brains).pipe(Layer.provide(executor));
30
- return localEngineLayer(instanceDirectory).pipe(Layer.provide(stepExecutor));
31
- };
32
- /** A read-only operator composition for when trigger credentials are not available yet. */
33
- export const operatorObservationLayer = (instanceDirectory) => OperatorObservation.layer.pipe(Layer.provide(Layer.mergeAll(localObservationLayer(instanceDirectory), idleTriggersLayer)));
34
6
  /**
35
- * The full Node composition for one loaded local factory: both trigger
36
- * streams, the durable engine, worker execution, and the operator surface.
37
- * The caller supplies the GitHub credentials.
7
+ * Provides the full engine and `WorkerStatus` for local Workers. Requires the credential provider,
8
+ * `GitHubApp`, `TriggerCondition`, `AttemptRuntime`, `ClaudeLoginLock`, and `CurrentInstance`.
38
9
  */
39
- export const runtimeLayer = (instanceDirectory, instance, options) => {
40
- const app = GitHubApp.layer.pipe(Layer.provide(FetchHttpClient.layer), Layer.provide(NodeServices.layer));
41
- const credentials = gitHubCredentialLayer(instance.config).pipe(Layer.provide(app));
42
- const engine = layer(instanceDirectory, instance.config, instance.agents.map(({ harness, model, effort }) => new BrainSpec({ harness, model, effort })), options).pipe(Layer.provide(credentials));
43
- const polling = GitHubPolling.layer.pipe(Layer.provide(app), Layer.provide(FetchHttpClient.layer), Layer.provide(NodeServices.layer));
44
- const itemWriter = GitHubItemWriter.layer.pipe(Layer.provide(app), Layer.provide(FetchHttpClient.layer));
45
- const labelWriter = GitHubLabelWriter.layer.pipe(Layer.provide(app), Layer.provide(FetchHttpClient.layer));
46
- const labelReconciler = LabelReconciler.layer.pipe(Layer.provide(labelWriter));
47
- const parser = ConfigParser.layer.pipe(Layer.provide(MarcbachmannCelLayer));
48
- const dependencies = Layer.mergeAll(engine, itemWriter, labelReconciler, MarcbachmannCelLayer, parser, polling);
49
- const triggers = Layer.mergeAll(PollingTriggers.layer, ScheduleTriggers.layer).pipe(Layer.provide(dependencies));
50
- const services = Layer.mergeAll(Operator.layer, Orchestrator.layer).pipe(Layer.provide(Layer.mergeAll(dependencies, triggers)));
51
- return Layer.mergeAll(dependencies, triggers, services);
10
+ export const layer = (instanceDirectory, config, brains, options) => {
11
+ const executor = localExecutorLayer({ ...options, instanceDirectory }).pipe(Layer.provide(NodeServices.layer));
12
+ const stepExecutor = stepExecutorLayer(config, brains).pipe(Layer.provide(executor));
13
+ return localEngineLayer(instanceDirectory).pipe(Layer.provideMerge(stepExecutor));
52
14
  };
53
15
  //# sourceMappingURL=local.js.map
package/dist/local.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,KAAK,IAAI,kBAAkB,EAA6B,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,iBAAoC,EACpC,MAAmB,EACnB,MAAgC,EAChC,OAAwD,EACxD,EAAE;IACF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,GAAG,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,IAAI,CACzE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAClC,CAAC;IACF,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,OAAO,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;AACpF,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { ManagedRepo } from "@usine/config/factory";
2
+ import type { LoadedInstance } from "@usine/config/instance";
3
+ import type { LoopFile } from "@usine/config/loop";
4
+ import type { ItemProjection } from "@usine/engine/item-projection";
5
+ import { ExpressionEngine } from "@usine/expression/expression-engine";
6
+ import { Context, Effect, Layer } from "effect";
7
+ /** A Loop whose trigger currently matches one stored Item. */
8
+ export interface LoopItemMatch {
9
+ readonly loop: LoopFile;
10
+ readonly item: ItemProjection;
11
+ }
12
+ declare const LoopMatches_base: Context.ServiceClass<LoopMatches, "@usine/orchestrator/LoopMatches", {
13
+ /**
14
+ * Returns each issue and pull request Loop that applies to `repository`, paired with the
15
+ * `items` its trigger matches. Includes paused Loops; excludes gone Items and Loops whose `if:`
16
+ * fails.
17
+ */
18
+ readonly matching: (instance: LoadedInstance, repository: ManagedRepo, items: ReadonlyArray<ItemProjection>) => Effect.Effect<ReadonlyArray<LoopItemMatch>>;
19
+ }>;
20
+ /**
21
+ * The stored Items each Loop's trigger currently matches, evaluated as the poll does: stream and
22
+ * selector, then `if:` against the stored payload slice.
23
+ */
24
+ export declare class LoopMatches extends LoopMatches_base {
25
+ static readonly layer: Layer.Layer<LoopMatches, never, ExpressionEngine>;
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=loop-matches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-matches.d.ts","sourceRoot":"","sources":["../src/loop-matches.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAgB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAkB,MAAM,QAAQ,CAAC;AAG9E,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;CAC/B;;IASG;;;;OAIG;uBACgB,CACjB,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,KACjC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;;AAhBpD;;;GAGG;AACH,qBAAa,WAAY,SAAQ,gBAcK;IACpC,MAAM,CAAC,QAAQ,CAAC,KAAK,oDAkFnB;CACH"}
@@ -0,0 +1,74 @@
1
+ import { matchesSelector } from "@usine/config/selector";
2
+ import { ExpressionEngine } from "@usine/expression/expression-engine";
3
+ import { Array as Arr, Context, Effect, Layer, Option, Result } from "effect";
4
+ import { evaluateTriggerOnEach } from "./polling/loop-evaluation.js";
5
+ /**
6
+ * The stored Items each Loop's trigger currently matches, evaluated as the poll does: stream and
7
+ * selector, then `if:` against the stored payload slice.
8
+ */
9
+ export class LoopMatches extends Context.Service()("@usine/orchestrator/LoopMatches") {
10
+ static layer = Layer.effect(LoopMatches, Effect.gen(function* () {
11
+ const expressions = yield* ExpressionEngine;
12
+ const matching = Effect.fn("LoopMatches.matching")(function* (instance, repository, items) {
13
+ yield* Effect.annotateCurrentSpan({ repository: repository.name, items: items.length });
14
+ const loops = instance.loops.filter((loop) => loop.trigger.on !== "schedule" && matchesSelector(loop.selector, repository));
15
+ const present = items.filter(({ goneAt }) => Option.isNone(goneAt));
16
+ // Each Loop's trigger is checked once and evaluated on all of its stream's Items in one
17
+ // call, because the overview and desk match every Loop on every Board Item on each read
18
+ // (#464).
19
+ const matched = new Map();
20
+ let failures = 0;
21
+ for (const loop of loops) {
22
+ const candidates = present.filter(({ source }) => source === loop.trigger.on);
23
+ if (candidates.length === 0)
24
+ continue;
25
+ const evaluated = yield* Effect.result(evaluateTriggerOnEach(loop, repository, candidates.map(({ payload }) => payload)));
26
+ if (Result.isFailure(evaluated)) {
27
+ failures += candidates.length;
28
+ yield* Effect.logDebug("Loop trigger could not be checked; it matches no stored Item", {
29
+ repository: repository.name,
30
+ loop: loop.name,
31
+ items: candidates.length,
32
+ errorTag: evaluated.failure._tag,
33
+ message: evaluated.failure.message,
34
+ });
35
+ continue;
36
+ }
37
+ const hits = new Set();
38
+ for (const [item, result] of Arr.zip(candidates, evaluated.success)) {
39
+ if (Result.isSuccess(result)) {
40
+ if (result.success)
41
+ hits.add(item);
42
+ continue;
43
+ }
44
+ failures += 1;
45
+ yield* Effect.logDebug("Loop trigger could not be evaluated on a stored Item", {
46
+ repository: repository.name,
47
+ loop: loop.name,
48
+ item: item.number,
49
+ errorTag: result.failure._tag,
50
+ message: result.failure.message,
51
+ });
52
+ }
53
+ matched.set(loop, hits);
54
+ }
55
+ const matches = [];
56
+ for (const item of present) {
57
+ for (const loop of loops) {
58
+ if (matched.get(loop)?.has(item) === true)
59
+ matches.push({ loop, item });
60
+ }
61
+ }
62
+ yield* Effect.logDebug("Matched Loop triggers against stored Items", {
63
+ repository: repository.name,
64
+ loops: loops.length,
65
+ items: items.length,
66
+ matches: matches.length,
67
+ failures,
68
+ });
69
+ return matches;
70
+ }, Effect.provideService(ExpressionEngine, expressions));
71
+ return { matching };
72
+ }));
73
+ }
74
+ //# sourceMappingURL=loop-matches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-matches.js","sourceRoot":"","sources":["../src/loop-matches.ts"],"names":[],"mappings":"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"}