@usine/orchestrator 0.2.1 → 0.4.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 (222) hide show
  1. package/LICENSE +661 -21
  2. package/README.md +174 -52
  3. package/dist/board/items.d.ts +22 -3
  4. package/dist/board/items.d.ts.map +1 -1
  5. package/dist/board/items.js +44 -4
  6. package/dist/board/items.js.map +1 -1
  7. package/dist/board/projection.d.ts +8 -1
  8. package/dist/board/projection.d.ts.map +1 -1
  9. package/dist/board/projection.js +63 -14
  10. package/dist/board/projection.js.map +1 -1
  11. package/dist/board/tasks.d.ts +15 -3
  12. package/dist/board/tasks.d.ts.map +1 -1
  13. package/dist/board/tasks.js +28 -9
  14. package/dist/board/tasks.js.map +1 -1
  15. package/dist/cloudflare.d.ts +32 -0
  16. package/dist/cloudflare.d.ts.map +1 -0
  17. package/dist/cloudflare.js +68 -0
  18. package/dist/cloudflare.js.map +1 -0
  19. package/dist/credentials.d.ts +5 -6
  20. package/dist/credentials.d.ts.map +1 -1
  21. package/dist/credentials.js +22 -15
  22. package/dist/credentials.js.map +1 -1
  23. package/dist/current-instance/changes.d.ts +87 -0
  24. package/dist/current-instance/changes.d.ts.map +1 -0
  25. package/dist/current-instance/changes.js +141 -0
  26. package/dist/current-instance/changes.js.map +1 -0
  27. package/dist/current-instance/current-instance.d.ts +89 -0
  28. package/dist/current-instance/current-instance.d.ts.map +1 -0
  29. package/dist/current-instance/current-instance.js +163 -0
  30. package/dist/current-instance/current-instance.js.map +1 -0
  31. package/dist/exe-dev.d.ts +6 -2
  32. package/dist/exe-dev.d.ts.map +1 -1
  33. package/dist/exe-dev.js +10 -9
  34. package/dist/exe-dev.js.map +1 -1
  35. package/dist/http-client.d.ts +8 -0
  36. package/dist/http-client.d.ts.map +1 -0
  37. package/dist/http-client.js +8 -0
  38. package/dist/http-client.js.map +1 -0
  39. package/dist/idle-triggers.d.ts +1 -1
  40. package/dist/idle-triggers.d.ts.map +1 -1
  41. package/dist/idle-triggers.js +1 -1
  42. package/dist/idle-triggers.js.map +1 -1
  43. package/dist/label-reconciler.d.ts +5 -2
  44. package/dist/label-reconciler.d.ts.map +1 -1
  45. package/dist/label-reconciler.js.map +1 -1
  46. package/dist/lease-order.d.ts +60 -0
  47. package/dist/lease-order.d.ts.map +1 -0
  48. package/dist/lease-order.js +76 -0
  49. package/dist/lease-order.js.map +1 -0
  50. package/dist/local.d.ts +4 -18
  51. package/dist/local.d.ts.map +1 -1
  52. package/dist/local.js +9 -45
  53. package/dist/local.js.map +1 -1
  54. package/dist/loop-matches.d.ts +28 -0
  55. package/dist/loop-matches.d.ts.map +1 -0
  56. package/dist/loop-matches.js +74 -0
  57. package/dist/loop-matches.js.map +1 -0
  58. package/dist/operator/attempt.d.ts +76 -10
  59. package/dist/operator/attempt.d.ts.map +1 -1
  60. package/dist/operator/attempt.js +69 -11
  61. package/dist/operator/attempt.js.map +1 -1
  62. package/dist/operator/board.d.ts +48 -16
  63. package/dist/operator/board.d.ts.map +1 -1
  64. package/dist/operator/board.js +48 -17
  65. package/dist/operator/board.js.map +1 -1
  66. package/dist/operator/configuration.d.ts +314 -0
  67. package/dist/operator/configuration.d.ts.map +1 -0
  68. package/dist/operator/configuration.js +490 -0
  69. package/dist/operator/configuration.js.map +1 -0
  70. package/dist/operator/desk.d.ts +206 -0
  71. package/dist/operator/desk.d.ts.map +1 -0
  72. package/dist/operator/desk.js +525 -0
  73. package/dist/operator/desk.js.map +1 -0
  74. package/dist/operator/github-changes.d.ts +88 -0
  75. package/dist/operator/github-changes.d.ts.map +1 -0
  76. package/dist/operator/github-changes.js +266 -0
  77. package/dist/operator/github-changes.js.map +1 -0
  78. package/dist/operator/http.d.ts +135 -105
  79. package/dist/operator/http.d.ts.map +1 -1
  80. package/dist/operator/http.js +155 -30
  81. package/dist/operator/http.js.map +1 -1
  82. package/dist/operator/machines.d.ts +71 -0
  83. package/dist/operator/machines.d.ts.map +1 -0
  84. package/dist/operator/machines.js +103 -0
  85. package/dist/operator/machines.js.map +1 -0
  86. package/dist/operator/need.d.ts +58 -11
  87. package/dist/operator/need.d.ts.map +1 -1
  88. package/dist/operator/need.js +61 -9
  89. package/dist/operator/need.js.map +1 -1
  90. package/dist/operator/operator.d.ts +135 -29
  91. package/dist/operator/operator.d.ts.map +1 -1
  92. package/dist/operator/operator.js +370 -63
  93. package/dist/operator/operator.js.map +1 -1
  94. package/dist/operator/overview.d.ts +7 -7
  95. package/dist/operator/overview.d.ts.map +1 -1
  96. package/dist/operator/overview.js +5 -5
  97. package/dist/operator/overview.js.map +1 -1
  98. package/dist/operator/projection.d.ts +56 -5
  99. package/dist/operator/projection.d.ts.map +1 -1
  100. package/dist/operator/projection.js +108 -9
  101. package/dist/operator/projection.js.map +1 -1
  102. package/dist/operator/run.d.ts +101 -6
  103. package/dist/operator/run.d.ts.map +1 -1
  104. package/dist/operator/run.js +100 -7
  105. package/dist/operator/run.js.map +1 -1
  106. package/dist/operator/statistics/cache.d.ts +7 -0
  107. package/dist/operator/statistics/cache.d.ts.map +1 -0
  108. package/dist/operator/statistics/cache.js +40 -0
  109. package/dist/operator/statistics/cache.js.map +1 -0
  110. package/dist/operator/statistics/runs.d.ts +36 -0
  111. package/dist/operator/statistics/runs.d.ts.map +1 -0
  112. package/dist/operator/statistics/runs.js +284 -0
  113. package/dist/operator/statistics/runs.js.map +1 -0
  114. package/dist/operator/statistics/statistics.d.ts +20 -0
  115. package/dist/operator/statistics/statistics.d.ts.map +1 -0
  116. package/dist/operator/statistics/statistics.js +138 -0
  117. package/dist/operator/statistics/statistics.js.map +1 -0
  118. package/dist/operator/statistics/tasks.d.ts +30 -0
  119. package/dist/operator/statistics/tasks.d.ts.map +1 -0
  120. package/dist/operator/statistics/tasks.js +244 -0
  121. package/dist/operator/statistics/tasks.js.map +1 -0
  122. package/dist/operator/statistics/view.d.ts +302 -0
  123. package/dist/operator/statistics/view.d.ts.map +1 -0
  124. package/dist/operator/statistics/view.js +243 -0
  125. package/dist/operator/statistics/view.js.map +1 -0
  126. package/dist/operator/statistics/window.d.ts +24 -0
  127. package/dist/operator/statistics/window.d.ts.map +1 -0
  128. package/dist/operator/statistics/window.js +47 -0
  129. package/dist/operator/statistics/window.js.map +1 -0
  130. package/dist/operator/task.d.ts +94 -0
  131. package/dist/operator/task.d.ts.map +1 -0
  132. package/dist/operator/task.js +204 -0
  133. package/dist/operator/task.js.map +1 -0
  134. package/dist/operator/transcript.d.ts +12 -12
  135. package/dist/operator/transcript.d.ts.map +1 -1
  136. package/dist/operator/transcript.js +11 -9
  137. package/dist/operator/transcript.js.map +1 -1
  138. package/dist/operator/usage.d.ts +103 -0
  139. package/dist/operator/usage.d.ts.map +1 -0
  140. package/dist/operator/usage.js +234 -0
  141. package/dist/operator/usage.js.map +1 -0
  142. package/dist/orchestrator.d.ts +8 -5
  143. package/dist/orchestrator.d.ts.map +1 -1
  144. package/dist/orchestrator.js +4 -2
  145. package/dist/orchestrator.js.map +1 -1
  146. package/dist/polling/closed-item-asks.d.ts +8 -0
  147. package/dist/polling/closed-item-asks.d.ts.map +1 -0
  148. package/dist/polling/closed-item-asks.js +28 -0
  149. package/dist/polling/closed-item-asks.js.map +1 -0
  150. package/dist/polling/cycle.d.ts +28 -10
  151. package/dist/polling/cycle.d.ts.map +1 -1
  152. package/dist/polling/cycle.js +20 -6
  153. package/dist/polling/cycle.js.map +1 -1
  154. package/dist/polling/evaluation-failures.d.ts +42 -0
  155. package/dist/polling/evaluation-failures.d.ts.map +1 -0
  156. package/dist/polling/evaluation-failures.js +103 -0
  157. package/dist/polling/evaluation-failures.js.map +1 -0
  158. package/dist/polling/hints.d.ts +2 -2
  159. package/dist/polling/hints.d.ts.map +1 -1
  160. package/dist/polling/hints.js +2 -2
  161. package/dist/polling/hints.js.map +1 -1
  162. package/dist/polling/loop-evaluation.d.ts +21 -11
  163. package/dist/polling/loop-evaluation.d.ts.map +1 -1
  164. package/dist/polling/loop-evaluation.js +70 -27
  165. package/dist/polling/loop-evaluation.js.map +1 -1
  166. package/dist/polling/open-issues.d.ts +23 -0
  167. package/dist/polling/open-issues.d.ts.map +1 -0
  168. package/dist/polling/open-issues.js +77 -0
  169. package/dist/polling/open-issues.js.map +1 -0
  170. package/dist/polling/open-pull-requests.d.ts +28 -0
  171. package/dist/polling/open-pull-requests.d.ts.map +1 -0
  172. package/dist/polling/open-pull-requests.js +131 -0
  173. package/dist/polling/open-pull-requests.js.map +1 -0
  174. package/dist/polling/polling.d.ts +20 -11
  175. package/dist/polling/polling.d.ts.map +1 -1
  176. package/dist/polling/polling.js +215 -52
  177. package/dist/polling/polling.js.map +1 -1
  178. package/dist/polling/repository-sync.d.ts +21 -14
  179. package/dist/polling/repository-sync.d.ts.map +1 -1
  180. package/dist/polling/repository-sync.js +35 -28
  181. package/dist/polling/repository-sync.js.map +1 -1
  182. package/dist/polling-triggers.d.ts +1 -1
  183. package/dist/polling-triggers.d.ts.map +1 -1
  184. package/dist/polling-triggers.js +1 -1
  185. package/dist/polling-triggers.js.map +1 -1
  186. package/dist/reloads.d.ts +14 -0
  187. package/dist/reloads.d.ts.map +1 -0
  188. package/dist/reloads.js +7 -0
  189. package/dist/reloads.js.map +1 -0
  190. package/dist/runtime.d.ts +24 -0
  191. package/dist/runtime.d.ts.map +1 -0
  192. package/dist/runtime.js +58 -0
  193. package/dist/runtime.js.map +1 -0
  194. package/dist/schedule-triggers.d.ts +14 -10
  195. package/dist/schedule-triggers.d.ts.map +1 -1
  196. package/dist/schedule-triggers.js +36 -31
  197. package/dist/schedule-triggers.js.map +1 -1
  198. package/dist/scheduler.d.ts +45 -5
  199. package/dist/scheduler.d.ts.map +1 -1
  200. package/dist/scheduler.js +587 -44
  201. package/dist/scheduler.js.map +1 -1
  202. package/dist/ssh.d.ts +103 -0
  203. package/dist/ssh.d.ts.map +1 -0
  204. package/dist/ssh.js +144 -0
  205. package/dist/ssh.js.map +1 -0
  206. package/dist/trigger-condition.d.ts +12 -0
  207. package/dist/trigger-condition.d.ts.map +1 -0
  208. package/dist/trigger-condition.js +88 -0
  209. package/dist/trigger-condition.js.map +1 -0
  210. package/dist/trigger-submission.d.ts +16 -13
  211. package/dist/trigger-submission.d.ts.map +1 -1
  212. package/dist/trigger-submission.js +19 -14
  213. package/dist/trigger-submission.js.map +1 -1
  214. package/dist/worker-engine.d.ts +13 -0
  215. package/dist/worker-engine.d.ts.map +1 -0
  216. package/dist/worker-engine.js +56 -0
  217. package/dist/worker-engine.js.map +1 -0
  218. package/dist/worker-status.d.ts +140 -0
  219. package/dist/worker-status.d.ts.map +1 -0
  220. package/dist/worker-status.js +76 -0
  221. package/dist/worker-status.js.map +1 -0
  222. package/package.json +47 -22
@@ -8,16 +8,19 @@ import { LoopName } from "@usine/core/loop";
8
8
  import { RepositoryRevision } from "@usine/core/repository";
9
9
  import { Submission } from "@usine/engine/engine";
10
10
  import { Effect, Match, Option, Result, Schema } from "effect";
11
- /** Issue and schedule Attempts resolve the remote's default branch at prepare time. */
11
+ /**
12
+ * The revision for issue and schedule Attempts, which resolve the remote's default branch at
13
+ * prepare time.
14
+ */
12
15
  export const DEFAULT_BRANCH_REVISION = RepositoryRevision.make("HEAD");
13
- /** The agent a loaded loop names is no longer in the roster. */
16
+ /** The Agent of a loaded Loop is no longer in the roster. */
14
17
  export class LoopAgentResolutionError extends Schema.TaggedError("@usine/orchestrator/LoopAgentResolutionError")("LoopAgentResolutionError", {
15
18
  loop: LoopName,
16
19
  agent: AgentName,
17
20
  message: Schema.NonEmptyString,
18
21
  }) {
19
22
  }
20
- /** Resolves one loop's roster agent and effective parent model. */
23
+ /** Resolves one Loop's roster Agent and effective parent model. */
21
24
  export const resolveTriggerLoop = Effect.fn("TriggerRouting.resolveLoop")(function* (instance, loop) {
22
25
  yield* Effect.annotateCurrentSpan({ loop: loop.name, agent: loop.agent });
23
26
  const roster = new Map(instance.agents.map((agent) => [agent.name, agent]));
@@ -26,7 +29,7 @@ export const resolveTriggerLoop = Effect.fn("TriggerRouting.resolveLoop")(functi
26
29
  return yield* new LoopAgentResolutionError({
27
30
  loop: loop.name,
28
31
  agent: loop.agent,
29
- message: `Loop ${loop.name} references missing Agent ${loop.agent}`,
32
+ message: `Loop "${loop.name}" references agent "${loop.agent}", which is not in the roster`,
30
33
  });
31
34
  }
32
35
  const agent = loaded.agent;
@@ -36,12 +39,7 @@ export const resolveTriggerLoop = Effect.fn("TriggerRouting.resolveLoop")(functi
36
39
  parentModel: resolveParentModel(agent, instance.config.settings.parentModel),
37
40
  };
38
41
  });
39
- /**
40
- * Resolves every loaded loop's agent. `InstanceFolder.load` already quarantines
41
- * loops that name unknown agents, so a miss here means a hand-assembled
42
- * instance drifted: the loop is skipped with a log each cycle and its siblings
43
- * keep running.
44
- */
42
+ /** Resolves every loaded Loop's Agent, skipping and logging each Loop whose Agent is missing. */
45
43
  export const resolveTriggerLoops = Effect.fn("TriggerRouting.resolveLoops")(function* (instance) {
46
44
  const resolved = [];
47
45
  for (const loop of instance.loops) {
@@ -59,7 +57,9 @@ export const resolveTriggerLoops = Effect.fn("TriggerRouting.resolveLoops")(func
59
57
  }
60
58
  return resolved;
61
59
  });
62
- /** Builds the Submission every trigger stream hands to the engine. */
60
+ /** Returns the Loop's `max_cycles`, or `None` for a schedule Loop, whose Runs no budget counts. */
61
+ export const cycleLimitOf = (loop) => loop.trigger.on === "schedule" ? Option.none() : Option.some(loop.maxCycles);
62
+ /** Builds the Submission that every trigger stream sends to the engine. */
63
63
  export const triggerSubmission = (options) => new Submission({
64
64
  event: new Event({
65
65
  id: EventId.make(options.dedupKey),
@@ -72,21 +72,26 @@ export const triggerSubmission = (options) => new Submission({
72
72
  loop: options.loop.name,
73
73
  step: options.loop.step,
74
74
  approval: options.loop.approval,
75
- cycleLimit: options.loop.trigger.on === "schedule" ? Option.none() : Option.some(options.loop.maxCycles),
75
+ permissions: options.loop.permissions,
76
+ cycleLimit: cycleLimitOf(options.loop),
76
77
  repository: options.repository.name,
77
78
  revision: options.revision,
78
79
  task: options.task,
79
80
  agent: options.agent,
80
81
  parentModel: options.parentModel,
81
82
  });
82
- /** The log fields for a submission outcome: the run id for a claim, the reason for an ignore. */
83
+ /**
84
+ * Returns the log fields for a submission outcome: the Run ID for a claim or suppression, the
85
+ * reason for an ignore.
86
+ */
83
87
  export const submissionLogFields = (submission) => Match.valueTags(submission, {
84
88
  Claimed: ({ runId }) => ({ runId }),
85
89
  Queued: () => ({}),
90
+ Suppressed: ({ runId }) => ({ suppressedBy: runId }),
86
91
  Ignored: ({ reason }) => ({ reason }),
87
92
  CycleBlocked: ({ ask }) => ({ askId: ask.id, reason: "cycle-budget-exhausted" }),
88
93
  });
89
- /** Log fields for a config failure met while triggering. */
94
+ /** Returns the log fields for a config failure during triggering. */
90
95
  export const configFileErrorLogFields = (error) => Option.match(error.expression, {
91
96
  onNone: () => ({ configFile: error.file, configStage: error.stage }),
92
97
  onSome: (expression) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"trigger-submission.js","sourceRoot":"","sources":["../src/trigger-submission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trigger-submission.js","sourceRoot":"","sources":["../src/trigger-submission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { UsineConfig } from "@usine/config/factory";
2
+ import type { BrainSpec } from "@usine/core/agent/brain";
3
+ import type { InstanceDirectory, InstanceId } from "@usine/core/instance";
4
+ import { GitHubCredentials } from "@usine/github/github-app";
5
+ import { Layer } from "effect";
6
+ /**
7
+ * Provides the engine for the Workers in `config`: the SSH executor if every Worker is `ssh`, the
8
+ * Cloudflare executor if every Worker is `cloudflare`, otherwise the local one. Fails at startup
9
+ * with `UnsupportedWorkerError` on any other mix. The SSH executor labels its Attempt containers
10
+ * with `instanceId`, so that instances that share the GitHub App and a machine keep each other's.
11
+ */
12
+ export declare const workerEngineLayer: (instanceDirectory: InstanceDirectory, instanceId: InstanceId, config: UsineConfig, brains: ReadonlyArray<BrainSpec>) => 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("@usine/engine/engine").UnconfirmedStops | 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 | GitHubCredentials | import("@usine/engine/trigger-condition").TriggerCondition>;
13
+ //# sourceMappingURL=worker-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-engine.d.ts","sourceRoot":"","sources":["../src/worker-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAC;AAc/C;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,sBACT,iBAAiB,cACxB,UAAU,UACd,WAAW,UACX,aAAa,CAAC,SAAS,CAAC,wmDA+C/B,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { GitHubCredentials } from "@usine/github/github-app";
2
+ import { Effect, Layer, Option } from "effect";
3
+ import { cloudflareWorkerAddressesOf, cloudflareWorkersOf, layer as cloudflareLayer, } from "./cloudflare.js";
4
+ import { layer as localLayer } from "./local.js";
5
+ import { layer as sshLayer, sshWorkerAddressesOf, sshWorkerRecordsDirectory, sshWorkersOf, } from "./ssh.js";
6
+ /**
7
+ * Provides the engine for the Workers in `config`: the SSH executor if every Worker is `ssh`, the
8
+ * Cloudflare executor if every Worker is `cloudflare`, otherwise the local one. Fails at startup
9
+ * with `UnsupportedWorkerError` on any other mix. The SSH executor labels its Attempt containers
10
+ * with `instanceId`, so that instances that share the GitHub App and a machine keep each other's.
11
+ */
12
+ export const workerEngineLayer = (instanceDirectory, instanceId, config, brains) => Layer.unwrap(Effect.gen(function* () {
13
+ const ssh = sshWorkersOf(config);
14
+ const workers = config.workers.map(({ name }) => name).join(",");
15
+ if (ssh.length === config.workers.length) {
16
+ const addresses = yield* sshWorkerAddressesOf(config);
17
+ // The GitHub App is the instance's identity (ADR 0011).
18
+ const { appId } = yield* GitHubCredentials;
19
+ const instance = `github-app-${String(appId)}`;
20
+ yield* Effect.logInfo("Running Attempts on SSH Workers", {
21
+ workers,
22
+ instance,
23
+ instanceId,
24
+ behindGateway: addresses
25
+ .filter(({ gateway }) => Option.isSome(gateway))
26
+ .map(({ name }) => name)
27
+ .join(","),
28
+ provisioned: addresses
29
+ .filter(({ machine }) => machine._tag === "Provisioned")
30
+ .map(({ name }) => name)
31
+ .join(","),
32
+ });
33
+ return sshLayer(instanceDirectory, config, brains, {
34
+ workers: addresses,
35
+ instance,
36
+ instanceId,
37
+ knownHostsDirectory: `${instanceDirectory}/.usine/known-hosts`,
38
+ workerRecordsDirectory: sshWorkerRecordsDirectory(instanceDirectory),
39
+ });
40
+ }
41
+ if (cloudflareWorkersOf(config).length === config.workers.length) {
42
+ const addresses = yield* cloudflareWorkerAddressesOf(config);
43
+ // The GitHub App is the instance's identity (ADR 0011).
44
+ const { appId } = yield* GitHubCredentials;
45
+ const instance = `github-app-${String(appId)}`;
46
+ yield* Effect.logInfo("Running Attempts in Cloudflare sandboxes", {
47
+ workers,
48
+ instance,
49
+ workerUrls: addresses.map(({ workerUrl }) => workerUrl.origin).join(","),
50
+ });
51
+ return cloudflareLayer(instanceDirectory, config, brains, { workers: addresses, instance });
52
+ }
53
+ yield* Effect.logInfo("Running Attempts with the local executor", { workers });
54
+ return localLayer(instanceDirectory, config, brains, {});
55
+ }));
56
+ //# sourceMappingURL=worker-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-engine.js","sourceRoot":"","sources":["../src/worker-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ import type { BrainSpec, Harness } from "@usine/core/agent/brain";
2
+ import type { ItemKey } from "@usine/core/item";
3
+ import type { LoopName } from "@usine/core/loop";
4
+ import type { RunId } from "@usine/core/run";
5
+ import type { ContainerLimits, WorkerName } from "@usine/core/worker";
6
+ import type { ExecutorError, MachineStatus, MachineUnavailableReason, PreflightReport, WorkerCapability } from "@usine/executor";
7
+ import { Context, type DateTime, Effect, Layer, Option, Result } from "effect";
8
+ import type { PipelinePosition } from "./lease-order.ts";
9
+ /** A Worker's current slot usage in the scheduler. */
10
+ export interface WorkerSlots {
11
+ readonly worker: WorkerName;
12
+ /** The maximum concurrent Attempts, or zero after a reload removed the Worker. */
13
+ readonly capacity: number;
14
+ /** The number of Attempts with a slot, which can exceed `capacity` after a reload lowered it. */
15
+ readonly leased: number;
16
+ }
17
+ /** A Run that waits for a Worker slot. */
18
+ export interface QueuedRun {
19
+ readonly runId: RunId;
20
+ readonly loop: LoopName;
21
+ readonly itemKey: ItemKey;
22
+ readonly position: PipelinePosition;
23
+ /**
24
+ * The fewest queued Runs that take a Worker slot before this one. Of the Runs that wait for their
25
+ * reattached Attempt's Worker, a Run that can take any Worker's slot counts only those of the
26
+ * Worker with the fewest, among the Workers that take new Attempts.
27
+ */
28
+ readonly ahead: number;
29
+ }
30
+ /** A passed preflight check. */
31
+ export interface PreflightPassed {
32
+ readonly _tag: "Passed";
33
+ readonly checkedAt: DateTime.Utc;
34
+ }
35
+ /**
36
+ * A passed check of a Worker's own prerequisites that found it running Attempts without a
37
+ * capability that keeps them apart, such as an SSH Worker without Docker.
38
+ */
39
+ export interface PreflightDegraded {
40
+ readonly _tag: "Degraded";
41
+ readonly checkedAt: DateTime.Utc;
42
+ /** The executor's summary for operators. */
43
+ readonly message: string;
44
+ }
45
+ /**
46
+ * A check that the preflight left for later, such as a provisioned Worker's harness checks,
47
+ * which run on its first machine each day.
48
+ */
49
+ export interface PreflightDeferred {
50
+ readonly _tag: "Deferred";
51
+ readonly checkedAt: DateTime.Utc;
52
+ /** When the check runs instead, for operators. */
53
+ readonly message: string;
54
+ }
55
+ /** A preflight check that found a missing prerequisite or couldn't run. */
56
+ export interface PreflightFailed {
57
+ readonly _tag: "Failed";
58
+ readonly checkedAt: DateTime.Utc;
59
+ /** The missing prerequisite, or `None` if the check itself failed, such as a timed-out probe. */
60
+ readonly capability: Option.Option<WorkerCapability>;
61
+ /** The executor's summary for operators. */
62
+ readonly message: string;
63
+ }
64
+ /** The last outcome of one preflight check and when it ended. */
65
+ export type PreflightCheck = PreflightPassed | PreflightDegraded | PreflightDeferred | PreflightFailed;
66
+ /**
67
+ * A provisioned Worker that couldn't create a machine, and when it tries again. The Runs it
68
+ * would serve keep waiting.
69
+ */
70
+ export interface ProvisioningPause {
71
+ readonly worker: WorkerName;
72
+ /** Why the creation failed, or `check` if the first machine of the day failed its preflight. */
73
+ readonly reason: MachineUnavailableReason | "check";
74
+ readonly message: string;
75
+ /** The number of failed creations in a row. */
76
+ readonly failures: number;
77
+ readonly failedAt: DateTime.Utc;
78
+ readonly retryAt: DateTime.Utc;
79
+ /** Whether the Worker still waits for `retryAt` before it creates a machine. */
80
+ readonly blocked: boolean;
81
+ }
82
+ /** The last preflight of one harness on a Worker. */
83
+ export interface HarnessPreflight {
84
+ readonly harness: Harness;
85
+ readonly check: PreflightCheck;
86
+ }
87
+ /**
88
+ * The last preflight of a Worker: its own prerequisites (machine, Git, memory, Gateway, and
89
+ * credentials), each checked harness, and the limits of its Attempt containers.
90
+ */
91
+ export interface WorkerPreflight {
92
+ readonly worker: WorkerName;
93
+ /** `None` until a preflight checked the Worker's own prerequisites. */
94
+ readonly prerequisites: Option.Option<PreflightCheck>;
95
+ /** In harness name order. */
96
+ readonly harnesses: ReadonlyArray<HarnessPreflight>;
97
+ /**
98
+ * The limits of each Attempt container from the last passed preflight that checked the
99
+ * Worker's machine. `None` before one, or if that machine had no Docker.
100
+ */
101
+ readonly containerLimits: Option.Option<ContainerLimits>;
102
+ }
103
+ /**
104
+ * Returns `previous` updated with one preflight of `brains`. A degraded report passes every
105
+ * harness and records the prerequisites as degraded, and a deferred report records every
106
+ * harness as deferred and keeps the container limits, since it checked no machine. An
107
+ * unavailable harness fails that harness and passes the ones checked before it; any other
108
+ * failure fails only the prerequisites.
109
+ */
110
+ export declare const recordPreflight: (previous: WorkerPreflight, brains: ReadonlyArray<BrainSpec>, checkedAt: DateTime.Utc, outcome: Result.Result<PreflightReport, ExecutorError>) => WorkerPreflight;
111
+ /** Returns the preflight record of a Worker that no preflight has checked. */
112
+ export declare const unchecked: (worker: WorkerName) => WorkerPreflight;
113
+ declare const WorkerStatus_base: Context.ServiceClass<WorkerStatus, "@usine/orchestrator/WorkerStatus", {
114
+ /**
115
+ * The slots of each Worker in `usine.yaml` order, then of each removed Worker until its last
116
+ * Attempt ends.
117
+ */
118
+ readonly slots: Effect.Effect<ReadonlyArray<WorkerSlots>>;
119
+ /** The Runs that wait for a Worker slot, in the order they take one (`leaseOrder`). */
120
+ readonly queue: Effect.Effect<ReadonlyArray<QueuedRun>>;
121
+ /**
122
+ * The last preflight of each Worker checked since startup, including a refused reload's
123
+ * preflight.
124
+ */
125
+ readonly preflights: Effect.Effect<ReadonlyArray<WorkerPreflight>>;
126
+ /** The machines of the provisioned Workers in flight, oldest first. */
127
+ readonly machines: Effect.Effect<ReadonlyArray<MachineStatus>>;
128
+ /** The provisioned Workers whose last machine creation failed. */
129
+ readonly provisioning: Effect.Effect<ReadonlyArray<ProvisioningPause>>;
130
+ }>;
131
+ /**
132
+ * The scheduler's current slot usage, queued Runs, last preflight of each Worker, and the
133
+ * provisioned Workers' machines and pauses.
134
+ */
135
+ export declare class WorkerStatus extends WorkerStatus_base {
136
+ /** A status with no Workers, no queued Runs, and no preflights, as in setup mode. */
137
+ static readonly idle: Layer.Layer<WorkerStatus, never, never>;
138
+ }
139
+ export {};
140
+ //# sourceMappingURL=worker-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-status.d.ts","sourceRoot":"","sources":["../src/worker-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import { HarnessUnavailableError } from "@usine/core/agent/capability";
2
+ import { Array as Arr, Context, Effect, Layer, Option, Order, Result, Schema, } from "effect";
3
+ const isHarnessUnavailable = Schema.is(HarnessUnavailableError);
4
+ const byHarness = Order.mapInput(Order.String, ({ harness }) => harness);
5
+ const withHarnesses = (harnesses, checked, check) => Arr.sort([
6
+ ...harnesses.filter(({ harness }) => !checked.includes(harness)),
7
+ ...checked.map((harness) => ({ harness, check })),
8
+ ], byHarness);
9
+ /**
10
+ * Returns `previous` updated with one preflight of `brains`. A degraded report passes every
11
+ * harness and records the prerequisites as degraded, and a deferred report records every
12
+ * harness as deferred and keeps the container limits, since it checked no machine. An
13
+ * unavailable harness fails that harness and passes the ones checked before it; any other
14
+ * failure fails only the prerequisites.
15
+ */
16
+ export const recordPreflight = (previous, brains, checkedAt, outcome) => {
17
+ const harnesses = Arr.dedupe(brains.map(({ harness }) => harness));
18
+ if (Result.isSuccess(outcome)) {
19
+ const passed = { _tag: "Passed", checkedAt };
20
+ return {
21
+ worker: previous.worker,
22
+ prerequisites: Option.some(Option.match(outcome.success.degraded, {
23
+ onNone: () => passed,
24
+ onSome: (message) => ({ _tag: "Degraded", checkedAt, message }),
25
+ })),
26
+ harnesses: withHarnesses(previous.harnesses, harnesses, Option.match(outcome.success.deferred, {
27
+ onNone: () => passed,
28
+ onSome: (message) => ({ _tag: "Deferred", checkedAt, message }),
29
+ })),
30
+ containerLimits: Option.isSome(outcome.success.deferred)
31
+ ? previous.containerLimits
32
+ : outcome.success.containerLimits,
33
+ };
34
+ }
35
+ const error = outcome.failure;
36
+ const capability = error._tag === "WorkerCapabilityError" ? Option.some(error.capability) : Option.none();
37
+ const failed = { _tag: "Failed", checkedAt, capability, message: error.message };
38
+ if (error._tag === "WorkerCapabilityError" && isHarnessUnavailable(error.cause)) {
39
+ const unavailable = error.cause.harness;
40
+ const before = Arr.dedupe(Arr.takeWhile(brains, ({ harness }) => harness !== unavailable).map(({ harness }) => harness));
41
+ return {
42
+ worker: previous.worker,
43
+ prerequisites: previous.prerequisites,
44
+ harnesses: withHarnesses(withHarnesses(previous.harnesses, before, { _tag: "Passed", checkedAt }), [unavailable], failed),
45
+ containerLimits: previous.containerLimits,
46
+ };
47
+ }
48
+ return {
49
+ worker: previous.worker,
50
+ prerequisites: Option.some(failed),
51
+ harnesses: previous.harnesses,
52
+ containerLimits: previous.containerLimits,
53
+ };
54
+ };
55
+ /** Returns the preflight record of a Worker that no preflight has checked. */
56
+ export const unchecked = (worker) => ({
57
+ worker,
58
+ prerequisites: Option.none(),
59
+ harnesses: [],
60
+ containerLimits: Option.none(),
61
+ });
62
+ /**
63
+ * The scheduler's current slot usage, queued Runs, last preflight of each Worker, and the
64
+ * provisioned Workers' machines and pauses.
65
+ */
66
+ export class WorkerStatus extends Context.Service()("@usine/orchestrator/WorkerStatus") {
67
+ /** A status with no Workers, no queued Runs, and no preflights, as in setup mode. */
68
+ static idle = Layer.succeed(WorkerStatus)({
69
+ slots: Effect.succeed([]),
70
+ queue: Effect.succeed([]),
71
+ preflights: Effect.succeed([]),
72
+ machines: Effect.succeed([]),
73
+ provisioning: Effect.succeed([]),
74
+ });
75
+ }
76
+ //# sourceMappingURL=worker-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-status.js","sourceRoot":"","sources":["../src/worker-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAYvE,OAAO,EACL,KAAK,IAAI,GAAG,EACZ,OAAO,EAEP,MAAM,EACN,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,MAAM,GACP,MAAM,QAAQ,CAAC;AA+GhB,MAAM,oBAAoB,GAAG,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC;AAEhE,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;AAE3F,MAAM,aAAa,GAAG,CACpB,SAA0C,EAC1C,OAA+B,EAC/B,KAAqB,EACY,EAAE,CACnC,GAAG,CAAC,IAAI,CACN;IACE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;CAClD,EACD,SAAS,CACV,CAAC;AAEJ;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,QAAyB,EACzB,MAAgC,EAChC,SAAuB,EACvB,OAAsD,EACrC,EAAE;IACnB,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;QAC7D,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,aAAa,EAAE,MAAM,CAAC,IAAI,CACxB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACrC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM;gBACpB,MAAM,EAAE,CAAC,OAAO,EAAkB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;aAChF,CAAC,CACH;YACD,SAAS,EAAE,aAAa,CACtB,QAAQ,CAAC,SAAS,EAClB,SAAS,EACT,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACrC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM;gBACpB,MAAM,EAAE,CAAC,OAAO,EAAkB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;aAChF,CAAC,CACH;YACD,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACtD,CAAC,CAAC,QAAQ,CAAC,eAAe;gBAC1B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe;SACpC,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9B,MAAM,UAAU,GACd,KAAK,CAAC,IAAI,KAAK,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACzF,MAAM,MAAM,GAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IACjG,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,IAAI,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAChF,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;QACxC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CACvB,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAC9F,CAAC;QACF,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,SAAS,EAAE,aAAa,CACtB,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EACxE,CAAC,WAAW,CAAC,EACb,MAAM,CACP;YACD,eAAe,EAAE,QAAQ,CAAC,eAAe;SAC1C,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAClC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,eAAe,EAAE,QAAQ,CAAC,eAAe;KAC1C,CAAC;AACJ,CAAC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAmB,EAAE,CAAC,CAAC;IACjE,MAAM;IACN,aAAa,EAAE,MAAM,CAAC,IAAI,EAAE;IAC5B,SAAS,EAAE,EAAE;IACb,eAAe,EAAE,MAAM,CAAC,IAAI,EAAE;CAC/B,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,OAAO,CAAC,OAAO,EAoB9C,CAAC,kCAAkC,CAAC;IACrC,qFAAqF;IACrF,MAAM,CAAU,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACjD,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;KACjC,CAAC,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "name": "@usine/orchestrator",
3
- "version": "0.2.1",
3
+ "version": "0.4.0",
4
4
  "description": "The embeddable usine composition: the full engine as an Effect layer, startable in-process.",
5
- "license": "MIT",
5
+ "license": "AGPL-3.0-only",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "git+https://github.com/basaltbytes/usine.git",
9
9
  "directory": "packages/orchestrator"
10
10
  },
11
11
  "files": [
12
- "dist"
12
+ "dist",
13
+ "!dist/tsconfig.tsbuildinfo"
13
14
  ],
14
15
  "type": "module",
15
16
  "sideEffects": false,
@@ -18,10 +19,18 @@
18
19
  "types": "./dist/board/projection.d.ts",
19
20
  "default": "./dist/board/projection.js"
20
21
  },
22
+ "./cloudflare": {
23
+ "types": "./dist/cloudflare.d.ts",
24
+ "default": "./dist/cloudflare.js"
25
+ },
21
26
  "./credentials": {
22
27
  "types": "./dist/credentials.d.ts",
23
28
  "default": "./dist/credentials.js"
24
29
  },
30
+ "./current-instance": {
31
+ "types": "./dist/current-instance/current-instance.d.ts",
32
+ "default": "./dist/current-instance/current-instance.js"
33
+ },
25
34
  "./exe-dev": {
26
35
  "types": "./dist/exe-dev.d.ts",
27
36
  "default": "./dist/exe-dev.js"
@@ -38,6 +47,14 @@
38
47
  "types": "./dist/local.d.ts",
39
48
  "default": "./dist/local.js"
40
49
  },
50
+ "./operator": {
51
+ "types": "./dist/operator/operator.d.ts",
52
+ "default": "./dist/operator/operator.js"
53
+ },
54
+ "./operator/http": {
55
+ "types": "./dist/operator/http.d.ts",
56
+ "default": "./dist/operator/http.js"
57
+ },
41
58
  "./orchestrator": {
42
59
  "types": "./dist/orchestrator.d.ts",
43
60
  "default": "./dist/orchestrator.js"
@@ -46,6 +63,10 @@
46
63
  "types": "./dist/polling-triggers.d.ts",
47
64
  "default": "./dist/polling-triggers.js"
48
65
  },
66
+ "./runtime": {
67
+ "types": "./dist/runtime.d.ts",
68
+ "default": "./dist/runtime.js"
69
+ },
49
70
  "./schedule-triggers": {
50
71
  "types": "./dist/schedule-triggers.d.ts",
51
72
  "default": "./dist/schedule-triggers.js"
@@ -54,37 +75,40 @@
54
75
  "types": "./dist/scheduler.d.ts",
55
76
  "default": "./dist/scheduler.js"
56
77
  },
57
- "./operator": {
58
- "types": "./dist/operator/operator.d.ts",
59
- "default": "./dist/operator/operator.js"
78
+ "./ssh": {
79
+ "types": "./dist/ssh.d.ts",
80
+ "default": "./dist/ssh.js"
60
81
  },
61
- "./operator/http": {
62
- "types": "./dist/operator/http.d.ts",
63
- "default": "./dist/operator/http.js"
82
+ "./worker-status": {
83
+ "types": "./dist/worker-status.d.ts",
84
+ "default": "./dist/worker-status.js"
64
85
  }
65
86
  },
66
87
  "publishConfig": {
67
88
  "access": "public"
68
89
  },
69
90
  "dependencies": {
70
- "@effect/platform-node": "4.0.0-rc.111",
71
- "@usine/config": "0.2.1",
72
- "@usine/core": "0.3.0",
73
- "@usine/engine": "0.3.0",
74
- "@usine/executor": "0.2.1",
75
- "@usine/expression": "0.2.0",
76
- "@usine/github": "0.1.2",
77
- "@usine/run-host": "0.3.0"
91
+ "@effect/platform-node": "4.0.6",
92
+ "@effect/platform-node-shared": "4.0.6",
93
+ "@usine/agents": "0.5.0",
94
+ "@usine/core": "0.5.0",
95
+ "@usine/config": "0.4.0",
96
+ "@usine/durable": "0.2.0",
97
+ "@usine/engine": "0.5.0",
98
+ "@usine/github": "0.3.0",
99
+ "@usine/executor": "0.4.0",
100
+ "@usine/expression": "0.4.0"
78
101
  },
79
102
  "devDependencies": {
80
- "@effect/vitest": "4.0.0-rc.111",
81
- "effect": "4.0.0-rc.111",
103
+ "@effect/vitest": "4.0.6",
104
+ "effect": "4.0.6",
82
105
  "typescript": "7.0.2",
83
- "vitest": "4.1.11",
106
+ "vitest": "5.0.5",
107
+ "@usine/gateway": "0.2.0",
84
108
  "@usine/tsconfig": "0.0.0"
85
109
  },
86
110
  "peerDependencies": {
87
- "effect": "4.0.0-rc.111"
111
+ "effect": "4.0.6"
88
112
  },
89
113
  "engines": {
90
114
  "node": ">=22"
@@ -95,6 +119,7 @@
95
119
  "test": "vitest run --exclude 'test/integration/**'",
96
120
  "test:integration": "vitest run test/integration/polling-triggers.test.ts",
97
121
  "test:integration:agent": "vitest run test/integration/agent-run.test.ts",
98
- "test:exe-dev": "vitest run test/integration/exe-dev-worker.test.ts"
122
+ "test:exe-dev": "vitest run test/integration/exe-dev-worker.test.ts",
123
+ "test:ssh": "vitest run --disable-console-intercept test/integration/ssh-worker.test.ts"
99
124
  }
100
125
  }