@jr2/orchestrator 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/console/components/app.ts +55 -15
  2. package/console/components/bottom-drawer.ts +259 -0
  3. package/console/components/drawer.ts +14 -6
  4. package/console/components/fleet.ts +36 -13
  5. package/console/components/machine-pane.ts +61 -5
  6. package/console/components/nav.ts +54 -8
  7. package/console/conversation.ts +161 -0
  8. package/console/login.ts +123 -0
  9. package/console/main.ts +600 -60
  10. package/console/store.ts +611 -64
  11. package/console/style.css +231 -0
  12. package/docs/agents-block.md +2 -2
  13. package/docs/concepts/agents-and-turns.md +86 -9
  14. package/docs/concepts/architecture.md +41 -28
  15. package/docs/concepts/callers-and-hooks.md +205 -0
  16. package/docs/concepts/charts.md +7 -5
  17. package/docs/concepts/composition.md +10 -1
  18. package/docs/concepts/converge.md +4 -2
  19. package/docs/concepts/durable-runs.md +43 -16
  20. package/docs/concepts/effects.md +50 -22
  21. package/docs/concepts/gates.md +95 -25
  22. package/docs/concepts/machines-and-workflows.md +5 -4
  23. package/docs/concepts/pools-and-sources.md +187 -11
  24. package/docs/concepts/secrets-and-trust.md +73 -33
  25. package/docs/concepts/the-menu.md +11 -0
  26. package/docs/concepts/workspaces.md +6 -5
  27. package/docs/get-started/a-model-decides.md +14 -13
  28. package/docs/get-started/an-agent-in-a-sandbox.md +43 -34
  29. package/docs/get-started/connect-a-model.md +1 -1
  30. package/docs/get-started/create-an-instance.md +17 -14
  31. package/docs/guides/add-tools-to-the-sandbox.md +55 -11
  32. package/docs/guides/answer-a-gate-from-a-forge.md +304 -0
  33. package/docs/guides/answer-a-gate.md +74 -37
  34. package/docs/guides/bind-open-parts.md +24 -8
  35. package/docs/guides/call-an-mcp-tool-from-a-machine.md +572 -0
  36. package/docs/guides/cancel-a-run.md +26 -16
  37. package/docs/guides/fix-a-failed-converge.md +18 -6
  38. package/docs/guides/give-a-caller-a-scope.md +203 -0
  39. package/docs/guides/give-an-agent-mcp-tools.md +422 -0
  40. package/docs/guides/iterate-on-a-machine-on-kind.md +10 -9
  41. package/docs/guides/let-an-agent-write-a-chart.md +9 -6
  42. package/docs/guides/look-inside-a-sandbox.md +101 -31
  43. package/docs/guides/open-the-console.md +63 -14
  44. package/docs/guides/read-a-conversation.md +225 -0
  45. package/docs/guides/run-a-chart-by-name.md +17 -16
  46. package/docs/guides/run-one-worker-per-item.md +15 -9
  47. package/docs/guides/set-an-agents-access-and-dials.md +2 -0
  48. package/docs/guides/start-a-run-for-each-alert.md +290 -0
  49. package/docs/guides/start-a-run-from-a-run.md +18 -16
  50. package/docs/guides/start-a-run.md +24 -18
  51. package/docs/guides/steer-an-agent.md +332 -0
  52. package/docs/guides/use-a-hosted-provider.md +1 -1
  53. package/docs/guides/watch-a-run.md +127 -121
  54. package/docs/guides/write-a-hook-kind.md +238 -0
  55. package/docs/guides/write-a-tool-as-an-mcp-server.md +351 -0
  56. package/docs/guides/write-a-workflow.md +17 -7
  57. package/docs/llms.txt +81 -15
  58. package/docs/reference/authoring-surface/agent.md +1 -1
  59. package/docs/reference/authoring-surface/answer.md +1 -1
  60. package/docs/reference/authoring-surface/arg.md +1 -1
  61. package/docs/reference/authoring-surface/basic.md +1 -1
  62. package/docs/reference/authoring-surface/bearer.md +1 -1
  63. package/docs/reference/authoring-surface/branchname.md +1 -1
  64. package/docs/reference/authoring-surface/carry.md +23 -0
  65. package/docs/reference/authoring-surface/chartschema.md +1 -1
  66. package/docs/reference/authoring-surface/chartschemafor.md +1 -1
  67. package/docs/reference/authoring-surface/command.md +1 -1
  68. package/docs/reference/authoring-surface/customize.md +4 -1
  69. package/docs/reference/authoring-surface/defineconfig.md +1 -1
  70. package/docs/reference/authoring-surface/defineevent.md +1 -1
  71. package/docs/reference/authoring-surface/dispatch.md +5 -4
  72. package/docs/reference/authoring-surface/fail.md +1 -1
  73. package/docs/reference/authoring-surface/file.md +1 -1
  74. package/docs/reference/authoring-surface/frompick.md +1 -1
  75. package/docs/reference/authoring-surface/gate.md +118 -0
  76. package/docs/reference/authoring-surface/group-agents.md +15 -0
  77. package/docs/reference/authoring-surface/group-charts.md +16 -0
  78. package/docs/reference/authoring-surface/group-composition.md +25 -0
  79. package/docs/reference/authoring-surface/group-config.md +17 -0
  80. package/docs/reference/authoring-surface/group-effects.md +48 -0
  81. package/docs/reference/authoring-surface/group-failure.md +13 -0
  82. package/docs/reference/authoring-surface/group-gates.md +16 -0
  83. package/docs/reference/authoring-surface/group-machine-and-events.md +15 -0
  84. package/docs/reference/authoring-surface/group-steering.md +12 -0
  85. package/docs/reference/authoring-surface/group-types-these-signatures-name.md +137 -0
  86. package/docs/reference/authoring-surface/group-workspaces-and-repos.md +15 -0
  87. package/docs/reference/authoring-surface/http.md +1 -1
  88. package/docs/reference/authoring-surface/isfailure.md +1 -1
  89. package/docs/reference/authoring-surface/isready.md +1 -1
  90. package/docs/reference/authoring-surface/jr2setup.md +13 -3
  91. package/docs/reference/authoring-surface/mcp.md +107 -0
  92. package/docs/reference/authoring-surface/open.md +5 -3
  93. package/docs/reference/authoring-surface/openbody.md +1 -1
  94. package/docs/reference/authoring-surface/paramsof.md +1 -1
  95. package/docs/reference/authoring-surface/pool.md +77 -9
  96. package/docs/reference/authoring-surface/push.md +1 -1
  97. package/docs/reference/authoring-surface/readyof.md +1 -1
  98. package/docs/reference/authoring-surface/reread.md +19 -0
  99. package/docs/reference/authoring-surface/secret.md +1 -1
  100. package/docs/reference/authoring-surface/sentby.md +1 -1
  101. package/docs/reference/authoring-surface/skip.md +22 -0
  102. package/docs/reference/authoring-surface/source.md +56 -1
  103. package/docs/reference/authoring-surface/steer.md +93 -0
  104. package/docs/reference/authoring-surface/text.md +1 -1
  105. package/docs/reference/authoring-surface/type-agentdefinition.md +14 -1
  106. package/docs/reference/authoring-surface/type-agentmcpserver.md +54 -0
  107. package/docs/reference/authoring-surface/type-anyframepath.md +1 -1
  108. package/docs/reference/authoring-surface/type-anyworktreepath.md +1 -1
  109. package/docs/reference/authoring-surface/type-binding.md +1 -1
  110. package/docs/reference/authoring-surface/type-caller.md +40 -0
  111. package/docs/reference/authoring-surface/type-callerrecord.md +32 -0
  112. package/docs/reference/authoring-surface/type-carry.md +19 -0
  113. package/docs/reference/authoring-surface/type-chainlink.md +3 -3
  114. package/docs/reference/authoring-surface/type-commandoutput.md +1 -1
  115. package/docs/reference/authoring-surface/type-customize.md +16 -1
  116. package/docs/reference/authoring-surface/type-delivered.md +17 -0
  117. package/docs/reference/authoring-surface/type-deliveredevent.md +18 -0
  118. package/docs/reference/authoring-surface/type-dispatchdefinition.md +4 -3
  119. package/docs/reference/authoring-surface/type-dispatchoutput.md +1 -1
  120. package/docs/reference/authoring-surface/type-effectbinding.md +12 -2
  121. package/docs/reference/authoring-surface/type-framepath.md +1 -1
  122. package/docs/reference/authoring-surface/type-gatebinding.md +15 -0
  123. package/docs/reference/authoring-surface/type-gatehooks.md +12 -0
  124. package/docs/reference/authoring-surface/type-gatelook.md +37 -0
  125. package/docs/reference/authoring-surface/type-gateoutcome.md +32 -0
  126. package/docs/reference/authoring-surface/type-gatereply.md +19 -0
  127. package/docs/reference/authoring-surface/type-gateslot.md +21 -0
  128. package/docs/reference/authoring-surface/type-gateslotinput.md +13 -0
  129. package/docs/reference/authoring-surface/type-gateslotparts.md +18 -0
  130. package/docs/reference/authoring-surface/type-gateslots.md +12 -0
  131. package/docs/reference/authoring-surface/type-gatetypesat.md +13 -0
  132. package/docs/reference/authoring-surface/type-hostinjectedinput.md +1 -1
  133. package/docs/reference/authoring-surface/type-httpoutput.md +1 -1
  134. package/docs/reference/authoring-surface/type-jr2config.md +37 -2
  135. package/docs/reference/authoring-surface/type-lateroutcome.md +1 -1
  136. package/docs/reference/authoring-surface/type-lends.md +5 -1
  137. package/docs/reference/authoring-surface/type-lookoutput.md +14 -0
  138. package/docs/reference/authoring-surface/type-mcpcalloutput.md +78 -0
  139. package/docs/reference/authoring-surface/type-mcpnotreturned.md +42 -0
  140. package/docs/reference/authoring-surface/type-mcpoptions.md +47 -0
  141. package/docs/reference/authoring-surface/type-mcpoutput.md +50 -0
  142. package/docs/reference/authoring-surface/type-mcpreadoutput.md +53 -0
  143. package/docs/reference/authoring-surface/type-mcpremoteserver.md +50 -0
  144. package/docs/reference/authoring-surface/type-mcpserver.md +41 -0
  145. package/docs/reference/authoring-surface/type-mcpstdioserver.md +42 -0
  146. package/docs/reference/authoring-surface/type-namedsecret.md +4 -4
  147. package/docs/reference/authoring-surface/type-openbodydeclaration.md +1 -1
  148. package/docs/reference/authoring-surface/type-openbodyoutput.md +1 -1
  149. package/docs/reference/authoring-surface/type-poolnextinput.md +1 -1
  150. package/docs/reference/authoring-surface/type-poolspec.md +11 -6
  151. package/docs/reference/authoring-surface/type-pushoutput.md +1 -1
  152. package/docs/reference/authoring-surface/type-pushsourcespec.md +38 -0
  153. package/docs/reference/authoring-surface/type-readsourcespec.md +47 -0
  154. package/docs/reference/authoring-surface/type-reposlot.md +1 -1
  155. package/docs/reference/authoring-surface/type-reread.md +18 -0
  156. package/docs/reference/authoring-surface/type-runsconfig.md +41 -0
  157. package/docs/reference/authoring-surface/type-sender.md +26 -1
  158. package/docs/reference/authoring-surface/type-sendercallerfield.md +14 -0
  159. package/docs/reference/authoring-surface/type-size.md +1 -1
  160. package/docs/reference/authoring-surface/type-skip.md +19 -0
  161. package/docs/reference/authoring-surface/type-sourcehooks.md +23 -0
  162. package/docs/reference/authoring-surface/type-sourcein.md +25 -0
  163. package/docs/reference/authoring-surface/type-sourcereply.md +18 -0
  164. package/docs/reference/authoring-surface/type-sourcespec.md +16 -7
  165. package/docs/reference/authoring-surface/type-sourceverdict.md +49 -0
  166. package/docs/reference/authoring-surface/type-standingpoolmachine.md +12 -0
  167. package/docs/reference/authoring-surface/type-standingpoolspec.md +51 -0
  168. package/docs/reference/authoring-surface/type-steerargs.md +20 -0
  169. package/docs/reference/authoring-surface/type-thinkinglevel.md +1 -1
  170. package/docs/reference/authoring-surface/type-usercontainer.md +1 -1
  171. package/docs/reference/authoring-surface/type-workspaced.md +1 -1
  172. package/docs/reference/authoring-surface/type-worktreefound.md +3 -3
  173. package/docs/reference/authoring-surface/type-worktreeinput.md +1 -1
  174. package/docs/reference/authoring-surface/type-worktreeoptions.md +1 -1
  175. package/docs/reference/authoring-surface/type-worktreeoutput.md +1 -1
  176. package/docs/reference/authoring-surface/type-worktreepath.md +1 -1
  177. package/docs/reference/authoring-surface/type-worktreeready.md +1 -1
  178. package/docs/reference/authoring-surface/type-worktreerefused.md +4 -4
  179. package/docs/reference/authoring-surface/workspace.md +1 -1
  180. package/docs/reference/authoring-surface/worktree.md +1 -1
  181. package/docs/reference/authoring-surface.md +88 -167
  182. package/docs/reference/cli.md +413 -74
  183. package/docs/reference/config.md +235 -2
  184. package/docs/reference/decisions/0002-duplex-streaming-actor.md +71 -11
  185. package/docs/reference/decisions/0005-sandbox-pod-composition.md +14 -10
  186. package/docs/reference/decisions/0006-agent-control-surface.md +4 -4
  187. package/docs/reference/decisions/0007-durable-machine-state.md +1 -1
  188. package/docs/reference/decisions/0009-cli-and-instance-interface.md +150 -49
  189. package/docs/reference/decisions/0010-bdd-acceptance-tests.md +5 -3
  190. package/docs/reference/decisions/0011-workflow-defined-events.md +256 -12
  191. package/docs/reference/decisions/0012-workspace-wrapper-machine.md +9 -2
  192. package/docs/reference/decisions/0013-the-agent-reaches-its-machine-through-a-container-it-cannot-read.md +20 -14
  193. package/docs/reference/decisions/0014-observation-is-open-run-state-is-not.md +53 -27
  194. package/docs/reference/decisions/0015-authoring-surface-absorbs-the-mechanism.md +18 -14
  195. package/docs/reference/decisions/0017-pool-over-a-source-port.md +226 -12
  196. package/docs/reference/decisions/0018-instance-agents-are-definitions-jr2-assembles-the-harness.md +15 -7
  197. package/docs/reference/decisions/0019-one-converging-command-against-the-current-context.md +32 -18
  198. package/docs/reference/decisions/0021-workspace-continuity-is-a-lease-that-answers-back.md +14 -1
  199. package/docs/reference/decisions/0022-observation-is-a-level-triggered-feed.md +4 -4
  200. package/docs/reference/decisions/0023-the-harness-prints-the-conversation.md +116 -34
  201. package/docs/reference/decisions/0024-an-agents-turn-ends-with-the-state-that-asked-for-it.md +38 -37
  202. package/docs/reference/decisions/0025-cancel-ends-a-run-stop-parks-it.md +10 -5
  203. package/docs/reference/decisions/0027-the-harness-is-jr2s-own-server-flue-retires-the-wire-stays.md +7 -6
  204. package/docs/reference/decisions/0028-what-an-agent-may-do-to-the-workspace-is-part-of-its-definition.md +23 -7
  205. package/docs/reference/decisions/0029-a-menu-is-fixed-for-a-conversation-and-a-turn-is-told-its-allowed-picks.md +18 -10
  206. package/docs/reference/decisions/0030-a-snapshot-names-the-machine-it-was-written-under.md +3 -2
  207. package/docs/reference/decisions/0031-menu-only-agents-run-on-the-instance-harness.md +23 -18
  208. package/docs/reference/decisions/0032-the-console-unlocks-with-a-callers-credential.md +101 -0
  209. package/docs/reference/decisions/0033-a-machine-declares-the-input-that-starts-it.md +4 -3
  210. package/docs/reference/decisions/0034-the-console-renders-with-preact-and-the-server-erases-the-types.md +6 -6
  211. package/docs/reference/decisions/0037-an-instance-builds-its-sandbox-images-jr2-injects-the-harness.md +5 -4
  212. package/docs/reference/decisions/0049-a-machine-carries-its-parts-and-composes-by-invoke.md +19 -19
  213. package/docs/reference/decisions/0050-what-code-names-config-declares-what-the-cli-names-discovery-finds.md +6 -1
  214. package/docs/reference/decisions/0054-the-kit-ships-machines-and-a-shipped-machine-leaves-its-parts-open.md +55 -40
  215. package/docs/reference/decisions/0055-a-release-is-a-pushed-tag-and-the-publish-guard-is-the-credential.md +14 -13
  216. package/docs/reference/decisions/0057-a-turn-is-its-frame-its-dials-and-whether-it-continues.md +7 -0
  217. package/docs/reference/decisions/0058-a-harness-answers-the-orchestrator-alone.md +13 -7
  218. package/docs/reference/decisions/0059-a-harness-holds-stand-ins-and-the-custodian-holds-the-keys.md +38 -30
  219. package/docs/reference/decisions/0062-jr2-briefs-the-agent-on-its-seat-never-on-its-task.md +64 -17
  220. package/docs/reference/decisions/0063-the-orchestrator-watches-the-cluster.md +2 -1
  221. package/docs/reference/decisions/0064-a-workspace-waits-for-capacity.md +2 -2
  222. package/docs/reference/decisions/0065-a-persist-survives-a-crash-and-history-is-kept-for-a-set-time.md +109 -0
  223. package/docs/reference/decisions/0066-a-model-tier-runs-a-real-model-and-a-change-to-what-it-reads-runs-the-tier.md +51 -23
  224. package/docs/reference/decisions/0067-an-effect-is-an-actor-slot-and-runs-at-most-once-unless-marked-idempotent.md +94 -54
  225. package/docs/reference/decisions/0068-an-effector-holds-an-effects-secrets-and-signs-its-wire.md +101 -47
  226. package/docs/reference/decisions/0069-the-orchestrator-is-a-kit-image-and-an-instance-publishes-its-assembly.md +32 -9
  227. package/docs/reference/decisions/0070-a-machine-lends-its-parts-to-a-chart.md +17 -13
  228. package/docs/reference/decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md +56 -30
  229. package/docs/reference/decisions/0072-the-docs-ship-inside-the-kit-and-an-instances-agents-md-indexes-them.md +35 -25
  230. package/docs/reference/decisions/0075-a-machine-cuts-a-worktree-and-the-workspace-only-clones.md +4 -3
  231. package/docs/reference/decisions/0076-an-agents-control-credential-lives-only-where-no-workspace-code-runs.md +37 -10
  232. package/docs/reference/decisions/0078-a-caller-comes-from-one-authenticator-seam-and-acts-within-its-scopes.md +285 -0
  233. package/docs/reference/decisions/0079-an-agent-holds-mcp-tools-a-machine-calls-them-as-an-effect-and-the-machine-is-the-approval.md +198 -0
  234. package/docs/reference/decisions.md +6 -4
  235. package/docs/reference/glossary.md +96 -42
  236. package/docs/reference/hooks.md +1077 -0
  237. package/docs/reference/http-api.md +976 -149
  238. package/docs/why.md +2 -1
  239. package/package.json +10 -3
  240. package/src/actor.ts +36 -10
  241. package/src/agent.ts +50 -0
  242. package/src/assembly-checks.ts +530 -4
  243. package/src/callers.ts +245 -0
  244. package/src/chart.ts +52 -7
  245. package/src/config.ts +550 -1
  246. package/src/conversations.ts +453 -0
  247. package/src/custodian.ts +8 -2
  248. package/src/customize.ts +143 -4
  249. package/src/dispatch-effect.ts +142 -26
  250. package/src/durability.ts +2 -0
  251. package/src/duration.ts +20 -0
  252. package/src/effect-checks.ts +2 -1
  253. package/src/effect.ts +60 -7
  254. package/src/effector-wire.ts +272 -27
  255. package/src/gate-brand.ts +16 -0
  256. package/src/gate.ts +634 -48
  257. package/src/harness-client.ts +10 -4
  258. package/src/held-secrets.ts +72 -23
  259. package/src/holds.ts +2 -2
  260. package/src/hook-kinds/discord.ts +92 -0
  261. package/src/hook-kinds/door.ts +107 -0
  262. package/src/hook-kinds/github.ts +89 -0
  263. package/src/hook-kinds/gitlab.ts +72 -0
  264. package/src/hook-kinds/hook.ts +7 -0
  265. package/src/hook-kinds/index.ts +465 -0
  266. package/src/hook-kinds/slack.ts +151 -0
  267. package/src/hook-kinds/webhook.ts +113 -0
  268. package/src/hooks.ts +506 -0
  269. package/src/http-effect.ts +76 -38
  270. package/src/http.ts +889 -94
  271. package/src/index.ts +16 -5
  272. package/src/instance.ts +196 -26
  273. package/src/internal.ts +22 -3
  274. package/src/machine-doc.ts +26 -1
  275. package/src/mcp-effect.ts +424 -0
  276. package/src/mount-digest.ts +41 -7
  277. package/src/names.ts +64 -2
  278. package/src/notices.ts +138 -10
  279. package/src/open-body.ts +25 -11
  280. package/src/open-effect.ts +17 -4
  281. package/src/open.ts +4 -2
  282. package/src/parts.ts +87 -9
  283. package/src/party.ts +2 -1
  284. package/src/pick.ts +2 -2
  285. package/src/pool.ts +1142 -163
  286. package/src/registration.ts +203 -13
  287. package/src/run-host.ts +1509 -171
  288. package/src/run-list.ts +191 -0
  289. package/src/sandbox-kube.ts +53 -5
  290. package/src/secret-placement.ts +239 -33
  291. package/src/server.ts +53 -4
  292. package/src/setup.ts +72 -32
  293. package/src/snapshot-store.ts +565 -48
  294. package/src/steer.ts +111 -0
  295. package/src/stub-harness.ts +6 -2
  296. package/src/tokens.ts +263 -22
  297. package/src/wire.ts +17 -0
  298. package/src/workspace.ts +50 -6
  299. package/src/worktree.ts +3 -3
  300. package/docs/reference/decisions/0032-the-console-unlocks-with-the-instance-token.md +0 -61
  301. package/docs/reference/decisions/0065-a-persist-survives-a-crash-and-history-is-a-week.md +0 -65
@@ -0,0 +1,47 @@
1
+ ---
2
+ title: McpOptions
3
+ description: The options of an `mcp` Effect.
4
+ ---
5
+
6
+ # `McpOptions`
7
+
8
+ Type, in `@jr2/orchestrator/src/mcp-effect.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpOptions<S extends z.ZodObject | undefined = undefined> = {
12
+ input?: S;
13
+ timeout?: Duration;
14
+ maxBody?: number;
15
+ idempotent?: boolean;
16
+ };
17
+ ```
18
+
19
+ The options of an `mcp` Effect.
20
+
21
+ **Fields**
22
+
23
+ - `input` (optional): `S`
24
+
25
+ The zod schema of the input of the Effect: what the `input` of the `invoke`, or `fromPick`,
26
+ gives it. For `mcp.call` the parsed input is the tool's arguments; for `mcp.prompt`, the
27
+ prompt's arguments, each a string. jr2 parses the input with it before the call. When it
28
+ starts, input that does not agree with it makes the Effect fail (its `onError` route): `mcp
29
+ "<slot>": its input does not match the definition's input schema — <path>: <message>`. With no
30
+ schema, the input of the `invoke` is the arguments as it is, and `{}` when it has none.
31
+ - `timeout` (optional): [`Duration`](type-duration.md)
32
+
33
+ How long jr2 waits for the answer: a number and a unit, such as `"30s"` or `"2m"`. Default:
34
+ the server's `timeout` in `jr2.config.ts` (60 seconds when it sets none). With no answer in
35
+ that time, the output is `unknown`. It refuses a value that is not a positive duration: `mcp:
36
+ timeout "<timeout>" is not a positive duration (like "30s", "2m")`.
37
+ - `maxBody` (optional): `number`
38
+
39
+ The largest number of bytes of `text`, and of `structured` as JSON, that the output keeps.
40
+ Default 65536. Past it, jr2 cuts `text`, drops `structured`, and sets `truncated`. It refuses
41
+ a value that is not a positive whole number: `mcp({ maxBody }): a positive number of bytes`.
42
+ - `idempotent` (optional): `boolean`
43
+
44
+ `true` when it is safe to send the request two times: the tool only reads, or it has its own
45
+ idempotency key. Default `false`. After an Orchestrator restart, jr2 cannot always tell if the
46
+ request went out. Then it sends an idempotent one again, and gives any other the output
47
+ `unknown`. jr2 does not read the tool's `idempotentHint`.
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: McpOutput
3
+ description: "The output of any `mcp` Effect: a call's, a read's or a prompt's."
4
+ ---
5
+
6
+ # `McpOutput`
7
+
8
+ Type, in `@jr2/orchestrator/src/effector-wire.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpOutput = McpCallOutput | McpReadOutput;
12
+ ```
13
+
14
+ The output of any `mcp` Effect: a call's, a read's or a prompt's.
15
+
16
+ **Forms**: it is one of these objects.
17
+
18
+ - Form 1: `outcome`, `isError`, `text`, `structured`, `truncated`
19
+
20
+ - `outcome`: `"returned"`
21
+ - `isError`: `boolean`
22
+ - `text`: `string`
23
+ - `structured` (optional): `unknown`
24
+ - `truncated` (optional): `boolean`
25
+ - Form 2: `outcome`, `reason`
26
+
27
+ - `outcome`: `"refused"`
28
+ - `reason`: `string`
29
+ - Form 3: `outcome`, `reason`
30
+
31
+ - `outcome`: `"unreachable"`
32
+ - `reason`: `string`
33
+ - Form 4: `outcome`, `reason`
34
+
35
+ - `outcome`: `"input-required"`
36
+ - `reason`: `string`
37
+ - Form 5: `outcome`, `reason`
38
+
39
+ - `outcome`: `"unknown"`
40
+ - `reason`: `string`
41
+ - Form 6: `outcome`, `text`, `structured`, `truncated`
42
+
43
+ - `outcome`: `"returned"`
44
+ - `text`: `string`
45
+ - `structured` (optional): `unknown`
46
+ - `truncated` (optional): `boolean`
47
+ - Form 7: `outcome`, `reason`
48
+
49
+ - `outcome`: `"(a later outcome)"`
50
+ - `reason` (optional): `string`
@@ -0,0 +1,53 @@
1
+ ---
2
+ title: McpReadOutput
3
+ description: The output of an `mcp.read` or an `mcp.prompt` Effect.
4
+ ---
5
+
6
+ # `McpReadOutput`
7
+
8
+ Type, in `@jr2/orchestrator/src/effector-wire.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpReadOutput =
12
+ | { outcome: "returned"; text: string; structured?: unknown; truncated?: boolean }
13
+ | McpNotReturned;
14
+ ```
15
+
16
+ The output of an `mcp.read` or an `mcp.prompt` Effect. Its outcomes are those of
17
+ [`McpCallOutput`](type-mcpcalloutput.md), with no `isError`. For a read, `text` joins the text of the resource's
18
+ contents, and `structured` is the `contents` list: a blob is given only as its `mimeType` and its
19
+ size. For a prompt, `text` joins the text of the prompt's messages, and `structured` is the
20
+ `messages` list. Past the bound, `structured` is dropped and `truncated` is set.
21
+
22
+ **Forms**: it is one of these objects.
23
+
24
+ - Form 1: `outcome`, `reason`
25
+
26
+ - `outcome`: `"refused"`
27
+ - `reason`: `string`
28
+ - Form 2: `outcome`, `reason`
29
+
30
+ - `outcome`: `"unreachable"`
31
+ - `reason`: `string`
32
+ - Form 3: `outcome`, `reason`
33
+
34
+ - `outcome`: `"input-required"`
35
+ - `reason`: `string`
36
+ - Form 4: `outcome`, `reason`
37
+
38
+ - `outcome`: `"unknown"`
39
+ - `reason`: `string`
40
+ - Form 5: `outcome`, `text`, `structured`, `truncated`
41
+
42
+ - `outcome`: `"returned"`
43
+ - `text`: `string`
44
+ - `structured` (optional): `unknown`
45
+ - `truncated` (optional): `boolean`
46
+ - Form 6: `outcome`, `reason`
47
+
48
+ - `outcome`: `"(a later outcome)"`
49
+ - `reason` (optional): `string`
50
+
51
+ **See also**
52
+
53
+ - [Effects](../../concepts/effects.md)
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: McpRemoteServer
3
+ description: A remote MCP server, which the Harness reaches over Streamable HTTP.
4
+ ---
5
+
6
+ # `McpRemoteServer`
7
+
8
+ Type, in `@jr2/orchestrator/src/config.ts`. It is an export of `@jr2/orchestrator`, in the [Config](group-config.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpRemoteServer = {
12
+ url: string;
13
+ secret?: string;
14
+ timeout?: `${number}s` | `${number}m` | `${number}h`;
15
+ };
16
+ ```
17
+
18
+ A remote MCP server, which the Harness reaches over Streamable HTTP. An Agent that names it in its
19
+ `mcp` list gets the tools that its `tools` allowlist names.
20
+
21
+ A server with a `secret` needs an `https://` url, because the Custodian puts the value on TLS
22
+ only: `mcp.<name>.url must be an https:// URL`. A server with no secret can use `http://`. The
23
+ Harness sends `Authorization: Bearer <Stand-in>`, and the Custodian of each pod whose Agents name
24
+ the server puts the value in its place. A `secret` that the `secrets` list does not hold is
25
+ refused when the config loads: `<file> at mcp.<name>.secret: "<NAME>" is not an entry of secrets`.
26
+ Past `timeout`, the Harness cancels the call, and the model reads jr2's text.
27
+
28
+ **Fields**
29
+
30
+ - `url`: `string`
31
+
32
+ Its Streamable HTTP endpoint: `https://` when it has a `secret`.
33
+ - `secret` (optional): `string`
34
+
35
+ A name of the `secrets` list: its bearer token. With no `hosts`, that entry is bound to the
36
+ url's host, in `authorization`. Default: none.
37
+ - `timeout` (optional): `` `${number}s` | `${number}m` | `${number}h` ``
38
+
39
+ How long one call can run, such as `"90s"`. Default `"60s"`.
40
+
41
+ **Example**
42
+
43
+ ```ts
44
+ import { defineConfig } from "@jr2/orchestrator";
45
+
46
+ export default defineConfig({
47
+ secrets: [{ name: "SLACK_ACME_TOKEN", value: process.env.SLACK_ACME_TOKEN }],
48
+ mcp: { "slack-acme": { url: "https://mcp.slack.example/mcp", secret: "SLACK_ACME_TOKEN" } },
49
+ });
50
+ ```
@@ -0,0 +1,41 @@
1
+ ---
2
+ title: McpServer
3
+ description: "One MCP server of the Instance: a `McpRemoteServer` (`url`) or a `McpStdioServer` (`command`)."
4
+ ---
5
+
6
+ # `McpServer`
7
+
8
+ Type, in `@jr2/orchestrator/src/config.ts`. It is an export of `@jr2/orchestrator`, in the [Config](group-config.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpServer = McpRemoteServer | McpStdioServer;
12
+ ```
13
+
14
+ One MCP server of the Instance: a [`McpRemoteServer`](type-mcpremoteserver.md) (`url`) or a [`McpStdioServer`](type-mcpstdioserver.md)
15
+ (`command`).
16
+
17
+ **Forms**: it is one of these objects.
18
+
19
+ - Form 1: `url`, `secret`, `timeout`
20
+
21
+ - `url`: `string`
22
+
23
+ Its Streamable HTTP endpoint: `https://` when it has a `secret`.
24
+ - `secret` (optional): `string`
25
+
26
+ A name of the `secrets` list: its bearer token. With no `hosts`, that entry is bound to the
27
+ url's host, in `authorization`. Default: none.
28
+ - `timeout` (optional): `` `${number}s` | `${number}m` | `${number}h` ``
29
+
30
+ How long one call can run, such as `"90s"`. Default `"60s"`.
31
+ - Form 2: `command`, `args`, `timeout`
32
+
33
+ - `command`: `string`
34
+
35
+ A program of the Sandbox Image.
36
+ - `args` (optional): `readonly string[]`
37
+
38
+ Its arguments.
39
+ - `timeout` (optional): `` `${number}s` | `${number}m` | `${number}h` ``
40
+
41
+ How long one call can run, such as `"90s"`. Default `"60s"`.
@@ -0,0 +1,42 @@
1
+ ---
2
+ title: McpStdioServer
3
+ description: "A stdio MCP server: a program of the Sandbox Image that the Harness starts for each Agent conversation, through jr2's spawner, inside the Agent's confinement."
4
+ ---
5
+
6
+ # `McpStdioServer`
7
+
8
+ Type, in `@jr2/orchestrator/src/config.ts`. It is an export of `@jr2/orchestrator`, in the [Config](group-config.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type McpStdioServer = {
12
+ command: string;
13
+ args?: readonly string[];
14
+ timeout?: `${number}s` | `${number}m` | `${number}h`;
15
+ };
16
+ ```
17
+
18
+ A stdio MCP server: a program of the Sandbox Image that the Harness starts for each Agent
19
+ conversation, through jr2's spawner, inside the Agent's confinement. It is Workspace code: its env
20
+ holds only the Stand-ins that the `workspace()` grants, so it has no `secret` of its own. A
21
+ `"none"` Agent cannot name one, because its Turns run on the Instance Harness, where no Workspace
22
+ code runs.
23
+
24
+ **Fields**
25
+
26
+ - `command`: `string`
27
+
28
+ A program of the Sandbox Image.
29
+ - `args` (optional): `readonly string[]`
30
+
31
+ Its arguments.
32
+ - `timeout` (optional): `` `${number}s` | `${number}m` | `${number}h` ``
33
+
34
+ How long one call can run, such as `"90s"`. Default `"60s"`.
35
+
36
+ **Example**
37
+
38
+ ```ts
39
+ import { defineConfig } from "@jr2/orchestrator";
40
+
41
+ export default defineConfig({ mcp: { notes: { command: "notes-mcp", args: ["--root", "/work"] } } });
42
+ ```
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: NamedSecret
3
- description: "A named secret, never `secret(open)`: where a definition's Open part is a whole that holds a secret — a dispatch's target (ADR-0071) — the secret is bound with it, to a name, so the mark `secret(open)` carries may not be present."
3
+ description: A secret bound to a name, never `secret(open)`.
4
4
  ---
5
5
 
6
6
  # `NamedSecret`
@@ -11,9 +11,9 @@ Type, in `@jr2/orchestrator/src/http-effect.ts`. The signature of an export, or
11
11
  type NamedSecret = Secret & { readonly [K in keyof OpenSecretMark]?: never };
12
12
  ```
13
13
 
14
- A named secret, never `secret(open)`: where a definition's Open part is a whole that holds a
15
- secret — a dispatch's target ([ADR-0071](../decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md)) — the secret is bound with it, to a name, so the mark
16
- `secret(open)` carries may not be present. One type for the definition and the binding.
14
+ A secret bound to a name, never `secret(open)`. Where a definition's Open part is a whole that
15
+ holds a secret — a dispatch's target ([ADR-0071](../decisions/0071-a-run-starts-a-run-through-a-dispatch-effect.md)) — the secret is bound with it, to a name, so the
16
+ mark `secret(open)` carries may not be present. One type for the definition and the binding.
17
17
 
18
18
  **Fields**
19
19
 
@@ -5,7 +5,7 @@ description: "What an Open body declares: the parts that it lends a Chart, what
5
5
 
6
6
  # `OpenBodyDeclaration`
7
7
 
8
- Type, in `@jr2/orchestrator/src/open-body.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Charts.
8
+ Type, in `@jr2/orchestrator/src/open-body.ts`. It is an export of `@jr2/orchestrator`, in the [Charts](group-charts.md) group of the [Authoring surface](../authoring-surface.md) page.
9
9
 
10
10
  ```ts
11
11
  type OpenBodyDeclaration = {
@@ -5,7 +5,7 @@ description: The output of an Open body.
5
5
 
6
6
  # `OpenBodyOutput`
7
7
 
8
- Type, in `@jr2/orchestrator/src/open-body.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Charts.
8
+ Type, in `@jr2/orchestrator/src/open-body.ts`. It is an export of `@jr2/orchestrator`, in the [Charts](group-charts.md) group of the [Authoring surface](../authoring-surface.md) page.
9
9
 
10
10
  ```ts
11
11
  type OpenBodyOutput =
@@ -5,7 +5,7 @@ description: "The input of a Source's `next`: the ids of the items that workers
5
5
 
6
6
  # `PoolNextInput`
7
7
 
8
- Type, in `@jr2/orchestrator/src/pool.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Composition.
8
+ Type, in `@jr2/orchestrator/src/pool.ts`. It is an export of `@jr2/orchestrator`, in the [Composition](group-composition.md) group of the [Authoring surface](../authoring-surface.md) page.
9
9
 
10
10
  ```ts
11
11
  type PoolNextInput<TInput = unknown> = { active: string[]; settled: string[]; input: TInput };
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: PoolSpec
3
- description: "What you pass to `pool()`: where the items come from, how many workers run at once, and what each worker gets."
3
+ description: What you pass to `pool()` with a child Machine as its worker.
4
4
  ---
5
5
 
6
6
  # `PoolSpec`
@@ -11,17 +11,18 @@ Type, in `@jr2/orchestrator/src/pool.ts`. The signature of an export, or a type
11
11
  type PoolSpec<T, TInput = unknown> = {
12
12
  id?: string;
13
13
  input?: z.ZodObject;
14
- source: SourceSpec<T, TInput> | SourceSpec<T>;
14
+ source: SourceSpec<T, TInput> | SourceSpec<T> | ReadSourceSpec<T, TInput> | ReadSourceSpec<T>;
15
15
  itemId: (item: T) => string;
16
16
  cap?: number | ((args: { input: TInput }) => number);
17
17
  itemInput?: (item: T, args: { input: TInput }) => unknown;
18
18
  onDrained?: "final";
19
19
  failures?: "fail" | "report";
20
+ standing?: false;
20
21
  };
21
22
  ```
22
23
 
23
- What you pass to `pool()`: where the items come from, how many workers run at once, and what
24
- each worker gets.
24
+ What you pass to `pool()` with a child Machine as its worker. It says where the items come
25
+ from, how many workers run at once, and what each worker gets.
25
26
 
26
27
  **Fields**
27
28
 
@@ -33,9 +34,10 @@ each worker gets.
33
34
  The run input of the Pool, as a zod object: what a caller sends to start a run. `cap` and
34
35
  `itemInput` read it, typed by it. A worker never gets it: each worker gets its item. Default:
35
36
  none, and then their `input` is `unknown`.
36
- - `source`: `SourceSpec<T, TInput> | SourceSpec<T>`
37
+ - `source`: `SourceSpec<T, TInput> | SourceSpec<T> | ReadSourceSpec<T, TInput> | ReadSourceSpec<T>`
37
38
 
38
- Where the items come from. Make it with [`source`](source.md).
39
+ Where the items come from: a pull or a read Source. Make it with [`source`](source.md). A push Source
40
+ needs a standing Pool of runs.
39
41
  - `itemId`: `(item: T) => string`
40
42
 
41
43
  The id of an item. The Pool uses it as the id of the item's worker and in the `active` list
@@ -58,3 +60,6 @@ each worker gets.
58
60
  ends with failures, `drained` or `deadlocked`, it fails the run with the reason
59
61
  `"<n> of <m> items failed"` and the detail `{ status, items, failures }`. `"report"`: the Pool
60
62
  ends `done`, with the failures in its output. Default: `"fail"`.
63
+ - `standing` (optional): `false`
64
+
65
+ A Pool of child Machines never stands: a child cannot be handed over.
@@ -5,7 +5,7 @@ description: "The output of a `push` Effect: what the `onDone` of its state gets
5
5
 
6
6
  # `PushOutput`
7
7
 
8
- Type, in `@jr2/orchestrator/src/sandbox-effect.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Effects.
8
+ Type, in `@jr2/orchestrator/src/sandbox-effect.ts`. It is an export of `@jr2/orchestrator`, in the [Effects](group-effects.md) group of the [Authoring surface](../authoring-surface.md) page.
9
9
 
10
10
  ```ts
11
11
  type PushOutput =
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: PushSourceSpec
3
+ description: A push Source.
4
+ ---
5
+
6
+ # `PushSourceSpec`
7
+
8
+ Type, in `@jr2/orchestrator/src/pool.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type PushSourceSpec<T> = {
12
+ item: z.ZodType<T>;
13
+ hooks: SourceHooks<Carry<T>, {}>;
14
+ hold?: number;
15
+ reply?: SourceReply<T>;
16
+ };
17
+ ```
18
+
19
+ A push Source. Nothing can be read again, and each item comes in a Hook's delivery. A handler
20
+ gives `carry(item)` or `skip(reason)`. The Pool holds each carried item in its run's blob, in the
21
+ order of arrival, until it claims it. Only a standing Pool takes a push Source. Make one with
22
+ [`source`](source.md).
23
+
24
+ **Fields**
25
+
26
+ - `item`: `z.ZodType<T>`
27
+
28
+ The schema of an item. The Pool parses each carried item with it before it holds it.
29
+ - `hooks`: `SourceHooks<Carry<T>, {}>`
30
+
31
+ A handler for each Hook kind id and event key. It gives `carry(item)` or `skip(reason)`.
32
+ - `hold` (optional): `number`
33
+
34
+ The most items that the Pool holds. Above it, a carried item is `hold-full`, and the Hook's
35
+ answer is 429. Default: 1000.
36
+ - `reply` (optional): `SourceReply<T>`
37
+
38
+ The text that the person who acted reads, from the verdict. Default: none.
@@ -0,0 +1,47 @@
1
+ ---
2
+ title: ReadSourceSpec
3
+ description: A read Source.
4
+ ---
5
+
6
+ # `ReadSourceSpec`
7
+
8
+ Type, in `@jr2/orchestrator/src/pool.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type ReadSourceSpec<T, TInput = unknown, R extends AnyActorLogic = AnyActorLogic> = {
12
+ read: R;
13
+ items?: (output: LookOutput<R>, args: { input: TInput }) => readonly T[];
14
+ wake?: EventDef;
15
+ pollEvery?: number;
16
+ hooks?: SourceHooks<Reread, TInput>;
17
+ reply?: SourceReply<T>;
18
+ };
19
+ ```
20
+
21
+ A read Source. `read` reads the whole set, and `items` turns its answer into the items, in
22
+ order. The read is an `http` Effect marked `idempotent: true`, so it can spend a secret that the
23
+ Instance Effector holds, or a promise (`fromPromise`). Its input is the Pool's input. A read that
24
+ fails gives no items. The read is the truth: a Hook's delivery only says "read again". Make one
25
+ with [`source`](source.md).
26
+
27
+ **Fields**
28
+
29
+ - `read`: `R`
30
+
31
+ The read: an `http` Effect marked `idempotent: true`, or a promise. The Pool runs it at the
32
+ start, after a worker settles, on `wake`, on a Hook's `reread()` and every `pollEvery`.
33
+ - `items` (optional): `(output: LookOutput<R>, args: { input: TInput; }) => readonly T[]`
34
+
35
+ The items in the read's answer, in order. Default: the answer itself, when it is an array.
36
+ - `wake` (optional): [`EventDef`](type-eventdef.md)
37
+
38
+ As a pull Source's `wake`.
39
+ - `pollEvery` (optional): `number`
40
+
41
+ Read again after this many milliseconds while the Pool waits. Default: none.
42
+ - `hooks` (optional): `SourceHooks<Reread, TInput>`
43
+
44
+ What a Hook's delivery does: a handler gives `reread()` or `skip(reason)`. Default: none.
45
+ - `reply` (optional): `SourceReply<T>`
46
+
47
+ The text that the person who acted reads, from the verdict. Default: none.
@@ -5,7 +5,7 @@ description: The value of one Repo Slot in `workspace({ repos })`.
5
5
 
6
6
  # `RepoSlot`
7
7
 
8
- Type, in `@jr2/orchestrator/src/parts.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Workspaces and Repos.
8
+ Type, in `@jr2/orchestrator/src/parts.ts`. It is an export of `@jr2/orchestrator`, in the [Workspaces and Repos](group-workspaces-and-repos.md) group of the [Authoring surface](../authoring-surface.md) page.
9
9
 
10
10
  ```ts
11
11
  type RepoSlot<TInput = unknown> =
@@ -0,0 +1,18 @@
1
+ ---
2
+ title: Reread
3
+ description: What `reread()` gives.
4
+ ---
5
+
6
+ # `Reread`
7
+
8
+ Type, in `@jr2/orchestrator/src/pool.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type Reread = { readonly [VERDICT]: "reread" };
12
+ ```
13
+
14
+ What `reread()` gives. Only a Source that can read (`next` or `read`) gives it.
15
+
16
+ **Fields**
17
+
18
+ - `[VERDICT]`: `"reread"`
@@ -0,0 +1,41 @@
1
+ ---
2
+ title: RunsConfig
3
+ description: How long jr2 keeps an ended run, and the volume that keeps it (ADR-0065).
4
+ ---
5
+
6
+ # `RunsConfig`
7
+
8
+ Type, in `@jr2/orchestrator/src/config.ts`. It is an export of `@jr2/orchestrator`, in the [Config](group-config.md) group of the [Authoring surface](../authoring-surface.md) page.
9
+
10
+ ```ts
11
+ type RunsConfig = {
12
+ retain?: `${number}${"m" | "h" | "d" | "w"}`;
13
+ volume?: string;
14
+ };
15
+ ```
16
+
17
+ How long jr2 keeps an ended run, and the volume that keeps it ([ADR-0065](../decisions/0065-a-persist-survives-a-crash-and-history-is-kept-for-a-set-time.md)). When the config loads,
18
+ a bad field is refused: `<file> at runs.<field>: <problem>`.
19
+
20
+ **Fields**
21
+
22
+ - `retain` (optional): `` `${number}${"m" | "h" | "d" | "w"}` ``
23
+
24
+ How long jr2 keeps an ended run: its row, its conversations and the hook log. A number and
25
+ `m`, `h`, `d` or `w`, such as `"90d"`. At least `"1h"`, with no upper limit. A live run is
26
+ never removed. Default: `"30d"`.
27
+ - `volume` (optional): `string`
28
+
29
+ The size of the Orchestrator's state volume claim: a number and a unit, such as `"5Gi"` or
30
+ `"500Mi"` (a number with no unit is refused). Default: `"5Gi"` for a
31
+ new claim; unset, `jr2 up` keeps the size of a claim that exists. A larger size grows the
32
+ claim where its StorageClass allows expansion, else `jr2 up` refuses it. A smaller size is
33
+ refused: Kubernetes never makes a claim smaller.
34
+
35
+ **Example**
36
+
37
+ ```ts
38
+ import { defineConfig } from "@jr2/orchestrator";
39
+
40
+ export default defineConfig({ runs: { retain: "90d", volume: "20Gi" } });
41
+ ```
@@ -8,12 +8,37 @@ description: "Who delivered an event: an Agent by its slot, or a Gate by its inv
8
8
  Type, in `src/define-event.ts` of `@jr2/agent-protocol`, a dependency of `@jr2/orchestrator`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
9
 
10
10
  ```ts
11
- type Sender = { readonly party: "agent" | "gate"; readonly id: string };
11
+ type Sender = {
12
+ readonly party: "agent" | "gate";
13
+ readonly id: string;
14
+ readonly via?: "token" | "jwt" | "hook";
15
+ readonly name?: string;
16
+ readonly onBehalfOf?: string;
17
+ readonly checked?: readonly SenderCallerField[];
18
+ };
12
19
  ```
13
20
 
14
21
  Who delivered an event: an Agent by its slot, or a Gate by its invoke id ([ADR-0015](../decisions/0015-authoring-surface-absorbs-the-mechanism.md)).
15
22
 
23
+ A Gate's event also carries the Caller that answered it ([ADR-0011](../decisions/0011-workflow-defined-events.md), [ADR-0078](../decisions/0078-a-caller-comes-from-one-authenticator-seam-and-acts-within-its-scopes.md)): `via` and `name`
24
+ name it, `onBehalfOf` is the party that it says it acts for, and `checked` names the fields that
25
+ jr2 verified. `via` and `name` are always checked, because an authenticator made them;
26
+ `onBehalfOf` is checked only for a Hook, whose signature covers the payload that it comes from.
27
+ An event that a Gate gives with no Caller (its `look`) has none of these fields.
28
+
16
29
  **Fields**
17
30
 
18
31
  - `party`: `"agent" | "gate"`
19
32
  - `id`: `string`
33
+ - `via` (optional): `"token" | "jwt" | "hook"`
34
+
35
+ The authenticator that made the Caller: `token`, `jwt` or `hook`. A Gate's event only.
36
+ - `name` (optional): `string`
37
+
38
+ The Caller's name for that authenticator. A Gate's event only.
39
+ - `onBehalfOf` (optional): `string`
40
+
41
+ The party that the Caller says it acts for. A claim, unless `checked` names it.
42
+ - `checked` (optional): `readonly SenderCallerField[]`
43
+
44
+ The fields of the Caller that jr2 verified.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: SenderCallerField
3
+ description: "A field of a `Sender`'s Caller that jr2 can verify."
4
+ ---
5
+
6
+ # `SenderCallerField`
7
+
8
+ Type, in `src/define-event.ts` of `@jr2/agent-protocol`, a dependency of `@jr2/orchestrator`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type SenderCallerField = "via" | "name" | "onBehalfOf";
12
+ ```
13
+
14
+ A field of a [`Sender`](type-sender.md)'s Caller that jr2 can verify.
@@ -5,7 +5,7 @@ description: "The Size of a Workspace: the most memory and cpu that its whole Sa
5
5
 
6
6
  # `Size`
7
7
 
8
- Type, in `@jr2/orchestrator/src/size.ts`. It is an export of `@jr2/orchestrator`, on the [Authoring surface](../authoring-surface.md) page, in Composition.
8
+ Type, in `@jr2/orchestrator/src/size.ts`. It is an export of `@jr2/orchestrator`, in the [Composition](group-composition.md) group of the [Authoring surface](../authoring-surface.md) page.
9
9
 
10
10
  ```ts
11
11
  type Size = {
@@ -0,0 +1,19 @@
1
+ ---
2
+ title: Skip
3
+ description: "What `skip(reason)` gives: the delivery brings nothing, and the reason says why."
4
+ ---
5
+
6
+ # `Skip`
7
+
8
+ Type, in `@jr2/orchestrator/src/pool.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.
9
+
10
+ ```ts
11
+ type Skip = { readonly [VERDICT]: "skip"; readonly reason: string };
12
+ ```
13
+
14
+ What `skip(reason)` gives: the delivery brings nothing, and the reason says why.
15
+
16
+ **Fields**
17
+
18
+ - `[VERDICT]`: `"skip"`
19
+ - `reason`: `string`