@jr2/orchestrator 0.4.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +478 -0
- package/docs/concepts/architecture.md +243 -0
- package/docs/concepts/charts.md +146 -0
- package/docs/concepts/composition.md +357 -0
- package/docs/concepts/converge.md +257 -0
- package/docs/concepts/durable-runs.md +189 -0
- package/docs/concepts/effects.md +658 -0
- package/docs/concepts/gates.md +208 -0
- package/docs/concepts/machines-and-workflows.md +298 -0
- package/docs/concepts/pools-and-sources.md +230 -0
- package/docs/concepts/secrets-and-trust.md +306 -0
- package/docs/concepts/the-menu.md +381 -0
- package/docs/concepts/workspaces.md +756 -0
- package/docs/get-started/a-model-decides.md +563 -0
- package/docs/get-started/an-agent-in-a-sandbox.md +383 -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 +993 -0
- package/docs/get-started/install.md +130 -0
- package/docs/guides/add-tools-to-the-sandbox.md +308 -0
- package/docs/guides/answer-a-gate.md +304 -0
- package/docs/guides/bind-open-parts.md +224 -0
- package/docs/guides/cancel-a-run.md +146 -0
- package/docs/guides/clean-up.md +206 -0
- package/docs/guides/cut-a-worktree.md +560 -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 +230 -0
- package/docs/guides/look-inside-a-sandbox.md +177 -0
- package/docs/guides/mirror-the-kit-images.md +176 -0
- package/docs/guides/move-from-kind-to-a-shared-cluster.md +318 -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 +532 -0
- package/docs/guides/run-a-chart-by-name.md +270 -0
- package/docs/guides/run-a-command-or-call-a-url.md +587 -0
- package/docs/guides/run-one-worker-per-item.md +322 -0
- package/docs/guides/set-an-agents-access-and-dials.md +420 -0
- package/docs/guides/size-a-workspace.md +217 -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 +214 -0
- package/docs/guides/use-a-local-model.md +313 -0
- package/docs/guides/watch-a-run.md +349 -0
- package/docs/guides/write-a-workflow.md +318 -0
- package/docs/index.md +44 -0
- package/docs/llms.txt +237 -0
- package/docs/reference/authoring-surface/agent.md +151 -0
- package/docs/reference/authoring-surface/answer.md +156 -0
- package/docs/reference/authoring-surface/arg.md +82 -0
- package/docs/reference/authoring-surface/basic.md +62 -0
- package/docs/reference/authoring-surface/bearer.md +53 -0
- package/docs/reference/authoring-surface/branchname.md +15 -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 +206 -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 +96 -0
- package/docs/reference/authoring-surface/file.md +142 -0
- package/docs/reference/authoring-surface/frompick.md +277 -0
- package/docs/reference/authoring-surface/http.md +259 -0
- package/docs/reference/authoring-surface/isfailure.md +58 -0
- package/docs/reference/authoring-surface/isready.md +14 -0
- package/docs/reference/authoring-surface/jr2setup.md +237 -0
- package/docs/reference/authoring-surface/open.md +105 -0
- package/docs/reference/authoring-surface/openbody.md +86 -0
- package/docs/reference/authoring-surface/paramsof.md +143 -0
- package/docs/reference/authoring-surface/pool.md +186 -0
- package/docs/reference/authoring-surface/push.md +130 -0
- package/docs/reference/authoring-surface/readyof.md +21 -0
- package/docs/reference/authoring-surface/secret.md +139 -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 +15 -0
- package/docs/reference/authoring-surface/type-answeraction.md +12 -0
- package/docs/reference/authoring-surface/type-anyframepath.md +14 -0
- package/docs/reference/authoring-surface/type-anyworktreepath.md +15 -0
- package/docs/reference/authoring-surface/type-arg.md +19 -0
- package/docs/reference/authoring-surface/type-argnames.md +12 -0
- package/docs/reference/authoring-surface/type-bindactors.md +14 -0
- package/docs/reference/authoring-surface/type-binding.md +61 -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 +20 -0
- package/docs/reference/authoring-surface/type-commandoptions.md +56 -0
- package/docs/reference/authoring-surface/type-commandoutput.md +122 -0
- package/docs/reference/authoring-surface/type-customize.md +111 -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 +72 -0
- package/docs/reference/authoring-surface/type-doorlessinput.md +19 -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 +37 -0
- package/docs/reference/authoring-surface/type-framepath.md +14 -0
- package/docs/reference/authoring-surface/type-frominput.md +14 -0
- package/docs/reference/authoring-surface/type-hostinjectedinput.md +56 -0
- package/docs/reference/authoring-surface/type-httpdefinition.md +104 -0
- package/docs/reference/authoring-surface/type-httpfileinput.md +20 -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 +95 -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-lateroutcome.md +21 -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-namestart.md +77 -0
- package/docs/reference/authoring-surface/type-noslotworkspaceoptions.md +27 -0
- package/docs/reference/authoring-surface/type-notworktreekeys.md +12 -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 +22 -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 +26 -0
- package/docs/reference/authoring-surface/type-permissiveworkspaceoptions.md +27 -0
- package/docs/reference/authoring-surface/type-poolmachine.md +28 -0
- package/docs/reference/authoring-surface/type-poolnextinput.md +22 -0
- package/docs/reference/authoring-surface/type-poolspec.md +60 -0
- package/docs/reference/authoring-surface/type-pushinput.md +34 -0
- package/docs/reference/authoring-surface/type-pushoptions.md +79 -0
- package/docs/reference/authoring-surface/type-pushoutput.md +149 -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 +84 -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 +24 -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 +115 -0
- package/docs/reference/authoring-surface/type-workspacehandles.md +22 -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 +27 -0
- package/docs/reference/authoring-surface/type-worktreefound.md +16 -0
- package/docs/reference/authoring-surface/type-worktreeinput.md +56 -0
- package/docs/reference/authoring-surface/type-worktreekey.md +14 -0
- package/docs/reference/authoring-surface/type-worktreeoptions.md +29 -0
- package/docs/reference/authoring-surface/type-worktreeoutput.md +45 -0
- package/docs/reference/authoring-surface/type-worktreepath.md +16 -0
- package/docs/reference/authoring-surface/type-worktreeready.md +37 -0
- package/docs/reference/authoring-surface/type-worktreerefused.md +21 -0
- package/docs/reference/authoring-surface/workspace.md +287 -0
- package/docs/reference/authoring-surface/worktree.md +71 -0
- package/docs/reference/authoring-surface.md +217 -0
- package/docs/reference/cli.md +433 -0
- package/docs/reference/config.md +765 -0
- package/docs/reference/decisions/0001-operator-owned-generic-sandbox.md +114 -0
- package/docs/reference/decisions/0002-duplex-streaming-actor.md +117 -0
- package/docs/reference/decisions/0004-worktree-provisioning-model.md +130 -0
- package/docs/reference/decisions/0005-sandbox-pod-composition.md +240 -0
- package/docs/reference/decisions/0006-agent-control-surface.md +50 -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 +175 -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 +271 -0
- package/docs/reference/decisions/0016-agent-turn-mechanics-are-internal.md +126 -0
- package/docs/reference/decisions/0017-pool-over-a-source-port.md +71 -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 +287 -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 +101 -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 +175 -0
- package/docs/reference/decisions/0024-an-agents-turn-ends-with-the-state-that-asked-for-it.md +436 -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 +245 -0
- package/docs/reference/decisions/0028-what-an-agent-may-do-to-the-workspace-is-part-of-its-definition.md +90 -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 +193 -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 +126 -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 +238 -0
- package/docs/reference/decisions/0052-a-sandbox-lands-where-an-ordinary-pod-lands-and-the-cache-follows-it.md +86 -0
- package/docs/reference/decisions/0053-a-fetch-inside-the-pod-asks-the-node-cache-and-the-cache-asks-the-remote.md +123 -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 +108 -0
- package/docs/reference/decisions/0059-a-harness-holds-stand-ins-and-the-custodian-holds-the-keys.md +427 -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 +239 -0
- package/docs/reference/decisions/0063-the-orchestrator-watches-the-cluster.md +82 -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 +552 -0
- package/docs/reference/decisions/0067-an-effect-is-an-actor-slot-and-runs-at-most-once-unless-marked-idempotent.md +458 -0
- package/docs/reference/decisions/0068-an-effector-holds-an-effects-secrets-and-signs-its-wire.md +475 -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 +334 -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/0075-a-machine-cuts-a-worktree-and-the-workspace-only-clones.md +295 -0
- package/docs/reference/decisions/0076-an-agents-control-credential-lives-only-where-no-workspace-code-runs.md +320 -0
- package/docs/reference/decisions/0077-jr2-requires-landlock-on-every-sandbox-node.md +79 -0
- package/docs/reference/decisions.md +86 -0
- package/docs/reference/glossary.md +687 -0
- package/docs/reference/http-api.md +1386 -0
- package/docs/reference/machines.md +189 -0
- package/docs/reference/mechanism-events.md +72 -0
- package/docs/why.md +207 -0
- package/package.json +5 -3
- package/src/actor.ts +694 -106
- package/src/agent.ts +114 -38
- package/src/ambient.ts +3 -4
- package/src/assembly-checks.ts +189 -7
- package/src/cause.ts +234 -0
- package/src/chart.ts +345 -46
- package/src/charts.ts +43 -8
- package/src/config.ts +440 -178
- package/src/custodian.lua +17 -5
- package/src/custodian.ts +325 -99
- package/src/customize.ts +199 -49
- 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 +50 -3
- package/src/effect.ts +641 -128
- package/src/effector-wire.ts +165 -13
- package/src/fail.ts +222 -0
- package/src/harness-client.ts +587 -50
- package/src/harness-env.ts +33 -0
- package/src/held-secrets.ts +125 -16
- package/src/holds.ts +3 -0
- package/src/http-effect.ts +556 -58
- package/src/http.ts +480 -30
- package/src/index.ts +74 -82
- package/src/instance.ts +68 -8
- package/src/internal.ts +85 -0
- package/src/kube-client.ts +6 -3
- package/src/machine-doc.ts +24 -7
- package/src/mechanism-routes.ts +168 -0
- package/src/model-keys.generated.ts +53 -0
- package/src/model-keys.ts +42 -58
- package/src/names.ts +19 -6
- package/src/notices.ts +483 -41
- package/src/open-body.ts +242 -40
- package/src/open-effect.ts +81 -8
- package/src/open.ts +90 -6
- package/src/parts.ts +213 -30
- package/src/party.ts +101 -2
- package/src/pick.ts +497 -11
- package/src/pool.ts +282 -50
- package/src/registration.ts +133 -12
- package/src/repo-identity.ts +7 -3
- package/src/repos.ts +22 -3
- package/src/run-host.ts +665 -45
- package/src/run-output.ts +38 -0
- package/src/sandbox-effect.ts +457 -71
- package/src/sandbox-kube.ts +66 -17
- package/src/secret-placement.ts +59 -17
- package/src/server.ts +3 -0
- package/src/setup.ts +325 -62
- 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/tokens.ts +107 -32
- package/src/vocabulary.ts +88 -14
- package/src/wire.ts +100 -26
- package/src/workspace.ts +771 -238
- package/src/worktree.ts +249 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SandboxOptions
|
|
3
|
+
description: The options of a `workspace()` that say what its Sandbox is made of and which Repos it clones.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `SandboxOptions`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/workspace.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 SandboxOptions<TSlots extends string, TInput = unknown> = {
|
|
12
|
+
image?: string;
|
|
13
|
+
workGroup?: number;
|
|
14
|
+
user?: string | UserContainer;
|
|
15
|
+
resources?: Size;
|
|
16
|
+
repos: Record<TSlots, RepoSlot<TInput>> | typeof open;
|
|
17
|
+
secrets?: readonly string[];
|
|
18
|
+
effector?: { image: string };
|
|
19
|
+
};
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The options of a `workspace()` that say what its Sandbox is made of and which Repos it
|
|
23
|
+
clones. They are the same for each run.
|
|
24
|
+
|
|
25
|
+
**Fields**
|
|
26
|
+
|
|
27
|
+
- `image` (optional): `string`
|
|
28
|
+
|
|
29
|
+
The Sandbox Image: the image of the container where the Agent's Working tools and
|
|
30
|
+
`command` Effects run. A `file:` URL to a docker context that your module ships
|
|
31
|
+
(`import.meta.resolve("./image")`), which `jr2 up` builds, or a registry ref. Its floor is
|
|
32
|
+
glibc and git; jr2 adds its own runtime at `/opt/jr2`. Default: the Instance's
|
|
33
|
+
`images/default`, then jr2's Harness image.
|
|
34
|
+
- `workGroup` (optional): `number`
|
|
35
|
+
|
|
36
|
+
The group id that owns the files in `/work`. Default: 2000. A non-negative integer.
|
|
37
|
+
- `user` (optional): `string | UserContainer`
|
|
38
|
+
|
|
39
|
+
The User Container: a third container in the Sandbox, for a service that must run beside the
|
|
40
|
+
Agent, such as an sshd. Its image, in the same two forms as `image`, or `{ image, resources }`
|
|
41
|
+
to give it a part of the Size. It runs its own entrypoint, with `/work` mounted. jr2 adds
|
|
42
|
+
nothing to it. Default: none. Without `resources`, it has no limit of its own and shares the
|
|
43
|
+
Size of the Sandbox.
|
|
44
|
+
- `resources` (optional): [`Size`](type-size.md)
|
|
45
|
+
|
|
46
|
+
The Size: the memory and cpu limit of the whole Sandbox, `{ limits: { memory, cpu } }`, such as
|
|
47
|
+
`{ limits: { memory: "4Gi", cpu: "2" } }`. jr2 reserves all of it on the node: each request
|
|
48
|
+
equals its limit. jr2 also enforces the cpu limit. Only `limits`,
|
|
49
|
+
and in it only `memory` and `cpu`, are accepted. Default: the Instance's `sandbox.resources`,
|
|
50
|
+
then 2Gi and 1 cpu. Under a Size that you give, a field you leave out takes the kit's value,
|
|
51
|
+
not the Instance's. The Instance that registers the Machine can change it with
|
|
52
|
+
`customize(machine, { resources })`.
|
|
53
|
+
- `repos`: `Record<TSlots, RepoSlot<TInput>> | typeof open`
|
|
54
|
+
|
|
55
|
+
The Repo Slots: the repositories that the Sandbox clones, each under a name of your Machine's
|
|
56
|
+
choice. The name is the key of `workspace.repos` in the body and the directory under `/work`.
|
|
57
|
+
At least one slot. Leave `repos` out for a Workspace with no Repo Slot (see
|
|
58
|
+
[`NoSlotWorkspaceOptions`](type-noslotworkspaceoptions.md)). Each value is one of:
|
|
59
|
+
- a url, or `{ url, ref }`, where `ref` is the branch, the tag or the commit that the clone
|
|
60
|
+
stays on, and that a new branch starts from (default: the Repo's default branch);
|
|
61
|
+
- `open`, for the Instance that registers the Machine to bind with `customize()`;
|
|
62
|
+
- a function of the run input, `({ input }) => url` or `{ url, ref }`, when each run chooses.
|
|
63
|
+
|
|
64
|
+
Or `repos: open` for the whole map: the Machine names no slot, and the Instance that registers
|
|
65
|
+
it names each one with `customize()`. The body's input is then `Workspaced<RunInput, string>`.
|
|
66
|
+
- `secrets` (optional): `readonly string[]`
|
|
67
|
+
|
|
68
|
+
The Held secrets that this Sandbox can use: names from the `secrets` list in `jr2.config.ts`.
|
|
69
|
+
The Sandbox's Custodian holds each value and puts it into requests to the hosts of that Held
|
|
70
|
+
secret. Listing a name also gives its Stand-in to the Agent's programs — each `bash` call, test,
|
|
71
|
+
build and `command` — in their env under that name, so code in `/work` can spend it ([ADR-0076](../decisions/0076-an-agents-control-credential-lives-only-where-no-workspace-code-runs.md)).
|
|
72
|
+
You need not list the model key of an Agent that runs here: its provider claims it, and the
|
|
73
|
+
Harness gives it to the model calls alone. List the model key only when code in `/work` must
|
|
74
|
+
call the model itself: such a call is outside the Turn's usage record. Each name once.
|
|
75
|
+
- `effector` (optional): `object`
|
|
76
|
+
|
|
77
|
+
The image of the Sandbox Effector. This container runs three kinds of Effect for this
|
|
78
|
+
Workspace: a `push`, an `http` Effect with a Worktree file as its body, and a `command` with an
|
|
79
|
+
Effect secret in its `env`. It gets the Effect secrets that those Effects name. Give an image
|
|
80
|
+
when those Effects need tools or credentials that you keep out of the Sandbox Image, such as
|
|
81
|
+
`terraform`. A `file:` URL or a registry ref, as for `image`. Default: the Sandbox Image,
|
|
82
|
+
which already holds `git`.
|
|
83
|
+
|
|
84
|
+
- `image`: `string`
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Secret
|
|
3
|
+
description: "What `secret(\"name\")` gives: an Effect secret, by its name in the `secrets` list of `jr2.config.ts`."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `Secret`
|
|
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 Secret = { readonly secret: string; readonly path: { readonly secret: string; readonly path: true } };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
What `secret("name")` gives: an Effect secret, by its name in the `secrets` list of
|
|
15
|
+
`jr2.config.ts`. Put it in an Effect's `auth`, a header, a `text` or a command's `env`. Its
|
|
16
|
+
`.path` is the path of a file that holds the value. The value stays in the Effector, so the
|
|
17
|
+
Machine and the Agent never see it.
|
|
18
|
+
|
|
19
|
+
**Fields**
|
|
20
|
+
|
|
21
|
+
- `secret`: `string`
|
|
22
|
+
- `path`: `object`
|
|
23
|
+
|
|
24
|
+
- `secret`: `string`
|
|
25
|
+
- `path`: `true`
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Sender
|
|
3
|
+
description: "Who delivered an event: an Agent by its slot, or a Gate by its invoke id (ADR-0015)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `Sender`
|
|
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 Sender = { readonly party: "agent" | "gate"; readonly id: string };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Who delivered an event: an Agent by its slot, or a Gate by its invoke id ([ADR-0015](../decisions/0015-authoring-surface-absorbs-the-mechanism.md)).
|
|
15
|
+
|
|
16
|
+
**Fields**
|
|
17
|
+
|
|
18
|
+
- `party`: `"agent" | "gate"`
|
|
19
|
+
- `id`: `string`
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SentByGuards
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `SentByGuards`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/setup.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 SentByGuards = { [SENT_BY]: { id: string } };
|
|
12
|
+
```
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Size
|
|
3
|
+
description: "The Size of a Workspace: the most memory and cpu that its whole Sandbox can use."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `Size`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/size.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Composition.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type Size = {
|
|
12
|
+
limits: {
|
|
13
|
+
memory?: Quantity;
|
|
14
|
+
cpu?: Quantity;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The Size of a Workspace: the most memory and cpu that its whole Sandbox can use. jr2 reserves
|
|
20
|
+
all of it on the node. Thus a Sandbox never gets less than its Size and never uses more.
|
|
21
|
+
|
|
22
|
+
Write it as `{ limits: { memory, cpu } }`. You can write it in three places: the `resources`
|
|
23
|
+
option of `workspace()`, `customize(machine, { resources })`, and `sandbox.resources` in
|
|
24
|
+
`jr2.config.ts`. The Size is a fact of the Machine. The Instance's `sandbox.resources` applies
|
|
25
|
+
only to a Workspace that states no Size. A field that neither states comes from the kit default:
|
|
26
|
+
memory `2Gi`, cpu `1`.
|
|
27
|
+
|
|
28
|
+
The same shape is the User Container's part of the Size, in `user: { image, resources }`. There,
|
|
29
|
+
a field you leave out gives the User Container no limit of its own: it shares the pod's budget.
|
|
30
|
+
|
|
31
|
+
It refuses any key but `limits.memory` and `limits.cpu`, where you write it. The message names
|
|
32
|
+
the field: `<where>` is where you wrote the Size, for example `workspace(): resources`.
|
|
33
|
+
|
|
34
|
+
- `<where>.requests is not accepted — jr2 reserves the whole Size, so every request equals its
|
|
35
|
+
limit — a Size is { limits: { memory?, cpu? } } and nothing else — Agent Substrate's template
|
|
36
|
+
size (ADR-0060)`
|
|
37
|
+
- `<where>.<key> is not accepted — a Size is { limits: { memory?, cpu? } } and nothing else —
|
|
38
|
+
Agent Substrate's template size (ADR-0060)`
|
|
39
|
+
- `<where>.limits.<key> is not accepted — a Size is { limits: { memory?, cpu? } } and nothing
|
|
40
|
+
else — Agent Substrate's template size (ADR-0060)`
|
|
41
|
+
- `<where>.limits.memory: <value> is not a positive quantity (e.g. "2Gi", "512Mi")`, and for
|
|
42
|
+
cpu, `<where>.limits.cpu: <value> is not a positive quantity (e.g. "2", "1500m")`
|
|
43
|
+
|
|
44
|
+
`jr2 up` also refuses a Size that leaves the Harness container less than its floor. The message
|
|
45
|
+
starts with `the Size leaves the Harness container <memory> memory, below its 256Mi floor:` or
|
|
46
|
+
with `the Size leaves the Harness container no cpu:`. The text that follows names each number
|
|
47
|
+
and where it came from.
|
|
48
|
+
|
|
49
|
+
**Fields**
|
|
50
|
+
|
|
51
|
+
- `limits`: `object`
|
|
52
|
+
|
|
53
|
+
The two limits. Write `limits: {}` to state no field: each field then comes from the next
|
|
54
|
+
source.
|
|
55
|
+
|
|
56
|
+
- `memory` (optional): [`Quantity`](type-quantity.md)
|
|
57
|
+
|
|
58
|
+
The memory limit, as a Kubernetes quantity: `"4Gi"`, `"512Mi"`, or a number of bytes.
|
|
59
|
+
It must be more than zero. When you leave it out, it comes from the next source, as above.
|
|
60
|
+
- `cpu` (optional): [`Quantity`](type-quantity.md)
|
|
61
|
+
|
|
62
|
+
The cpu limit, as a Kubernetes quantity: `"2"`, `"1500m"`, or a number of cpus. It must be
|
|
63
|
+
more than zero. jr2 enforces it. When you leave it out, it comes from the next source, as
|
|
64
|
+
above.
|
|
65
|
+
|
|
66
|
+
**Example**
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import { customize, type Size } from "@jr2/orchestrator";
|
|
70
|
+
import { task } from "@jr2/machines";
|
|
71
|
+
|
|
72
|
+
const size: Size = { limits: { memory: "4Gi", cpu: "2" } };
|
|
73
|
+
|
|
74
|
+
export const machine = customize(task, {
|
|
75
|
+
repos: { app: { url: "https://github.com/you/app.git" } },
|
|
76
|
+
agents: { coder: { model: "anthropic/claude-haiku-5-5" } },
|
|
77
|
+
resources: size,
|
|
78
|
+
});
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**See also**
|
|
82
|
+
|
|
83
|
+
- [Size a Workspace](../../guides/size-a-workspace.md)
|
|
84
|
+
- [Workspaces](../../concepts/workspaces.md)
|
|
85
|
+
- [ADR-0060: A Workspace states its Size, and jr2 reserves all of it](../decisions/0060-a-workspace-states-its-size-and-jr2-reserves-all-of-it.md)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SlotHandles
|
|
3
|
+
description: The handles of a Workspace that declares Repo Slots.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `SlotHandles`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/workspace.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 SlotHandles<TSlots extends string> = {
|
|
12
|
+
repos: { [K in TSlots]: `/work/${K}` };
|
|
13
|
+
};
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The handles of a Workspace that declares Repo Slots. @internal
|
|
17
|
+
|
|
18
|
+
**Fields**
|
|
19
|
+
|
|
20
|
+
- `repos`: ``{ [K in TSlots]: `/work/${K}`; }``
|
|
21
|
+
|
|
22
|
+
The folder of each Repo Slot, `/work/<slot>`, in the order that `repos` declares the slots.
|
|
23
|
+
`${handle}/default` is the clone, on the Binding's base. Any other Worktree is one the Machine
|
|
24
|
+
cut with `worktree()`.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SourceNextResult
|
|
3
|
+
description: "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."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `SourceNextResult`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/pool.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type SourceNextResult<T> = T | null | { item: T | null; open: number };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
What the `next` of a Source resolves to: an item, to claim it; `null`, when no item is ready
|
|
15
|
+
now; or `{ item, open }`, where `open` is the number of items that exist but are not ready.
|
|
16
|
+
When no worker runs and `next` gives no item, the Pool ends: `drained` when `open` is 0 or
|
|
17
|
+
absent, `deadlocked` when `open` is more than 0.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SourceSpec
|
|
3
|
+
description: "Where a Pool gets its work items: the Source."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `SourceSpec`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/pool.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type SourceSpec<T, TInput = unknown> = {
|
|
12
|
+
next:
|
|
13
|
+
| PromiseActorLogic<SourceNextResult<T>, PoolNextInput<TInput>>
|
|
14
|
+
| PromiseActorLogic<{ item: T | null; open: number }, PoolNextInput<TInput>>
|
|
15
|
+
| PromiseActorLogic<T | null, PoolNextInput<TInput>>
|
|
16
|
+
| PromiseActorLogic<null, PoolNextInput<TInput>>;
|
|
17
|
+
wake?: EventDef;
|
|
18
|
+
pollEvery?: number;
|
|
19
|
+
};
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Where a Pool gets its work items: the Source. Make one with [`source`](source.md).
|
|
23
|
+
|
|
24
|
+
**Fields**
|
|
25
|
+
|
|
26
|
+
- `next`: `PromiseActorLogic<SourceNextResult<T>, PoolNextInput<TInput>> | PromiseActorLogic<{ item: T | null; open: number; }, PoolNextInput<TInput>> | PromiseActorLogic<T | null, PoolNextInput<TInput>> | PromiseActorLogic<null, PoolNextInput<TInput>>`
|
|
27
|
+
|
|
28
|
+
Claim the next ready item. Write it as an xstate promise actor,
|
|
29
|
+
`fromPromise(async ({ input }) => …)`. Its input is [`PoolNextInput`](type-poolnextinput.md): `active`, the ids of
|
|
30
|
+
the items that workers have now, `settled`, the ids of the items that finished or failed, and
|
|
31
|
+
`input`, the Pool's input. It must not give again an item in `active` or `settled`. It resolves
|
|
32
|
+
to a [`SourceNextResult`](type-sourcenextresult.md). The Pool calls it when the run starts, after each claim, and when a worker settles. While workers run and no item is ready, it
|
|
33
|
+
also calls it on `wake` and every `pollEvery`.
|
|
34
|
+
- `wake` (optional): [`EventDef`](type-eventdef.md)
|
|
35
|
+
|
|
36
|
+
An external event, made with `defineEvent`, that tells the Pool that new work is ready, for
|
|
37
|
+
example from a webhook or `jr2 send`. While workers run and no item is ready, it makes the Pool
|
|
38
|
+
call `next` at once. The Pool serves it as a Gate named `source` for the whole run
|
|
39
|
+
(`<path>.source` when the Pool is composed in another Machine). Default: none.
|
|
40
|
+
- `pollEvery` (optional): `number`
|
|
41
|
+
|
|
42
|
+
While workers run and no item is ready, call `next` again after this many milliseconds. Use
|
|
43
|
+
it for a Source whose items change while the run waits. Default: none, so the Pool calls
|
|
44
|
+
`next` again only when a worker settles or `wake` comes.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SyncState
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `SyncState`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/sandbox-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 SyncState = SyncAnswer["sync"];
|
|
12
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Text
|
|
3
|
+
description: "What the `text` template gives: a string of literal text and Effect secrets, in order."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `Text`
|
|
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 Text = { readonly text: readonly TextPart[] };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
What the `text` template gives: a string of literal text and Effect secrets, in order. The
|
|
15
|
+
Effector builds the string, so the Machine never sees the value of a secret.
|
|
16
|
+
|
|
17
|
+
**Fields**
|
|
18
|
+
|
|
19
|
+
- `text`: `readonly TextPart[]`
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: TextPart
|
|
3
|
+
description: "One part of a `Text`: `{ text }`, literal text, or `{ secret }`, the name of an Effect secret."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `TextPart`
|
|
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 TextPart = z.infer<typeof TextPartShape>;
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
One part of a [`Text`](type-text.md): `{ text }`, literal text, or `{ secret }`, the name of an Effect
|
|
15
|
+
secret. The `text` template makes the parts.
|
|
16
|
+
|
|
17
|
+
**Forms**: it is one of these objects.
|
|
18
|
+
|
|
19
|
+
- Form 1: `text`
|
|
20
|
+
|
|
21
|
+
- `text`: `string`
|
|
22
|
+
- Form 2: `secret`
|
|
23
|
+
|
|
24
|
+
- `secret`: `string`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: ThinkingLevel
|
|
3
|
+
description: "How hard the model thinks before it answers: `\"off\"`, `\"minimal\"`, `\"low\"`, `\"medium\"`, `\"high\"` or `\"xhigh\"`."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `ThinkingLevel`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/agent.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Agents.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
How hard the model thinks before it answers: `"off"`, `"minimal"`, `"low"`, `"medium"`,
|
|
15
|
+
`"high"` or `"xhigh"`. Set it on an Agent's definition (`thinkingLevel`), or for one Turn in the
|
|
16
|
+
invoke's `input`.
|
|
17
|
+
|
|
18
|
+
A model can lack a level. Claude Sonnet 5.5 has no `"off"`, and at `"off"` the Harness's request
|
|
19
|
+
then sends effort `"high"`. The Harness does not refuse such a level: it runs the Turn, and the
|
|
20
|
+
printed conversation names the level that the model ran at.
|
|
21
|
+
|
|
22
|
+
**Example**
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
import { agent, type ThinkingLevel } from "@jr2/orchestrator";
|
|
26
|
+
|
|
27
|
+
const effort: ThinkingLevel = "high";
|
|
28
|
+
|
|
29
|
+
export const reviewer = agent({
|
|
30
|
+
model: "anthropic/claude-haiku-5-5",
|
|
31
|
+
instructions: "You review diffs for correctness.",
|
|
32
|
+
thinkingLevel: effort,
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**See also**
|
|
37
|
+
|
|
38
|
+
- [Set an Agent's access and Dials](../../guides/set-an-agents-access-and-dials.md)
|
|
39
|
+
- [ADR-0018: The instance authors Agent definitions; jr2 assembles the Harness](../decisions/0018-instance-agents-are-definitions-jr2-assembles-the-harness.md)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: ToParameterizedObject
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `ToParameterizedObject`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/setup.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 ToParameterizedObject<T extends Record<string, ParameterizedObject["params"] | undefined>> = {
|
|
12
|
+
[K in keyof T & string]: { type: K; params: T[K] };
|
|
13
|
+
}[keyof T & string];
|
|
14
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: ToProvidedActor
|
|
3
|
+
description: A type that the Authoring surface names.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `ToProvidedActor`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/setup.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 ToProvidedActor<TActors extends Record<string, UnknownActorLogic>> = {
|
|
12
|
+
[K in keyof TActors & string]: { src: K; logic: TActors[K]; id: string | undefined };
|
|
13
|
+
}[keyof TActors & string];
|
|
14
|
+
```
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Unknown
|
|
3
|
+
description: "The output `{ outcome: \"unknown\", reason }`: the Effect may have acted, and jr2 cannot tell."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `Unknown`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/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 Unknown = { outcome: "unknown"; reason: string };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The output `{ outcome: "unknown", reason }`: the Effect may have acted, and jr2 cannot tell.
|
|
15
|
+
For example, the Harness lost the exec, or its state exited while it ran. Route on it. jr2 does
|
|
16
|
+
not run the Effect again.
|
|
17
|
+
|
|
18
|
+
**Fields**
|
|
19
|
+
|
|
20
|
+
- `outcome`: `"unknown"`
|
|
21
|
+
- `reason`: `string`
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: UserContainer
|
|
3
|
+
description: "The User Container in its object form: its image, and its part of the Workspace's Size."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `UserContainer`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/size.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Composition.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type UserContainer = {
|
|
12
|
+
image: string;
|
|
13
|
+
resources?: Size;
|
|
14
|
+
};
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The User Container in its object form: its image, and its part of the Workspace's Size. The User
|
|
18
|
+
Container is an optional container of your own in the Sandbox pod. It runs its own entrypoint
|
|
19
|
+
with `/work` mounted, and jr2 never builds into it, probes it or sends it commands. Use it for a
|
|
20
|
+
service that must run without an Agent, such as an sshd.
|
|
21
|
+
|
|
22
|
+
Write it in the `user` option of `workspace()` or of `customize()`. That option also takes the
|
|
23
|
+
image as a string; use this object form only to give the User Container a part of the Size. A
|
|
24
|
+
`customize()` that names `user` replaces the whole User Container, its part of the Size
|
|
25
|
+
included.
|
|
26
|
+
|
|
27
|
+
It refuses, where you write it. `<where>` is `workspace()` or `customize()`:
|
|
28
|
+
|
|
29
|
+
- an image that is not a non-empty string. The message starts with
|
|
30
|
+
`` <where>: `user` must be a non-empty string (an image), or { image, resources? } ``.
|
|
31
|
+
- `<where>: user.<key> is not accepted — the User Container is { image, resources? } (ADR-0005,
|
|
32
|
+
ADR-0060)`
|
|
33
|
+
|
|
34
|
+
`resources` is checked as a [`Size`](type-size.md), with the same refusals.
|
|
35
|
+
|
|
36
|
+
`jr2 up` refuses a part that leaves the Harness container less than its floor. The message starts
|
|
37
|
+
with `the Size leaves the Harness container <memory> memory, below its 256Mi floor:` or with
|
|
38
|
+
`the Size leaves the Harness container no cpu:`. The text that follows names each number and
|
|
39
|
+
where it came from.
|
|
40
|
+
|
|
41
|
+
**Fields**
|
|
42
|
+
|
|
43
|
+
- `image`: `string`
|
|
44
|
+
|
|
45
|
+
The image: a `file:` URL to a docker context that your module ships
|
|
46
|
+
(`import.meta.resolve("./sshd")`), which `jr2 up` builds, or a registry ref. It must not be
|
|
47
|
+
empty.
|
|
48
|
+
- `resources` (optional): [`Size`](type-size.md)
|
|
49
|
+
|
|
50
|
+
This container's part of the Workspace's Size, as a Size. jr2 takes it from the Harness
|
|
51
|
+
container's part. A field you leave out gives this container no limit of its own for it: it
|
|
52
|
+
shares the pod's budget. Default: no part.
|
|
53
|
+
|
|
54
|
+
**Example**
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
import { customize, type UserContainer } from "@jr2/orchestrator";
|
|
58
|
+
import { task } from "@jr2/machines";
|
|
59
|
+
|
|
60
|
+
const sshd: UserContainer = {
|
|
61
|
+
image: "registry.example.com/sshd:1.0",
|
|
62
|
+
resources: { limits: { memory: "256Mi", cpu: "250m" } },
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export const machine = customize(task, {
|
|
66
|
+
repos: { app: { url: "https://github.com/you/app.git" } },
|
|
67
|
+
agents: { coder: { model: "anthropic/claude-haiku-5-5" } },
|
|
68
|
+
user: sshd,
|
|
69
|
+
});
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**See also**
|
|
73
|
+
|
|
74
|
+
- [Workspaces](../../concepts/workspaces.md)
|
|
75
|
+
- [Size a Workspace](../../guides/size-a-workspace.md)
|
|
76
|
+
- [ADR-0005: The Sandbox pod's containers: Harness, Custodian, an optional User Container, and an optional Sandbox Effector](../decisions/0005-sandbox-pod-composition.md)
|
|
77
|
+
- [ADR-0060: A Workspace states its Size, and jr2 reserves all of it](../decisions/0060-a-workspace-states-its-size-and-jr2-reserves-all-of-it.md)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WithoutEmptyIndex
|
|
3
|
+
description: The fields of the run input `T`.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `WithoutEmptyIndex`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/workspace.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 WithoutEmptyIndex<T> = string extends keyof T
|
|
12
|
+
? [T[string & keyof T]] extends [never]
|
|
13
|
+
? { [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K] }
|
|
14
|
+
: T
|
|
15
|
+
: T;
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The fields of the run input `T`. A string index signature whose value is `never` is not one of
|
|
19
|
+
them: `z.infer` gives `Record<string, never>` for `z.object({})`, and this type makes it `{}`. The
|
|
20
|
+
named fields of `T` stay. A different `T` does not change.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorkflowEvent
|
|
3
|
+
description: "The type of `event` in a Machine that `jr2Setup` makes: each workflow event in its `events`, and each Mechanism event."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `WorkflowEvent`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/setup.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 WorkflowEvent<TDefs extends readonly EventDef[]> =
|
|
12
|
+
| (EventFrom<TDefs[number]> & { readonly sender?: Sender })
|
|
13
|
+
| MechanismEvent;
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The type of `event` in a Machine that `jr2Setup` makes: each workflow event in its `events`,
|
|
17
|
+
and each Mechanism event. A workflow event that an Agent or a Gate sent has `event.sender`. An
|
|
18
|
+
event that the Machine sent to itself (`raise`, `sendTo`) has no `sender`.
|
|
19
|
+
|
|
20
|
+
**Forms**: it is one of these objects.
|
|
21
|
+
|
|
22
|
+
- Form 1: `type`, `sender`
|
|
23
|
+
|
|
24
|
+
- `type`: `N`
|
|
25
|
+
- `sender` (optional): [`Sender`](type-sender.md)
|
|
26
|
+
- Form 2: `type`, `instanceId`, `reason`
|
|
27
|
+
|
|
28
|
+
- `type`: `"agent.fault"`
|
|
29
|
+
- `instanceId`: `string`
|
|
30
|
+
|
|
31
|
+
The Instance ID of the Agent's conversation that failed: the same id on each Turn that
|
|
32
|
+
continues it.
|
|
33
|
+
- `reason`: `string`
|
|
34
|
+
|
|
35
|
+
Why the Turn failed, as text for a person or a log: the Harness's error, or that the Agent
|
|
36
|
+
ended its Turns without a pick after every nudge. Route on the event, not on this text.
|
|
37
|
+
- Form 3: `type`, `reason`, `message`
|
|
38
|
+
|
|
39
|
+
- `type`: `"workspace.lost"`
|
|
40
|
+
- `reason` (optional): `string`
|
|
41
|
+
|
|
42
|
+
Why the Sandbox is gone, for a person or a log: the pod's reason (`Evicted`, `NodeShutdown`),
|
|
43
|
+
the operator's (`PodDeleted`, `NodeLost`), or `Deleted`. A body can act without it.
|
|
44
|
+
- `message` (optional): `string`
|
|
45
|
+
|
|
46
|
+
More text about the loss, when jr2 has it.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorkspaceAccess
|
|
3
|
+
description: "What an Agent may do to the Workspace: `\"write\"`, `\"read\"` or `\"none\"`."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `WorkspaceAccess`
|
|
7
|
+
|
|
8
|
+
Type, in `@jr2/orchestrator/src/agent.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 WorkspaceAccess = "write" | "read" | "none";
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
What an Agent may do to the Workspace: `"write"`, `"read"` or `"none"`. With `"none"`, its Turn
|
|
15
|
+
runs on the Instance Harness, not in a Sandbox. The `workspace` field of [`AgentDefinition`](type-agentdefinition.md)
|
|
16
|
+
tells what each value gives.
|