@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 @@
1
+ {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../src/ssh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { TriggerCondition } from "@usine/engine/trigger-condition";
2
+ import { ExpressionEngine } from "@usine/expression/expression-engine";
3
+ import { GitHubPolling } from "@usine/github/polling";
4
+ import { Layer } from "effect";
5
+ import { CurrentInstance } from "./current-instance/current-instance.ts";
6
+ /**
7
+ * Re-evaluates a queued Event's trigger against a fresh GitHub snapshot of its Item. Returns
8
+ * `item-gone` if the Item no longer exists, and `matches` on any other failure or after five
9
+ * seconds.
10
+ */
11
+ export declare const triggerConditionLayer: Layer.Layer<TriggerCondition, never, CurrentInstance | ExpressionEngine | GitHubPolling>;
12
+ //# sourceMappingURL=trigger-condition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-condition.d.ts","sourceRoot":"","sources":["../src/trigger-condition.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAoC,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAU,KAAK,EAAkB,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAMzE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,KAAK,CAC7C,gBAAgB,EAChB,KAAK,EACL,eAAe,GAAG,gBAAgB,GAAG,aAAa,CAkGnD,CAAC"}
@@ -0,0 +1,88 @@
1
+ import { environmentFor, repositoryContext } from "@usine/config/payload-slices";
2
+ import { matchesSelector } from "@usine/config/selector";
3
+ import { canonicalRepositoryName } from "@usine/core/repository";
4
+ import { TriggerCondition } from "@usine/engine/trigger-condition";
5
+ import { ExpressionEngine } from "@usine/expression/expression-engine";
6
+ import { ChangedIssue, ChangedPullRequest, GitHubPolling } from "@usine/github/polling";
7
+ import { Effect, Layer, Option, Schema } from "effect";
8
+ import { CurrentInstance } from "./current-instance/current-instance.js";
9
+ import { repositoryFailureLogFields } from "./polling/cycle.js";
10
+ import { GitHubItemKey } from "./polling/repository-sync.js";
11
+ const decodeItemKey = Schema.decodeUnknownOption(GitHubItemKey);
12
+ /**
13
+ * Re-evaluates a queued Event's trigger against a fresh GitHub snapshot of its Item. Returns
14
+ * `item-gone` if the Item no longer exists, and `matches` on any other failure or after five
15
+ * seconds.
16
+ */
17
+ export const triggerConditionLayer = Layer.effect(TriggerCondition, Effect.gen(function* () {
18
+ const github = yield* GitHubPolling;
19
+ const expressions = yield* ExpressionEngine;
20
+ const instances = yield* CurrentInstance;
21
+ const evaluate = Effect.fn("TriggerCondition.evaluate")(function* (submission) {
22
+ const fields = {
23
+ loop: submission.loop,
24
+ repository: submission.repository,
25
+ itemKey: submission.itemKey,
26
+ };
27
+ const instance = yield* instances.get;
28
+ const loop = instance.loops.find(({ name }) => name === submission.loop);
29
+ if (loop === undefined) {
30
+ yield* Effect.logInfo("Queued Event belongs to a Loop that is no longer loaded", fields);
31
+ return "no-longer-matches";
32
+ }
33
+ if (loop.trigger.on === "schedule")
34
+ return "matches";
35
+ const repository = instance.config.repos.find(({ name }) => canonicalRepositoryName(name) === canonicalRepositoryName(submission.repository));
36
+ if (repository === undefined || !matchesSelector(loop.selector, repository)) {
37
+ yield* Effect.logInfo("Queued Event's repository is no longer watched by its Loop", {
38
+ ...fields,
39
+ managed: repository !== undefined,
40
+ });
41
+ return "no-longer-matches";
42
+ }
43
+ const item = decodeItemKey(submission.itemKey);
44
+ if (Option.isNone(item)) {
45
+ yield* Effect.logWarning("Queued Event's Item key is not a GitHub Item; opening as before", fields);
46
+ return "matches";
47
+ }
48
+ const [, , number] = item.value;
49
+ const changed = loop.trigger.on === "pr"
50
+ ? new ChangedPullRequest({ number, updatedAt: submission.event.receivedAt })
51
+ : new ChangedIssue({ number, updatedAt: submission.event.receivedAt });
52
+ const snapshot = yield* github.snapshot(repository.name, changed);
53
+ const holds = yield* expressions.evaluateBoolean(loop.trigger.if, environmentFor(loop.trigger.on), { repo: repositoryContext(repository), item: snapshot.payload });
54
+ yield* Effect.logInfo("Queued Event re-evaluated against the Item's current state", {
55
+ ...fields,
56
+ item: number,
57
+ contentHash: snapshot.contentHash,
58
+ holds,
59
+ });
60
+ return holds ? "matches" : "no-longer-matches";
61
+ });
62
+ const recheck = Effect.fn("TriggerCondition.recheck")(function* (submission) {
63
+ yield* Effect.annotateCurrentSpan({
64
+ loop: submission.loop,
65
+ repository: submission.repository,
66
+ itemKey: submission.itemKey,
67
+ });
68
+ // Bound the whole re-check so a stalled read cannot retain the closed
69
+ // Run's continuation and block the Item or an operator retry.
70
+ return yield* evaluate(submission).pipe(Effect.timeout("5 seconds"));
71
+ }, (effect, submission) => effect.pipe(Effect.catchTag("GitHubItemNotFoundError", (error) => Effect.logInfo("Queued Event's Item is gone from GitHub; its Events are revoked", {
72
+ loop: submission.loop,
73
+ repository: submission.repository,
74
+ itemKey: submission.itemKey,
75
+ item: error.item,
76
+ errorTag: error._tag,
77
+ message: error.message,
78
+ }).pipe(Effect.as("item-gone"))), Effect.catch((error) => Effect.logWarning("Trigger re-check failed; opening the queued Event as before", {
79
+ loop: submission.loop,
80
+ repository: submission.repository,
81
+ itemKey: submission.itemKey,
82
+ ...(error._tag === "TimeoutError"
83
+ ? { errorTag: error._tag, message: "Trigger re-check exceeded five seconds" }
84
+ : repositoryFailureLogFields(error)),
85
+ }).pipe(Effect.as("matches")))));
86
+ return { recheck };
87
+ }));
88
+ //# sourceMappingURL=trigger-condition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-condition.js","sourceRoot":"","sources":["../src/trigger-condition.ts"],"names":[],"mappings":"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"}
@@ -6,12 +6,15 @@ import { Agent } from "@usine/core/agent";
6
6
  import { ModelId } from "@usine/core/agent/brain";
7
7
  import { AttemptTask } from "@usine/core/attempt";
8
8
  import { DedupKey } from "@usine/core/event";
9
- import { CycleGeneration } from "@usine/core/cycle-budget";
9
+ import { CycleGeneration, type CycleLimit } from "@usine/core/cycle-budget";
10
10
  import { ItemKey } from "@usine/core/item";
11
11
  import { RepositoryRevision } from "@usine/core/repository";
12
12
  import { Submission, type SubmissionResult } from "@usine/engine/engine";
13
13
  import { type DateTime, Effect, Option, Schema } from "effect";
14
- /** Issue and schedule Attempts resolve the remote's default branch at prepare time. */
14
+ /**
15
+ * The revision for issue and schedule Attempts, which resolve the remote's default branch at
16
+ * prepare time.
17
+ */
15
18
  export declare const DEFAULT_BRANCH_REVISION: string & import("effect/Brand").Brand<"RepositoryRevision">;
16
19
  export interface ResolvedLoop {
17
20
  readonly agent: Agent;
@@ -23,21 +26,16 @@ declare const LoopAgentResolutionError_base: Schema.Class<LoopAgentResolutionErr
23
26
  readonly agent: Schema.brand<Schema.String, "AgentName">;
24
27
  readonly message: Schema.NonEmptyString;
25
28
  }>, import("effect/Cause").YieldableError>;
26
- /** The agent a loaded loop names is no longer in the roster. */
29
+ /** The Agent of a loaded Loop is no longer in the roster. */
27
30
  export declare class LoopAgentResolutionError extends LoopAgentResolutionError_base {
28
31
  }
29
- /** Resolves one loop's roster agent and effective parent model. */
32
+ /** Resolves one Loop's roster Agent and effective parent model. */
30
33
  export declare const resolveTriggerLoop: (instance: LoadedInstance, loop: LoopFile) => Effect.Effect<{
31
34
  agent: Agent;
32
35
  loop: LoopFile;
33
36
  parentModel: Option.Option<string & import("effect/Brand").Brand<"ModelId">>;
34
37
  }, LoopAgentResolutionError, never>;
35
- /**
36
- * Resolves every loaded loop's agent. `InstanceFolder.load` already quarantines
37
- * loops that name unknown agents, so a miss here means a hand-assembled
38
- * instance drifted: the loop is skipped with a log each cycle and its siblings
39
- * keep running.
40
- */
38
+ /** Resolves every loaded Loop's Agent, skipping and logging each Loop whose Agent is missing. */
41
39
  export declare const resolveTriggerLoops: (instance: LoadedInstance) => Effect.Effect<ResolvedLoop[], never, never>;
42
40
  interface TriggerSubmissionOptions {
43
41
  readonly agent: Agent;
@@ -52,11 +50,16 @@ interface TriggerSubmissionOptions {
52
50
  readonly task: AttemptTask;
53
51
  readonly parentModel: Option.Option<ModelId>;
54
52
  }
55
- /** Builds the Submission every trigger stream hands to the engine. */
53
+ /** Returns the Loop's `max_cycles`, or `None` for a schedule Loop, whose Runs no budget counts. */
54
+ export declare const cycleLimitOf: (loop: LoopFile) => Option.Option<CycleLimit>;
55
+ /** Builds the Submission that every trigger stream sends to the engine. */
56
56
  export declare const triggerSubmission: (options: TriggerSubmissionOptions) => Submission;
57
- /** The log fields for a submission outcome: the run id for a claim, the reason for an ignore. */
57
+ /**
58
+ * Returns the log fields for a submission outcome: the Run ID for a claim or suppression, the
59
+ * reason for an ignore.
60
+ */
58
61
  export declare const submissionLogFields: (submission: SubmissionResult) => Record<string, string>;
59
- /** Log fields for a config failure met while triggering. */
62
+ /** Returns the log fields for a config failure during triggering. */
60
63
  export declare const configFileErrorLogFields: (error: ConfigFileError) => {
61
64
  configFile: string & import("effect/Brand").Brand<"InstancePath">;
62
65
  configStage: "expression" | "frontmatter" | "read" | "reference" | "schema" | "yaml";
@@ -1 +1 @@
1
- {"version":3,"file":"trigger-submission.d.ts","sourceRoot":"","sources":["../src/trigger-submission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAiC,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAS,QAAQ,EAAW,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAS,MAAM,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9E,uFAAuF;AACvF,eAAO,MAAM,uBAAuB,6DAAkC,CAAC;AAEvE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;CAC9C;;;;;;AAED,gEAAgE;AAChE,qBAAa,wBAAyB,SAAQ,6BAM5C;CAAG;AAEL,mEAAmE;AACnE,eAAO,MAAM,kBAAkB;;;;mCAoB7B,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,2EAkB9B,CAAC;AAEH,UAAU,wBAAwB;IAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;CAC9C;AAED,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,YAAa,wBAAwB,KAAG,UAoBlE,CAAC;AAEL,iGAAiG;AACjG,eAAO,MAAM,mBAAmB,eAAgB,gBAAgB,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAMpF,CAAC;AAEL,4DAA4D;AAC5D,eAAO,MAAM,wBAAwB,UAAW,eAAe;;;;;;;CAQ3D,CAAC"}
1
+ {"version":3,"file":"trigger-submission.d.ts","sourceRoot":"","sources":["../src/trigger-submission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAiC,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAS,QAAQ,EAAW,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAS,MAAM,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9E;;;GAGG;AACH,eAAO,MAAM,uBAAuB,6DAAkC,CAAC;AAEvE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;CAC9C;;;;;;AAED,6DAA6D;AAC7D,qBAAa,wBAAyB,SAAQ,6BAM5C;CAAG;AAEL,mEAAmE;AACnE,eAAO,MAAM,kBAAkB;;;;mCAoB7B,CAAC;AAEH,iGAAiG;AACjG,eAAO,MAAM,mBAAmB,2EAkB9B,CAAC;AAEH,UAAU,wBAAwB;IAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;CAC9C;AAED,mGAAmG;AACnG,eAAO,MAAM,YAAY,SAAU,QAAQ,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CACQ,CAAC;AAE/E,2EAA2E;AAC3E,eAAO,MAAM,iBAAiB,YAAa,wBAAwB,KAAG,UAoBlE,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,mBAAmB,eAAgB,gBAAgB,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAOpF,CAAC;AAEL,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,UAAW,eAAe;;;;;;;CAQ3D,CAAC"}
@@ -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,10 @@
1
+ import type { UsineConfig } from "@usine/config/factory";
2
+ import type { BrainSpec } from "@usine/core/agent/brain";
3
+ import type { InstanceDirectory } from "@usine/core/instance";
4
+ import { Layer } from "effect";
5
+ /**
6
+ * Provides the engine for the Workers in `config`: the SSH executor if every Worker is `ssh`,
7
+ * otherwise the local one. Fails at startup with `UnsupportedWorkerError` on any other mix.
8
+ */
9
+ export declare const workerEngineLayer: (instanceDirectory: InstanceDirectory, 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("./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>;
10
+ //# 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,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAC;AAI/C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,sBACT,iBAAiB,UAC5B,WAAW,UACX,aAAa,CAAC,SAAS,CAAC,kiDAoB/B,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { Effect, Layer, Option } from "effect";
2
+ import { layer as localLayer } from "./local.js";
3
+ import { layer as sshLayer, sshWorkerAddressesOf, sshWorkersOf } from "./ssh.js";
4
+ /**
5
+ * Provides the engine for the Workers in `config`: the SSH executor if every Worker is `ssh`,
6
+ * otherwise the local one. Fails at startup with `UnsupportedWorkerError` on any other mix.
7
+ */
8
+ export const workerEngineLayer = (instanceDirectory, config, brains) => Layer.unwrap(Effect.gen(function* () {
9
+ const ssh = sshWorkersOf(config);
10
+ const workers = config.workers.map(({ name }) => name).join(",");
11
+ if (ssh.length === config.workers.length) {
12
+ const addresses = yield* sshWorkerAddressesOf(config);
13
+ yield* Effect.logInfo("Running Attempts on SSH Workers", {
14
+ workers,
15
+ behindGateway: addresses
16
+ .filter(({ gateway }) => Option.isSome(gateway))
17
+ .map(({ name }) => name)
18
+ .join(","),
19
+ });
20
+ return sshLayer(instanceDirectory, config, brains, { workers: addresses });
21
+ }
22
+ yield* Effect.logInfo("Running Attempts with the local executor", { workers });
23
+ return localLayer(instanceDirectory, config, brains, {});
24
+ }));
25
+ //# sourceMappingURL=worker-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-engine.js","sourceRoot":"","sources":["../src/worker-engine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEjF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,iBAAoC,EACpC,MAAmB,EACnB,MAAgC,EAChC,EAAE,CACF,KAAK,CAAC,MAAM,CACV,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACtD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,EAAE;YACvD,OAAO;YACP,aAAa,EAAE,SAAS;iBACrB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;iBAC/C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;iBACvB,IAAI,CAAC,GAAG,CAAC;SACb,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,0CAA0C,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/E,OAAO,UAAU,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC,CACH,CAAC"}
@@ -0,0 +1,70 @@
1
+ import type { BrainSpec, Harness } from "@usine/core/agent/brain";
2
+ import type { WorkerName } from "@usine/core/worker";
3
+ import type { ExecutorError, WorkerCapability } from "@usine/executor";
4
+ import { Context, type DateTime, Effect, Layer, Option } from "effect";
5
+ /** A Worker's current slot usage in the scheduler. */
6
+ export interface WorkerSlots {
7
+ readonly worker: WorkerName;
8
+ /** The maximum concurrent Attempts, or zero after a reload removed the Worker. */
9
+ readonly capacity: number;
10
+ /** The number of Attempts with a slot, which can exceed `capacity` after a reload lowered it. */
11
+ readonly leased: number;
12
+ }
13
+ /** A passed preflight check. */
14
+ export interface PreflightPassed {
15
+ readonly _tag: "Passed";
16
+ readonly checkedAt: DateTime.Utc;
17
+ }
18
+ /** A preflight check that found a missing prerequisite or couldn't run. */
19
+ export interface PreflightFailed {
20
+ readonly _tag: "Failed";
21
+ readonly checkedAt: DateTime.Utc;
22
+ /** The missing prerequisite, or `None` if the check itself failed, such as a timed-out probe. */
23
+ readonly capability: Option.Option<WorkerCapability>;
24
+ /** The executor's summary for operators. */
25
+ readonly message: string;
26
+ }
27
+ /** The last outcome of one preflight check and when it ended. */
28
+ export type PreflightCheck = PreflightPassed | PreflightFailed;
29
+ /** The last preflight of one harness on a Worker. */
30
+ export interface HarnessPreflight {
31
+ readonly harness: Harness;
32
+ readonly check: PreflightCheck;
33
+ }
34
+ /**
35
+ * The last preflight of a Worker: its own prerequisites (machine, Git, memory, Gateway, and
36
+ * credentials) and each checked harness.
37
+ */
38
+ export interface WorkerPreflight {
39
+ readonly worker: WorkerName;
40
+ /** `None` until a preflight checked the Worker's own prerequisites. */
41
+ readonly prerequisites: Option.Option<PreflightCheck>;
42
+ /** In harness name order. */
43
+ readonly harnesses: ReadonlyArray<HarnessPreflight>;
44
+ }
45
+ /**
46
+ * Returns `previous` updated with one preflight of `brains`. An unavailable harness fails that
47
+ * harness and passes the ones checked before it; any other `failure` fails only the prerequisites.
48
+ */
49
+ export declare const recordPreflight: (previous: WorkerPreflight, brains: ReadonlyArray<BrainSpec>, checkedAt: DateTime.Utc, failure: Option.Option<ExecutorError>) => WorkerPreflight;
50
+ /** Returns the preflight record of a Worker that no preflight has checked. */
51
+ export declare const unchecked: (worker: WorkerName) => WorkerPreflight;
52
+ declare const WorkerStatus_base: Context.ServiceClass<WorkerStatus, "@usine/orchestrator/WorkerStatus", {
53
+ /**
54
+ * The slots of each Worker in `usine.yaml` order, then of each removed Worker until its last
55
+ * Attempt ends.
56
+ */
57
+ readonly slots: Effect.Effect<ReadonlyArray<WorkerSlots>>;
58
+ /**
59
+ * The last preflight of each Worker checked since startup, including a refused reload's
60
+ * preflight.
61
+ */
62
+ readonly preflights: Effect.Effect<ReadonlyArray<WorkerPreflight>>;
63
+ }>;
64
+ /** The scheduler's current slot usage and last preflight of each Worker. */
65
+ export declare class WorkerStatus extends WorkerStatus_base {
66
+ /** A status with no Workers and no preflights, as in setup mode. */
67
+ static readonly idle: Layer.Layer<WorkerStatus, never, never>;
68
+ }
69
+ export {};
70
+ //# 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":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAgB,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAiB,MAAM,QAAQ,CAAC;AAEpG,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iGAAiG;IACjG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC;CAClC;AAED,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC;IACjC,iGAAiG;IACjG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACrD,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,iEAAiE;AACjE,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,eAAe,CAAC;AAE/D,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACtD,6BAA6B;IAC7B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;CACrD;AAmBD;;;GAGG;AACH,eAAO,MAAM,eAAe,aAChB,eAAe,UACjB,aAAa,CAAC,SAAS,CAAC,aACrB,QAAQ,CAAC,GAAG,WACd,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KACpC,eAkCF,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,SAAS,WAAY,UAAU,KAAG,eAI7C,CAAC;;IAMC;;;OAGG;oBACa,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACzD;;;OAGG;yBACkB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;;AAbtE,4EAA4E;AAC5E,qBAAa,YAAa,SAAQ,iBAcK;IACrC,oEAAoE;IACpE,MAAM,CAAC,QAAQ,CAAC,IAAI,0CAGjB;CACJ"}
@@ -0,0 +1,55 @@
1
+ import { HarnessUnavailableError } from "@usine/core/agent/capability";
2
+ import { Array as Arr, Context, Effect, Layer, Option, Order, 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`. An unavailable harness fails that
11
+ * harness and passes the ones checked before it; any other `failure` fails only the prerequisites.
12
+ */
13
+ export const recordPreflight = (previous, brains, checkedAt, failure) => {
14
+ const harnesses = Arr.dedupe(brains.map(({ harness }) => harness));
15
+ if (Option.isNone(failure)) {
16
+ const passed = { _tag: "Passed", checkedAt };
17
+ return {
18
+ worker: previous.worker,
19
+ prerequisites: Option.some(passed),
20
+ harnesses: withHarnesses(previous.harnesses, harnesses, passed),
21
+ };
22
+ }
23
+ const error = failure.value;
24
+ const capability = error._tag === "WorkerCapabilityError" ? Option.some(error.capability) : Option.none();
25
+ const failed = { _tag: "Failed", checkedAt, capability, message: error.message };
26
+ if (error._tag === "WorkerCapabilityError" && isHarnessUnavailable(error.cause)) {
27
+ const unavailable = error.cause.harness;
28
+ const before = Arr.dedupe(Arr.takeWhile(brains, ({ harness }) => harness !== unavailable).map(({ harness }) => harness));
29
+ return {
30
+ worker: previous.worker,
31
+ prerequisites: previous.prerequisites,
32
+ harnesses: withHarnesses(withHarnesses(previous.harnesses, before, { _tag: "Passed", checkedAt }), [unavailable], failed),
33
+ };
34
+ }
35
+ return {
36
+ worker: previous.worker,
37
+ prerequisites: Option.some(failed),
38
+ harnesses: previous.harnesses,
39
+ };
40
+ };
41
+ /** Returns the preflight record of a Worker that no preflight has checked. */
42
+ export const unchecked = (worker) => ({
43
+ worker,
44
+ prerequisites: Option.none(),
45
+ harnesses: [],
46
+ });
47
+ /** The scheduler's current slot usage and last preflight of each Worker. */
48
+ export class WorkerStatus extends Context.Service()("@usine/orchestrator/WorkerStatus") {
49
+ /** A status with no Workers and no preflights, as in setup mode. */
50
+ static idle = Layer.succeed(WorkerStatus)({
51
+ slots: Effect.succeed([]),
52
+ preflights: Effect.succeed([]),
53
+ });
54
+ }
55
+ //# sourceMappingURL=worker-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-status.js","sourceRoot":"","sources":["../src/worker-status.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usine/orchestrator",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "The embeddable usine composition: the full engine as an Effect layer, startable in-process.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -9,7 +9,8 @@
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,
@@ -22,6 +23,10 @@
22
23
  "types": "./dist/credentials.d.ts",
23
24
  "default": "./dist/credentials.js"
24
25
  },
26
+ "./current-instance": {
27
+ "types": "./dist/current-instance/current-instance.d.ts",
28
+ "default": "./dist/current-instance/current-instance.js"
29
+ },
25
30
  "./exe-dev": {
26
31
  "types": "./dist/exe-dev.d.ts",
27
32
  "default": "./dist/exe-dev.js"
@@ -46,6 +51,10 @@
46
51
  "types": "./dist/polling-triggers.d.ts",
47
52
  "default": "./dist/polling-triggers.js"
48
53
  },
54
+ "./runtime": {
55
+ "types": "./dist/runtime.d.ts",
56
+ "default": "./dist/runtime.js"
57
+ },
49
58
  "./schedule-triggers": {
50
59
  "types": "./dist/schedule-triggers.d.ts",
51
60
  "default": "./dist/schedule-triggers.js"
@@ -54,6 +63,14 @@
54
63
  "types": "./dist/scheduler.d.ts",
55
64
  "default": "./dist/scheduler.js"
56
65
  },
66
+ "./ssh": {
67
+ "types": "./dist/ssh.d.ts",
68
+ "default": "./dist/ssh.js"
69
+ },
70
+ "./worker-status": {
71
+ "types": "./dist/worker-status.d.ts",
72
+ "default": "./dist/worker-status.js"
73
+ },
57
74
  "./operator": {
58
75
  "types": "./dist/operator/operator.d.ts",
59
76
  "default": "./dist/operator/operator.js"
@@ -68,19 +85,22 @@
68
85
  },
69
86
  "dependencies": {
70
87
  "@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"
88
+ "@effect/platform-node-shared": "4.0.0-rc.111",
89
+ "@usine/config": "0.3.0",
90
+ "@usine/executor": "0.3.0",
91
+ "@usine/expression": "0.3.0",
92
+ "@usine/github": "0.2.0",
93
+ "@usine/engine": "0.4.0",
94
+ "@usine/durable": "0.1.0",
95
+ "@usine/core": "0.4.0"
78
96
  },
79
97
  "devDependencies": {
80
98
  "@effect/vitest": "4.0.0-rc.111",
81
99
  "effect": "4.0.0-rc.111",
82
100
  "typescript": "7.0.2",
83
101
  "vitest": "4.1.11",
102
+ "@usine/agents": "0.4.0",
103
+ "@usine/gateway": "0.1.0",
84
104
  "@usine/tsconfig": "0.0.0"
85
105
  },
86
106
  "peerDependencies": {
@@ -95,6 +115,7 @@
95
115
  "test": "vitest run --exclude 'test/integration/**'",
96
116
  "test:integration": "vitest run test/integration/polling-triggers.test.ts",
97
117
  "test:integration:agent": "vitest run test/integration/agent-run.test.ts",
98
- "test:exe-dev": "vitest run test/integration/exe-dev-worker.test.ts"
118
+ "test:exe-dev": "vitest run test/integration/exe-dev-worker.test.ts",
119
+ "test:ssh": "vitest run --disable-console-intercept test/integration/ssh-worker.test.ts"
99
120
  }
100
121
  }