@jr2/orchestrator 0.4.1 → 0.6.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 (361) hide show
  1. package/README.md +20 -2
  2. package/console/components/app.ts +2 -0
  3. package/console/components/fleet.ts +14 -1
  4. package/console/components/machine-pane.ts +41 -2
  5. package/console/main.ts +13 -1
  6. package/console/store.ts +102 -6
  7. package/console/style.css +21 -0
  8. package/docs/agents-block.md +5 -0
  9. package/docs/concepts/agents-and-turns.md +478 -0
  10. package/docs/concepts/architecture.md +243 -0
  11. package/docs/concepts/charts.md +146 -0
  12. package/docs/concepts/composition.md +357 -0
  13. package/docs/concepts/converge.md +257 -0
  14. package/docs/concepts/durable-runs.md +189 -0
  15. package/docs/concepts/effects.md +658 -0
  16. package/docs/concepts/gates.md +208 -0
  17. package/docs/concepts/machines-and-workflows.md +298 -0
  18. package/docs/concepts/pools-and-sources.md +230 -0
  19. package/docs/concepts/secrets-and-trust.md +306 -0
  20. package/docs/concepts/the-menu.md +381 -0
  21. package/docs/concepts/workspaces.md +756 -0
  22. package/docs/get-started/a-model-decides.md +563 -0
  23. package/docs/get-started/an-agent-in-a-sandbox.md +383 -0
  24. package/docs/get-started/connect-a-model.md +248 -0
  25. package/docs/get-started/create-an-instance.md +194 -0
  26. package/docs/get-started/have-your-assistant-write-a-machine.md +993 -0
  27. package/docs/get-started/install.md +130 -0
  28. package/docs/guides/add-tools-to-the-sandbox.md +308 -0
  29. package/docs/guides/answer-a-gate.md +304 -0
  30. package/docs/guides/bind-open-parts.md +224 -0
  31. package/docs/guides/cancel-a-run.md +146 -0
  32. package/docs/guides/clean-up.md +206 -0
  33. package/docs/guides/cut-a-worktree.md +560 -0
  34. package/docs/guides/fix-a-failed-converge.md +361 -0
  35. package/docs/guides/give-the-cluster-git-credentials.md +222 -0
  36. package/docs/guides/iterate-on-a-machine-on-kind.md +190 -0
  37. package/docs/guides/let-an-agent-write-a-chart.md +230 -0
  38. package/docs/guides/look-inside-a-sandbox.md +177 -0
  39. package/docs/guides/mirror-the-kit-images.md +176 -0
  40. package/docs/guides/move-from-kind-to-a-shared-cluster.md +318 -0
  41. package/docs/guides/open-the-console.md +91 -0
  42. package/docs/guides/publish-a-machine-as-an-npm-package.md +350 -0
  43. package/docs/guides/push-and-sign-a-branch.md +532 -0
  44. package/docs/guides/run-a-chart-by-name.md +270 -0
  45. package/docs/guides/run-a-command-or-call-a-url.md +587 -0
  46. package/docs/guides/run-one-worker-per-item.md +322 -0
  47. package/docs/guides/set-an-agents-access-and-dials.md +420 -0
  48. package/docs/guides/size-a-workspace.md +217 -0
  49. package/docs/guides/start-a-run-from-a-run.md +237 -0
  50. package/docs/guides/start-a-run.md +207 -0
  51. package/docs/guides/upgrade-the-kit-version.md +240 -0
  52. package/docs/guides/use-a-hosted-provider.md +214 -0
  53. package/docs/guides/use-a-local-model.md +313 -0
  54. package/docs/guides/watch-a-run.md +349 -0
  55. package/docs/guides/write-a-workflow.md +318 -0
  56. package/docs/index.md +44 -0
  57. package/docs/llms.txt +237 -0
  58. package/docs/reference/authoring-surface/agent.md +151 -0
  59. package/docs/reference/authoring-surface/answer.md +156 -0
  60. package/docs/reference/authoring-surface/arg.md +82 -0
  61. package/docs/reference/authoring-surface/basic.md +62 -0
  62. package/docs/reference/authoring-surface/bearer.md +53 -0
  63. package/docs/reference/authoring-surface/branchname.md +15 -0
  64. package/docs/reference/authoring-surface/chartschema.md +23 -0
  65. package/docs/reference/authoring-surface/chartschemafor.md +48 -0
  66. package/docs/reference/authoring-surface/command.md +206 -0
  67. package/docs/reference/authoring-surface/customize.md +64 -0
  68. package/docs/reference/authoring-surface/defineconfig.md +41 -0
  69. package/docs/reference/authoring-surface/defineevent.md +114 -0
  70. package/docs/reference/authoring-surface/dispatch.md +126 -0
  71. package/docs/reference/authoring-surface/fail.md +96 -0
  72. package/docs/reference/authoring-surface/file.md +142 -0
  73. package/docs/reference/authoring-surface/frompick.md +277 -0
  74. package/docs/reference/authoring-surface/http.md +259 -0
  75. package/docs/reference/authoring-surface/isfailure.md +58 -0
  76. package/docs/reference/authoring-surface/isready.md +14 -0
  77. package/docs/reference/authoring-surface/jr2setup.md +237 -0
  78. package/docs/reference/authoring-surface/open.md +105 -0
  79. package/docs/reference/authoring-surface/openbody.md +86 -0
  80. package/docs/reference/authoring-surface/paramsof.md +143 -0
  81. package/docs/reference/authoring-surface/pool.md +186 -0
  82. package/docs/reference/authoring-surface/push.md +130 -0
  83. package/docs/reference/authoring-surface/readyof.md +21 -0
  84. package/docs/reference/authoring-surface/secret.md +139 -0
  85. package/docs/reference/authoring-surface/sentby.md +83 -0
  86. package/docs/reference/authoring-surface/source.md +51 -0
  87. package/docs/reference/authoring-surface/text.md +62 -0
  88. package/docs/reference/authoring-surface/type-agentdeclaration.md +27 -0
  89. package/docs/reference/authoring-surface/type-agentdefinition.md +80 -0
  90. package/docs/reference/authoring-surface/type-agentlogic.md +15 -0
  91. package/docs/reference/authoring-surface/type-agentslots.md +15 -0
  92. package/docs/reference/authoring-surface/type-answeraction.md +12 -0
  93. package/docs/reference/authoring-surface/type-anyframepath.md +14 -0
  94. package/docs/reference/authoring-surface/type-anyworktreepath.md +15 -0
  95. package/docs/reference/authoring-surface/type-arg.md +19 -0
  96. package/docs/reference/authoring-surface/type-argnames.md +12 -0
  97. package/docs/reference/authoring-surface/type-bindactors.md +14 -0
  98. package/docs/reference/authoring-surface/type-binding.md +61 -0
  99. package/docs/reference/authoring-surface/type-bindingof.md +12 -0
  100. package/docs/reference/authoring-surface/type-bodyacceptsdoor.md +15 -0
  101. package/docs/reference/authoring-surface/type-bodyacceptsslots.md +17 -0
  102. package/docs/reference/authoring-surface/type-ceilings.md +41 -0
  103. package/docs/reference/authoring-surface/type-chainlink.md +19 -0
  104. package/docs/reference/authoring-surface/type-chartaction.md +46 -0
  105. package/docs/reference/authoring-surface/type-chartagent.md +28 -0
  106. package/docs/reference/authoring-surface/type-chartevent.md +20 -0
  107. package/docs/reference/authoring-surface/type-chartguard.md +20 -0
  108. package/docs/reference/authoring-surface/type-chartinvoke.md +28 -0
  109. package/docs/reference/authoring-surface/type-chartjson.md +14 -0
  110. package/docs/reference/authoring-surface/type-chartstate.md +46 -0
  111. package/docs/reference/authoring-surface/type-charttext.md +40 -0
  112. package/docs/reference/authoring-surface/type-charttransition.md +22 -0
  113. package/docs/reference/authoring-surface/type-charttransitions.md +14 -0
  114. package/docs/reference/authoring-surface/type-chartvalue.md +15 -0
  115. package/docs/reference/authoring-surface/type-childat.md +12 -0
  116. package/docs/reference/authoring-surface/type-childslots.md +12 -0
  117. package/docs/reference/authoring-surface/type-commandenv.md +15 -0
  118. package/docs/reference/authoring-surface/type-commandinput.md +20 -0
  119. package/docs/reference/authoring-surface/type-commandoptions.md +56 -0
  120. package/docs/reference/authoring-surface/type-commandoutput.md +122 -0
  121. package/docs/reference/authoring-surface/type-customize.md +111 -0
  122. package/docs/reference/authoring-surface/type-dispatchdefinition.md +39 -0
  123. package/docs/reference/authoring-surface/type-dispatchinput.md +14 -0
  124. package/docs/reference/authoring-surface/type-dispatchopenparts.md +14 -0
  125. package/docs/reference/authoring-surface/type-dispatchoutput.md +72 -0
  126. package/docs/reference/authoring-surface/type-doorlessinput.md +19 -0
  127. package/docs/reference/authoring-surface/type-duration.md +15 -0
  128. package/docs/reference/authoring-surface/type-effectbinding.md +93 -0
  129. package/docs/reference/authoring-surface/type-effectlogic.md +12 -0
  130. package/docs/reference/authoring-surface/type-envopenparts.md +14 -0
  131. package/docs/reference/authoring-surface/type-eventaudience.md +27 -0
  132. package/docs/reference/authoring-surface/type-eventdef.md +45 -0
  133. package/docs/reference/authoring-surface/type-eventfrom.md +16 -0
  134. package/docs/reference/authoring-surface/type-eventsemantics.md +26 -0
  135. package/docs/reference/authoring-surface/type-execoutcome.md +34 -0
  136. package/docs/reference/authoring-surface/type-failslot.md +14 -0
  137. package/docs/reference/authoring-surface/type-failure.md +19 -0
  138. package/docs/reference/authoring-surface/type-failureinput.md +20 -0
  139. package/docs/reference/authoring-surface/type-filebody.md +37 -0
  140. package/docs/reference/authoring-surface/type-framepath.md +14 -0
  141. package/docs/reference/authoring-surface/type-frominput.md +14 -0
  142. package/docs/reference/authoring-surface/type-hostinjectedinput.md +56 -0
  143. package/docs/reference/authoring-surface/type-httpdefinition.md +104 -0
  144. package/docs/reference/authoring-surface/type-httpfileinput.md +20 -0
  145. package/docs/reference/authoring-surface/type-httpinput.md +12 -0
  146. package/docs/reference/authoring-surface/type-httpmethod.md +14 -0
  147. package/docs/reference/authoring-surface/type-httpopenparts.md +12 -0
  148. package/docs/reference/authoring-surface/type-httpoutput.md +95 -0
  149. package/docs/reference/authoring-surface/type-httprequestparts.md +33 -0
  150. package/docs/reference/authoring-surface/type-jr2config.md +126 -0
  151. package/docs/reference/authoring-surface/type-lateroutcome.md +21 -0
  152. package/docs/reference/authoring-surface/type-lends.md +38 -0
  153. package/docs/reference/authoring-surface/type-logicat.md +12 -0
  154. package/docs/reference/authoring-surface/type-markedif.md +12 -0
  155. package/docs/reference/authoring-surface/type-mergedactors.md +12 -0
  156. package/docs/reference/authoring-surface/type-namedsecret.md +25 -0
  157. package/docs/reference/authoring-surface/type-namestart.md +77 -0
  158. package/docs/reference/authoring-surface/type-noslotworkspaceoptions.md +27 -0
  159. package/docs/reference/authoring-surface/type-notworktreekeys.md +12 -0
  160. package/docs/reference/authoring-surface/type-openbodydeclaration.md +40 -0
  161. package/docs/reference/authoring-surface/type-openbodylogic.md +14 -0
  162. package/docs/reference/authoring-surface/type-openbodyoutput.md +42 -0
  163. package/docs/reference/authoring-surface/type-openbodyslot.md +18 -0
  164. package/docs/reference/authoring-surface/type-opencommandinput.md +22 -0
  165. package/docs/reference/authoring-surface/type-openeffect.md +12 -0
  166. package/docs/reference/authoring-surface/type-openeffectslots.md +12 -0
  167. package/docs/reference/authoring-surface/type-openof.md +12 -0
  168. package/docs/reference/authoring-surface/type-opensecret.md +23 -0
  169. package/docs/reference/authoring-surface/type-opensecretmark.md +12 -0
  170. package/docs/reference/authoring-surface/type-permissivenoslotworkspaceoptions.md +26 -0
  171. package/docs/reference/authoring-surface/type-permissiveworkspaceoptions.md +27 -0
  172. package/docs/reference/authoring-surface/type-poolmachine.md +28 -0
  173. package/docs/reference/authoring-surface/type-poolnextinput.md +22 -0
  174. package/docs/reference/authoring-surface/type-poolspec.md +60 -0
  175. package/docs/reference/authoring-surface/type-pushinput.md +34 -0
  176. package/docs/reference/authoring-surface/type-pushoptions.md +79 -0
  177. package/docs/reference/authoring-surface/type-pushoutput.md +149 -0
  178. package/docs/reference/authoring-surface/type-pushwireoutput.md +12 -0
  179. package/docs/reference/authoring-surface/type-quantity.md +14 -0
  180. package/docs/reference/authoring-surface/type-reached.md +12 -0
  181. package/docs/reference/authoring-surface/type-reposlot.md +70 -0
  182. package/docs/reference/authoring-surface/type-reposlotsof.md +16 -0
  183. package/docs/reference/authoring-surface/type-sandboxoptions.md +84 -0
  184. package/docs/reference/authoring-surface/type-secret.md +25 -0
  185. package/docs/reference/authoring-surface/type-sender.md +19 -0
  186. package/docs/reference/authoring-surface/type-sentbyguards.md +12 -0
  187. package/docs/reference/authoring-surface/type-size.md +85 -0
  188. package/docs/reference/authoring-surface/type-slothandles.md +24 -0
  189. package/docs/reference/authoring-surface/type-sourcenextresult.md +17 -0
  190. package/docs/reference/authoring-surface/type-sourcespec.md +44 -0
  191. package/docs/reference/authoring-surface/type-syncstate.md +12 -0
  192. package/docs/reference/authoring-surface/type-text.md +19 -0
  193. package/docs/reference/authoring-surface/type-textpart.md +24 -0
  194. package/docs/reference/authoring-surface/type-thinkinglevel.md +39 -0
  195. package/docs/reference/authoring-surface/type-toparameterizedobject.md +14 -0
  196. package/docs/reference/authoring-surface/type-toprovidedactor.md +14 -0
  197. package/docs/reference/authoring-surface/type-unknown.md +21 -0
  198. package/docs/reference/authoring-surface/type-usercontainer.md +77 -0
  199. package/docs/reference/authoring-surface/type-withoutemptyindex.md +20 -0
  200. package/docs/reference/authoring-surface/type-workflowevent.md +46 -0
  201. package/docs/reference/authoring-surface/type-workspaceaccess.md +16 -0
  202. package/docs/reference/authoring-surface/type-workspaced.md +115 -0
  203. package/docs/reference/authoring-surface/type-workspacehandles.md +22 -0
  204. package/docs/reference/authoring-surface/type-workspacemachine.md +29 -0
  205. package/docs/reference/authoring-surface/type-workspaceof.md +13 -0
  206. package/docs/reference/authoring-surface/type-workspaceoptions.md +27 -0
  207. package/docs/reference/authoring-surface/type-worktreefound.md +16 -0
  208. package/docs/reference/authoring-surface/type-worktreeinput.md +56 -0
  209. package/docs/reference/authoring-surface/type-worktreekey.md +14 -0
  210. package/docs/reference/authoring-surface/type-worktreeoptions.md +29 -0
  211. package/docs/reference/authoring-surface/type-worktreeoutput.md +45 -0
  212. package/docs/reference/authoring-surface/type-worktreepath.md +16 -0
  213. package/docs/reference/authoring-surface/type-worktreeready.md +37 -0
  214. package/docs/reference/authoring-surface/type-worktreerefused.md +21 -0
  215. package/docs/reference/authoring-surface/workspace.md +287 -0
  216. package/docs/reference/authoring-surface/worktree.md +71 -0
  217. package/docs/reference/authoring-surface.md +217 -0
  218. package/docs/reference/cli.md +433 -0
  219. package/docs/reference/config.md +765 -0
  220. package/docs/reference/decisions/0001-operator-owned-generic-sandbox.md +114 -0
  221. package/docs/reference/decisions/0002-duplex-streaming-actor.md +117 -0
  222. package/docs/reference/decisions/0004-worktree-provisioning-model.md +130 -0
  223. package/docs/reference/decisions/0005-sandbox-pod-composition.md +240 -0
  224. package/docs/reference/decisions/0006-agent-control-surface.md +50 -0
  225. package/docs/reference/decisions/0007-durable-machine-state.md +109 -0
  226. package/docs/reference/decisions/0008-orchestrator-as-deployed-app.md +60 -0
  227. package/docs/reference/decisions/0009-cli-and-instance-interface.md +275 -0
  228. package/docs/reference/decisions/0010-bdd-acceptance-tests.md +160 -0
  229. package/docs/reference/decisions/0011-workflow-defined-events.md +141 -0
  230. package/docs/reference/decisions/0012-workspace-wrapper-machine.md +103 -0
  231. package/docs/reference/decisions/0013-the-agent-reaches-its-machine-through-a-container-it-cannot-read.md +175 -0
  232. package/docs/reference/decisions/0014-observation-is-open-run-state-is-not.md +95 -0
  233. package/docs/reference/decisions/0015-authoring-surface-absorbs-the-mechanism.md +271 -0
  234. package/docs/reference/decisions/0016-agent-turn-mechanics-are-internal.md +126 -0
  235. package/docs/reference/decisions/0017-pool-over-a-source-port.md +71 -0
  236. package/docs/reference/decisions/0018-instance-agents-are-definitions-jr2-assembles-the-harness.md +111 -0
  237. package/docs/reference/decisions/0019-one-converging-command-against-the-current-context.md +287 -0
  238. package/docs/reference/decisions/0020-private-ca-trust-is-a-named-concept.md +60 -0
  239. package/docs/reference/decisions/0021-workspace-continuity-is-a-lease-that-answers-back.md +101 -0
  240. package/docs/reference/decisions/0022-observation-is-a-level-triggered-feed.md +103 -0
  241. package/docs/reference/decisions/0023-the-harness-prints-the-conversation.md +175 -0
  242. package/docs/reference/decisions/0024-an-agents-turn-ends-with-the-state-that-asked-for-it.md +436 -0
  243. package/docs/reference/decisions/0025-cancel-ends-a-run-stop-parks-it.md +65 -0
  244. package/docs/reference/decisions/0026-a-turn-that-is-over-is-never-prompted.md +62 -0
  245. package/docs/reference/decisions/0027-the-harness-is-jr2s-own-server-flue-retires-the-wire-stays.md +245 -0
  246. package/docs/reference/decisions/0028-what-an-agent-may-do-to-the-workspace-is-part-of-its-definition.md +90 -0
  247. package/docs/reference/decisions/0029-a-menu-is-fixed-for-a-conversation-and-a-turn-is-told-its-allowed-picks.md +154 -0
  248. package/docs/reference/decisions/0030-a-snapshot-names-the-machine-it-was-written-under.md +100 -0
  249. package/docs/reference/decisions/0031-menu-only-agents-run-on-the-instance-harness.md +193 -0
  250. package/docs/reference/decisions/0032-the-console-unlocks-with-the-instance-token.md +61 -0
  251. package/docs/reference/decisions/0033-a-machine-declares-the-input-that-starts-it.md +126 -0
  252. package/docs/reference/decisions/0034-the-console-renders-with-preact-and-the-server-erases-the-types.md +57 -0
  253. package/docs/reference/decisions/0035-a-runaway-turn-is-ended-rerolled-once-then-a-fault.md +92 -0
  254. package/docs/reference/decisions/0036-a-turn-compacts-its-own-context-mid-flight.md +138 -0
  255. package/docs/reference/decisions/0037-an-instance-builds-its-sandbox-images-jr2-injects-the-harness.md +196 -0
  256. package/docs/reference/decisions/0038-jr2-up-builds-every-image-it-deploys.md +170 -0
  257. package/docs/reference/decisions/0039-image-garbage-collects-by-reachability.md +115 -0
  258. package/docs/reference/decisions/0041-a-build-the-host-already-holds-is-not-spent-again.md +64 -0
  259. package/docs/reference/decisions/0042-ready-is-not-routable-an-admission-retries-its-connection.md +142 -0
  260. package/docs/reference/decisions/0043-the-kit-is-tested-as-installed-a-local-registry-stands-in-for-npm.md +170 -0
  261. package/docs/reference/decisions/0044-kit-images-live-at-a-canonical-home-a-self-host-mirrors-it.md +85 -0
  262. package/docs/reference/decisions/0045-the-platform-joins-the-image-address-and-the-cluster-chooses-it.md +82 -0
  263. package/docs/reference/decisions/0046-a-converge-failure-carries-its-diagnosis.md +34 -0
  264. package/docs/reference/decisions/0047-the-git-ssh-key-source-is-the-users-choice.md +47 -0
  265. package/docs/reference/decisions/0048-the-orchestrator-boots-without-its-repos.md +36 -0
  266. package/docs/reference/decisions/0049-a-machine-carries-its-parts-and-composes-by-invoke.md +126 -0
  267. package/docs/reference/decisions/0050-what-code-names-config-declares-what-the-cli-names-discovery-finds.md +73 -0
  268. package/docs/reference/decisions/0051-a-repo-is-a-slot-on-the-workspace-and-a-cache-on-the-node.md +238 -0
  269. package/docs/reference/decisions/0052-a-sandbox-lands-where-an-ordinary-pod-lands-and-the-cache-follows-it.md +86 -0
  270. package/docs/reference/decisions/0053-a-fetch-inside-the-pod-asks-the-node-cache-and-the-cache-asks-the-remote.md +123 -0
  271. package/docs/reference/decisions/0054-the-kit-ships-machines-and-a-shipped-machine-leaves-its-parts-open.md +126 -0
  272. package/docs/reference/decisions/0055-a-release-is-a-pushed-tag-and-the-publish-guard-is-the-credential.md +107 -0
  273. package/docs/reference/decisions/0056-a-global-jr2-hands-off-to-the-instances-own-and-an-instance-has-one-kit-version.md +62 -0
  274. package/docs/reference/decisions/0057-a-turn-is-its-frame-its-dials-and-whether-it-continues.md +152 -0
  275. package/docs/reference/decisions/0058-a-harness-answers-the-orchestrator-alone.md +108 -0
  276. package/docs/reference/decisions/0059-a-harness-holds-stand-ins-and-the-custodian-holds-the-keys.md +427 -0
  277. package/docs/reference/decisions/0060-a-workspace-states-its-size-and-jr2-reserves-all-of-it.md +111 -0
  278. package/docs/reference/decisions/0061-a-memory-kill-ends-the-agents-processes-not-the-harness.md +83 -0
  279. package/docs/reference/decisions/0062-jr2-briefs-the-agent-on-its-seat-never-on-its-task.md +239 -0
  280. package/docs/reference/decisions/0063-the-orchestrator-watches-the-cluster.md +82 -0
  281. package/docs/reference/decisions/0064-a-workspace-waits-for-capacity.md +79 -0
  282. package/docs/reference/decisions/0065-a-persist-survives-a-crash-and-history-is-a-week.md +65 -0
  283. package/docs/reference/decisions/0066-a-model-tier-runs-a-real-model-and-a-change-to-what-it-reads-runs-the-tier.md +552 -0
  284. package/docs/reference/decisions/0067-an-effect-is-an-actor-slot-and-runs-at-most-once-unless-marked-idempotent.md +458 -0
  285. package/docs/reference/decisions/0068-an-effector-holds-an-effects-secrets-and-signs-its-wire.md +475 -0
  286. package/docs/reference/decisions/0069-the-orchestrator-is-a-kit-image-and-an-instance-publishes-its-assembly.md +180 -0
  287. package/docs/reference/decisions/0070-a-machine-lends-its-parts-to-a-chart.md +334 -0
  288. package/docs/reference/decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md +183 -0
  289. package/docs/reference/decisions/0072-the-docs-ship-inside-the-kit-and-an-instances-agents-md-indexes-them.md +144 -0
  290. package/docs/reference/decisions/0073-a-machine-fails-a-run-with-fail-and-an-uncaught-failure-ends-it-failed.md +122 -0
  291. package/docs/reference/decisions/0074-an-unrouted-mechanism-event-is-refused-at-load-and-faults-the-run.md +76 -0
  292. package/docs/reference/decisions/0075-a-machine-cuts-a-worktree-and-the-workspace-only-clones.md +295 -0
  293. package/docs/reference/decisions/0076-an-agents-control-credential-lives-only-where-no-workspace-code-runs.md +320 -0
  294. package/docs/reference/decisions/0077-jr2-requires-landlock-on-every-sandbox-node.md +79 -0
  295. package/docs/reference/decisions.md +86 -0
  296. package/docs/reference/glossary.md +687 -0
  297. package/docs/reference/http-api.md +1386 -0
  298. package/docs/reference/machines.md +189 -0
  299. package/docs/reference/mechanism-events.md +72 -0
  300. package/docs/why.md +207 -0
  301. package/package.json +5 -3
  302. package/src/actor.ts +694 -106
  303. package/src/agent.ts +114 -38
  304. package/src/ambient.ts +3 -4
  305. package/src/assembly-checks.ts +189 -7
  306. package/src/cause.ts +234 -0
  307. package/src/chart.ts +345 -46
  308. package/src/charts.ts +43 -8
  309. package/src/config.ts +440 -178
  310. package/src/custodian.lua +17 -5
  311. package/src/custodian.ts +325 -99
  312. package/src/customize.ts +199 -49
  313. package/src/dispatch-effect.ts +945 -0
  314. package/src/door-compat.ts +217 -0
  315. package/src/durability.ts +11 -4
  316. package/src/effect-checks.ts +50 -3
  317. package/src/effect.ts +641 -128
  318. package/src/effector-wire.ts +165 -13
  319. package/src/fail.ts +222 -0
  320. package/src/harness-client.ts +587 -50
  321. package/src/harness-env.ts +33 -0
  322. package/src/held-secrets.ts +125 -16
  323. package/src/holds.ts +3 -0
  324. package/src/http-effect.ts +556 -58
  325. package/src/http.ts +480 -30
  326. package/src/index.ts +74 -82
  327. package/src/instance.ts +68 -8
  328. package/src/internal.ts +85 -0
  329. package/src/kube-client.ts +6 -3
  330. package/src/machine-doc.ts +24 -7
  331. package/src/mechanism-routes.ts +168 -0
  332. package/src/model-keys.generated.ts +53 -0
  333. package/src/model-keys.ts +42 -58
  334. package/src/names.ts +19 -6
  335. package/src/notices.ts +483 -41
  336. package/src/open-body.ts +242 -40
  337. package/src/open-effect.ts +81 -8
  338. package/src/open.ts +90 -6
  339. package/src/parts.ts +213 -30
  340. package/src/party.ts +101 -2
  341. package/src/pick.ts +497 -11
  342. package/src/pool.ts +282 -50
  343. package/src/registration.ts +133 -12
  344. package/src/repo-identity.ts +7 -3
  345. package/src/repos.ts +22 -3
  346. package/src/run-host.ts +665 -45
  347. package/src/run-output.ts +38 -0
  348. package/src/sandbox-effect.ts +457 -71
  349. package/src/sandbox-kube.ts +66 -17
  350. package/src/secret-placement.ts +59 -17
  351. package/src/server.ts +3 -0
  352. package/src/setup.ts +325 -62
  353. package/src/size.ts +121 -9
  354. package/src/snapshot-store.ts +54 -10
  355. package/src/stub-harness.ts +44 -16
  356. package/src/timers.ts +14 -1
  357. package/src/tokens.ts +107 -32
  358. package/src/vocabulary.ts +88 -14
  359. package/src/wire.ts +100 -26
  360. package/src/workspace.ts +771 -238
  361. package/src/worktree.ts +249 -0
@@ -0,0 +1,22 @@
1
+ ---
2
+ title: ChartTransition
3
+ description: "A transition: a target alone, or the object form."
4
+ ---
5
+
6
+ # `ChartTransition`
7
+
8
+ Type, in `@jr2/orchestrator/src/chart.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type ChartTransition =
12
+ | string
13
+ | {
14
+ target?: string | string[];
15
+ guard?: ChartGuard;
16
+ actions?: ChartAction[];
17
+ reenter?: boolean;
18
+ description?: string;
19
+ };
20
+ ```
21
+
22
+ A transition: a target alone, or the object form.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: ChartTransitions
3
+ description: "One transition or a list, in xstate's order."
4
+ ---
5
+
6
+ # `ChartTransitions`
7
+
8
+ Type, in `@jr2/orchestrator/src/chart.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type ChartTransitions = ChartTransition | ChartTransition[];
12
+ ```
13
+
14
+ One transition or a list, in xstate's order.
@@ -0,0 +1,15 @@
1
+ ---
2
+ title: ChartValue
3
+ description: "A value whose strings may hold `{{<root>.<path>}}` placeholders and whose objects may be `{ \"$ref\": \"<root>.<path>\" }`."
4
+ ---
5
+
6
+ # `ChartValue`
7
+
8
+ Type, in `@jr2/orchestrator/src/chart.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type ChartValue = ChartJson;
12
+ ```
13
+
14
+ A value whose strings may hold `{{<root>.<path>}}` placeholders and whose objects may be
15
+ `{ "$ref": "<root>.<path>" }`. Resolved by `resolveReferences` at invoke time.
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: ChildAt
3
+ description: A type that the Authoring surface names.
4
+ ---
5
+
6
+ # `ChildAt`
7
+
8
+ Type, in `@jr2/orchestrator/src/customize.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
9
+
10
+ ```ts
11
+ type ChildAt<M extends AnyStateMachine, K extends string> = Extract<LogicAt<M, K>, AnyStateMachine>;
12
+ ```
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: ChildSlots
3
+ description: A type that the Authoring surface names.
4
+ ---
5
+
6
+ # `ChildSlots`
7
+
8
+ Type, in `@jr2/orchestrator/src/customize.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
9
+
10
+ ```ts
11
+ type ChildSlots<M extends AnyStateMachine> = Extract<SlotsOf<M>, { logic: AnyStateMachine }>["src"];
12
+ ```
@@ -0,0 +1,15 @@
1
+ ---
2
+ title: CommandEnv
3
+ description: "The `env` of a `command`: for each variable, `secret(\"name\")` for the value of an Effect secret, or `secret(\"name\").path` for the path of a file that holds it."
4
+ ---
5
+
6
+ # `CommandEnv`
7
+
8
+ Type, in `@jr2/orchestrator/src/sandbox-effect.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type CommandEnv = Readonly<Record<string, { readonly secret: string; readonly path: unknown }>>;
12
+ ```
13
+
14
+ The `env` of a `command`: for each variable, `secret("name")` for the value of an Effect
15
+ secret, or `secret("name").path` for the path of a file that holds it.
@@ -0,0 +1,20 @@
1
+ ---
2
+ title: CommandInput
3
+ description: "A command's input: one string per argv slot, and with `pin` the approved commit (`{ sha }`); none when there is neither."
4
+ ---
5
+
6
+ # `CommandInput`
7
+
8
+ Type, in `@jr2/orchestrator/src/effect.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type CommandInput<A extends readonly unknown[], P = false, Opt = unknown> = [
12
+ ArgNames<A> | ([P] extends [true] ? "sha" : never),
13
+ ] extends [never]
14
+ ? (WorktreeKey<Opt> & NotWorktreeKeys) | ([Opt] extends [{ readonly env: object }] ? never : void)
15
+ : { [K in ArgNames<A> | ([P] extends [true] ? "sha" : never)]: string } & WorktreeKey<Opt> &
16
+ Omit<NotWorktreeKeys, ArgNames<A>>;
17
+ ```
18
+
19
+ A command's input: one string per argv slot, and with `pin` the approved commit (`{ sha }`);
20
+ none when there is neither.
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: CommandOptions
3
+ description: "The options of `command()`: the Repo Slot it runs in, how long it can run, how much of its output it keeps, its Effect secrets, and the commit it runs against."
4
+ ---
5
+
6
+ # `CommandOptions`
7
+
8
+ Type, in `@jr2/orchestrator/src/effect.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type CommandOptions = {
12
+ timeout?: Duration;
13
+ tail?: number;
14
+ env?: CommandEnv;
15
+ pin?: boolean;
16
+ };
17
+ ```
18
+
19
+ The options of `command()`: the Repo Slot it runs in, how long it can run, how much of its
20
+ output it keeps, its Effect secrets, and the commit it runs against.
21
+
22
+ **Fields**
23
+
24
+ - `timeout` (optional): [`Duration`](type-duration.md)
25
+
26
+ How long the command can run: a number and a unit, such as `"90s"`, `"10m"` or `"1h"`.
27
+ Default `"10m"`. When the time ends, jr2 kills the process group, and the output is
28
+ `timeout`. It refuses a value that is not a positive duration: `command: timeout "<timeout>"
29
+ is not a positive duration (like "90s", "10m", "1h")`.
30
+ - `tail` (optional): `number`
31
+
32
+ The number of characters that `tail` keeps from the end of what the command wrote. Default
33
+ 4096.
34
+ - `env` (optional): [`CommandEnv`](type-commandenv.md)
35
+
36
+ The environment variables of the command, each an Effect secret. `secret("x")` gives the
37
+ value, and `secret("x").path` gives the path of a file that holds the value. When `env` names
38
+ one, the command runs in the Sandbox Effector against one commit, not in the Worktree that the
39
+ Agent changes. Without `env`, it runs in the Harness container, beside the Agent.
40
+
41
+ It refuses a name that is not a variable name, and `PATH`, `HOME` and `TMPDIR`: ``command(argv,
42
+ { env }): "<name>" is not a variable the author sets — PATH, HOME and TMPDIR are the
43
+ Effector's (ADR-0067)``.
44
+ - `pin` (optional): `boolean`
45
+
46
+ Only for a command whose `env` names an Effect secret. `true`: the input of the Effect names
47
+ the commit to run against (`{ sha }`, a full commit id, for example one that a Gate approved).
48
+ Default: the tip of the Agent's branch when the Effect starts.
49
+
50
+ It refuses `pin: true` on a command that names no Effect secret: ``command(argv, { pin: true
51
+ }) names no secret in its env: `pin` chooses the commit a credentialed command runs against in
52
+ the Sandbox Effector, and a command that names no secret runs in the live Worktree (ADR-0067)
53
+ — name its secret, command(argv, { env: { NAME: secret("x") }, pin: true }), or drop `pin` ``.
54
+
55
+ When it starts, it refuses an input `sha` that is not a full commit id: `command "<slot>"
56
+ (pin): its input's sha is not a full commit id`.
@@ -0,0 +1,122 @@
1
+ ---
2
+ title: CommandOutput
3
+ description: "The output of a `command` Effect: what the `onDone` of its state gets as `event.output`."
4
+ ---
5
+
6
+ # `CommandOutput`
7
+
8
+ Type, in `@jr2/orchestrator/src/effect.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Effects.
9
+
10
+ ```ts
11
+ type CommandOutput = (ExecOutcome & { dirty?: boolean }) | Unknown | LaterOutcome;
12
+ ```
13
+
14
+ The output of a `command` Effect: what the `onDone` of its state gets as `event.output`. Every
15
+ outcome is output. A failed program is output too. Route on `outcome`:
16
+
17
+ - `exited`: the program ended. `code` is its exit code. A program that the container does not
18
+ have is `exited` with code 127.
19
+ - `timeout`: the command ran past its `timeout`, and jr2 killed it.
20
+ - `killed`: a signal ended it. `signal` names the signal.
21
+ - `unknown`: jr2 cannot tell what the command did, for example because the Harness restarted
22
+ while it ran. `reason` tells why. jr2 does not run it again.
23
+
24
+ `tail` is the end of what the command wrote, at most the `tail` option of `command` in
25
+ characters. `dirty` is `true` when a command that names an Effect secret ran against a commit,
26
+ and the Worktree held changes that it did not see.
27
+
28
+ The union is open ([`LaterOutcome`](type-lateroutcome.md)): give the rest a last arm with no guard.
29
+
30
+ **Forms**: it is one of these objects.
31
+
32
+ - Form 1: `outcome`, `code`, `tail`, `dirty`
33
+
34
+ - `outcome`: `"exited"`
35
+ - `code`: `number`
36
+ - `tail`: `string`
37
+ - `dirty` (optional): `boolean`
38
+ - Form 2: `outcome`, `tail`, `dirty`
39
+
40
+ - `outcome`: `"timeout"`
41
+ - `tail`: `string`
42
+ - `dirty` (optional): `boolean`
43
+ - Form 3: `outcome`, `signal`, `tail`, `dirty`
44
+
45
+ - `outcome`: `"killed"`
46
+ - `signal`: `string`
47
+ - `tail`: `string`
48
+ - `dirty` (optional): `boolean`
49
+ - Form 4: `outcome`, `reason`
50
+
51
+ - `outcome`: `"unknown"`
52
+ - `reason`: `string`
53
+ - Form 5: `outcome`, `reason`
54
+
55
+ - `outcome`: `"(a later outcome)"`
56
+ - `reason` (optional): `string`
57
+
58
+ **Example**
59
+
60
+ ```ts
61
+ import {
62
+ command,
63
+ type CommandOutput,
64
+ fail,
65
+ isReady,
66
+ jr2Setup,
67
+ workspace,
68
+ worktree,
69
+ type Workspaced,
70
+ } from "@jr2/orchestrator";
71
+
72
+ type Input = Workspaced<{}, "app">;
73
+
74
+ const testTree = (context: Input) => `${context.workspace.repos.app}/test` as const;
75
+
76
+ const passed = (output: CommandOutput): boolean =>
77
+ output.outcome === "exited" && output.code === 0;
78
+
79
+ const body = jr2Setup({
80
+ types: {} as { context: Input; input: Input },
81
+ actors: { cut: worktree(), tests: command(["npm", "test"], { timeout: "15m" }), fail: fail() },
82
+ }).createMachine({
83
+ id: "tests",
84
+ context: ({ input }) => input,
85
+ on: { "workspace.lost": ".lost" },
86
+ initial: "cutting",
87
+ states: {
88
+ cutting: {
89
+ invoke: {
90
+ src: "cut",
91
+ input: ({ context }) => ({ path: testTree(context), branch: "tests" }),
92
+ onDone: [{ guard: ({ event }) => isReady(event.output), target: "testing" }, { target: "notCut" }],
93
+ },
94
+ },
95
+ testing: {
96
+ invoke: {
97
+ src: "tests",
98
+ input: ({ context }) => ({ worktree: testTree(context) }),
99
+ onDone: [
100
+ { guard: ({ event }) => passed(event.output), target: "green" },
101
+ { target: "red" },
102
+ ],
103
+ },
104
+ },
105
+ green: { type: "final" },
106
+ // Not a final state: a final state means `done`, and the run ends `failed` here.
107
+ red: { invoke: { src: "fail", input: { reason: "npm test did not pass" } } },
108
+ notCut: { invoke: { src: "fail", input: { reason: "the Worktree was not cut" } } },
109
+ lost: { invoke: { src: "fail", input: { reason: "the Sandbox is gone" } } },
110
+ },
111
+ });
112
+
113
+ export const machine = workspace(body, {
114
+ repos: { app: { url: "https://github.com/you/app.git" } },
115
+ });
116
+ ```
117
+
118
+ **See also**
119
+
120
+ - [Effects](../../concepts/effects.md)
121
+ - [Run a command or call a URL with an Effect](../../guides/run-a-command-or-call-a-url.md)
122
+ - [ADR-0067: An Effect is an actor slot, and runs at most once unless marked idempotent](../decisions/0067-an-effect-is-an-actor-slot-and-runs-at-most-once-unless-marked-idempotent.md)
@@ -0,0 +1,111 @@
1
+ ---
2
+ title: Customize
3
+ description: "The parts of one Machine that `customize()` can retune: its Agents, its Open Effects, the Machines it composes, and the Sandbox of its `workspace()`."
4
+ ---
5
+
6
+ # `Customize`
7
+
8
+ Type, in `@jr2/orchestrator/src/customize.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Composition.
9
+
10
+ ```ts
11
+ type Customize<M extends AnyStateMachine> = {
12
+ agents?: [AgentSlots<Reached<M>>] extends [never]
13
+ ? never
14
+ : { [K in AgentSlots<Reached<M>>]?: Partial<AgentDefinition> };
15
+ effects?: [OpenEffectSlots<Reached<M>>] extends [never]
16
+ ? never
17
+ : { [K in OpenEffectSlots<Reached<M>>]?: BindingOf<LogicAt<Reached<M>, K>> };
18
+ actors?: [ChildSlots<Reached<M>>] extends [never]
19
+ ? never
20
+ : { [K in ChildSlots<Reached<M>>]?: Customize<ChildAt<Reached<M>, K>> };
21
+ image?: string;
22
+ user?: string | UserContainer;
23
+ resources?: Size;
24
+ repos?: [RepoSlotsOf<M>] extends [never]
25
+ ? never
26
+ : { [K in RepoSlotsOf<M>]?: RepoSlot<Exclude<InputFrom<WorkspaceOf<M>>, undefined>> };
27
+ };
28
+ ```
29
+
30
+ The parts of one Machine that `customize()` can retune: its Agents, its Open Effects, the
31
+ Machines it composes, and the Sandbox of its `workspace()`. The type comes from the Machine
32
+ itself, so it offers only the parts that the Machine declares. A key for a part the Machine does
33
+ not declare does not compile. The `agents`, `effects`, `actors` and `repos` keys take no value
34
+ when the Machine has no such part. `image`, `user` and `resources` compile on every Machine, and
35
+ `customize()` refuses them when the Machine composes no `workspace()`.
36
+
37
+ Every key is optional. Write only what you change.
38
+
39
+ **Fields**
40
+
41
+ - `agents` (optional): `[ AgentSlots<Reached<M>> ] extends [ never ] ? never : { [K in AgentSlots<Reached<M>>]?: Partial<AgentDefinition>; }`
42
+
43
+ Retune the Agents that this Machine carries, by slot name: `{ coder: { model } }`. Each
44
+ override goes over the definition that the author wrote, field by field, so `{ model }` alone
45
+ keeps the author's instructions. When the author left the model Open, this is where you bind
46
+ it. Allowed fields: the fields of an `agent()` definition. At run time, `customize()` refuses a
47
+ slot that holds no Agent: `customize(): machine "<id>" carries no Agent slot "<slot>" — its
48
+ Agents are: <slots>`.
49
+ - `effects` (optional): `[ OpenEffectSlots<Reached<M>> ] extends [ never ] ? never : { [K in OpenEffectSlots<Reached<M>>]?: BindingOf<LogicAt<Reached<M>, K>>; }`
50
+
51
+ Bind the Open parts of this Machine's Effects, by slot name: `{ url }` for an `http` Effect
52
+ whose url is Open, `{ argv }` for a `command` whose argv is Open, `{ secret }` for an Effect
53
+ that names `secret(open)`, `{ target: { url, token: secret("<name>") } }` for a `dispatch`
54
+ whose target is Open. For an Effect with two Open parts, one object holds both keys, and
55
+ a binding that leaves one out does not compile. Only Effects with an Open part are offered.
56
+ See [`EffectBinding`](type-effectbinding.md) for the values and the refusals.
57
+ - `actors` (optional): `[ ChildSlots<Reached<M>> ] extends [ never ] ? never : { [K in ChildSlots<Reached<M>>]?: Customize<ChildAt<Reached<M>, K>>; }`
58
+
59
+ Retune a Machine that this Machine composes, by slot name. The value has the same shape as
60
+ these parts, one level down. At run time, `customize()` refuses a slot that holds no Machine:
61
+ `customize(): machine "<id>" composes no Machine under "<slot>"`.
62
+ - `image` (optional): `string`
63
+
64
+ The Sandbox Image: a `file:` URL to a docker context that your module ships
65
+ (`import.meta.resolve("./image")`), which `jr2 up` builds, or a registry ref. It replaces the
66
+ image of the `workspace()`. When the Machine composes no `workspace()`, `customize()` refuses it
67
+ at run time.
68
+ - `user` (optional): `string | UserContainer`
69
+
70
+ The User Container: its image, as a `file:` URL or a registry ref, or a
71
+ [`UserContainer`](type-usercontainer.md) that also gives its part of the Size. It replaces the whole User
72
+ Container, its part of the Size included. When the Machine composes no `workspace()`,
73
+ `customize()` refuses it at run time.
74
+ - `resources` (optional): [`Size`](type-size.md)
75
+
76
+ The Size, layered field by field over the Size of the `workspace()`: `{ limits: { memory } }`
77
+ keeps the author's cpu. Only `limits.memory` and `limits.cpu`. See [`Size`](type-size.md). Only for a
78
+ Machine that composes a `workspace()`.
79
+ - `repos` (optional): `[ RepoSlotsOf<M> ] extends [ never ] ? never : { [K in RepoSlotsOf<M>]?: RepoSlot<Exclude<InputFrom<WorkspaceOf<M>>, undefined>>; }`
80
+
81
+ Bind the Repo Slots of the `workspace()`, by slot name. Each value is one of these:
82
+
83
+ - a url
84
+ - a Binding `{ url, ref? }`
85
+ - a function `({ input }) => url | { url, ref? }` over the run input
86
+ - `open`, to leave the slot for the next composer to bind
87
+
88
+ You can bind an Open slot, or give a bound or per-run slot a different Binding. A slot that
89
+ the Machine does not declare does not compile. Some Machines, such as `task`, leave their
90
+ whole slot map Open. Then you name every slot, and at least one. The keys are your names for
91
+ the Repos, and the Machine says what their order means.
92
+
93
+ **Example**
94
+
95
+ ```ts
96
+ import { customize, type Customize } from "@jr2/orchestrator";
97
+ import { task } from "@jr2/machines";
98
+
99
+ const parts: Customize<typeof task> = {
100
+ repos: { app: { url: "https://github.com/you/app.git", ref: "main" } },
101
+ agents: { coder: { model: "anthropic/claude-haiku-5-5", thinkingLevel: "high" } },
102
+ };
103
+
104
+ export const machine = customize(task, parts);
105
+ ```
106
+
107
+ **See also**
108
+
109
+ - [Bind a shipped Machine's Open parts](../../guides/bind-open-parts.md)
110
+ - [Composition](../../concepts/composition.md)
111
+ - [ADR-0049: A Machine carries its parts and composes by invoke](../decisions/0049-a-machine-carries-its-parts-and-composes-by-invoke.md)
@@ -0,0 +1,39 @@
1
+ ---
2
+ title: DispatchDefinition
3
+ description: The definition of a `dispatch` Effect (ADR-0071).
4
+ ---
5
+
6
+ # `DispatchDefinition`
7
+
8
+ Type, in `@jr2/orchestrator/src/dispatch-effect.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type DispatchDefinition<S extends z.ZodObject | undefined = undefined> = {
12
+ input?: S;
13
+ wait?: boolean;
14
+ timeout?: Duration;
15
+ target?: { url: string; token: NamedSecret } | typeof open;
16
+ };
17
+ ```
18
+
19
+ The definition of a `dispatch` Effect ([ADR-0071](../decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md)). Every field is optional.
20
+
21
+ **Fields**
22
+
23
+ - `input` (optional): `S`
24
+
25
+ A zod schema of the run input of the Workflow. It types the `input` of the invoke and
26
+ `fromPick`, and `jr2 up` compares it with the input that the Workflow declares. Without it,
27
+ only the Workflow checks the input.
28
+ - `wait` (optional): `boolean`
29
+
30
+ `true`: end when the new run ends (`settled`). `false`, the default: end when the
31
+ Orchestrator accepts the run (`started`).
32
+ - `timeout` (optional): [`Duration`](type-duration.md)
33
+
34
+ How long the Effect waits: by default 30s for the start, and 10m with `wait`.
35
+ - `target` (optional): `{ url: string; token: NamedSecret; } | typeof open`
36
+
37
+ A different Orchestrator: `url` is its origin, and `token` is the secret that holds its
38
+ Instance token. Or `open`, which the composer binds with `customize(<import>, { effects: {
39
+ <slot>: { target: { url, token } } } })`. Without it, the run starts in this Orchestrator.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: DispatchInput
3
+ description: "A dispatch's input: the run's body — the slot's schema's type, or any JSON object."
4
+ ---
5
+
6
+ # `DispatchInput`
7
+
8
+ Type, in `@jr2/orchestrator/src/dispatch-effect.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type DispatchInput<S> = S extends z.ZodObject ? z.infer<S> : Record<string, unknown>;
12
+ ```
13
+
14
+ A dispatch's input: the run's body — the slot's schema's type, or any JSON object.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: DispatchOpenParts
3
+ description: "The Open part a dispatch definition states: its target, when it is `open`."
4
+ ---
5
+
6
+ # `DispatchOpenParts`
7
+
8
+ Type, in `@jr2/orchestrator/src/dispatch-effect.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type DispatchOpenParts<T> = T extends typeof open ? "target" : never;
12
+ ```
13
+
14
+ The Open part a dispatch definition states: its target, when it is `open`.
@@ -0,0 +1,72 @@
1
+ ---
2
+ title: DispatchOutput
3
+ description: The output of a `dispatch` Effect.
4
+ ---
5
+
6
+ # `DispatchOutput`
7
+
8
+ Type, in `@jr2/orchestrator/src/effect.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Effects.
9
+
10
+ ```ts
11
+ type DispatchOutput =
12
+ | { outcome: "started"; run: string }
13
+ | {
14
+ outcome: "settled";
15
+ run: string;
16
+ status: "done" | "failed" | "error" | "cancelled" | "lost" | "drifted" | "live";
17
+ output?: unknown;
18
+ }
19
+ | { outcome: "refused"; status: number; report: string[] }
20
+ | { outcome: "unreachable"; reason: string }
21
+ | Unknown
22
+ | LaterOutcome;
23
+ ```
24
+
25
+ The output of a `dispatch` Effect. Route on `outcome`:
26
+
27
+ - `started`: the Orchestrator accepted the new run. `run` is its id.
28
+ - `settled`: with `wait`, the new run ended. `status` is `done`, `failed`, `error`, `cancelled`,
29
+ `lost` or `drifted`, and `output` is the output of its Machine. For `failed`, `output` is the
30
+ Failure, `{ reason, detail? }`. `status` is `live` when the timeout came first, and the run
31
+ continues.
32
+ - `refused`: the Orchestrator started no run. `status` is the HTTP status: 400 for an input that
33
+ the Workflow does not take, 404 for a Workflow that it does not have, 409 for a named Chart that
34
+ cannot run now, 422 for a Chart that it refuses. `report` holds the lines of the refusal.
35
+ - `unreachable`: the Orchestrator of the target did not answer. No run started.
36
+ - `unknown`: jr2 cannot tell if a run started.
37
+
38
+ The union is open ([`LaterOutcome`](type-lateroutcome.md)): give the rest a last arm with no guard.
39
+
40
+ **Forms**: it is one of these objects.
41
+
42
+ - Form 1: `outcome`, `reason`
43
+
44
+ - `outcome`: `"unknown"`
45
+ - `reason`: `string`
46
+ - Form 2: `outcome`, `run`
47
+
48
+ - `outcome`: `"started"`
49
+ - `run`: `string`
50
+ - Form 3: `outcome`, `run`, `status`, `output`
51
+
52
+ - `outcome`: `"settled"`
53
+ - `run`: `string`
54
+ - `status`: `"done" | "failed" | "error" | "cancelled" | "lost" | "drifted" | "live"`
55
+ - `output` (optional): `unknown`
56
+ - Form 4: `outcome`, `status`, `report`
57
+
58
+ - `outcome`: `"refused"`
59
+ - `status`: `number`
60
+ - `report`: `string[]`
61
+ - Form 5: `outcome`, `reason`
62
+
63
+ - `outcome`: `"unreachable"`
64
+ - `reason`: `string`
65
+ - Form 6: `outcome`, `reason`
66
+
67
+ - `outcome`: `"(a later outcome)"`
68
+ - `reason` (optional): `string`
69
+
70
+ **See also**
71
+
72
+ - [Effects](../../concepts/effects.md)
@@ -0,0 +1,19 @@
1
+ ---
2
+ title: DoorlessInput
3
+ description: A type that the Authoring surface names.
4
+ ---
5
+
6
+ # `DoorlessInput`
7
+
8
+ Type, in `@jr2/orchestrator/src/workspace.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
9
+
10
+ ```ts
11
+ type DoorlessInput<TBody extends AnyStateMachine> =
12
+ unknown extends InputFrom<TBody>
13
+ ? unknown
14
+ : [keyof Omit<InputFrom<TBody>, "workspace">] extends [never]
15
+ ? unknown
16
+ : {} extends Omit<InputFrom<TBody>, "workspace">
17
+ ? Omit<InputFrom<TBody>, "workspace"> | undefined
18
+ : Omit<InputFrom<TBody>, "workspace">;
19
+ ```
@@ -0,0 +1,15 @@
1
+ ---
2
+ title: Duration
3
+ description: "A length of time: a positive number and a unit, `s`, `m` or `h`."
4
+ ---
5
+
6
+ # `Duration`
7
+
8
+ Type, in `@jr2/orchestrator/src/effect.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type Duration = `${number}s` | `${number}m` | `${number}h`;
12
+ ```
13
+
14
+ A length of time: a positive number and a unit, `s`, `m` or `h`. For example `"90s"`, `"10m"`
15
+ or `"1h"`.