@jr2/orchestrator 0.4.1 → 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/console/components/app.ts +2 -0
- package/console/components/fleet.ts +14 -1
- package/console/components/machine-pane.ts +41 -2
- package/console/main.ts +13 -1
- package/console/store.ts +102 -6
- package/console/style.css +21 -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 +5 -3
- package/src/actor.ts +541 -79
- package/src/agent.ts +114 -38
- package/src/ambient.ts +2 -1
- package/src/assembly-checks.ts +189 -7
- package/src/cause.ts +234 -0
- package/src/chart.ts +169 -37
- package/src/charts.ts +34 -6
- package/src/config.ts +430 -178
- package/src/custodian.ts +74 -22
- package/src/customize.ts +188 -46
- package/src/dispatch-effect.ts +945 -0
- package/src/door-compat.ts +217 -0
- package/src/durability.ts +11 -4
- package/src/effect.ts +341 -44
- package/src/effector-wire.ts +160 -11
- package/src/fail.ts +209 -0
- package/src/harness-client.ts +541 -47
- package/src/http-effect.ts +495 -53
- package/src/http.ts +427 -16
- package/src/index.ts +60 -82
- package/src/instance.ts +68 -8
- package/src/internal.ts +84 -0
- package/src/machine-doc.ts +21 -3
- package/src/mechanism-routes.ts +168 -0
- package/src/model-keys.generated.ts +53 -0
- package/src/model-keys.ts +18 -58
- package/src/notices.ts +66 -13
- package/src/open-body.ts +159 -23
- package/src/open-effect.ts +81 -8
- package/src/open.ts +59 -6
- package/src/parts.ts +184 -13
- package/src/party.ts +68 -2
- package/src/pick.ts +463 -11
- package/src/pool.ts +247 -36
- package/src/registration.ts +83 -4
- package/src/repos.ts +2 -1
- package/src/run-host.ts +565 -31
- package/src/run-output.ts +38 -0
- package/src/sandbox-effect.ts +273 -38
- package/src/sandbox-kube.ts +3 -1
- package/src/secret-placement.ts +52 -17
- package/src/server.ts +3 -0
- package/src/setup.ts +239 -56
- package/src/size.ts +121 -9
- package/src/snapshot-store.ts +54 -10
- package/src/stub-harness.ts +44 -16
- package/src/timers.ts +14 -1
- package/src/vocabulary.ts +69 -14
- package/src/wire.ts +90 -16
- package/src/workspace.ts +697 -175
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: EventDef
|
|
3
|
+
description: "A workflow event, as `defineEvent` gives it back: plain, frozen data and a zod schema, safe to import anywhere."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `EventDef`
|
|
7
|
+
|
|
8
|
+
Type, in `src/define-event.ts` of `@jr2/agent-protocol`, a dependency of `@jr2/orchestrator`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type EventDef<Name extends string = string, Input extends z.ZodObject = z.ZodObject> = {
|
|
12
|
+
readonly name: Name;
|
|
13
|
+
readonly description?: string;
|
|
14
|
+
readonly input: Input;
|
|
15
|
+
readonly semantics: EventSemantics;
|
|
16
|
+
readonly audience?: EventAudience;
|
|
17
|
+
};
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
A workflow event, as `defineEvent` gives it back: plain, frozen data and a zod schema, safe to
|
|
21
|
+
import anywhere. Give it to `jr2Setup({ events })`. A Machine accepts only the events in that
|
|
22
|
+
list.
|
|
23
|
+
|
|
24
|
+
**Fields**
|
|
25
|
+
|
|
26
|
+
- `name`: `Name`
|
|
27
|
+
|
|
28
|
+
The event's name: its xstate event `type`, and the name of its tool on the Agent's Menu.
|
|
29
|
+
- `description` (optional): `string`
|
|
30
|
+
|
|
31
|
+
What the event means. An Agent's model reads it as the tool's description.
|
|
32
|
+
- `input`: `Input`
|
|
33
|
+
|
|
34
|
+
The schema of the event's payload: a flat `z.object`, never a union.
|
|
35
|
+
- `semantics`: [`EventSemantics`](type-eventsemantics.md)
|
|
36
|
+
|
|
37
|
+
How the sender gets its answer: always `"ack"` on an event that `createMachine` accepts.
|
|
38
|
+
- `audience` (optional): [`EventAudience`](type-eventaudience.md)
|
|
39
|
+
|
|
40
|
+
Who may send the event. Absent: the state of each `on` key decides (see [`EventAudience`](type-eventaudience.md)).
|
|
41
|
+
|
|
42
|
+
**See also**
|
|
43
|
+
|
|
44
|
+
- [Write a Workflow](../../guides/write-a-workflow.md)
|
|
45
|
+
- [ADR-0011: Control events are workflow-defined and delivered by closure, not routed](../decisions/0011-workflow-defined-events.md)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: EventFrom
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `EventFrom`
|
|
7
|
+
|
|
8
|
+
Type, in `src/define-event.ts` of `@jr2/agent-protocol`, a dependency of `@jr2/orchestrator`. 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 EventFrom<D extends EventDef> =
|
|
12
|
+
D extends EventDef<infer N, infer I>
|
|
13
|
+
?
|
|
14
|
+
{ type: N } & (z.infer<I> extends Record<string, never> ? unknown : z.infer<I>)
|
|
15
|
+
: never;
|
|
16
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: EventSemantics
|
|
3
|
+
description: How the party that sends an event gets its answer.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `EventSemantics`
|
|
7
|
+
|
|
8
|
+
Type, in `src/define-event.ts` of `@jr2/agent-protocol`, a dependency of `@jr2/orchestrator`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type EventSemantics = "ack" | "poll";
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
How the party that sends an event gets its answer.
|
|
15
|
+
|
|
16
|
+
- `"ack"`, the default: jr2 delivers the event and answers the sender. When the event starts
|
|
17
|
+
work inside the Agent's state, the answer comes when that work is done.
|
|
18
|
+
- `"poll"`: reserved. `createMachine` refuses it: ``machine "<id>": event "<name>" is `poll`,
|
|
19
|
+
which is reserved but NOT IMPLEMENTED (ADR-0013). Only `ack` events can be delivered today;
|
|
20
|
+
nothing drains a steer inbox, and degrading it to `ack` would hand the Agent a lying tool
|
|
21
|
+
contract.``
|
|
22
|
+
|
|
23
|
+
**See also**
|
|
24
|
+
|
|
25
|
+
- [The Menu](../../concepts/the-menu.md)
|
|
26
|
+
- [ADR-0006: The agent picks from a Machine-defined, schema-backed menu; it does not drive the workflow](../decisions/0006-agent-control-surface.md)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: ExecOutcome
|
|
3
|
+
description: How an exec ended.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `ExecOutcome`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/wire.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type ExecOutcome =
|
|
12
|
+
| { outcome: "exited"; code: number; tail: string }
|
|
13
|
+
| { outcome: "timeout"; tail: string }
|
|
14
|
+
| { outcome: "killed"; signal: string; tail: string };
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
How an exec ended. Every one is output; none is a fault.
|
|
18
|
+
|
|
19
|
+
**Forms**: it is one of these objects.
|
|
20
|
+
|
|
21
|
+
- Form 1: `outcome`, `code`, `tail`
|
|
22
|
+
|
|
23
|
+
- `outcome`: `"exited"`
|
|
24
|
+
- `code`: `number`
|
|
25
|
+
- `tail`: `string`
|
|
26
|
+
- Form 2: `outcome`, `tail`
|
|
27
|
+
|
|
28
|
+
- `outcome`: `"timeout"`
|
|
29
|
+
- `tail`: `string`
|
|
30
|
+
- Form 3: `outcome`, `signal`, `tail`
|
|
31
|
+
|
|
32
|
+
- `outcome`: `"killed"`
|
|
33
|
+
- `signal`: `string`
|
|
34
|
+
- `tail`: `string`
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: FailSlot
|
|
3
|
+
description: "The logic `fail()` returns: `failLogic` with the brand the walk reads."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `FailSlot`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/fail.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 FailSlot = PromiseActorLogic<never, FailureInput> & { readonly [FAIL_SLOT]: true };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The logic `fail()` returns: `failLogic` with the brand the walk reads.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Failure
|
|
3
|
+
description: "A Failure as `isFailure` narrows an error to it: the payload's fields, on the error itself."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `Failure`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/fail.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 Failure = { readonly reason: string; readonly detail?: unknown };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
A Failure as `isFailure` narrows an error to it: the payload's fields, on the error itself.
|
|
15
|
+
|
|
16
|
+
**Fields**
|
|
17
|
+
|
|
18
|
+
- `reason`: `string`
|
|
19
|
+
- `detail` (optional): `unknown`
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: FailureInput
|
|
3
|
+
description: "What a Failure carries: `reason`, text for a person, and `detail`, optional JSON for a machine reader."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `FailureInput`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/fail.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 FailureInput = { reason: string; detail?: unknown };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
What a Failure carries: `reason`, text for a person, and `detail`, optional JSON for a machine
|
|
15
|
+
reader. The input of `fail()` and the output of a run that ends `failed`.
|
|
16
|
+
|
|
17
|
+
**Fields**
|
|
18
|
+
|
|
19
|
+
- `reason`: `string`
|
|
20
|
+
- `detail` (optional): `unknown`
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: FileBody
|
|
3
|
+
description: "`file(path, { slot?, segments?, contentType? })`: a Worktree file as an `http` body."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `FileBody`
|
|
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 FileBody<S extends z.ZodType | undefined = undefined> = {
|
|
12
|
+
readonly file: {
|
|
13
|
+
readonly path: FromInput<S, string>;
|
|
14
|
+
readonly slot?: string;
|
|
15
|
+
readonly segments?: FromInput<S, readonly string[]>;
|
|
16
|
+
readonly contentType?: string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`file(path, { slot?, segments?, contentType? })`: a Worktree file as an `http` body.
|
|
22
|
+
|
|
23
|
+
**Fields**
|
|
24
|
+
|
|
25
|
+
- `file`: `object`
|
|
26
|
+
|
|
27
|
+
- `path`: `FromInput<S, string>`
|
|
28
|
+
|
|
29
|
+
The file, relative to the Repo Slot's Worktree, or to `/work` in a Workspace with no Repo
|
|
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.
|
|
34
|
+
- `segments` (optional): `FromInput<S, readonly string[]>`
|
|
35
|
+
|
|
36
|
+
Path segments that jr2 adds to the end of the url, as `path` of `request` does for a json
|
|
37
|
+
or text body.
|
|
38
|
+
- `contentType` (optional): `string`
|
|
39
|
+
|
|
40
|
+
The content type of the body. Write it or a `content-type` header, not both. With neither,
|
|
41
|
+
it is `application/octet-stream`.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: FromInput
|
|
3
|
+
description: "A value of a file body's part: as written, or from the Effect's input."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `FromInput`
|
|
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 FromInput<S, T> = T | ((input: S extends z.ZodType ? z.infer<S> : void) => T);
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
A value of a file body's part: as written, or from the Effect's input.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: HostInjectedInput
|
|
3
|
+
description: The fields that jr2 adds to the input of the Machine that a run starts, beside the input that the caller sent.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `HostInjectedInput`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/vocabulary.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Machine and events.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type HostInjectedInput = { instanceId: string };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The fields that jr2 adds to the input of the Machine that a run starts, beside the input that
|
|
15
|
+
the caller sent. Today it is one field: `instanceId`, an id that jr2 makes for the run.
|
|
16
|
+
|
|
17
|
+
Add it to the type of your root Machine's input when the Machine reads it:
|
|
18
|
+
`HostInjectedInput & RunInput`. Do not put it in the `input` schema that a run starts with. No
|
|
19
|
+
caller sends it. jr2 writes it over any value that a caller sends.
|
|
20
|
+
|
|
21
|
+
Only the root Machine of a run gets it. A Machine that another Machine invokes gets the input
|
|
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}` })``.
|
|
27
|
+
|
|
28
|
+
It is not the run id. Use it, for example, to give each run a branch of its own.
|
|
29
|
+
|
|
30
|
+
**Fields**
|
|
31
|
+
|
|
32
|
+
- `instanceId`: `string`
|
|
33
|
+
|
|
34
|
+
**Example**
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import { z } from "zod";
|
|
38
|
+
import { jr2Setup, type HostInjectedInput } from "@jr2/orchestrator";
|
|
39
|
+
|
|
40
|
+
const runInput = z.object({ ticket: z.string() });
|
|
41
|
+
type Input = HostInjectedInput & z.infer<typeof runInput>;
|
|
42
|
+
|
|
43
|
+
export const machine = jr2Setup({
|
|
44
|
+
types: {} as { input: Input; context: Input; output: { run: string; ticket: string } },
|
|
45
|
+
}).createMachine({
|
|
46
|
+
id: "ticket",
|
|
47
|
+
input: runInput,
|
|
48
|
+
context: ({ input }) => input,
|
|
49
|
+
initial: "done",
|
|
50
|
+
states: { done: { type: "final" } },
|
|
51
|
+
output: ({ context }) => ({ run: context.instanceId, ticket: context.ticket }),
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**See also**
|
|
56
|
+
|
|
57
|
+
- [Write a Workflow](../../guides/write-a-workflow.md)
|
|
58
|
+
- [ADR-0033: A Machine declares the input that starts it](../decisions/0033-a-machine-declares-the-input-that-starts-it.md)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: HttpDefinition
|
|
3
|
+
description: "An `http` Effect's definition."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `HttpDefinition`
|
|
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 HttpDefinition<S extends z.ZodType | undefined = undefined> = {
|
|
12
|
+
method: HttpMethod;
|
|
13
|
+
url: string | Text | typeof open;
|
|
14
|
+
headers?: Readonly<Record<string, string | Text>>;
|
|
15
|
+
auth?: { readonly bearer: Secret } | { readonly basic: { user: Text; password: Text } } | Text;
|
|
16
|
+
input?: S;
|
|
17
|
+
request?: (input: S extends z.ZodType ? z.infer<S> : void) => HttpRequestParts;
|
|
18
|
+
body?: FileBody<S>;
|
|
19
|
+
timeout?: Duration;
|
|
20
|
+
maxBody?: number;
|
|
21
|
+
idempotent?: boolean;
|
|
22
|
+
};
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
An `http` Effect's definition.
|
|
26
|
+
|
|
27
|
+
**Fields**
|
|
28
|
+
|
|
29
|
+
- `method`: [`HttpMethod`](type-httpmethod.md)
|
|
30
|
+
|
|
31
|
+
The HTTP method: `GET`, `HEAD`, `POST`, `PUT`, `PATCH`, `DELETE` or `OPTIONS`. It refuses
|
|
32
|
+
another: `http({ method: "<method>" }): the method is one of GET, HEAD, POST, PUT, PATCH,
|
|
33
|
+
DELETE, OPTIONS`.
|
|
34
|
+
- `url`: `string | Text | typeof open`
|
|
35
|
+
|
|
36
|
+
The url: `http://` or `https://`, then a literal host. No input, param or Effect secret can
|
|
37
|
+
change where the call goes. An Effect secret can be only in the path:
|
|
38
|
+
`` text`https://api.telegram.org/bot${secret("tg")}/sendMessage` ``.
|
|
39
|
+
|
|
40
|
+
Or `open`: a packaged Machine that cannot know the host leaves the url Open, and the composer
|
|
41
|
+
binds it one time with `customize(machine, { effects: { <slot>: { url } } })`.
|
|
42
|
+
|
|
43
|
+
It refuses:
|
|
44
|
+
- a scheme or host that is not literal: `` http({ url }): the url is an http:// or https:// url
|
|
45
|
+
whose scheme and host are literal — a secret may sit only in its path, after a "/":
|
|
46
|
+
text`https://api.example.com/bot${secret("tg")}/send` (ADR-0068) ``
|
|
47
|
+
- an Effect secret after `?` or `#`: `` http({ url }): secret("<name>") sits in the url's query
|
|
48
|
+
or fragment — a secret may sit only in its path; send it in `auth` or a header instead:
|
|
49
|
+
headers: { "x-api-key": text`${secret("...")}` } (ADR-0068) ``
|
|
50
|
+
- a host that is not a host: `http({ url }): "<scheme>://<host>" is not a host`
|
|
51
|
+
- a user name or password in the url: ``http({ url }): the url carries userinfo — use `auth` ``
|
|
52
|
+
- `headers` (optional): `Readonly<Record<string, string | Text>>`
|
|
53
|
+
|
|
54
|
+
Headers that are the same for each run. Each name is lowercase. A value is a string, or a
|
|
55
|
+
`text` with an Effect secret.
|
|
56
|
+
|
|
57
|
+
It refuses:
|
|
58
|
+
- a name that is not lowercase, or that frames or routes the request (`host`,
|
|
59
|
+
`content-length`, `transfer-encoding`, `connection`, `upgrade`, `te`, `trailer`,
|
|
60
|
+
`keep-alive`, `proxy-*`): `http({ headers }): "<name>" is not a header an Effect sets — a
|
|
61
|
+
lowercase name that does not frame or route the request (ADR-0068)`
|
|
62
|
+
- an `authorization` header beside `auth`: ``http({ headers }): "authorization" is set by
|
|
63
|
+
`auth` — write one of them``
|
|
64
|
+
- `auth` (optional): `{ readonly bearer: Secret; } | { readonly basic: { user: Text; password: Text; }; } | Text`
|
|
65
|
+
|
|
66
|
+
The `Authorization` header: `bearer(secret("x"))`, `basic(user, password)`, or a `text` that
|
|
67
|
+
is the whole value.
|
|
68
|
+
- `input` (optional): `S`
|
|
69
|
+
|
|
70
|
+
The zod schema of the input of the Effect: what the `input` of the `invoke`, or `fromPick`,
|
|
71
|
+
gives it. jr2 parses the input with it before the call. When it starts, input that does not
|
|
72
|
+
agree with it makes the Effect fail (its `onError` route): `http "<slot>": its input does not
|
|
73
|
+
match the definition's input schema — <path>: <message>`, one `<path>: <message>` for each
|
|
74
|
+
problem, joined by `; `.
|
|
75
|
+
- `request` (optional): `(input: S extends z.ZodType ? z.infer<S> : void) => HttpRequestParts`
|
|
76
|
+
|
|
77
|
+
A function that makes the part of the request that changes for each run, from the input:
|
|
78
|
+
`path` segments, and a `json` or `text` body. It cannot change the host, a header or an
|
|
79
|
+
Effect secret. Do not write it beside `body`.
|
|
80
|
+
- `body` (optional): `FileBody<S>`
|
|
81
|
+
|
|
82
|
+
A Worktree file as the body: `file(path, { slot?, segments?, contentType? })`. The Effect then
|
|
83
|
+
runs in the Sandbox Effector of its Workspace. Do not write `request` beside it: the `segments`
|
|
84
|
+
of `file` are the path. It refuses another body: ``http({ body }): a body is file(path, {
|
|
85
|
+
slot?, segments?, contentType? }) — json and text come from `request` ``.
|
|
86
|
+
- `timeout` (optional): [`Duration`](type-duration.md)
|
|
87
|
+
|
|
88
|
+
How long jr2 waits for the answer: a number and a unit, such as `"30s"` or `"2m"`. Default
|
|
89
|
+
`"30s"`. With no answer in that time, the output is `unknown`. It refuses a value that is not
|
|
90
|
+
a positive duration: `http: timeout "<timeout>" is not a positive duration (like "30s",
|
|
91
|
+
"2m")`.
|
|
92
|
+
- `maxBody` (optional): `number`
|
|
93
|
+
|
|
94
|
+
The largest number of bytes of a text response body that the output keeps. Default 65536.
|
|
95
|
+
When jr2 cuts the body, `truncated` is `true`. It refuses a value that is not a positive whole
|
|
96
|
+
number: `http({ maxBody }): a positive number of bytes`.
|
|
97
|
+
- `idempotent` (optional): `boolean`
|
|
98
|
+
|
|
99
|
+
`true` when it is safe to send the call two times: it has its own idempotency key, or it only
|
|
100
|
+
reads. Default `false`. After an Orchestrator restart, jr2 cannot always tell if the call went
|
|
101
|
+
out. Then it sends an idempotent call again, and gives any other call the output `unknown`.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: HttpInput
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `HttpInput`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/http-effect.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type HttpInput<S> = S extends z.ZodType ? z.infer<S> : void;
|
|
12
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: HttpMethod
|
|
3
|
+
description: "The method of an `http` Effect: `GET`, `HEAD`, `POST`, `PUT`, `PATCH`, `DELETE` or `OPTIONS`."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `HttpMethod`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/effector-wire.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type HttpMethod = z.infer<typeof HttpMethodShape>;
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The method of an `http` Effect: `GET`, `HEAD`, `POST`, `PUT`, `PATCH`, `DELETE` or `OPTIONS`.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: HttpOpenParts
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `HttpOpenParts`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/http-effect.ts`. It is type plumbing: it computes a type from the types of a Machine or of its parts, and a workflow module does not write it. The signature of an export, or a type that it names, names this type, so its declaration is here. The [Authoring surface](../authoring-surface.md) page lists each export.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type HttpOpenParts<U, A, H> = (U extends typeof open ? "url" : never) | OpenSecretIn<A | ValuesOf<H>>;
|
|
12
|
+
```
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: HttpOutput
|
|
3
|
+
description: "The output of an `http` Effect: what the `onDone` of its state gets as `event.output`."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `HttpOutput`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/effector-wire.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Effects.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type HttpOutput = {
|
|
12
|
+
outcome: "response";
|
|
13
|
+
status: number;
|
|
14
|
+
headers: Record<string, string>;
|
|
15
|
+
contentType: string;
|
|
16
|
+
size: number;
|
|
17
|
+
body?: string | undefined;
|
|
18
|
+
truncated?: boolean | undefined;
|
|
19
|
+
} | {
|
|
20
|
+
outcome: "unknown" | "unreachable" | "refused";
|
|
21
|
+
reason: string;
|
|
22
|
+
};
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The output of an `http` Effect: what the `onDone` of its state gets as `event.output`. Every
|
|
26
|
+
outcome is output. A 4xx or 5xx status is output too. Route on `outcome`:
|
|
27
|
+
|
|
28
|
+
- `response`: an answer came back. `status` is its HTTP status. `headers`, `contentType` and
|
|
29
|
+
`size` tell about the body. `body` is there when the body is text: at most `maxBody` bytes
|
|
30
|
+
(`truncated` is `true` when jr2 cut it). A body that is not text gives only its size and
|
|
31
|
+
content type. jr2 replaces each value of an Effect secret that the Effector holds, and its
|
|
32
|
+
usual encodings, with `[secret:<name>]`, in the body and the headers.
|
|
33
|
+
- `unreachable`: the call did not go out, for example because the name did not resolve, or the
|
|
34
|
+
connection or TLS failed. `reason` tells why.
|
|
35
|
+
- `refused`: jr2 or the Effector refused the call, and nothing was sent. For example, a path
|
|
36
|
+
segment that is `.`, `..` or empty, or a request that is too large. `reason` tells why.
|
|
37
|
+
- `unknown`: the call can have gone out, but no answer came, or jr2 cannot tell after a restart.
|
|
38
|
+
`reason` tells why. jr2 does not send it again unless it is marked `idempotent`.
|
|
39
|
+
|
|
40
|
+
**Forms**: it is one of these objects.
|
|
41
|
+
|
|
42
|
+
- Form 1: `outcome`, `status`, `headers`, `contentType`, `size`, `body`, `truncated`
|
|
43
|
+
|
|
44
|
+
- `outcome`: `"response"`
|
|
45
|
+
- `status`: `number`
|
|
46
|
+
- `headers`: `Record<string, string>`
|
|
47
|
+
- `contentType`: `string`
|
|
48
|
+
- `size`: `number`
|
|
49
|
+
- `body` (optional): `string`
|
|
50
|
+
- `truncated` (optional): `boolean`
|
|
51
|
+
- Form 2: `outcome`, `reason`
|
|
52
|
+
|
|
53
|
+
- `outcome`: `"unknown" | "unreachable" | "refused"`
|
|
54
|
+
- `reason`: `string`
|
|
55
|
+
|
|
56
|
+
**Example**
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
import { fail, http, jr2Setup, type HttpOutput } from "@jr2/orchestrator";
|
|
60
|
+
|
|
61
|
+
const ok = (output: HttpOutput): boolean => output.outcome === "response" && output.status < 300;
|
|
62
|
+
|
|
63
|
+
export const machine = jr2Setup({
|
|
64
|
+
actors: { health: http({ method: "GET", url: "https://app.example.com/healthz" }), fail: fail() },
|
|
65
|
+
}).createMachine({
|
|
66
|
+
id: "health",
|
|
67
|
+
initial: "checking",
|
|
68
|
+
states: {
|
|
69
|
+
checking: {
|
|
70
|
+
invoke: {
|
|
71
|
+
src: "health",
|
|
72
|
+
onDone: [
|
|
73
|
+
{ guard: ({ event }) => ok(event.output), target: "healthy" },
|
|
74
|
+
{ target: "unhealthy" },
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
healthy: { type: "final" },
|
|
79
|
+
// Not a final state: the run ends `failed`, and `jr2 run` exits 1.
|
|
80
|
+
unhealthy: { invoke: { src: "fail", input: { reason: "the app is not healthy" } } },
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**See also**
|
|
86
|
+
|
|
87
|
+
- [Effects](../../concepts/effects.md)
|
|
88
|
+
- [Run a command or call a URL with an Effect](../../guides/run-a-command-or-call-a-url.md)
|
|
89
|
+
- [ADR-0068: An Effector holds an Effect's secrets and signs its wire](../decisions/0068-an-effector-holds-an-effects-secrets-and-signs-its-wire.md)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: HttpRequestParts
|
|
3
|
+
description: "What the `request` of an `http` definition returns: the part of the request that changes for each run."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `HttpRequestParts`
|
|
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 HttpRequestParts = {
|
|
12
|
+
path?: readonly string[];
|
|
13
|
+
json?: unknown;
|
|
14
|
+
text?: string;
|
|
15
|
+
};
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
What the `request` of an `http` definition returns: the part of the request that changes for
|
|
19
|
+
each run. The definition fixes the rest.
|
|
20
|
+
|
|
21
|
+
**Fields**
|
|
22
|
+
|
|
23
|
+
- `path` (optional): `readonly string[]`
|
|
24
|
+
|
|
25
|
+
Path segments that jr2 adds to the end of the url. jr2 encodes each segment. A segment that
|
|
26
|
+
is `.`, `..` or empty gives the output `refused`, and nothing is sent.
|
|
27
|
+
- `json` (optional): `unknown`
|
|
28
|
+
|
|
29
|
+
A JSON body. Do not give `text` too. When it starts, the Effect refuses both: ``http:
|
|
30
|
+
`request` returned both json and text``.
|
|
31
|
+
- `text` (optional): `string`
|
|
32
|
+
|
|
33
|
+
A text body.
|