@awebai/oats 0.22.16 → 0.22.19
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 -0
- package/bin/oats.mjs +341 -21
- package/capabilities/oats-okf/bin/oats-okf.mjs +24 -9
- package/capabilities/oats-okf/oats.json +1 -1
- package/docs/configuration.md +65 -0
- package/docs/design/2026-09-07-mobile-agent-management-proposal.md +228 -0
- package/docs/design/launch-configurations.md +164 -0
- package/docs/desktop-cli-api.md +67 -1
- package/docs/desktop-instance-start.md +39 -3
- package/docs/oats-config.schema.json +28 -0
- package/docs/release-notes/v0.22.17.md +25 -0
- package/docs/release-notes/v0.22.18.md +101 -0
- package/docs/release-notes/v0.22.19.md +115 -0
- package/docs/souls-and-instances.md +1 -0
- package/lib/core.mjs +836 -137
- package/lib/servers.mjs +89 -4
- package/package-catalog.json +1 -1
- package/package.json +1 -1
- package/packages/record/bin/capture.mjs +49 -6
- package/packages/record/lib/capture-lock.mjs +68 -5
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# OATS v0.22.17
|
|
2
|
+
|
|
3
|
+
Two corrections found by installed acceptance of 0.22.16, nothing else.
|
|
4
|
+
|
|
5
|
+
## oats.okf 1.6.1
|
|
6
|
+
|
|
7
|
+
A provider view larger than one pipe buffer arrived cut at 65536 bytes
|
|
8
|
+
with exit 0 when the kernel's operation runner or a Desktop read it: the
|
|
9
|
+
provider wrote its envelope and exited at once, and on macOS Node writes
|
|
10
|
+
to a pipe asynchronously. Every answer now leaves the provider whole
|
|
11
|
+
before it exits. The catalog pins v1.6.1; scopes on 1.6.0 keep working
|
|
12
|
+
for small views until their owners run
|
|
13
|
+
`oats update oats.okf --to v1.6.1 --dir <scope>` and re-trust. The
|
|
14
|
+
kernel's runner is unchanged; the regression covers a 128 KiB view
|
|
15
|
+
through an actual pipe, directly and through `oats operation run`, and a
|
|
16
|
+
300 KiB view from any provider.
|
|
17
|
+
|
|
18
|
+
## Desktop
|
|
19
|
+
|
|
20
|
+
Workspaces added at runtime survive an app restart: the opened set is
|
|
21
|
+
persisted on its own (not the recent-suggestion store), restored and
|
|
22
|
+
re-validated at startup with absent paths skipped and aliases collapsed,
|
|
23
|
+
and a backend is reused only when it covers every restored workspace. A
|
|
24
|
+
failed persistence write keeps the previous set and reports the failed
|
|
25
|
+
add.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# OATS v0.22.18
|
|
2
|
+
|
|
3
|
+
Choose how an agent runs without replacing its home. Desktop offers
|
|
4
|
+
**Start…** for stopped instances and **Restart with…** for running
|
|
5
|
+
instances, with harness, model, permissions and named launch
|
|
6
|
+
configurations. The kernel records what each home was started with and
|
|
7
|
+
starts it again the same way.
|
|
8
|
+
|
|
9
|
+
## Named launch configurations
|
|
10
|
+
|
|
11
|
+
Define a reusable configuration in a scope's `oats-config.yaml`, or use
|
|
12
|
+
**Manage launch configurations** in Desktop. A configuration chooses `pi`,
|
|
13
|
+
`claude` or `codex`, an optional executable or wrapper, literal arguments,
|
|
14
|
+
environment values or references, a default model and the shared `yolo`
|
|
15
|
+
setting.
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
launch-configs:
|
|
19
|
+
codex-personal:
|
|
20
|
+
runtime: codex
|
|
21
|
+
args: ["--profile", "personal"]
|
|
22
|
+
yolo: true
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Arguments are passed literally; native configuration files and account
|
|
26
|
+
settings stay under the harness's control. For environment credentials use
|
|
27
|
+
a reference such as `API_KEY: {fromEnv: PERSONAL_KEY}`: the execution host
|
|
28
|
+
resolves it each time the agent starts. The recorded recipe, receipts,
|
|
29
|
+
previews, roster answers and spawn answers do not expose the value (the
|
|
30
|
+
launch itself and its transport necessarily use it). A configuration cannot name the kernel's own launch
|
|
31
|
+
environment or override environment a capability owns.
|
|
32
|
+
|
|
33
|
+
An existing instance keeps its recorded launch configuration even if the
|
|
34
|
+
scope's definition changes or disappears. Select a named configuration
|
|
35
|
+
explicitly to apply its current definition. Changing only the model or
|
|
36
|
+
permissions keeps the rest of the recorded invocation; choosing a harness
|
|
37
|
+
without a configuration starts that harness's defaults, with no model
|
|
38
|
+
carried across harnesses.
|
|
39
|
+
|
|
40
|
+
`oats launch-config list | set | remove | preview` author and inspect
|
|
41
|
+
configurations; `oats spawn --launch-config` starts a new instance under
|
|
42
|
+
one; a soul may name a default (`launch-config:` in soul.yaml,
|
|
43
|
+
`oats soul set --launch-config`).
|
|
44
|
+
|
|
45
|
+
## Restart in place
|
|
46
|
+
|
|
47
|
+
`oats session start` with a selection validates the requested launch
|
|
48
|
+
(recipe, executable, references, capability preparation, runtime packages)
|
|
49
|
+
and starts a stopped instance; it never stops a running harness. Only
|
|
50
|
+
`oats session restart` does: it runs the same checks first, then sends
|
|
51
|
+
SIGTERM to the harness under the pane's launcher and waits a bounded time
|
|
52
|
+
for it to end; it does not escalate to a forced kill and refuses to launch
|
|
53
|
+
a second harness if it cannot confirm the first has stopped, reporting what
|
|
54
|
+
was signalled and observed. The instance keeps its home, identity, work and
|
|
55
|
+
notes; OATS does not transfer a native conversation between harnesses.
|
|
56
|
+
Save work before restarting.
|
|
57
|
+
|
|
58
|
+
Capabilities take part through what was captured for the home: a capability
|
|
59
|
+
may declare a `launch` hook to prepare another harness (under the settings
|
|
60
|
+
captured at spawn, with the scope's current manifest and trust); a
|
|
61
|
+
capability that contributed harness-specific arguments and cannot prepare
|
|
62
|
+
the new one refuses the switch. Homes that predate launch recipes are
|
|
63
|
+
converted narrowly from their recorded command when a selection asks for
|
|
64
|
+
it; unrecognized arguments are refused by name.
|
|
65
|
+
|
|
66
|
+
One limitation, stated rather than hidden: a runtime-package requirement is
|
|
67
|
+
verified with the package manager's controlled list command under the
|
|
68
|
+
launch's environment and executable, which cannot carry a configuration's
|
|
69
|
+
arguments. When such a requirement applies and the configuration passes
|
|
70
|
+
arguments, the launch is not reported verified (`E_LAUNCH_PROBE_UNSUPPORTED`):
|
|
71
|
+
put native configuration a required package must see in a wrapper
|
|
72
|
+
executable or the environment.
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
oats launch-config list --dir /path/to/team
|
|
76
|
+
oats launch-config preview --home /path/to/instance --runtime codex --json
|
|
77
|
+
oats session restart --home /path/to/instance --launch-config codex-personal
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Local tmux and Herdr sessions use the same lifecycle operations. Registered
|
|
81
|
+
servers support configuration management and start/restart choices through
|
|
82
|
+
their installed OATS CLI (probe tokens `launch-config`, `session-restart`);
|
|
83
|
+
existing remote homes keep their saved route, and an older kernel is
|
|
84
|
+
refused after the compatibility probe, before any mutation or stop.
|
|
85
|
+
|
|
86
|
+
## Desktop fixes
|
|
87
|
+
|
|
88
|
+
Tabs from other workspaces stay hidden. Instance action menus are positioned
|
|
89
|
+
correctly when opened and remain stable through roster refreshes. Failed
|
|
90
|
+
launch preflight checks are shown in the invocation preview, and an accepted
|
|
91
|
+
launch is not presented as a running agent until the terminal is observed.
|
|
92
|
+
|
|
93
|
+
## Also in this release
|
|
94
|
+
|
|
95
|
+
- Capture lock (source only; the installed capture service is unchanged):
|
|
96
|
+
nonce-checked ownership, cleanup of a failed initialization that respects
|
|
97
|
+
a replacement, release outcomes reported as observed, and the privacy
|
|
98
|
+
loader's exit no longer leaves a lock behind.
|
|
99
|
+
- A design proposal for managing agents from an iPhone over Tailscale
|
|
100
|
+
(docs/design/2026-09-07-mobile-agent-management-proposal.md); no
|
|
101
|
+
implementation ships.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# OATS v0.22.19
|
|
2
|
+
|
|
3
|
+
Version 0.22.18 was tagged but never published: its hosted gate failed on
|
|
4
|
+
four tests that pass on macOS and fail on Linux (two launch tests calling
|
|
5
|
+
the kernel directly resolved the real harness binary on the test process
|
|
6
|
+
PATH, one launch test spawned zsh, which the runner does not install, and
|
|
7
|
+
one capture-lock test where Linux reused the inode of an unlinked
|
|
8
|
+
directory). The tag stays fixed and unpublished. This release carries the
|
|
9
|
+
same content with the corrections below.
|
|
10
|
+
|
|
11
|
+
Choose how an agent runs without replacing its home. Desktop offers
|
|
12
|
+
**Start…** for stopped instances and **Restart with…** for running
|
|
13
|
+
instances, with harness, model, permissions and named launch
|
|
14
|
+
configurations. The kernel records what each home was started with and
|
|
15
|
+
starts it again the same way.
|
|
16
|
+
|
|
17
|
+
## Named launch configurations
|
|
18
|
+
|
|
19
|
+
Define a reusable configuration in a scope's `oats-config.yaml`, or use
|
|
20
|
+
**Manage launch configurations** in Desktop. A configuration chooses `pi`,
|
|
21
|
+
`claude` or `codex`, an optional executable or wrapper, literal arguments,
|
|
22
|
+
environment values or references, a default model and the shared `yolo`
|
|
23
|
+
setting.
|
|
24
|
+
|
|
25
|
+
```yaml
|
|
26
|
+
launch-configs:
|
|
27
|
+
codex-personal:
|
|
28
|
+
runtime: codex
|
|
29
|
+
args: ["--profile", "personal"]
|
|
30
|
+
yolo: true
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Arguments are passed literally; native configuration files and account
|
|
34
|
+
settings stay under the harness's control. For environment credentials use
|
|
35
|
+
a reference such as `API_KEY: {fromEnv: PERSONAL_KEY}`: the execution host
|
|
36
|
+
resolves it each time the agent starts. The recorded recipe, receipts,
|
|
37
|
+
previews, roster answers and spawn answers do not expose the value (the
|
|
38
|
+
launch itself and its transport necessarily use it). A configuration cannot name the kernel's own launch
|
|
39
|
+
environment or override environment a capability owns.
|
|
40
|
+
|
|
41
|
+
An existing instance keeps its recorded launch configuration even if the
|
|
42
|
+
scope's definition changes or disappears. Select a named configuration
|
|
43
|
+
explicitly to apply its current definition. Changing only the model or
|
|
44
|
+
permissions keeps the rest of the recorded invocation; choosing a harness
|
|
45
|
+
without a configuration starts that harness's defaults, with no model
|
|
46
|
+
carried across harnesses.
|
|
47
|
+
|
|
48
|
+
`oats launch-config list | set | remove | preview` author and inspect
|
|
49
|
+
configurations; `oats spawn --launch-config` starts a new instance under
|
|
50
|
+
one; a soul may name a default (`launch-config:` in soul.yaml,
|
|
51
|
+
`oats soul set --launch-config`).
|
|
52
|
+
|
|
53
|
+
## Restart in place
|
|
54
|
+
|
|
55
|
+
`oats session start` with a selection validates the requested launch
|
|
56
|
+
(recipe, executable, references, capability preparation, runtime packages)
|
|
57
|
+
and starts a stopped instance; it never stops a running harness. Only
|
|
58
|
+
`oats session restart` does: it runs the same checks first, then sends
|
|
59
|
+
SIGTERM to the harness under the pane's launcher and waits a bounded time
|
|
60
|
+
for it to end; it does not escalate to a forced kill and refuses to launch
|
|
61
|
+
a second harness if it cannot confirm the first has stopped, reporting what
|
|
62
|
+
was signalled and observed. The instance keeps its home, identity, work and
|
|
63
|
+
notes; OATS does not transfer a native conversation between harnesses.
|
|
64
|
+
Save work before restarting.
|
|
65
|
+
|
|
66
|
+
Capabilities take part through what was captured for the home: a capability
|
|
67
|
+
may declare a `launch` hook to prepare another harness (under the settings
|
|
68
|
+
captured at spawn, with the scope's current manifest and trust); a
|
|
69
|
+
capability that contributed harness-specific arguments and cannot prepare
|
|
70
|
+
the new one refuses the switch. Homes that predate launch recipes are
|
|
71
|
+
converted narrowly from their recorded command when a selection asks for
|
|
72
|
+
it; unrecognized arguments are refused by name.
|
|
73
|
+
|
|
74
|
+
One limitation, stated rather than hidden: a runtime-package requirement is
|
|
75
|
+
verified with the package manager's controlled list command under the
|
|
76
|
+
launch's environment and executable, which cannot carry a configuration's
|
|
77
|
+
arguments. When such a requirement applies and the configuration passes
|
|
78
|
+
arguments, the launch is not reported verified (`E_LAUNCH_PROBE_UNSUPPORTED`):
|
|
79
|
+
put native configuration a required package must see in a wrapper
|
|
80
|
+
executable or the environment.
|
|
81
|
+
|
|
82
|
+
```sh
|
|
83
|
+
oats launch-config list --dir /path/to/team
|
|
84
|
+
oats launch-config preview --home /path/to/instance --runtime codex --json
|
|
85
|
+
oats session restart --home /path/to/instance --launch-config codex-personal
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Local tmux and Herdr sessions use the same lifecycle operations. Registered
|
|
89
|
+
servers support configuration management and start/restart choices through
|
|
90
|
+
their installed OATS CLI (probe tokens `launch-config`, `session-restart`);
|
|
91
|
+
existing remote homes keep their saved route, and an older kernel is
|
|
92
|
+
refused after the compatibility probe, before any mutation or stop.
|
|
93
|
+
|
|
94
|
+
## Desktop fixes
|
|
95
|
+
|
|
96
|
+
Tabs from other workspaces stay hidden. Instance action menus are positioned
|
|
97
|
+
correctly when opened and remain stable through roster refreshes. Failed
|
|
98
|
+
launch preflight checks are shown in the invocation preview, and an accepted
|
|
99
|
+
launch is not presented as a running agent until the terminal is observed.
|
|
100
|
+
|
|
101
|
+
## Also in this release
|
|
102
|
+
|
|
103
|
+
- Capture lock (source only; the installed capture service is unchanged):
|
|
104
|
+
nonce-checked ownership, cleanup of a failed initialization that respects
|
|
105
|
+
a replacement, release outcomes reported as observed, and the privacy
|
|
106
|
+
loader's exit no longer leaves a lock behind. The initializing directory
|
|
107
|
+
is held open until its owner record is written or its cleanup finishes,
|
|
108
|
+
preventing its inode from being reused during cleanup; a replacement
|
|
109
|
+
directory is left alone.
|
|
110
|
+
- Test fixtures: the launch tests resolve their fake harness binaries on the
|
|
111
|
+
test process PATH and exercise only the shells the host installs; no
|
|
112
|
+
kernel change.
|
|
113
|
+
- A design proposal for managing agents from an iPhone over Tailscale
|
|
114
|
+
(docs/design/2026-09-07-mobile-agent-management-proposal.md); no
|
|
115
|
+
implementation ships.
|
|
@@ -28,6 +28,7 @@ A soul is durable and committed. It is the part you review, improve, and keep.
|
|
|
28
28
|
| `work` | `worktree` or `checkout`. |
|
|
29
29
|
| `runtime` | `pi` or `claude` — the harness new instances launch on; a spawn can override with `--runtime`. For `claude`, the binary is `claude` unless a local-only `oats-claude-config` file (closest one walking up from the repo; one line naming the binary, e.g. `claude-personal`) selects another — a personal machine preference for account selection, never committed. With the aweb messaging integration active, claude sessions get the `aweb-channel` plugin wired at spawn for real-time push events. |
|
|
30
30
|
| `model` | Optional default model — a `provider/id[:thinking]` pattern or a comma-separated preference list (`github-copilot/x:high, anthropic/x:high`); at spawn the first entry whose provider/model is available wins (pi models probed via `pi --list-models`). For the `claude` runtime the value is translated to what the claude CLI accepts: `anthropic/<id>[:thinking]` becomes the bare `<id>`, aliases and bare `claude-*` ids pass through, other providers' entries are dropped, and nothing usable falls back to claude's own default. A spawn can override it. |
|
|
31
|
+
| `launch-config` | Optional default launch configuration for new instances (a name declared under `launch-configs:` in the scope's config; see docs/design/launch-configurations.md). `oats spawn --launch-config <name|none>` overrides it; `oats soul set --launch-config <name>` / `--no-launch-config` edit it. |
|
|
31
32
|
|
|
32
33
|
A soul is model-agnostic as an artifact. Its files are plain operating docs,
|
|
33
34
|
skills, and knowledge. `model` is only the default choice for new instances,
|