@orchestraworks/cli 0.5.8 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli/api/approval.js +3 -3
- package/dist/cli/commands/outpost/local.js +3 -3
- package/dist/cli/commands/outpost/machine-names.d.ts +17 -0
- package/dist/cli/commands/outpost/machine-names.js +22 -0
- package/dist/cli/commands/outpost/up.js +7 -5
- package/dist/cli/commands/worker/enroll.d.ts +4 -3
- package/dist/cli/commands/worker/enroll.js +4 -3
- package/dist/cli/core/auth.d.ts +11 -1
- package/dist/cli/core/auth.js +21 -4
- package/dist/cli/core/session-body.d.ts +1 -1
- package/dist/cli/core/session-body.js +1 -1
- package/dist/cli/firstRun.js +2 -2
- package/dist/cli/main.js +4 -3
- package/dist/constructs/environment.d.ts +24 -11
- package/dist/constructs/environment.js +76 -12
- package/dist/constructs/secret.d.ts +17 -7
- package/dist/constructs/secret.js +24 -16
- package/dist/core/labels.d.ts +32 -6
- package/dist/core/labels.js +70 -8
- package/dist/engine/diff.js +38 -11
- package/dist/engine/gateway-key-reconcile.d.ts +1 -2
- package/dist/engine/gateway-key-reconcile.js +19 -15
- package/dist/engine/pipeline-reconcile.js +2 -2
- package/dist/engine/pipeline-workflow-reconcile.js +15 -9
- package/dist/engine/reconcile.js +48 -15
- package/dist/engine/refusals.d.ts +0 -5
- package/dist/engine/refusals.js +1 -5
- package/dist/engine/secrets-apply.d.ts +10 -14
- package/dist/engine/secrets-apply.js +12 -17
- package/dist/engine/workflow-reconcile.d.ts +1 -1
- package/dist/generated/cli-commands.json +170 -34
- package/dist/generated/providers.d.ts +40 -0
- package/dist/generated/providers.js +30 -0
- package/docs/REFERENCE.md +9 -7
- package/node_modules/@orchestraworks/client/dist/esm/models/ApiErrorDetail.d.ts +1 -1
- package/node_modules/@orchestraworks/client/dist/esm/models/CreateEnvironmentRequest.d.ts +7 -0
- package/node_modules/@orchestraworks/client/dist/esm/models/CreateEnvironmentRequest.js +3 -0
- package/node_modules/@orchestraworks/client/dist/esm/models/CreateSecretRequest.d.ts +4 -3
- package/node_modules/@orchestraworks/client/dist/esm/models/Environment.d.ts +7 -0
- package/node_modules/@orchestraworks/client/dist/esm/models/Environment.js +3 -0
- package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentCredential.d.ts +38 -0
- package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentCredential.js +45 -0
- package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentProvisionSpec.d.ts +1 -1
- package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentProvisionSpecRequest.d.ts +1 -1
- package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentSnapshot.d.ts +1 -1
- package/node_modules/@orchestraworks/client/dist/esm/models/InjectionRecipe.d.ts +6 -0
- package/node_modules/@orchestraworks/client/dist/esm/models/InjectionRecipe.js +2 -0
- package/node_modules/@orchestraworks/client/dist/esm/models/OAuthTokenRequest.d.ts +1 -1
- package/node_modules/@orchestraworks/client/dist/esm/models/Secret.d.ts +1 -7
- package/node_modules/@orchestraworks/client/dist/esm/models/Secret.js +0 -4
- package/node_modules/@orchestraworks/client/dist/esm/models/UpdateEnvironmentRequest.d.ts +7 -0
- package/node_modules/@orchestraworks/client/dist/esm/models/UpdateEnvironmentRequest.js +3 -0
- package/node_modules/@orchestraworks/client/dist/esm/models/UpdateSecretRequest.d.ts +4 -3
- package/node_modules/@orchestraworks/client/dist/esm/models/index.d.ts +1 -0
- package/node_modules/@orchestraworks/client/dist/esm/models/index.js +1 -0
- package/node_modules/@orchestraworks/client/dist/models/ApiErrorDetail.d.ts +1 -1
- package/node_modules/@orchestraworks/client/dist/models/CreateEnvironmentRequest.d.ts +7 -0
- package/node_modules/@orchestraworks/client/dist/models/CreateEnvironmentRequest.js +3 -0
- package/node_modules/@orchestraworks/client/dist/models/CreateSecretRequest.d.ts +4 -3
- package/node_modules/@orchestraworks/client/dist/models/Environment.d.ts +7 -0
- package/node_modules/@orchestraworks/client/dist/models/Environment.js +3 -0
- package/node_modules/@orchestraworks/client/dist/models/EnvironmentCredential.d.ts +38 -0
- package/node_modules/@orchestraworks/client/dist/models/EnvironmentCredential.js +52 -0
- package/node_modules/@orchestraworks/client/dist/models/EnvironmentProvisionSpec.d.ts +1 -1
- package/node_modules/@orchestraworks/client/dist/models/EnvironmentProvisionSpecRequest.d.ts +1 -1
- package/node_modules/@orchestraworks/client/dist/models/EnvironmentSnapshot.d.ts +1 -1
- package/node_modules/@orchestraworks/client/dist/models/InjectionRecipe.d.ts +6 -0
- package/node_modules/@orchestraworks/client/dist/models/InjectionRecipe.js +2 -0
- package/node_modules/@orchestraworks/client/dist/models/OAuthTokenRequest.d.ts +1 -1
- package/node_modules/@orchestraworks/client/dist/models/Secret.d.ts +1 -7
- package/node_modules/@orchestraworks/client/dist/models/Secret.js +0 -4
- package/node_modules/@orchestraworks/client/dist/models/UpdateEnvironmentRequest.d.ts +7 -0
- package/node_modules/@orchestraworks/client/dist/models/UpdateEnvironmentRequest.js +3 -0
- package/node_modules/@orchestraworks/client/dist/models/UpdateSecretRequest.d.ts +4 -3
- package/node_modules/@orchestraworks/client/dist/models/index.d.ts +1 -0
- package/node_modules/@orchestraworks/client/dist/models/index.js +1 -0
- package/node_modules/@orchestraworks/client/package.json +1 -1
- package/package.json +4 -4
- package/skills/orchestra/SKILL.md +132 -18
- package/skills/orchestra-fdk/references/authoring.md +511 -20
- package/skills/orchestra-fdk/references/environment.md +49 -12
- package/skills/orchestra-fdk/references/integrations/code-repo.md +26 -5
- package/skills/orchestra-fdk/references/phases/1-discover.md +1 -1
- package/skills/orchestra-fdk/references/phases/2-plan.md +1 -1
- package/skills/orchestra-fdk/references/troubleshooting.md +3 -2
- package/templates/bug-fix/main.ts +7 -4
- package/templates/engineering-team/lib/environment.ts +6 -3
- package/templates/engineering-team/package.json +1 -1
- package/templates/todo-factory/main.ts +7 -4
- package/templates/todo-factory/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: orchestra
|
|
3
|
-
description: Use when you need to understand or explain an Orchestra concept - organization, role, agent, version, environment, machine, network rules, secret, reaching a model (subscription, model gateway and gateway key, own key), session, pipeline, work item, workflow rules, trigger, skill, file, plan, or the factory as code - or how the orchestra command line works, what the platform cannot do yet, and where an agent's knowledge belongs. A reference to read, not a list of steps.
|
|
3
|
+
description: Use when you need to understand or explain an Orchestra concept - organization, role, agent, version, environment, machine, network rules, secret, reaching a model (subscription, model gateway and gateway key, own key), session, pipeline, work item and its check gates, workflow rules and the judge, trigger, skill, file, plan, or the factory as code - or how the orchestra command line works, what the platform cannot do yet, and where an agent's knowledge belongs. A reference to read, not a list of steps.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Orchestra: the ideas behind the platform
|
|
@@ -120,8 +120,9 @@ reaches the program on its standard input. It starts like any agent:
|
|
|
120
120
|
to the agent. A schedule trigger targets a pipeline, never an agent directly.
|
|
121
121
|
|
|
122
122
|
A `script` agent cannot use skills or model settings (the platform refuses both with a 400), and it cannot
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
read, write or judge prose the way a model does. It can be a judge of a fixed rule, such as "the description
|
|
124
|
+
has a Release notes section": the program decides and writes the check itself (section 11). A turn runs its
|
|
125
|
+
whole program again, so the program must be safe to run twice. It is billed as an agent: **Settings › Plan & usage** shows the plan.
|
|
125
126
|
|
|
126
127
|
**Cannot yet.**
|
|
127
128
|
- Change an agent's harness after it is created. Make a new agent instead.
|
|
@@ -265,8 +266,8 @@ unless you set one, so it wins over the open default and over the usual allow ru
|
|
|
265
266
|
**Live effect.** The edge reads the environment's rules on each request. So an apply that changes the rules
|
|
266
267
|
reaches every machine at once, machines already running included, from their next request.
|
|
267
268
|
|
|
268
|
-
**How it relates.** On a request a rule allows, the edge adds
|
|
269
|
-
host,
|
|
269
|
+
**How it relates.** On a request a rule allows, the edge adds a secret or connection whose `hosts` cover the
|
|
270
|
+
host, only on `https`, and only when the request names it or an environment default covers it (section 6). Calls to the Orchestra platform itself skip these rules: the agent's
|
|
270
271
|
role decides them (section 1). So a machine blocked from the code host still downloads a file through
|
|
271
272
|
`orchestra files get-content`. The worker points each harness's tools at the edge through proxy variables, so
|
|
272
273
|
a service the agent runs in a container needs its name in `NO_PROXY` in the environment's settings.
|
|
@@ -291,10 +292,19 @@ resolved at the edge on an allow); AGENTS.md "Egress And Credentials". Kit: cli/
|
|
|
291
292
|
**What it's for.** It lets agents use a key without seeing it. No agent, no person and no apply output ever shows
|
|
292
293
|
the value.
|
|
293
294
|
|
|
294
|
-
**What it is.** A *secret* is a stored value that can be written and never read back. It declares
|
|
295
|
-
|
|
296
|
-
to one of those hosts. This is *credential injection at the network edge*.
|
|
297
|
-
|
|
295
|
+
**What it is.** A *secret* is a stored value that can be written and never read back. It declares an
|
|
296
|
+
`injection` recipe, the headers it sets and the `hosts` it sets them on, and the network edge adds it to an
|
|
297
|
+
allowed `https` request to one of those hosts. A secret with no recipe is stored only, and the edge never adds it. This is *credential injection at the network edge*. The edge adds it only in two cases:
|
|
298
|
+
|
|
299
|
+
- The request names it with a reference, `orchestra:secret/<id>` or `orchestra:connection/<id>`, in place
|
|
300
|
+
of its key. A `Secret` or `Connection` set as an environment `env` value is written as that reference:
|
|
301
|
+
`ANTHROPIC_API_KEY` for claude, `GH_TOKEN` for `gh`, `GITLAB_TOKEN` for `glab`, `ORCHESTRA_GIT_CREDENTIAL`
|
|
302
|
+
for git. `routeModelsViaGateway({ key })` names the gateway key this way for claude and codex. The
|
|
303
|
+
`linear`, `slack` and `teams` commands take `--connection-id <id>`.
|
|
304
|
+
- The environment's `credentials` list covers the host, for a request that names nothing. The first
|
|
305
|
+
covering entry serves; with `replace: false`, a request carrying its own value keeps it.
|
|
306
|
+
|
|
307
|
+
A request that names nothing and that no default covers leaves as it was sent.
|
|
298
308
|
|
|
299
309
|
**How it relates.** A secret is added only where a network rule lets the request leave (section 5). Never put
|
|
300
310
|
a key in an environment's settings or in instructions: the machine's processes read every setting.
|
|
@@ -325,8 +335,9 @@ network rules carry the option (sections 2 and 5).
|
|
|
325
335
|
**A Claude or Codex subscription.**
|
|
326
336
|
|
|
327
337
|
- *Claude.* `claude setup-token` prints a long-lived token. It is stored as a secret, and the network edge
|
|
328
|
-
adds it to each call to `api.anthropic.com
|
|
329
|
-
|
|
338
|
+
adds it to each call to `api.anthropic.com` that names it. The environment's `env` names the secret in
|
|
339
|
+
`CLAUDE_CODE_OAUTH_TOKEN` by reference, `orchestra:secret/<id>`, beside an empty API key, so no agent
|
|
340
|
+
and no person sees the real one. Never put the token in an environment's settings: they
|
|
330
341
|
are plain text.
|
|
331
342
|
- *Codex.* A personal access token, made by a ChatGPT Business or Enterprise member, or a separate ChatGPT
|
|
332
343
|
sign-in kept on a `/home` volume that every machine using it shares. A Codex sign-in stays off the model
|
|
@@ -337,7 +348,8 @@ network rules carry the option (sections 2 and 5).
|
|
|
337
348
|
|
|
338
349
|
**An Orchestra account, through the model gateway.** The model gateway is a hosted service at
|
|
339
350
|
`models.orchestraworks.ai`. One endpoint reaches OpenAI, Anthropic and open models. A *gateway key* is a key
|
|
340
|
-
to it, stored as a secret.
|
|
351
|
+
to it, stored as a secret. `routeModelsViaGateway({ key })` names it to each harness, and the network edge
|
|
352
|
+
adds it to each model call, so no agent and no person sees it.
|
|
341
353
|
Without it, an agent's first message fails with "Invalid API key".
|
|
342
354
|
|
|
343
355
|
- *Routing.* `orchestra model-configs` sets which providers serve a model, and in which order, so a call
|
|
@@ -348,10 +360,11 @@ Without it, an agent's first message fails with "Invalid API key".
|
|
|
348
360
|
- *A cap.* Each gateway key can carry a monthly cap, set in the console at **Settings › Gateway keys**.
|
|
349
361
|
|
|
350
362
|
**Their own provider API key.** The team's Anthropic or OpenAI API key is a secret that the network edge adds
|
|
351
|
-
to calls straight to the provider, with no gateway in between.
|
|
363
|
+
to calls straight to the provider, with no gateway in between. The environment names it in `ANTHROPIC_API_KEY`
|
|
364
|
+
or `ORCHESTRA_WORKER_OPENAI_API_KEY`, or lists it in `credentials`.
|
|
352
365
|
|
|
353
366
|
**How it relates.** Each option reaches the model through an ordinary allow rule on the model's host, and a
|
|
354
|
-
secret whose `hosts` name that host (sections 5 and 6). An agent on the model gateway turns it on in its model settings (section 2). An agent on a
|
|
367
|
+
secret whose recipe's `hosts` name that host (sections 5 and 6). An agent on the model gateway turns it on in its model settings (section 2). An agent on a
|
|
355
368
|
subscription or its own key turns it off. For plan questions, send the person to **Settings › Plan & usage**
|
|
356
369
|
in the console.
|
|
357
370
|
|
|
@@ -433,12 +446,90 @@ it, puts the code bundle's file id in it, and assigns it to an Engineer Agent.
|
|
|
433
446
|
|
|
434
447
|
**Cannot yet.** Declare items in the factory code. Create them with `orchestra work-items create`.
|
|
435
448
|
|
|
449
|
+
### Checks and gates
|
|
450
|
+
|
|
451
|
+
<!-- Sources, on develop at b155aff3a8: docs/architecture/work-plane.md:197-205 (a reopen clears every check;
|
|
452
|
+
one vote per writer per key; counts; nothing declares a key ahead), :274-277 (approval as an IAM-restricted
|
|
453
|
+
key; isAssignee; passUsers), :480-486 (what requires reads), :490-493 (POST /decisions writes nothing), :575
|
|
454
|
+
(one key per grant), :634 (.result is the latest write; .writer.* is the latest writer; counts read 0 when
|
|
455
|
+
absent), :656-657 (setCheck, clearCheck; the author holds the key at save), :673 (body {result, summary?,
|
|
456
|
+
evidence?}; owner and admin write every key);
|
|
457
|
+
docs/architecture/iam.md:48-56 (statement shape), :1055 (no managed role but owner and admin holds the
|
|
458
|
+
action); cli/src/constructs/pipeline.ts:218-228 (allowCheck; apply writes no IAM);
|
|
459
|
+
cli/src/engine/pipeline-reconcile.ts:441-455 (the printed notice); cli/src/generated/cli-commands.json,
|
|
460
|
+
operationId setWorkItemCheck (set-check flags: --result, --summary; evidence only through --body);
|
|
461
|
+
platform/src/main/kotlin/ai/livingcomputers/softwarefactory/workplane/controller/WorkplaneWorkItemController.kt:267
|
|
462
|
+
(the item path takes an id or a slug). -->
|
|
463
|
+
|
|
464
|
+
**What it's for.** A gate keeps an item out of a stage until the work passed a test, a review or a person's
|
|
465
|
+
approval.
|
|
466
|
+
|
|
467
|
+
**What it is.** A *check* is a named key on an item, such as `ci`, `review` or `approval`. Each writer has
|
|
468
|
+
one *vote* on a key: `PASS`, `FAIL` or `SKIP`, with an optional summary and evidence links. A writer's new
|
|
469
|
+
vote replaces its own earlier vote. Nobody declares a key ahead: a stage's `requires` names the keys it
|
|
470
|
+
reads. A *gate* is a stage's `requires` list. The platform reads it when something moves the item into the
|
|
471
|
+
stage, and refuses the move when a condition is false. A gate never asks anybody: it reads the stored votes.
|
|
472
|
+
|
|
473
|
+
A stage's `requires` can read these fields of a key:
|
|
474
|
+
|
|
475
|
+
| Field | Value |
|
|
476
|
+
|---|---|
|
|
477
|
+
| `checks.<key>.result` | The result of the latest vote: `PASS`, `FAIL` or `SKIP` |
|
|
478
|
+
| `checks.<key>.pass`, `.fail` | How many writers voted `PASS`, `FAIL` (0 when nobody voted) |
|
|
479
|
+
| `checks.<key>.passUsers`, `.passAgents` | How many people, agents, voted `PASS` |
|
|
480
|
+
| `checks.<key>.writer.isAssignee` | Whether the writer of the latest vote held the item when it voted |
|
|
481
|
+
|
|
482
|
+
`.writer.isAssignee` reads the latest vote only. With two approvers, it cannot prove that neither of them
|
|
483
|
+
is the assignee.
|
|
484
|
+
|
|
485
|
+
**Who can write a key.** IAM decides, one key at a time: the action `work-items:setWorkItemCheck` on the
|
|
486
|
+
resource `work-items/*/checks/<key>`. Owner and admin write every key. No other built-in role holds the
|
|
487
|
+
action, so each agent, service account or group of people that votes needs a policy for its key. A
|
|
488
|
+
policy is a list of statements, such as:
|
|
489
|
+
|
|
490
|
+
```json
|
|
491
|
+
{ "effect": "allow", "actions": ["work-items:setWorkItemCheck"], "resources": ["work-items/*/checks/ci"] }
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
In the factory code, `pipeline.allowCheck(agent, "review")` names that grant. Apply does not write it: it
|
|
495
|
+
prints the statement for an administrator to attach to the agent's membership.
|
|
496
|
+
|
|
497
|
+
**How a vote is written.**
|
|
498
|
+
|
|
499
|
+
- The command: `orchestra work-items set-check <item> <key> --result PASS --summary "…"`. `<item>` is the
|
|
500
|
+
item's id or its slug, such as `bug-12`. Evidence links go in a JSON file passed with `--body @vote.json`.
|
|
501
|
+
- The API: `PUT /work-items/{id}/checks/{key}` with `{result, summary?, evidence?}`.
|
|
502
|
+
- A workflow rule: `setCheck` writes the rule's own vote, and `clearCheck` removes every vote on a key. The
|
|
503
|
+
person who applies the rule must hold the key.
|
|
504
|
+
- A judge: a rule's `evaluate` asks an agent to vote (section 11).
|
|
505
|
+
|
|
506
|
+
**A reopen clears every check.** A move from a closed stage (`DONE` or `CANCELED`) back to an open one
|
|
507
|
+
removes every vote on every key, before the target stage's gate is read.
|
|
508
|
+
|
|
509
|
+
**Not a check writer.** `POST /decisions` reads the text typed into the console's "+ Create" box and
|
|
510
|
+
proposes the fields of a new item. It writes nothing, and it never writes a check.
|
|
511
|
+
|
|
512
|
+
**Recipes.** The orchestra-fdk skill's `references/authoring.md`, "Check gates", has five complete
|
|
513
|
+
examples: a model judge, a CI result, a script judge, a two-person approval and a decision model judge.
|
|
514
|
+
|
|
436
515
|
## 11. Workflow rules and the judge
|
|
437
516
|
|
|
438
517
|
<!-- Sources, on develop at 19459f9ebb: docs/architecture/multi-agent-workflows.md:18-30 (a workflow is a named,
|
|
439
518
|
versioned list of rules for one pipeline); docs/architecture/work-plane.md:364-370 (workflow entries pick which
|
|
440
519
|
version runs on which items), :266-279 (evaluate asks a judge to decide one check; refused when the judge is the
|
|
441
|
-
assignee), :573 (rule actions); AGENTS.md "API Conventions" (no runs, no graph engine).
|
|
520
|
+
assignee), :573 (rule actions); AGENTS.md "API Conventions" (no runs, no graph engine). Judge facts, on develop
|
|
521
|
+
at b155aff3a8: docs/architecture/work-plane.md:279-285 (the judge writes under its own grant, else 403; a gate
|
|
522
|
+
never calls a judge; a failed judge turn writes no SESSION_FAILED, so an inStageFor rule re-runs evaluate), :658
|
|
523
|
+
(evaluate starts or wakes the judge's session); platform/src/main/kotlin/ai/livingcomputers/softwarefactory/
|
|
524
|
+
workplane/service/WorkItemSessionService.kt:188-208 (the turn's text names the item, the criterion and the PUT
|
|
525
|
+
line); worker/script-harness/index.js:682-717 (a script turn's exit code sets the session outcome, not a check).
|
|
526
|
+
A decision model judge, on 3664271a69: https://docs.typesafe.ai/api.md and platform/src/main/kotlin/ai/
|
|
527
|
+
livingcomputers/softwarefactory/integration/typesafe/TypeSafeDecisionClient.kt (choice and noul questions);
|
|
528
|
+
docs/architecture/work-plane.md:496-498 (a decision model picks among options and writes no text), :562-564 (the
|
|
529
|
+
platform's own calls run on its key). The session lookup, on 20b09bc114: WorkItemSessionService.kt:332-392
|
|
530
|
+
(converse finds the judge's link on the item, else startConversation starts a session with a link to that item
|
|
531
|
+
alone); docs/architecture/work-plane.md:193-194 (session keeps the items a link names); docs/architecture/
|
|
532
|
+
fwp.md:1060-1063 (ORCHESTRA_SESSION_ID on every harness process, the script's command included). -->
|
|
442
533
|
|
|
443
534
|
**What it's for.** Rules do the routine moves, so people and agents do not have to: assign the next agent, move
|
|
444
535
|
an item, ask for a review.
|
|
@@ -451,6 +542,25 @@ what it does: move, assign, create an item, or evaluate. There are no workflow r
|
|
|
451
542
|
the judge's session on the item. The judge writes the check, and a stage that requires it then lets the item in.
|
|
452
543
|
The item's own assignee cannot be its judge.
|
|
453
544
|
|
|
545
|
+
A judge can also be a script agent that asks a *decision model*, such as TypeSafe's Jev, with the customer's own
|
|
546
|
+
key. That model picks one of a fixed list of options, or gives the probability of yes, and writes no text. The
|
|
547
|
+
recipe is in section 10's Recipes.
|
|
548
|
+
|
|
549
|
+
**What a judge must know.**
|
|
550
|
+
|
|
551
|
+
- The judge's turn names the item, the key and the criterion, and the `PUT /work-items/<id>/checks/<key>`
|
|
552
|
+
call to make. The judge must make that call itself, for example with `orchestra work-items set-check`.
|
|
553
|
+
The platform does not read the judge's reply or its session outcome into the check.
|
|
554
|
+
- The judge's session is on that one item: a judge of two items has two sessions. A program can find its
|
|
555
|
+
item with `orchestra work-items list --session "$ORCHESTRA_SESSION_ID"` and read none of the turn's text.
|
|
556
|
+
- The judge needs its own grant on the key (section 10). Without it, its write gets a 403, and the gate
|
|
557
|
+
stays shut.
|
|
558
|
+
- A rule that names the item's assignee as the judge is refused, with a note in the item's feed.
|
|
559
|
+
- A failed judge turn writes no `SESSION_FAILED` entry, so no failure rule sees it. To recover, add a rule
|
|
560
|
+
on `inStageFor` that runs `evaluate` again while the check is still absent.
|
|
561
|
+
- A gate does not start a judge. Something must run `evaluate` before the move, usually a rule on entering
|
|
562
|
+
the stage before the gated one.
|
|
563
|
+
|
|
454
564
|
**How it relates.** Rules move items through stages (section 9) and write to checks (section 10).
|
|
455
565
|
|
|
456
566
|
**In the starter.** None yet. Agents and people move items by hand.
|
|
@@ -647,7 +757,7 @@ local/launch/modelkey.go (model key carriers per harness, the gateway address va
|
|
|
647
757
|
worker/facts/families.json (how each harness takes the gateway address); on develop at f62fad1481,
|
|
648
758
|
agents/runtime/assembly/common/placeholder-env (the images' placeholder ANTHROPIC_API_KEY),
|
|
649
759
|
LauncherProperties.kt (the gallery images at Versions/latest), launcher/config/config.go (Dsv5 default);
|
|
650
|
-
worker/facts/families.json (the ORCHESTRA_WORKER_ names), worker/service/
|
|
760
|
+
worker/facts/families.json (the ORCHESTRA_WORKER_ names), worker/service/service.go (OrchestraWorker, and the previous SfdkWorker),
|
|
651
761
|
infra/packer/azure-windows-runtime.pkr.hcl (the startup task), launcher/cloud/cloud.go (the VM tags);
|
|
652
762
|
the proven list is the test run of 2026-10-05. -->
|
|
653
763
|
|
|
@@ -677,8 +787,8 @@ the proven list is the test run of 2026-10-05. -->
|
|
|
677
787
|
1. The environment's `env` (`provisionSpec.env`). A declared value replaces our image's placeholder,
|
|
678
788
|
never a real value. The platform stores `env` values in plain text, an environment read returns
|
|
679
789
|
them, and the machine's startup data carries them.
|
|
680
|
-
2. Baked into the team's image at machine scope: on Windows the `
|
|
681
|
-
registry value, on Linux a drop-in on `
|
|
790
|
+
2. Baked into the team's image at machine scope: on Windows the `OrchestraWorker` service's
|
|
791
|
+
`Environment` registry value, on Linux a drop-in on `orchestra-worker.service`.
|
|
682
792
|
3. The `onStartAgent` hook writes the harness's own key file: `.claude/.credentials.json` for a Claude
|
|
683
793
|
sign-in, `.codex/auth.json` for `codex`, `.pi/agent/auth.json` for `pi`. A raw Claude API key has
|
|
684
794
|
no file.
|
|
@@ -686,6 +796,10 @@ the proven list is the test run of 2026-10-05. -->
|
|
|
686
796
|
`ORCHESTRA_WORKER_CLAUDE_OAUTH_TOKEN` for a Claude subscription token; `ORCHESTRA_WORKER_OPENAI_API_KEY`
|
|
687
797
|
or `ORCHESTRA_WORKER_CODEX_PERSONAL_ACCESS_TOKEN` for `codex`. With a gateway key, keep the agent's
|
|
688
798
|
model gateway on. The platform sets the gateway address.
|
|
799
|
+
- An install replaces the service an earlier release registered as `SfdkWorker` on Windows,
|
|
800
|
+
`sfdk-worker.service` on Linux or `ai.livingcomputers.sfdk.worker` on macOS. The new ones are
|
|
801
|
+
`OrchestraWorker`, `orchestra-worker.service` and `ai.livingcomputers.orchestra.worker`. Change your own
|
|
802
|
+
scripts that name the old ones.
|
|
689
803
|
- Never restart the worker service to load a key. A restart after the worker registered stops the
|
|
690
804
|
machine's work, and the platform parks the VM.
|
|
691
805
|
- The details: the orchestra-fdk skill's `references/environment.md`, "Tokens on a compute provider's
|