@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,146 @@
1
+ ---
2
+ title: Cancel a run
3
+ description: End a live run with CANCEL, and delete its Sandboxes or keep them to look inside.
4
+ ---
5
+
6
+ # Cancel a run
7
+
8
+ End a live run with `CANCEL`, and delete its [Sandboxes](../reference/glossary.md#sandbox) or keep them to look inside.
9
+
10
+ In the commands on this page, replace these values:
11
+
12
+ - `<run id>`: the id of the run. A prefix of the id, 4 characters or more, also works with `jr2`. `jr2 run` prints the
13
+ id in the line `run <run id> (<workflow>) — attached`.
14
+ - `<namespace>`: the namespace of your [Instance](../reference/glossary.md#instance). It is the
15
+ [`name`](../reference/config.md#name) in `jr2.config.ts`. When `jr2.config.ts` sets no `name`, it is the name of the
16
+ Instance folder.
17
+ - `<context>`: the kubectl context that `jr2` uses. It is the current kubectl context, or the value of `--context`.
18
+
19
+ Give each `jr2` command in the Instance folder.
20
+
21
+ ## Cancel the run
22
+
23
+ ```sh
24
+ jr2 send <run id> --event CANCEL
25
+ ```
26
+
27
+ ```text
28
+ → context <context> / namespace <namespace>
29
+ sent CANCEL to 0a90c659-a2f4-44ed-ae03-ca711ca30ce4
30
+ ```
31
+
32
+ `jr2` prints the full run id, also when you give a prefix. Your run id is different. Then these things occur:
33
+
34
+ - The run ends with the status `cancelled`. It does not start again when the
35
+ [Orchestrator](../reference/glossary.md#orchestrator) restarts.
36
+ - The [Turn](../reference/glossary.md#turn) of each [Agent](../reference/glossary.md#agent) in the run ends.
37
+ - The Orchestrator deletes each Sandbox of the run. When a Sandbox goes, a commit that you did not push goes with it.
38
+ - A run that a `dispatch` [Effect](../reference/glossary.md#effect) of this run started does not end. It is a run of its
39
+ own. Cancel it with its own run id. `jr2 status <run id>` lists it in a `dispatched:` line. See
40
+ [Start a run from a run](start-a-run-from-a-run.md).
41
+
42
+ A `jr2 run` that is attached to the run prints `→ cancelled`, then the state that the run was in. Then it prints the
43
+ status of the run as JSON and exits with the code 0.
44
+
45
+ ## Keep the Sandboxes
46
+
47
+ To look inside the Sandboxes after the run ends, add `--keep`:
48
+
49
+ ```sh
50
+ jr2 send <run id> --event CANCEL --keep
51
+ ```
52
+
53
+ ```text
54
+ → context <context> / namespace <namespace>
55
+ sent CANCEL to 723cf388-c1cf-4b42-a628-8b7715754ca1; its Workspaces are kept
56
+ ```
57
+
58
+ The run ends as before, but the Orchestrator does not delete its Sandboxes. To open a shell in one, see
59
+ [Look inside a Sandbox](look-inside-a-sandbox.md). A [Workspace](../reference/glossary.md#workspace) in
60
+ [Placing](../reference/glossary.md#placing) deletes its Sandbox at once, also with `--keep`. Its Sandbox has no node
61
+ yet, so it has nothing to look inside.
62
+
63
+ Nothing renews the [Lease](../reference/glossary.md#lease) of a Workspace that you keep. The
64
+ [operator](../concepts/architecture.md#the-operator) deletes its Sandbox 30 minutes after the last renewal. To delete
65
+ the Sandbox before then, find its name. The label `jr2.dev/run` takes the full run id that `jr2 send` printed:
66
+
67
+ ```sh
68
+ kubectl -n <namespace> get sandboxes -l jr2.dev/run=<run id>
69
+ ```
70
+
71
+ [Look inside a Sandbox](look-inside-a-sandbox.md#find-the-sandbox) shows the output of this command. Then give the name
72
+ to this command:
73
+
74
+ ```sh
75
+ kubectl -n <namespace> delete sandbox <sandbox>
76
+ ```
77
+
78
+ ```text
79
+ sandbox.core.jr2.dev "ws-723cf388-x-12-1k4kghb" deleted from <namespace> namespace
80
+ ```
81
+
82
+ Your Sandbox name is different.
83
+
84
+ ## Read how the run ended
85
+
86
+ ```sh
87
+ jr2 status <run id>
88
+ ```
89
+
90
+ ```text
91
+ → context <context> / namespace <namespace>
92
+ {"runId":"0a90c659-a2f4-44ed-ae03-ca711ca30ce4","workflow":"task","instanceId":"19b49b58-2ea4-4d79-b100-49aad6e12013","status":"cancelled","value":"running",…}
93
+ ```
94
+
95
+ `jr2 status` prints the status of the run as one line of JSON. Its `status` is `cancelled`, and its `value` is the state
96
+ that the run was in when you cancelled it.
97
+
98
+ ## Cancel from HTTP
99
+
100
+ A client that is not the CLI sends `CANCEL` to
101
+ [`POST /runs/:runId/events`](../reference/http-api.md#post-runs-runid-events), with the Instance token. The path takes
102
+ the full run id, not a prefix. To get the Instance token, see
103
+ [Open the Console](open-the-console.md#get-the-instance-token). To keep the Sandboxes, add `"keep": true` to the body.
104
+ This example reaches the Orchestrator through the port forward in [Open the Console](open-the-console.md):
105
+
106
+ ```sh
107
+ curl -X POST http://localhost:4000/runs/<run id>/events \
108
+ -H "authorization: Bearer <Instance token>" \
109
+ -d '{"type":"CANCEL","keep":true}'
110
+ ```
111
+
112
+ ```text
113
+ {"ok":true}
114
+ ```
115
+
116
+ ## Rules
117
+
118
+ - `--keep` goes only with `--event CANCEL`. With `--gate` or with a different event, `jr2 send` exits with the code 2:
119
+ `jr2 send: --keep goes with --event CANCEL alone (it keeps a cancelled run's Workspaces)`
120
+ - Without `--gate`, `CANCEL` is the only event. Each other event exits with the code 2:
121
+ `jr2 send: unknown event "<event>" (run control accepts: CANCEL; workflow events need --gate)`. To send an event of
122
+ the [Workflow](../reference/glossary.md#workflow) to a [Gate](../reference/glossary.md#gate), see
123
+ [Answer a Gate](answer-a-gate.md).
124
+ - A prefix of fewer than 4 characters exits with the code 2: `jr2: run id "<run id>" is too short (need 4+ characters)`
125
+ - A prefix that finds no run exits with the code 1: `no run "<run id>"`. A prefix that finds two or more runs exits with
126
+ the code 1, and lists them: `error: run id "<run id>" is ambiguous`
127
+ - `CANCEL` changes only a live run. A run that has already ended does not change, and `jr2 send` still prints
128
+ `sent CANCEL to <run id>`. A full id of no run also prints `sent CANCEL to <run id>`, because `jr2 send` does not look
129
+ up a full id.
130
+ - A run that faults is not live, so `CANCEL` does not delete its Sandboxes. The operator deletes them 30 minutes after
131
+ the last renewal of their Lease.
132
+ - A cancelled run does not continue. To do the work again, start a new run.
133
+ - [`POST /runs/:runId/events`](../reference/http-api.md#post-runs-runid-events) refuses a body with a different `type`
134
+ with the status 400: `unknown event type "<type>" (accepts: CANCEL)`
135
+ - It refuses a `keep` that is not `true` or `false` with the status 400: `"keep" must be a boolean`
136
+ - It refuses a request with no valid token with the status 401: `unauthorized`. It refuses a Sandbox token with the
137
+ status 403: `run state and control need the Instance token — a Sandbox token has neither`
138
+ - A path with a prefix of the run id, or with an id of no run, gets `{"ok":true}` with the status 200. Nothing changes.
139
+
140
+ ## Read next
141
+
142
+ - [Durable runs](../concepts/durable-runs.md)
143
+ - [ADR-0025](../reference/decisions/0025-cancel-ends-a-run-stop-parks-it.md): why CANCEL ends a run and deletes its
144
+ Sandboxes.
145
+ - [`jr2 send`](../reference/cli.md#send)
146
+ - [Look inside a Sandbox](look-inside-a-sandbox.md)
@@ -0,0 +1,206 @@
1
+ ---
2
+ title: Clean up
3
+ description: Remove old images and unused Repo resources with jr2 gc, and remove an Instance with jr2 down.
4
+ ---
5
+
6
+ # Clean up
7
+
8
+ Remove the images and the [Repo](../reference/glossary.md#repo) resources that nothing uses, or remove an
9
+ [Instance](../reference/glossary.md#instance) from its cluster.
10
+
11
+ The examples on this page use the [Get started](../get-started/install.md) names: the Instance `my-instance` and the
12
+ kubectl context `kind-jr2`. Your output shows your names, sizes and counts.
13
+
14
+ ## Know what removes images
15
+
16
+ You seldom need a command to remove images. [`jr2 up`](../reference/cli.md#up) removes the images that nothing uses at
17
+ the end of each converge that succeeds. [`jr2 down`](../reference/cli.md#down) removes them after it deletes the
18
+ namespace. [`jr2 gc`](../reference/cli.md#gc) does the same work when you ask for it, for example when your disk is
19
+ full.
20
+
21
+ jr2 removes only an image that it built and labeled, and only when no live root in the cluster names it. It removes the
22
+ image from your computer. On a kind cluster, it also removes it from each node. It does not remove an image from a
23
+ registry. [Converge](../concepts/converge.md#clean-up) explains the live roots.
24
+
25
+ ## See what jr2 gc removes
26
+
27
+ Run `jr2 gc` with `--dry-run` first. It removes nothing, and it lists each image and each Repo resource that it would
28
+ remove:
29
+
30
+ ```sh
31
+ jr2 gc --dry-run
32
+ ```
33
+
34
+ ```text
35
+ jr2 gc — images on kind-jr2 that no live root names (dry run: nothing is removed)
36
+ would sweep 1 image(s) (336.5 MB)
37
+ jr2-sandbox-my-instance-default:6389bdf72d50-amd64
38
+ repos: would sweep nothing — every Repo resource is bound by a Machine or was attached within 7d
39
+ ```
40
+
41
+ Here, the image is an old Sandbox Image that the last `jr2 up` kept on the kind node.
42
+
43
+ `jr2 gc` reads the cluster of the current kubectl context. It does not read an Instance folder, so you can run it from
44
+ any folder. It reads each Instance on the cluster, so it has no `-n` option. To use a different cluster, add
45
+ `--context <context>`.
46
+
47
+ ## Remove the images and the Repo resources
48
+
49
+ ```sh
50
+ jr2 gc
51
+ ```
52
+
53
+ ```text
54
+ jr2 gc — images on kind-jr2 that no live root names
55
+ swept 1 image(s) (336.5 MB)
56
+ repos: swept nothing — every Repo resource is bound by a Machine or was attached within 7d
57
+ ```
58
+
59
+ In this output, `jr2 gc` removed no Repo resource. `jr2 gc` does not ask you to confirm. It removes a Repo resource when
60
+ these two conditions are true:
61
+
62
+ - No registered [Machine](../reference/glossary.md#machine) binds the Repo.
63
+ - No run attached the Repo, and nothing made it, in the last 7 days.
64
+
65
+ After jr2 removes a Repo resource, the Repo cache on each node can remove its copy of the Repo. It removes the copy when
66
+ nothing on the node uses it. `--repo-ttl` changes the time limit of the second condition. For example, `--repo-ttl 12h`
67
+ removes a Repo resource that no Machine binds and that no run attached in the last 12 hours. `--repo-ttl 0` removes each
68
+ Repo resource that no Machine binds. The last line then gives the count and the time limit:
69
+ `repos: swept 1 Repo resource(s) no Machine binds and no run attached within 0`.
70
+
71
+ ## Remove an Instance from the cluster
72
+
73
+ Run `jr2 down` in the Instance folder:
74
+
75
+ ```sh
76
+ jr2 down
77
+ ```
78
+
79
+ ```text
80
+ remove instance "my-instance" from context kind-jr2 (delete namespace "my-instance")? [y/N] y
81
+ deleting namespace "my-instance" (runs, store, and Sandboxes go with it)
82
+ swept 2 image(s) (317.0 MB)
83
+ removed
84
+ ```
85
+
86
+ `jr2 down` asks you to confirm, unless you add `--yes`. Type `y`. Then it deletes the namespace of the Instance and
87
+ waits until the namespace is gone. These things go with the namespace:
88
+
89
+ - The [Orchestrator](../reference/glossary.md#orchestrator) and the runs, with the store of the runs.
90
+ - Each [Sandbox](../reference/glossary.md#sandbox). A commit that is not pushed is lost with its Sandbox.
91
+ - The [Instance Harness](../reference/glossary.md#instance-harness) and the conversations that it keeps.
92
+ - Each Secret in the namespace. This includes the Instance token and the Secrets that you made with `kubectl`, for
93
+ example for [`harness.envFrom`](../reference/config.md#harness-envfrom), for a `valueFrom` in
94
+ [`secrets`](../reference/config.md#secrets) and for the git ssh key.
95
+
96
+ Then `jr2 down` removes the images that nothing uses now. The Instance folder does not change.
97
+
98
+ To put the Instance on the cluster again, make your Secrets again first. Then run `jr2 up`. When `jr2 up` makes a new
99
+ deploy key for git, it is a new key. Register its public key again. See
100
+ [Give the cluster git credentials](give-the-cluster-git-credentials.md).
101
+
102
+ `jr2 down` does not remove the copies of the Repos on each node. They are in `/var/lib/jr2/<namespace>/repos` on the
103
+ node, and nothing uses them. On kind, they are in the node container, and they go when you delete the cluster.
104
+
105
+ To remove the Instance in CI, add `--yes`. To remove it from a different namespace or cluster, add `-n <namespace>` or
106
+ `--context <context>`.
107
+
108
+ ## Remove the operator too
109
+
110
+ The operator is in the namespace `jr2-system`. All the Instances on a cluster share it. When you remove the last
111
+ Instance, run `jr2 down --all` in place of `jr2 down`:
112
+
113
+ ```sh
114
+ jr2 down --all
115
+ ```
116
+
117
+ ```text
118
+ remove instance "my-instance" from context kind-jr2 (delete namespace "my-instance" AND the per-cluster operator)? [y/N] y
119
+ deleting namespace "my-instance" (runs, store, and Sandboxes go with it)
120
+ uninstalling the operator (jr2-system)
121
+ swept 2 image(s) (259.1 MB)
122
+ removed
123
+ ```
124
+
125
+ > **Danger**
126
+ >
127
+ > Use `--all` only when no other Instance is on the cluster. `--all` deletes the Sandbox and Repo resource types. Thus the
128
+ > Sandboxes and the Repo resources of each Instance on the cluster go with them.
129
+
130
+ `jr2 down --all` removes the operator only while the namespace of the Instance is on the cluster. After a plain
131
+ `jr2 down`, it refuses with `not deployed here …`. To remove the operator then, run `jr2 up` again. Then run
132
+ `jr2 down --all`. On kind, you can delete the cluster.
133
+
134
+ `jr2 down --all` does not remove the two PriorityClasses that `jr2 up` adds, `jr2-control` and `jr2-sandbox`. To remove
135
+ them, run this command:
136
+
137
+ ```sh
138
+ kubectl delete priorityclass jr2-control jr2-sandbox --ignore-not-found
139
+ ```
140
+
141
+ When [`priorityClasses`](../reference/config.md#priorityclasses) names your own class for `control` or `sandbox`,
142
+ `jr2 up` does not add `jr2-control` or `jr2-sandbox` for that tier.
143
+
144
+ ## Remove the kind cluster
145
+
146
+ Run `jr2 down` in each Instance folder. For the last one, add `--all`. Then delete the kind cluster:
147
+
148
+ ```sh
149
+ jr2 down --all
150
+ kind delete cluster --name jr2
151
+ ```
152
+
153
+ `jr2 down` removes the images of its Instance from your computer. `kind delete cluster` cannot do this, because the
154
+ images are in your docker, not in the cluster. The images that your Dockerfiles name in `FROM` stay, and so does the
155
+ build cache of docker.
156
+
157
+ ## Rules
158
+
159
+ - `jr2 down` runs only in an Instance folder. In a different folder, it exits with the code 1:
160
+ `error: not inside a jr2 instance — no jr2.config.ts found walking up from cwd`
161
+ - `jr2 down` with no kubectl context exits with the code 1: `error: no kube context — nothing to remove from`
162
+ - `jr2 down` refuses a namespace that holds no Instance, and exits with the code 1:
163
+ `not deployed here — namespace "<namespace>" on <context> holds no jr2 instance`. Check the context and the namespace.
164
+ `-n` and `--context` change them. `jr2 down --all` also refuses this way after a plain `jr2 down`, and the operator
165
+ stays.
166
+ - `jr2 down` refuses a namespace that belongs to a different Instance, and exits with the code 1:
167
+ `refusing: namespace "<namespace>" on <context> belongs to another instance ("<owner>")`
168
+ - When you do not type `y` or `yes`, `jr2 down` changes nothing, and exits with the code 1:
169
+ `aborted — nothing was changed`
170
+ - When no terminal is attached, `jr2 down` cannot ask, so it changes nothing. It prints
171
+ `<question> — not a tty; pass --yes to proceed non-interactively`, then `aborted — nothing was changed`. It exits with
172
+ the code 1. Add `--yes`.
173
+ - `jr2 down` refuses when the Instance and the [jr2 CLI](../reference/glossary.md#jr2-cli) do not use the same
174
+ [Kit version](../reference/glossary.md#kit-version). The refusal starts with
175
+ `error: Kit version mismatch — an Instance has one (ADR-0056):`. See
176
+ [Fix a failed converge](fix-a-failed-converge.md#rules).
177
+ - When the namespace is gone but the image sweep fails, `jr2 down` exits with the code 0. It prints:
178
+ `image sweep failed (<error>) — the instance is still removed`. Run `jr2 gc` later.
179
+ - `jr2 gc` with no kubectl context exits with the code 1:
180
+ ``error: no kube context — `jr2 gc` decides what is garbage by asking a cluster what it still needs``
181
+ - `jr2 gc` refuses a `--repo-ttl` that is not a number with `d`, `h` or `m`, or `0`. It exits with the code 1 before it
182
+ reads the cluster: `error: --repo-ttl "<ttl>" is not a TTL — use <n>d, <n>h, or <n>m (or 0 for now)`
183
+ - When `jr2 gc` cannot read each live root, it removes nothing, and exits with the code 1:
184
+ `error: the roots could not be read (<error>)`, then
185
+ ` nothing was swept — a keep set missing one root would delete images the cluster still needs`. The error in the
186
+ parentheses can come from kubectl, from docker or from a kind node. Fix that cause, then run `jr2 gc` again.
187
+ - When `jr2 gc` cannot read the Repo resources, it exits with the code 1:
188
+ `error: the Repo resources could not be read (<error>)`
189
+ - On a kind node, jr2 removes a whole image. Thus it keeps a tag whose image also has a tag that a live root names. It
190
+ prints: `kept <count> tag(s) — their image id also carries a tag a live root names: <tags>`. On your computer, jr2
191
+ removes each tag that no live root names.
192
+ - When docker or a node refuses to remove an image, jr2 prints: `failed to remove <count> image(s): <images>`
193
+ - When `jr2 up` cannot remove the old images, the converge still succeeds. It prints:
194
+ `images: sweep skipped (<error>) — the converge stands`. Run `jr2 gc` later.
195
+
196
+ ## Read next
197
+
198
+ - [Converge](../concepts/converge.md)
199
+ - [ADR-0039](../reference/decisions/0039-image-garbage-collects-by-reachability.md): why jr2 removes an image when no
200
+ live root names it.
201
+ - [ADR-0051](../reference/decisions/0051-a-repo-is-a-slot-on-the-workspace-and-a-cache-on-the-node.md): why `jr2 gc`
202
+ removes a Repo resource when no Machine binds it and no run attached it in the last 7 days.
203
+ - [ADR-0019](../reference/decisions/0019-one-converging-command-against-the-current-context.md): why `jr2 down` asks you
204
+ to confirm.
205
+ - [`jr2 gc`](../reference/cli.md#gc), [`jr2 down`](../reference/cli.md#down)
206
+ - [Cancel a run](cancel-a-run.md)