@usine/engine 0.2.0 → 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 (192) hide show
  1. package/README.md +109 -36
  2. package/dist/board-moves/board-moves.d.ts +20 -0
  3. package/dist/board-moves/board-moves.d.ts.map +1 -0
  4. package/dist/board-moves/board-moves.js +74 -0
  5. package/dist/board-moves/board-moves.js.map +1 -0
  6. package/dist/board-moves/model.d.ts +21 -0
  7. package/dist/board-moves/model.d.ts.map +1 -0
  8. package/dist/board-moves/model.js +22 -0
  9. package/dist/board-moves/model.js.map +1 -0
  10. package/dist/cursor/cursor.d.ts +2 -6
  11. package/dist/cursor/cursor.d.ts.map +1 -1
  12. package/dist/cursor/cursor.js +2 -6
  13. package/dist/cursor/cursor.js.map +1 -1
  14. package/dist/cycle-budget/cycle-budget.d.ts +6 -6
  15. package/dist/cycle-budget/cycle-budget.d.ts.map +1 -1
  16. package/dist/cycle-budget/cycle-budget.js +5 -5
  17. package/dist/cycle-budget/cycle-budget.js.map +1 -1
  18. package/dist/cycle-budget/model.d.ts +2 -2
  19. package/dist/cycle-budget/model.d.ts.map +1 -1
  20. package/dist/cycle-budget/model.js +2 -2
  21. package/dist/cycle-budget/model.js.map +1 -1
  22. package/dist/cycle-budget/queries.d.ts +1 -1
  23. package/dist/cycle-budget/queries.d.ts.map +1 -1
  24. package/dist/cycle-budget/queries.js +3 -3
  25. package/dist/cycle-budget/queries.js.map +1 -1
  26. package/dist/database/database.d.ts +1 -1
  27. package/dist/database/database.d.ts.map +1 -1
  28. package/dist/database/local-sqlite.d.ts +10 -8
  29. package/dist/database/local-sqlite.d.ts.map +1 -1
  30. package/dist/database/local-sqlite.js +16 -9
  31. package/dist/database/local-sqlite.js.map +1 -1
  32. package/dist/database/schema.d.ts +581 -22
  33. package/dist/database/schema.d.ts.map +1 -1
  34. package/dist/database/schema.js +104 -23
  35. package/dist/database/schema.js.map +1 -1
  36. package/dist/{workflow → engine}/admission.d.ts +2 -2
  37. package/dist/engine/admission.d.ts.map +1 -0
  38. package/dist/{workflow → engine}/admission.js +4 -4
  39. package/dist/engine/admission.js.map +1 -0
  40. package/dist/engine/checkout-recovery.d.ts +69 -0
  41. package/dist/engine/checkout-recovery.d.ts.map +1 -0
  42. package/dist/engine/checkout-recovery.js +181 -0
  43. package/dist/engine/checkout-recovery.js.map +1 -0
  44. package/dist/engine/engine.d.ts +57 -24
  45. package/dist/engine/engine.d.ts.map +1 -1
  46. package/dist/engine/engine.js +144 -120
  47. package/dist/engine/engine.js.map +1 -1
  48. package/dist/engine/error.d.ts +36 -9
  49. package/dist/engine/error.d.ts.map +1 -1
  50. package/dist/engine/error.js +35 -7
  51. package/dist/engine/error.js.map +1 -1
  52. package/dist/engine/lifecycle.d.ts +81 -28
  53. package/dist/engine/lifecycle.d.ts.map +1 -1
  54. package/dist/engine/lifecycle.js +83 -44
  55. package/dist/engine/lifecycle.js.map +1 -1
  56. package/dist/engine/retry.d.ts +16 -0
  57. package/dist/engine/retry.d.ts.map +1 -0
  58. package/dist/engine/retry.js +18 -0
  59. package/dist/engine/retry.js.map +1 -0
  60. package/dist/engine/run-again.d.ts +45 -0
  61. package/dist/engine/run-again.d.ts.map +1 -0
  62. package/dist/engine/run-again.js +56 -0
  63. package/dist/engine/run-again.js.map +1 -0
  64. package/dist/engine/run-driver.d.ts +54 -0
  65. package/dist/engine/run-driver.d.ts.map +1 -0
  66. package/dist/engine/run-driver.js +362 -0
  67. package/dist/engine/run-driver.js.map +1 -0
  68. package/dist/engine/shutdown.d.ts +3 -4
  69. package/dist/engine/shutdown.d.ts.map +1 -1
  70. package/dist/engine/shutdown.js +3 -4
  71. package/dist/engine/shutdown.js.map +1 -1
  72. package/dist/engine/submission.d.ts +31 -11
  73. package/dist/engine/submission.d.ts.map +1 -1
  74. package/dist/engine/submission.js +42 -12
  75. package/dist/engine/submission.js.map +1 -1
  76. package/dist/item-projection/item-projection.d.ts +12 -4
  77. package/dist/item-projection/item-projection.d.ts.map +1 -1
  78. package/dist/item-projection/item-projection.js +41 -6
  79. package/dist/item-projection/item-projection.js.map +1 -1
  80. package/dist/item-projection/model.d.ts +5 -1
  81. package/dist/item-projection/model.d.ts.map +1 -1
  82. package/dist/item-projection/model.js +6 -2
  83. package/dist/item-projection/model.js.map +1 -1
  84. package/dist/loop-control/loop-control.d.ts +5 -5
  85. package/dist/loop-control/loop-control.d.ts.map +1 -1
  86. package/dist/loop-control/loop-control.js +4 -4
  87. package/dist/loop-control/loop-control.js.map +1 -1
  88. package/dist/loop-control/model.d.ts +1 -1
  89. package/dist/loop-control/model.d.ts.map +1 -1
  90. package/dist/loop-control/model.js +1 -1
  91. package/dist/loop-control/model.js.map +1 -1
  92. package/dist/repository-label-projection/model.d.ts +2 -2
  93. package/dist/repository-label-projection/model.d.ts.map +1 -1
  94. package/dist/repository-label-projection/model.js +2 -2
  95. package/dist/repository-label-projection/model.js.map +1 -1
  96. package/dist/repository-label-projection/repository-label-projection.d.ts +1 -1
  97. package/dist/repository-label-projection/repository-label-projection.d.ts.map +1 -1
  98. package/dist/repository-label-projection/repository-label-projection.js +1 -1
  99. package/dist/repository-label-projection/repository-label-projection.js.map +1 -1
  100. package/dist/run-reader/model.d.ts +62 -4
  101. package/dist/run-reader/model.d.ts.map +1 -1
  102. package/dist/run-reader/model.js +66 -7
  103. package/dist/run-reader/model.js.map +1 -1
  104. package/dist/run-reader/run-reader.d.ts +19 -9
  105. package/dist/run-reader/run-reader.d.ts.map +1 -1
  106. package/dist/run-reader/run-reader.js +23 -7
  107. package/dist/run-reader/run-reader.js.map +1 -1
  108. package/dist/step-executor.d.ts +65 -9
  109. package/dist/step-executor.d.ts.map +1 -1
  110. package/dist/step-executor.js +10 -2
  111. package/dist/step-executor.js.map +1 -1
  112. package/dist/store/attempt-windows.d.ts +8 -0
  113. package/dist/store/attempt-windows.d.ts.map +1 -0
  114. package/dist/store/attempt-windows.js +53 -0
  115. package/dist/store/attempt-windows.js.map +1 -0
  116. package/dist/store/codec.d.ts +381 -42
  117. package/dist/store/codec.d.ts.map +1 -1
  118. package/dist/store/codec.js +59 -15
  119. package/dist/store/codec.js.map +1 -1
  120. package/dist/store/leftovers.d.ts +10 -0
  121. package/dist/store/leftovers.d.ts.map +1 -0
  122. package/dist/store/leftovers.js +43 -0
  123. package/dist/store/leftovers.js.map +1 -0
  124. package/dist/store/loop-items.d.ts +16 -0
  125. package/dist/store/loop-items.d.ts.map +1 -0
  126. package/dist/store/loop-items.js +185 -0
  127. package/dist/store/loop-items.js.map +1 -0
  128. package/dist/store/queries.d.ts +345 -37
  129. package/dist/store/queries.d.ts.map +1 -1
  130. package/dist/store/queries.js +333 -160
  131. package/dist/store/queries.js.map +1 -1
  132. package/dist/store/store.d.ts +91 -54
  133. package/dist/store/store.d.ts.map +1 -1
  134. package/dist/store/store.js +481 -190
  135. package/dist/store/store.js.map +1 -1
  136. package/dist/store/transcript.d.ts +9 -0
  137. package/dist/store/transcript.d.ts.map +1 -0
  138. package/dist/store/transcript.js +90 -0
  139. package/dist/store/transcript.js.map +1 -0
  140. package/dist/transcript.d.ts +41 -20
  141. package/dist/transcript.d.ts.map +1 -1
  142. package/dist/transcript.js +45 -25
  143. package/dist/transcript.js.map +1 -1
  144. package/dist/trigger-condition.d.ts +23 -0
  145. package/dist/trigger-condition.d.ts.map +1 -0
  146. package/dist/trigger-condition.js +8 -0
  147. package/dist/trigger-condition.js.map +1 -0
  148. package/drizzle/20260912111855_operator_intervention/migration.sql +42 -0
  149. package/drizzle/20260912111855_operator_intervention/snapshot.json +1461 -0
  150. package/drizzle/20260917071139_resolve_run_failure/migration.sql +1 -0
  151. package/drizzle/20260917071139_resolve_run_failure/snapshot.json +1471 -0
  152. package/drizzle/20260918032643_attempt_salvage/migration.sql +1 -0
  153. package/drizzle/20260918032643_attempt_salvage/snapshot.json +1481 -0
  154. package/drizzle/20261011153856_drop_workflow_tables/migration.sql +4 -0
  155. package/drizzle/20261011153856_drop_workflow_tables/snapshot.json +1433 -0
  156. package/drizzle/20261017155043_attempt_salvage_check/migration.sql +41 -0
  157. package/drizzle/20261017155043_attempt_salvage_check/snapshot.json +1421 -0
  158. package/drizzle/20261018162700_discard_attempt_leftovers/migration.sql +1 -0
  159. package/drizzle/20261018162700_discard_attempt_leftovers/snapshot.json +1431 -0
  160. package/drizzle/20261018172605_loop_items_and_reopenings/migration.sql +15 -0
  161. package/drizzle/20261018172605_loop_items_and_reopenings/snapshot.json +1574 -0
  162. package/drizzle/20261018180339_attempt_ended_at/migration.sql +1 -0
  163. package/drizzle/20261018180339_attempt_ended_at/snapshot.json +1584 -0
  164. package/drizzle/20261019104043_run_approval_source/migration.sql +15 -0
  165. package/drizzle/20261019104043_run_approval_source/snapshot.json +1610 -0
  166. package/drizzle/20261019133538_board_moves/migration.sql +14 -0
  167. package/drizzle/20261019133538_board_moves/snapshot.json +1731 -0
  168. package/drizzle/20261019170538_item_projection_gone/migration.sql +1 -0
  169. package/drizzle/20261019170538_item_projection_gone/snapshot.json +1741 -0
  170. package/drizzle/20261019180649_run_again_events/migration.sql +7 -0
  171. package/drizzle/20261019180649_run_again_events/snapshot.json +1804 -0
  172. package/drizzle/20261019185008_trigger_event_permissions/migration.sql +1 -0
  173. package/drizzle/20261019185008_trigger_event_permissions/snapshot.json +1814 -0
  174. package/drizzle/20261020103746_attempt_start/migration.sql +5 -0
  175. package/drizzle/20261020103746_attempt_start/snapshot.json +1844 -0
  176. package/drizzle/20261020125211_attempt_comments/migration.sql +1 -0
  177. package/drizzle/20261020125211_attempt_comments/snapshot.json +1854 -0
  178. package/drizzle/20261020191320_run_closed_at/migration.sql +6 -0
  179. package/drizzle/20261020191320_run_closed_at/snapshot.json +1864 -0
  180. package/drizzle/20261023091428_rename_loop_item_hold_to_suppression/migration.sql +2 -0
  181. package/drizzle/20261023091428_rename_loop_item_hold_to_suppression/snapshot.json +1867 -0
  182. package/package.json +15 -5
  183. package/dist/workflow/admission.d.ts.map +0 -1
  184. package/dist/workflow/admission.js.map +0 -1
  185. package/dist/workflow/command.d.ts +0 -13
  186. package/dist/workflow/command.d.ts.map +0 -1
  187. package/dist/workflow/command.js +0 -17
  188. package/dist/workflow/command.js.map +0 -1
  189. package/dist/workflow/workflow.d.ts +0 -18
  190. package/dist/workflow/workflow.d.ts.map +0 -1
  191. package/dist/workflow/workflow.js +0 -108
  192. package/dist/workflow/workflow.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/repository-label-projection/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAC7C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC,CAC9E,CAAC;AAEF,yGAAyG;AACzG,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CACrD,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC,CAC3F,CAAC;AAEF,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,KAAK,CAAkB,+BAA+B,CAAC,CACjG;IACE,IAAI,EAAE,mBAAmB;IACzB,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;CACpD,CACF;CAAG;AAEJ,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CACxC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAC1E,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAC3C,CAAC;AACF,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAE/E,6EAA6E;AAC7E,MAAM,OAAO,yBAA0B,SAAQ,MAAM,CAAC,KAAK,CACzD,yCAAyC,CAC1C,CAAC;IACA,UAAU,EAAE,cAAc;IAC1B,MAAM,EAAE,gBAAgB;CACzB,CAAC;CAAG"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/repository-label-projection/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAC7C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC,CAC9E,CAAC;AAEF,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CACrD,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC,CAC3F,CAAC;AAEF,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,KAAK,CAAkB,+BAA+B,CAAC,CACjG;IACE,IAAI,EAAE,mBAAmB;IACzB,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;CACpD,CACF;CAAG;AAEJ,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CACxC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAC1E,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAC3C,CAAC;AACF,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAE/E,gFAAgF;AAChF,MAAM,OAAO,yBAA0B,SAAQ,MAAM,CAAC,KAAK,CACzD,yCAAyC,CAC1C,CAAC;IACA,UAAU,EAAE,cAAc;IAC1B,MAAM,EAAE,gBAAgB;CACzB,CAAC;CAAG"}
@@ -10,7 +10,7 @@ export declare class RepositoryLabelProjectionReader extends RepositoryLabelProj
10
10
  static readonly layer: Layer.Layer<RepositoryLabelProjectionReader, never, RunDatabase>;
11
11
  }
12
12
  declare const RepositoryLabelProjectionWriter_base: Context.ServiceClass<RepositoryLabelProjectionWriter, "@usine/engine/RepositoryLabelProjectionWriter", {
13
- /** `true` means the durable projection changed. */
13
+ /** Replaces the stored catalog and returns whether it changed. */
14
14
  readonly replace: (projection: RepositoryLabelProjection) => Effect.Effect<boolean, EnginePersistenceError>;
15
15
  }>;
16
16
  export declare class RepositoryLabelProjectionWriter extends RepositoryLabelProjectionWriter_base {
@@ -1 +1 @@
1
- {"version":3,"file":"repository-label-projection.d.ts","sourceRoot":"","sources":["../../src/repository-label-projection/repository-label-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAmB,yBAAyB,EAAE,MAAM,YAAY,CAAC;;kBA0FtD,CACZ,UAAU,EAAE,cAAc,KACvB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE,sBAAsB,CAAC;;AALxF,qBAAa,+BAAgC,SAAQ,oCAOD;IAClD,MAAM,CAAC,QAAQ,CAAC,KAAK,mEAA6D;CACnF;;IAKG,mDAAmD;sBACjC,CAChB,UAAU,EAAE,yBAAyB,KAClC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC;;AANvD,qBAAa,+BAAgC,SAAQ,oCAQD;IAClD,MAAM,CAAC,QAAQ,CAAC,KAAK,mEAA6D;CACnF;AAED,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"repository-label-projection.d.ts","sourceRoot":"","sources":["../../src/repository-label-projection/repository-label-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAmB,yBAAyB,EAAE,MAAM,YAAY,CAAC;;kBA0FtD,CACZ,UAAU,EAAE,cAAc,KACvB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE,sBAAsB,CAAC;;AALxF,qBAAa,+BAAgC,SAAQ,oCAOD;IAClD,MAAM,CAAC,QAAQ,CAAC,KAAK,mEAA6D;CACnF;;IAKG,kEAAkE;sBAChD,CAChB,UAAU,EAAE,yBAAyB,KAClC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC;;AANvD,qBAAa,+BAAgC,SAAQ,oCAQD;IAClD,MAAM,CAAC,QAAQ,CAAC,KAAK,mEAA6D;CACnF;AAED,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC"}
@@ -5,7 +5,7 @@ import { RunDatabase } from "../database/database.js";
5
5
  import { repositoryLabelProjections } from "../database/schema.js";
6
6
  import { EnginePersistenceError } from "../engine/error.js";
7
7
  import { RepositoryLabel, RepositoryLabelProjection } from "./model.js";
8
- /** Rows written before colors were kept are bare names and read as colorless labels. */
8
+ /** Older rows store bare names, read as labels without a color. */
9
9
  const LegacyLabelNames = Schema.Array(Schema.String);
10
10
  const isLegacyLabelNames = Schema.is(LegacyLabelNames);
11
11
  const RepositoryLabelProjectionRow = Schema.Struct({
@@ -1 +1 @@
1
- {"version":3,"file":"repository-label-projection.js","sourceRoot":"","sources":["../../src/repository-label-projection/repository-label-projection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository-label-projection.js","sourceRoot":"","sources":["../../src/repository-label-projection/repository-label-projection.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ import { Agent } from "@usine/core/agent";
2
2
  import { Attempt } from "@usine/core/attempt";
3
3
  import { Event } from "@usine/core/event";
4
4
  import { Run } from "@usine/core/run";
5
+ import { RunAgain } from "@usine/core/run/again";
6
+ import { RunApproval } from "@usine/core/run/approval";
5
7
  import { Step } from "@usine/core/step";
6
8
  import { Schema } from "effect";
7
9
  import { TranscriptEntry } from "../transcript.ts";
@@ -11,20 +13,40 @@ declare const RunSnapshot_base: Schema.Class<RunSnapshot, Schema.Struct<{
11
13
  readonly run: typeof Run;
12
14
  readonly step: typeof Step;
13
15
  readonly attempts: Schema.$Array<typeof Attempt>;
16
+ /** The failed Attempt that the operator marked as resolved; its outcome is unchanged. */
17
+ readonly resolvedFailureAttemptId: Schema.Option<Schema.brand<Schema.NonEmptyString, "AttemptId">>;
18
+ /**
19
+ * The time the Run last closed, or `None` while open. For older Runs, the last Attempt's end or
20
+ * start, or the Run's open time.
21
+ */
22
+ readonly closedAt: Schema.Option<Schema.DateTimeUtc>;
23
+ /** The approval the Run consumed, or `None` before approval and for Loops with `approval: none`. */
24
+ readonly approval: Schema.Option<typeof RunApproval>;
25
+ /** The run-again origin, or `None` for a Run opened by its trigger. */
26
+ readonly runAgain: Schema.Option<typeof RunAgain>;
14
27
  readonly repository: Schema.brand<Schema.String, "RepositoryName">;
15
28
  readonly revision: Schema.brand<Schema.String, "RepositoryRevision">;
16
29
  readonly task: Schema.brand<Schema.String, "AttemptTask">;
17
30
  readonly agent: typeof Agent;
18
31
  readonly parentModel: Schema.Option<Schema.brand<Schema.String, "ModelId">>;
32
+ /** The repository access of the Run's Attempts, from the Loop at match time. */
33
+ readonly permissions: Schema.Literals<readonly ["write", "read"]>;
19
34
  }>, {}>;
20
- /** The full durable view of one Run. */
35
+ /** The full durable view of a Run. */
21
36
  export declare class RunSnapshot extends RunSnapshot_base {
22
37
  }
38
+ declare const RunEvent_base: Schema.Class<RunEvent, Schema.Struct<{
39
+ readonly runId: Schema.brand<Schema.NonEmptyString, "RunId">;
40
+ readonly event: typeof Event;
41
+ }>, {}>;
42
+ /** A Run and the Event it was opened for; the payload is the Item as the trigger saw it. */
43
+ export declare class RunEvent extends RunEvent_base {
44
+ }
23
45
  declare const RunEvidence_base: Schema.Class<RunEvidence, Schema.Struct<{
24
46
  readonly snapshot: typeof RunSnapshot;
25
47
  readonly transcript: Schema.$Array<typeof TranscriptEntry>;
26
48
  }>, {}>;
27
- /** A Run snapshot and all its saved transcript entries from the same database transaction. */
49
+ /** A Run snapshot and all its transcript entries, read in one transaction. */
28
50
  export declare class RunEvidence extends RunEvidence_base {
29
51
  }
30
52
  declare const RunSummary_base: Schema.Class<RunSummary, Schema.Struct<{
@@ -32,14 +54,50 @@ declare const RunSummary_base: Schema.Class<RunSummary, Schema.Struct<{
32
54
  readonly run: typeof Run;
33
55
  readonly step: typeof Step;
34
56
  readonly attempts: Schema.$Array<typeof Attempt>;
57
+ /** The failed Attempt that the operator marked as resolved; its outcome is unchanged. */
58
+ readonly resolvedFailureAttemptId: Schema.Option<Schema.brand<Schema.NonEmptyString, "AttemptId">>;
59
+ /**
60
+ * The time the Run last closed, or `None` while open. For older Runs, the last Attempt's end or
61
+ * start, or the Run's open time.
62
+ */
63
+ readonly closedAt: Schema.Option<Schema.DateTimeUtc>;
64
+ /** The approval the Run consumed, or `None` before approval and for Loops with `approval: none`. */
65
+ readonly approval: Schema.Option<typeof RunApproval>;
66
+ /** The run-again origin, or `None` for a Run opened by its trigger. */
67
+ readonly runAgain: Schema.Option<typeof RunAgain>;
35
68
  readonly repository: Schema.brand<Schema.String, "RepositoryName">;
36
69
  readonly task: Schema.brand<Schema.String, "AttemptTask">;
37
70
  readonly agent: typeof Agent;
38
71
  }>, {}>;
39
- /** The lighter view used when listing Runs for operators. */
72
+ /** The Run view used in operator Run lists. */
40
73
  export declare class RunSummary extends RunSummary_base {
41
74
  }
42
- /** Monotonic version of the operator projection. */
75
+ declare const WorkerAttempts_base: Schema.Class<WorkerAttempts, Schema.Struct<{
76
+ readonly worker: Schema.brand<Schema.String, "WorkerName">;
77
+ readonly attempts: Schema.Int;
78
+ /** The number of `attempts` without a recorded outcome. */
79
+ readonly running: Schema.Int;
80
+ }>, {}>;
81
+ /** The number of Attempts on a Worker that startup reconciliation still visits, excluding discarded leftovers. */
82
+ export declare class WorkerAttempts extends WorkerAttempts_base {
83
+ }
84
+ declare const LoopSighting_base: Schema.Class<LoopSighting, Schema.Struct<{
85
+ readonly loop: Schema.brand<Schema.NonEmptyString, "LoopName">;
86
+ readonly itemKey: Schema.brand<Schema.NonEmptyString, "ItemKey">;
87
+ /**
88
+ * The last matching Event, or the newest reopening or run-again Event for it; `None` after a
89
+ * non-matching sighting.
90
+ */
91
+ readonly event: Schema.Option<Schema.brand<Schema.NonEmptyString, "EventId">>;
92
+ /** The Run of `event`, or `None` while it waits or after it was ignored. */
93
+ readonly run: Schema.Option<Schema.brand<Schema.NonEmptyString, "RunId">>;
94
+ /** The Run that suppresses the Item after a question or blocker, or `None`. */
95
+ readonly suppressedBy: Schema.Option<Schema.brand<Schema.NonEmptyString, "RunId">>;
96
+ }>, {}>;
97
+ /** A Loop's last sighting of an Item and its result (ADR 0007, ADR 0017). */
98
+ export declare class LoopSighting extends LoopSighting_base {
99
+ }
100
+ /** The monotonic version of the operator projection. */
43
101
  export declare const ProjectionRevision: Schema.brand<Schema.Int, "ProjectionRevision">;
44
102
  export type ProjectionRevision = typeof ProjectionRevision.Type;
45
103
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/run-reader/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;;;;;;;;;;;;;AAEnD,wCAAwC;AACxC,qBAAa,WAAY,SAAQ,gBAW/B;CAAG;;;;;AAEL,8FAA8F;AAC9F,qBAAa,WAAY,SAAQ,gBAG/B;CAAG;;;;;;;;;;AAEL,6DAA6D;AAC7D,qBAAa,UAAW,SAAQ,eAQ9B;CAAG;AAEL,oDAAoD;AACpD,eAAO,MAAM,kBAAkB,gDAE9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAC"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/run-reader/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,OAAO,EAA0B,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAW,MAAM,mBAAmB,CAAC;AAInD,OAAO,EAAE,GAAG,EAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;;;;;;;IASjD,yFAAyF;;IAEzF;;;OAGG;;IAEH,oGAAoG;;IAEpG,uEAAuE;;;;;;;IAOvE,gFAAgF;;;AAvBlF,sCAAsC;AACtC,qBAAa,WAAY,SAAQ,gBAwB/B;CAAG;;;;;AAEL,4FAA4F;AAC5F,qBAAa,QAAS,SAAQ,aAG5B;CAAG;;;;;AAEL,8EAA8E;AAC9E,qBAAa,WAAY,SAAQ,gBAG/B;CAAG;;;;;;IAQH,yFAAyF;;IAEzF;;;OAGG;;IAEH,oGAAoG;;IAEpG,uEAAuE;;;;;;AAfzE,+CAA+C;AAC/C,qBAAa,UAAW,SAAQ,eAmB9B;CAAG;;;;IAOD,2DAA2D;;;AAL/D,kHAAkH;AAClH,qBAAa,cAAe,SAAQ,mBAWnC;CAAG;;;;IAMF;;;OAGG;;IAEH,4EAA4E;;IAE5E,+EAA+E;;;AAXjF,6EAA6E;AAC7E,qBAAa,YAAa,SAAQ,iBAYhC;CAAG;AAEL,wDAAwD;AACxD,eAAO,MAAM,kBAAkB,gDAE9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAC"}
@@ -1,44 +1,103 @@
1
1
  import { Agent } from "@usine/core/agent";
2
2
  import { ModelId } from "@usine/core/agent/brain";
3
- import { Attempt, AttemptTask } from "@usine/core/attempt";
4
- import { Event } from "@usine/core/event";
3
+ import { Attempt, AttemptId, AttemptTask } from "@usine/core/attempt";
4
+ import { Event, EventId } from "@usine/core/event";
5
5
  import { ItemKey } from "@usine/core/item";
6
+ import { LoopName, LoopPermissions } from "@usine/core/loop";
6
7
  import { RepositoryName, RepositoryRevision } from "@usine/core/repository";
7
- import { Run } from "@usine/core/run";
8
+ import { Run, RunId } from "@usine/core/run";
9
+ import { RunAgain } from "@usine/core/run/again";
10
+ import { RunApproval } from "@usine/core/run/approval";
8
11
  import { Step } from "@usine/core/step";
12
+ import { WorkerName } from "@usine/core/worker";
9
13
  import { Schema } from "effect";
10
14
  import { TranscriptEntry } from "../transcript.js";
11
- /** The full durable view of one Run. */
15
+ /** The full durable view of a Run. */
12
16
  export class RunSnapshot extends Schema.Class("@usine/engine/RunSnapshot")({
13
17
  event: Event,
14
18
  itemKey: ItemKey,
15
19
  run: Run,
16
20
  step: Step,
17
21
  attempts: Schema.Array(Attempt),
22
+ /** The failed Attempt that the operator marked as resolved; its outcome is unchanged. */
23
+ resolvedFailureAttemptId: Schema.Option(AttemptId),
24
+ /**
25
+ * The time the Run last closed, or `None` while open. For older Runs, the last Attempt's end or
26
+ * start, or the Run's open time.
27
+ */
28
+ closedAt: Schema.Option(Schema.DateTimeUtc),
29
+ /** The approval the Run consumed, or `None` before approval and for Loops with `approval: none`. */
30
+ approval: Schema.Option(RunApproval),
31
+ /** The run-again origin, or `None` for a Run opened by its trigger. */
32
+ runAgain: Schema.Option(RunAgain),
18
33
  repository: RepositoryName,
19
34
  revision: RepositoryRevision,
20
35
  task: AttemptTask,
21
36
  agent: Agent,
22
37
  parentModel: Schema.Option(ModelId),
38
+ /** The repository access of the Run's Attempts, from the Loop at match time. */
39
+ permissions: LoopPermissions,
23
40
  }) {
24
41
  }
25
- /** A Run snapshot and all its saved transcript entries from the same database transaction. */
42
+ /** A Run and the Event it was opened for; the payload is the Item as the trigger saw it. */
43
+ export class RunEvent extends Schema.Class("@usine/engine/RunEvent")({
44
+ runId: RunId,
45
+ event: Event,
46
+ }) {
47
+ }
48
+ /** A Run snapshot and all its transcript entries, read in one transaction. */
26
49
  export class RunEvidence extends Schema.Class("@usine/engine/RunEvidence")({
27
50
  snapshot: RunSnapshot,
28
51
  transcript: Schema.Array(TranscriptEntry),
29
52
  }) {
30
53
  }
31
- /** The lighter view used when listing Runs for operators. */
54
+ /** The Run view used in operator Run lists. */
32
55
  export class RunSummary extends Schema.Class("@usine/engine/RunSummary")({
33
56
  itemKey: ItemKey,
34
57
  run: Run,
35
58
  step: Step,
36
59
  attempts: Schema.Array(Attempt),
60
+ /** The failed Attempt that the operator marked as resolved; its outcome is unchanged. */
61
+ resolvedFailureAttemptId: Schema.Option(AttemptId),
62
+ /**
63
+ * The time the Run last closed, or `None` while open. For older Runs, the last Attempt's end or
64
+ * start, or the Run's open time.
65
+ */
66
+ closedAt: Schema.Option(Schema.DateTimeUtc),
67
+ /** The approval the Run consumed, or `None` before approval and for Loops with `approval: none`. */
68
+ approval: Schema.Option(RunApproval),
69
+ /** The run-again origin, or `None` for a Run opened by its trigger. */
70
+ runAgain: Schema.Option(RunAgain),
37
71
  repository: RepositoryName,
38
72
  task: AttemptTask,
39
73
  agent: Agent,
40
74
  }) {
41
75
  }
42
- /** Monotonic version of the operator projection. */
76
+ /** The number of Attempts on a Worker that startup reconciliation still visits, excluding discarded leftovers. */
77
+ export class WorkerAttempts extends Schema.Class("@usine/engine/WorkerAttempts")(Schema.Struct({
78
+ worker: WorkerName,
79
+ attempts: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),
80
+ /** The number of `attempts` without a recorded outcome. */
81
+ running: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
82
+ }).check(Schema.makeFilter(({ attempts, running }) => running <= attempts, {
83
+ message: "Expected no more open attempts than attempts",
84
+ }))) {
85
+ }
86
+ /** A Loop's last sighting of an Item and its result (ADR 0007, ADR 0017). */
87
+ export class LoopSighting extends Schema.Class("@usine/engine/LoopSighting")({
88
+ loop: LoopName,
89
+ itemKey: ItemKey,
90
+ /**
91
+ * The last matching Event, or the newest reopening or run-again Event for it; `None` after a
92
+ * non-matching sighting.
93
+ */
94
+ event: Schema.Option(EventId),
95
+ /** The Run of `event`, or `None` while it waits or after it was ignored. */
96
+ run: Schema.Option(RunId),
97
+ /** The Run that suppresses the Item after a question or blocker, or `None`. */
98
+ suppressedBy: Schema.Option(RunId),
99
+ }) {
100
+ }
101
+ /** The monotonic version of the operator projection. */
43
102
  export const ProjectionRevision = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)).pipe(Schema.brand("ProjectionRevision"));
44
103
  //# sourceMappingURL=model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/run-reader/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,wCAAwC;AACxC,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,KAAK,CAAc,2BAA2B,CAAC,CAAC;IACtF,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,OAAO;IAChB,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;IAC/B,UAAU,EAAE,cAAc;IAC1B,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;CACpC,CAAC;CAAG;AAEL,8FAA8F;AAC9F,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,KAAK,CAAc,2BAA2B,CAAC,CAAC;IACtF,QAAQ,EAAE,WAAW;IACrB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;CAC1C,CAAC;CAAG;AAEL,6DAA6D;AAC7D,MAAM,OAAO,UAAW,SAAQ,MAAM,CAAC,KAAK,CAAa,0BAA0B,CAAC,CAAC;IACnF,OAAO,EAAE,OAAO;IAChB,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;IAC/B,UAAU,EAAE,cAAc;IAC1B,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,KAAK;CACb,CAAC;CAAG;AAEL,oDAAoD;AACpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACvF,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CACnC,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/run-reader/model.ts"],"names":[],"mappings":"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"}
@@ -2,28 +2,38 @@ import { Context, Effect, Layer, Option } from "effect";
2
2
  import { RunId } from "@usine/core/run";
3
3
  import { ItemKey } from "@usine/core/item";
4
4
  import { RunDatabase } from "../database/database.ts";
5
- import { ProjectionRevision, RunEvidence, RunSnapshot, RunSummary } from "./model.ts";
5
+ import { type LoopSighting, ProjectionRevision, type RunEvent, RunEvidence, RunSnapshot, RunSummary, type WorkerAttempts } from "./model.ts";
6
6
  import { TranscriptEntry, TranscriptQuery } from "../transcript.ts";
7
7
  import type { RunStoreError } from "../engine/error.ts";
8
8
  declare const RunReader_base: Context.ServiceClass<RunReader, "@usine/engine/RunReader", {
9
- /** Reads a Run's current state, effective task and Agent, Step result, and Attempt history. */
9
+ /** Returns the Run's state, effective task and Agent, Step result, and Attempt history. */
10
10
  readonly inspect: (runId: RunId) => Effect.Effect<RunSnapshot, RunStoreError>;
11
- /** Reads one consistent Run snapshot and every saved transcript entry, in append order without a page limit. */
11
+ /** Returns a Run snapshot and all its transcript entries, in append order, from one transaction. */
12
12
  readonly evidence: (runId: RunId) => Effect.Effect<RunEvidence, RunStoreError>;
13
- /** Every open Run plus the newest `closedLimit` settled ones, newest first. */
13
+ /** Returns every open Run plus the newest `closedLimit` closed ones, newest first. */
14
14
  readonly list: (options: {
15
15
  readonly closedLimit: number;
16
16
  }) => Effect.Effect<ReadonlyArray<RunSummary>, RunStoreError>;
17
- /** Every saved Run for the supplied Items, newest first, including all their Attempts. */
17
+ /** Returns the `limit` most recently closed Runs, by close time, newest first. */
18
+ readonly closed: (options: {
19
+ readonly limit: number;
20
+ }) => Effect.Effect<ReadonlyArray<RunSummary>, RunStoreError>;
21
+ /** Returns every Run for `itemKeys`, newest first, with all their Attempts. */
18
22
  readonly forItems: (itemKeys: ReadonlyArray<ItemKey>) => Effect.Effect<ReadonlyArray<RunSummary>, RunStoreError>;
19
- /** `None` means the invalidation row is absent: treat every cached projection as stale. */
23
+ /** Returns the Event each existing Run in `runIds` was opened for, once per Run, in no particular order. */
24
+ readonly events: (runIds: ReadonlyArray<RunId>) => Effect.Effect<ReadonlyArray<RunEvent>, RunStoreError>;
25
+ /** Returns the projection revision. If the row is absent, returns `None`, and every cached projection is stale. */
20
26
  readonly revision: () => Effect.Effect<Option.Option<ProjectionRevision>, RunStoreError>;
21
- /** Reads the requested portion of one Attempt's saved transcript in append order. */
27
+ /** Returns the requested part of an Attempt's transcript, in append order. */
22
28
  readonly transcript: (query: TranscriptQuery) => Effect.Effect<ReadonlyArray<TranscriptEntry>, RunStoreError>;
29
+ /** Returns the Attempts that startup reconciliation visits, counted per Worker, by Worker name. */
30
+ readonly attemptsByWorker: () => Effect.Effect<ReadonlyArray<WorkerAttempts>, RunStoreError>;
31
+ /** Returns each Loop's last sighting of the Items in `itemKeys`, one entry per Loop and Item. */
32
+ readonly sightings: (itemKeys: ReadonlyArray<ItemKey>) => Effect.Effect<ReadonlyArray<LoopSighting>, RunStoreError>;
23
33
  }>;
24
- /** Reads saved Run state and transcripts without starting or recovering execution. */
34
+ /** The service that reads saved Run state and transcripts without starting or recovering execution. */
25
35
  export declare class RunReader extends RunReader_base {
26
36
  static readonly layer: Layer.Layer<RunReader, never, RunDatabase>;
27
37
  }
28
- export { RunEvidence, RunSnapshot, RunSummary, ProjectionRevision } from "./model.ts";
38
+ export { LoopSighting, RunEvent, RunEvidence, RunSnapshot, RunSummary, ProjectionRevision, WorkerAttempts, } from "./model.ts";
29
39
  //# sourceMappingURL=run-reader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-reader.d.ts","sourceRoot":"","sources":["../../src/run-reader/run-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAsB,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;;IAuDpD,+FAA+F;sBAC7E,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC;IAC7E,gHAAgH;uBAC7F,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC;IAC9E,+EAA+E;mBAChE,CAAC,OAAO,EAAE;QACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC7D,0FAA0F;uBACvE,CACjB,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC5D,2FAA2F;uBACxE,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,aAAa,CAAC;IACxF,qFAAqF;yBAChE,CACnB,KAAK,EAAE,eAAe,KACnB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;;AArBrE,sFAAsF;AACtF,qBAAa,SAAU,SAAQ,cAsBD;IAC5B,MAAM,CAAC,QAAQ,CAAC,KAAK,6CAA0C;CAChE;AAED,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"run-reader.d.ts","sourceRoot":"","sources":["../../src/run-reader/run-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,KAAK,YAAY,EACjB,kBAAkB,EAClB,KAAK,QAAQ,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAsB,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;;IA+EpD,2FAA2F;sBACzE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC;IAC7E,oGAAoG;uBACjF,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC;IAC9E,sFAAsF;mBACvE,CAAC,OAAO,EAAE;QACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC7D,kFAAkF;qBACjE,CAAC,OAAO,EAAE;QACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC7D,+EAA+E;uBAC5D,CACjB,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC5D,4GAA4G;qBAC3F,CACf,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,KACzB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAC1D,mHAAmH;uBAChG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,aAAa,CAAC;IACxF,8EAA8E;yBACzD,CACnB,KAAK,EAAE,eAAe,KACnB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;IACjE,mGAAmG;+BACxE,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC;IAC5F,iGAAiG;wBAC7E,CAClB,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC;;AAnClE,uGAAuG;AACvG,qBAAa,SAAU,SAAQ,cAoCD;IAC5B,MAAM,CAAC,QAAQ,CAAC,KAAK,6CAA0C;CAChE;AAED,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC"}
@@ -2,9 +2,10 @@ import { Context, Effect, Layer, Option } from "effect";
2
2
  import { RunId } from "@usine/core/run";
3
3
  import { ItemKey } from "@usine/core/item";
4
4
  import { RunDatabase } from "../database/database.js";
5
- import { ProjectionRevision, RunEvidence, RunSnapshot, RunSummary } from "./model.js";
5
+ import { ProjectionRevision, RunEvidence, RunSnapshot, RunSummary, } from "./model.js";
6
6
  import { TranscriptAllQuery, TranscriptEntry, TranscriptQuery } from "../transcript.js";
7
7
  import { persistence } from "../store/codec.js";
8
+ import { leftoverQueries } from "../store/leftovers.js";
8
9
  import { queriesFor } from "../store/queries.js";
9
10
  const makeRunReader = Effect.gen(function* () {
10
11
  const database = yield* RunDatabase;
@@ -22,7 +23,7 @@ const makeRunReader = Effect.gen(function* () {
22
23
  transcript: transcripts.flat().sort((left, right) => left.sequence - right.sequence),
23
24
  });
24
25
  }))
25
- .pipe(persistence("read Run evidence"));
26
+ .pipe(persistence("read run evidence"));
26
27
  yield* Effect.logDebug("Run evidence read", {
27
28
  runId,
28
29
  attempts: evidence.snapshot.attempts.length,
@@ -31,14 +32,29 @@ const makeRunReader = Effect.gen(function* () {
31
32
  return evidence;
32
33
  });
33
34
  const list = Effect.fn("RunReader.list")((options) => queries.runSummaries(options.closedLimit).pipe(persistence("list runs")));
35
+ const closed = Effect.fn("RunReader.closed")((options) => queries.closedRunSummaries(options.limit).pipe(persistence("list closed runs")));
34
36
  const revision = Effect.fn("RunReader.revision")(() => queries.revision().pipe(persistence("read projection revision")));
35
- const forItems = Effect.fn("RunReader.forItems")((itemKeys) => queries.itemRunSummaries(itemKeys).pipe(persistence("read Item Run histories")));
36
- const transcript = Effect.fn("RunReader.transcript")((query) => queries.transcript(query).pipe(persistence("read Attempt transcript")));
37
- return { inspect, evidence, list, forItems, revision, transcript };
37
+ const forItems = Effect.fn("RunReader.forItems")((itemKeys) => queries.itemRunSummaries(itemKeys).pipe(persistence("read item run histories")));
38
+ const events = Effect.fn("RunReader.events")((runIds) => queries.runEvents(runIds).pipe(persistence("read the events of runs")));
39
+ const transcript = Effect.fn("RunReader.transcript")((query) => queries.transcript(query).pipe(persistence("read attempt transcript")));
40
+ const attemptsByWorker = Effect.fn("RunReader.attemptsByWorker")(() => leftoverQueries(database).attemptCountsByWorker().pipe(persistence("count attempts by worker")));
41
+ const sightings = Effect.fn("RunReader.sightings")((itemKeys) => queries.loopItems.sightings(itemKeys).pipe(persistence("read loop sightings")));
42
+ return {
43
+ inspect,
44
+ evidence,
45
+ list,
46
+ closed,
47
+ forItems,
48
+ events,
49
+ revision,
50
+ transcript,
51
+ attemptsByWorker,
52
+ sightings,
53
+ };
38
54
  });
39
- /** Reads saved Run state and transcripts without starting or recovering execution. */
55
+ /** The service that reads saved Run state and transcripts without starting or recovering execution. */
40
56
  export class RunReader extends Context.Service()("@usine/engine/RunReader") {
41
57
  static layer = Layer.effect(RunReader, makeRunReader);
42
58
  }
43
- export { RunEvidence, RunSnapshot, RunSummary, ProjectionRevision } from "./model.js";
59
+ export { LoopSighting, RunEvent, RunEvidence, RunSnapshot, RunSummary, ProjectionRevision, WorkerAttempts, } from "./model.js";
44
60
  //# sourceMappingURL=run-reader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-reader.js","sourceRoot":"","sources":["../../src/run-reader/run-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-reader.js","sourceRoot":"","sources":["../../src/run-reader/run-reader.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
+ import type { AttemptRecovery, RecoverySink } from "@usine/core/attempt/salvage";
1
2
  import { Agent } from "@usine/core/agent";
2
3
  import { Attempt, type AttemptId } from "@usine/core/attempt";
4
+ import { SalvagePushed } from "@usine/core/attempt/salvage";
3
5
  import { Event } from "@usine/core/event";
4
6
  import { Run } from "@usine/core/run";
5
7
  import { Step } from "@usine/core/step";
6
- import { Schema, Context, Effect } from "effect";
8
+ import { Schema, Context, Effect, type Option, type Result } from "effect";
7
9
  import type * as AttemptChannel from "@usine/core/attempt/channel";
8
10
  import type { AttemptFailure } from "@usine/core/attempt/failure";
9
11
  import type { WorkerName } from "@usine/core/worker";
@@ -19,24 +21,78 @@ declare const StepExecution_base: Schema.Class<StepExecution, Schema.Struct<{
19
21
  readonly task: Schema.brand<Schema.String, "AttemptTask">;
20
22
  readonly agent: typeof Agent;
21
23
  readonly parentModel: Schema.Option<Schema.brand<Schema.String, "ModelId">>;
24
+ /** The Attempt's access to `repository`, from the Run's Loop (ADR 0011). */
25
+ readonly permissions: Schema.Literals<readonly ["write", "read"]>;
26
+ /** The newest pushed salvage of an earlier Attempt of the Run, which the checkout resumes from. */
27
+ readonly resume: Schema.Option<typeof SalvagePushed>;
28
+ /** Whether to reattach to the Attempt's live parent task instead of starting it. */
29
+ readonly reattach: Schema.withConstructorDefault<Schema.Boolean>;
22
30
  }>, {}>;
23
- /** The saved Event, effective task and Agent, and Step being tried in one Attempt. */
31
+ /** The saved Event, effective task and Agent, and Step of one Attempt. */
24
32
  export declare class StepExecution extends StepExecution_base {
25
33
  }
26
- /** A reservation of one Worker's capacity for the length of an Attempt. Call `release` when the Attempt ends. */
34
+ /** A reservation of one Worker slot for an Attempt, freed by `release`. */
27
35
  export interface WorkerLease {
28
36
  readonly worker: WorkerName;
29
37
  readonly release: Effect.Effect<void>;
30
38
  }
39
+ /**
40
+ * The channel sink for one execution. The executor runs `checkoutAcquired` after preparing the
41
+ * checkout and before launching the Attempt; from then on, it salvages and releases the
42
+ * checkout. Before that, the engine reconciles a kept checkout through `StepExecutor.recover`
43
+ * (#180).
44
+ */
45
+ export interface ExecutionSink extends AttemptChannel.Sink {
46
+ readonly checkoutAcquired: Effect.Effect<void>;
47
+ }
31
48
  declare const StepExecutor_base: Context.ServiceClass<StepExecutor, "@usine/engine/StepExecutor", {
32
- /** Requests that the identified Attempt stop its current work. */
49
+ /**
50
+ * The configured Workers, plus each removed Worker until its last Attempt ends. The engine
51
+ * calls `recover` only for Attempts on these Workers.
52
+ */
53
+ readonly workers: Effect.Effect<ReadonlyArray<WorkerName>>;
54
+ /**
55
+ * Returns whether the Attempt's parent task survived an orchestrator restart: it still runs,
56
+ * or it finished and its result is still on the Worker.
57
+ */
58
+ readonly isLive: (attemptId: AttemptId) => Effect.Effect<boolean, AttemptFailure>;
59
+ /**
60
+ * Returns the result that an open Attempt's parent task stored before an orchestrator restart,
61
+ * or `None` if nothing was stored.
62
+ */
63
+ readonly outcome: (attemptId: AttemptId) => Effect.Effect<Option.Option<Result.Result<StepResult, AttemptFailure>>, AttemptFailure>;
64
+ /**
65
+ * Reconciles the checkout of an Attempt that no Run reattaches, recording its salvage before
66
+ * releasing it. Stops a live parent task first, and fails, leaving the checkout, if it can't
67
+ * confirm the stop. For an open Attempt whose parent task failed before a launch recorded it,
68
+ * also records the comments the Attempt posted on the Run's Item.
69
+ */
70
+ readonly recover: <E>(attempt: AttemptRecovery, record: RecoverySink<E>) => Effect.Effect<void, E | AttemptFailure>;
71
+ /**
72
+ * Stops the Attempt's work, including a parent task that survived a restart. Fails if the parent
73
+ * task can't be confirmed stopped.
74
+ */
33
75
  readonly interrupt: (attemptId: AttemptId) => Effect.Effect<void, AttemptFailure>;
34
- /** Waits for Worker capacity; the returned lease must be released after execution or cancellation. */
35
- readonly reserve: (submission: Submission) => Effect.Effect<WorkerLease, AttemptFailure>;
36
- /** Runs the reserved Attempt, recording channel activity through `io`, and waits for its result. */
37
- readonly execute: (execution: StepExecution, io: AttemptChannel.Sink) => Effect.Effect<StepResult, AttemptFailure>;
76
+ /** Sends a non-terminal operator action to a live session of the Attempt. */
77
+ readonly intervene: (attemptId: AttemptId, intervention: AttemptChannel.Intervention) => Effect.Effect<void, AttemptFailure>;
78
+ /**
79
+ * Waits for a Worker slot and returns its lease, which the caller releases. If `worker` is set,
80
+ * waits for a slot on that Worker only (#177).
81
+ */
82
+ readonly reserve: (submission: Submission, worker: Option.Option<WorkerName>) => Effect.Effect<WorkerLease, AttemptFailure>;
83
+ /**
84
+ * Takes a slot on `worker` immediately for an Attempt that already runs there, even if no slot
85
+ * is free, so the Worker can exceed its capacity until enough Attempts end (#177).
86
+ */
87
+ readonly occupy: (worker: WorkerName) => Effect.Effect<WorkerLease>;
88
+ /**
89
+ * Runs the reserved Attempt, or reattaches to it if `execution.reattach` is set, records channel
90
+ * activity through `io`, and returns its result. Runs `io.checkoutAcquired` after preparing the
91
+ * checkout, and never if preparation fails.
92
+ */
93
+ readonly execute: (execution: StepExecution, io: ExecutionSink) => Effect.Effect<StepResult, AttemptFailure>;
38
94
  }>;
39
- /** Runs one Attempt on a Worker: reserve capacity, execute the step, interrupt on cancel. */
95
+ /** The service that runs Attempts on Workers. */
40
96
  export declare class StepExecutor extends StepExecutor_base {
41
97
  }
42
98
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"step-executor.d.ts","sourceRoot":"","sources":["../src/step-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,KAAK,cAAc,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;;;;;;;;;;;;AAEzD,sFAAsF;AACtF,qBAAa,aAAc,SAAQ,kBAUjC;CAAG;AAEL,iHAAiH;AACjH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACvC;;IAMG,kEAAkE;wBAC9C,CAAC,SAAS,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC;IACjF,sGAAsG;sBACpF,CAAC,UAAU,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC;IACxF,oGAAoG;sBAClF,CAChB,SAAS,EAAE,aAAa,EACxB,EAAE,EAAE,cAAc,CAAC,IAAI,KACpB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC;;AAZlD,6FAA6F;AAC7F,qBAAa,YAAa,SAAQ,iBAaD;CAAG"}
1
+ {"version":3,"file":"step-executor.d.ts","sourceRoot":"","sources":["../src/step-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC3E,OAAO,KAAK,KAAK,cAAc,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;;;;;;;;;;;IAavD,4EAA4E;;IAE5E,mGAAmG;;IAEnG,oFAAoF;;;AAftF,0EAA0E;AAC1E,qBAAa,aAAc,SAAQ,kBAgBjC;CAAG;AAEL,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACvC;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,IAAI;IACxD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAChD;;IAMG;;;OAGG;sBACe,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1D;;;OAGG;qBACc,CAAC,SAAS,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC;IACjF;;;OAGG;sBACe,CAChB,SAAS,EAAE,SAAS,KACjB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC;IAC5F;;;;;OAKG;sBACe,CAAC,CAAC,EAClB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KACpB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,cAAc,CAAC;IAC5C;;;OAGG;wBACiB,CAAC,SAAS,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC;IACjF,6EAA6E;wBACzD,CAClB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,cAAc,CAAC,YAAY,KACtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC;IACxC;;;OAGG;sBACe,CAChB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAC9B,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC;IAC/C;;;OAGG;qBACc,CAAC,MAAM,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;IACnE;;;;OAIG;sBACe,CAChB,SAAS,EAAE,aAAa,EACxB,EAAE,EAAE,aAAa,KACd,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC;;AA9DlD,iDAAiD;AACjD,qBAAa,YAAa,SAAQ,iBA+DD;CAAG"}
@@ -1,12 +1,14 @@
1
1
  import { Agent } from "@usine/core/agent";
2
2
  import { ModelId } from "@usine/core/agent/brain";
3
3
  import { Attempt, AttemptTask } from "@usine/core/attempt";
4
+ import { SalvagePushed } from "@usine/core/attempt/salvage";
4
5
  import { Event } from "@usine/core/event";
6
+ import { LoopPermissions } from "@usine/core/loop";
5
7
  import { RepositoryName, RepositoryRevision } from "@usine/core/repository";
6
8
  import { Run } from "@usine/core/run";
7
9
  import { Step } from "@usine/core/step";
8
10
  import { Schema, Context, Effect } from "effect";
9
- /** The saved Event, effective task and Agent, and Step being tried in one Attempt. */
11
+ /** The saved Event, effective task and Agent, and Step of one Attempt. */
10
12
  export class StepExecution extends Schema.Class("@usine/engine/StepExecution")({
11
13
  attempt: Attempt,
12
14
  event: Event,
@@ -17,9 +19,15 @@ export class StepExecution extends Schema.Class("@usine/engine/StepExecution")({
17
19
  task: AttemptTask,
18
20
  agent: Agent,
19
21
  parentModel: Schema.Option(ModelId),
22
+ /** The Attempt's access to `repository`, from the Run's Loop (ADR 0011). */
23
+ permissions: LoopPermissions,
24
+ /** The newest pushed salvage of an earlier Attempt of the Run, which the checkout resumes from. */
25
+ resume: Schema.Option(SalvagePushed),
26
+ /** Whether to reattach to the Attempt's live parent task instead of starting it. */
27
+ reattach: Schema.Boolean.pipe(Schema.withConstructorDefault(Effect.succeed(false))),
20
28
  }) {
21
29
  }
22
- /** Runs one Attempt on a Worker: reserve capacity, execute the step, interrupt on cancel. */
30
+ /** The service that runs Attempts on Workers. */
23
31
  export class StepExecutor extends Context.Service()("@usine/engine/StepExecutor") {
24
32
  }
25
33
  //# sourceMappingURL=step-executor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"step-executor.js","sourceRoot":"","sources":["../src/step-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAkB,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAOjD,sFAAsF;AACtF,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,KAAK,CAAgB,6BAA6B,CAAC,CAAC;IAC5F,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,cAAc;IAC1B,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;CACpC,CAAC;CAAG;AAQL,6FAA6F;AAC7F,MAAM,OAAO,YAAa,SAAQ,OAAO,CAAC,OAAO,EAa9C,CAAC,4BAA4B,CAAC;CAAG"}
1
+ {"version":3,"file":"step-executor.js","sourceRoot":"","sources":["../src/step-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAkB,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAA4B,MAAM,QAAQ,CAAC;AAO3E,0EAA0E;AAC1E,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,KAAK,CAAgB,6BAA6B,CAAC,CAAC;IAC5F,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,cAAc;IAC1B,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;IACnC,4EAA4E;IAC5E,WAAW,EAAE,eAAe;IAC5B,mGAAmG;IACnG,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;IACpC,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;CACpF,CAAC;CAAG;AAkBL,iDAAiD;AACjD,MAAM,OAAO,YAAa,SAAQ,OAAO,CAAC,OAAO,EA+D9C,CAAC,4BAA4B,CAAC;CAAG"}
@@ -0,0 +1,8 @@
1
+ import { AttemptWindows } from "@usine/core/attempt";
2
+ import { Effect } from "effect";
3
+ import type { RunDatabaseClient } from "../database/database.ts";
4
+ /** Returns the Attempt window queries that run on the caller's transaction. */
5
+ export declare const attemptWindowQueries: (database: RunDatabaseClient) => {
6
+ readonly attemptWindows: (attemptId: string & import("effect/Brand").Brand<"AttemptId">) => Effect.Effect<AttemptWindows, import("drizzle-orm/effect-core").EffectDrizzleQueryError | import("effect/Schema").SchemaError, never>;
7
+ };
8
+ //# sourceMappingURL=attempt-windows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attempt-windows.d.ts","sourceRoot":"","sources":["../../src/store/attempt-windows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAA4B,MAAM,qBAAqB,CAAC;AAE/F,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAKjE,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,aAAc,iBAAiB;;CAuD/D,CAAC"}