@jr2/orchestrator 0.5.1 → 0.7.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 (350) hide show
  1. package/console/components/app.ts +55 -15
  2. package/console/components/bottom-drawer.ts +259 -0
  3. package/console/components/drawer.ts +14 -6
  4. package/console/components/fleet.ts +36 -13
  5. package/console/components/machine-pane.ts +61 -5
  6. package/console/components/nav.ts +54 -8
  7. package/console/conversation.ts +161 -0
  8. package/console/login.ts +123 -0
  9. package/console/main.ts +600 -60
  10. package/console/store.ts +611 -64
  11. package/console/style.css +231 -0
  12. package/docs/agents-block.md +2 -2
  13. package/docs/concepts/agents-and-turns.md +142 -29
  14. package/docs/concepts/architecture.md +60 -34
  15. package/docs/concepts/callers-and-hooks.md +205 -0
  16. package/docs/concepts/charts.md +13 -8
  17. package/docs/concepts/composition.md +10 -1
  18. package/docs/concepts/converge.md +7 -2
  19. package/docs/concepts/durable-runs.md +43 -16
  20. package/docs/concepts/effects.md +133 -50
  21. package/docs/concepts/gates.md +95 -25
  22. package/docs/concepts/machines-and-workflows.md +14 -4
  23. package/docs/concepts/pools-and-sources.md +193 -17
  24. package/docs/concepts/secrets-and-trust.md +186 -62
  25. package/docs/concepts/the-menu.md +14 -0
  26. package/docs/concepts/workspaces.md +135 -56
  27. package/docs/get-started/a-model-decides.md +14 -13
  28. package/docs/get-started/an-agent-in-a-sandbox.md +46 -35
  29. package/docs/get-started/connect-a-model.md +1 -1
  30. package/docs/get-started/create-an-instance.md +17 -14
  31. package/docs/get-started/have-your-assistant-write-a-machine.md +111 -40
  32. package/docs/get-started/install.md +4 -0
  33. package/docs/guides/add-tools-to-the-sandbox.md +72 -15
  34. package/docs/guides/answer-a-gate-from-a-forge.md +304 -0
  35. package/docs/guides/answer-a-gate.md +74 -37
  36. package/docs/guides/bind-open-parts.md +29 -12
  37. package/docs/guides/call-an-mcp-tool-from-a-machine.md +572 -0
  38. package/docs/guides/cancel-a-run.md +26 -16
  39. package/docs/guides/cut-a-worktree.md +560 -0
  40. package/docs/guides/fix-a-failed-converge.md +19 -7
  41. package/docs/guides/give-a-caller-a-scope.md +203 -0
  42. package/docs/guides/give-an-agent-mcp-tools.md +422 -0
  43. package/docs/guides/iterate-on-a-machine-on-kind.md +10 -9
  44. package/docs/guides/let-an-agent-write-a-chart.md +14 -7
  45. package/docs/guides/look-inside-a-sandbox.md +115 -42
  46. package/docs/guides/move-from-kind-to-a-shared-cluster.md +16 -0
  47. package/docs/guides/open-the-console.md +63 -14
  48. package/docs/guides/push-and-sign-a-branch.md +67 -21
  49. package/docs/guides/read-a-conversation.md +225 -0
  50. package/docs/guides/run-a-chart-by-name.md +17 -16
  51. package/docs/guides/run-a-command-or-call-a-url.md +84 -41
  52. package/docs/guides/run-one-worker-per-item.md +34 -27
  53. package/docs/guides/set-an-agents-access-and-dials.md +69 -22
  54. package/docs/guides/size-a-workspace.md +19 -6
  55. package/docs/guides/start-a-run-for-each-alert.md +290 -0
  56. package/docs/guides/start-a-run-from-a-run.md +18 -16
  57. package/docs/guides/start-a-run.md +24 -18
  58. package/docs/guides/steer-an-agent.md +332 -0
  59. package/docs/guides/use-a-hosted-provider.md +7 -1
  60. package/docs/guides/watch-a-run.md +146 -117
  61. package/docs/guides/write-a-hook-kind.md +238 -0
  62. package/docs/guides/write-a-tool-as-an-mcp-server.md +351 -0
  63. package/docs/guides/write-a-workflow.md +18 -8
  64. package/docs/llms.txt +110 -23
  65. package/docs/reference/authoring-surface/agent.md +35 -12
  66. package/docs/reference/authoring-surface/answer.md +20 -4
  67. package/docs/reference/authoring-surface/arg.md +28 -6
  68. package/docs/reference/authoring-surface/basic.md +1 -1
  69. package/docs/reference/authoring-surface/bearer.md +1 -1
  70. package/docs/reference/authoring-surface/branchname.md +15 -0
  71. package/docs/reference/authoring-surface/carry.md +23 -0
  72. package/docs/reference/authoring-surface/chartschema.md +1 -1
  73. package/docs/reference/authoring-surface/chartschemafor.md +1 -1
  74. package/docs/reference/authoring-surface/command.md +37 -22
  75. package/docs/reference/authoring-surface/customize.md +4 -1
  76. package/docs/reference/authoring-surface/defineconfig.md +1 -1
  77. package/docs/reference/authoring-surface/defineevent.md +1 -1
  78. package/docs/reference/authoring-surface/dispatch.md +5 -4
  79. package/docs/reference/authoring-surface/fail.md +18 -5
  80. package/docs/reference/authoring-surface/file.md +37 -17
  81. package/docs/reference/authoring-surface/frompick.md +1 -1
  82. package/docs/reference/authoring-surface/gate.md +118 -0
  83. package/docs/reference/authoring-surface/group-agents.md +15 -0
  84. package/docs/reference/authoring-surface/group-charts.md +16 -0
  85. package/docs/reference/authoring-surface/group-composition.md +25 -0
  86. package/docs/reference/authoring-surface/group-config.md +17 -0
  87. package/docs/reference/authoring-surface/group-effects.md +48 -0
  88. package/docs/reference/authoring-surface/group-failure.md +13 -0
  89. package/docs/reference/authoring-surface/group-gates.md +16 -0
  90. package/docs/reference/authoring-surface/group-machine-and-events.md +15 -0
  91. package/docs/reference/authoring-surface/group-steering.md +12 -0
  92. package/docs/reference/authoring-surface/group-types-these-signatures-name.md +137 -0
  93. package/docs/reference/authoring-surface/group-workspaces-and-repos.md +15 -0
  94. package/docs/reference/authoring-surface/http.md +109 -9
  95. package/docs/reference/authoring-surface/isfailure.md +1 -1
  96. package/docs/reference/authoring-surface/isready.md +14 -0
  97. package/docs/reference/authoring-surface/jr2setup.md +14 -4
  98. package/docs/reference/authoring-surface/mcp.md +107 -0
  99. package/docs/reference/authoring-surface/open.md +41 -8
  100. package/docs/reference/authoring-surface/openbody.md +1 -1
  101. package/docs/reference/authoring-surface/paramsof.md +23 -5
  102. package/docs/reference/authoring-surface/pool.md +79 -11
  103. package/docs/reference/authoring-surface/push.md +31 -13
  104. package/docs/reference/authoring-surface/readyof.md +21 -0
  105. package/docs/reference/authoring-surface/reread.md +19 -0
  106. package/docs/reference/authoring-surface/secret.md +26 -5
  107. package/docs/reference/authoring-surface/sentby.md +1 -1
  108. package/docs/reference/authoring-surface/skip.md +22 -0
  109. package/docs/reference/authoring-surface/source.md +59 -4
  110. package/docs/reference/authoring-surface/steer.md +93 -0
  111. package/docs/reference/authoring-surface/text.md +1 -1
  112. package/docs/reference/authoring-surface/type-agentdefinition.md +16 -3
  113. package/docs/reference/authoring-surface/type-agentmcpserver.md +54 -0
  114. package/docs/reference/authoring-surface/type-agentslots.md +4 -1
  115. package/docs/reference/authoring-surface/type-anyframepath.md +14 -0
  116. package/docs/reference/authoring-surface/type-anyworktreepath.md +15 -0
  117. package/docs/reference/authoring-surface/type-bindactors.md +14 -0
  118. package/docs/reference/authoring-surface/type-binding.md +6 -7
  119. package/docs/reference/authoring-surface/type-caller.md +40 -0
  120. package/docs/reference/authoring-surface/type-callerrecord.md +32 -0
  121. package/docs/reference/authoring-surface/type-carry.md +19 -0
  122. package/docs/reference/authoring-surface/type-chainlink.md +3 -3
  123. package/docs/reference/authoring-surface/type-commandinput.md +4 -3
  124. package/docs/reference/authoring-surface/type-commandoptions.md +0 -22
  125. package/docs/reference/authoring-surface/type-commandoutput.md +23 -5
  126. package/docs/reference/authoring-surface/type-customize.md +20 -3
  127. package/docs/reference/authoring-surface/type-delivered.md +17 -0
  128. package/docs/reference/authoring-surface/type-deliveredevent.md +18 -0
  129. package/docs/reference/authoring-surface/type-dispatchdefinition.md +4 -3
  130. package/docs/reference/authoring-surface/type-dispatchoutput.md +9 -2
  131. package/docs/reference/authoring-surface/type-doorlessinput.md +19 -0
  132. package/docs/reference/authoring-surface/type-effectbinding.md +12 -2
  133. package/docs/reference/authoring-surface/type-filebody.md +4 -8
  134. package/docs/reference/authoring-surface/type-framepath.md +14 -0
  135. package/docs/reference/authoring-surface/type-gatebinding.md +15 -0
  136. package/docs/reference/authoring-surface/type-gatehooks.md +12 -0
  137. package/docs/reference/authoring-surface/type-gatelook.md +37 -0
  138. package/docs/reference/authoring-surface/type-gateoutcome.md +32 -0
  139. package/docs/reference/authoring-surface/type-gatereply.md +19 -0
  140. package/docs/reference/authoring-surface/type-gateslot.md +21 -0
  141. package/docs/reference/authoring-surface/type-gateslotinput.md +13 -0
  142. package/docs/reference/authoring-surface/type-gateslotparts.md +18 -0
  143. package/docs/reference/authoring-surface/type-gateslots.md +12 -0
  144. package/docs/reference/authoring-surface/type-gatetypesat.md +13 -0
  145. package/docs/reference/authoring-surface/type-hostinjectedinput.md +3 -5
  146. package/docs/reference/authoring-surface/type-httpdefinition.md +6 -3
  147. package/docs/reference/authoring-surface/type-httpfileinput.md +20 -0
  148. package/docs/reference/authoring-surface/type-httpoutput.md +8 -2
  149. package/docs/reference/authoring-surface/type-jr2config.md +37 -2
  150. package/docs/reference/authoring-surface/type-lateroutcome.md +21 -0
  151. package/docs/reference/authoring-surface/type-lends.md +5 -1
  152. package/docs/reference/authoring-surface/type-lookoutput.md +14 -0
  153. package/docs/reference/authoring-surface/type-mcpcalloutput.md +78 -0
  154. package/docs/reference/authoring-surface/type-mcpnotreturned.md +42 -0
  155. package/docs/reference/authoring-surface/type-mcpoptions.md +47 -0
  156. package/docs/reference/authoring-surface/type-mcpoutput.md +50 -0
  157. package/docs/reference/authoring-surface/type-mcpreadoutput.md +53 -0
  158. package/docs/reference/authoring-surface/type-mcpremoteserver.md +50 -0
  159. package/docs/reference/authoring-surface/type-mcpserver.md +41 -0
  160. package/docs/reference/authoring-surface/type-mcpstdioserver.md +42 -0
  161. package/docs/reference/authoring-surface/type-namedsecret.md +4 -4
  162. package/docs/reference/authoring-surface/type-namestart.md +77 -0
  163. package/docs/reference/authoring-surface/type-noslotworkspaceoptions.md +1 -6
  164. package/docs/reference/authoring-surface/type-notworktreekeys.md +12 -0
  165. package/docs/reference/authoring-surface/type-openbodydeclaration.md +1 -1
  166. package/docs/reference/authoring-surface/type-openbodyoutput.md +1 -1
  167. package/docs/reference/authoring-surface/type-opencommandinput.md +7 -2
  168. package/docs/reference/authoring-surface/type-permissivenoslotworkspaceoptions.md +1 -6
  169. package/docs/reference/authoring-surface/type-permissiveworkspaceoptions.md +5 -10
  170. package/docs/reference/authoring-surface/type-poolnextinput.md +22 -0
  171. package/docs/reference/authoring-surface/type-poolspec.md +11 -6
  172. package/docs/reference/authoring-surface/type-pushinput.md +22 -3
  173. package/docs/reference/authoring-surface/type-pushoutput.md +33 -8
  174. package/docs/reference/authoring-surface/type-pushsourcespec.md +38 -0
  175. package/docs/reference/authoring-surface/type-readsourcespec.md +47 -0
  176. package/docs/reference/authoring-surface/type-reposlot.md +6 -6
  177. package/docs/reference/authoring-surface/type-reread.md +18 -0
  178. package/docs/reference/authoring-surface/type-runsconfig.md +41 -0
  179. package/docs/reference/authoring-surface/type-sandboxoptions.md +11 -4
  180. package/docs/reference/authoring-surface/type-sender.md +26 -1
  181. package/docs/reference/authoring-surface/type-sendercallerfield.md +14 -0
  182. package/docs/reference/authoring-surface/type-size.md +1 -1
  183. package/docs/reference/authoring-surface/type-skip.md +19 -0
  184. package/docs/reference/authoring-surface/type-slothandles.md +5 -13
  185. package/docs/reference/authoring-surface/type-sourcehooks.md +23 -0
  186. package/docs/reference/authoring-surface/type-sourcein.md +25 -0
  187. package/docs/reference/authoring-surface/type-sourcereply.md +18 -0
  188. package/docs/reference/authoring-surface/type-sourcespec.md +26 -17
  189. package/docs/reference/authoring-surface/type-sourceverdict.md +49 -0
  190. package/docs/reference/authoring-surface/type-standingpoolmachine.md +12 -0
  191. package/docs/reference/authoring-surface/type-standingpoolspec.md +51 -0
  192. package/docs/reference/authoring-surface/type-steerargs.md +20 -0
  193. package/docs/reference/authoring-surface/type-thinkinglevel.md +1 -1
  194. package/docs/reference/authoring-surface/type-usercontainer.md +1 -1
  195. package/docs/reference/authoring-surface/type-workspaced.md +30 -9
  196. package/docs/reference/authoring-surface/type-workspacehandles.md +5 -6
  197. package/docs/reference/authoring-surface/type-workspaceoptions.md +1 -13
  198. package/docs/reference/authoring-surface/type-worktreefound.md +16 -0
  199. package/docs/reference/authoring-surface/type-worktreeinput.md +56 -0
  200. package/docs/reference/authoring-surface/type-worktreekey.md +14 -0
  201. package/docs/reference/authoring-surface/type-worktreeoptions.md +29 -0
  202. package/docs/reference/authoring-surface/type-worktreeoutput.md +45 -0
  203. package/docs/reference/authoring-surface/type-worktreepath.md +16 -0
  204. package/docs/reference/authoring-surface/type-worktreeready.md +37 -0
  205. package/docs/reference/authoring-surface/type-worktreerefused.md +21 -0
  206. package/docs/reference/authoring-surface/workspace.md +66 -38
  207. package/docs/reference/authoring-surface/worktree.md +71 -0
  208. package/docs/reference/authoring-surface.md +88 -147
  209. package/docs/reference/cli.md +413 -74
  210. package/docs/reference/config.md +248 -6
  211. package/docs/reference/decisions/0001-operator-owned-generic-sandbox.md +10 -9
  212. package/docs/reference/decisions/0002-duplex-streaming-actor.md +81 -14
  213. package/docs/reference/decisions/0004-worktree-provisioning-model.md +27 -21
  214. package/docs/reference/decisions/0005-sandbox-pod-composition.md +39 -25
  215. package/docs/reference/decisions/0006-agent-control-surface.md +6 -3
  216. package/docs/reference/decisions/0007-durable-machine-state.md +1 -1
  217. package/docs/reference/decisions/0009-cli-and-instance-interface.md +150 -49
  218. package/docs/reference/decisions/0010-bdd-acceptance-tests.md +5 -3
  219. package/docs/reference/decisions/0011-workflow-defined-events.md +256 -12
  220. package/docs/reference/decisions/0012-workspace-wrapper-machine.md +39 -32
  221. package/docs/reference/decisions/0013-the-agent-reaches-its-machine-through-a-container-it-cannot-read.md +54 -30
  222. package/docs/reference/decisions/0014-observation-is-open-run-state-is-not.md +53 -27
  223. package/docs/reference/decisions/0015-authoring-surface-absorbs-the-mechanism.md +26 -16
  224. package/docs/reference/decisions/0016-agent-turn-mechanics-are-internal.md +9 -7
  225. package/docs/reference/decisions/0017-pool-over-a-source-port.md +226 -10
  226. package/docs/reference/decisions/0018-instance-agents-are-definitions-jr2-assembles-the-harness.md +15 -7
  227. package/docs/reference/decisions/0019-one-converging-command-against-the-current-context.md +53 -27
  228. package/docs/reference/decisions/0021-workspace-continuity-is-a-lease-that-answers-back.md +16 -2
  229. package/docs/reference/decisions/0022-observation-is-a-level-triggered-feed.md +4 -4
  230. package/docs/reference/decisions/0023-the-harness-prints-the-conversation.md +124 -43
  231. package/docs/reference/decisions/0024-an-agents-turn-ends-with-the-state-that-asked-for-it.md +36 -38
  232. package/docs/reference/decisions/0025-cancel-ends-a-run-stop-parks-it.md +10 -5
  233. package/docs/reference/decisions/0027-the-harness-is-jr2s-own-server-flue-retires-the-wire-stays.md +16 -7
  234. package/docs/reference/decisions/0028-what-an-agent-may-do-to-the-workspace-is-part-of-its-definition.md +36 -19
  235. package/docs/reference/decisions/0029-a-menu-is-fixed-for-a-conversation-and-a-turn-is-told-its-allowed-picks.md +18 -10
  236. package/docs/reference/decisions/0030-a-snapshot-names-the-machine-it-was-written-under.md +3 -2
  237. package/docs/reference/decisions/0031-menu-only-agents-run-on-the-instance-harness.md +23 -15
  238. package/docs/reference/decisions/0032-the-console-unlocks-with-a-callers-credential.md +101 -0
  239. package/docs/reference/decisions/0033-a-machine-declares-the-input-that-starts-it.md +22 -22
  240. package/docs/reference/decisions/0034-the-console-renders-with-preact-and-the-server-erases-the-types.md +6 -6
  241. package/docs/reference/decisions/0037-an-instance-builds-its-sandbox-images-jr2-injects-the-harness.md +13 -12
  242. package/docs/reference/decisions/0049-a-machine-carries-its-parts-and-composes-by-invoke.md +23 -23
  243. package/docs/reference/decisions/0050-what-code-names-config-declares-what-the-cli-names-discovery-finds.md +6 -1
  244. package/docs/reference/decisions/0051-a-repo-is-a-slot-on-the-workspace-and-a-cache-on-the-node.md +57 -46
  245. package/docs/reference/decisions/0052-a-sandbox-lands-where-an-ordinary-pod-lands-and-the-cache-follows-it.md +5 -0
  246. package/docs/reference/decisions/0053-a-fetch-inside-the-pod-asks-the-node-cache-and-the-cache-asks-the-remote.md +20 -8
  247. package/docs/reference/decisions/0054-the-kit-ships-machines-and-a-shipped-machine-leaves-its-parts-open.md +55 -40
  248. package/docs/reference/decisions/0055-a-release-is-a-pushed-tag-and-the-publish-guard-is-the-credential.md +14 -13
  249. package/docs/reference/decisions/0057-a-turn-is-its-frame-its-dials-and-whether-it-continues.md +31 -24
  250. package/docs/reference/decisions/0058-a-harness-answers-the-orchestrator-alone.md +18 -10
  251. package/docs/reference/decisions/0059-a-harness-holds-stand-ins-and-the-custodian-holds-the-keys.md +137 -86
  252. package/docs/reference/decisions/0062-jr2-briefs-the-agent-on-its-seat-never-on-its-task.md +165 -91
  253. package/docs/reference/decisions/0063-the-orchestrator-watches-the-cluster.md +7 -7
  254. package/docs/reference/decisions/0064-a-workspace-waits-for-capacity.md +2 -2
  255. package/docs/reference/decisions/0065-a-persist-survives-a-crash-and-history-is-kept-for-a-set-time.md +109 -0
  256. package/docs/reference/decisions/0066-a-model-tier-runs-a-real-model-and-a-change-to-what-it-reads-runs-the-tier.md +53 -23
  257. package/docs/reference/decisions/0067-an-effect-is-an-actor-slot-and-runs-at-most-once-unless-marked-idempotent.md +221 -153
  258. package/docs/reference/decisions/0068-an-effector-holds-an-effects-secrets-and-signs-its-wire.md +161 -96
  259. package/docs/reference/decisions/0069-the-orchestrator-is-a-kit-image-and-an-instance-publishes-its-assembly.md +32 -9
  260. package/docs/reference/decisions/0070-a-machine-lends-its-parts-to-a-chart.md +48 -33
  261. package/docs/reference/decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md +56 -30
  262. package/docs/reference/decisions/0072-the-docs-ship-inside-the-kit-and-an-instances-agents-md-indexes-them.md +35 -25
  263. package/docs/reference/decisions/0073-a-machine-fails-a-run-with-fail-and-an-uncaught-failure-ends-it-failed.md +1 -1
  264. package/docs/reference/decisions/0075-a-machine-cuts-a-worktree-and-the-workspace-only-clones.md +296 -0
  265. package/docs/reference/decisions/0076-an-agents-control-credential-lives-only-where-no-workspace-code-runs.md +347 -0
  266. package/docs/reference/decisions/0077-jr2-requires-landlock-on-every-sandbox-node.md +79 -0
  267. package/docs/reference/decisions/0078-a-caller-comes-from-one-authenticator-seam-and-acts-within-its-scopes.md +285 -0
  268. package/docs/reference/decisions/0079-an-agent-holds-mcp-tools-a-machine-calls-them-as-an-effect-and-the-machine-is-the-approval.md +198 -0
  269. package/docs/reference/decisions.md +9 -4
  270. package/docs/reference/glossary.md +138 -45
  271. package/docs/reference/hooks.md +1077 -0
  272. package/docs/reference/http-api.md +988 -123
  273. package/docs/reference/machines.md +0 -1
  274. package/docs/why.md +7 -5
  275. package/package.json +10 -3
  276. package/src/actor.ts +194 -42
  277. package/src/agent.ts +56 -6
  278. package/src/ambient.ts +3 -5
  279. package/src/assembly-checks.ts +530 -4
  280. package/src/callers.ts +245 -0
  281. package/src/chart.ts +238 -26
  282. package/src/charts.ts +9 -2
  283. package/src/config.ts +566 -7
  284. package/src/conversations.ts +453 -0
  285. package/src/custodian.lua +17 -5
  286. package/src/custodian.ts +257 -77
  287. package/src/customize.ts +154 -7
  288. package/src/dispatch-effect.ts +142 -26
  289. package/src/durability.ts +2 -0
  290. package/src/duration.ts +20 -0
  291. package/src/effect-checks.ts +52 -4
  292. package/src/effect.ts +401 -132
  293. package/src/effector-wire.ts +278 -30
  294. package/src/fail.ts +17 -4
  295. package/src/gate-brand.ts +16 -0
  296. package/src/gate.ts +634 -48
  297. package/src/harness-client.ts +84 -35
  298. package/src/harness-env.ts +33 -0
  299. package/src/held-secrets.ts +197 -39
  300. package/src/holds.ts +5 -2
  301. package/src/hook-kinds/discord.ts +92 -0
  302. package/src/hook-kinds/door.ts +107 -0
  303. package/src/hook-kinds/github.ts +89 -0
  304. package/src/hook-kinds/gitlab.ts +72 -0
  305. package/src/hook-kinds/hook.ts +7 -0
  306. package/src/hook-kinds/index.ts +465 -0
  307. package/src/hook-kinds/slack.ts +151 -0
  308. package/src/hook-kinds/webhook.ts +113 -0
  309. package/src/hooks.ts +506 -0
  310. package/src/http-effect.ts +164 -70
  311. package/src/http.ts +933 -99
  312. package/src/index.ts +30 -5
  313. package/src/instance.ts +196 -26
  314. package/src/internal.ts +23 -3
  315. package/src/kube-client.ts +6 -3
  316. package/src/machine-doc.ts +29 -5
  317. package/src/mcp-effect.ts +424 -0
  318. package/src/model-keys.ts +24 -0
  319. package/src/mount-digest.ts +41 -7
  320. package/src/names.ts +82 -7
  321. package/src/notices.ts +576 -59
  322. package/src/open-body.ts +110 -30
  323. package/src/open-effect.ts +17 -4
  324. package/src/open.ts +40 -7
  325. package/src/parts.ts +125 -35
  326. package/src/party.ts +35 -1
  327. package/src/pick.ts +43 -9
  328. package/src/pool.ts +1172 -172
  329. package/src/registration.ts +249 -17
  330. package/src/repo-identity.ts +7 -3
  331. package/src/repos.ts +20 -2
  332. package/src/run-host.ts +1614 -190
  333. package/src/run-list.ts +191 -0
  334. package/src/sandbox-effect.ts +217 -66
  335. package/src/sandbox-kube.ts +116 -21
  336. package/src/secret-placement.ts +248 -35
  337. package/src/server.ts +53 -4
  338. package/src/setup.ts +158 -38
  339. package/src/snapshot-store.ts +565 -48
  340. package/src/steer.ts +111 -0
  341. package/src/stub-harness.ts +6 -2
  342. package/src/tokens.ts +362 -46
  343. package/src/vocabulary.ts +23 -4
  344. package/src/wire.ts +27 -10
  345. package/src/workspace.ts +314 -259
  346. package/src/worktree.ts +249 -0
  347. package/docs/reference/authoring-surface/type-noslotspec.md +0 -26
  348. package/docs/reference/authoring-surface/type-workspacespec.md +0 -37
  349. package/docs/reference/decisions/0032-the-console-unlocks-with-the-instance-token.md +0 -61
  350. package/docs/reference/decisions/0065-a-persist-survives-a-crash-and-history-is-a-week.md +0 -65
@@ -0,0 +1,21 @@
1
+ ---
2
+ title: LaterOutcome
3
+ description: A value of `outcome` that this kit does not give.
4
+ ---
5
+
6
+ # `LaterOutcome`
7
+
8
+ Type, in `@jr2/orchestrator/src/effect.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type LaterOutcome = { outcome: "(a later outcome)"; reason?: string };
12
+ ```
13
+
14
+ A value of `outcome` that this kit does not give. It stands in the union so that no author can
15
+ write an exhaustive check, so that a later outcome is no break: route on what you know, and give
16
+ the rest a last arm.
17
+
18
+ **Fields**
19
+
20
+ - `outcome`: `"(a later outcome)"`
21
+ - `reason` (optional): `string`
@@ -12,6 +12,7 @@ type Lends = {
12
12
  agents?: string[];
13
13
  effects?: string[];
14
14
  machines?: string[];
15
+ gates?: string[];
15
16
  guards?: string[];
16
17
  actions?: string[];
17
18
  delays?: string[];
@@ -21,7 +22,9 @@ type Lends = {
21
22
  ```
22
23
 
23
24
  The parts of the Chart wrapper that a Chart can use, by their keys in `actors`, `guards`,
24
- `actions` and `delays`. `gate: true` lends the Gate, so that a Chart can wait for an answer from
25
+ `actions` and `delays`. `gates` lends Gate slots (`gate({ … })`) that hear a Hook, by slot name:
26
+ the door refuses a Chart that invokes one whose `delivers` names an event that is not in the
27
+ Chart's `events`. `gate: true` lends the Gate, so that a Chart can wait for an answer from
25
28
  outside the run. `fail: true` lends the Part that fails the run, so that a Chart can end its run
26
29
  as a Failure ([ADR-0073](../decisions/0073-a-machine-fails-a-run-with-fail-and-an-uncaught-failure-ends-it-failed.md)): the Machine decides which ends a Chart can choose. A Chart can use no
27
30
  other part.
@@ -31,6 +34,7 @@ other part.
31
34
  - `agents` (optional): `string[]`
32
35
  - `effects` (optional): `string[]`
33
36
  - `machines` (optional): `string[]`
37
+ - `gates` (optional): `string[]`
34
38
  - `guards` (optional): `string[]`
35
39
  - `actions` (optional): `string[]`
36
40
  - `delays` (optional): `string[]`
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: LookOutput
3
+ description: A type that the Authoring surface names.
4
+ ---
5
+
6
+ # `LookOutput`
7
+
8
+ Type, in `@jr2/orchestrator/src/gate.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 LookOutput<R> = R extends { getInitialSnapshot: (...a: never[]) => { output?: infer O } }
12
+ ? Exclude<O, undefined>
13
+ : unknown;
14
+ ```
@@ -0,0 +1,78 @@
1
+ ---
2
+ title: McpCallOutput
3
+ description: "The output of an `mcp.call` Effect: what the `onDone` of its state gets as `event.output`."
4
+ ---
5
+
6
+ # `McpCallOutput`
7
+
8
+ Type, in `@jr2/orchestrator/src/effector-wire.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpCallOutput =
12
+ | { outcome: "returned"; isError: boolean; text: string; structured?: unknown; truncated?: boolean }
13
+ | McpNotReturned;
14
+ ```
15
+
16
+ The output of an `mcp.call` Effect: what the `onDone` of its state gets as `event.output`. Every
17
+ outcome is output. Route on `outcome`:
18
+
19
+ - `returned`: the server answered the call. `isError` is the tool's own `isError`: the tool ran
20
+ and says that it failed. `text` joins the text of the result's content; a part that is not text
21
+ is one line that names its type. `structured` is the result's `structuredContent`, when it has
22
+ one. `text` and `structured` each have the byte bound of the Effect's `maxBody`: past it, jr2
23
+ cuts `text`, drops `structured`, and sets `truncated`.
24
+ - `refused`: the request did not run. The server answered an HTTP 3xx or 4xx status (a 401 or a
25
+ 403 included) at any step, the handshake too; it refused the handshake; or it answered the
26
+ request with the JSON-RPC error `-32700`, `-32600`, `-32601` or `-32602`: a request that it
27
+ could not read, an unknown method, an unknown tool, or bad arguments; or it answered a read with
28
+ `-32002`: the resource does not exist. It is also the Effector's
29
+ own refusal, with nothing sent: the server or its secret is not in its `effector.json`.
30
+ - `unreachable`: nothing of the request was sent: the name did not resolve, or the connection,
31
+ TLS or the handshake failed otherwise (a 5xx, the timeout, an answer that is not MCP's, a
32
+ revision of MCP that jr2 does not speak).
33
+ - `input-required`: the server asked for input, which jr2 does not give. After the error
34
+ `-32042`, the tool did not run. After an `elicitation/create` request, which comes while the
35
+ tool runs, the tool may have begun. jr2 does not send the request again: a Machine that
36
+ invokes the Effect again after a Gate can run a part of the tool two times.
37
+ - `unknown`: the request was sent and no answer came (the timeout, a reset, a stream that ended
38
+ first), or the server answered with a 5xx or another JSON-RPC error. The tool may have acted.
39
+ jr2 does not send it again unless it is marked `idempotent`.
40
+
41
+ jr2 replaces each value of an Effect secret that the Effector holds with `[secret:<name>]`, in
42
+ every string of the output. The union is open ([`LaterOutcome`](type-lateroutcome.md)): give the rest a last arm
43
+ with no guard.
44
+
45
+ **Forms**: it is one of these objects.
46
+
47
+ - Form 1: `outcome`, `isError`, `text`, `structured`, `truncated`
48
+
49
+ - `outcome`: `"returned"`
50
+ - `isError`: `boolean`
51
+ - `text`: `string`
52
+ - `structured` (optional): `unknown`
53
+ - `truncated` (optional): `boolean`
54
+ - Form 2: `outcome`, `reason`
55
+
56
+ - `outcome`: `"refused"`
57
+ - `reason`: `string`
58
+ - Form 3: `outcome`, `reason`
59
+
60
+ - `outcome`: `"unreachable"`
61
+ - `reason`: `string`
62
+ - Form 4: `outcome`, `reason`
63
+
64
+ - `outcome`: `"input-required"`
65
+ - `reason`: `string`
66
+ - Form 5: `outcome`, `reason`
67
+
68
+ - `outcome`: `"unknown"`
69
+ - `reason`: `string`
70
+ - Form 6: `outcome`, `reason`
71
+
72
+ - `outcome`: `"(a later outcome)"`
73
+ - `reason` (optional): `string`
74
+
75
+ **See also**
76
+
77
+ - [Effects](../../concepts/effects.md)
78
+ - [ADR-0079: An Agent holds MCP tools, a Machine calls them as an Effect, and the Machine is the approval](../decisions/0079-an-agent-holds-mcp-tools-a-machine-calls-them-as-an-effect-and-the-machine-is-the-approval.md)
@@ -0,0 +1,42 @@
1
+ ---
2
+ title: McpNotReturned
3
+ description: The outcomes that an `mcp` Effect gives besides `returned`.
4
+ ---
5
+
6
+ # `McpNotReturned`
7
+
8
+ Type, in `@jr2/orchestrator/src/effector-wire.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 McpNotReturned =
12
+ | { outcome: "refused"; reason: string }
13
+ | { outcome: "unreachable"; reason: string }
14
+ | { outcome: "input-required"; reason: string }
15
+ | { outcome: "unknown"; reason: string }
16
+ | LaterOutcome;
17
+ ```
18
+
19
+ The outcomes that an `mcp` Effect gives besides `returned`. Each one has a `reason` in words.
20
+
21
+ **Forms**: it is one of these objects.
22
+
23
+ - Form 1: `outcome`, `reason`
24
+
25
+ - `outcome`: `"refused"`
26
+ - `reason`: `string`
27
+ - Form 2: `outcome`, `reason`
28
+
29
+ - `outcome`: `"unreachable"`
30
+ - `reason`: `string`
31
+ - Form 3: `outcome`, `reason`
32
+
33
+ - `outcome`: `"input-required"`
34
+ - `reason`: `string`
35
+ - Form 4: `outcome`, `reason`
36
+
37
+ - `outcome`: `"unknown"`
38
+ - `reason`: `string`
39
+ - Form 5: `outcome`, `reason`
40
+
41
+ - `outcome`: `"(a later outcome)"`
42
+ - `reason` (optional): `string`
@@ -0,0 +1,47 @@
1
+ ---
2
+ title: McpOptions
3
+ description: The options of an `mcp` Effect.
4
+ ---
5
+
6
+ # `McpOptions`
7
+
8
+ Type, in `@jr2/orchestrator/src/mcp-effect.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpOptions<S extends z.ZodObject | undefined = undefined> = {
12
+ input?: S;
13
+ timeout?: Duration;
14
+ maxBody?: number;
15
+ idempotent?: boolean;
16
+ };
17
+ ```
18
+
19
+ The options of an `mcp` Effect.
20
+
21
+ **Fields**
22
+
23
+ - `input` (optional): `S`
24
+
25
+ The zod schema of the input of the Effect: what the `input` of the `invoke`, or `fromPick`,
26
+ gives it. For `mcp.call` the parsed input is the tool's arguments; for `mcp.prompt`, the
27
+ prompt's arguments, each a string. jr2 parses the input with it before the call. When it
28
+ starts, input that does not agree with it makes the Effect fail (its `onError` route): `mcp
29
+ "<slot>": its input does not match the definition's input schema — <path>: <message>`. With no
30
+ schema, the input of the `invoke` is the arguments as it is, and `{}` when it has none.
31
+ - `timeout` (optional): [`Duration`](type-duration.md)
32
+
33
+ How long jr2 waits for the answer: a number and a unit, such as `"30s"` or `"2m"`. Default:
34
+ the server's `timeout` in `jr2.config.ts` (60 seconds when it sets none). With no answer in
35
+ that time, the output is `unknown`. It refuses a value that is not a positive duration: `mcp:
36
+ timeout "<timeout>" is not a positive duration (like "30s", "2m")`.
37
+ - `maxBody` (optional): `number`
38
+
39
+ The largest number of bytes of `text`, and of `structured` as JSON, that the output keeps.
40
+ Default 65536. Past it, jr2 cuts `text`, drops `structured`, and sets `truncated`. It refuses
41
+ a value that is not a positive whole number: `mcp({ maxBody }): a positive number of bytes`.
42
+ - `idempotent` (optional): `boolean`
43
+
44
+ `true` when it is safe to send the request two times: the tool only reads, or it has its own
45
+ idempotency key. Default `false`. After an Orchestrator restart, jr2 cannot always tell if the
46
+ request went out. Then it sends an idempotent one again, and gives any other the output
47
+ `unknown`. jr2 does not read the tool's `idempotentHint`.
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: McpOutput
3
+ description: "The output of any `mcp` Effect: a call's, a read's or a prompt's."
4
+ ---
5
+
6
+ # `McpOutput`
7
+
8
+ Type, in `@jr2/orchestrator/src/effector-wire.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpOutput = McpCallOutput | McpReadOutput;
12
+ ```
13
+
14
+ The output of any `mcp` Effect: a call's, a read's or a prompt's.
15
+
16
+ **Forms**: it is one of these objects.
17
+
18
+ - Form 1: `outcome`, `isError`, `text`, `structured`, `truncated`
19
+
20
+ - `outcome`: `"returned"`
21
+ - `isError`: `boolean`
22
+ - `text`: `string`
23
+ - `structured` (optional): `unknown`
24
+ - `truncated` (optional): `boolean`
25
+ - Form 2: `outcome`, `reason`
26
+
27
+ - `outcome`: `"refused"`
28
+ - `reason`: `string`
29
+ - Form 3: `outcome`, `reason`
30
+
31
+ - `outcome`: `"unreachable"`
32
+ - `reason`: `string`
33
+ - Form 4: `outcome`, `reason`
34
+
35
+ - `outcome`: `"input-required"`
36
+ - `reason`: `string`
37
+ - Form 5: `outcome`, `reason`
38
+
39
+ - `outcome`: `"unknown"`
40
+ - `reason`: `string`
41
+ - Form 6: `outcome`, `text`, `structured`, `truncated`
42
+
43
+ - `outcome`: `"returned"`
44
+ - `text`: `string`
45
+ - `structured` (optional): `unknown`
46
+ - `truncated` (optional): `boolean`
47
+ - Form 7: `outcome`, `reason`
48
+
49
+ - `outcome`: `"(a later outcome)"`
50
+ - `reason` (optional): `string`
@@ -0,0 +1,53 @@
1
+ ---
2
+ title: McpReadOutput
3
+ description: The output of an `mcp.read` or an `mcp.prompt` Effect.
4
+ ---
5
+
6
+ # `McpReadOutput`
7
+
8
+ Type, in `@jr2/orchestrator/src/effector-wire.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpReadOutput =
12
+ | { outcome: "returned"; text: string; structured?: unknown; truncated?: boolean }
13
+ | McpNotReturned;
14
+ ```
15
+
16
+ The output of an `mcp.read` or an `mcp.prompt` Effect. Its outcomes are those of
17
+ [`McpCallOutput`](type-mcpcalloutput.md), with no `isError`. For a read, `text` joins the text of the resource's
18
+ contents, and `structured` is the `contents` list: a blob is given only as its `mimeType` and its
19
+ size. For a prompt, `text` joins the text of the prompt's messages, and `structured` is the
20
+ `messages` list. Past the bound, `structured` is dropped and `truncated` is set.
21
+
22
+ **Forms**: it is one of these objects.
23
+
24
+ - Form 1: `outcome`, `reason`
25
+
26
+ - `outcome`: `"refused"`
27
+ - `reason`: `string`
28
+ - Form 2: `outcome`, `reason`
29
+
30
+ - `outcome`: `"unreachable"`
31
+ - `reason`: `string`
32
+ - Form 3: `outcome`, `reason`
33
+
34
+ - `outcome`: `"input-required"`
35
+ - `reason`: `string`
36
+ - Form 4: `outcome`, `reason`
37
+
38
+ - `outcome`: `"unknown"`
39
+ - `reason`: `string`
40
+ - Form 5: `outcome`, `text`, `structured`, `truncated`
41
+
42
+ - `outcome`: `"returned"`
43
+ - `text`: `string`
44
+ - `structured` (optional): `unknown`
45
+ - `truncated` (optional): `boolean`
46
+ - Form 6: `outcome`, `reason`
47
+
48
+ - `outcome`: `"(a later outcome)"`
49
+ - `reason` (optional): `string`
50
+
51
+ **See also**
52
+
53
+ - [Effects](../../concepts/effects.md)
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: McpRemoteServer
3
+ description: A remote MCP server, which the Harness reaches over Streamable HTTP.
4
+ ---
5
+
6
+ # `McpRemoteServer`
7
+
8
+ Type, in `@jr2/orchestrator/src/config.ts`. It is an export of `@jr2/orchestrator`, in the [Config](group-config.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpRemoteServer = {
12
+ url: string;
13
+ secret?: string;
14
+ timeout?: `${number}s` | `${number}m` | `${number}h`;
15
+ };
16
+ ```
17
+
18
+ A remote MCP server, which the Harness reaches over Streamable HTTP. An Agent that names it in its
19
+ `mcp` list gets the tools that its `tools` allowlist names.
20
+
21
+ A server with a `secret` needs an `https://` url, because the Custodian puts the value on TLS
22
+ only: `mcp.<name>.url must be an https:// URL`. A server with no secret can use `http://`. The
23
+ Harness sends `Authorization: Bearer <Stand-in>`, and the Custodian of each pod whose Agents name
24
+ the server puts the value in its place. A `secret` that the `secrets` list does not hold is
25
+ refused when the config loads: `<file> at mcp.<name>.secret: "<NAME>" is not an entry of secrets`.
26
+ Past `timeout`, the Harness cancels the call, and the model reads jr2's text.
27
+
28
+ **Fields**
29
+
30
+ - `url`: `string`
31
+
32
+ Its Streamable HTTP endpoint: `https://` when it has a `secret`.
33
+ - `secret` (optional): `string`
34
+
35
+ A name of the `secrets` list: its bearer token. With no `hosts`, that entry is bound to the
36
+ url's host, in `authorization`. Default: none.
37
+ - `timeout` (optional): `` `${number}s` | `${number}m` | `${number}h` ``
38
+
39
+ How long one call can run, such as `"90s"`. Default `"60s"`.
40
+
41
+ **Example**
42
+
43
+ ```ts
44
+ import { defineConfig } from "@jr2/orchestrator";
45
+
46
+ export default defineConfig({
47
+ secrets: [{ name: "SLACK_ACME_TOKEN", value: process.env.SLACK_ACME_TOKEN }],
48
+ mcp: { "slack-acme": { url: "https://mcp.slack.example/mcp", secret: "SLACK_ACME_TOKEN" } },
49
+ });
50
+ ```
@@ -0,0 +1,41 @@
1
+ ---
2
+ title: McpServer
3
+ description: "One MCP server of the Instance: a `McpRemoteServer` (`url`) or a `McpStdioServer` (`command`)."
4
+ ---
5
+
6
+ # `McpServer`
7
+
8
+ Type, in `@jr2/orchestrator/src/config.ts`. It is an export of `@jr2/orchestrator`, in the [Config](group-config.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpServer = McpRemoteServer | McpStdioServer;
12
+ ```
13
+
14
+ One MCP server of the Instance: a [`McpRemoteServer`](type-mcpremoteserver.md) (`url`) or a [`McpStdioServer`](type-mcpstdioserver.md)
15
+ (`command`).
16
+
17
+ **Forms**: it is one of these objects.
18
+
19
+ - Form 1: `url`, `secret`, `timeout`
20
+
21
+ - `url`: `string`
22
+
23
+ Its Streamable HTTP endpoint: `https://` when it has a `secret`.
24
+ - `secret` (optional): `string`
25
+
26
+ A name of the `secrets` list: its bearer token. With no `hosts`, that entry is bound to the
27
+ url's host, in `authorization`. Default: none.
28
+ - `timeout` (optional): `` `${number}s` | `${number}m` | `${number}h` ``
29
+
30
+ How long one call can run, such as `"90s"`. Default `"60s"`.
31
+ - Form 2: `command`, `args`, `timeout`
32
+
33
+ - `command`: `string`
34
+
35
+ A program of the Sandbox Image.
36
+ - `args` (optional): `readonly string[]`
37
+
38
+ Its arguments.
39
+ - `timeout` (optional): `` `${number}s` | `${number}m` | `${number}h` ``
40
+
41
+ How long one call can run, such as `"90s"`. Default `"60s"`.
@@ -0,0 +1,42 @@
1
+ ---
2
+ title: McpStdioServer
3
+ description: "A stdio MCP server: a program of the Sandbox Image that the Harness starts for each Agent conversation, through jr2's spawner, inside the Agent's confinement."
4
+ ---
5
+
6
+ # `McpStdioServer`
7
+
8
+ Type, in `@jr2/orchestrator/src/config.ts`. It is an export of `@jr2/orchestrator`, in the [Config](group-config.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpStdioServer = {
12
+ command: string;
13
+ args?: readonly string[];
14
+ timeout?: `${number}s` | `${number}m` | `${number}h`;
15
+ };
16
+ ```
17
+
18
+ A stdio MCP server: a program of the Sandbox Image that the Harness starts for each Agent
19
+ conversation, through jr2's spawner, inside the Agent's confinement. It is Workspace code: its env
20
+ holds only the Stand-ins that the `workspace()` grants, so it has no `secret` of its own. A
21
+ `"none"` Agent cannot name one, because its Turns run on the Instance Harness, where no Workspace
22
+ code runs.
23
+
24
+ **Fields**
25
+
26
+ - `command`: `string`
27
+
28
+ A program of the Sandbox Image.
29
+ - `args` (optional): `readonly string[]`
30
+
31
+ Its arguments.
32
+ - `timeout` (optional): `` `${number}s` | `${number}m` | `${number}h` ``
33
+
34
+ How long one call can run, such as `"90s"`. Default `"60s"`.
35
+
36
+ **Example**
37
+
38
+ ```ts
39
+ import { defineConfig } from "@jr2/orchestrator";
40
+
41
+ export default defineConfig({ mcp: { notes: { command: "notes-mcp", args: ["--root", "/work"] } } });
42
+ ```
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: NamedSecret
3
- description: "A named secret, never `secret(open)`: where a definition's Open part is a whole that holds a secret — a dispatch's target (ADR-0071) — the secret is bound with it, to a name, so the mark `secret(open)` carries may not be present."
3
+ description: A secret bound to a name, never `secret(open)`.
4
4
  ---
5
5
 
6
6
  # `NamedSecret`
@@ -11,9 +11,9 @@ Type, in `@jr2/orchestrator/src/http-effect.ts`. The signature of an export, or
11
11
  type NamedSecret = Secret & { readonly [K in keyof OpenSecretMark]?: never };
12
12
  ```
13
13
 
14
- A named secret, never `secret(open)`: where a definition's Open part is a whole that holds a
15
- secret — a dispatch's target ([ADR-0071](../decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md)) — the secret is bound with it, to a name, so the mark
16
- `secret(open)` carries may not be present. One type for the definition and the binding.
14
+ A secret bound to a name, never `secret(open)`. Where a definition's Open part is a whole that
15
+ holds a secret — a dispatch's target ([ADR-0071](../decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md)) — the secret is bound with it, to a name, so the
16
+ mark `secret(open)` carries may not be present. One type for the definition and the binding.
17
17
 
18
18
  **Fields**
19
19
 
@@ -0,0 +1,77 @@
1
+ ---
2
+ title: NameStart
3
+ description: "What a Worktree's name may start with: neither `.` nor `-`, and not the end of the path."
4
+ ---
5
+
6
+ # `NameStart`
7
+
8
+ Type, in `@jr2/orchestrator/src/worktree.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 NameStart =
12
+ | "a"
13
+ | "b"
14
+ | "c"
15
+ | "d"
16
+ | "e"
17
+ | "f"
18
+ | "g"
19
+ | "h"
20
+ | "i"
21
+ | "j"
22
+ | "k"
23
+ | "l"
24
+ | "m"
25
+ | "n"
26
+ | "o"
27
+ | "p"
28
+ | "q"
29
+ | "r"
30
+ | "s"
31
+ | "t"
32
+ | "u"
33
+ | "v"
34
+ | "w"
35
+ | "x"
36
+ | "y"
37
+ | "z"
38
+ | "A"
39
+ | "B"
40
+ | "C"
41
+ | "D"
42
+ | "E"
43
+ | "F"
44
+ | "G"
45
+ | "H"
46
+ | "I"
47
+ | "J"
48
+ | "K"
49
+ | "L"
50
+ | "M"
51
+ | "N"
52
+ | "O"
53
+ | "P"
54
+ | "Q"
55
+ | "R"
56
+ | "S"
57
+ | "T"
58
+ | "U"
59
+ | "V"
60
+ | "W"
61
+ | "X"
62
+ | "Y"
63
+ | "Z"
64
+ | "0"
65
+ | "1"
66
+ | "2"
67
+ | "3"
68
+ | "4"
69
+ | "5"
70
+ | "6"
71
+ | "7"
72
+ | "8"
73
+ | "9"
74
+ | "_";
75
+ ```
76
+
77
+ What a Worktree's name may start with: neither `.` nor `-`, and not the end of the path.
@@ -11,12 +11,11 @@ Type, in `@jr2/orchestrator/src/workspace.ts`. The signature of an export, or a
11
11
  type NoSlotWorkspaceOptions<TSchema extends z.ZodObject> = Omit<SandboxOptions<never>, "repos"> & {
12
12
  repos?: never;
13
13
  input: TSchema;
14
- spec?: (args: { input: WithoutEmptyIndex<z.infer<TSchema>> & HostInjectedInput }) => NoSlotSpec;
15
14
  };
16
15
  ```
17
16
 
18
17
  The options of a `workspace()` with no Repo Slot that declares the input that starts a run.
19
- `repos` is left out, and `spec` is optional.
18
+ `repos` is left out.
20
19
 
21
20
  **Fields**: each field of [`SandboxOptions`](type-sandboxoptions.md), except `repos`, and these:
22
21
 
@@ -26,7 +25,3 @@ The options of a `workspace()` with no Repo Slot that declares the input that st
26
25
  - `input`: `TSchema`
27
26
 
28
27
  The input that starts a run, as a `z.object`, as in [`WorkspaceOptions`](type-workspaceoptions.md).
29
- - `spec` (optional): `(args: { input: WithoutEmptyIndex<z.infer<TSchema>> & HostInjectedInput; }) => NoSlotSpec`
30
-
31
- A function from the run input to the Workspace's [`NoSlotSpec`](type-noslotspec.md): only `workGroup`.
32
- Default: no `workGroup`.
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: NotWorktreeKeys
3
+ description: A type that the Authoring surface names.
4
+ ---
5
+
6
+ # `NotWorktreeKeys`
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 NotWorktreeKeys = { cwd?: never; path?: never; branch?: never };
12
+ ```
@@ -5,7 +5,7 @@ description: "What an Open body declares: the parts that it lends a Chart, what
5
5
 
6
6
  # `OpenBodyDeclaration`
7
7
 
8
- Type, in `@jr2/orchestrator/src/open-body.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Charts.
8
+ Type, in `@jr2/orchestrator/src/open-body.ts`. It is an export of `@jr2/orchestrator`, in the [Charts](group-charts.md) group of the [Authoring surface](../authoring-surface.md) page.
9
9
 
10
10
  ```ts
11
11
  type OpenBodyDeclaration = {
@@ -5,7 +5,7 @@ description: The output of an Open body.
5
5
 
6
6
  # `OpenBodyOutput`
7
7
 
8
- Type, in `@jr2/orchestrator/src/open-body.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Charts.
8
+ Type, in `@jr2/orchestrator/src/open-body.ts`. It is an export of `@jr2/orchestrator`, in the [Charts](group-charts.md) group of the [Authoring surface](../authoring-surface.md) page.
9
9
 
10
10
  ```ts
11
11
  type OpenBodyOutput =
@@ -8,10 +8,15 @@ description: "The input of a `command(open)`: a string for each `arg()` of the a
8
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
9
 
10
10
  ```ts
11
- type OpenCommandInput<P = false> = Readonly<Record<string, string>> &
12
- ([P] extends [true] ? { sha: string } : unknown);
11
+ type OpenCommandInput<P = false, Opt = unknown> = Readonly<Record<string, string>> &
12
+ ([P] extends [true] ? { sha: string } : unknown) &
13
+ WorktreeKey<Opt>;
13
14
  ```
14
15
 
15
16
  The input of a `command(open)`: a string for each `arg()` of the argv that the Instance binds,
16
17
  and with `pin`, the commit (`{ sha }`). The compiler cannot check the names. When the input has
17
18
  no string for an `arg()`, the Effect fails when it starts.
19
+
20
+ **Fields**
21
+
22
+ - `worktree` (optional): [`AnyWorktreePath`](type-anyworktreepath.md)
@@ -8,10 +8,9 @@ description: "The options of a `workspace()` with no Repo Slot and no `input`: i
8
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
9
 
10
10
  ```ts
11
- type PermissiveNoSlotWorkspaceOptions<TInput = unknown> = Omit<SandboxOptions<never>, "repos"> & {
11
+ type PermissiveNoSlotWorkspaceOptions = Omit<SandboxOptions<never>, "repos"> & {
12
12
  repos?: never;
13
13
  input?: never;
14
- spec?: (args: { input: TInput }) => NoSlotSpec;
15
14
  };
16
15
  ```
17
16
 
@@ -25,7 +24,3 @@ The options of a `workspace()` with no Repo Slot and no `input`: it starts with
25
24
  - `input` (optional): `never`
26
25
 
27
26
  Not present: a `workspace()` without `input` starts with any input.
28
- - `spec` (optional): `(args: { input: TInput; }) => NoSlotSpec`
29
-
30
- A function from the input to the Workspace's [`NoSlotSpec`](type-noslotspec.md): only `workGroup`. Default:
31
- no `workGroup`.