@awebai/oats 0.38.0 → 0.38.2

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.
@@ -17,14 +17,20 @@ Enter a model or leave the field blank to use the selected launch's default.
17
17
  An old harness's model is not carried to a different harness. Available local model
18
18
  suggestions are advisory; a model ID can also be typed. Start uses the saved
19
19
  briefing and state in a new harness conversation; it does not resume an old
20
- harness conversation ID. After the launch appears in the roster, Desktop
21
- opens the instance's terminal.
20
+ harness conversation ID. Once the kernel accepts the start or restart, the
21
+ dialog closes and Desktop opens the instance's terminal as soon as its row is
22
+ running with a terminal session, so whatever the harness shows first (a
23
+ confirmation such as Claude Code's development-channels prompt, an error, the
24
+ session) is visible there. If the terminal is not ready within the wait, a
25
+ notice says so and the instance's row opens it later. A refused launch keeps
26
+ the dialog open with the kernel's error.
22
27
 
23
28
  If an ordinary Start dialog finds the instance already running, its action becomes
24
29
  **Open terminal**. A failed or timed-out start requires **Refresh status** before
25
30
  another attempt, because the launch may have succeeded before the reply was
26
31
  lost. Changing workspaces dismisses the dialog and prevents a delayed launch
27
- reply from opening a terminal in the wrong workspace.
32
+ reply, or a terminal that becomes ready later, from opening in the wrong
33
+ workspace.
28
34
 
29
35
  **Restart with…** is explicit: after validating the new configuration, the
30
36
  kernel stops the current harness and starts the selected one. It does not
package/docs/desktop.md CHANGED
@@ -89,10 +89,15 @@ new PATH.
89
89
 
90
90
  ## Opening a workspace
91
91
 
92
- The app starts on the directory it was launched with (its own folder by
93
- default). To view a deployment, open the workspace switcher in the sidebar
94
- and choose **Add workspace → Browse**, then point it at an OATS deployment —
95
- the directory (the operator's choice) holding `oats-local.yaml` and `agents/`.
92
+ The app opens the workspaces you had open, plus the directory it was
93
+ launched with (`--dir`, or the folder it was started from) when that is an
94
+ OATS deployment — the directory (the operator's choice) holding
95
+ `oats-local.yaml` and `agents/`. A folder that is not a deployment is never
96
+ opened: started from Finder, with nothing open to restore, the window shows
97
+ the workspace switcher instead. It lists the deployments on this computer
98
+ under **On this computer** (those directly inside `~/Agents`, and a saved
99
+ one that is not open); click one to open it in this window. **Add local
100
+ workspace… → Browse** points it at any other deployment.
96
101
  A picked folder without `oats-local.yaml` is offered onboarding instead. The
97
102
  Desktop never parses the deployment: its members, lock state and header come
98
103
  from `oats workspace status`, and its instances from the deployment's one
@@ -246,6 +251,21 @@ any other exit code. Closing the tab ends the reconnecting. Reconnecting
246
251
  never stops or restarts the agent on the server: only the local ssh viewer
247
252
  ends.
248
253
 
254
+ ## Copy from a terminal
255
+
256
+ Drag over an agent's output to select it. When you release the mouse, the
257
+ selection is copied to the clipboard, ready to paste anywhere. ⌘C, Edit › Copy
258
+ and the right-click menu then copy nothing new: the text is already there. The
259
+ selection is tmux's own (copy mode), so it can run past the visible screen
260
+ into the scrollback, and tmux sends its copy to the Desktop, which writes it to
261
+ the clipboard. Nothing in a terminal can read the clipboard.
262
+
263
+ If the agent's program uses the mouse itself, the drag goes to it instead. Hold
264
+ **Option** (macOS) or **Shift** while dragging to select in the terminal itself,
265
+ then copy with ⌘C or the right-click menu. If your `~/.tmux.conf` sets
266
+ `set-clipboard off`, tmux keeps its copies to itself: use Option-drag. ⌘V
267
+ pastes into the agent's draft as before.
268
+
249
269
  ## Attach files and screenshots
250
270
 
251
271
  Drop a file onto an agent terminal to insert its path into that agent's draft.
@@ -284,7 +304,7 @@ error in the terminal. Each drop/paste accepts up to 16 files totaling 25 MB.
284
304
  | "Compatible oats CLI required" card | No CLI, or a version outside the range the card itself states. Copy the card's install command, or **Choose oats…** to point at the right binary; **Retry** re-probes. Spawn is disabled until a compatible CLI is verified. |
285
305
  | Spawn disabled, no card | The probe hasn't settled yet (transient, resolves in ms). If it persists, the backend is unreachable — restart the app. |
286
306
  | Terminals fail to open ("could not attach") | tmux missing, or no live session for that instance. Install tmux (`tmux -V`); check `tmux ls`. |
287
- | Can't select/copy text in a terminal tab | The terminal runs with tmux mouse handling, so a plain drag scrolls/passes through. Hold **Option** (macOS) or **Shift** while dragging to make a local selection, then copy (Cmd+C / right-click → Copy). |
307
+ | Can't select/copy text in a terminal tab | A plain drag copies on release ([Copy from a terminal](#copy-from-a-terminal)). If nothing reaches the clipboard, the program in the pane has the mouse, or your tmux config sets `set-clipboard off`: hold **Option** (macOS) or **Shift** while dragging, then copy (Cmd+C / right-click → Copy). |
288
308
  | macOS "app is damaged / can't be opened" | Ad-hoc-signed (not notarized) build + quarantine. Right-click → Open, or clear the quarantine attribute (above). If it persists, verify the bundle: `codesign --verify --deep --strict --verbose=2 "/Applications/OATS Desktop.app"` — a non-zero exit means a broken artifact, report it. |
289
309
  | Roster empty | The opened directory isn't an OATS deployment (it needs `oats-local.yaml` and `agents/`). Use the workspace switcher → Add workspace to select the right folder. |
290
310
 
@@ -41,7 +41,7 @@ arrives from.
41
41
  # oats-workspace.yaml: one default per slot, for every soul
42
42
  packages:
43
43
  oats.okf: v4.1.1
44
- oats.aweb: v1.19.0
44
+ oats.aweb: v1.20.0
45
45
  oats.linear: v1.0.1
46
46
  oats.jira: v1.0.1
47
47
  defaults:
@@ -89,7 +89,10 @@ operations in full.
89
89
  `knowledge-maintainer` package soul reviews the resulting PRs.
90
90
  - **`oats.aweb`** mints a messaging identity for each instance at spawn and
91
91
  removes it at retire, contributes the aweb messaging skills, and wires the
92
- channel so sessions are woken by mail. `oats aweb roster` lists the team.
92
+ channel so sessions are woken by mail. `oats aweb roster` lists the team:
93
+ its membership certificates and workspaces, one entry per alias with its
94
+ sources, status and kind (global identities first), and says when either
95
+ source is incomplete.
93
96
  - **`oats.jira`** teaches the `jira-tasks` protocol and adds an advisory spawn
94
97
  hook that names the configured site and project.
95
98
  - **`oats.linear`** provides JSON-first `oats linear` commands, the
@@ -11,7 +11,7 @@ or workspace membership alone does not make a package official.
11
11
  |---|---|---|---|
12
12
  | `oats.framework` | `oats-framework/v1.5.0` (this repository) | `oats.core`, `oats.setup`, `oats.knowledge-theory` | `knowledge-theory-expert` |
13
13
  | `oats.okf` | `v4.1.1` | `oats.okf` (knowledge), `oats.okf-harvest`, `oats.okf-maintenance` | `knowledge-harvester`, `knowledge-maintainer` |
14
- | `oats.aweb` | `v1.19.0` | `oats.aweb` (messaging) | |
14
+ | `oats.aweb` | `v1.20.0` | `oats.aweb` (messaging) | |
15
15
  | `oats.engineering` | `v1.5.0` | `oats.engineering-expert`, `oats.developer`, `oats.code-review` | `code-reviewer` |
16
16
  | `oats.authoring` | `v1.0.3` | `oats.authoring` | |
17
17
  | `oats.jira` | `v1.0.1` | `oats.jira` (tasks) | |
package/docs/packages.md CHANGED
@@ -76,7 +76,7 @@ members:
76
76
  packages:
77
77
  oats.framework: v1.5.0
78
78
  oats.okf: v4.1.1
79
- oats.aweb: v1.19.0
79
+ oats.aweb: v1.20.0
80
80
  teams:
81
81
  platform: { team: "platform:acme.aweb.ai", description: Platform engineering }
82
82
  defaults:
@@ -134,7 +134,7 @@ Declaring a package in the workspace's `packages:` is the trust decision
134
134
  ## `oats package add | remove`
135
135
 
136
136
  ```bash
137
- oats package add oats.aweb v1.19.0 # a catalog version
137
+ oats package add oats.aweb v1.20.0 # a catalog version
138
138
  oats package add acme.tools git:github.com/acme/tools@v0.4.0
139
139
  oats package remove acme.tools
140
140
  ```
@@ -0,0 +1,50 @@
1
+ # OATS 0.38.1
2
+
3
+ ## Changed
4
+
5
+ - **oats.aweb 1.20.0: `oats aweb roster` lists who is on the team and says
6
+ what each entry is** (awebai/oats-aweb#46). The roster printed only the
7
+ team's membership certificates (`aw id team members`). That listing omits
8
+ identities the registry does not list, such as a team's retained global
9
+ coordinator and dashboard humans. It also listed deployment roots and
10
+ certificates with no workspace exactly like agents. The roster is now the
11
+ union of those certificates and the team's workspace presence
12
+ (`aw workspace status`), read from the minting root. Each entry has its
13
+ sources (`certificate`, `presence` or both), its status (active, when last
14
+ seen, or `certificate only: no workspace record`) and a kind:
15
+ - `global identity`, from the identity scope, listed first;
16
+ - `human` and `hosted agent`, from the session context;
17
+ - `instance` and `deployment root`, from the workspace path;
18
+ - `unknown`.
19
+ An inferred kind says so, and nothing is called retired. aw does not mark a
20
+ team's coordinator, and the roster says so. When a source cannot be read,
21
+ or presence is past its 200-workspace cap, the roster still lists what it
22
+ has and says it is incomplete. `oats aweb roster --json` is now an oats.aweb
23
+ document (`{team, members, certificatesComplete, presenceComplete,
24
+ problems}`) instead of aw's raw listing. The oats-aweb skill, the inject
25
+ and the spawn brief say what the roster shows and what it can't tell you.
26
+
27
+ ## Fixed
28
+
29
+ - **The Desktop opened from Finder no longer shows `/` as its workspace**
30
+ (awebai/oats#518). A Finder launch starts in `/`, and when no saved
31
+ workspace was a deployment, the Desktop served `/`. It titled the window
32
+ `/`, showed `E_NO_DEPLOYMENT` in Instances, and remembered `/` in
33
+ `windows.json` for every later launch. A folder that is not a deployment is
34
+ now never served, bound to a window or saved. With no deployment to open,
35
+ the window opens on the workspace switcher, which lists the deployments
36
+ directly inside `~/Agents` under "On this computer": one click opens one in
37
+ that window. A window remembered on `/` is forgotten at launch.
38
+
39
+ - **A window with no workspace lists the workspaces served after it opened**
40
+ (awebai/oats#521). Its choices were fixed when it opened, so remote
41
+ workspaces arriving a few seconds after launch never appeared and the
42
+ switcher said "No workspace choices reported."
43
+
44
+ - **Copying an agent's output in the Desktop** (awebai/oats#520). A plain
45
+ drag over a terminal now selects the text (tmux's copy mode, so it can
46
+ reach into the scrollback) and copies it to the clipboard on release;
47
+ ⌘C, Edit › Copy and the right-click menu find it there. The Desktop takes
48
+ tmux's copies (OSC 52) write-only: nothing in a terminal can read the
49
+ clipboard. Remote terminals (`oats session attach --server`) bind the same
50
+ drag. ⌘V is unchanged; Option-drag still makes a terminal-only selection.
@@ -0,0 +1,13 @@
1
+ # OATS 0.38.2
2
+
3
+ ## Fixed
4
+
5
+ - **The Desktop's Start and Restart dialog no longer stays open after the
6
+ launch** (awebai/oats#525). Since 0.36.0 the dialog's wait for the
7
+ terminal never recognised the started instance's row, so every Start or
8
+ Restart ended on "no running harness was observed" with the dialog left
9
+ open, while the harness (for Claude Code under channel delivery, its
10
+ development-channels confirmation) waited unseen. The dialog now closes
11
+ as soon as the launch is accepted, and the instance's terminal opens once
12
+ its row is ready, showing whatever the harness shows first. A refused
13
+ launch keeps the dialog with its error.
@@ -27,6 +27,7 @@ export function prepareSessionViewer(target, { exec = execFileSync } = {}) {
27
27
  run(["set-option", "-t", viewer, "status", "off"]);
28
28
  run(["unbind-key", "-a", "-q", "-T", "oatsview-locked"]);
29
29
  run(["bind-key", "-T", "oatsview-locked", "WheelUpPane", "if-shell", "-F", "#{||:#{pane_in_mode},#{mouse_any_flag}}", "send-keys -M", "copy-mode -e; send-keys -M"]);
30
+ run(["bind-key", "-T", "oatsview-locked", "MouseDrag1Pane", "if-shell", "-F", "#{||:#{pane_in_mode},#{mouse_any_flag}}", "send-keys -M", "copy-mode -M"]);
30
31
  run(["set-option", "-t", viewer, "mouse", "on"]);
31
32
  const env = { ...process.env }; delete env.TMUX;
32
33
  return { binary: "tmux", args: ["-u", "-S", target.socket, "attach-session", "-t", `=${viewer}`], env, cleanup };
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "oats.aweb": {
10
10
  "url": "https://github.com/awebai/oats-aweb.git",
11
- "ref": "v1.19.0",
11
+ "ref": "v1.20.0",
12
12
  "path": "oats-package"
13
13
  },
14
14
  "oats.jira": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awebai/oats",
3
- "version": "0.38.0",
3
+ "version": "0.38.2",
4
4
  "description": "OATS (Open Agent Team Specification) — durable souls, disposable instances, targetable capability packages, and the runtime-neutral oats CLI/kernel.",
5
5
  "keywords": [
6
6
  "agents",