@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
|
@@ -10,23 +10,18 @@ Type, in `@jr2/orchestrator/src/workspace.ts`. The signature of an export, or a
|
|
|
10
10
|
```ts
|
|
11
11
|
type PermissiveWorkspaceOptions<TSlots extends string, TInput = unknown> = SandboxOptions<TSlots, TInput> & {
|
|
12
12
|
input?: never;
|
|
13
|
-
spec: (args: { input: TInput }) => WorkspaceSpec;
|
|
14
13
|
};
|
|
15
14
|
```
|
|
16
15
|
|
|
17
|
-
The options of a `workspace()` with no `input`: it starts with any input. The `input` of
|
|
18
|
-
is then `unknown`, and
|
|
16
|
+
The options of a `workspace()` with no `input`: it starts with any input. The `input` of a
|
|
17
|
+
per-run Repo Slot is then `unknown`, and the mapper must check it before it reads a field.
|
|
19
18
|
|
|
20
|
-
Use it for a Workspace that a Pool or another Machine starts.
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
Use it for a Workspace that a Pool or another Machine starts. The body's `input` type says what
|
|
20
|
+
that input is, and that also types the input of the Workspace. For a Workspace that a caller
|
|
21
|
+
starts, declare `input`.
|
|
23
22
|
|
|
24
23
|
**Fields**: each field of [`SandboxOptions`](type-sandboxoptions.md), and these:
|
|
25
24
|
|
|
26
25
|
- `input` (optional): `never`
|
|
27
26
|
|
|
28
27
|
Not present: a `workspace()` without `input` starts with any input.
|
|
29
|
-
- `spec`: `(args: { input: TInput; }) => WorkspaceSpec`
|
|
30
|
-
|
|
31
|
-
A function from the input to the Workspace's [`WorkspaceSpec`](type-workspacespec.md). Its `input` is
|
|
32
|
-
`unknown` unless you give the parameter a type: `spec: ({ input }: { input: Item }) => …`.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: PoolNextInput
|
|
3
|
+
description: "The input of a Source's `next`: the ids of the items that workers have now, the ids of the items that settled, and the Pool's input."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `PoolNextInput`
|
|
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 PoolNextInput<TInput = unknown> = { active: string[]; settled: string[]; input: TInput };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The input of a Source's `next`: the ids of the items that workers have now, the ids of the items
|
|
15
|
+
that settled, and the Pool's input. So a Source over a list that a Machine holds needs no state
|
|
16
|
+
of its own.
|
|
17
|
+
|
|
18
|
+
**Fields**
|
|
19
|
+
|
|
20
|
+
- `active`: `string[]`
|
|
21
|
+
- `settled`: `string[]`
|
|
22
|
+
- `input`: `TInput`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: PoolSpec
|
|
3
|
-
description:
|
|
3
|
+
description: What you pass to `pool()` with a child Machine as its worker.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# `PoolSpec`
|
|
@@ -11,17 +11,18 @@ Type, in `@jr2/orchestrator/src/pool.ts`. The signature of an export, or a type
|
|
|
11
11
|
type PoolSpec<T, TInput = unknown> = {
|
|
12
12
|
id?: string;
|
|
13
13
|
input?: z.ZodObject;
|
|
14
|
-
source: SourceSpec<T>;
|
|
14
|
+
source: SourceSpec<T, TInput> | SourceSpec<T> | ReadSourceSpec<T, TInput> | ReadSourceSpec<T>;
|
|
15
15
|
itemId: (item: T) => string;
|
|
16
16
|
cap?: number | ((args: { input: TInput }) => number);
|
|
17
17
|
itemInput?: (item: T, args: { input: TInput }) => unknown;
|
|
18
18
|
onDrained?: "final";
|
|
19
19
|
failures?: "fail" | "report";
|
|
20
|
+
standing?: false;
|
|
20
21
|
};
|
|
21
22
|
```
|
|
22
23
|
|
|
23
|
-
What you pass to `pool()
|
|
24
|
-
each worker gets.
|
|
24
|
+
What you pass to `pool()` with a child Machine as its worker. It says where the items come
|
|
25
|
+
from, how many workers run at once, and what each worker gets.
|
|
25
26
|
|
|
26
27
|
**Fields**
|
|
27
28
|
|
|
@@ -33,9 +34,10 @@ each worker gets.
|
|
|
33
34
|
The run input of the Pool, as a zod object: what a caller sends to start a run. `cap` and
|
|
34
35
|
`itemInput` read it, typed by it. A worker never gets it: each worker gets its item. Default:
|
|
35
36
|
none, and then their `input` is `unknown`.
|
|
36
|
-
- `source`: `SourceSpec<T>`
|
|
37
|
+
- `source`: `SourceSpec<T, TInput> | SourceSpec<T> | ReadSourceSpec<T, TInput> | ReadSourceSpec<T>`
|
|
37
38
|
|
|
38
|
-
Where the items come from. Make it with [`source`](source.md).
|
|
39
|
+
Where the items come from: a pull or a read Source. Make it with [`source`](source.md). A push Source
|
|
40
|
+
needs a standing Pool of runs.
|
|
39
41
|
- `itemId`: `(item: T) => string`
|
|
40
42
|
|
|
41
43
|
The id of an item. The Pool uses it as the id of the item's worker and in the `active` list
|
|
@@ -58,3 +60,6 @@ each worker gets.
|
|
|
58
60
|
ends with failures, `drained` or `deadlocked`, it fails the run with the reason
|
|
59
61
|
`"<n> of <m> items failed"` and the detail `{ status, items, failures }`. `"report"`: the Pool
|
|
60
62
|
ends `done`, with the failures in its output. Default: `"fail"`.
|
|
63
|
+
- `standing` (optional): `false`
|
|
64
|
+
|
|
65
|
+
A Pool of child Machines never stands: a child cannot be handed over.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: PushInput
|
|
3
|
-
description: "The input of a `push` Effect: `{ sha }` with `pin`, and `{ message }` with `squash`."
|
|
3
|
+
description: "The input of a `push` Effect: the Worktree that a cut made, `{ sha }` with `pin`, and `{ message }` with `squash`."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# `PushInput`
|
|
@@ -8,8 +8,27 @@ description: "The input of a `push` Effect: `{ sha }` with `pin`, and `{ message
|
|
|
8
8
|
Type, in `@jr2/orchestrator/src/sandbox-effect.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
|
|
9
9
|
|
|
10
10
|
```ts
|
|
11
|
-
type PushInput<O extends PushOptions> =
|
|
11
|
+
type PushInput<O extends PushOptions> = {
|
|
12
|
+
worktree: O extends { slot: infer S extends string } ? `/work/${S}/${string}` : AnyWorktreePath;
|
|
13
|
+
branch?: never;
|
|
14
|
+
to?: never;
|
|
15
|
+
cwd?: never;
|
|
16
|
+
path?: never;
|
|
17
|
+
} & (O["pin"] extends true ? { sha: string } : unknown) &
|
|
12
18
|
(O["squash"] extends true ? { message: string } : unknown);
|
|
13
19
|
```
|
|
14
20
|
|
|
15
|
-
The input of a `push` Effect:
|
|
21
|
+
The input of a `push` Effect: the Worktree that a cut made, `{ sha }` with `pin`, and
|
|
22
|
+
`{ message }` with `squash`. It names no branch: jr2 reads it from the cut's record, so no word of
|
|
23
|
+
a Chart reaches a remote branch. The other keys are refused by name, because each is a key of a
|
|
24
|
+
cut or a Turn, and a mapper's excess key is no compile error otherwise.
|
|
25
|
+
|
|
26
|
+
**Fields**
|
|
27
|
+
|
|
28
|
+
- `worktree`: ``O extends { slot: infer S extends string; } ? `/work/${S}/${string}` : AnyWorktreePath``
|
|
29
|
+
|
|
30
|
+
The Worktree to push: `event.output.path` of its cut, of the push's Repo Slot.
|
|
31
|
+
- `branch` (optional): `never`
|
|
32
|
+
- `to` (optional): `never`
|
|
33
|
+
- `cwd` (optional): `never`
|
|
34
|
+
- `path` (optional): `never`
|
|
@@ -5,12 +5,13 @@ description: "The output of a `push` Effect: what the `onDone` of its state gets
|
|
|
5
5
|
|
|
6
6
|
# `PushOutput`
|
|
7
7
|
|
|
8
|
-
Type, in `@jr2/orchestrator/src/sandbox-effect.ts`. It is an export of `@jr2/orchestrator`,
|
|
8
|
+
Type, in `@jr2/orchestrator/src/sandbox-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
9
|
|
|
10
10
|
```ts
|
|
11
11
|
type PushOutput =
|
|
12
12
|
| Exclude<PushWireOutput, { outcome: "pushed" }>
|
|
13
|
-
| (Omit<Extract<PushWireOutput, { outcome: "pushed" }>, "bundle"> & { sync: SyncState; syncReason?: string })
|
|
13
|
+
| (Omit<Extract<PushWireOutput, { outcome: "pushed" }>, "bundle"> & { sync: SyncState; syncReason?: string })
|
|
14
|
+
| LaterOutcome;
|
|
14
15
|
```
|
|
15
16
|
|
|
16
17
|
The output of a `push` Effect: what the `onDone` of its state gets as `event.output`. Every
|
|
@@ -40,6 +41,8 @@ Beside `pushed`, `sync` tells what jr2 did to the Agent's branch after the push:
|
|
|
40
41
|
|
|
41
42
|
With `busy` or `not-synced`, `syncReason` tells why, and jr2 tries again before the next push.
|
|
42
43
|
|
|
44
|
+
The union is open (`LaterOutcome`): give the rest a last arm with no guard.
|
|
45
|
+
|
|
43
46
|
**Forms**: it is one of these objects.
|
|
44
47
|
|
|
45
48
|
- Form 1: `outcome`, `stage`, `reason`, `detail`
|
|
@@ -70,13 +73,28 @@ With `busy` or `not-synced`, `syncReason` tells why, and jr2 tries again before
|
|
|
70
73
|
- `squashed` (optional): `"signed" | "unsigned"`
|
|
71
74
|
- `sync`: [`SyncState`](type-syncstate.md)
|
|
72
75
|
- `syncReason` (optional): `string`
|
|
76
|
+
- Form 5: `outcome`, `reason`
|
|
77
|
+
|
|
78
|
+
- `outcome`: `"(a later outcome)"`
|
|
79
|
+
- `reason` (optional): `string`
|
|
73
80
|
|
|
74
81
|
**Example**
|
|
75
82
|
|
|
76
83
|
```ts
|
|
77
|
-
import {
|
|
84
|
+
import {
|
|
85
|
+
fail,
|
|
86
|
+
isReady,
|
|
87
|
+
jr2Setup,
|
|
88
|
+
push,
|
|
89
|
+
type PushOutput,
|
|
90
|
+
workspace,
|
|
91
|
+
worktree,
|
|
92
|
+
type Workspaced,
|
|
93
|
+
} from "@jr2/orchestrator";
|
|
94
|
+
|
|
95
|
+
type Input = Workspaced<{ branch: string; sha: string }, "app">;
|
|
78
96
|
|
|
79
|
-
|
|
97
|
+
const releaseTree = (context: Input) => `${context.workspace.repos.app}/release` as const;
|
|
80
98
|
|
|
81
99
|
// A push that did not happen (`rejected` or `diverged`) is a different problem from one jr2
|
|
82
100
|
// cannot see (`unknown`).
|
|
@@ -85,17 +103,24 @@ const notPushed = (output: PushOutput): boolean =>
|
|
|
85
103
|
|
|
86
104
|
const body = jr2Setup({
|
|
87
105
|
types: {} as { context: Input; input: Input },
|
|
88
|
-
actors: { publish: push({ pin: true }), fail: fail() },
|
|
106
|
+
actors: { cut: worktree({ expect: "existing" }), publish: push({ pin: true }), fail: fail() },
|
|
89
107
|
}).createMachine({
|
|
90
108
|
id: "release",
|
|
91
109
|
context: ({ input }) => input,
|
|
92
110
|
on: { "workspace.lost": ".lost" },
|
|
93
|
-
initial: "
|
|
111
|
+
initial: "cutting",
|
|
94
112
|
states: {
|
|
113
|
+
cutting: {
|
|
114
|
+
invoke: {
|
|
115
|
+
src: "cut",
|
|
116
|
+
input: ({ context }) => ({ path: releaseTree(context), branch: context.branch }),
|
|
117
|
+
onDone: [{ guard: ({ event }) => isReady(event.output), target: "publishing" }, { target: "notCut" }],
|
|
118
|
+
},
|
|
119
|
+
},
|
|
95
120
|
publishing: {
|
|
96
121
|
invoke: {
|
|
97
122
|
src: "publish",
|
|
98
|
-
input: ({ context }) => ({ sha: context.sha }),
|
|
123
|
+
input: ({ context }) => ({ worktree: releaseTree(context), sha: context.sha }),
|
|
99
124
|
onDone: [
|
|
100
125
|
{ guard: ({ event }) => event.output.outcome === "pushed", target: "published" },
|
|
101
126
|
{ guard: ({ event }) => notPushed(event.output), target: "notPushed" },
|
|
@@ -107,13 +132,13 @@ const body = jr2Setup({
|
|
|
107
132
|
// Not final states: each one fails the run, with its own reason.
|
|
108
133
|
notPushed: { invoke: { src: "fail", input: { reason: "the remote refused the push" } } },
|
|
109
134
|
unknown: { invoke: { src: "fail", input: { reason: "jr2 cannot tell if the push happened" } } },
|
|
135
|
+
notCut: { invoke: { src: "fail", input: { reason: "the Worktree was not cut" } } },
|
|
110
136
|
lost: { invoke: { src: "fail", input: { reason: "the Sandbox is gone" } } },
|
|
111
137
|
},
|
|
112
138
|
});
|
|
113
139
|
|
|
114
140
|
export const machine = workspace(body, {
|
|
115
141
|
repos: { app: { url: "https://github.com/you/app.git" } },
|
|
116
|
-
spec: () => ({ branch: "release" }),
|
|
117
142
|
});
|
|
118
143
|
```
|
|
119
144
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: PushSourceSpec
|
|
3
|
+
description: A push Source.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `PushSourceSpec`
|
|
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 PushSourceSpec<T> = {
|
|
12
|
+
item: z.ZodType<T>;
|
|
13
|
+
hooks: SourceHooks<Carry<T>, {}>;
|
|
14
|
+
hold?: number;
|
|
15
|
+
reply?: SourceReply<T>;
|
|
16
|
+
};
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
A push Source. Nothing can be read again, and each item comes in a Hook's delivery. A handler
|
|
20
|
+
gives `carry(item)` or `skip(reason)`. The Pool holds each carried item in its run's blob, in the
|
|
21
|
+
order of arrival, until it claims it. Only a standing Pool takes a push Source. Make one with
|
|
22
|
+
[`source`](source.md).
|
|
23
|
+
|
|
24
|
+
**Fields**
|
|
25
|
+
|
|
26
|
+
- `item`: `z.ZodType<T>`
|
|
27
|
+
|
|
28
|
+
The schema of an item. The Pool parses each carried item with it before it holds it.
|
|
29
|
+
- `hooks`: `SourceHooks<Carry<T>, {}>`
|
|
30
|
+
|
|
31
|
+
A handler for each Hook kind id and event key. It gives `carry(item)` or `skip(reason)`.
|
|
32
|
+
- `hold` (optional): `number`
|
|
33
|
+
|
|
34
|
+
The most items that the Pool holds. Above it, a carried item is `hold-full`, and the Hook's
|
|
35
|
+
answer is 429. Default: 1000.
|
|
36
|
+
- `reply` (optional): `SourceReply<T>`
|
|
37
|
+
|
|
38
|
+
The text that the person who acted reads, from the verdict. Default: none.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: ReadSourceSpec
|
|
3
|
+
description: A read Source.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `ReadSourceSpec`
|
|
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 ReadSourceSpec<T, TInput = unknown, R extends AnyActorLogic = AnyActorLogic> = {
|
|
12
|
+
read: R;
|
|
13
|
+
items?: (output: LookOutput<R>, args: { input: TInput }) => readonly T[];
|
|
14
|
+
wake?: EventDef;
|
|
15
|
+
pollEvery?: number;
|
|
16
|
+
hooks?: SourceHooks<Reread, TInput>;
|
|
17
|
+
reply?: SourceReply<T>;
|
|
18
|
+
};
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
A read Source. `read` reads the whole set, and `items` turns its answer into the items, in
|
|
22
|
+
order. The read is an `http` Effect marked `idempotent: true`, so it can spend a secret that the
|
|
23
|
+
Instance Effector holds, or a promise (`fromPromise`). Its input is the Pool's input. A read that
|
|
24
|
+
fails gives no items. The read is the truth: a Hook's delivery only says "read again". Make one
|
|
25
|
+
with [`source`](source.md).
|
|
26
|
+
|
|
27
|
+
**Fields**
|
|
28
|
+
|
|
29
|
+
- `read`: `R`
|
|
30
|
+
|
|
31
|
+
The read: an `http` Effect marked `idempotent: true`, or a promise. The Pool runs it at the
|
|
32
|
+
start, after a worker settles, on `wake`, on a Hook's `reread()` and every `pollEvery`.
|
|
33
|
+
- `items` (optional): `(output: LookOutput<R>, args: { input: TInput; }) => readonly T[]`
|
|
34
|
+
|
|
35
|
+
The items in the read's answer, in order. Default: the answer itself, when it is an array.
|
|
36
|
+
- `wake` (optional): [`EventDef`](type-eventdef.md)
|
|
37
|
+
|
|
38
|
+
As a pull Source's `wake`.
|
|
39
|
+
- `pollEvery` (optional): `number`
|
|
40
|
+
|
|
41
|
+
Read again after this many milliseconds while the Pool waits. Default: none.
|
|
42
|
+
- `hooks` (optional): `SourceHooks<Reread, TInput>`
|
|
43
|
+
|
|
44
|
+
What a Hook's delivery does: a handler gives `reread()` or `skip(reason)`. Default: none.
|
|
45
|
+
- `reply` (optional): `SourceReply<T>`
|
|
46
|
+
|
|
47
|
+
The text that the person who acted reads, from the verdict. Default: none.
|
|
@@ -5,7 +5,7 @@ description: The value of one Repo Slot in `workspace({ repos })`.
|
|
|
5
5
|
|
|
6
6
|
# `RepoSlot`
|
|
7
7
|
|
|
8
|
-
Type, in `@jr2/orchestrator/src/parts.ts`. It is an export of `@jr2/orchestrator`,
|
|
8
|
+
Type, in `@jr2/orchestrator/src/parts.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 RepoSlot<TInput = unknown> =
|
|
@@ -24,10 +24,11 @@ The value of one Repo Slot in `workspace({ repos })`. One of:
|
|
|
24
24
|
- a function of the run input, `({ input }) => url` or a [`Binding`](type-binding.md): each run chooses. The
|
|
25
25
|
url must match an entry of `git.credentials` in `jr2.config.ts`, or the run cannot use it.
|
|
26
26
|
|
|
27
|
-
The key of the slot is a directory name under `/work`. It starts with a letter,
|
|
28
|
-
`workspace()` and `customize()` refuse a key that does
|
|
29
|
-
not a directory name — a slot becomes `/work/<slot
|
|
30
|
-
|
|
27
|
+
The key of the slot is a directory name under `/work`. It starts with a letter, so never with
|
|
28
|
+
`.`: `/work/.jr2/` is reserved for jr2. `workspace()` and `customize()` refuse a key that does
|
|
29
|
+
not: ``<where>: Repo Slot key "<key>" is not a directory name — a slot becomes `/work/<slot>`,
|
|
30
|
+
`/work/.jr2/` is reserved for jr2, and its order matters, so it starts with a letter and matches
|
|
31
|
+
/^[A-Za-z][A-Za-z0-9._-]*$/ (ADR-0051, ADR-0075).`` They refuse a value of another
|
|
31
32
|
shape: ``<where>: Repo Slot "<slot>" is <what> — a slot is `open`, a url, `{ url, ref? }`, or a
|
|
32
33
|
mapper `({ input }) => url | { url, ref? }` over the door (ADR-0051).``
|
|
33
34
|
|
|
@@ -58,7 +59,6 @@ export const deploy = workspace(body, {
|
|
|
58
59
|
docs: "https://github.com/you/docs.git",
|
|
59
60
|
config: open,
|
|
60
61
|
},
|
|
61
|
-
spec: ({ input }) => ({ branch: `deploy/${input.service}` }),
|
|
62
62
|
});
|
|
63
63
|
```
|
|
64
64
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Reread
|
|
3
|
+
description: What `reread()` gives.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `Reread`
|
|
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 Reread = { readonly [VERDICT]: "reread" };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
What `reread()` gives. Only a Source that can read (`next` or `read`) gives it.
|
|
15
|
+
|
|
16
|
+
**Fields**
|
|
17
|
+
|
|
18
|
+
- `[VERDICT]`: `"reread"`
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: RunsConfig
|
|
3
|
+
description: How long jr2 keeps an ended run, and the volume that keeps it (ADR-0065).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `RunsConfig`
|
|
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 RunsConfig = {
|
|
12
|
+
retain?: `${number}${"m" | "h" | "d" | "w"}`;
|
|
13
|
+
volume?: string;
|
|
14
|
+
};
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
How long jr2 keeps an ended run, and the volume that keeps it ([ADR-0065](../decisions/0065-a-persist-survives-a-crash-and-history-is-kept-for-a-set-time.md)). When the config loads,
|
|
18
|
+
a bad field is refused: `<file> at runs.<field>: <problem>`.
|
|
19
|
+
|
|
20
|
+
**Fields**
|
|
21
|
+
|
|
22
|
+
- `retain` (optional): `` `${number}${"m" | "h" | "d" | "w"}` ``
|
|
23
|
+
|
|
24
|
+
How long jr2 keeps an ended run: its row, its conversations and the hook log. A number and
|
|
25
|
+
`m`, `h`, `d` or `w`, such as `"90d"`. At least `"1h"`, with no upper limit. A live run is
|
|
26
|
+
never removed. Default: `"30d"`.
|
|
27
|
+
- `volume` (optional): `string`
|
|
28
|
+
|
|
29
|
+
The size of the Orchestrator's state volume claim: a number and a unit, such as `"5Gi"` or
|
|
30
|
+
`"500Mi"` (a number with no unit is refused). Default: `"5Gi"` for a
|
|
31
|
+
new claim; unset, `jr2 up` keeps the size of a claim that exists. A larger size grows the
|
|
32
|
+
claim where its StorageClass allows expansion, else `jr2 up` refuses it. A smaller size is
|
|
33
|
+
refused: Kubernetes never makes a claim smaller.
|
|
34
|
+
|
|
35
|
+
**Example**
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import { defineConfig } from "@jr2/orchestrator";
|
|
39
|
+
|
|
40
|
+
export default defineConfig({ runs: { retain: "90d", volume: "20Gi" } });
|
|
41
|
+
```
|
|
@@ -10,6 +10,7 @@ Type, in `@jr2/orchestrator/src/workspace.ts`. The signature of an export, or a
|
|
|
10
10
|
```ts
|
|
11
11
|
type SandboxOptions<TSlots extends string, TInput = unknown> = {
|
|
12
12
|
image?: string;
|
|
13
|
+
workGroup?: number;
|
|
13
14
|
user?: string | UserContainer;
|
|
14
15
|
resources?: Size;
|
|
15
16
|
repos: Record<TSlots, RepoSlot<TInput>> | typeof open;
|
|
@@ -30,6 +31,9 @@ clones. They are the same for each run.
|
|
|
30
31
|
(`import.meta.resolve("./image")`), which `jr2 up` builds, or a registry ref. Its floor is
|
|
31
32
|
glibc and git; jr2 adds its own runtime at `/opt/jr2`. Default: the Instance's
|
|
32
33
|
`images/default`, then jr2's Harness image.
|
|
34
|
+
- `workGroup` (optional): `number`
|
|
35
|
+
|
|
36
|
+
The group id that owns the files in `/work`. Default: 2000. A non-negative integer.
|
|
33
37
|
- `user` (optional): `string | UserContainer`
|
|
34
38
|
|
|
35
39
|
The User Container: a third container in the Sandbox, for a service that must run beside the
|
|
@@ -52,8 +56,8 @@ clones. They are the same for each run.
|
|
|
52
56
|
choice. The name is the key of `workspace.repos` in the body and the directory under `/work`.
|
|
53
57
|
At least one slot. Leave `repos` out for a Workspace with no Repo Slot (see
|
|
54
58
|
[`NoSlotWorkspaceOptions`](type-noslotworkspaceoptions.md)). Each value is one of:
|
|
55
|
-
- a url, or `{ url, ref }`, where `ref` is the branch or commit that the
|
|
56
|
-
(default: the Repo's default branch);
|
|
59
|
+
- a url, or `{ url, ref }`, where `ref` is the branch, the tag or the commit that the clone
|
|
60
|
+
stays on, and that a new branch starts from (default: the Repo's default branch);
|
|
57
61
|
- `open`, for the Instance that registers the Machine to bind with `customize()`;
|
|
58
62
|
- a function of the run input, `({ input }) => url` or `{ url, ref }`, when each run chooses.
|
|
59
63
|
|
|
@@ -63,8 +67,11 @@ clones. They are the same for each run.
|
|
|
63
67
|
|
|
64
68
|
The Held secrets that this Sandbox can use: names from the `secrets` list in `jr2.config.ts`.
|
|
65
69
|
The Sandbox's Custodian holds each value and puts it into requests to the hosts of that Held
|
|
66
|
-
secret.
|
|
67
|
-
|
|
70
|
+
secret. Listing a name also gives its Stand-in to the Agent's programs — each `bash` call, test,
|
|
71
|
+
build and `command` — in their env under that name, so code in `/work` can spend it ([ADR-0076](../decisions/0076-an-agents-control-credential-lives-only-where-no-workspace-code-runs.md)).
|
|
72
|
+
You need not list the model key of an Agent that runs here: its provider claims it, and the
|
|
73
|
+
Harness gives it to the model calls alone. List the model key only when code in `/work` must
|
|
74
|
+
call the model itself: such a call is outside the Turn's usage record. Each name once.
|
|
68
75
|
- `effector` (optional): `object`
|
|
69
76
|
|
|
70
77
|
The image of the Sandbox Effector. This container runs three kinds of Effect for this
|
|
@@ -8,12 +8,37 @@ description: "Who delivered an event: an Agent by its slot, or a Gate by its inv
|
|
|
8
8
|
Type, in `src/define-event.ts` of `@jr2/agent-protocol`, a dependency of `@jr2/orchestrator`. 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 Sender = {
|
|
11
|
+
type Sender = {
|
|
12
|
+
readonly party: "agent" | "gate";
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly via?: "token" | "jwt" | "hook";
|
|
15
|
+
readonly name?: string;
|
|
16
|
+
readonly onBehalfOf?: string;
|
|
17
|
+
readonly checked?: readonly SenderCallerField[];
|
|
18
|
+
};
|
|
12
19
|
```
|
|
13
20
|
|
|
14
21
|
Who delivered an event: an Agent by its slot, or a Gate by its invoke id ([ADR-0015](../decisions/0015-authoring-surface-absorbs-the-mechanism.md)).
|
|
15
22
|
|
|
23
|
+
A Gate's event also carries the Caller that answered it ([ADR-0011](../decisions/0011-workflow-defined-events.md), [ADR-0078](../decisions/0078-a-caller-comes-from-one-authenticator-seam-and-acts-within-its-scopes.md)): `via` and `name`
|
|
24
|
+
name it, `onBehalfOf` is the party that it says it acts for, and `checked` names the fields that
|
|
25
|
+
jr2 verified. `via` and `name` are always checked, because an authenticator made them;
|
|
26
|
+
`onBehalfOf` is checked only for a Hook, whose signature covers the payload that it comes from.
|
|
27
|
+
An event that a Gate gives with no Caller (its `look`) has none of these fields.
|
|
28
|
+
|
|
16
29
|
**Fields**
|
|
17
30
|
|
|
18
31
|
- `party`: `"agent" | "gate"`
|
|
19
32
|
- `id`: `string`
|
|
33
|
+
- `via` (optional): `"token" | "jwt" | "hook"`
|
|
34
|
+
|
|
35
|
+
The authenticator that made the Caller: `token`, `jwt` or `hook`. A Gate's event only.
|
|
36
|
+
- `name` (optional): `string`
|
|
37
|
+
|
|
38
|
+
The Caller's name for that authenticator. A Gate's event only.
|
|
39
|
+
- `onBehalfOf` (optional): `string`
|
|
40
|
+
|
|
41
|
+
The party that the Caller says it acts for. A claim, unless `checked` names it.
|
|
42
|
+
- `checked` (optional): `readonly SenderCallerField[]`
|
|
43
|
+
|
|
44
|
+
The fields of the Caller that jr2 verified.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SenderCallerField
|
|
3
|
+
description: "A field of a `Sender`'s Caller that jr2 can verify."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `SenderCallerField`
|
|
7
|
+
|
|
8
|
+
Type, in `src/define-event.ts` of `@jr2/agent-protocol`, a dependency of `@jr2/orchestrator`. 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 SenderCallerField = "via" | "name" | "onBehalfOf";
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
A field of a [`Sender`](type-sender.md)'s Caller that jr2 can verify.
|
|
@@ -5,7 +5,7 @@ description: "The Size of a Workspace: the most memory and cpu that its whole Sa
|
|
|
5
5
|
|
|
6
6
|
# `Size`
|
|
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 Size = {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Skip
|
|
3
|
+
description: "What `skip(reason)` gives: the delivery brings nothing, and the reason says why."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `Skip`
|
|
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 Skip = { readonly [VERDICT]: "skip"; readonly reason: string };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
What `skip(reason)` gives: the delivery brings nothing, and the reason says why.
|
|
15
|
+
|
|
16
|
+
**Fields**
|
|
17
|
+
|
|
18
|
+
- `[VERDICT]`: `"skip"`
|
|
19
|
+
- `reason`: `string`
|
|
@@ -9,9 +9,7 @@ Type, in `@jr2/orchestrator/src/workspace.ts`. The signature of an export, or a
|
|
|
9
9
|
|
|
10
10
|
```ts
|
|
11
11
|
type SlotHandles<TSlots extends string> = {
|
|
12
|
-
repos:
|
|
13
|
-
branch: string;
|
|
14
|
-
review?: Partial<Record<TSlots, string>>;
|
|
12
|
+
repos: { [K in TSlots]: `/work/${K}` };
|
|
15
13
|
};
|
|
16
14
|
```
|
|
17
15
|
|
|
@@ -19,14 +17,8 @@ The handles of a Workspace that declares Repo Slots. @internal
|
|
|
19
17
|
|
|
20
18
|
**Fields**
|
|
21
19
|
|
|
22
|
-
- `repos`:
|
|
20
|
+
- `repos`: ``{ [K in TSlots]: `/work/${K}`; }``
|
|
23
21
|
|
|
24
|
-
The
|
|
25
|
-
`
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
The branch that the Workspace works on: the `branch` of the spec.
|
|
29
|
-
- `review` (optional): `Partial<Record<TSlots, string>>`
|
|
30
|
-
|
|
31
|
-
The path of each Repo Slot's review Worktree. Present only when the spec has `reviewSha`.
|
|
32
|
-
Give one to a reviewer's Turn as its `cwd`.
|
|
22
|
+
The folder of each Repo Slot, `/work/<slot>`, in the order that `repos` declares the slots.
|
|
23
|
+
`${handle}/default` is the clone, on the Binding's base. Any other Worktree is one the Machine
|
|
24
|
+
cut with `worktree()`.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SourceHooks
|
|
3
|
+
description: "A Source's handlers, by Hook kind and event key."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `SourceHooks`
|
|
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 SourceHooks<Out, TInput = unknown> = KindHooks<SourceIn<TInput>, Out | Skip>;
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
A Source's handlers, by Hook kind and event key. They have the shape of a Gate's `hooks`. A
|
|
15
|
+
handler is pure and synchronous. It gives `Out` or `skip(reason)`, never `undefined`; a throw is a
|
|
16
|
+
skip with the error as its reason.
|
|
17
|
+
|
|
18
|
+
**Fields**
|
|
19
|
+
|
|
20
|
+
- `github` (optional): `typeof github`
|
|
21
|
+
- `gitlab` (optional): `typeof gitlab`
|
|
22
|
+
- `slack` (optional): `typeof slack`
|
|
23
|
+
- `discord` (optional): `typeof discord`
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SourceIn
|
|
3
|
+
description: "What a Source's handler reads beside `payload`."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `SourceIn`
|
|
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 SourceIn<TInput = unknown> = {
|
|
12
|
+
readonly caller: CallerRecord;
|
|
13
|
+
readonly delivery: string;
|
|
14
|
+
readonly input: TInput;
|
|
15
|
+
};
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
What a Source's handler reads beside `payload`. `caller` is the Hook as a Caller, `delivery` the
|
|
19
|
+
delivery id, and `input` the Pool's input (`{}` for a standing Pool).
|
|
20
|
+
|
|
21
|
+
**Fields**
|
|
22
|
+
|
|
23
|
+
- `caller`: [`CallerRecord`](type-callerrecord.md)
|
|
24
|
+
- `delivery`: `string`
|
|
25
|
+
- `input`: `TInput`
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SourceReply
|
|
3
|
+
description: "The text that the person who acted reads, from this Source's verdict (ADR-0011, ADR-0017)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `SourceReply`
|
|
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 SourceReply<T> = (verdict: SourceVerdict<T>, at: { readonly caller: CallerRecord }) => string | undefined;
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The text that the person who acted reads, from this Source's verdict ([ADR-0011](../decisions/0011-workflow-defined-events.md), [ADR-0017](../decisions/0017-pool-over-a-source-port.md)).
|
|
15
|
+
Plain text: the Hook kind escapes it and puts it in its envelope. Pure and synchronous.
|
|
16
|
+
`undefined` or `""`: this Source says nothing. It runs only for a delivery whose answer a person
|
|
17
|
+
reads (`slack`, `discord`). The text of a `skipped` verdict shows only when no other target gave
|
|
18
|
+
a text.
|