@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.
- package/console/components/app.ts +55 -15
- package/console/components/bottom-drawer.ts +259 -0
- package/console/components/drawer.ts +14 -6
- package/console/components/fleet.ts +36 -13
- package/console/components/machine-pane.ts +61 -5
- package/console/components/nav.ts +54 -8
- package/console/conversation.ts +161 -0
- package/console/login.ts +123 -0
- package/console/main.ts +600 -60
- package/console/store.ts +611 -64
- package/console/style.css +231 -0
- package/docs/agents-block.md +2 -2
- package/docs/concepts/agents-and-turns.md +142 -29
- package/docs/concepts/architecture.md +60 -34
- package/docs/concepts/callers-and-hooks.md +205 -0
- package/docs/concepts/charts.md +13 -8
- package/docs/concepts/composition.md +10 -1
- package/docs/concepts/converge.md +7 -2
- package/docs/concepts/durable-runs.md +43 -16
- package/docs/concepts/effects.md +133 -50
- package/docs/concepts/gates.md +95 -25
- package/docs/concepts/machines-and-workflows.md +14 -4
- package/docs/concepts/pools-and-sources.md +193 -17
- package/docs/concepts/secrets-and-trust.md +186 -62
- package/docs/concepts/the-menu.md +14 -0
- package/docs/concepts/workspaces.md +135 -56
- package/docs/get-started/a-model-decides.md +14 -13
- package/docs/get-started/an-agent-in-a-sandbox.md +46 -35
- package/docs/get-started/connect-a-model.md +1 -1
- package/docs/get-started/create-an-instance.md +17 -14
- package/docs/get-started/have-your-assistant-write-a-machine.md +111 -40
- package/docs/get-started/install.md +4 -0
- package/docs/guides/add-tools-to-the-sandbox.md +72 -15
- package/docs/guides/answer-a-gate-from-a-forge.md +304 -0
- package/docs/guides/answer-a-gate.md +74 -37
- package/docs/guides/bind-open-parts.md +29 -12
- package/docs/guides/call-an-mcp-tool-from-a-machine.md +572 -0
- package/docs/guides/cancel-a-run.md +26 -16
- package/docs/guides/cut-a-worktree.md +560 -0
- package/docs/guides/fix-a-failed-converge.md +19 -7
- package/docs/guides/give-a-caller-a-scope.md +203 -0
- package/docs/guides/give-an-agent-mcp-tools.md +422 -0
- package/docs/guides/iterate-on-a-machine-on-kind.md +10 -9
- package/docs/guides/let-an-agent-write-a-chart.md +14 -7
- package/docs/guides/look-inside-a-sandbox.md +115 -42
- package/docs/guides/move-from-kind-to-a-shared-cluster.md +16 -0
- package/docs/guides/open-the-console.md +63 -14
- package/docs/guides/push-and-sign-a-branch.md +67 -21
- package/docs/guides/read-a-conversation.md +225 -0
- package/docs/guides/run-a-chart-by-name.md +17 -16
- package/docs/guides/run-a-command-or-call-a-url.md +84 -41
- package/docs/guides/run-one-worker-per-item.md +34 -27
- package/docs/guides/set-an-agents-access-and-dials.md +69 -22
- package/docs/guides/size-a-workspace.md +19 -6
- package/docs/guides/start-a-run-for-each-alert.md +290 -0
- package/docs/guides/start-a-run-from-a-run.md +18 -16
- package/docs/guides/start-a-run.md +24 -18
- package/docs/guides/steer-an-agent.md +332 -0
- package/docs/guides/use-a-hosted-provider.md +7 -1
- package/docs/guides/watch-a-run.md +146 -117
- package/docs/guides/write-a-hook-kind.md +238 -0
- package/docs/guides/write-a-tool-as-an-mcp-server.md +351 -0
- package/docs/guides/write-a-workflow.md +18 -8
- package/docs/llms.txt +110 -23
- package/docs/reference/authoring-surface/agent.md +35 -12
- package/docs/reference/authoring-surface/answer.md +20 -4
- package/docs/reference/authoring-surface/arg.md +28 -6
- package/docs/reference/authoring-surface/basic.md +1 -1
- package/docs/reference/authoring-surface/bearer.md +1 -1
- package/docs/reference/authoring-surface/branchname.md +15 -0
- package/docs/reference/authoring-surface/carry.md +23 -0
- package/docs/reference/authoring-surface/chartschema.md +1 -1
- package/docs/reference/authoring-surface/chartschemafor.md +1 -1
- package/docs/reference/authoring-surface/command.md +37 -22
- package/docs/reference/authoring-surface/customize.md +4 -1
- package/docs/reference/authoring-surface/defineconfig.md +1 -1
- package/docs/reference/authoring-surface/defineevent.md +1 -1
- package/docs/reference/authoring-surface/dispatch.md +5 -4
- package/docs/reference/authoring-surface/fail.md +18 -5
- package/docs/reference/authoring-surface/file.md +37 -17
- package/docs/reference/authoring-surface/frompick.md +1 -1
- package/docs/reference/authoring-surface/gate.md +118 -0
- package/docs/reference/authoring-surface/group-agents.md +15 -0
- package/docs/reference/authoring-surface/group-charts.md +16 -0
- package/docs/reference/authoring-surface/group-composition.md +25 -0
- package/docs/reference/authoring-surface/group-config.md +17 -0
- package/docs/reference/authoring-surface/group-effects.md +48 -0
- package/docs/reference/authoring-surface/group-failure.md +13 -0
- package/docs/reference/authoring-surface/group-gates.md +16 -0
- package/docs/reference/authoring-surface/group-machine-and-events.md +15 -0
- package/docs/reference/authoring-surface/group-steering.md +12 -0
- package/docs/reference/authoring-surface/group-types-these-signatures-name.md +137 -0
- package/docs/reference/authoring-surface/group-workspaces-and-repos.md +15 -0
- package/docs/reference/authoring-surface/http.md +109 -9
- package/docs/reference/authoring-surface/isfailure.md +1 -1
- package/docs/reference/authoring-surface/isready.md +14 -0
- package/docs/reference/authoring-surface/jr2setup.md +14 -4
- package/docs/reference/authoring-surface/mcp.md +107 -0
- package/docs/reference/authoring-surface/open.md +41 -8
- package/docs/reference/authoring-surface/openbody.md +1 -1
- package/docs/reference/authoring-surface/paramsof.md +23 -5
- package/docs/reference/authoring-surface/pool.md +79 -11
- package/docs/reference/authoring-surface/push.md +31 -13
- package/docs/reference/authoring-surface/readyof.md +21 -0
- package/docs/reference/authoring-surface/reread.md +19 -0
- package/docs/reference/authoring-surface/secret.md +26 -5
- package/docs/reference/authoring-surface/sentby.md +1 -1
- package/docs/reference/authoring-surface/skip.md +22 -0
- package/docs/reference/authoring-surface/source.md +59 -4
- package/docs/reference/authoring-surface/steer.md +93 -0
- package/docs/reference/authoring-surface/text.md +1 -1
- package/docs/reference/authoring-surface/type-agentdefinition.md +16 -3
- package/docs/reference/authoring-surface/type-agentmcpserver.md +54 -0
- package/docs/reference/authoring-surface/type-agentslots.md +4 -1
- package/docs/reference/authoring-surface/type-anyframepath.md +14 -0
- package/docs/reference/authoring-surface/type-anyworktreepath.md +15 -0
- package/docs/reference/authoring-surface/type-bindactors.md +14 -0
- package/docs/reference/authoring-surface/type-binding.md +6 -7
- package/docs/reference/authoring-surface/type-caller.md +40 -0
- package/docs/reference/authoring-surface/type-callerrecord.md +32 -0
- package/docs/reference/authoring-surface/type-carry.md +19 -0
- package/docs/reference/authoring-surface/type-chainlink.md +3 -3
- package/docs/reference/authoring-surface/type-commandinput.md +4 -3
- package/docs/reference/authoring-surface/type-commandoptions.md +0 -22
- package/docs/reference/authoring-surface/type-commandoutput.md +23 -5
- package/docs/reference/authoring-surface/type-customize.md +20 -3
- package/docs/reference/authoring-surface/type-delivered.md +17 -0
- package/docs/reference/authoring-surface/type-deliveredevent.md +18 -0
- package/docs/reference/authoring-surface/type-dispatchdefinition.md +4 -3
- package/docs/reference/authoring-surface/type-dispatchoutput.md +9 -2
- package/docs/reference/authoring-surface/type-doorlessinput.md +19 -0
- package/docs/reference/authoring-surface/type-effectbinding.md +12 -2
- package/docs/reference/authoring-surface/type-filebody.md +4 -8
- package/docs/reference/authoring-surface/type-framepath.md +14 -0
- package/docs/reference/authoring-surface/type-gatebinding.md +15 -0
- package/docs/reference/authoring-surface/type-gatehooks.md +12 -0
- package/docs/reference/authoring-surface/type-gatelook.md +37 -0
- package/docs/reference/authoring-surface/type-gateoutcome.md +32 -0
- package/docs/reference/authoring-surface/type-gatereply.md +19 -0
- package/docs/reference/authoring-surface/type-gateslot.md +21 -0
- package/docs/reference/authoring-surface/type-gateslotinput.md +13 -0
- package/docs/reference/authoring-surface/type-gateslotparts.md +18 -0
- package/docs/reference/authoring-surface/type-gateslots.md +12 -0
- package/docs/reference/authoring-surface/type-gatetypesat.md +13 -0
- package/docs/reference/authoring-surface/type-hostinjectedinput.md +3 -5
- package/docs/reference/authoring-surface/type-httpdefinition.md +6 -3
- package/docs/reference/authoring-surface/type-httpfileinput.md +20 -0
- package/docs/reference/authoring-surface/type-httpoutput.md +8 -2
- package/docs/reference/authoring-surface/type-jr2config.md +37 -2
- package/docs/reference/authoring-surface/type-lateroutcome.md +21 -0
- package/docs/reference/authoring-surface/type-lends.md +5 -1
- package/docs/reference/authoring-surface/type-lookoutput.md +14 -0
- package/docs/reference/authoring-surface/type-mcpcalloutput.md +78 -0
- package/docs/reference/authoring-surface/type-mcpnotreturned.md +42 -0
- package/docs/reference/authoring-surface/type-mcpoptions.md +47 -0
- package/docs/reference/authoring-surface/type-mcpoutput.md +50 -0
- package/docs/reference/authoring-surface/type-mcpreadoutput.md +53 -0
- package/docs/reference/authoring-surface/type-mcpremoteserver.md +50 -0
- package/docs/reference/authoring-surface/type-mcpserver.md +41 -0
- package/docs/reference/authoring-surface/type-mcpstdioserver.md +42 -0
- package/docs/reference/authoring-surface/type-namedsecret.md +4 -4
- package/docs/reference/authoring-surface/type-namestart.md +77 -0
- package/docs/reference/authoring-surface/type-noslotworkspaceoptions.md +1 -6
- package/docs/reference/authoring-surface/type-notworktreekeys.md +12 -0
- package/docs/reference/authoring-surface/type-openbodydeclaration.md +1 -1
- package/docs/reference/authoring-surface/type-openbodyoutput.md +1 -1
- package/docs/reference/authoring-surface/type-opencommandinput.md +7 -2
- package/docs/reference/authoring-surface/type-permissivenoslotworkspaceoptions.md +1 -6
- package/docs/reference/authoring-surface/type-permissiveworkspaceoptions.md +5 -10
- package/docs/reference/authoring-surface/type-poolnextinput.md +22 -0
- package/docs/reference/authoring-surface/type-poolspec.md +11 -6
- package/docs/reference/authoring-surface/type-pushinput.md +22 -3
- package/docs/reference/authoring-surface/type-pushoutput.md +33 -8
- package/docs/reference/authoring-surface/type-pushsourcespec.md +38 -0
- package/docs/reference/authoring-surface/type-readsourcespec.md +47 -0
- package/docs/reference/authoring-surface/type-reposlot.md +6 -6
- package/docs/reference/authoring-surface/type-reread.md +18 -0
- package/docs/reference/authoring-surface/type-runsconfig.md +41 -0
- package/docs/reference/authoring-surface/type-sandboxoptions.md +11 -4
- package/docs/reference/authoring-surface/type-sender.md +26 -1
- package/docs/reference/authoring-surface/type-sendercallerfield.md +14 -0
- package/docs/reference/authoring-surface/type-size.md +1 -1
- package/docs/reference/authoring-surface/type-skip.md +19 -0
- package/docs/reference/authoring-surface/type-slothandles.md +5 -13
- package/docs/reference/authoring-surface/type-sourcehooks.md +23 -0
- package/docs/reference/authoring-surface/type-sourcein.md +25 -0
- package/docs/reference/authoring-surface/type-sourcereply.md +18 -0
- package/docs/reference/authoring-surface/type-sourcespec.md +26 -17
- package/docs/reference/authoring-surface/type-sourceverdict.md +49 -0
- package/docs/reference/authoring-surface/type-standingpoolmachine.md +12 -0
- package/docs/reference/authoring-surface/type-standingpoolspec.md +51 -0
- package/docs/reference/authoring-surface/type-steerargs.md +20 -0
- package/docs/reference/authoring-surface/type-thinkinglevel.md +1 -1
- package/docs/reference/authoring-surface/type-usercontainer.md +1 -1
- package/docs/reference/authoring-surface/type-workspaced.md +30 -9
- package/docs/reference/authoring-surface/type-workspacehandles.md +5 -6
- package/docs/reference/authoring-surface/type-workspaceoptions.md +1 -13
- package/docs/reference/authoring-surface/type-worktreefound.md +16 -0
- package/docs/reference/authoring-surface/type-worktreeinput.md +56 -0
- package/docs/reference/authoring-surface/type-worktreekey.md +14 -0
- package/docs/reference/authoring-surface/type-worktreeoptions.md +29 -0
- package/docs/reference/authoring-surface/type-worktreeoutput.md +45 -0
- package/docs/reference/authoring-surface/type-worktreepath.md +16 -0
- package/docs/reference/authoring-surface/type-worktreeready.md +37 -0
- package/docs/reference/authoring-surface/type-worktreerefused.md +21 -0
- package/docs/reference/authoring-surface/workspace.md +66 -38
- package/docs/reference/authoring-surface/worktree.md +71 -0
- package/docs/reference/authoring-surface.md +88 -147
- package/docs/reference/cli.md +413 -74
- package/docs/reference/config.md +248 -6
- package/docs/reference/decisions/0001-operator-owned-generic-sandbox.md +10 -9
- package/docs/reference/decisions/0002-duplex-streaming-actor.md +81 -14
- package/docs/reference/decisions/0004-worktree-provisioning-model.md +27 -21
- package/docs/reference/decisions/0005-sandbox-pod-composition.md +39 -25
- package/docs/reference/decisions/0006-agent-control-surface.md +6 -3
- package/docs/reference/decisions/0007-durable-machine-state.md +1 -1
- package/docs/reference/decisions/0009-cli-and-instance-interface.md +150 -49
- package/docs/reference/decisions/0010-bdd-acceptance-tests.md +5 -3
- package/docs/reference/decisions/0011-workflow-defined-events.md +256 -12
- package/docs/reference/decisions/0012-workspace-wrapper-machine.md +39 -32
- package/docs/reference/decisions/0013-the-agent-reaches-its-machine-through-a-container-it-cannot-read.md +54 -30
- package/docs/reference/decisions/0014-observation-is-open-run-state-is-not.md +53 -27
- package/docs/reference/decisions/0015-authoring-surface-absorbs-the-mechanism.md +26 -16
- package/docs/reference/decisions/0016-agent-turn-mechanics-are-internal.md +9 -7
- package/docs/reference/decisions/0017-pool-over-a-source-port.md +226 -10
- package/docs/reference/decisions/0018-instance-agents-are-definitions-jr2-assembles-the-harness.md +15 -7
- package/docs/reference/decisions/0019-one-converging-command-against-the-current-context.md +53 -27
- package/docs/reference/decisions/0021-workspace-continuity-is-a-lease-that-answers-back.md +16 -2
- package/docs/reference/decisions/0022-observation-is-a-level-triggered-feed.md +4 -4
- package/docs/reference/decisions/0023-the-harness-prints-the-conversation.md +124 -43
- package/docs/reference/decisions/0024-an-agents-turn-ends-with-the-state-that-asked-for-it.md +36 -38
- package/docs/reference/decisions/0025-cancel-ends-a-run-stop-parks-it.md +10 -5
- package/docs/reference/decisions/0027-the-harness-is-jr2s-own-server-flue-retires-the-wire-stays.md +16 -7
- package/docs/reference/decisions/0028-what-an-agent-may-do-to-the-workspace-is-part-of-its-definition.md +36 -19
- package/docs/reference/decisions/0029-a-menu-is-fixed-for-a-conversation-and-a-turn-is-told-its-allowed-picks.md +18 -10
- package/docs/reference/decisions/0030-a-snapshot-names-the-machine-it-was-written-under.md +3 -2
- package/docs/reference/decisions/0031-menu-only-agents-run-on-the-instance-harness.md +23 -15
- package/docs/reference/decisions/0032-the-console-unlocks-with-a-callers-credential.md +101 -0
- package/docs/reference/decisions/0033-a-machine-declares-the-input-that-starts-it.md +22 -22
- package/docs/reference/decisions/0034-the-console-renders-with-preact-and-the-server-erases-the-types.md +6 -6
- package/docs/reference/decisions/0037-an-instance-builds-its-sandbox-images-jr2-injects-the-harness.md +13 -12
- package/docs/reference/decisions/0049-a-machine-carries-its-parts-and-composes-by-invoke.md +23 -23
- package/docs/reference/decisions/0050-what-code-names-config-declares-what-the-cli-names-discovery-finds.md +6 -1
- package/docs/reference/decisions/0051-a-repo-is-a-slot-on-the-workspace-and-a-cache-on-the-node.md +57 -46
- package/docs/reference/decisions/0052-a-sandbox-lands-where-an-ordinary-pod-lands-and-the-cache-follows-it.md +5 -0
- package/docs/reference/decisions/0053-a-fetch-inside-the-pod-asks-the-node-cache-and-the-cache-asks-the-remote.md +20 -8
- package/docs/reference/decisions/0054-the-kit-ships-machines-and-a-shipped-machine-leaves-its-parts-open.md +55 -40
- package/docs/reference/decisions/0055-a-release-is-a-pushed-tag-and-the-publish-guard-is-the-credential.md +14 -13
- package/docs/reference/decisions/0057-a-turn-is-its-frame-its-dials-and-whether-it-continues.md +31 -24
- package/docs/reference/decisions/0058-a-harness-answers-the-orchestrator-alone.md +18 -10
- package/docs/reference/decisions/0059-a-harness-holds-stand-ins-and-the-custodian-holds-the-keys.md +137 -86
- package/docs/reference/decisions/0062-jr2-briefs-the-agent-on-its-seat-never-on-its-task.md +165 -91
- package/docs/reference/decisions/0063-the-orchestrator-watches-the-cluster.md +7 -7
- package/docs/reference/decisions/0064-a-workspace-waits-for-capacity.md +2 -2
- package/docs/reference/decisions/0065-a-persist-survives-a-crash-and-history-is-kept-for-a-set-time.md +109 -0
- 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
- package/docs/reference/decisions/0067-an-effect-is-an-actor-slot-and-runs-at-most-once-unless-marked-idempotent.md +221 -153
- package/docs/reference/decisions/0068-an-effector-holds-an-effects-secrets-and-signs-its-wire.md +161 -96
- package/docs/reference/decisions/0069-the-orchestrator-is-a-kit-image-and-an-instance-publishes-its-assembly.md +32 -9
- package/docs/reference/decisions/0070-a-machine-lends-its-parts-to-a-chart.md +48 -33
- package/docs/reference/decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md +56 -30
- package/docs/reference/decisions/0072-the-docs-ship-inside-the-kit-and-an-instances-agents-md-indexes-them.md +35 -25
- package/docs/reference/decisions/0073-a-machine-fails-a-run-with-fail-and-an-uncaught-failure-ends-it-failed.md +1 -1
- package/docs/reference/decisions/0075-a-machine-cuts-a-worktree-and-the-workspace-only-clones.md +296 -0
- package/docs/reference/decisions/0076-an-agents-control-credential-lives-only-where-no-workspace-code-runs.md +347 -0
- package/docs/reference/decisions/0077-jr2-requires-landlock-on-every-sandbox-node.md +79 -0
- package/docs/reference/decisions/0078-a-caller-comes-from-one-authenticator-seam-and-acts-within-its-scopes.md +285 -0
- 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
- package/docs/reference/decisions.md +9 -4
- package/docs/reference/glossary.md +138 -45
- package/docs/reference/hooks.md +1077 -0
- package/docs/reference/http-api.md +988 -123
- package/docs/reference/machines.md +0 -1
- package/docs/why.md +7 -5
- package/package.json +10 -3
- package/src/actor.ts +194 -42
- package/src/agent.ts +56 -6
- package/src/ambient.ts +3 -5
- package/src/assembly-checks.ts +530 -4
- package/src/callers.ts +245 -0
- package/src/chart.ts +238 -26
- package/src/charts.ts +9 -2
- package/src/config.ts +566 -7
- package/src/conversations.ts +453 -0
- package/src/custodian.lua +17 -5
- package/src/custodian.ts +257 -77
- package/src/customize.ts +154 -7
- package/src/dispatch-effect.ts +142 -26
- package/src/durability.ts +2 -0
- package/src/duration.ts +20 -0
- package/src/effect-checks.ts +52 -4
- package/src/effect.ts +401 -132
- package/src/effector-wire.ts +278 -30
- package/src/fail.ts +17 -4
- package/src/gate-brand.ts +16 -0
- package/src/gate.ts +634 -48
- package/src/harness-client.ts +84 -35
- package/src/harness-env.ts +33 -0
- package/src/held-secrets.ts +197 -39
- package/src/holds.ts +5 -2
- package/src/hook-kinds/discord.ts +92 -0
- package/src/hook-kinds/door.ts +107 -0
- package/src/hook-kinds/github.ts +89 -0
- package/src/hook-kinds/gitlab.ts +72 -0
- package/src/hook-kinds/hook.ts +7 -0
- package/src/hook-kinds/index.ts +465 -0
- package/src/hook-kinds/slack.ts +151 -0
- package/src/hook-kinds/webhook.ts +113 -0
- package/src/hooks.ts +506 -0
- package/src/http-effect.ts +164 -70
- package/src/http.ts +933 -99
- package/src/index.ts +30 -5
- package/src/instance.ts +196 -26
- package/src/internal.ts +23 -3
- package/src/kube-client.ts +6 -3
- package/src/machine-doc.ts +29 -5
- package/src/mcp-effect.ts +424 -0
- package/src/model-keys.ts +24 -0
- package/src/mount-digest.ts +41 -7
- package/src/names.ts +82 -7
- package/src/notices.ts +576 -59
- package/src/open-body.ts +110 -30
- package/src/open-effect.ts +17 -4
- package/src/open.ts +40 -7
- package/src/parts.ts +125 -35
- package/src/party.ts +35 -1
- package/src/pick.ts +43 -9
- package/src/pool.ts +1172 -172
- package/src/registration.ts +249 -17
- package/src/repo-identity.ts +7 -3
- package/src/repos.ts +20 -2
- package/src/run-host.ts +1614 -190
- package/src/run-list.ts +191 -0
- package/src/sandbox-effect.ts +217 -66
- package/src/sandbox-kube.ts +116 -21
- package/src/secret-placement.ts +248 -35
- package/src/server.ts +53 -4
- package/src/setup.ts +158 -38
- package/src/snapshot-store.ts +565 -48
- package/src/steer.ts +111 -0
- package/src/stub-harness.ts +6 -2
- package/src/tokens.ts +362 -46
- package/src/vocabulary.ts +23 -4
- package/src/wire.ts +27 -10
- package/src/workspace.ts +314 -259
- package/src/worktree.ts +249 -0
- package/docs/reference/authoring-surface/type-noslotspec.md +0 -26
- package/docs/reference/authoring-surface/type-workspacespec.md +0 -37
- package/docs/reference/decisions/0032-the-console-unlocks-with-the-instance-token.md +0 -61
- package/docs/reference/decisions/0065-a-persist-survives-a-crash-and-history-is-a-week.md +0 -65
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: SourceSpec
|
|
3
|
-
description:
|
|
3
|
+
description: A pull Source.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# `SourceSpec`
|
|
@@ -8,37 +8,46 @@ description: "Where a Pool gets its work items: the Source."
|
|
|
8
8
|
Type, in `@jr2/orchestrator/src/pool.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 SourceSpec<T> = {
|
|
11
|
+
type SourceSpec<T, TInput = unknown> = {
|
|
12
12
|
next:
|
|
13
|
-
| PromiseActorLogic<SourceNextResult<T>,
|
|
14
|
-
| PromiseActorLogic<{ item: T | null; open: number },
|
|
15
|
-
| PromiseActorLogic<T | null,
|
|
16
|
-
| PromiseActorLogic<null,
|
|
13
|
+
| PromiseActorLogic<SourceNextResult<T>, PoolNextInput<TInput>>
|
|
14
|
+
| PromiseActorLogic<{ item: T | null; open: number }, PoolNextInput<TInput>>
|
|
15
|
+
| PromiseActorLogic<T | null, PoolNextInput<TInput>>
|
|
16
|
+
| PromiseActorLogic<null, PoolNextInput<TInput>>;
|
|
17
17
|
wake?: EventDef;
|
|
18
18
|
pollEvery?: number;
|
|
19
|
+
hooks?: SourceHooks<Reread, TInput>;
|
|
20
|
+
reply?: SourceReply<T>;
|
|
19
21
|
};
|
|
20
22
|
```
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
A pull Source. `next` claims one item at a time. Make one with [`source`](source.md).
|
|
23
25
|
|
|
24
26
|
**Fields**
|
|
25
27
|
|
|
26
|
-
- `next`: `PromiseActorLogic<SourceNextResult<T>,
|
|
28
|
+
- `next`: `PromiseActorLogic<SourceNextResult<T>, PoolNextInput<TInput>> | PromiseActorLogic<{ item: T | null; open: number; }, PoolNextInput<TInput>> | PromiseActorLogic<T | null, PoolNextInput<TInput>> | PromiseActorLogic<null, PoolNextInput<TInput>>`
|
|
27
29
|
|
|
28
30
|
Claim the next ready item. Write it as an xstate promise actor,
|
|
29
|
-
`fromPromise(async ({ input }) => …)`. Its input is `
|
|
30
|
-
workers have now,
|
|
31
|
-
|
|
32
|
-
starts, after each claim, and when a worker settles. While workers run and no item is ready, it
|
|
33
|
-
also calls it on `wake` and every `pollEvery`.
|
|
31
|
+
`fromPromise(async ({ input }) => …)`. Its input is [`PoolNextInput`](type-poolnextinput.md): `active`, the ids of
|
|
32
|
+
the items that workers have now, `settled`, the ids of the items that finished or failed, and
|
|
33
|
+
`input`, the Pool's input. It must not give again an item in `active` or `settled`. It resolves
|
|
34
|
+
to a [`SourceNextResult`](type-sourcenextresult.md). The Pool calls it when the run starts, after each claim, and when a worker settles. While workers run and no item is ready, it
|
|
35
|
+
also calls it on `wake`, on a Hook's `reread()` and every `pollEvery`.
|
|
34
36
|
- `wake` (optional): [`EventDef`](type-eventdef.md)
|
|
35
37
|
|
|
36
38
|
An external event, made with `defineEvent`, that tells the Pool that new work is ready, for
|
|
37
|
-
example from
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
example from `jr2 send`. While workers run and no item is ready, it makes the Pool call `next`
|
|
40
|
+
at once. The Pool serves it as a Gate named `source` for the whole run (`<path>.source` when the
|
|
41
|
+
Pool is composed in another Machine). Default: none.
|
|
40
42
|
- `pollEvery` (optional): `number`
|
|
41
43
|
|
|
42
44
|
While workers run and no item is ready, call `next` again after this many milliseconds. Use
|
|
43
45
|
it for a Source whose items change while the run waits. Default: none, so the Pool calls
|
|
44
|
-
`next` again only when a worker settles
|
|
46
|
+
`next` again only when a worker settles, `wake` comes, or a Hook's handler gives `reread()`.
|
|
47
|
+
- `hooks` (optional): `SourceHooks<Reread, TInput>`
|
|
48
|
+
|
|
49
|
+
What a Hook's delivery does: a handler for each Hook kind id and event key gives `reread()` or
|
|
50
|
+
`skip(reason)`. Default: none.
|
|
51
|
+
- `reply` (optional): `SourceReply<T>`
|
|
52
|
+
|
|
53
|
+
The text that the person who acted reads, from the verdict. Default: none.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SourceVerdict
|
|
3
|
+
description: "A Source's verdict on one delivery, as its `reply` reads it (ADR-0017)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `SourceVerdict`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/pool.ts`. It is an export of `@jr2/orchestrator`, in the [Composition](group-composition.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type SourceVerdict<T> =
|
|
12
|
+
| { readonly verdict: "held"; readonly key: string; readonly item: T }
|
|
13
|
+
| { readonly verdict: "existing"; readonly key: string; readonly item: T; readonly run?: string }
|
|
14
|
+
| { readonly verdict: "hold-full"; readonly key: string; readonly item: T }
|
|
15
|
+
| { readonly verdict: "reread" }
|
|
16
|
+
| { readonly verdict: "skipped"; readonly reason: string };
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
A Source's verdict on one delivery, as its `reply` reads it ([ADR-0017](../decisions/0017-pool-over-a-source-port.md)). `held`, `existing` and
|
|
20
|
+
`hold-full` come from a push Source and carry the item and its key; `existing` names the run
|
|
21
|
+
that holds the key, when one holds it. `reread` comes from a Source that can read. `skipped`
|
|
22
|
+
carries the reason. A Pool that is paused has no run, so no `reply` of it runs: the door writes
|
|
23
|
+
that text.
|
|
24
|
+
|
|
25
|
+
**Forms**: it is one of these objects.
|
|
26
|
+
|
|
27
|
+
- Form 1: `verdict`, `key`, `item`
|
|
28
|
+
|
|
29
|
+
- `verdict`: `"held"`
|
|
30
|
+
- `key`: `string`
|
|
31
|
+
- `item`: `T`
|
|
32
|
+
- Form 2: `verdict`, `key`, `item`, `run`
|
|
33
|
+
|
|
34
|
+
- `verdict`: `"existing"`
|
|
35
|
+
- `key`: `string`
|
|
36
|
+
- `item`: `T`
|
|
37
|
+
- `run` (optional): `string`
|
|
38
|
+
- Form 3: `verdict`, `key`, `item`
|
|
39
|
+
|
|
40
|
+
- `verdict`: `"hold-full"`
|
|
41
|
+
- `key`: `string`
|
|
42
|
+
- `item`: `T`
|
|
43
|
+
- Form 4: `verdict`
|
|
44
|
+
|
|
45
|
+
- `verdict`: `"reread"`
|
|
46
|
+
- Form 5: `verdict`, `reason`
|
|
47
|
+
|
|
48
|
+
- `verdict`: `"skipped"`
|
|
49
|
+
- `reason`: `string`
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: StandingPoolMachine
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `StandingPoolMachine`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/pool.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 StandingPoolMachine = StateMachine<any, any, any, any, any, any, any, any, any, {}, never, any, any, any>;
|
|
12
|
+
```
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: StandingPoolSpec
|
|
3
|
+
description: What you pass to `pool()` for a Pool of runs.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `StandingPoolSpec`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/pool.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 StandingPoolSpec<T, I> = {
|
|
12
|
+
id?: string;
|
|
13
|
+
standing: true;
|
|
14
|
+
source: SourceSpec<T, {}> | SourceSpec<T> | ReadSourceSpec<T, {}> | ReadSourceSpec<T> | PushSourceSpec<T>;
|
|
15
|
+
itemId: (item: T) => string;
|
|
16
|
+
cap: number;
|
|
17
|
+
itemInput?: (item: T) => I;
|
|
18
|
+
input?: never;
|
|
19
|
+
onDrained?: never;
|
|
20
|
+
failures?: never;
|
|
21
|
+
};
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
What you pass to `pool()` for a Pool of runs. The worker is a `dispatch(...)` slot, and the Pool
|
|
25
|
+
stands. Each item is a run of the slot's Workflow, keyed by `itemId` in that Workflow.
|
|
26
|
+
|
|
27
|
+
**Fields**
|
|
28
|
+
|
|
29
|
+
- `id` (optional): `string`
|
|
30
|
+
|
|
31
|
+
The Machine id: the name of the Pool in the Console. Default: `"pool"`.
|
|
32
|
+
- `standing`: `true`
|
|
33
|
+
|
|
34
|
+
A Pool of runs stands: jr2 keeps one live run of its Workflow, and it never ends by itself.
|
|
35
|
+
- `source`: `SourceSpec<T, {}> | SourceSpec<T> | ReadSourceSpec<T, {}> | ReadSourceSpec<T> | PushSourceSpec<T>`
|
|
36
|
+
|
|
37
|
+
Where the items come from: a pull, a read or a push Source. Make it with [`source`](source.md).
|
|
38
|
+
- `itemId`: `(item: T) => string`
|
|
39
|
+
|
|
40
|
+
The id of an item, and the KEY of its run in the slot's Workflow ([ADR-0071](../decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md)): every Pool, every
|
|
41
|
+
hand-over and every `jr2 run` that gives this key to that Workflow gets the same run while its
|
|
42
|
+
row lives — while it is live, and for `runs.retain` after it ends.
|
|
43
|
+
- `cap`: `number`
|
|
44
|
+
|
|
45
|
+
The most LIVE runs at once that this Pool dispatched. You must choose it.
|
|
46
|
+
- `itemInput` (optional): `(item: T) => I`
|
|
47
|
+
|
|
48
|
+
Make a run's body from its item. Default: the item itself.
|
|
49
|
+
- `input` (optional): `never`
|
|
50
|
+
- `onDrained` (optional): `never`
|
|
51
|
+
- `failures` (optional): `never`
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SteerArgs
|
|
3
|
+
description: "The arguments a `steer` text or `from` function gets: the Machine's context and the event that the transition takes."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `SteerArgs`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/steer.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 SteerArgs<TContext, TEvent> = { context: TContext; event: TEvent };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The arguments a `steer` text or `from` function gets: the Machine's context and the event that
|
|
15
|
+
the transition takes.
|
|
16
|
+
|
|
17
|
+
**Fields**
|
|
18
|
+
|
|
19
|
+
- `context`: `TContext`
|
|
20
|
+
- `event`: `TEvent`
|
|
@@ -5,7 +5,7 @@ description: "How hard the model thinks before it answers: `\"off\"`, `\"minimal
|
|
|
5
5
|
|
|
6
6
|
# `ThinkingLevel`
|
|
7
7
|
|
|
8
|
-
Type, in `@jr2/orchestrator/src/agent.ts`. It is an export of `@jr2/orchestrator`,
|
|
8
|
+
Type, in `@jr2/orchestrator/src/agent.ts`. It is an export of `@jr2/orchestrator`, in the [Agents](group-agents.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
9
|
|
|
10
10
|
```ts
|
|
11
11
|
type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
@@ -5,7 +5,7 @@ description: "The User Container in its object form: its image, and its part of
|
|
|
5
5
|
|
|
6
6
|
# `UserContainer`
|
|
7
7
|
|
|
8
|
-
Type, in `@jr2/orchestrator/src/size.ts`. It is an export of `@jr2/orchestrator`,
|
|
8
|
+
Type, in `@jr2/orchestrator/src/size.ts`. It is an export of `@jr2/orchestrator`, in the [Composition](group-composition.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
9
|
|
|
10
10
|
```ts
|
|
11
11
|
type UserContainer = {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Workspaced
|
|
3
|
-
description: "The input of a `workspace()` body: the run input, plus `workspace`, the handles that the Workspace adds (`workspace.repos`,
|
|
3
|
+
description: "The input of a `workspace()` body: the run input, plus `workspace`, the handles that the Workspace adds (`workspace.repos`, the folder of each Repo Slot)."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# `Workspaced`
|
|
7
7
|
|
|
8
|
-
Type, in `@jr2/orchestrator/src/workspace.ts`. It is an export of `@jr2/orchestrator`,
|
|
8
|
+
Type, in `@jr2/orchestrator/src/workspace.ts`. It is an export of `@jr2/orchestrator`, in the [Workspaces and Repos](group-workspaces-and-repos.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
9
|
|
|
10
10
|
```ts
|
|
11
11
|
type Workspaced<TInput, TSlots extends string> = WithoutEmptyIndex<TInput> & {
|
|
@@ -14,7 +14,7 @@ type Workspaced<TInput, TSlots extends string> = WithoutEmptyIndex<TInput> & {
|
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
The input of a `workspace()` body: the run input, plus `workspace`, the handles that the
|
|
17
|
-
Workspace adds (`workspace.repos`,
|
|
17
|
+
Workspace adds (`workspace.repos`, the folder of each Repo Slot). Use it as the type of
|
|
18
18
|
the body's input.
|
|
19
19
|
|
|
20
20
|
The first argument is the run input: the `input` schema of the `workspace()`. The second is the
|
|
@@ -36,16 +36,29 @@ Its fields are the fields of the run input, and `workspace`. The run input can h
|
|
|
36
36
|
|
|
37
37
|
```ts
|
|
38
38
|
import { z } from "zod";
|
|
39
|
-
import {
|
|
39
|
+
import {
|
|
40
|
+
agent,
|
|
41
|
+
defineEvent,
|
|
42
|
+
fail,
|
|
43
|
+
isReady,
|
|
44
|
+
jr2Setup,
|
|
45
|
+
workspace,
|
|
46
|
+
worktree,
|
|
47
|
+
type Workspaced,
|
|
48
|
+
} from "@jr2/orchestrator";
|
|
40
49
|
|
|
41
50
|
const done = defineEvent({
|
|
42
51
|
name: "done",
|
|
43
52
|
description: "Call this when REVIEW.md is written.",
|
|
44
53
|
input: z.object({}),
|
|
45
54
|
});
|
|
46
|
-
const runInput = z.object({
|
|
55
|
+
const runInput = z.object({ sha: z.string() });
|
|
47
56
|
type BodyInput = Workspaced<z.infer<typeof runInput>, "app">;
|
|
48
57
|
|
|
58
|
+
// A handle is the slot's folder: `/work/app`. A helper returns `as const`, so that the compiler
|
|
59
|
+
// sees the slot.
|
|
60
|
+
const reviewTree = (context: BodyInput) => `${context.workspace.repos.app}/review` as const;
|
|
61
|
+
|
|
49
62
|
const body = jr2Setup({
|
|
50
63
|
types: {} as { input: BodyInput; context: BodyInput },
|
|
51
64
|
events: [done],
|
|
@@ -55,25 +68,34 @@ const body = jr2Setup({
|
|
|
55
68
|
instructions: "You review one commit and write REVIEW.md.",
|
|
56
69
|
workspace: "read",
|
|
57
70
|
}),
|
|
71
|
+
cut: worktree(),
|
|
58
72
|
fail: fail(),
|
|
59
73
|
},
|
|
60
74
|
}).createMachine({
|
|
61
75
|
id: "review",
|
|
62
76
|
context: ({ input }) => input,
|
|
63
77
|
on: { "workspace.lost": ".lost", "agent.fault": ".failed" },
|
|
64
|
-
initial: "
|
|
78
|
+
initial: "cutting",
|
|
65
79
|
states: {
|
|
80
|
+
cutting: {
|
|
81
|
+
invoke: {
|
|
82
|
+
src: "cut",
|
|
83
|
+
input: ({ context }) => ({ path: reviewTree(context), detach: context.sha }),
|
|
84
|
+
onDone: [{ guard: ({ event }) => isReady(event.output), target: "reviewing" }, { target: "notCut" }],
|
|
85
|
+
},
|
|
86
|
+
},
|
|
66
87
|
reviewing: {
|
|
67
88
|
invoke: {
|
|
68
89
|
src: "reviewer",
|
|
69
90
|
input: ({ context }) => ({
|
|
70
|
-
prompt: `Review commit ${context.sha}
|
|
71
|
-
cwd: context
|
|
91
|
+
prompt: `Review commit ${context.sha}.`,
|
|
92
|
+
cwd: reviewTree(context),
|
|
72
93
|
}),
|
|
73
94
|
},
|
|
74
95
|
on: { done: "finished" },
|
|
75
96
|
},
|
|
76
97
|
finished: { type: "final" },
|
|
98
|
+
notCut: { invoke: { src: "fail", input: { reason: "the Worktree was not cut" } } },
|
|
77
99
|
failed: { invoke: { src: "fail", input: { reason: "the Agent's Turn could not go on" } } },
|
|
78
100
|
lost: { invoke: { src: "fail", input: { reason: "the Sandbox is gone" } } },
|
|
79
101
|
},
|
|
@@ -82,7 +104,6 @@ const body = jr2Setup({
|
|
|
82
104
|
export const machine = workspace(body, {
|
|
83
105
|
input: runInput,
|
|
84
106
|
repos: { app: "https://github.com/you/app.git" },
|
|
85
|
-
spec: ({ input }) => ({ branch: input.branch, reviewSha: input.sha }),
|
|
86
107
|
});
|
|
87
108
|
```
|
|
88
109
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: WorkspaceHandles
|
|
3
|
-
description: "What the body of a `workspace()` gets as `input.workspace`: the
|
|
3
|
+
description: "What the body of a `workspace()` gets as `input.workspace`: the folder of each Repo Slot."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# `WorkspaceHandles`
|
|
@@ -13,11 +13,10 @@ type WorkspaceHandles<TSlots extends string> = [TSlots] extends [never]
|
|
|
13
13
|
: SlotHandles<TSlots>;
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
What the body of a `workspace()` gets as `input.workspace`: the
|
|
17
|
-
|
|
16
|
+
What the body of a `workspace()` gets as `input.workspace`: the folder of each Repo Slot. A path
|
|
17
|
+
is correct in each Instance that registers the Machine.
|
|
18
18
|
|
|
19
19
|
`TSlots` is the names of the Repo Slots that the body reads. `workspace()` refuses a body that
|
|
20
20
|
names a slot that the Workspace does not have. Write `string` for a body that names no slot and
|
|
21
|
-
reads the
|
|
22
|
-
Workspace with no Repo Slot: its handles are `{ repos: {} }`,
|
|
23
|
-
in `/work`.
|
|
21
|
+
reads the folders in the order of `repos`, as under `repos: open`. Write `never` for a
|
|
22
|
+
Workspace with no Repo Slot: its handles are `{ repos: {} }`, and its Agents work in `/work`.
|
|
@@ -13,7 +13,6 @@ type WorkspaceOptions<TSchema extends z.ZodObject, TSlots extends string> = Sand
|
|
|
13
13
|
z.infer<TSchema>
|
|
14
14
|
> & {
|
|
15
15
|
input: TSchema;
|
|
16
|
-
spec: (args: { input: WithoutEmptyIndex<z.infer<TSchema>> & HostInjectedInput }) => WorkspaceSpec;
|
|
17
16
|
};
|
|
18
17
|
```
|
|
19
18
|
|
|
@@ -24,16 +23,5 @@ The options of a `workspace()` that declares the input that starts a run.
|
|
|
24
23
|
- `input`: `TSchema`
|
|
25
24
|
|
|
26
25
|
The input that starts a run, as a `z.object`. jr2 checks each start against it. It also types
|
|
27
|
-
the `input` of
|
|
26
|
+
the `input` of a per-run Repo Slot, and the body must accept it plus the
|
|
28
27
|
`workspace` handles. Write it here, not on the body.
|
|
29
|
-
- `spec`: `(args: { input: WithoutEmptyIndex<z.infer<TSchema>> & HostInjectedInput; }) => WorkspaceSpec`
|
|
30
|
-
|
|
31
|
-
A function from the run input to the Workspace's [`WorkspaceSpec`](type-workspacespec.md): the `branch` it works
|
|
32
|
-
on, and optionally `reviewSha` and `workGroup`. jr2 calls it when the run enters the
|
|
33
|
-
Workspace.
|
|
34
|
-
|
|
35
|
-
The input of `spec` also holds `instanceId`, the seed Instance ID of the run (see
|
|
36
|
-
[`HostInjectedInput`](type-hostinjectedinput.md)). Use it to give each run a branch of its own:
|
|
37
|
-
``spec: ({ input }) => ({ branch: `fix/${input.instanceId}` })``. Only a root `workspace()` gets
|
|
38
|
-
it from jr2. A `workspace()` that a different Machine invokes gets only the input that its
|
|
39
|
-
parent gives it, so that parent must give `instanceId` when `spec` reads it.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorktreeFound
|
|
3
|
+
description: What a cut found.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `WorktreeFound`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/worktree.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 WorktreeFound = "held" | "local" | "remote" | "none" | "commit" | (string & {});
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
What a cut found. `held`: a cut made this Worktree earlier, so what is in it is earlier work;
|
|
15
|
+
`local`, a local branch; `remote`, `origin/<branch>`, now tracked; `none`, a new branch with no
|
|
16
|
+
upstream; `commit`, a detached cut. Open: a later value does not break an author's code.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorktreeInput
|
|
3
|
+
description: "The input of a `worktree()`: a branch Worktree, or a detached one."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `WorktreeInput`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/worktree.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type WorktreeInput =
|
|
12
|
+
| {
|
|
13
|
+
path: AnyWorktreePath;
|
|
14
|
+
branch: string;
|
|
15
|
+
from?: string;
|
|
16
|
+
detach?: never;
|
|
17
|
+
expect?: never;
|
|
18
|
+
}
|
|
19
|
+
| {
|
|
20
|
+
path: AnyWorktreePath;
|
|
21
|
+
detach: string;
|
|
22
|
+
branch?: never;
|
|
23
|
+
from?: never;
|
|
24
|
+
expect?: never;
|
|
25
|
+
};
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The input of a `worktree()`: a branch Worktree, or a detached one.
|
|
29
|
+
|
|
30
|
+
**Forms**: it is one of these objects.
|
|
31
|
+
|
|
32
|
+
- Form 1: `path`, `branch`, `from`, `detach`, `expect`
|
|
33
|
+
|
|
34
|
+
- `path`: [`AnyWorktreePath`](type-anyworktreepath.md)
|
|
35
|
+
|
|
36
|
+
The root of the Worktree: `${context.workspace.repos.app}/<name>`, a constant word.
|
|
37
|
+
- `branch`: `string`
|
|
38
|
+
|
|
39
|
+
The branch. It resolves as a local branch, then `origin/<branch>` (tracked), then a new
|
|
40
|
+
branch.
|
|
41
|
+
- `from` (optional): `string`
|
|
42
|
+
|
|
43
|
+
Where a new branch starts. Default: the Binding's base. On a branch that exists, it must
|
|
44
|
+
be that branch's tip, or the cut is `refused`.
|
|
45
|
+
- `detach` (optional): `never`
|
|
46
|
+
- `expect` (optional): `never`
|
|
47
|
+
- Form 2: `path`, `detach`, `branch`, `from`, `expect`
|
|
48
|
+
|
|
49
|
+
- `path`: [`AnyWorktreePath`](type-anyworktreepath.md)
|
|
50
|
+
- `detach`: `string`
|
|
51
|
+
|
|
52
|
+
The commit to check out, with no branch. The Worktree is forced to it and cleaned on each
|
|
53
|
+
cut. Ignored files stay, so that a reviewer can run the tests.
|
|
54
|
+
- `branch` (optional): `never`
|
|
55
|
+
- `from` (optional): `never`
|
|
56
|
+
- `expect` (optional): `never`
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorktreeKey
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `WorktreeKey`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/effect.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type WorktreeKey<Opt> = [Opt] extends [{ readonly env: object }]
|
|
12
|
+
? { worktree: AnyWorktreePath }
|
|
13
|
+
: { worktree?: AnyWorktreePath };
|
|
14
|
+
```
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorktreeOptions
|
|
3
|
+
description: The options of `worktree()`.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `WorktreeOptions`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/worktree.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type WorktreeOptions = {
|
|
12
|
+
expect?: "new" | "existing";
|
|
13
|
+
timeout?: Duration;
|
|
14
|
+
};
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The options of `worktree()`.
|
|
18
|
+
|
|
19
|
+
**Fields**
|
|
20
|
+
|
|
21
|
+
- `expect` (optional): `"new" | "existing"`
|
|
22
|
+
|
|
23
|
+
`"new"`: refuse a branch that exists, local or on the remote. For a name that a planner or a
|
|
24
|
+
door chose for new work: a collision is a refusal, not someone else's branch. `"existing"`:
|
|
25
|
+
refuse a branch that does not exist, and make nothing. For a run that must continue a branch.
|
|
26
|
+
A Chart cannot change it, and a cut lent to a Chart must state it.
|
|
27
|
+
- `timeout` (optional): [`Duration`](type-duration.md)
|
|
28
|
+
|
|
29
|
+
How long the fetch and the cut can take. Default `"10m"`.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorktreeOutput
|
|
3
|
+
description: The output of a `worktree()`.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `WorktreeOutput`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/worktree.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type WorktreeOutput<S extends string = string> = WorktreeReady<S> | WorktreeRefused | Unknown | LaterOutcome;
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The output of a `worktree()`. `unknown`: its state exited while it ran, or the cut did not end.
|
|
15
|
+
|
|
16
|
+
**Forms**: it is one of these objects.
|
|
17
|
+
|
|
18
|
+
- Form 1: `outcome`, `reason`
|
|
19
|
+
|
|
20
|
+
- `outcome`: `"unknown"`
|
|
21
|
+
- `reason`: `string`
|
|
22
|
+
- Form 2: `outcome`, `slot`, `path`, `branch`, `head`, `found`, `stale`
|
|
23
|
+
|
|
24
|
+
- `outcome`: `"ready"`
|
|
25
|
+
- `slot`: `S`
|
|
26
|
+
- `path`: `WorktreePath<S>`
|
|
27
|
+
- `branch`: `string | null`
|
|
28
|
+
|
|
29
|
+
The branch of the cut, from git and the cut's record, never from the folder or HEAD. `null`
|
|
30
|
+
when the Worktree is detached.
|
|
31
|
+
- `head`: `string`
|
|
32
|
+
|
|
33
|
+
The tip of `branch` (of the commit, when detached). Never HEAD.
|
|
34
|
+
- `found`: [`WorktreeFound`](type-worktreefound.md)
|
|
35
|
+
- `stale` (optional): `string`
|
|
36
|
+
|
|
37
|
+
[ADR-0053](../decisions/0053-a-fetch-inside-the-pod-asks-the-node-cache-and-the-cache-asks-the-remote.md)'s words when the remote did not answer. The cut used what the clone holds.
|
|
38
|
+
- Form 3: `outcome`, `reason`
|
|
39
|
+
|
|
40
|
+
- `outcome`: `"refused"`
|
|
41
|
+
- `reason`: `string`
|
|
42
|
+
- Form 4: `outcome`, `reason`
|
|
43
|
+
|
|
44
|
+
- `outcome`: `"(a later outcome)"`
|
|
45
|
+
- `reason` (optional): `string`
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorktreePath
|
|
3
|
+
description: A Worktree of the Repo Slots `S`.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `WorktreePath`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/worktree.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type WorktreePath<S extends string> = `/work/${S}/${NameStart}${string}`;
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
A Worktree of the Repo Slots `S`. One segment below the slot, that starts with a letter, a
|
|
15
|
+
digit or `_`: `${context.workspace.repos.app}/run`. The compiler sees the start of the name; a
|
|
16
|
+
`/` further on is the Effect's own refusal.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorktreeReady
|
|
3
|
+
description: Type, an export of @jr2/orchestrator.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `WorktreeReady`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/worktree.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type WorktreeReady<S extends string = string> = {
|
|
12
|
+
outcome: "ready";
|
|
13
|
+
slot: S;
|
|
14
|
+
path: WorktreePath<S>;
|
|
15
|
+
branch: string | null;
|
|
16
|
+
head: string;
|
|
17
|
+
found: WorktreeFound;
|
|
18
|
+
stale?: string;
|
|
19
|
+
};
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Fields**
|
|
23
|
+
|
|
24
|
+
- `outcome`: `"ready"`
|
|
25
|
+
- `slot`: `S`
|
|
26
|
+
- `path`: `WorktreePath<S>`
|
|
27
|
+
- `branch`: `string | null`
|
|
28
|
+
|
|
29
|
+
The branch of the cut, from git and the cut's record, never from the folder or HEAD. `null`
|
|
30
|
+
when the Worktree is detached.
|
|
31
|
+
- `head`: `string`
|
|
32
|
+
|
|
33
|
+
The tip of `branch` (of the commit, when detached). Never HEAD.
|
|
34
|
+
- `found`: [`WorktreeFound`](type-worktreefound.md)
|
|
35
|
+
- `stale` (optional): `string`
|
|
36
|
+
|
|
37
|
+
[ADR-0053](../decisions/0053-a-fetch-inside-the-pod-asks-the-node-cache-and-the-cache-asks-the-remote.md)'s words when the remote did not answer. The cut used what the clone holds.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorktreeRefused
|
|
3
|
+
description: No Worktree, and nothing changed.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `WorktreeRefused`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/worktree.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 WorktreeRefused = { outcome: "refused"; reason: string };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
No Worktree, and nothing changed. The cause is a bad path, a name git or the push refuses, a
|
|
15
|
+
re-cut that does not agree with the first, a branch that another Worktree holds, an `expect` that does not hold, or a
|
|
16
|
+
name that the remote cannot confirm.
|
|
17
|
+
|
|
18
|
+
**Fields**
|
|
19
|
+
|
|
20
|
+
- `outcome`: `"refused"`
|
|
21
|
+
- `reason`: `string`
|