@awebai/oats 0.29.1 → 0.29.3

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.
@@ -0,0 +1,51 @@
1
+ # OATS 0.29.2
2
+
3
+ ## oats.aweb 1.15.0 (catalog pin and bundled mirror)
4
+
5
+ The catalog and this repo's workspace pin `oats.aweb` to `v1.15.0`, and the
6
+ bundled `capabilities/oats-aweb` is the tag's tree.
7
+
8
+ - **Live receive on joined teams.** An instance's joined teams now receive
9
+ live through the host wake broker. Session homes register the primary
10
+ identity plus every joined identity. Claude and Pi channel homes use aw's
11
+ mixed mode, and Codex keeps polling. Readiness reports each joined team's
12
+ actual mode (`joined-team-receive` or `joined-team-poll-only`, with the
13
+ reason). This needs aw >= 1.36.12.
14
+ - **The identity-home scrub (critical fix).** Provider commands and nested
15
+ spawns and retires no longer inherit the caller's `AWEB_IDENTITY_HOME`.
16
+ Inside an instance, that variable made aw refuse cwd-rooted commands, which
17
+ broke roster and join. On retire, it could delete the caller's workspace.
18
+ - **Home operations work under the kernel.** `oats operation run
19
+ messaging:teams|join|leave` gets exactly one JSON-v1 envelope, whose `ok`
20
+ agrees with the exit status. The Desktop's teams, join and leave buttons now
21
+ work. A partial multi-label join or leave records every label it completed.
22
+ A failed spawn hands its joined teams to compensation. `oats aweb join`
23
+ refuses resident-grant homes (`E_TEAM_GLOBAL_MODE`).
24
+ - **An agent playbook.** The new `oats-aweb` skill carries the playbook, and
25
+ the inject is shorter and points to it. `oats aweb roster --label <label>`
26
+ is new.
27
+ - **Deferred to 1.16: per-workspace personal-team enrollment.** It needs a
28
+ per-deployment login and a recorded owner. 1.15 makes no `aw auth` or
29
+ `aw team ensure` call, and the primary team resolves as in 1.14.2. A
30
+ host-set `settings.oats.aweb.roots.personal` is ignored with the readiness
31
+ warning `personal-root-deferred`.
32
+
33
+ ## Desktop
34
+
35
+ - **Line counts on the Changes rows** (#245, #246). The server passes kernel
36
+ #238's per-file counts through, and each W6 Changes row ends with "+84 −3",
37
+ or "binary". An unknown count (untracked, submodule) and older kernels show
38
+ nothing, never "+0".
39
+ - **The Git & GitHub tab counts unresolved review threads** (#247). The tab and
40
+ the collapsed rail button say "Git & GitHub, 2 unresolved review threads".
41
+ - **Send N threads to <instance>** (#248, #249). When the instance's PR has
42
+ unresolved review threads, the Pull request card offers to send them to the
43
+ instance.
44
+ - The server composes the text, and the preview shows exactly what will be
45
+ pasted.
46
+ - The text is one line, framed as untrusted input from GitHub reviewers,
47
+ with control, bidi and zero-width characters stripped.
48
+ - It is pasted into the instance's terminal without Enter.
49
+ - A digest of the previewed bytes guards the send: if the threads changed,
50
+ nothing is pasted and the preview refreshes.
51
+ - The Desktop still accepts OATS CLIs `>=0.25.8 <0.30.0`.
@@ -0,0 +1,53 @@
1
+ # OATS 0.29.3
2
+
3
+ ## Changed
4
+
5
+ - **There is no "personal team"; a workspace has its default team.** The
6
+ vocabulary follows the teams contract's amendment of 2026-09-26: a workspace
7
+ has its **default team** (the team for the workspace key in its owner's
8
+ namespace), and agents may join other teams. The model is unchanged:
9
+ - an instance is in the workspace's default team only, by default;
10
+ - joining an eligible team is an explicit act;
11
+ - `OATS_TEAMS` is `[]` for a soul with no label.
12
+
13
+ The kernel's docs, comments and the `unmapped-team-label` warning use the
14
+ new words. The warning now reads "… fall back to the workspace's default team
15
+ for it". The oats.framework skills (oats.core 2.1.1, oats.setup 2.1.2,
16
+ oats.framework 1.3.1) teach the same model. The kernel carries no wire name
17
+ with "personal", and there are no compatibility aliases.
18
+ - **The messaging provider uses the same words** (oats.aweb 1.16.0, below).
19
+
20
+ ## oats.aweb 1.16.0 (catalog pin and bundled mirror)
21
+
22
+ - **The catalog and this repo's workspace pin `oats.aweb` to `v1.16.0`, and
23
+ the bundled `capabilities/oats-aweb` is the tag's tree.** It renames the
24
+ provider's wire names to the default-team vocabulary:
25
+ - the teams operation's `personal` field becomes `defaultTeam`
26
+ (`{ team, source }`, where `source` is `setting` or `root`);
27
+ - `E_TEAM_PERSONAL` becomes `E_TEAM_DEFAULT`;
28
+ - the broker receive label `personal` becomes `default`;
29
+ - `settings.oats.aweb.roots.personal` is removed: `roots` keys are team ids
30
+ only, and the `personal-root-deferred` warning is gone.
31
+
32
+ There are no aliases: a reader of the old names must move to the new ones,
33
+ as the Desktop does in this release. A home spawned under 1.15 still resolves
34
+ its default team from its recorded team. Per-workspace default-team
35
+ enrollment is still deferred.
36
+
37
+ ## oats.framework 1.3.1 (catalog pin)
38
+
39
+ - **The catalog and this repo's workspace pin `oats.framework` to
40
+ `oats-framework/v1.3.1`.** Its only change is the default-team vocabulary
41
+ above, in `oats.core` 2.1.1 and `oats.setup` 2.1.2. A deployment on
42
+ `oats.framework: v1.3.0` keeps working, and moving the pin to `v1.3.1` picks
43
+ up the new skill text.
44
+
45
+ ## Desktop
46
+
47
+ - **"Default team" everywhere** (#252). The teams panel reads oats.aweb 1.16's
48
+ `defaultTeam` and says where the team comes from: the workspace or host
49
+ setting, or the messaging root's active team. The spawn dialog, the soul
50
+ inspector and the teams panel say "Default team" in place of "Personal".
51
+ A 1.15 `personal` document no longer decodes, so this Desktop needs the
52
+ oats.aweb 1.16.0 pin.
53
+ - The Desktop still accepts OATS CLIs `>=0.25.8 <0.30.0`.
@@ -59,7 +59,7 @@ members: # repo refs, NO @revision (E_WORKSPAC
59
59
  - git:github.com/acme/tools # a member that ALSO publishes a package (see below)
60
60
 
61
61
  packages: # the ONLY versioned things
62
- oats.framework: v1.3.0 # bare version → resolves through the official catalog
62
+ oats.framework: v1.3.1 # bare version → resolves through the official catalog
63
63
  oats.okf: v4.0.0
64
64
  acme.tools: git:github.com/acme/tools@v0.4.0 # outside the catalog → git:<repo>@<tag|OID>; still a package
65
65
 
@@ -399,7 +399,7 @@ keys, with `byTeam` stripped) ⊕ soul slot payload ⊕ `local.settings[cap]`
399
399
  **No `byTeam[<label>]` is merged into it, the primary's included** (teams
400
400
  amendment K): each label's `base ⊕ byTeam[label]` reaches the provider only as
401
401
  that label's entry in `OATS_TEAMS` (the preview's `teams`). So `settings.team`
402
- (and `OATS_TEAM_ID`) is the personal team if the host, the soul or the spawn
402
+ (and `OATS_TEAM_ID`) is the workspace's default team if the host, the soul or the spawn
403
403
  set one; empty means the provider's own default. The provider's own `binding` contract
404
404
  (`normalize → bind → check`) runs over the merged payload exactly as before.
405
405
  Two teams, two messaging identities, one workspace:
@@ -420,7 +420,7 @@ one. A label under `byTeam` that is not declared in `teams:` is
420
420
  act.** `spawn --preview` shows the merged `settings.<cap>` and the `teams`, so
421
421
  the delivery is verifiable, and `instance.json` records both. With oats.aweb
422
422
  1.13.1 (which reads `team` from its settings and ignores `OATS_TEAMS`) the
423
- primary identity therefore mints into the personal team: the `.aw` root's
423
+ primary identity therefore mints into the workspace's default team: the `.aw` root's
424
424
  active team, or the one the host set. What the payload does not change is
425
425
  **where the `.aw` root is found**: the hook still searches
426
426
  bounded candidates, first hit wins — the instance home, the Git repository
package/lib/core.mjs CHANGED
@@ -1485,17 +1485,17 @@ export function instanceSoulDir(home, meta = undefined) {
1485
1485
  /** The team facts a lifecycle hook receives (workspace model only, lead decision
1486
1486
  * c3-7): the team SCOPE is the deployment directory, the team ID is the messaging
1487
1487
  * slot's merged payload `team` (workspace base ⊕ soul ⊕ host ⊕ spawn; no byTeam entry
1488
- * is merged since teams amendment K): the personal team if one is set; empty = the
1488
+ * is merged since teams amendment K): the workspace's default team if one is set; empty = the
1489
1489
  * provider's default (for oats.aweb, the root's active team). The provider also gets
1490
1490
  * the soul's primary team LABEL and the workspace's name and canonical key, so it can
1491
- * derive a per-person, per-workspace personal team; each label's mapped payload is in
1491
+ * derive the workspace's default team; each label's mapped payload is in
1492
1492
  * OATS_TEAMS.
1493
1493
  * OATS_TEAM_NAME (the 0.25 `team:` block's name) is always empty, so an ambient
1494
1494
  * value never reaches a hook. Human decision 2026-09-24 (messaging default).
1495
1495
  *
1496
1496
  * Teams contract 2026-09-25 (decision 4): `resolved.teams` is the ELIGIBLE teams,
1497
1497
  * `[{ label, team, mapped, payload }]` in soul order. OATS_TEAM_LABELS is their
1498
- * labels comma-joined and OATS_TEAMS their JSON (`[]` = no label: personal only).
1498
+ * labels comma-joined and OATS_TEAMS their JSON (`[]` = no label: the workspace's default team only).
1499
1499
  * Both are empty when the teams are not known (a home spawned before 0.26.0 whose
1500
1500
  * workspace cannot be read now) — empty means "unknown", never "none".
1501
1501
  * OATS_TEAMS_SOURCE says where the list came from: `live` (the workspace read now,
package/lib/resolve.mjs CHANGED
@@ -346,7 +346,7 @@ export function teamLabelsOf(soulEntry) {
346
346
  * `{ label, team, mapped, payload }`. `payload` is workspace.messaging's base ⊕ byTeam[label] when the
347
347
  * workspace maps the label, else the base alone with `mapped: false`; `team` is the payload's team id
348
348
  * when mapped (null otherwise). Kernel-owned and delivered BESIDE a provider's settings, never inside
349
- * them; joining any of them is the messaging provider's explicit act. No label → [] ("personal only").
349
+ * them; joining any of them is the messaging provider's explicit act. No label → [] (the workspace's default team only).
350
350
  * Pure: resolveSoul validates every carried label's entry (reserved byTeam, hostOnly keys) first.
351
351
  */
352
352
  export function teamsOf(workspace, labels) {
@@ -731,7 +731,7 @@ export async function resolveSoul(discovery, soulEntry, { local = null, lock = n
731
731
  // Decision 23 as amended by K (teams contract, co-lead ruling): the provider's settings are
732
732
  // base ⊕ soul ⊕ host ⊕ spawn. No byTeam[<label>] is merged, the primary's included: each
733
733
  // label's base ⊕ byTeam[label] is delivered only in its `teams` entry (teamsOf → OATS_TEAMS),
734
- // so settings.team is the personal team a host, soul or spawn set. `byTeam` never reaches the
734
+ // so settings.team is the default team a host, soul or spawn set. `byTeam` never reaches the
735
735
  // provider, and the primary team's own payload may still not nest one.
736
736
  const { byTeam, ...base } = workspace.messaging;
737
737
  committed(base, "/messaging", { kind: "workspace", at: "oats-workspace.yaml#/messaging" });
package/lib/workspace.mjs CHANGED
@@ -753,8 +753,8 @@ export function workspaceWarnings(workspace, members, externalRows, packageSouls
753
753
 
754
754
  /** Teams contract decision 5: a soul label the workspace declares in `teams:` but does not map in
755
755
  * `messaging.byTeam` is a WARNING, not a problem — the label stays eligible-but-unmapped and the
756
- * messaging provider falls back to the personal team for it. (An undeclared label is E_TEAM_UNKNOWN.)
757
- * ONE warning per unmapped label, naming its souls (a personal-only workspace would otherwise print
756
+ * messaging provider falls back to the workspace's default team for it. (An undeclared label is E_TEAM_UNKNOWN.)
757
+ * ONE warning per unmapped label, naming its souls (a workspace on its default team alone would otherwise print
758
758
  * a line per soul): { code, label, souls, paths, message }, sorted by label. */
759
759
  const byCodepointOrder = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
760
760
  function unmappedLabelWarnings(workspace, members, externalRows, teams) {
@@ -774,7 +774,7 @@ function unmappedLabelWarnings(workspace, members, externalRows, teams) {
774
774
  const order = names.map((n, i) => i).sort((x, y) => byCodepointOrder(names[x], names[y]) || byCodepointOrder(paths[x], paths[y]));
775
775
  const sorted = order.map((i) => names[i]);
776
776
  return { code: "unmapped-team-label", label, souls: sorted, paths: order.map((i) => paths[i]),
777
- message: `team ${show(label)} has no messaging.byTeam entry; its souls (${sorted.join(", ")}) fall back to the personal team for it` };
777
+ message: `team ${show(label)} has no messaging.byTeam entry; its souls (${sorted.join(", ")}) fall back to the workspace's default team for it` };
778
778
  });
779
779
  }
780
780
 
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "oats.aweb": {
10
10
  "url": "https://github.com/awebai/oats-aweb.git",
11
- "ref": "v1.14.2",
11
+ "ref": "v1.16.0",
12
12
  "path": "oats-package"
13
13
  },
14
14
  "oats.jira": {
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "oats.framework": {
35
35
  "url": "https://github.com/awebai/oats.git",
36
- "ref": "oats-framework/v1.3.0",
36
+ "ref": "oats-framework/v1.3.1",
37
37
  "path": "oats-package"
38
38
  }
39
39
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awebai/oats",
3
- "version": "0.29.1",
3
+ "version": "0.29.3",
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",