@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,115 @@
1
+ ---
2
+ title: Workspaced
3
+ description: "The input of a `workspace()` body: the run input, plus `workspace`, the handles that the Workspace adds (`workspace.repos`, the folder of each Repo Slot)."
4
+ ---
5
+
6
+ # `Workspaced`
7
+
8
+ Type, in `@jr2/orchestrator/src/workspace.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Workspaces and Repos.
9
+
10
+ ```ts
11
+ type Workspaced<TInput, TSlots extends string> = WithoutEmptyIndex<TInput> & {
12
+ workspace: WorkspaceHandles<TSlots>;
13
+ };
14
+ ```
15
+
16
+ The input of a `workspace()` body: the run input, plus `workspace`, the handles that the
17
+ Workspace adds (`workspace.repos`, the folder of each Repo Slot). Use it as the type of
18
+ the body's input.
19
+
20
+ The first argument is the run input: the `input` schema of the `workspace()`. The second is the
21
+ Repo Slots that the body reads, by name (`"app"` or `"app" | "docs"`). Under `repos: open`, write
22
+ `string`: the body cannot know the names, so it reads the slots in order. For a `workspace()`
23
+ with no `repos`, write `never`. The second argument has no default.
24
+
25
+ A body under a root `workspace()` also gets the fields of `HostInjectedInput`. Add them when the
26
+ body reads them: `Workspaced<HostInjectedInput & RunInput, "app">`.
27
+
28
+ Its fields are the fields of the run input, and `workspace`. The run input can have no fields:
29
+ `Workspaced<z.infer<typeof door>, "app">` for the door `z.object({})` holds only `workspace`.
30
+
31
+ **Fields**: each field of [`WithoutEmptyIndex`](type-withoutemptyindex.md), and these:
32
+
33
+ - `workspace`: `WorkspaceHandles<TSlots>`
34
+
35
+ **Example**
36
+
37
+ ```ts
38
+ import { z } from "zod";
39
+ import {
40
+ agent,
41
+ defineEvent,
42
+ fail,
43
+ isReady,
44
+ jr2Setup,
45
+ workspace,
46
+ worktree,
47
+ type Workspaced,
48
+ } from "@jr2/orchestrator";
49
+
50
+ const done = defineEvent({
51
+ name: "done",
52
+ description: "Call this when REVIEW.md is written.",
53
+ input: z.object({}),
54
+ });
55
+ const runInput = z.object({ sha: z.string() });
56
+ type BodyInput = Workspaced<z.infer<typeof runInput>, "app">;
57
+
58
+ // A handle is the slot's folder: `/work/app`. A helper returns `as const`, so that the compiler
59
+ // sees the slot.
60
+ const reviewTree = (context: BodyInput) => `${context.workspace.repos.app}/review` as const;
61
+
62
+ const body = jr2Setup({
63
+ types: {} as { input: BodyInput; context: BodyInput },
64
+ events: [done],
65
+ actors: {
66
+ reviewer: agent({
67
+ model: "anthropic/claude-haiku-5-5",
68
+ instructions: "You review one commit and write REVIEW.md.",
69
+ workspace: "read",
70
+ }),
71
+ cut: worktree(),
72
+ fail: fail(),
73
+ },
74
+ }).createMachine({
75
+ id: "review",
76
+ context: ({ input }) => input,
77
+ on: { "workspace.lost": ".lost", "agent.fault": ".failed" },
78
+ initial: "cutting",
79
+ states: {
80
+ cutting: {
81
+ invoke: {
82
+ src: "cut",
83
+ input: ({ context }) => ({ path: reviewTree(context), detach: context.sha }),
84
+ onDone: [{ guard: ({ event }) => isReady(event.output), target: "reviewing" }, { target: "notCut" }],
85
+ },
86
+ },
87
+ reviewing: {
88
+ invoke: {
89
+ src: "reviewer",
90
+ input: ({ context }) => ({
91
+ prompt: `Review commit ${context.sha}.`,
92
+ cwd: reviewTree(context),
93
+ }),
94
+ },
95
+ on: { done: "finished" },
96
+ },
97
+ finished: { type: "final" },
98
+ notCut: { invoke: { src: "fail", input: { reason: "the Worktree was not cut" } } },
99
+ failed: { invoke: { src: "fail", input: { reason: "the Agent's Turn could not go on" } } },
100
+ lost: { invoke: { src: "fail", input: { reason: "the Sandbox is gone" } } },
101
+ },
102
+ });
103
+
104
+ export const machine = workspace(body, {
105
+ input: runInput,
106
+ repos: { app: "https://github.com/you/app.git" },
107
+ });
108
+ ```
109
+
110
+ **See also**
111
+
112
+ - [Workspaces](../../concepts/workspaces.md)
113
+ - [Write a Workflow](../../guides/write-a-workflow.md)
114
+ - [ADR-0012: `workspace()` wraps a body Machine and owns only Sandbox lifecycle](../decisions/0012-workspace-wrapper-machine.md)
115
+ - [ADR-0051: A Repo is a slot on the `workspace()` and a cache on the node](../decisions/0051-a-repo-is-a-slot-on-the-workspace-and-a-cache-on-the-node.md)
@@ -0,0 +1,22 @@
1
+ ---
2
+ title: WorkspaceHandles
3
+ description: "What the body of a `workspace()` gets as `input.workspace`: the folder of each Repo Slot."
4
+ ---
5
+
6
+ # `WorkspaceHandles`
7
+
8
+ Type, in `@jr2/orchestrator/src/workspace.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 WorkspaceHandles<TSlots extends string> = [TSlots] extends [never]
12
+ ? { repos: Record<never, string> }
13
+ : SlotHandles<TSlots>;
14
+ ```
15
+
16
+ What the body of a `workspace()` gets as `input.workspace`: the folder of each Repo Slot. A path
17
+ is correct in each Instance that registers the Machine.
18
+
19
+ `TSlots` is the names of the Repo Slots that the body reads. `workspace()` refuses a body that
20
+ names a slot that the Workspace does not have. Write `string` for a body that names no slot and
21
+ reads the folders in the order of `repos`, as under `repos: open`. Write `never` for a
22
+ Workspace with no Repo Slot: its handles are `{ repos: {} }`, and its Agents work in `/work`.
@@ -0,0 +1,29 @@
1
+ ---
2
+ title: WorkspaceMachine
3
+ description: A type that the Authoring surface names.
4
+ ---
5
+
6
+ # `WorkspaceMachine`
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 WorkspaceMachine<TInput, TOutput, TBody extends AnyStateMachine, TSlots extends string> = StateMachine<
12
+ any,
13
+ any,
14
+ any,
15
+ WrapperActors<"body", TBody, "place" | "provision" | "attach" | "registrar" | "lease" | "destroy" | "fail">,
16
+ any,
17
+ any,
18
+ any,
19
+ any,
20
+ any,
21
+ TInput,
22
+ TOutput,
23
+ any,
24
+ any,
25
+ any
26
+ > &
27
+ JR2Wrapper<TBody> &
28
+ JR2Repos<TSlots>;
29
+ ```
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: WorkspaceOf
3
+ description: A type that the Authoring surface names.
4
+ ---
5
+
6
+ # `WorkspaceOf`
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 WorkspaceOf<M extends AnyStateMachine> =
12
+ M extends JR2Repos<any> ? M : M extends JR2Wrapper<infer TBody> ? WorkspaceOf<TBody> : never;
13
+ ```
@@ -0,0 +1,27 @@
1
+ ---
2
+ title: WorkspaceOptions
3
+ description: The options of a `workspace()` that declares the input that starts a run.
4
+ ---
5
+
6
+ # `WorkspaceOptions`
7
+
8
+ Type, in `@jr2/orchestrator/src/workspace.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 WorkspaceOptions<TSchema extends z.ZodObject, TSlots extends string> = SandboxOptions<
12
+ TSlots,
13
+ z.infer<TSchema>
14
+ > & {
15
+ input: TSchema;
16
+ };
17
+ ```
18
+
19
+ The options of a `workspace()` that declares the input that starts a run.
20
+
21
+ **Fields**: each field of [`SandboxOptions`](type-sandboxoptions.md), and these:
22
+
23
+ - `input`: `TSchema`
24
+
25
+ The input that starts a run, as a `z.object`. jr2 checks each start against it. It also types
26
+ the `input` of a per-run Repo Slot, and the body must accept it plus the
27
+ `workspace` handles. Write it here, not on the body.
@@ -0,0 +1,16 @@
1
+ ---
2
+ title: WorktreeFound
3
+ description: "What a cut found: `held`, a cut made this Worktree earlier, so what is in it is earlier work; `local`, a local branch; `remote`, `origin/<branch>`, now tracked; `none`, a new branch with no upstream; `commit`, a detached cut."
4
+ ---
5
+
6
+ # `WorktreeFound`
7
+
8
+ Type, in `@jr2/orchestrator/src/worktree.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Effects.
9
+
10
+ ```ts
11
+ type WorktreeFound = "held" | "local" | "remote" | "none" | "commit" | (string & {});
12
+ ```
13
+
14
+ What a cut found: `held`, a cut made this Worktree earlier, so what is in it is earlier work;
15
+ `local`, a local branch; `remote`, `origin/<branch>`, now tracked; `none`, a new branch with no
16
+ upstream; `commit`, a detached cut. Open: a later value does not break an author's code.
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: WorktreeInput
3
+ description: "The input of a `worktree()`: a branch Worktree, or a detached one."
4
+ ---
5
+
6
+ # `WorktreeInput`
7
+
8
+ Type, in `@jr2/orchestrator/src/worktree.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Effects.
9
+
10
+ ```ts
11
+ type WorktreeInput =
12
+ | {
13
+ path: AnyWorktreePath;
14
+ branch: string;
15
+ from?: string;
16
+ detach?: never;
17
+ expect?: never;
18
+ }
19
+ | {
20
+ path: AnyWorktreePath;
21
+ detach: string;
22
+ branch?: never;
23
+ from?: never;
24
+ expect?: never;
25
+ };
26
+ ```
27
+
28
+ The input of a `worktree()`: a branch Worktree, or a detached one.
29
+
30
+ **Forms**: it is one of these objects.
31
+
32
+ - Form 1: `path`, `branch`, `from`, `detach`, `expect`
33
+
34
+ - `path`: [`AnyWorktreePath`](type-anyworktreepath.md)
35
+
36
+ The root of the Worktree: `${context.workspace.repos.app}/<name>`, a constant word.
37
+ - `branch`: `string`
38
+
39
+ The branch. It resolves as a local branch, then `origin/<branch>` (tracked), then a new
40
+ branch.
41
+ - `from` (optional): `string`
42
+
43
+ Where a new branch starts. Default: the Binding's base. On a branch that exists, it must
44
+ be that branch's tip, or the cut is `refused`.
45
+ - `detach` (optional): `never`
46
+ - `expect` (optional): `never`
47
+ - Form 2: `path`, `detach`, `branch`, `from`, `expect`
48
+
49
+ - `path`: [`AnyWorktreePath`](type-anyworktreepath.md)
50
+ - `detach`: `string`
51
+
52
+ The commit to check out, with no branch. The Worktree is forced to it and cleaned on each
53
+ cut. Ignored files stay, so that a reviewer can run the tests.
54
+ - `branch` (optional): `never`
55
+ - `from` (optional): `never`
56
+ - `expect` (optional): `never`
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: WorktreeKey
3
+ description: A type that the Authoring surface names.
4
+ ---
5
+
6
+ # `WorktreeKey`
7
+
8
+ Type, in `@jr2/orchestrator/src/effect.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 WorktreeKey<Opt> = [Opt] extends [{ readonly env: object }]
12
+ ? { worktree: AnyWorktreePath }
13
+ : { worktree?: AnyWorktreePath };
14
+ ```
@@ -0,0 +1,29 @@
1
+ ---
2
+ title: WorktreeOptions
3
+ description: The options of `worktree()`.
4
+ ---
5
+
6
+ # `WorktreeOptions`
7
+
8
+ Type, in `@jr2/orchestrator/src/worktree.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Effects.
9
+
10
+ ```ts
11
+ type WorktreeOptions = {
12
+ expect?: "new" | "existing";
13
+ timeout?: Duration;
14
+ };
15
+ ```
16
+
17
+ The options of `worktree()`.
18
+
19
+ **Fields**
20
+
21
+ - `expect` (optional): `"new" | "existing"`
22
+
23
+ `"new"`: refuse a branch that exists, local or on the remote. For a name that a planner or a
24
+ door chose for new work: a collision is a refusal, not someone else's branch. `"existing"`:
25
+ refuse a branch that does not exist, and make nothing. For a run that must continue a branch.
26
+ A Chart cannot change it, and a cut lent to a Chart must state it.
27
+ - `timeout` (optional): [`Duration`](type-duration.md)
28
+
29
+ How long the fetch and the cut can take. Default `"10m"`.
@@ -0,0 +1,45 @@
1
+ ---
2
+ title: WorktreeOutput
3
+ description: The output of a `worktree()`.
4
+ ---
5
+
6
+ # `WorktreeOutput`
7
+
8
+ Type, in `@jr2/orchestrator/src/worktree.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Effects.
9
+
10
+ ```ts
11
+ type WorktreeOutput<S extends string = string> = WorktreeReady<S> | WorktreeRefused | Unknown | LaterOutcome;
12
+ ```
13
+
14
+ The output of a `worktree()`. `unknown`: its state exited while it ran, or the cut did not end.
15
+
16
+ **Forms**: it is one of these objects.
17
+
18
+ - Form 1: `outcome`, `reason`
19
+
20
+ - `outcome`: `"unknown"`
21
+ - `reason`: `string`
22
+ - Form 2: `outcome`, `slot`, `path`, `branch`, `head`, `found`, `stale`
23
+
24
+ - `outcome`: `"ready"`
25
+ - `slot`: `S`
26
+ - `path`: `WorktreePath<S>`
27
+ - `branch`: `string | null`
28
+
29
+ The branch of the cut, from git and the cut's record, never from the folder or HEAD. `null`
30
+ when the Worktree is detached.
31
+ - `head`: `string`
32
+
33
+ The tip of `branch` (of the commit, when detached). Never HEAD.
34
+ - `found`: [`WorktreeFound`](type-worktreefound.md)
35
+ - `stale` (optional): `string`
36
+
37
+ [ADR-0053](../decisions/0053-a-fetch-inside-the-pod-asks-the-node-cache-and-the-cache-asks-the-remote.md)'s words when the remote did not answer. The cut used what the clone holds.
38
+ - Form 3: `outcome`, `reason`
39
+
40
+ - `outcome`: `"refused"`
41
+ - `reason`: `string`
42
+ - Form 4: `outcome`, `reason`
43
+
44
+ - `outcome`: `"(a later outcome)"`
45
+ - `reason` (optional): `string`
@@ -0,0 +1,16 @@
1
+ ---
2
+ title: WorktreePath
3
+ description: A Worktree of the Repo Slots `S`.
4
+ ---
5
+
6
+ # `WorktreePath`
7
+
8
+ Type, in `@jr2/orchestrator/src/worktree.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Effects.
9
+
10
+ ```ts
11
+ type WorktreePath<S extends string> = `/work/${S}/${NameStart}${string}`;
12
+ ```
13
+
14
+ A Worktree of the Repo Slots `S`. One segment below the slot, that starts with a letter, a
15
+ digit or `_`: `${context.workspace.repos.app}/run`. The compiler sees the start of the name; a
16
+ `/` further on is the Effect's own refusal.
@@ -0,0 +1,37 @@
1
+ ---
2
+ title: WorktreeReady
3
+ description: Type, an export of @jr2/orchestrator.
4
+ ---
5
+
6
+ # `WorktreeReady`
7
+
8
+ Type, in `@jr2/orchestrator/src/worktree.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Effects.
9
+
10
+ ```ts
11
+ type WorktreeReady<S extends string = string> = {
12
+ outcome: "ready";
13
+ slot: S;
14
+ path: WorktreePath<S>;
15
+ branch: string | null;
16
+ head: string;
17
+ found: WorktreeFound;
18
+ stale?: string;
19
+ };
20
+ ```
21
+
22
+ **Fields**
23
+
24
+ - `outcome`: `"ready"`
25
+ - `slot`: `S`
26
+ - `path`: `WorktreePath<S>`
27
+ - `branch`: `string | null`
28
+
29
+ The branch of the cut, from git and the cut's record, never from the folder or HEAD. `null`
30
+ when the Worktree is detached.
31
+ - `head`: `string`
32
+
33
+ The tip of `branch` (of the commit, when detached). Never HEAD.
34
+ - `found`: [`WorktreeFound`](type-worktreefound.md)
35
+ - `stale` (optional): `string`
36
+
37
+ [ADR-0053](../decisions/0053-a-fetch-inside-the-pod-asks-the-node-cache-and-the-cache-asks-the-remote.md)'s words when the remote did not answer. The cut used what the clone holds.
@@ -0,0 +1,21 @@
1
+ ---
2
+ title: WorktreeRefused
3
+ description: "No Worktree, and nothing changed: a bad path, a name git or the push refuses, a re-cut that does not agree with the first, a branch that another Worktree holds, an `expect` that does not hold, or a name that the remote cannot confirm."
4
+ ---
5
+
6
+ # `WorktreeRefused`
7
+
8
+ Type, in `@jr2/orchestrator/src/worktree.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Effects.
9
+
10
+ ```ts
11
+ type WorktreeRefused = { outcome: "refused"; reason: string };
12
+ ```
13
+
14
+ No Worktree, and nothing changed: a bad path, a name git or the push refuses, a re-cut that does
15
+ not agree with the first, a branch that another Worktree holds, an `expect` that does not hold, or a
16
+ name that the remote cannot confirm.
17
+
18
+ **Fields**
19
+
20
+ - `outcome`: `"refused"`
21
+ - `reason`: `string`