@jr2/orchestrator 0.3.0 → 0.5.1
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/README.md +20 -2
- package/bin/server.ts +7 -4
- package/console/canvas.ts +27 -14
- package/console/components/app.ts +12 -1
- package/console/components/fleet.ts +52 -6
- package/console/components/machine-pane.ts +128 -2
- package/console/components/nav.ts +1 -1
- package/console/components/schema-form.ts +12 -4
- package/console/json-field.ts +23 -0
- package/console/main.ts +122 -39
- package/console/store.ts +321 -21
- package/console/style.css +111 -0
- package/docs/agents-block.md +5 -0
- package/docs/concepts/agents-and-turns.md +442 -0
- package/docs/concepts/architecture.md +230 -0
- package/docs/concepts/charts.md +143 -0
- package/docs/concepts/composition.md +357 -0
- package/docs/concepts/converge.md +254 -0
- package/docs/concepts/durable-runs.md +189 -0
- package/docs/concepts/effects.md +603 -0
- package/docs/concepts/gates.md +208 -0
- package/docs/concepts/machines-and-workflows.md +289 -0
- package/docs/concepts/pools-and-sources.md +230 -0
- package/docs/concepts/secrets-and-trust.md +222 -0
- package/docs/concepts/the-menu.md +378 -0
- package/docs/concepts/workspaces.md +678 -0
- package/docs/get-started/a-model-decides.md +563 -0
- package/docs/get-started/an-agent-in-a-sandbox.md +381 -0
- package/docs/get-started/connect-a-model.md +248 -0
- package/docs/get-started/create-an-instance.md +194 -0
- package/docs/get-started/have-your-assistant-write-a-machine.md +922 -0
- package/docs/get-started/install.md +126 -0
- package/docs/guides/add-tools-to-the-sandbox.md +295 -0
- package/docs/guides/answer-a-gate.md +304 -0
- package/docs/guides/bind-open-parts.md +223 -0
- package/docs/guides/cancel-a-run.md +146 -0
- package/docs/guides/clean-up.md +206 -0
- package/docs/guides/fix-a-failed-converge.md +361 -0
- package/docs/guides/give-the-cluster-git-credentials.md +222 -0
- package/docs/guides/iterate-on-a-machine-on-kind.md +190 -0
- package/docs/guides/let-an-agent-write-a-chart.md +226 -0
- package/docs/guides/look-inside-a-sandbox.md +174 -0
- package/docs/guides/mirror-the-kit-images.md +176 -0
- package/docs/guides/move-from-kind-to-a-shared-cluster.md +302 -0
- package/docs/guides/open-the-console.md +91 -0
- package/docs/guides/publish-a-machine-as-an-npm-package.md +350 -0
- package/docs/guides/push-and-sign-a-branch.md +486 -0
- package/docs/guides/run-a-chart-by-name.md +270 -0
- package/docs/guides/run-a-command-or-call-a-url.md +544 -0
- package/docs/guides/run-one-worker-per-item.md +321 -0
- package/docs/guides/set-an-agents-access-and-dials.md +375 -0
- package/docs/guides/size-a-workspace.md +204 -0
- package/docs/guides/start-a-run-from-a-run.md +237 -0
- package/docs/guides/start-a-run.md +207 -0
- package/docs/guides/upgrade-the-kit-version.md +240 -0
- package/docs/guides/use-a-hosted-provider.md +208 -0
- package/docs/guides/use-a-local-model.md +313 -0
- package/docs/guides/watch-a-run.md +326 -0
- package/docs/guides/write-a-workflow.md +318 -0
- package/docs/index.md +44 -0
- package/docs/llms.txt +216 -0
- package/docs/reference/authoring-surface/agent.md +128 -0
- package/docs/reference/authoring-surface/answer.md +140 -0
- package/docs/reference/authoring-surface/arg.md +60 -0
- package/docs/reference/authoring-surface/basic.md +62 -0
- package/docs/reference/authoring-surface/bearer.md +53 -0
- package/docs/reference/authoring-surface/chartschema.md +23 -0
- package/docs/reference/authoring-surface/chartschemafor.md +48 -0
- package/docs/reference/authoring-surface/command.md +191 -0
- package/docs/reference/authoring-surface/customize.md +64 -0
- package/docs/reference/authoring-surface/defineconfig.md +41 -0
- package/docs/reference/authoring-surface/defineevent.md +114 -0
- package/docs/reference/authoring-surface/dispatch.md +126 -0
- package/docs/reference/authoring-surface/fail.md +83 -0
- package/docs/reference/authoring-surface/file.md +122 -0
- package/docs/reference/authoring-surface/frompick.md +277 -0
- package/docs/reference/authoring-surface/http.md +159 -0
- package/docs/reference/authoring-surface/isfailure.md +58 -0
- package/docs/reference/authoring-surface/jr2setup.md +237 -0
- package/docs/reference/authoring-surface/open.md +74 -0
- package/docs/reference/authoring-surface/openbody.md +86 -0
- package/docs/reference/authoring-surface/paramsof.md +125 -0
- package/docs/reference/authoring-surface/pool.md +186 -0
- package/docs/reference/authoring-surface/push.md +112 -0
- package/docs/reference/authoring-surface/secret.md +118 -0
- package/docs/reference/authoring-surface/sentby.md +83 -0
- package/docs/reference/authoring-surface/source.md +51 -0
- package/docs/reference/authoring-surface/text.md +62 -0
- package/docs/reference/authoring-surface/type-agentdeclaration.md +27 -0
- package/docs/reference/authoring-surface/type-agentdefinition.md +80 -0
- package/docs/reference/authoring-surface/type-agentlogic.md +15 -0
- package/docs/reference/authoring-surface/type-agentslots.md +12 -0
- package/docs/reference/authoring-surface/type-answeraction.md +12 -0
- package/docs/reference/authoring-surface/type-arg.md +19 -0
- package/docs/reference/authoring-surface/type-argnames.md +12 -0
- package/docs/reference/authoring-surface/type-binding.md +62 -0
- package/docs/reference/authoring-surface/type-bindingof.md +12 -0
- package/docs/reference/authoring-surface/type-bodyacceptsdoor.md +15 -0
- package/docs/reference/authoring-surface/type-bodyacceptsslots.md +17 -0
- package/docs/reference/authoring-surface/type-ceilings.md +41 -0
- package/docs/reference/authoring-surface/type-chainlink.md +19 -0
- package/docs/reference/authoring-surface/type-chartaction.md +46 -0
- package/docs/reference/authoring-surface/type-chartagent.md +28 -0
- package/docs/reference/authoring-surface/type-chartevent.md +20 -0
- package/docs/reference/authoring-surface/type-chartguard.md +20 -0
- package/docs/reference/authoring-surface/type-chartinvoke.md +28 -0
- package/docs/reference/authoring-surface/type-chartjson.md +14 -0
- package/docs/reference/authoring-surface/type-chartstate.md +46 -0
- package/docs/reference/authoring-surface/type-charttext.md +40 -0
- package/docs/reference/authoring-surface/type-charttransition.md +22 -0
- package/docs/reference/authoring-surface/type-charttransitions.md +14 -0
- package/docs/reference/authoring-surface/type-chartvalue.md +15 -0
- package/docs/reference/authoring-surface/type-childat.md +12 -0
- package/docs/reference/authoring-surface/type-childslots.md +12 -0
- package/docs/reference/authoring-surface/type-commandenv.md +15 -0
- package/docs/reference/authoring-surface/type-commandinput.md +19 -0
- package/docs/reference/authoring-surface/type-commandoptions.md +78 -0
- package/docs/reference/authoring-surface/type-commandoutput.md +104 -0
- package/docs/reference/authoring-surface/type-customize.md +109 -0
- package/docs/reference/authoring-surface/type-dispatchdefinition.md +39 -0
- package/docs/reference/authoring-surface/type-dispatchinput.md +14 -0
- package/docs/reference/authoring-surface/type-dispatchopenparts.md +14 -0
- package/docs/reference/authoring-surface/type-dispatchoutput.md +65 -0
- package/docs/reference/authoring-surface/type-duration.md +15 -0
- package/docs/reference/authoring-surface/type-effectbinding.md +93 -0
- package/docs/reference/authoring-surface/type-effectlogic.md +12 -0
- package/docs/reference/authoring-surface/type-envopenparts.md +14 -0
- package/docs/reference/authoring-surface/type-eventaudience.md +27 -0
- package/docs/reference/authoring-surface/type-eventdef.md +45 -0
- package/docs/reference/authoring-surface/type-eventfrom.md +16 -0
- package/docs/reference/authoring-surface/type-eventsemantics.md +26 -0
- package/docs/reference/authoring-surface/type-execoutcome.md +34 -0
- package/docs/reference/authoring-surface/type-failslot.md +14 -0
- package/docs/reference/authoring-surface/type-failure.md +19 -0
- package/docs/reference/authoring-surface/type-failureinput.md +20 -0
- package/docs/reference/authoring-surface/type-filebody.md +41 -0
- package/docs/reference/authoring-surface/type-frominput.md +14 -0
- package/docs/reference/authoring-surface/type-hostinjectedinput.md +58 -0
- package/docs/reference/authoring-surface/type-httpdefinition.md +101 -0
- package/docs/reference/authoring-surface/type-httpinput.md +12 -0
- package/docs/reference/authoring-surface/type-httpmethod.md +14 -0
- package/docs/reference/authoring-surface/type-httpopenparts.md +12 -0
- package/docs/reference/authoring-surface/type-httpoutput.md +89 -0
- package/docs/reference/authoring-surface/type-httprequestparts.md +33 -0
- package/docs/reference/authoring-surface/type-jr2config.md +126 -0
- package/docs/reference/authoring-surface/type-lends.md +38 -0
- package/docs/reference/authoring-surface/type-logicat.md +12 -0
- package/docs/reference/authoring-surface/type-markedif.md +12 -0
- package/docs/reference/authoring-surface/type-mergedactors.md +12 -0
- package/docs/reference/authoring-surface/type-namedsecret.md +25 -0
- package/docs/reference/authoring-surface/type-noslotspec.md +26 -0
- package/docs/reference/authoring-surface/type-noslotworkspaceoptions.md +32 -0
- package/docs/reference/authoring-surface/type-openbodydeclaration.md +40 -0
- package/docs/reference/authoring-surface/type-openbodylogic.md +14 -0
- package/docs/reference/authoring-surface/type-openbodyoutput.md +42 -0
- package/docs/reference/authoring-surface/type-openbodyslot.md +18 -0
- package/docs/reference/authoring-surface/type-opencommandinput.md +17 -0
- package/docs/reference/authoring-surface/type-openeffect.md +12 -0
- package/docs/reference/authoring-surface/type-openeffectslots.md +12 -0
- package/docs/reference/authoring-surface/type-openof.md +12 -0
- package/docs/reference/authoring-surface/type-opensecret.md +23 -0
- package/docs/reference/authoring-surface/type-opensecretmark.md +12 -0
- package/docs/reference/authoring-surface/type-permissivenoslotworkspaceoptions.md +31 -0
- package/docs/reference/authoring-surface/type-permissiveworkspaceoptions.md +32 -0
- package/docs/reference/authoring-surface/type-poolmachine.md +28 -0
- package/docs/reference/authoring-surface/type-poolspec.md +60 -0
- package/docs/reference/authoring-surface/type-pushinput.md +15 -0
- package/docs/reference/authoring-surface/type-pushoptions.md +79 -0
- package/docs/reference/authoring-surface/type-pushoutput.md +124 -0
- package/docs/reference/authoring-surface/type-pushwireoutput.md +12 -0
- package/docs/reference/authoring-surface/type-quantity.md +14 -0
- package/docs/reference/authoring-surface/type-reached.md +12 -0
- package/docs/reference/authoring-surface/type-reposlot.md +70 -0
- package/docs/reference/authoring-surface/type-reposlotsof.md +16 -0
- package/docs/reference/authoring-surface/type-sandboxoptions.md +77 -0
- package/docs/reference/authoring-surface/type-secret.md +25 -0
- package/docs/reference/authoring-surface/type-sender.md +19 -0
- package/docs/reference/authoring-surface/type-sentbyguards.md +12 -0
- package/docs/reference/authoring-surface/type-size.md +85 -0
- package/docs/reference/authoring-surface/type-slothandles.md +32 -0
- package/docs/reference/authoring-surface/type-sourcenextresult.md +17 -0
- package/docs/reference/authoring-surface/type-sourcespec.md +44 -0
- package/docs/reference/authoring-surface/type-syncstate.md +12 -0
- package/docs/reference/authoring-surface/type-text.md +19 -0
- package/docs/reference/authoring-surface/type-textpart.md +24 -0
- package/docs/reference/authoring-surface/type-thinkinglevel.md +39 -0
- package/docs/reference/authoring-surface/type-toparameterizedobject.md +14 -0
- package/docs/reference/authoring-surface/type-toprovidedactor.md +14 -0
- package/docs/reference/authoring-surface/type-unknown.md +21 -0
- package/docs/reference/authoring-surface/type-usercontainer.md +77 -0
- package/docs/reference/authoring-surface/type-withoutemptyindex.md +20 -0
- package/docs/reference/authoring-surface/type-workflowevent.md +46 -0
- package/docs/reference/authoring-surface/type-workspaceaccess.md +16 -0
- package/docs/reference/authoring-surface/type-workspaced.md +94 -0
- package/docs/reference/authoring-surface/type-workspacehandles.md +23 -0
- package/docs/reference/authoring-surface/type-workspacemachine.md +29 -0
- package/docs/reference/authoring-surface/type-workspaceof.md +13 -0
- package/docs/reference/authoring-surface/type-workspaceoptions.md +39 -0
- package/docs/reference/authoring-surface/type-workspacespec.md +37 -0
- package/docs/reference/authoring-surface/workspace.md +259 -0
- package/docs/reference/authoring-surface.md +197 -0
- package/docs/reference/cli.md +433 -0
- package/docs/reference/config.md +756 -0
- package/docs/reference/decisions/0001-operator-owned-generic-sandbox.md +113 -0
- package/docs/reference/decisions/0002-duplex-streaming-actor.md +110 -0
- package/docs/reference/decisions/0004-worktree-provisioning-model.md +124 -0
- package/docs/reference/decisions/0005-sandbox-pod-composition.md +230 -0
- package/docs/reference/decisions/0006-agent-control-surface.md +47 -0
- package/docs/reference/decisions/0007-durable-machine-state.md +109 -0
- package/docs/reference/decisions/0008-orchestrator-as-deployed-app.md +60 -0
- package/docs/reference/decisions/0009-cli-and-instance-interface.md +275 -0
- package/docs/reference/decisions/0010-bdd-acceptance-tests.md +160 -0
- package/docs/reference/decisions/0011-workflow-defined-events.md +141 -0
- package/docs/reference/decisions/0012-workspace-wrapper-machine.md +103 -0
- package/docs/reference/decisions/0013-the-agent-reaches-its-machine-through-a-container-it-cannot-read.md +157 -0
- package/docs/reference/decisions/0014-observation-is-open-run-state-is-not.md +95 -0
- package/docs/reference/decisions/0015-authoring-surface-absorbs-the-mechanism.md +265 -0
- package/docs/reference/decisions/0016-agent-turn-mechanics-are-internal.md +124 -0
- package/docs/reference/decisions/0017-pool-over-a-source-port.md +69 -0
- package/docs/reference/decisions/0018-instance-agents-are-definitions-jr2-assembles-the-harness.md +111 -0
- package/docs/reference/decisions/0019-one-converging-command-against-the-current-context.md +275 -0
- package/docs/reference/decisions/0020-private-ca-trust-is-a-named-concept.md +60 -0
- package/docs/reference/decisions/0021-workspace-continuity-is-a-lease-that-answers-back.md +100 -0
- package/docs/reference/decisions/0022-observation-is-a-level-triggered-feed.md +103 -0
- package/docs/reference/decisions/0023-the-harness-prints-the-conversation.md +176 -0
- package/docs/reference/decisions/0024-an-agents-turn-ends-with-the-state-that-asked-for-it.md +439 -0
- package/docs/reference/decisions/0025-cancel-ends-a-run-stop-parks-it.md +65 -0
- package/docs/reference/decisions/0026-a-turn-that-is-over-is-never-prompted.md +62 -0
- package/docs/reference/decisions/0027-the-harness-is-jr2s-own-server-flue-retires-the-wire-stays.md +237 -0
- package/docs/reference/decisions/0028-what-an-agent-may-do-to-the-workspace-is-part-of-its-definition.md +89 -0
- package/docs/reference/decisions/0029-a-menu-is-fixed-for-a-conversation-and-a-turn-is-told-its-allowed-picks.md +154 -0
- package/docs/reference/decisions/0030-a-snapshot-names-the-machine-it-was-written-under.md +100 -0
- package/docs/reference/decisions/0031-menu-only-agents-run-on-the-instance-harness.md +190 -0
- package/docs/reference/decisions/0032-the-console-unlocks-with-the-instance-token.md +61 -0
- package/docs/reference/decisions/0033-a-machine-declares-the-input-that-starts-it.md +127 -0
- package/docs/reference/decisions/0034-the-console-renders-with-preact-and-the-server-erases-the-types.md +57 -0
- package/docs/reference/decisions/0035-a-runaway-turn-is-ended-rerolled-once-then-a-fault.md +92 -0
- package/docs/reference/decisions/0036-a-turn-compacts-its-own-context-mid-flight.md +138 -0
- package/docs/reference/decisions/0037-an-instance-builds-its-sandbox-images-jr2-injects-the-harness.md +196 -0
- package/docs/reference/decisions/0038-jr2-up-builds-every-image-it-deploys.md +170 -0
- package/docs/reference/decisions/0039-image-garbage-collects-by-reachability.md +115 -0
- package/docs/reference/decisions/0041-a-build-the-host-already-holds-is-not-spent-again.md +64 -0
- package/docs/reference/decisions/0042-ready-is-not-routable-an-admission-retries-its-connection.md +142 -0
- package/docs/reference/decisions/0043-the-kit-is-tested-as-installed-a-local-registry-stands-in-for-npm.md +170 -0
- package/docs/reference/decisions/0044-kit-images-live-at-a-canonical-home-a-self-host-mirrors-it.md +85 -0
- package/docs/reference/decisions/0045-the-platform-joins-the-image-address-and-the-cluster-chooses-it.md +82 -0
- package/docs/reference/decisions/0046-a-converge-failure-carries-its-diagnosis.md +34 -0
- package/docs/reference/decisions/0047-the-git-ssh-key-source-is-the-users-choice.md +47 -0
- package/docs/reference/decisions/0048-the-orchestrator-boots-without-its-repos.md +36 -0
- package/docs/reference/decisions/0049-a-machine-carries-its-parts-and-composes-by-invoke.md +126 -0
- package/docs/reference/decisions/0050-what-code-names-config-declares-what-the-cli-names-discovery-finds.md +73 -0
- package/docs/reference/decisions/0051-a-repo-is-a-slot-on-the-workspace-and-a-cache-on-the-node.md +227 -0
- package/docs/reference/decisions/0052-a-sandbox-lands-where-an-ordinary-pod-lands-and-the-cache-follows-it.md +81 -0
- package/docs/reference/decisions/0053-a-fetch-inside-the-pod-asks-the-node-cache-and-the-cache-asks-the-remote.md +111 -0
- package/docs/reference/decisions/0054-the-kit-ships-machines-and-a-shipped-machine-leaves-its-parts-open.md +126 -0
- package/docs/reference/decisions/0055-a-release-is-a-pushed-tag-and-the-publish-guard-is-the-credential.md +107 -0
- package/docs/reference/decisions/0056-a-global-jr2-hands-off-to-the-instances-own-and-an-instance-has-one-kit-version.md +62 -0
- package/docs/reference/decisions/0057-a-turn-is-its-frame-its-dials-and-whether-it-continues.md +152 -0
- package/docs/reference/decisions/0058-a-harness-answers-the-orchestrator-alone.md +106 -0
- package/docs/reference/decisions/0059-a-harness-holds-stand-ins-and-the-custodian-holds-the-keys.md +384 -0
- package/docs/reference/decisions/0060-a-workspace-states-its-size-and-jr2-reserves-all-of-it.md +111 -0
- package/docs/reference/decisions/0061-a-memory-kill-ends-the-agents-processes-not-the-harness.md +83 -0
- package/docs/reference/decisions/0062-jr2-briefs-the-agent-on-its-seat-never-on-its-task.md +212 -0
- package/docs/reference/decisions/0063-the-orchestrator-watches-the-cluster.md +83 -0
- package/docs/reference/decisions/0064-a-workspace-waits-for-capacity.md +79 -0
- package/docs/reference/decisions/0065-a-persist-survives-a-crash-and-history-is-a-week.md +65 -0
- package/docs/reference/decisions/0066-a-model-tier-runs-a-real-model-and-a-change-to-what-it-reads-runs-the-tier.md +550 -0
- package/docs/reference/decisions/0067-an-effect-is-an-actor-slot-and-runs-at-most-once-unless-marked-idempotent.md +430 -0
- package/docs/reference/decisions/0068-an-effector-holds-an-effects-secrets-and-signs-its-wire.md +464 -0
- package/docs/reference/decisions/0069-the-orchestrator-is-a-kit-image-and-an-instance-publishes-its-assembly.md +180 -0
- package/docs/reference/decisions/0070-a-machine-lends-its-parts-to-a-chart.md +323 -0
- package/docs/reference/decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md +183 -0
- package/docs/reference/decisions/0072-the-docs-ship-inside-the-kit-and-an-instances-agents-md-indexes-them.md +144 -0
- package/docs/reference/decisions/0073-a-machine-fails-a-run-with-fail-and-an-uncaught-failure-ends-it-failed.md +122 -0
- package/docs/reference/decisions/0074-an-unrouted-mechanism-event-is-refused-at-load-and-faults-the-run.md +76 -0
- package/docs/reference/decisions.md +83 -0
- package/docs/reference/glossary.md +648 -0
- package/docs/reference/http-api.md +1348 -0
- package/docs/reference/machines.md +190 -0
- package/docs/reference/mechanism-events.md +72 -0
- package/docs/why.md +206 -0
- package/package.json +6 -4
- package/src/actor.ts +976 -61
- package/src/agent.ts +114 -38
- package/src/ambient.ts +4 -1
- package/src/assembly-checks.ts +347 -0
- package/src/assembly-tar.ts +494 -0
- package/src/assembly.ts +721 -0
- package/src/cause.ts +234 -0
- package/src/chart.ts +2182 -0
- package/src/charts.ts +748 -0
- package/src/config.ts +520 -162
- package/src/content-hash.ts +105 -0
- package/src/custodian.lua +6 -5
- package/src/custodian.ts +143 -39
- package/src/customize.ts +388 -55
- package/src/dispatch-effect.ts +945 -0
- package/src/door-compat.ts +217 -0
- package/src/durability.ts +11 -4
- package/src/effect-checks.ts +557 -0
- package/src/effect.ts +1202 -0
- package/src/effector-wire.ts +674 -0
- package/src/fail.ts +209 -0
- package/src/fingerprint.ts +4 -3
- package/src/gate.ts +8 -0
- package/src/git-clone.ts +65 -0
- package/src/git-push.ts +336 -0
- package/src/harness-client.ts +764 -48
- package/src/held-secrets.ts +82 -26
- package/src/holds.ts +156 -0
- package/src/http-effect.ts +1423 -0
- package/src/http.ts +916 -113
- package/src/images.ts +47 -21
- package/src/index.ts +62 -43
- package/src/instance.ts +505 -59
- package/src/internal.ts +84 -0
- package/src/kube-client.ts +333 -0
- package/src/machine-doc.ts +106 -6
- package/src/mechanism-routes.ts +168 -0
- package/src/model-keys.generated.ts +53 -0
- package/src/model-keys.ts +18 -58
- package/src/mount-digest.ts +53 -0
- package/src/names.ts +66 -8
- package/src/notices.ts +141 -0
- package/src/open-body.ts +1580 -0
- package/src/open-effect.ts +217 -0
- package/src/open.ts +59 -6
- package/src/parts.ts +709 -41
- package/src/party.ts +534 -0
- package/src/pick.ts +761 -0
- package/src/pool.ts +248 -37
- package/src/registration.ts +382 -19
- package/src/repo-fetch.ts +60 -85
- package/src/repos.ts +65 -75
- package/src/rest.ts +133 -0
- package/src/run-host.ts +2383 -115
- package/src/run-output.ts +38 -0
- package/src/sandbox-effect.ts +1126 -0
- package/src/sandbox-effector.ts +111 -0
- package/src/sandbox-kube.ts +1721 -0
- package/src/sandbox-watch.ts +260 -0
- package/src/secret-placement.ts +529 -0
- package/src/server.ts +284 -84
- package/src/setup.ts +819 -117
- package/src/size.ts +454 -0
- package/src/snapshot-store.ts +115 -20
- package/src/stub-harness.ts +49 -16
- package/src/sync-client.ts +54 -0
- package/src/timers.ts +191 -0
- package/src/tokens.ts +35 -4
- package/src/vocabulary.ts +135 -15
- package/src/wire.ts +238 -10
- package/src/workspace.ts +1195 -338
- package/src/sandbox-kubectl.ts +0 -1108
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: workspace
|
|
3
|
+
description: "Run a body Machine in a Sandbox: a pod of its own, with a Worktree of each Repo Slot on one branch."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `workspace`
|
|
7
|
+
|
|
8
|
+
Function, in `@jr2/orchestrator/src/workspace.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Workspaces and Repos.
|
|
9
|
+
|
|
10
|
+
## Overload 1
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
function workspace<
|
|
14
|
+
TSchema extends z.ZodObject,
|
|
15
|
+
TBody extends AnyStateMachine,
|
|
16
|
+
TSlots extends string = never,
|
|
17
|
+
>(
|
|
18
|
+
body: TBody & BodyAcceptsDoor<TBody, z.infer<TSchema>, TSlots>,
|
|
19
|
+
options: WorkspaceOptions<TSchema, TSlots> | NoSlotWorkspaceOptions<TSchema>,
|
|
20
|
+
): WorkspaceMachine<WithoutEmptyIndex<z.infer<TSchema>>, OutputFrom<TBody>, TBody, TSlots>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Run a body Machine in a Sandbox: a pod of its own, with a Worktree of each Repo Slot on one
|
|
24
|
+
branch. The result is a Machine. Register it as a Workflow, or invoke it from another Machine as
|
|
25
|
+
an actor slot.
|
|
26
|
+
|
|
27
|
+
When a run enters it, the Workspace makes the Sandbox and waits for room on a node, with no
|
|
28
|
+
deadline. It clones each Repo Slot and makes its Worktree on the `branch` that `spec` gives. Then
|
|
29
|
+
it runs the body with the run input plus `workspace`, the handles (see [`Workspaced`](type-workspaced.md)). The
|
|
30
|
+
Agents with Working tools and the `command` Effects in the body run in that Sandbox. An Agent
|
|
31
|
+
with `workspace: "none"` runs on the Instance Harness. When the body reaches a final state, the
|
|
32
|
+
Workspace deletes the Sandbox, and its output is the body's output. Push the branch before
|
|
33
|
+
then: jr2 deletes the Sandbox's commits with it.
|
|
34
|
+
|
|
35
|
+
Leave out `repos` for a Workspace with no Repo Slot: its Agents and `command` Effects share
|
|
36
|
+
`/work`, as the steps of one job share a folder, and `spec` is optional and gives only
|
|
37
|
+
`workGroup`. The body's input is then `Workspaced<RunInput, never>`. An `http` Effect sends a
|
|
38
|
+
file of `/work` with `file(path)`. A `push`, and a `command` with an Effect secret in its `env`,
|
|
39
|
+
need a Repo Slot, so jr2 refuses them there. jr2 deletes `/work` with the Sandbox: send what
|
|
40
|
+
must stay before the body ends.
|
|
41
|
+
|
|
42
|
+
Give each run a different branch, so that two runs do not push to one branch. Make it from a
|
|
43
|
+
field of the run input, or from `instanceId` when the run input has no field that is different
|
|
44
|
+
for each run: ``spec: ({ input }) => ({ branch: `fix/${input.instanceId}` })``. The input of
|
|
45
|
+
`spec` holds `instanceId` with no cast, also for the door `z.object({})`. Only a root
|
|
46
|
+
`workspace()` gets `instanceId` from jr2. A `workspace()` that a different Machine invokes gets
|
|
47
|
+
it only when its parent gives it.
|
|
48
|
+
|
|
49
|
+
The Sandbox is Lost when its pod is evicted or its node goes. Then the body gets the event
|
|
50
|
+
`workspace.lost`, and the body decides what to do. jr2 does not make the Lost Sandbox again.
|
|
51
|
+
|
|
52
|
+
When the body fails (it invokes a `fail()` slot), the Workspace deletes the Sandbox, and then the
|
|
53
|
+
same Failure goes up to the parent. With no parent to catch it, the run ends `failed`. When the
|
|
54
|
+
body has a defect (an error that is not a Failure), the run faults: it ends `error`, and the
|
|
55
|
+
Sandbox stays for you to inspect, until jr2's operator removes it after an idle timeout.
|
|
56
|
+
|
|
57
|
+
Give the run input to `input`, not to the body: a body with an `input` schema of its own is
|
|
58
|
+
refused. The types refuse a body whose input does not accept the run input plus the handles,
|
|
59
|
+
with the message `the body's declared input must accept the door plus the injected handles`.
|
|
60
|
+
|
|
61
|
+
It refuses, when you call it:
|
|
62
|
+
- a body with a state that is not final, when that state and each state above it have no
|
|
63
|
+
`workspace.lost` route: ``workspace(): the body "<id>" has a state "<state>" that is not final,
|
|
64
|
+
and no route for "workspace.lost" is on it or on a state above — jr2 sends workspace.lost to the
|
|
65
|
+
body when its Sandbox is gone, and with no route the run faults: route it on the body's root,
|
|
66
|
+
as on: { "workspace.lost": "<the state that handles it>" } (ADR-0074)``
|
|
67
|
+
- a body with its own `input`: ``workspace(): the body "<id>" declares its own run input, which
|
|
68
|
+
nothing will ever serve or enforce — the wrapper feeds the body the run input PLUS the injected
|
|
69
|
+
`workspace` handles, so the body's schema is not the door. Move it to the wrapper:
|
|
70
|
+
workspace(body, { input, spec }) (ADR-0033).``
|
|
71
|
+
- an empty `image`: ``workspace(): `image` must be a non-empty string (got <value>) — either a
|
|
72
|
+
`file:` URL to a docker context this module ships (`import.meta.resolve("./image")`) or a
|
|
73
|
+
registry ref (ADR-0037).``
|
|
74
|
+
- an empty `repos`: ``workspace(): `repos: {}` names no Repo Slot — leave `repos` out for a
|
|
75
|
+
Workspace with no Repo Slot, or name a slot: `repos: { app: "https://…" }` (ADR-0051).``
|
|
76
|
+
- a `repos` that is not a map or `open`: ``workspace(): `repos` must be a map of Repo Slots —
|
|
77
|
+
`repos: { app: "https://…" }` — or `open` whole, for a map the consumer names; leave it out
|
|
78
|
+
for a Workspace with no Repo Slot (ADR-0051).``
|
|
79
|
+
- a bad Repo Slot name or value (see [`RepoSlot`](type-reposlot.md))
|
|
80
|
+
- a `spec` that is not a function, or no `spec` on a Workspace with Repo Slots: ``workspace():
|
|
81
|
+
`spec` must be a function from the run input to the spec — spec: ({ input }) => ({ branch }) —
|
|
82
|
+
and only a Workspace with no Repo Slot may leave it out (ADR-0051).``
|
|
83
|
+
- a bad `secrets` list: ``workspace(): `secrets` must be a list of distinct names from
|
|
84
|
+
jr2.config.ts's `secrets` list (got <value>) — secrets: ["JIRA_TOKEN"] (ADR-0059).``
|
|
85
|
+
- a bad `effector`: ``workspace(): `effector` is { image } — a `file:` URL to a docker context
|
|
86
|
+
or a registry ref (got <value>) — effector: { image: import.meta.resolve("./effector") }
|
|
87
|
+
(ADR-0068).``
|
|
88
|
+
- a `user` that is not an image or `{ image, resources? }`: ``workspace(): `user` must be a
|
|
89
|
+
non-empty string (an image), or { image, resources? } (got <value>) — either a `file:` URL to a
|
|
90
|
+
docker context this module ships (`import.meta.resolve("./image")`) or a registry ref
|
|
91
|
+
(ADR-0037, ADR-0060).``, or ``workspace(): user.<key> is not accepted — the User Container is {
|
|
92
|
+
image, resources? } (ADR-0005, ADR-0060)`` (see [`UserContainer`](type-usercontainer.md))
|
|
93
|
+
- a `resources` key other than `limits` or `requests`: ``workspace(): resources.<key> is not accepted — a
|
|
94
|
+
Size is { limits: { memory?, cpu? } } and nothing else — Agent Substrate's template size
|
|
95
|
+
(ADR-0060)``, or the same text for `resources.limits.<key>`. The other texts are in
|
|
96
|
+
[`Size`](type-size.md).
|
|
97
|
+
|
|
98
|
+
And when a run enters it, a spec without a `branch` (or with `branch: "default"`), or with a bad
|
|
99
|
+
`reviewSha` or `workGroup`: ``workspace spec invalid: <fields> — the spec derives from run input;
|
|
100
|
+
does `jr2 run --input` carry every field this workflow's workspace() mapping reads?``. With no
|
|
101
|
+
Repo Slot, a spec with a `branch` or a `reviewSha`: ``workspace spec invalid: <field> (the
|
|
102
|
+
Workspace has no Repo Slot, so it has no branch and no review Worktree; its spec gives only
|
|
103
|
+
workGroup) …``
|
|
104
|
+
|
|
105
|
+
**Parameters**
|
|
106
|
+
|
|
107
|
+
- `body`: The Machine to run in the Sandbox. Its input is `Workspaced<RunInput, Slots>`.
|
|
108
|
+
- `options` ([`WorkspaceOptions`](type-workspaceoptions.md) | [`NoSlotWorkspaceOptions`](type-noslotworkspaceoptions.md)): What the Sandbox is made of (`image`, `user`, `resources`, `effector`), the
|
|
109
|
+
Repo Slots it clones (`repos`), the Held secrets it can use (`secrets`), the run input
|
|
110
|
+
(`input`), and the function from the run input to the branch (`spec`).
|
|
111
|
+
|
|
112
|
+
**Returns**: A Machine whose input is the run input and whose output is the body's output.
|
|
113
|
+
|
|
114
|
+
**Example**
|
|
115
|
+
|
|
116
|
+
```ts
|
|
117
|
+
import { z } from "zod";
|
|
118
|
+
import {
|
|
119
|
+
command,
|
|
120
|
+
fail,
|
|
121
|
+
jr2Setup,
|
|
122
|
+
workspace,
|
|
123
|
+
type CommandOutput,
|
|
124
|
+
type Workspaced,
|
|
125
|
+
} from "@jr2/orchestrator";
|
|
126
|
+
|
|
127
|
+
const runInput = z.object({ ticket: z.string(), repo: z.string() });
|
|
128
|
+
type BodyInput = Workspaced<z.infer<typeof runInput>, "app" | "docs">;
|
|
129
|
+
|
|
130
|
+
const passed = (output: CommandOutput): boolean =>
|
|
131
|
+
output.outcome === "exited" && output.code === 0;
|
|
132
|
+
|
|
133
|
+
const body = jr2Setup({
|
|
134
|
+
types: {} as { input: BodyInput },
|
|
135
|
+
actors: {
|
|
136
|
+
build: command(["npm", "run", "build"], { slot: "app" }),
|
|
137
|
+
fail: fail(),
|
|
138
|
+
},
|
|
139
|
+
}).createMachine({
|
|
140
|
+
id: "build",
|
|
141
|
+
on: { "workspace.lost": ".lost" },
|
|
142
|
+
initial: "building",
|
|
143
|
+
states: {
|
|
144
|
+
building: {
|
|
145
|
+
invoke: {
|
|
146
|
+
src: "build",
|
|
147
|
+
onDone: [
|
|
148
|
+
{ guard: ({ event }) => passed(event.output), target: "built" },
|
|
149
|
+
{ target: "broken" },
|
|
150
|
+
],
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
built: { type: "final" },
|
|
154
|
+
broken: { invoke: { src: "fail", input: { reason: "npm run build did not pass" } } },
|
|
155
|
+
lost: { invoke: { src: "fail", input: { reason: "the Sandbox is gone" } } },
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
export const machine = workspace(body, {
|
|
160
|
+
input: runInput,
|
|
161
|
+
image: "docker.io/library/node:24",
|
|
162
|
+
resources: { limits: { memory: "4Gi", cpu: "2" } },
|
|
163
|
+
repos: {
|
|
164
|
+
app: ({ input }) => input.repo,
|
|
165
|
+
docs: { url: "https://github.com/you/docs.git", ref: "main" },
|
|
166
|
+
},
|
|
167
|
+
spec: ({ input }) => ({ branch: `fix/${input.ticket}` }),
|
|
168
|
+
});
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Example**
|
|
172
|
+
|
|
173
|
+
```ts
|
|
174
|
+
import { z } from "zod";
|
|
175
|
+
import {
|
|
176
|
+
command,
|
|
177
|
+
fail,
|
|
178
|
+
jr2Setup,
|
|
179
|
+
workspace,
|
|
180
|
+
type CommandOutput,
|
|
181
|
+
type Workspaced,
|
|
182
|
+
} from "@jr2/orchestrator";
|
|
183
|
+
|
|
184
|
+
const passed = (output: CommandOutput): boolean =>
|
|
185
|
+
output.outcome === "exited" && output.code === 0;
|
|
186
|
+
|
|
187
|
+
// The run input has no field that is different for each run, so the branch comes from
|
|
188
|
+
// `instanceId`.
|
|
189
|
+
const runInput = z.object({});
|
|
190
|
+
|
|
191
|
+
const body = jr2Setup({
|
|
192
|
+
types: {} as { input: Workspaced<z.infer<typeof runInput>, "app"> },
|
|
193
|
+
actors: { test: command(["npm", "test"], { slot: "app" }), fail: fail() },
|
|
194
|
+
}).createMachine({
|
|
195
|
+
id: "nightly",
|
|
196
|
+
on: { "workspace.lost": ".lost" },
|
|
197
|
+
initial: "testing",
|
|
198
|
+
states: {
|
|
199
|
+
testing: {
|
|
200
|
+
invoke: {
|
|
201
|
+
src: "test",
|
|
202
|
+
onDone: [
|
|
203
|
+
{ guard: ({ event }) => passed(event.output), target: "tested" },
|
|
204
|
+
{ target: "red" },
|
|
205
|
+
],
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
tested: { type: "final" },
|
|
209
|
+
red: { invoke: { src: "fail", input: { reason: "npm test did not pass" } } },
|
|
210
|
+
lost: { invoke: { src: "fail", input: { reason: "the Sandbox is gone" } } },
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
export const machine = workspace(body, {
|
|
215
|
+
input: runInput,
|
|
216
|
+
image: "docker.io/library/node:24",
|
|
217
|
+
repos: { app: "https://github.com/you/app.git" },
|
|
218
|
+
spec: ({ input }) => ({ branch: `fix/${input.instanceId}` }),
|
|
219
|
+
});
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**See also**
|
|
223
|
+
|
|
224
|
+
- [Workspaces](../../concepts/workspaces.md)
|
|
225
|
+
- [Write a Workflow](../../guides/write-a-workflow.md)
|
|
226
|
+
- [Size a Workspace](../../guides/size-a-workspace.md)
|
|
227
|
+
- [Add tools to the Sandbox](../../guides/add-tools-to-the-sandbox.md)
|
|
228
|
+
- [ADR-0012: `workspace()` wraps a body Machine and owns only Sandbox lifecycle](../decisions/0012-workspace-wrapper-machine.md)
|
|
229
|
+
- [ADR-0051: A Repo is a slot on the `workspace()` and a cache on the node](../decisions/0051-a-repo-is-a-slot-on-the-workspace-and-a-cache-on-the-node.md)
|
|
230
|
+
|
|
231
|
+
## Overload 2
|
|
232
|
+
|
|
233
|
+
```ts
|
|
234
|
+
function workspace<
|
|
235
|
+
TBody extends AnyStateMachine,
|
|
236
|
+
TSlots extends string = never,
|
|
237
|
+
TInput = unknown,
|
|
238
|
+
>(
|
|
239
|
+
body: TBody & BodyAcceptsSlots<TBody, TSlots>,
|
|
240
|
+
options: PermissiveWorkspaceOptions<TSlots, TInput> | PermissiveNoSlotWorkspaceOptions<TInput>,
|
|
241
|
+
): WorkspaceMachine<TInput, OutputFrom<TBody>, TBody, TSlots>
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Run a body Machine in a Sandbox, with no `input` schema: the Workspace starts with any input. Use
|
|
245
|
+
it for a Workspace that a Pool or another Machine starts. `workspace` tells the rest, and
|
|
246
|
+
what it refuses.
|
|
247
|
+
|
|
248
|
+
**Parameters**
|
|
249
|
+
|
|
250
|
+
- `body`: The Machine to run in the Sandbox. Its input is the input of the Workspace plus
|
|
251
|
+
`workspace`, the handles.
|
|
252
|
+
- `options` ([`PermissiveWorkspaceOptions`](type-permissiveworkspaceoptions.md) | [`PermissiveNoSlotWorkspaceOptions`](type-permissivenoslotworkspaceoptions.md)): The options of the Sandbox, and `spec`. There is no `input`.
|
|
253
|
+
|
|
254
|
+
**Returns**: A Machine whose input is the run input and whose output is the body's output.
|
|
255
|
+
|
|
256
|
+
**See also**
|
|
257
|
+
|
|
258
|
+
- [Workspaces](../../concepts/workspaces.md)
|
|
259
|
+
- [ADR-0033: A Machine declares the input that starts it](../decisions/0033-a-machine-declares-the-input-that-starts-it.md)
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Authoring surface
|
|
3
|
+
description: "Every name that @jr2/orchestrator exports from its root, by group, with a link to its page: its signature, its TSDoc, and an example."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Authoring surface
|
|
7
|
+
|
|
8
|
+
The [Authoring surface](glossary.md#authoring-surface) is every name that `@jr2/orchestrator` exports from its root, and nothing else: a workflow module and `jr2.config.ts` import only these names. The groups and their order are those of the root's `src/index.ts`. This page gives each name its kind and the first sentence of its TSDoc. Each name has a page of its own, in `authoring-surface/`, with the file that declares it, its signature, and its TSDoc.
|
|
9
|
+
|
|
10
|
+
## Machine and events
|
|
11
|
+
|
|
12
|
+
The setup a workflow writes its Machine with, the events its parties send, and the guard that makes a writing decline other senders ([ADR-0011](decisions/0011-workflow-defined-events.md), [ADR-0015](decisions/0015-authoring-surface-absorbs-the-mechanism.md)).
|
|
13
|
+
|
|
14
|
+
- [`defineEvent`](authoring-surface/defineevent.md) (function): Define one workflow event: an event that an Agent or the caller of a Gate may send into your Machine.
|
|
15
|
+
- [`jr2Setup`](authoring-surface/jr2setup.md) (function): Set up a Machine that takes workflow events: the jr2 form of xstate's `setup()`.
|
|
16
|
+
- [`sentBy`](authoring-surface/sentby.md) (function): A guard that is true for an event that one party sent, and false for an event that another party sent: `guard: sentBy("coder")`.
|
|
17
|
+
- [`HostInjectedInput`](authoring-surface/type-hostinjectedinput.md) (type): The fields that jr2 adds to the input of the Machine that a run starts, beside the input that the caller sent.
|
|
18
|
+
|
|
19
|
+
## Failure
|
|
20
|
+
|
|
21
|
+
The Part a Machine invokes to fail its run, and the guard that tells a Failure from a defect in an `onError` ([ADR-0073](decisions/0073-a-machine-fails-a-run-with-fail-and-an-uncaught-failure-ends-it-failed.md)).
|
|
22
|
+
|
|
23
|
+
- [`fail`](authoring-surface/fail.md) (function): Fail the run: the Part a Machine invokes to end work that did not succeed.
|
|
24
|
+
- [`isFailure`](authoring-surface/isfailure.md) (function): Is this error a Failure, which a state invoked `fail` to make?
|
|
25
|
+
|
|
26
|
+
## Agents
|
|
27
|
+
|
|
28
|
+
An Agent slot and the definition it carries ([ADR-0028](decisions/0028-what-an-agent-may-do-to-the-workspace-is-part-of-its-definition.md), [ADR-0049](decisions/0049-a-machine-carries-its-parts-and-composes-by-invoke.md)).
|
|
29
|
+
|
|
30
|
+
- [`agent`](authoring-surface/agent.md) (function): Make an Agent: an actor slot that runs one Turn of a model each time a state invokes it.
|
|
31
|
+
- [`AgentDefinition`](authoring-surface/type-agentdefinition.md) (type): An Agent's definition: which model it runs, its instructions, and what it may do to the Workspace.
|
|
32
|
+
- [`ThinkingLevel`](authoring-surface/type-thinkinglevel.md) (type): How hard the model thinks before it answers: `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"` or `"xhigh"`.
|
|
33
|
+
|
|
34
|
+
## Workspaces and Repos
|
|
35
|
+
|
|
36
|
+
A Sandbox and the Repo Slots it binds ([ADR-0012](decisions/0012-workspace-wrapper-machine.md), [ADR-0051](decisions/0051-a-repo-is-a-slot-on-the-workspace-and-a-cache-on-the-node.md)).
|
|
37
|
+
|
|
38
|
+
- [`workspace`](authoring-surface/workspace.md) (function): Run a body Machine in a Sandbox: a pod of its own, with a Worktree of each Repo Slot on one branch.
|
|
39
|
+
- [`Workspaced`](authoring-surface/type-workspaced.md) (type): The input of a `workspace()` body: the run input, plus `workspace`, the handles that the Workspace adds (`workspace.repos`, `workspace.branch`, `workspace.review`).
|
|
40
|
+
- [`Binding`](authoring-surface/type-binding.md) (type): The repository of a Repo Slot: `{ url, ref }`.
|
|
41
|
+
- [`RepoSlot`](authoring-surface/type-reposlot.md) (type): The value of one Repo Slot in `workspace({ repos })`.
|
|
42
|
+
|
|
43
|
+
## Effects
|
|
44
|
+
|
|
45
|
+
Work a Machine does outside itself, as an actor slot ([ADR-0067](decisions/0067-an-effect-is-an-actor-slot-and-runs-at-most-once-unless-marked-idempotent.md), [ADR-0068](decisions/0068-an-effector-holds-an-effects-secrets-and-signs-its-wire.md), [ADR-0071](decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md)), and what an author writes between a pick and that work.
|
|
46
|
+
|
|
47
|
+
- [`arg`](authoring-surface/arg.md) (constant): Mark one argv entry of a `command` that the input of the Effect fills.
|
|
48
|
+
- [`CommandOutput`](authoring-surface/type-commandoutput.md) (type): The output of a `command` Effect: what the `onDone` of its state gets as `event.output`.
|
|
49
|
+
- [`command`](authoring-surface/command.md) (function): Make a `command` Effect: an actor slot that runs one program in the Workspace's Sandbox when a state invokes it.
|
|
50
|
+
- [`basic`](authoring-surface/basic.md) (function): Make the `auth` of an `http` Effect that sends `Authorization: Basic <value>`, where the value is the base64 of `user:password`.
|
|
51
|
+
- [`bearer`](authoring-surface/bearer.md) (function): Make the `auth` of an `http` Effect that sends `Authorization: Bearer <value>`, with the value of an Effect secret.
|
|
52
|
+
- [`file`](authoring-surface/file.md) (function): Make a Worktree file the body of an `http` Effect: `body: file("dist/report.pdf")`.
|
|
53
|
+
- [`http`](authoring-surface/http.md) (function): Make an `http` Effect: a call to a URL, with Effect secrets that the Agent never reads.
|
|
54
|
+
- [`secret`](authoring-surface/secret.md) (function): Name an Effect secret: `secret("jira")`.
|
|
55
|
+
- [`text`](authoring-surface/text.md) (function): Make a string from literal text and Effect secrets, as a tagged template: `` text`Token ${secret("x")}` ``.
|
|
56
|
+
- [`HttpOutput`](authoring-surface/type-httpoutput.md) (type): The output of an `http` Effect: what the `onDone` of its state gets as `event.output`.
|
|
57
|
+
- [`push`](authoring-surface/push.md) (function): Make a `push` Effect: it pushes the branch of the Workspace to the Binding of its Repo Slot.
|
|
58
|
+
- [`PushOutput`](authoring-surface/type-pushoutput.md) (type): The output of a `push` Effect: what the `onDone` of its state gets as `event.output`.
|
|
59
|
+
- [`dispatch`](authoring-surface/dispatch.md) (function): Make a `dispatch` Effect: it starts a run of a Workflow.
|
|
60
|
+
- [`DispatchOutput`](authoring-surface/type-dispatchoutput.md) (type): The output of a `dispatch` Effect.
|
|
61
|
+
- [`answer`](authoring-surface/answer.md) (function): Set what the Agent reads when jr2 answers its pick.
|
|
62
|
+
- [`fromPick`](authoring-surface/frompick.md) (function): Make the `input` of the invoke of a state that a pick enters: the params of the pick go to the input of the invoked actor by name.
|
|
63
|
+
- [`paramsOf`](authoring-surface/paramsof.md) (function): Read the params of a pick from the event that entered the state.
|
|
64
|
+
|
|
65
|
+
## Composition
|
|
66
|
+
|
|
67
|
+
A part left Open, a Machine's parts retuned, a Pool over a Source ([ADR-0017](decisions/0017-pool-over-a-source-port.md), [ADR-0049](decisions/0049-a-machine-carries-its-parts-and-composes-by-invoke.md), [ADR-0054](decisions/0054-the-kit-ships-machines-and-a-shipped-machine-leaves-its-parts-open.md), [ADR-0060](decisions/0060-a-workspace-states-its-size-and-jr2-reserves-all-of-it.md)).
|
|
68
|
+
|
|
69
|
+
- [`open`](authoring-surface/open.md) (constant): Leave a part of a Machine Open: for the Instance that registers the Machine to bind with `customize()`.
|
|
70
|
+
- [`customize`](authoring-surface/customize.md) (function): Retune the parts that a Machine carries, without a change to the module that exports it.
|
|
71
|
+
- [`Customize`](authoring-surface/type-customize.md) (type): The parts of one Machine that `customize()` can retune: its Agents, its Open Effects, the Machines it composes, and the Sandbox of its `workspace()`.
|
|
72
|
+
- [`EffectBinding`](authoring-surface/type-effectbinding.md) (type): The values that bind the Open parts of one Effect.
|
|
73
|
+
- [`Size`](authoring-surface/type-size.md) (type): The Size of a Workspace: the most memory and cpu that its whole Sandbox can use.
|
|
74
|
+
- [`UserContainer`](authoring-surface/type-usercontainer.md) (type): The User Container in its object form: its image, and its part of the Workspace's Size.
|
|
75
|
+
- [`pool`](authoring-surface/pool.md) (function): Make a Pool: a Machine that runs one worker Machine for each item that a Source gives, with at most `cap` workers at once.
|
|
76
|
+
- [`source`](authoring-surface/source.md) (function): Declare a Source: where a `pool()` gets its work items, one at a time.
|
|
77
|
+
|
|
78
|
+
## Charts
|
|
79
|
+
|
|
80
|
+
The Open body a Chart wrapper places in `actors`, and the grammar a planner's pick declares, whole or narrowed to one wrapper ([ADR-0070](decisions/0070-a-machine-lends-its-parts-to-a-chart.md)).
|
|
81
|
+
|
|
82
|
+
- [`openBody`](authoring-surface/openbody.md) (function): Make an Open body: the actor slot that a Chart binds.
|
|
83
|
+
- [`OpenBodyDeclaration`](authoring-surface/type-openbodydeclaration.md) (type): What an Open body declares: the parts that it lends a Chart, what the Agents of a Chart can have, and the limits of a Chart.
|
|
84
|
+
- [`OpenBodyOutput`](authoring-surface/type-openbodyoutput.md) (type): The output of an Open body.
|
|
85
|
+
- [`chartSchema`](authoring-surface/chartschema.md) (constant): The Chart grammar, as a zod schema.
|
|
86
|
+
- [`chartSchemaFor`](authoring-surface/chartschemafor.md) (function): The Chart grammar for one Open body, as a zod schema.
|
|
87
|
+
|
|
88
|
+
## Config
|
|
89
|
+
|
|
90
|
+
`jr2.config.ts`, the deployment facts a Machine cannot carry ([ADR-0050](decisions/0050-what-code-names-config-declares-what-the-cli-names-discovery-finds.md)).
|
|
91
|
+
|
|
92
|
+
- [`defineConfig`](authoring-surface/defineconfig.md) (function): Declare the config of an Instance: the default export of `jr2.config.ts`.
|
|
93
|
+
- [`JR2Config`](authoring-surface/type-jr2config.md) (type): The shape of `jr2.config.ts`: the deployment facts of an Instance, which a Machine cannot carry.
|
|
94
|
+
|
|
95
|
+
## Types these signatures name
|
|
96
|
+
|
|
97
|
+
The signature of an export, or a type here, names each of these types. They are not exports of `@jr2/orchestrator`, so a workflow module does not import them by name.
|
|
98
|
+
|
|
99
|
+
- [`EventSemantics`](authoring-surface/type-eventsemantics.md): How the party that sends an event gets its answer.
|
|
100
|
+
- [`EventAudience`](authoring-surface/type-eventaudience.md): Who may send an event: `"agent"` (an Agent, as a pick from its Menu), `"external"` (the caller of a Gate), or `"any"` (both).
|
|
101
|
+
- [`EventDef`](authoring-surface/type-eventdef.md): A workflow event, as `defineEvent` gives it back: plain, frozen data and a zod schema, safe to import anywhere.
|
|
102
|
+
- [`WorkflowEvent`](authoring-surface/type-workflowevent.md): The type of `event` in a Machine that `jr2Setup` makes: each workflow event in its `events`, and each Mechanism event.
|
|
103
|
+
- [`FailSlot`](authoring-surface/type-failslot.md): The logic `fail()` returns: `failLogic` with the brand the walk reads.
|
|
104
|
+
- [`Failure`](authoring-surface/type-failure.md): A Failure as `isFailure` narrows an error to it: the payload's fields, on the error itself.
|
|
105
|
+
- [`AgentDeclaration`](authoring-surface/type-agentdeclaration.md): What `agent()` takes: an `AgentDefinition`, except that `model` can also be `open`.
|
|
106
|
+
- [`WorkspaceAccess`](authoring-surface/type-workspaceaccess.md): What an Agent may do to the Workspace: `"write"`, `"read"` or `"none"`.
|
|
107
|
+
- [`WorkspaceOptions`](authoring-surface/type-workspaceoptions.md): The options of a `workspace()` that declares the input that starts a run.
|
|
108
|
+
- [`NoSlotWorkspaceOptions`](authoring-surface/type-noslotworkspaceoptions.md): The options of a `workspace()` with no Repo Slot that declares the input that starts a run.
|
|
109
|
+
- [`WithoutEmptyIndex`](authoring-surface/type-withoutemptyindex.md): The fields of the run input `T`.
|
|
110
|
+
- [`PermissiveWorkspaceOptions`](authoring-surface/type-permissiveworkspaceoptions.md): The options of a `workspace()` with no `input`: it starts with any input.
|
|
111
|
+
- [`PermissiveNoSlotWorkspaceOptions`](authoring-surface/type-permissivenoslotworkspaceoptions.md): The options of a `workspace()` with no Repo Slot and no `input`: it starts with any input.
|
|
112
|
+
- [`WorkspaceHandles`](authoring-surface/type-workspacehandles.md): What the body of a `workspace()` gets as `input.workspace`: the path of each Worktree, and the branch.
|
|
113
|
+
- [`ExecOutcome`](authoring-surface/type-execoutcome.md): How an exec ended.
|
|
114
|
+
- [`Unknown`](authoring-surface/type-unknown.md): The output `{ outcome: "unknown", reason }`: the Effect may have acted, and jr2 cannot tell.
|
|
115
|
+
- [`Arg`](authoring-surface/type-arg.md): One entry of a command's argv that the input of the Effect fills, as `arg("name")` makes it.
|
|
116
|
+
- [`CommandOptions`](authoring-surface/type-commandoptions.md): The options of `command()`: the Repo Slot it runs in, how long it can run, how much of its output it keeps, its Effect secrets, and the commit it runs against.
|
|
117
|
+
- [`CommandInput`](authoring-surface/type-commandinput.md): A command's input: one string per argv slot, and with `pin` the approved commit (`{ sha }`); none when there is neither.
|
|
118
|
+
- [`OpenCommandInput`](authoring-surface/type-opencommandinput.md): The input of a `command(open)`: a string for each `arg()` of the argv that the Instance binds, and with `pin`, the commit (`{ sha }`).
|
|
119
|
+
- [`Secret`](authoring-surface/type-secret.md): What `secret("name")` gives: an Effect secret, by its name in the `secrets` list of `jr2.config.ts`.
|
|
120
|
+
- [`Text`](authoring-surface/type-text.md): What the `text` template gives: a string of literal text and Effect secrets, in order.
|
|
121
|
+
- [`FromInput`](authoring-surface/type-frominput.md): A value of a file body's part: as written, or from the Effect's input.
|
|
122
|
+
- [`FileBody`](authoring-surface/type-filebody.md): `file(path, { slot?, segments?, contentType? })`: a Worktree file as an `http` body.
|
|
123
|
+
- [`HttpDefinition`](authoring-surface/type-httpdefinition.md): An `http` Effect's definition.
|
|
124
|
+
- [`OpenSecret`](authoring-surface/type-opensecret.md): `secret(open)`: a secret a packaged Machine names in its auth, a header or a command's env, and leaves for its composer to name (ADR-0054).
|
|
125
|
+
- [`PushOptions`](authoring-surface/type-pushoptions.md): The options of `push()`.
|
|
126
|
+
- [`PushInput`](authoring-surface/type-pushinput.md): The input of a `push` Effect: `{ sha }` with `pin`, and `{ message }` with `squash`.
|
|
127
|
+
- [`DispatchDefinition`](authoring-surface/type-dispatchdefinition.md): The definition of a `dispatch` Effect (ADR-0071).
|
|
128
|
+
- [`DispatchInput`](authoring-surface/type-dispatchinput.md): A dispatch's input: the run's body — the slot's schema's type, or any JSON object.
|
|
129
|
+
- [`DispatchOpenParts`](authoring-surface/type-dispatchopenparts.md): The Open part a dispatch definition states: its target, when it is `open`.
|
|
130
|
+
- [`ChainLink`](authoring-surface/type-chainlink.md): One reply since the pick, as the author reads it: an invoked actor's output, typed by its slot (`src`); or an event that answered a state below the Agent's — a Gate's answer, a nested Agent's pick — typed by the Machine's events.
|
|
131
|
+
- [`Quantity`](authoring-surface/type-quantity.md): A Kubernetes quantity: `"2Gi"`, `"1500m"`, `"2"`, or a plain number (`2` cpus, bytes of memory).
|
|
132
|
+
- [`PoolSpec`](authoring-surface/type-poolspec.md): What you pass to `pool()`: where the items come from, how many workers run at once, and what each worker gets.
|
|
133
|
+
- [`SourceSpec`](authoring-surface/type-sourcespec.md): Where a Pool gets its work items: the Source.
|
|
134
|
+
- [`OpenBodyLogic`](authoring-surface/type-openbodylogic.md): The logic `openBody()` returns: actor logic that carries the brand.
|
|
135
|
+
- [`Lends`](authoring-surface/type-lends.md): The parts of the Chart wrapper that a Chart can use, by their keys in `actors`, `guards`, `actions` and `delays`.
|
|
136
|
+
- [`Ceilings`](authoring-surface/type-ceilings.md): The limits that an Open body sets on its Chart.
|
|
137
|
+
- [`ChartText`](authoring-surface/type-charttext.md): The Chart text (ADR-0070).
|
|
138
|
+
- [`Sender`](authoring-surface/type-sender.md): Who delivered an event: an Agent by its slot, or a Gate by its invoke id (ADR-0015).
|
|
139
|
+
- [`FailureInput`](authoring-surface/type-failureinput.md): What a Failure carries: `reason`, text for a person, and `detail`, optional JSON for a machine reader.
|
|
140
|
+
- [`SandboxOptions`](authoring-surface/type-sandboxoptions.md): The options of a `workspace()` that say what its Sandbox is made of and which Repos it clones.
|
|
141
|
+
- [`WorkspaceSpec`](authoring-surface/type-workspacespec.md): What the `spec` of a `workspace()` returns: the branch that the Workspace works on, and two optional fields.
|
|
142
|
+
- [`NoSlotSpec`](authoring-surface/type-noslotspec.md): What the `spec` of a `workspace()` with no Repo Slot returns: only `workGroup`.
|
|
143
|
+
- [`SlotHandles`](authoring-surface/type-slothandles.md): The handles of a Workspace that declares Repo Slots.
|
|
144
|
+
- [`Duration`](authoring-surface/type-duration.md): A length of time: a positive number and a unit, `s`, `m` or `h`.
|
|
145
|
+
- [`CommandEnv`](authoring-surface/type-commandenv.md): The `env` of a `command`: for each variable, `secret("name")` for the value of an Effect secret, or `secret("name").path` for the path of a file that holds it.
|
|
146
|
+
- [`TextPart`](authoring-surface/type-textpart.md): One part of a `Text`: `{ text }`, literal text, or `{ secret }`, the name of an Effect secret.
|
|
147
|
+
- [`HttpMethod`](authoring-surface/type-httpmethod.md): The method of an `http` Effect: `GET`, `HEAD`, `POST`, `PUT`, `PATCH`, `DELETE` or `OPTIONS`.
|
|
148
|
+
- [`HttpRequestParts`](authoring-surface/type-httprequestparts.md): What the `request` of an `http` definition returns: the part of the request that changes for each run.
|
|
149
|
+
- [`NamedSecret`](authoring-surface/type-namedsecret.md): A named secret, never `secret(open)`: where a definition's Open part is a whole that holds a secret — a dispatch's target (ADR-0071) — the secret is bound with it, to a name, so the mark `secret(open)` carries may not be present.
|
|
150
|
+
- [`SourceNextResult`](authoring-surface/type-sourcenextresult.md): What the `next` of a Source resolves to: an item, to claim it; `null`, when no item is ready now; or `{ item, open }`, where `open` is the number of items that exist but are not ready.
|
|
151
|
+
- [`OpenBodySlot`](authoring-surface/type-openbodyslot.md): The brand an Open body slot carries, as `definition` marks an Agent slot (ADR-0049).
|
|
152
|
+
- [`ChartJson`](authoring-surface/type-chartjson.md): Plain JSON.
|
|
153
|
+
- [`ChartEvent`](authoring-surface/type-chartevent.md): An event a Chart mints: its payload is a JSON Schema object, built into zod at admission.
|
|
154
|
+
- [`ChartAgent`](authoring-surface/type-chartagent.md): An Agent a Chart mints: the plain fields of an Agent definition (ADR-0049).
|
|
155
|
+
- [`ChartState`](authoring-surface/type-chartstate.md): A state node.
|
|
156
|
+
- [`ChartValue`](authoring-surface/type-chartvalue.md): A value whose strings may hold `{{<root>.<path>}}` placeholders and whose objects may be `{ "$ref": "<root>.<path>" }`.
|
|
157
|
+
- [`ChartInvoke`](authoring-surface/type-chartinvoke.md): An invoke: a lent Agent, Effect or Machine, a minted Agent, or the kit's `gate` or `fail`.
|
|
158
|
+
- [`ChartTransitions`](authoring-surface/type-charttransitions.md): One transition or a list, in xstate's order.
|
|
159
|
+
- [`ChartAction`](authoring-surface/type-chartaction.md): An action.
|
|
160
|
+
- [`ChartTransition`](authoring-surface/type-charttransition.md): A transition: a target alone, or the object form.
|
|
161
|
+
- [`ChartGuard`](authoring-surface/type-chartguard.md): A guard: a lent guard by name, with or without params, `jr2.sentBy`, `jr2.failure`, or `not`/`and`/`or`.
|
|
162
|
+
|
|
163
|
+
**Type plumbing.** These types compute a type from the types of a Machine or of its parts. A workflow module does not write them. Each has a page with its declaration:
|
|
164
|
+
|
|
165
|
+
- [`ToProvidedActor`](authoring-surface/type-toprovidedactor.md)
|
|
166
|
+
- [`MergedActors`](authoring-surface/type-mergedactors.md)
|
|
167
|
+
- [`ToParameterizedObject`](authoring-surface/type-toparameterizedobject.md)
|
|
168
|
+
- [`SentByGuards`](authoring-surface/type-sentbyguards.md)
|
|
169
|
+
- [`AgentLogic`](authoring-surface/type-agentlogic.md)
|
|
170
|
+
- [`BodyAcceptsDoor`](authoring-surface/type-bodyacceptsdoor.md)
|
|
171
|
+
- [`WorkspaceMachine`](authoring-surface/type-workspacemachine.md)
|
|
172
|
+
- [`BodyAcceptsSlots`](authoring-surface/type-bodyacceptsslots.md)
|
|
173
|
+
- [`EffectLogic`](authoring-surface/type-effectlogic.md)
|
|
174
|
+
- [`OpenOf`](authoring-surface/type-openof.md)
|
|
175
|
+
- [`EnvOpenParts`](authoring-surface/type-envopenparts.md)
|
|
176
|
+
- [`OpenEffect`](authoring-surface/type-openeffect.md)
|
|
177
|
+
- [`MarkedIf`](authoring-surface/type-markedif.md)
|
|
178
|
+
- [`HttpInput`](authoring-surface/type-httpinput.md)
|
|
179
|
+
- [`HttpOpenParts`](authoring-surface/type-httpopenparts.md)
|
|
180
|
+
- [`PushWireOutput`](authoring-surface/type-pushwireoutput.md)
|
|
181
|
+
- [`SyncState`](authoring-surface/type-syncstate.md)
|
|
182
|
+
- [`AnswerAction`](authoring-surface/type-answeraction.md)
|
|
183
|
+
- [`AgentSlots`](authoring-surface/type-agentslots.md)
|
|
184
|
+
- [`Reached`](authoring-surface/type-reached.md)
|
|
185
|
+
- [`OpenEffectSlots`](authoring-surface/type-openeffectslots.md)
|
|
186
|
+
- [`BindingOf`](authoring-surface/type-bindingof.md)
|
|
187
|
+
- [`LogicAt`](authoring-surface/type-logicat.md)
|
|
188
|
+
- [`ChildSlots`](authoring-surface/type-childslots.md)
|
|
189
|
+
- [`ChildAt`](authoring-surface/type-childat.md)
|
|
190
|
+
- [`RepoSlotsOf`](authoring-surface/type-reposlotsof.md)
|
|
191
|
+
- [`WorkspaceOf`](authoring-surface/type-workspaceof.md)
|
|
192
|
+
- [`PoolMachine`](authoring-surface/type-poolmachine.md)
|
|
193
|
+
- [`EventFrom`](authoring-surface/type-eventfrom.md)
|
|
194
|
+
- [`ArgNames`](authoring-surface/type-argnames.md)
|
|
195
|
+
- [`OpenSecretMark`](authoring-surface/type-opensecretmark.md)
|
|
196
|
+
|
|
197
|
+
These names come from a dependency: from `zod`, `z.ZodObject`, `z.infer`, `z.ZodType`; from `xstate`, `MachineContext`, `UnknownActorLogic`, `ParameterizedObject`, `NonReducibleUnknown`, `EventObject`, `MetaObject`, `ActionFunction`, `GuardPredicate`, `DelayConfig`, `SetupReturn`, `AnyStateMachine`, `OutputFrom`, `ProvidedActor`, `AnyActorRef`, `InputFrom`, `PromiseActorLogic`.
|