@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
|
@@ -5,7 +5,7 @@ description: "The parts of one Machine that `customize()` can retune: its Agents
|
|
|
5
5
|
|
|
6
6
|
# `Customize`
|
|
7
7
|
|
|
8
|
-
Type, in `@jr2/orchestrator/src/customize.ts`. It is an export of `@jr2/orchestrator`,
|
|
8
|
+
Type, in `@jr2/orchestrator/src/customize.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 Customize<M extends AnyStateMachine> = {
|
|
@@ -15,13 +15,23 @@ type Customize<M extends AnyStateMachine> = {
|
|
|
15
15
|
effects?: [OpenEffectSlots<Reached<M>>] extends [never]
|
|
16
16
|
? never
|
|
17
17
|
: { [K in OpenEffectSlots<Reached<M>>]?: BindingOf<LogicAt<Reached<M>, K>> };
|
|
18
|
+
gates?: [GateSlots<Reached<M>>] extends [never]
|
|
19
|
+
? never
|
|
20
|
+
: {
|
|
21
|
+
[K in GateSlots<Reached<M>>]?: GateBinding<
|
|
22
|
+
GateTypesAt<Reached<M>, K>["meta"],
|
|
23
|
+
GateTypesAt<Reached<M>, K>["ev"]
|
|
24
|
+
>;
|
|
25
|
+
};
|
|
18
26
|
actors?: [ChildSlots<Reached<M>>] extends [never]
|
|
19
27
|
? never
|
|
20
28
|
: { [K in ChildSlots<Reached<M>>]?: Customize<ChildAt<Reached<M>, K>> };
|
|
21
29
|
image?: string;
|
|
22
30
|
user?: string | UserContainer;
|
|
23
31
|
resources?: Size;
|
|
24
|
-
repos?: [RepoSlotsOf<M>] extends [never]
|
|
32
|
+
repos?: [RepoSlotsOf<M>] extends [never]
|
|
33
|
+
? never
|
|
34
|
+
: { [K in RepoSlotsOf<M>]?: RepoSlot<Exclude<InputFrom<WorkspaceOf<M>>, undefined>> };
|
|
25
35
|
};
|
|
26
36
|
```
|
|
27
37
|
|
|
@@ -52,6 +62,13 @@ Every key is optional. Write only what you change.
|
|
|
52
62
|
whose target is Open. For an Effect with two Open parts, one object holds both keys, and
|
|
53
63
|
a binding that leaves one out does not compile. Only Effects with an Open part are offered.
|
|
54
64
|
See [`EffectBinding`](type-effectbinding.md) for the values and the refusals.
|
|
65
|
+
- `gates` (optional): `[ GateSlots<Reached<M>> ] extends [ never ] ? never : { [K in GateSlots<Reached<M>>]?: GateBinding<GateTypesAt<Reached<M>, K>["meta"], GateTypesAt<Reached<M>, K>["ev"]>; }`
|
|
66
|
+
|
|
67
|
+
Bind the look of a Gate slot (`gate({ … })`) that a package left `open`, and add, replace or
|
|
68
|
+
remove its handlers by Hook kind id and event key (`null` removes one), by slot name:
|
|
69
|
+
`{ review: { look, hooks: { gitlab: { "note.MergeRequest": null } } } }`. At run time,
|
|
70
|
+
`customize()` refuses a slot that holds no Gate slot: `customize(): machine "<id>" carries no
|
|
71
|
+
Gate slot "<slot>" — its Gate slots are: <slots>`.
|
|
55
72
|
- `actors` (optional): `[ ChildSlots<Reached<M>> ] extends [ never ] ? never : { [K in ChildSlots<Reached<M>>]?: Customize<ChildAt<Reached<M>, K>>; }`
|
|
56
73
|
|
|
57
74
|
Retune a Machine that this Machine composes, by slot name. The value has the same shape as
|
|
@@ -74,7 +91,7 @@ Every key is optional. Write only what you change.
|
|
|
74
91
|
The Size, layered field by field over the Size of the `workspace()`: `{ limits: { memory } }`
|
|
75
92
|
keeps the author's cpu. Only `limits.memory` and `limits.cpu`. See [`Size`](type-size.md). Only for a
|
|
76
93
|
Machine that composes a `workspace()`.
|
|
77
|
-
- `repos` (optional): `[ RepoSlotsOf<M> ] extends [ never ] ? never : { [K in RepoSlotsOf<M>]?: RepoSlot<InputFrom<WorkspaceOf<M
|
|
94
|
+
- `repos` (optional): `[ RepoSlotsOf<M> ] extends [ never ] ? never : { [K in RepoSlotsOf<M>]?: RepoSlot<Exclude<InputFrom<WorkspaceOf<M>>, undefined>>; }`
|
|
78
95
|
|
|
79
96
|
Bind the Repo Slots of the `workspace()`, by slot name. Each value is one of these:
|
|
80
97
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Delivered
|
|
3
|
+
description: "One plain event of a list of defs: `{ type: \"approve\", by }`."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `Delivered`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/gate.ts`. It is an export of `@jr2/orchestrator`, in the [Gates](group-gates.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type Delivered<D extends readonly EventDef[]> = {
|
|
12
|
+
[K in keyof D]: D[K] extends EventDef ? EventFrom<D[K]> : never;
|
|
13
|
+
}[number];
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
One plain event of a list of defs: `{ type: "approve", by }`. What a handler, a look's `until`
|
|
17
|
+
and a Gate's `reply` see.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: DeliveredEvent
|
|
3
|
+
description: "A workflow event as delivered into a Machine: the def's name as `type`, plus its payload."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `DeliveredEvent`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/registration.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 DeliveredEvent = { type: string } & Record<string, unknown>;
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
A workflow event as delivered into a Machine: the def's name as `type`, plus its payload.
|
|
15
|
+
|
|
16
|
+
**Fields**
|
|
17
|
+
|
|
18
|
+
- `type`: `string`
|
|
@@ -34,6 +34,7 @@ The definition of a `dispatch` Effect ([ADR-0071](../decisions/0071-a-run-starts
|
|
|
34
34
|
How long the Effect waits: by default 30s for the start, and 10m with `wait`.
|
|
35
35
|
- `target` (optional): `{ url: string; token: NamedSecret; } | typeof open`
|
|
36
36
|
|
|
37
|
-
A different Orchestrator: `url` is its origin, and `token` is the secret that holds
|
|
38
|
-
|
|
39
|
-
<slot>: { target: { url, token
|
|
37
|
+
A different Orchestrator: `url` is its origin, and `token` is the secret that holds the token
|
|
38
|
+
of a Caller of it with `start` for the Workflow, and `read` too when `wait` is true. Or `open`,
|
|
39
|
+
which the composer binds with `customize(<import>, { effects: { <slot>: { target: { url, token
|
|
40
|
+
} } } })`. Without it, the run starts in this Orchestrator.
|
|
@@ -5,7 +5,7 @@ description: The output of a `dispatch` Effect.
|
|
|
5
5
|
|
|
6
6
|
# `DispatchOutput`
|
|
7
7
|
|
|
8
|
-
Type, in `@jr2/orchestrator/src/effect.ts`. It is an export of `@jr2/orchestrator`,
|
|
8
|
+
Type, in `@jr2/orchestrator/src/effect.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
9
|
|
|
10
10
|
```ts
|
|
11
11
|
type DispatchOutput =
|
|
@@ -18,7 +18,8 @@ type DispatchOutput =
|
|
|
18
18
|
}
|
|
19
19
|
| { outcome: "refused"; status: number; report: string[] }
|
|
20
20
|
| { outcome: "unreachable"; reason: string }
|
|
21
|
-
| Unknown
|
|
21
|
+
| Unknown
|
|
22
|
+
| LaterOutcome;
|
|
22
23
|
```
|
|
23
24
|
|
|
24
25
|
The output of a `dispatch` Effect. Route on `outcome`:
|
|
@@ -34,6 +35,8 @@ The output of a `dispatch` Effect. Route on `outcome`:
|
|
|
34
35
|
- `unreachable`: the Orchestrator of the target did not answer. No run started.
|
|
35
36
|
- `unknown`: jr2 cannot tell if a run started.
|
|
36
37
|
|
|
38
|
+
The union is open ([`LaterOutcome`](type-lateroutcome.md)): give the rest a last arm with no guard.
|
|
39
|
+
|
|
37
40
|
**Forms**: it is one of these objects.
|
|
38
41
|
|
|
39
42
|
- Form 1: `outcome`, `reason`
|
|
@@ -59,6 +62,10 @@ The output of a `dispatch` Effect. Route on `outcome`:
|
|
|
59
62
|
|
|
60
63
|
- `outcome`: `"unreachable"`
|
|
61
64
|
- `reason`: `string`
|
|
65
|
+
- Form 6: `outcome`, `reason`
|
|
66
|
+
|
|
67
|
+
- `outcome`: `"(a later outcome)"`
|
|
68
|
+
- `reason` (optional): `string`
|
|
62
69
|
|
|
63
70
|
**See also**
|
|
64
71
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: DoorlessInput
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `DoorlessInput`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/workspace.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type DoorlessInput<TBody extends AnyStateMachine> =
|
|
12
|
+
unknown extends InputFrom<TBody>
|
|
13
|
+
? unknown
|
|
14
|
+
: [keyof Omit<InputFrom<TBody>, "workspace">] extends [never]
|
|
15
|
+
? unknown
|
|
16
|
+
: {} extends Omit<InputFrom<TBody>, "workspace">
|
|
17
|
+
? Omit<InputFrom<TBody>, "workspace"> | undefined
|
|
18
|
+
: Omit<InputFrom<TBody>, "workspace">;
|
|
19
|
+
```
|
|
@@ -5,7 +5,7 @@ description: The values that bind the Open parts of one Effect.
|
|
|
5
5
|
|
|
6
6
|
# `EffectBinding`
|
|
7
7
|
|
|
8
|
-
Type, in `@jr2/orchestrator/src/open-effect.ts`. It is an export of `@jr2/orchestrator`,
|
|
8
|
+
Type, in `@jr2/orchestrator/src/open-effect.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 EffectBinding = {
|
|
@@ -13,13 +13,16 @@ type EffectBinding = {
|
|
|
13
13
|
readonly argv?: readonly (string | Arg)[];
|
|
14
14
|
readonly secret?: string;
|
|
15
15
|
readonly target?: { readonly url: string; readonly token: Secret };
|
|
16
|
+
readonly server?: string;
|
|
17
|
+
readonly tool?: string;
|
|
16
18
|
};
|
|
17
19
|
```
|
|
18
20
|
|
|
19
21
|
The values that bind the Open parts of one Effect. A packaged Machine leaves a part of an Effect
|
|
20
22
|
Open when it cannot know it. That part is the url of an `http` Effect, the argv of a `command`,
|
|
21
23
|
the name of a secret, written `secret(open)`, or the target of a `dispatch`: the url of another
|
|
22
|
-
Orchestrator and the secret that holds its Instance token, bound as one
|
|
24
|
+
Orchestrator and the secret that holds its Instance token, bound as one, or the server or the tool
|
|
25
|
+
of an `mcp` Effect. You bind it once, where you register the
|
|
23
26
|
Machine, with `customize(machine, { effects: { <slot>: binding } })`. Each key binds one Open
|
|
24
27
|
part. For an Effect with two Open parts, one object holds both keys.
|
|
25
28
|
|
|
@@ -63,6 +66,13 @@ check that a part written in the definition gets.
|
|
|
63
66
|
|
|
64
67
|
- `url`: `string`
|
|
65
68
|
- `token`: [`Secret`](type-secret.md)
|
|
69
|
+
- `server` (optional): `string`
|
|
70
|
+
|
|
71
|
+
The server of an `mcp` Effect whose server is Open: a name of the `mcp` block of
|
|
72
|
+
`jr2.config.ts`. The server's url and its secret are the config's.
|
|
73
|
+
- `tool` (optional): `string`
|
|
74
|
+
|
|
75
|
+
The tool of an `mcp.call` Effect whose tool is Open: a tool name of the server.
|
|
66
76
|
|
|
67
77
|
**Example**
|
|
68
78
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: FileBody
|
|
3
|
-
description: "`file(path, {
|
|
3
|
+
description: "`file(path, { segments?, contentType? })`: a Worktree file as an `http` body."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# `FileBody`
|
|
@@ -11,14 +11,13 @@ Type, in `@jr2/orchestrator/src/http-effect.ts`. The signature of an export, or
|
|
|
11
11
|
type FileBody<S extends z.ZodType | undefined = undefined> = {
|
|
12
12
|
readonly file: {
|
|
13
13
|
readonly path: FromInput<S, string>;
|
|
14
|
-
readonly slot?: string;
|
|
15
14
|
readonly segments?: FromInput<S, readonly string[]>;
|
|
16
15
|
readonly contentType?: string;
|
|
17
16
|
};
|
|
18
17
|
};
|
|
19
18
|
```
|
|
20
19
|
|
|
21
|
-
`file(path, {
|
|
20
|
+
`file(path, { segments?, contentType? })`: a Worktree file as an `http` body.
|
|
22
21
|
|
|
23
22
|
**Fields**
|
|
24
23
|
|
|
@@ -26,11 +25,8 @@ type FileBody<S extends z.ZodType | undefined = undefined> = {
|
|
|
26
25
|
|
|
27
26
|
- `path`: `FromInput<S, string>`
|
|
28
27
|
|
|
29
|
-
The file, relative to the
|
|
30
|
-
Slot.
|
|
31
|
-
- `slot` (optional): `string`
|
|
32
|
-
|
|
33
|
-
The Repo Slot whose Worktree holds it. Write it only when the Workspace has more than one.
|
|
28
|
+
The file, relative to the Worktree that `worktree` of the Effect's input names, or to `/work`
|
|
29
|
+
in a Workspace with no Repo Slot.
|
|
34
30
|
- `segments` (optional): `FromInput<S, readonly string[]>`
|
|
35
31
|
|
|
36
32
|
Path segments that jr2 adds to the end of the url, as `path` of `request` does for a json
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: FramePath
|
|
3
|
+
description: "A Turn's Frame in a Workspace with the Repo Slots `S`."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `FramePath`
|
|
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 FramePath<S extends string> = WorktreePath<S> | "/work";
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
A Turn's Frame in a Workspace with the Repo Slots `S`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GateBinding
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `GateBinding`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/customize.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type GateBinding<Meta, Ev> = {
|
|
12
|
+
readonly look?: GateLook<Meta, Ev> | "none";
|
|
13
|
+
readonly hooks?: GateHooksPatch<Meta, Ev>;
|
|
14
|
+
};
|
|
15
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GateHooks
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `GateHooks`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/gate.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type GateHooks<Meta, Ev> = KindHooks<GateIn<Meta>, Ev | undefined>;
|
|
12
|
+
```
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GateLook
|
|
3
|
+
description: "A Gate's read of the fact that it waits for (ADR-0011)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `GateLook`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/gate.ts`. It is an export of `@jr2/orchestrator`, in the [Gates](group-gates.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type GateLook<Meta, Ev, R extends AnyActorLogic = AnyActorLogic> = {
|
|
12
|
+
readonly read: R;
|
|
13
|
+
readonly input: (meta: Meta) => InputFrom<R>;
|
|
14
|
+
readonly every?: Duration;
|
|
15
|
+
readonly until: (output: LookOutput<R>, meta: Meta) => Ev | undefined;
|
|
16
|
+
};
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
A Gate's read of the fact that it waits for ([ADR-0011](../decisions/0011-workflow-defined-events.md)).
|
|
20
|
+
|
|
21
|
+
- `read`: an `http` Effect marked `idempotent: true`, or a promise actor (`fromPromise`), which the
|
|
22
|
+
Machine can invoke anyway and which a restore runs again. `gate()` refuses any other logic.
|
|
23
|
+
- `input`: the read's input, from the Gate's meta.
|
|
24
|
+
- `every`: how often the Gate looks again while it is open. Default: `"10m"`.
|
|
25
|
+
- `until`: the read's output as one event of `delivers`, or `undefined` for "not yet". Pure and
|
|
26
|
+
synchronous, as a guard is.
|
|
27
|
+
|
|
28
|
+
The look runs once after the Gate registers, again after each restore, and every `every` while the
|
|
29
|
+
Gate is open. It stops after the run takes its event, until the Gate opens again. A looked event
|
|
30
|
+
has the Gate as its Sender and no Caller, and the feed marks it `looked`.
|
|
31
|
+
|
|
32
|
+
**Fields**
|
|
33
|
+
|
|
34
|
+
- `read`: `R`
|
|
35
|
+
- `input`: `(meta: Meta) => InputFrom<R>`
|
|
36
|
+
- `every` (optional): [`Duration`](type-duration.md)
|
|
37
|
+
- `until`: `(output: LookOutput<R>, meta: Meta) => Ev | undefined`
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GateOutcome
|
|
3
|
+
description: What a delivery did at one open Gate.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `GateOutcome`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/gate.ts`. It is an export of `@jr2/orchestrator`, in the [Gates](group-gates.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type GateOutcome<Ev> =
|
|
12
|
+
| { readonly state: "delivered"; readonly event: Ev; readonly run: string }
|
|
13
|
+
| { readonly state: "refused"; readonly event?: Ev; readonly reason: string; readonly run: string };
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
What a delivery did at one open Gate. The run took the event, or it did not: the handler threw,
|
|
17
|
+
its event is not in `delivers`, or the run does not take it now. A Gate whose handler gave
|
|
18
|
+
`undefined` was not a target, and its `reply` does not run.
|
|
19
|
+
|
|
20
|
+
**Forms**: it is one of these objects.
|
|
21
|
+
|
|
22
|
+
- Form 1: `state`, `event`, `run`
|
|
23
|
+
|
|
24
|
+
- `state`: `"delivered"`
|
|
25
|
+
- `event`: `Ev`
|
|
26
|
+
- `run`: `string`
|
|
27
|
+
- Form 2: `state`, `event`, `reason`, `run`
|
|
28
|
+
|
|
29
|
+
- `state`: `"refused"`
|
|
30
|
+
- `event` (optional): `Ev`
|
|
31
|
+
- `reason`: `string`
|
|
32
|
+
- `run`: `string`
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GateReply
|
|
3
|
+
description: The text that the person who acted reads.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `GateReply`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/gate.ts`. It is an export of `@jr2/orchestrator`, in the [Gates](group-gates.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type GateReply<Meta, Ev> = (
|
|
12
|
+
outcome: GateOutcome<Ev>,
|
|
13
|
+
at: { readonly meta: Meta; readonly caller: CallerRecord },
|
|
14
|
+
) => string | undefined;
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The text that the person who acted reads. Plain text: the Hook kind
|
|
18
|
+
escapes it and puts it in its envelope. Pure and synchronous. `undefined` or `""`: this Gate says
|
|
19
|
+
nothing. It runs only for a delivery whose answer a person reads (`slack`, `discord`).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GateSlot
|
|
3
|
+
description: A Gate with parts that the Machine carries.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `GateSlot`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/gate.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 GateSlot<Meta, Ev> = CallbackActorLogic<
|
|
12
|
+
DeliveredEvent,
|
|
13
|
+
{} extends Meta ? GateSlotInput<Meta> | undefined : GateSlotInput<Meta>
|
|
14
|
+
> & {
|
|
15
|
+
readonly gateSlot: GateSlotParts;
|
|
16
|
+
readonly [gateSlotMark]?: { readonly meta: Meta; readonly ev: Ev };
|
|
17
|
+
};
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
A Gate with parts that the Machine carries. Put it in `actors` and invoke it by its key. The
|
|
21
|
+
brand `gateSlot` holds its parts.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GateSlotInput
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `GateSlotInput`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/gate.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type GateSlotInput<Meta> = Omit<GateInput, "meta"> &
|
|
12
|
+
({} extends Meta ? { readonly meta?: Meta } : { readonly meta: Meta });
|
|
13
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GateSlotParts
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `GateSlotParts`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/gate.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type GateSlotParts = {
|
|
12
|
+
readonly meta?: z.ZodType;
|
|
13
|
+
readonly delivers: readonly EventDef[];
|
|
14
|
+
readonly hooks: Readonly<Record<string, Readonly<Record<string, AnyHandler>>>>;
|
|
15
|
+
readonly look?: LooseLook | typeof open | "none";
|
|
16
|
+
readonly reply?: (outcome: GateOutcome<DeliveredEvent>, at: { meta: unknown; caller: CallerRecord }) => unknown;
|
|
17
|
+
};
|
|
18
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GateSlots
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `GateSlots`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/customize.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type GateSlots<M extends AnyStateMachine> = Extract<SlotsOf<M>, { logic: GateSlot<any, any> }>["src"];
|
|
12
|
+
```
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GateTypesAt
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `GateTypesAt`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/customize.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type GateTypesAt<M extends AnyStateMachine, K extends string> =
|
|
12
|
+
LogicAt<M, K> extends GateSlot<infer Meta, infer Ev> ? { meta: Meta; ev: Ev } : never;
|
|
13
|
+
```
|
|
@@ -5,7 +5,7 @@ description: The fields that jr2 adds to the input of the Machine that a run sta
|
|
|
5
5
|
|
|
6
6
|
# `HostInjectedInput`
|
|
7
7
|
|
|
8
|
-
Type, in `@jr2/orchestrator/src/vocabulary.ts`. It is an export of `@jr2/orchestrator`,
|
|
8
|
+
Type, in `@jr2/orchestrator/src/vocabulary.ts`. It is an export of `@jr2/orchestrator`, in the [Machine and events](group-machine-and-events.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
9
|
|
|
10
10
|
```ts
|
|
11
11
|
type HostInjectedInput = { instanceId: string };
|
|
@@ -20,10 +20,8 @@ caller sends it. jr2 writes it over any value that a caller sends.
|
|
|
20
20
|
|
|
21
21
|
Only the root Machine of a run gets it. A Machine that another Machine invokes gets the input
|
|
22
22
|
that its parent gives it. A `workspace()` passes its input to its body, so the body of a root
|
|
23
|
-
`workspace()` gets it too: `Workspaced<HostInjectedInput & RunInput, "app">`.
|
|
24
|
-
|
|
25
|
-
The `spec` of a root `workspace()` also gets it, and the type of its input shows it:
|
|
26
|
-
``spec: ({ input }) => ({ branch: `fix/${input.instanceId}` })``.
|
|
23
|
+
`workspace()` gets it too: `Workspaced<HostInjectedInput & RunInput, "app">`. For example, a cut
|
|
24
|
+
can name a branch for each run: `` branch: `fix/${context.instanceId}` ``.
|
|
27
25
|
|
|
28
26
|
It is not the run id. Use it, for example, to give each run a branch of its own.
|
|
29
27
|
|
|
@@ -79,10 +79,13 @@ An `http` Effect's definition.
|
|
|
79
79
|
Effect secret. Do not write it beside `body`.
|
|
80
80
|
- `body` (optional): `FileBody<S>`
|
|
81
81
|
|
|
82
|
-
A Worktree file as the body: `file(path, {
|
|
83
|
-
runs in the Sandbox Effector of its Workspace.
|
|
82
|
+
A Worktree file as the body: `file(path, { segments?, contentType? })`. The Effect then
|
|
83
|
+
runs in the Sandbox Effector of its Workspace. Under a Workspace with Repo Slots, the invoke's
|
|
84
|
+
input names a Worktree that a cut of this run made, in `worktree`; with none, it refuses when
|
|
85
|
+
it starts: ``http "<slot>" reads a Worktree file, under a Workspace with Repo Slots, and its
|
|
86
|
+
input names no `worktree` ``. Do not write `request` beside it: the `segments`
|
|
84
87
|
of `file` are the path. It refuses another body: ``http({ body }): a body is file(path, {
|
|
85
|
-
|
|
88
|
+
segments?, contentType? }) — json and text come from `request` ``.
|
|
86
89
|
- `timeout` (optional): [`Duration`](type-duration.md)
|
|
87
90
|
|
|
88
91
|
How long jr2 waits for the answer: a number and a unit, such as `"30s"` or `"2m"`. Default
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: HttpFileInput
|
|
3
|
+
description: The input of an `http` Effect with a Worktree file as its body.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `HttpFileInput`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/http-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
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type HttpFileInput<S> = (S extends z.ZodType ? z.infer<S> : unknown) & { worktree?: AnyWorktreePath };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The input of an `http` Effect with a Worktree file as its body. Under a Workspace with Repo
|
|
15
|
+
Slots, `worktree` names the Worktree. In a Workspace with no Repo Slot, the input has no
|
|
16
|
+
`worktree`, and the path is relative to `/work`.
|
|
17
|
+
|
|
18
|
+
**Fields**
|
|
19
|
+
|
|
20
|
+
- `worktree` (optional): [`AnyWorktreePath`](type-anyworktreepath.md)
|
|
@@ -5,10 +5,10 @@ description: "The output of an `http` Effect: what the `onDone` of its state get
|
|
|
5
5
|
|
|
6
6
|
# `HttpOutput`
|
|
7
7
|
|
|
8
|
-
Type, in `@jr2/orchestrator/src/effector-wire.ts`. It is an export of `@jr2/orchestrator`,
|
|
8
|
+
Type, in `@jr2/orchestrator/src/effector-wire.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
|
|
9
9
|
|
|
10
10
|
```ts
|
|
11
|
-
type HttpOutput = {
|
|
11
|
+
type HttpOutput = LaterOutcome | {
|
|
12
12
|
outcome: "response";
|
|
13
13
|
status: number;
|
|
14
14
|
headers: Record<string, string>;
|
|
@@ -37,6 +37,8 @@ outcome is output. A 4xx or 5xx status is output too. Route on `outcome`:
|
|
|
37
37
|
- `unknown`: the call can have gone out, but no answer came, or jr2 cannot tell after a restart.
|
|
38
38
|
`reason` tells why. jr2 does not send it again unless it is marked `idempotent`.
|
|
39
39
|
|
|
40
|
+
The union is open (`LaterOutcome`): give the rest a last arm with no guard.
|
|
41
|
+
|
|
40
42
|
**Forms**: it is one of these objects.
|
|
41
43
|
|
|
42
44
|
- Form 1: `outcome`, `status`, `headers`, `contentType`, `size`, `body`, `truncated`
|
|
@@ -52,6 +54,10 @@ outcome is output. A 4xx or 5xx status is output too. Route on `outcome`:
|
|
|
52
54
|
|
|
53
55
|
- `outcome`: `"unknown" | "unreachable" | "refused"`
|
|
54
56
|
- `reason`: `string`
|
|
57
|
+
- Form 3: `outcome`, `reason`
|
|
58
|
+
|
|
59
|
+
- `outcome`: `"(a later outcome)"`
|
|
60
|
+
- `reason` (optional): `string`
|
|
55
61
|
|
|
56
62
|
**Example**
|
|
57
63
|
|
|
@@ -5,7 +5,7 @@ description: "The shape of `jr2.config.ts`: the deployment facts of an Instance,
|
|
|
5
5
|
|
|
6
6
|
# `JR2Config`
|
|
7
7
|
|
|
8
|
-
Type, in `@jr2/orchestrator/src/config.ts`. It is an export of `@jr2/orchestrator`,
|
|
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
9
|
|
|
10
10
|
```ts
|
|
11
11
|
type JR2Config = {
|
|
@@ -15,6 +15,11 @@ type JR2Config = {
|
|
|
15
15
|
harness?: HarnessConfig;
|
|
16
16
|
sandbox?: SandboxConfig;
|
|
17
17
|
priorityClasses?: PriorityClasses;
|
|
18
|
+
callers?: CallersConfig;
|
|
19
|
+
cors?: readonly string[];
|
|
20
|
+
hooks?: Readonly<Record<string, Hook>>;
|
|
21
|
+
mcp?: Readonly<Record<string, McpServer>>;
|
|
22
|
+
runs?: RunsConfig;
|
|
18
23
|
registry?: string;
|
|
19
24
|
kitRegistry?: string;
|
|
20
25
|
platforms?: readonly string[];
|
|
@@ -32,7 +37,7 @@ Sandbox Image: a Machine names those itself.
|
|
|
32
37
|
Every field is optional, and an Instance can run with no `jr2.config.ts`. Write the file as
|
|
33
38
|
`export default defineConfig({ … })`. When the config loads, a file with no default export is
|
|
34
39
|
refused: `` <file> has no default export (use `export default defineConfig({…})`) ``. The load also
|
|
35
|
-
checks the shape of `git.credentials`, `secrets`, `harness.catalog` and `
|
|
40
|
+
checks the shape of `git.credentials`, `secrets`, `harness.catalog`, `priorityClasses` and `mcp`. It
|
|
36
41
|
checks that `sandbox` is an object, and checks its `resources`. Each refusal names the field.
|
|
37
42
|
`jr2 up` checks the rest.
|
|
38
43
|
|
|
@@ -67,6 +72,36 @@ checks that `sandbox` is an object, and checks its `resources`. Each refusal nam
|
|
|
67
72
|
|
|
68
73
|
Existing PriorityClasses to use in place of the two that `jr2 up` creates. See
|
|
69
74
|
[`PriorityClasses`](../config.md#priorityclasses).
|
|
75
|
+
- `callers` (optional): [`CallersConfig`](../config.md#callers)
|
|
76
|
+
|
|
77
|
+
The Callers that act on the Instance with a credential of their own, and what each may do.
|
|
78
|
+
Default: none; only the Instance token acts. See [`CallersConfig`](../config.md#callers).
|
|
79
|
+
- `cors` (optional): `readonly string[]`
|
|
80
|
+
|
|
81
|
+
The origins from which a browser app may call the Instance's HTTP API, such as
|
|
82
|
+
`https://ops.example.com`. Each entry is an origin alone: a scheme, a host and an optional port,
|
|
83
|
+
with no path. Default: none. The Console is served from the Orchestrator's own origin, so it
|
|
84
|
+
needs no entry. The config load refuses an entry that is not an origin:
|
|
85
|
+
`<file> at cors[<i>]: <entry> is not an origin — scheme://host[:port], with no path`.
|
|
86
|
+
- `hooks` (optional): `Readonly<Record<string, Hook>>`
|
|
87
|
+
|
|
88
|
+
The Hooks of the Instance, by name: each one is a door, `POST /hooks/<name>`, for one outside
|
|
89
|
+
service. A Hook's value comes from its kind's constructor, which the config imports:
|
|
90
|
+
`github({ secret: secret("GH_HOOK") })`, `gitlab({ secret: secret("GL_HOOK"), may })`,
|
|
91
|
+
`discord({ publicKey: "…" })`. `may.answer` names the Workflows whose Gates the Hook may answer,
|
|
92
|
+
every Workflow by default. A Hook never starts a run. A name has the rule of a Caller token's
|
|
93
|
+
name. When the config loads, a bad entry is refused: `<file> at hooks.<name>: <problem>`.
|
|
94
|
+
Default: none.
|
|
95
|
+
- `mcp` (optional): `Readonly<Record<string, McpServer>>`
|
|
96
|
+
|
|
97
|
+
The MCP servers, by a name of yours: `[a-z][a-z0-9-]*`, not `jr2`. A remote server has a
|
|
98
|
+
`url` (`https://` with a secret), a `secret` (a name of the `secrets` list; with no `hosts`, it
|
|
99
|
+
is bound to the url's host) and a `timeout` (default `"60s"`). A stdio server has a `command`
|
|
100
|
+
of the Sandbox Image, its `args` and a `timeout`. An Agent names a server in its `mcp` list.
|
|
101
|
+
Default: none. See [`McpServer`](type-mcpserver.md).
|
|
102
|
+
- `runs` (optional): [`RunsConfig`](type-runsconfig.md)
|
|
103
|
+
|
|
104
|
+
How long ended runs are kept, and the volume size. Default: `{ retain: "30d", volume: "5Gi" }`.
|
|
70
105
|
- `registry` (optional): `string`
|
|
71
106
|
|
|
72
107
|
The image registry prefix to which `jr2 up` pushes the images that it builds, such as
|