@awebai/oats 0.29.4 → 0.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -6
- package/bin/oats.mjs +194 -50
- package/docs/capabilities.md +160 -171
- package/docs/capability-manifest.schema.json +6 -11
- package/docs/configuration.md +213 -64
- package/docs/design/2026-09-16-knowledge-capability-contract.md +36 -50
- package/docs/design/2026-09-23-workspace-module-contracts.md +377 -544
- package/docs/design/2026-09-26-okf-knowledge-operations.md +132 -357
- package/docs/design/2026-09-27-team-model-v2.md +97 -117
- package/docs/design/2026-09-28-automations-trust.md +38 -0
- package/docs/design/2026-09-28-soul-launch-preference.md +63 -0
- package/docs/design/HISTORY.md +65 -0
- package/docs/design/README.md +23 -54
- package/docs/desktop-cli-api.md +1787 -1777
- package/docs/desktop.md +30 -91
- package/docs/execution-targets.md +146 -292
- package/docs/first-team.md +31 -17
- package/docs/implementation.md +77 -288
- package/docs/integrations.md +118 -320
- package/docs/knowledge-capability-authoring.md +25 -52
- package/docs/knowledge-reference/acceptance.md +3 -3
- package/docs/knowledge-reference/adoption.md +1 -1
- package/docs/knowledge-reference/harvester.md +2 -2
- package/docs/knowledge-reference/package-craft.md +3 -3
- package/docs/knowledge-reference/provider-mapping.md +3 -6
- package/docs/knowledge-reference/reader-capture.md +3 -3
- package/docs/knowledge-theory.md +62 -166
- package/docs/knowledge.md +225 -404
- package/docs/layers.md +42 -97
- package/docs/oats-local.schema.json +58 -5
- package/docs/oats-membership.schema.json +1 -8
- package/docs/oats-package.schema.json +5 -5
- package/docs/oats-workspace.schema.json +8 -22
- package/docs/official-catalog.md +25 -28
- package/docs/packages.md +45 -63
- package/docs/plans/0.30-close-out.md +83 -0
- package/docs/release-lane.md +82 -0
- package/docs/release-notes/oats-framework-v1.1.3.md +10 -8
- package/docs/release-notes/v0.19.0.md +48 -147
- package/docs/release-notes/v0.19.1.md +2 -3
- package/docs/release-notes/v0.19.3.md +2 -15
- package/docs/release-notes/v0.20.0.md +0 -15
- package/docs/release-notes/v0.22.0.md +71 -138
- package/docs/release-notes/v0.22.1.md +42 -90
- package/docs/release-notes/v0.22.10.md +1 -1
- package/docs/release-notes/v0.22.11.md +1 -47
- package/docs/release-notes/v0.22.12.md +4 -13
- package/docs/release-notes/v0.22.13.md +1 -42
- package/docs/release-notes/v0.22.14.md +3 -11
- package/docs/release-notes/v0.22.15.md +1 -46
- package/docs/release-notes/v0.22.16.md +6 -8
- package/docs/release-notes/v0.22.18.md +1 -99
- package/docs/release-notes/v0.22.19.md +3 -14
- package/docs/release-notes/v0.22.2.md +6 -15
- package/docs/release-notes/v0.22.3.md +0 -1
- package/docs/release-notes/v0.22.4.md +1 -14
- package/docs/release-notes/v0.22.5.md +2 -12
- package/docs/release-notes/v0.22.6.md +0 -3
- package/docs/release-notes/v0.23.0.md +9 -25
- package/docs/release-notes/v0.23.1.md +9 -25
- package/docs/release-notes/v0.23.2.md +2 -4
- package/docs/release-notes/v0.24.0.md +56 -97
- package/docs/release-notes/v0.24.1.md +7 -11
- package/docs/release-notes/v0.24.10.md +34 -45
- package/docs/release-notes/v0.24.11.md +12 -20
- package/docs/release-notes/v0.24.12.md +35 -48
- package/docs/release-notes/v0.24.13.md +34 -41
- package/docs/release-notes/v0.24.2.md +9 -13
- package/docs/release-notes/v0.24.3.md +7 -11
- package/docs/release-notes/v0.24.4.md +6 -6
- package/docs/release-notes/v0.24.5.md +6 -10
- package/docs/release-notes/v0.24.6.md +2 -5
- package/docs/release-notes/v0.24.7.md +46 -75
- package/docs/release-notes/v0.24.8.md +58 -96
- package/docs/release-notes/v0.24.9.md +38 -54
- package/docs/release-notes/v0.25.0.md +59 -76
- package/docs/release-notes/v0.25.1.md +57 -81
- package/docs/release-notes/v0.25.2.md +51 -70
- package/docs/release-notes/v0.25.3.md +11 -13
- package/docs/release-notes/v0.25.4.md +9 -13
- package/docs/release-notes/v0.25.5.md +3 -5
- package/docs/release-notes/v0.25.6.md +20 -29
- package/docs/release-notes/v0.25.7.md +5 -7
- package/docs/release-notes/v0.25.8.md +26 -39
- package/docs/release-notes/v0.26.0.md +175 -646
- package/docs/release-notes/v0.27.0.md +4 -5
- package/docs/release-notes/v0.27.1.md +4 -6
- package/docs/release-notes/v0.27.2.md +1 -1
- package/docs/release-notes/v0.28.0.md +57 -124
- package/docs/release-notes/v0.29.0.md +89 -208
- package/docs/release-notes/v0.29.1.md +1 -1
- package/docs/release-notes/v0.29.2.md +3 -4
- package/docs/release-notes/v0.30.0.md +205 -0
- package/docs/release-notes/v0.30.1.md +123 -0
- package/docs/schedules.md +280 -363
- package/docs/servers.md +99 -117
- package/docs/soul.schema.json +2 -9
- package/docs/souls-and-instances.md +145 -158
- package/docs/workspaces.md +137 -215
- package/lib/automations.mjs +21 -6
- package/lib/core.mjs +226 -74
- package/lib/instance-events.mjs +1 -1
- package/lib/instance-inspect.mjs +109 -34
- package/lib/instance-lifecycle.mjs +14 -1
- package/lib/instance-resolution.mjs +26 -27
- package/lib/launch-preference.mjs +87 -0
- package/lib/materialize.mjs +3 -3
- package/lib/packages.mjs +1 -1
- package/lib/resolve.mjs +30 -88
- package/lib/schedule.mjs +1 -1
- package/lib/teams-verbs.mjs +195 -0
- package/lib/teams.mjs +190 -0
- package/lib/triggers.mjs +2 -2
- package/lib/workspace.mjs +54 -147
- package/package-catalog.json +10 -16
- package/package.json +1 -3
- package/skills/oats-getting-started/SKILL.md +25 -13
- package/capabilities/oats-authoring/LICENSE +0 -21
- package/capabilities/oats-authoring/oats-package.json +0 -11
- package/capabilities/oats-authoring/oats.json +0 -12
- package/capabilities/oats-authoring/skills/integration-authoring/SKILL.md +0 -84
- package/capabilities/oats-authoring/skills/skill-craft/SKILL.md +0 -109
- package/capabilities/oats-authoring/skills/soul-craft/SKILL.md +0 -116
- package/capabilities/oats-aweb/bin/oats-aweb-binding.mjs +0 -11
- package/capabilities/oats-aweb/bin/oats-aweb.mjs +0 -1338
- package/capabilities/oats-aweb/injects/aweb.md +0 -47
- package/capabilities/oats-aweb/lib/binding-wire.mjs +0 -356
- package/capabilities/oats-aweb/lib/captured-execution.mjs +0 -91
- package/capabilities/oats-aweb/lib/captured-native.mjs +0 -91
- package/capabilities/oats-aweb/lib/grant-custody.mjs +0 -38
- package/capabilities/oats-aweb/lib/invocation-shape.mjs +0 -135
- package/capabilities/oats-aweb/lib/portable-binding.mjs +0 -146
- package/capabilities/oats-aweb/lib/session-readiness.mjs +0 -56
- package/capabilities/oats-aweb/lib/wake-receive.mjs +0 -56
- package/capabilities/oats-aweb/oats.json +0 -208
- package/capabilities/oats-aweb/skills/LICENSE +0 -21
- package/capabilities/oats-aweb/skills/VENDORED.md +0 -31
- package/capabilities/oats-aweb/skills/aweb-identity/SKILL.md +0 -201
- package/capabilities/oats-aweb/skills/aweb-messaging/SKILL.md +0 -161
- package/capabilities/oats-aweb/skills/aweb-messaging/references/messaging-scenarios.md +0 -61
- package/capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md +0 -116
- package/capabilities/oats-aweb/skills/aweb-team-membership/references/team-membership-reference.md +0 -74
- package/capabilities/oats-aweb/skills/oats-aweb/SKILL.md +0 -216
- package/capabilities/oats-jira/bin/oats-jira.mjs +0 -40
- package/capabilities/oats-jira/injects/jira.md +0 -10
- package/capabilities/oats-jira/oats.json +0 -22
- package/capabilities/oats-jira/skills/jira-tasks/SKILL.md +0 -179
- package/capabilities/oats-linear/bin/oats-linear-hook.mjs +0 -34
- package/capabilities/oats-linear/bin/oats-linear.mjs +0 -344
- package/capabilities/oats-linear/injects/linear.md +0 -8
- package/capabilities/oats-linear/oats.json +0 -24
- package/capabilities/oats-linear/skills/linear-tasks/SKILL.md +0 -223
- package/capabilities/oats-okf/bin/oats-okf-binding.mjs +0 -14
- package/capabilities/oats-okf/bin/oats-okf.mjs +0 -209
- package/capabilities/oats-okf/injects/okf.md +0 -42
- package/capabilities/oats-okf/lib/binding-wire.mjs +0 -348
- package/capabilities/oats-okf/lib/captured-worker.mjs +0 -109
- package/capabilities/oats-okf/lib/config.mjs +0 -124
- package/capabilities/oats-okf/lib/consult.mjs +0 -518
- package/capabilities/oats-okf/lib/harvest-status.mjs +0 -88
- package/capabilities/oats-okf/lib/harvest-switch.mjs +0 -94
- package/capabilities/oats-okf/lib/inspection.mjs +0 -119
- package/capabilities/oats-okf/lib/invocation-context.mjs +0 -111
- package/capabilities/oats-okf/lib/invocation-shape.mjs +0 -135
- package/capabilities/oats-okf/lib/io.mjs +0 -118
- package/capabilities/oats-okf/lib/migration.mjs +0 -137
- package/capabilities/oats-okf/lib/okf-validate.mjs +0 -123
- package/capabilities/oats-okf/lib/portable-binding.mjs +0 -199
- package/capabilities/oats-okf/lib/source-contract.mjs +0 -46
- package/capabilities/oats-okf/lib/sources.mjs +0 -424
- package/capabilities/oats-okf/lib/stores.mjs +0 -473
- package/capabilities/oats-okf/lib/worker.mjs +0 -497
- package/capabilities/oats-okf/oats.json +0 -148
- package/capabilities/oats-okf/schemas/okf-base.schema.json +0 -46
- package/capabilities/oats-okf/schemas/okf-bindings.schema.json +0 -112
- package/capabilities/oats-okf/schemas/okf-portable-declaration.schema.json +0 -87
- package/capabilities/oats-okf/schemas/okf-portable-payload.schema.json +0 -113
- package/capabilities/oats-okf/schemas/okf-soul.schema.json +0 -37
- package/capabilities/oats-okf/skills/okf-consultation/SKILL.md +0 -144
- package/capabilities/oats-okf/skills/okf-consultation/references/consult.md +0 -86
- package/capabilities/oats-okf/skills/okf-instance-knowledge/SKILL.md +0 -104
- package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +0 -140
- package/capabilities/oats-okf-harvest/injects/harvester.md +0 -12
- package/capabilities/oats-okf-harvest/oats.json +0 -26
- package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +0 -168
- package/capabilities/oats-okf-harvest/skills/knowledge-theory/SKILL.md +0 -192
- package/capabilities/oats-okf-harvest/skills/okf-authoring/SKILL.md +0 -151
- package/capabilities/oats-okf-harvest/skills/okf-authoring/scripts/okf-validate.mjs +0 -123
- package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +0 -170
- package/capabilities/oats-okf-maintenance/injects/maintainer.md +0 -12
- package/capabilities/oats-okf-maintenance/lib/provenance.mjs +0 -50
- package/capabilities/oats-okf-maintenance/oats.json +0 -21
- package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +0 -159
- package/capabilities/oats-okf-maintenance/skills/knowledge-theory/SKILL.md +0 -192
- package/capabilities/oats-okf-maintenance/skills/okf-authoring/SKILL.md +0 -151
- package/capabilities/oats-okf-maintenance/skills/okf-authoring/scripts/okf-validate.mjs +0 -123
- package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +0 -146
- package/capabilities/oats-review/injects/review.md +0 -69
- package/capabilities/oats-review/oats.json +0 -10
- package/capabilities/oats-review/skills/code-review/SKILL.md +0 -44
- package/capabilities/oats-review/skills/security-review/SKILL.md +0 -59
- package/docs/conventions.md +0 -90
- package/docs/design/2026-09-07-architecture-reassessment.md +0 -131
- package/docs/design/2026-09-07-desktop-souls-capabilities.md +0 -50
- package/docs/design/2026-09-07-mobile-agent-management-proposal.md +0 -228
- package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +0 -558
- package/docs/design/2026-09-13-knowledge-and-memory-direction.md +0 -744
- package/docs/design/2026-09-13-knowledge-implementation.md +0 -127
- package/docs/design/2026-09-13-knowledge-location-contract.md +0 -340
- package/docs/design/2026-09-14-artifact-retention-contract.md +0 -190
- package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +0 -708
- package/docs/design/2026-09-14-portable-souls-contract-amendments.md +0 -85
- package/docs/design/2026-09-14-portable-souls-explainer.md +0 -750
- package/docs/design/2026-09-15-captured-dispatch.md +0 -127
- package/docs/design/2026-09-15-captured-resolution-records.md +0 -143
- package/docs/design/2026-09-15-package-preparation.md +0 -100
- package/docs/design/2026-09-15-portable-data-contract.md +0 -121
- package/docs/design/2026-09-15-portable-declarations.md +0 -189
- package/docs/design/2026-09-15-portable-souls-handoff.md +0 -150
- package/docs/design/2026-09-15-portable-souls-implementation.md +0 -417
- package/docs/design/2026-09-15-selection-lock-and-approval.md +0 -122
- package/docs/design/2026-09-15-source-observation.md +0 -119
- package/docs/design/2026-09-16-captured-admission.md +0 -77
- package/docs/design/2026-09-16-captured-helper-dispatch.md +0 -105
- package/docs/design/2026-09-16-captured-launch-inputs.md +0 -42
- package/docs/design/2026-09-16-command-profile-preparation.md +0 -86
- package/docs/design/2026-09-16-fresh-install-first-rollout.md +0 -47
- package/docs/design/2026-09-16-fresh-operator-walkthrough.md +0 -282
- package/docs/design/2026-09-16-messaging-capability-contract.md +0 -59
- package/docs/design/2026-09-16-portable-migration-evidence.md +0 -158
- package/docs/design/2026-09-16-portable-onboarding.md +0 -179
- package/docs/design/2026-09-16-prepare-request-transport.md +0 -26
- package/docs/design/2026-09-16-provider-binding-codecs.md +0 -98
- package/docs/design/2026-09-16-provider-binding-wire.md +0 -274
- package/docs/design/2026-09-17-capability-helper-input-contract.md +0 -95
- package/docs/design/2026-09-17-captured-backend-parity.md +0 -53
- package/docs/design/2026-09-17-captured-native-start.md +0 -58
- package/docs/design/2026-09-17-portable-boundary-hookup.md +0 -19
- package/docs/design/2026-09-17-portable-boundary-resources.md +0 -52
- package/docs/design/2026-09-17-public-captured-start.md +0 -108
- package/docs/design/2026-09-17-public-prepare-request.md +0 -90
- package/docs/design/2026-09-18-captured-pi-host.md +0 -205
- package/docs/design/2026-09-18-first-cut-release-checklist.md +0 -131
- package/docs/design/2026-09-18-herdr-protocol-compatibility.md +0 -60
- package/docs/design/2026-09-20-redesign-program-board.md +0 -142
- package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +0 -289
- package/docs/design/2026-09-20-workspace-onboarding-public.md +0 -207
- package/docs/design/2026-09-22-desktop-parity-seams.md +0 -58
- package/docs/design/2026-09-23-simplified-workspace-model.md +0 -711
- package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +0 -65
- package/docs/design/2026-09-24-desktop-phase-f-boundary.md +0 -242
- package/docs/design/2026-09-24-phase-d-plan.md +0 -305
- package/docs/design/2026-09-25-teams-contract.md +0 -258
- package/docs/design/2026-09-26-desktop-design-brief-architecture.md +0 -241
- package/docs/design/desktop-ux-plan.md +0 -362
- package/docs/design/launch-configurations.md +0 -168
- package/docs/design/okf-mirror-provenance.md +0 -105
- package/docs/design/operations-contract.md +0 -141
- package/docs/oats-member.schema.json +0 -38
- package/skills/integration-authoring/SKILL.md +0 -84
- package/skills/oats-support/SKILL.md +0 -79
- package/skills/skill-craft/SKILL.md +0 -109
- package/skills/soul-craft/SKILL.md +0 -116
package/docs/servers.md
CHANGED
|
@@ -1,148 +1,130 @@
|
|
|
1
1
|
# Servers: running instances on another machine
|
|
2
2
|
|
|
3
|
-
A **server** is another machine with its own
|
|
4
|
-
OpenSSH
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
with the transport work).
|
|
3
|
+
A **server** is another machine with its own OATS and deployment, reached
|
|
4
|
+
over OpenSSH. `--server <id>` runs a command on that machine's OATS with the
|
|
5
|
+
same flags and JSON envelope as a local call. The server's kernel does the
|
|
6
|
+
work ([execution-targets.md](execution-targets.md)); this machine routes and
|
|
7
|
+
keeps a saved route per remote instance.
|
|
9
8
|
|
|
10
9
|
## Register
|
|
11
10
|
|
|
12
11
|
```bash
|
|
13
12
|
oats server add build --ssh build-host --workspace /srv/team --oats /usr/local/bin/oats
|
|
14
|
-
oats server check build # ssh reachability, remote
|
|
13
|
+
oats server check build # ssh reachability, remote version, workspace roster; changes nothing
|
|
15
14
|
oats server list
|
|
15
|
+
oats server remove build
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
- `--ssh` is an OpenSSH host alias or host name
|
|
19
|
-
verification
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
- `--
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
18
|
+
- `--ssh` is an OpenSSH host alias or host name, never `user@host` or an
|
|
19
|
+
option. Users, keys and host verification belong in `~/.ssh/config`.
|
|
20
|
+
Connections are non-interactive (`BatchMode=yes`): a prompt fails fast.
|
|
21
|
+
- `--workspace` is the absolute path of the deployment directory on the
|
|
22
|
+
server: the directory that holds its `oats-local.yaml`
|
|
23
|
+
([configuration.md](configuration.md)). Routed commands run there as
|
|
24
|
+
`--dir <workspace>`.
|
|
25
|
+
- `--oats` is the remote executable (default: `oats` on the remote PATH).
|
|
26
|
+
- `--path` prepends directories to the minimal remote PATH of every routed
|
|
27
|
+
command (`~/.local/bin:/opt/pi/bin`), where the remote spawn looks for the
|
|
28
|
+
harness binary.
|
|
29
|
+
- `--herdr` records the remote Herdr path in the registration and in each
|
|
30
|
+
saved route. Routed commands do not pass it on; the remote kernel finds
|
|
31
|
+
`herdr` on its own PATH.
|
|
32
|
+
- `--label` sets a display name. `--replace` overwrites an existing id.
|
|
31
33
|
- Registrations live in `~/.oats/servers.json` on this machine, never in a
|
|
32
|
-
repository
|
|
34
|
+
repository.
|
|
33
35
|
|
|
34
36
|
## Run there
|
|
35
37
|
|
|
36
38
|
```bash
|
|
37
39
|
oats spawn dev --server build --purpose fix-123 --task-file task.md
|
|
38
40
|
oats status --server build
|
|
41
|
+
oats session attach --server build --instance dev-fix-123
|
|
39
42
|
oats retire dev-fix-123 --server build
|
|
40
43
|
```
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
workspace
|
|
45
|
+
Arguments are quoted for the remote shell. Local files (`--task-file`,
|
|
46
|
+
`--wake-file`, a schedule or launch-configuration `--file`) are read here and
|
|
47
|
+
sent as text or on stdin, never as paths.
|
|
48
|
+
|
|
49
|
+
| Command | Where it runs | The server must advertise |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `spawn` | registered workspace | the requested harness, backend and yolo option; `launch-config` for `--launch-config`; `schedule` for a wake schedule |
|
|
52
|
+
| `status` | registered workspace | |
|
|
53
|
+
| `retire` | saved route | `retire-home` to retire by exact home |
|
|
54
|
+
| `session inspect`, `session attach` | saved route | `session` |
|
|
55
|
+
| `session start`, `session restart` | saved route | `session-start`; `session-restart`; `launch-config` when `--launch-config`, `--harness` or `--yolo` is given |
|
|
56
|
+
| `session upload` | saved route | `session-upload` |
|
|
57
|
+
| `okf harvest --instance <name>` | the saved home | `harvest` |
|
|
58
|
+
| `schedule ...` | registered workspace | `schedule` |
|
|
59
|
+
| `launch-config list\|set\|remove\|preview` | `--dir`, a saved route, or the registered workspace | `launch-config` |
|
|
60
|
+
| `inspect`, `operation run` | `--dir`, a saved route, or the registered workspace | `operations` |
|
|
61
|
+
|
|
62
|
+
Before every routed command except `status`, the kernel reads the server's
|
|
63
|
+
`oats version --json`. A remote OATS older than 0.22.1 is refused, and so is a
|
|
64
|
+
missing feature (`E_REMOTE_INCOMPATIBLE`), before anything is sent. A spawn is
|
|
65
|
+
checked against the harness it would use (the flag, or the soul's default as
|
|
66
|
+
the remote roster reports it). A host that advertises no harness list is
|
|
67
|
+
assumed to run only pi and claude, on tmux, with no launch options.
|
|
68
|
+
|
|
69
|
+
**Addressing an instance.** Instance commands take `--instance <name>` (spawned
|
|
70
|
+
from this machine) or `--home </remote/home>`. The home is the identity; use it
|
|
71
|
+
when two souls on the host own same-named instances. A name and a home that
|
|
72
|
+
disagree are refused (`E_HOME_MISMATCH`).
|
|
73
|
+
|
|
74
|
+
**`--dir` with `--server`.** For `inspect`, `operation` and `launch-config`,
|
|
75
|
+
an explicit `--dir` names a directory on the server and travels as is. Every
|
|
76
|
+
other routed command refuses `--dir`; its scope comes from the registration.
|
|
77
|
+
|
|
78
|
+
**Not routed.** `session input` runs on the execution host, where schedules
|
|
79
|
+
and messaging capabilities call it. `session restart --stop-grace` is refused
|
|
80
|
+
with `--server`; the remote default applies. `session attach --print` shows
|
|
81
|
+
the ssh command without running it.
|
|
82
|
+
|
|
83
|
+
## The roster and harvest
|
|
56
84
|
|
|
57
85
|
```bash
|
|
58
|
-
oats
|
|
86
|
+
oats server roster --json # one group per server and target
|
|
87
|
+
oats okf harvest --server build --instance dev-fix-123 # the harvest, run in the saved home
|
|
59
88
|
```
|
|
60
89
|
|
|
61
|
-
The
|
|
62
|
-
|
|
63
|
-
the remote
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
`
|
|
69
|
-
|
|
70
|
-
and `ssh -t <host> tmux attach -t oats` remains the way in.
|
|
90
|
+
The **roster** is what the Desktop shows: one group per server id and route
|
|
91
|
+
target (host and workspace), with the registration (present or not), the
|
|
92
|
+
probe result, the remote souls, the instances joined with saved routes
|
|
93
|
+
(`savedRoute`, `running` or `null` when unknown, `retirePending`,
|
|
94
|
+
`rollbackIncomplete`, `missingRemotely`), and `retireFailures` (deferred
|
|
95
|
+
self-retirements that failed there). A removed or edited registration keeps
|
|
96
|
+
its group from the saved routes. State is pulled on every call within
|
|
97
|
+
`--per-target` (default 20 s) of a total `--budget` (default 45 s); a group
|
|
98
|
+
not reached is reported with `E_ROSTER_BUDGET`. `--server <id>` narrows it.
|
|
71
99
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
oats okf harvest --server build --instance dev-fix-123 # the knowledge harvest, run in the saved home
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
The **roster** is what the Desktop projects: one group per server id and
|
|
78
|
-
route target (host and workspace), each with the registration (present or
|
|
79
|
-
not), the probe (`ok`, or the error that stopped it), the souls the remote
|
|
80
|
-
reports with their `agentsRoot`, the instances joined with this machine's
|
|
81
|
-
saved routes (`savedRoute`; `running` true/false, or `null` when the remote
|
|
82
|
-
could not be asked; `retirePending`; `rollbackIncomplete` for a quarantined
|
|
83
|
-
home; `missingRemotely` when a saved route names an instance the reachable
|
|
84
|
-
remote no longer lists), and `retireFailures` (deferred self-retirements
|
|
85
|
-
that failed there and need `oats retire` again). A registration that was
|
|
86
|
-
removed or edited keeps its group from the saved routes alone, so nothing
|
|
87
|
-
spawned through it disappears from view. Remote state is pulled every time,
|
|
88
|
-
never cached, within a budget: each group gets at most `--per-target` (20 s)
|
|
89
|
-
of a `--budget` (45 s) total, and groups the budget cannot reach are reported
|
|
90
|
-
with `E_ROSTER_BUDGET` rather than dropped or waited for. **Harvest** runs
|
|
91
|
-
the knowledge package's own `okf harvest --json` in the instance's saved home
|
|
92
|
-
on the host (a route that outlives the registration, like retire): the home
|
|
93
|
-
comes from the route saved at spawn, never from the caller, the remote must
|
|
94
|
-
advertise `harvest` in its version probe (0.22.3), and the package's envelope
|
|
95
|
-
is relayed as is. **Retire** through a saved route sends that route's home as
|
|
96
|
-
`--home` when the remote advertises `retire-home` in its probe `features`, so
|
|
97
|
-
a same-named twin under another agent on the host is never the one retired;
|
|
98
|
-
locally, `oats retire <name> --home <path>` does the same and a bare name that
|
|
99
|
-
resolves to several homes is refused.
|
|
100
|
+
**Harvest** runs the knowledge capability's `okf harvest --json` in the
|
|
101
|
+
instance's saved home on the server and relays its envelope.
|
|
100
102
|
|
|
101
103
|
## What this machine keeps
|
|
102
104
|
|
|
103
|
-
A **route
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
`oats server forget <id> --instance <name>`.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
collides with another soul's route on the same host leaves the new instance
|
|
122
|
-
without a saved route (`routeConflict` in the result, a warning naming the
|
|
123
|
-
host-side retire), never overwriting the existing one. The roster gives a
|
|
124
|
-
route to the remote row with the same name and home only; a same-named twin
|
|
125
|
-
under another soul is observed only.
|
|
105
|
+
A **saved route** per remote instance, under `~/.oats/remote/<server>/`,
|
|
106
|
+
written at spawn: the ssh host, workspace, oats path, optional Herdr path and
|
|
107
|
+
PATH prefix, and the remote home. Retire, harvest and session commands use
|
|
108
|
+
the saved route, not the current registration, so editing or removing a
|
|
109
|
+
registration never orphans a remote home. The route is removed when the
|
|
110
|
+
remote kernel reports the home gone.
|
|
111
|
+
|
|
112
|
+
- `oats server add --replace` to a different host or workspace, while saved
|
|
113
|
+
routes still point at the old one, makes the next `spawn --server` fail with
|
|
114
|
+
`E_ROUTE_CHANGED`. Register the new target under a new id, or retire the old
|
|
115
|
+
instances first.
|
|
116
|
+
- A saved route is never pointed at a different home. A spawn whose name already
|
|
117
|
+
has a route under that server leaves the new instance without one
|
|
118
|
+
(`routeConflict` in the result, with a warning naming the host-side retire).
|
|
119
|
+
- A saved route whose instance is gone on the host (`missingRemotely`) cannot
|
|
120
|
+
be retired. Drop it with `oats server forget <id> --instance <name>`.
|
|
121
|
+
- `retire --server` sends the saved home as `--home`, so a same-named
|
|
122
|
+
instance under another soul is never the one retired.
|
|
126
123
|
|
|
127
124
|
## Limits
|
|
128
125
|
|
|
129
|
-
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
in its saved home; `--model` travels). Session input
|
|
135
|
-
runs on the execution host, where the wake broker calls it. `server roster`
|
|
136
|
-
is local (registrations and saved routes, one status pull per group). The
|
|
137
|
-
version probe's `remote` list names this kernel's remote-side surface
|
|
138
|
-
(`roster` and `harvest` from 0.22.3).
|
|
139
|
-
- No Git over SSH: repository operations always run on the server, by its
|
|
140
|
-
kernel, in its workspace.
|
|
141
|
-
- A remote needs an OATS at least 0.22.1 (`MIN_REMOTE_VERSION`) for spawn,
|
|
142
|
-
retire and status, 0.22.2 for the session routes, and 0.22.3 for harvest
|
|
143
|
-
and for the exact-home retire; the record commands
|
|
144
|
-
(`capture`, `recall`) need Node 22.5+ there for `node:sqlite`, which
|
|
145
|
-
lifecycle routing does not.
|
|
146
|
-
- Lifecycle actions on a remote instance need a saved route from this
|
|
147
|
-
machine; an instance the remote reports that was spawned elsewhere shows in
|
|
148
|
-
the roster without one (`savedRoute: false`) and is read-only here.
|
|
126
|
+
- Lifecycle actions need a saved route from this machine. An instance the
|
|
127
|
+
remote reports but that was spawned elsewhere appears in the roster with
|
|
128
|
+
`savedRoute: false` and is read-only here.
|
|
129
|
+
- No Git runs over SSH: repository operations always run on the server, by
|
|
130
|
+
its kernel, in its deployment.
|
package/docs/soul.schema.json
CHANGED
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
"required": ["schemaVersion", "name", "description", "work"],
|
|
8
8
|
"additionalProperties": false,
|
|
9
9
|
"properties": {
|
|
10
|
+
"launch": { "description": "The soul's launch preference (0.30; feature launch-preference): what the role should run on. Only harness and model: args, env, yolo and the executable stay host facts (launch configurations). A machine overrides it in oats-local.yaml souls.launch; explicit flags win over both. A committed soul gains it only when every deployment runs 0.30 (0.29 refuses the key).", "type": "object", "additionalProperties": false, "required": ["harness"], "properties": { "harness": { "enum": ["pi", "claude", "codex"], "description": "The harness the role should run on." }, "model": { "type": "string", "minLength": 1, "pattern": "^[^\\s-][^\\s]*$", "description": "A model id for that harness; absent: the harness's own model." } } },
|
|
10
11
|
"schemaVersion": { "const": 2 },
|
|
11
12
|
"name": { "$ref": "#/$defs/slug" },
|
|
12
13
|
"description": { "type": "string" },
|
|
13
14
|
"work": { "enum": ["worktree", "checkout", "directory", "workspace"] },
|
|
14
|
-
"team": { "$ref": "#/$defs/teamLabels", "description": "Team label, or a non-empty list of distinct labels (the first is the primary); overrides the repo's default from oats-membership.yaml. Each label's messaging payload reaches the provider as an eligible team (OATS_TEAMS); joining is the provider's explicit act." },
|
|
15
15
|
"private": { "type": "boolean", "deprecated": true,
|
|
16
|
-
"description": "
|
|
16
|
+
"description": "Tolerated and ignored: souls have no private mode. Every soul of a confirmed member is listed and spawnable; discovery warns soul-private-ignored. Accepted so existing files still validate; remove it." },
|
|
17
17
|
"capabilities": {
|
|
18
18
|
"type": "object",
|
|
19
19
|
"propertyNames": { "$ref": "#/$defs/capabilityName" },
|
|
@@ -31,13 +31,6 @@
|
|
|
31
31
|
},
|
|
32
32
|
"$defs": {
|
|
33
33
|
"slug": { "type": "string", "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$" },
|
|
34
|
-
"label": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$" },
|
|
35
|
-
"teamLabels": {
|
|
36
|
-
"anyOf": [
|
|
37
|
-
{ "$ref": "#/$defs/label" },
|
|
38
|
-
{ "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/label" } }
|
|
39
|
-
]
|
|
40
|
-
},
|
|
41
34
|
"capabilityName": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$" },
|
|
42
35
|
"repoKey": { "type": "string", "pattern": "^[^\\s@/][^\\s@]*/[^\\s@]+$" },
|
|
43
36
|
"fromLocation": {
|