@ours.network/cowork 1.1.2 → 1.1.4

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.
@@ -1,6 +1,6 @@
1
1
  # Prerequisites
2
2
 
3
- ours-cowork requires Node.js 22 or newer and one already-running shared ours daemon. Install the operator lifecycle with `npm install --global @ours.network/cli@2.7.0`, then use `ours daemon start` or `ours daemon install-service --yes`. The shared daemon owns broker connectivity and global identity state; cowork attaches through `@ours.network/sdk` 3.7.0 and never starts a runtime of its own.
3
+ ours-cowork requires Node.js 22 or newer and one already-running shared ours daemon. Install the operator lifecycle with `npm install --global @ours.network/cli@2.7.2`, then use `ours daemon start` or `ours daemon install-service --yes`. The shared daemon owns broker connectivity and global identity state; cowork attaches through `@ours.network/sdk` 3.7.2 and never starts a runtime of its own.
4
4
 
5
5
  The selected SDK and CLI must include the external-history storage epoch: structured `listIncomingMessages`/`getHistoryItem`/`getMessages` and `listIncomingFiles`/`fetchFile`/selected `getFiles` APIs backed by per-identity history and immutable blobs. A package with the same nominal version but the older packet-inbox contract is not compatible.
6
6
 
@@ -10,7 +10,7 @@ ours-cowork docs
10
10
  Install and start the shared ours daemon first:
11
11
 
12
12
  ```sh
13
- npm install --global @ours.network/cli@2.7.0
13
+ npm install --global @ours.network/cli@2.7.2
14
14
  ours daemon start
15
15
  ours daemon status --json
16
16
  ```
@@ -34,6 +34,6 @@ Use the RPC arguments without `room_id`; the receiving room fixes the target. Fo
34
34
 
35
35
  `list-members` retains its contact-safe roster. `remove-member` retains its epoch, confirm and no-self-removal gates. The separate `room.participant.remove` command instead grants the full operator removal behavior. `room.show`, `room.participants` and operator-view history return operator metadata. Policy-administration commands can delegate more privileges; `room.message` and `room.say` authorize room/role authorship. Assign these permissions deliberately. Command results may include invite material; do not relay them into chat.
36
36
 
37
- Host lifecycle and global room creation/listing are excluded. `room.accept` accepts invitation input through its separate grant and remains unavailable through REST. Ours close/delete return a durable accepted receipt before closing the reply channel; verify completion through management. Close retains archive/files; delete requires `confirm:true`, closes first, and erases local room data. Pending lifecycle requests resume after restart; failed requests remain visible in room metadata for explicit management retry. Missing replies do not prove a mutation failed. Dynamic consumer registration is not implemented.
37
+ Host lifecycle and global room creation/listing are excluded. `room.accept` accepts invitation input through its separate grant and remains unavailable through REST. Ours close/delete return a durable accepted receipt before closing the reply channel; verify completion through management. Close retains archive/files; delete requires `confirm:true`, closes first, and erases local room data. Pending lifecycle requests resume after restart; failed requests remain visible in room metadata for explicit management retry. Missing replies do not prove a mutation failed.
38
38
 
39
39
  The SDK owns command reply delivery and its size limits. Large history pages or a single large file record may exceed that transport's capacity; use CLI/REST for those results. No additional result-omission contract is introduced.
@@ -56,6 +56,14 @@ In an anonymous room, the notice text names only the room-scoped alias; it inclu
56
56
 
57
57
  Cowork history records include messages, files, and the durable relay intent/result trail used for restart recovery. This application archive is distinct from the shared daemon's per-identity `history.sqlite3` and immutable blob store; neither is a substitute backup for the other.
58
58
 
59
+ ## Reply threading
60
+
61
+ A reply is broadcast to the other active room participants, with no sender echo. The parent author receives a reference to their original source message or file; other participants receive a reference to their own recorded room copy. Multiple recorded copies remain aliases of one logical original. For files, both the metadata notice and binary copy can identify that original.
62
+
63
+ Cowork derives these relationships from its existing archive. If a parent or a recipient's copy cannot be resolved, it delivers the answer without a transport parent and retains the incoming source reference. It does not replay history or scan SDK history to repair links. Queued records do not guarantee that a recipient still has the parent, and a wire lost before result persistence can remain unresolved. Existing retry behavior can create distinct transport copies.
64
+
65
+ Reply translation changes transport metadata only. Room JSON bodies and version-one archive formats remain unchanged; incoming sentence references are retained but translated outgoing references use only the selected wire ID. Existing history views retain their logical-record/audit separation; reading history does not send messages. Ordinary clients can use their existing native reply handling without implementing Cowork mapping logic.
66
+
59
67
  The web console projects participant and room-authored messages plus the briefing into Communication. Relay, file, recovery, close, and failure records are excluded from chat and shown in Events; Archive retains the complete ordered record stream, including archived file bytes. Messages appear only after the authoritative history refresh observes them.
60
68
 
61
69
  Version one polls rather than receiving pushed updates: the room list refreshes every five seconds, while the selected room, participants, and history refresh every two seconds. Polling pauses in a hidden tab, coalesces overlap, and refreshes after confirmed mutations. CLI history remains the fallback when a browser is unavailable.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ours.network/cowork",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "description": "Durable ours mission rooms on the shared ours daemon.",
5
5
  "type": "module",
6
6
  "license": "FSL-1.1-Apache-2.0",
@@ -26,7 +26,8 @@
26
26
  "test:release": "node --test tests/static-gates.test.mjs"
27
27
  },
28
28
  "dependencies": {
29
- "@ours.network/sdk": "3.7.0",
29
+ "@ours.network/sdk": "3.7.2",
30
+ "ajv": "8.20.0",
30
31
  "better-sqlite3": "11.10.0",
31
32
  "react": "18.3.1",
32
33
  "react-dom": "18.3.1",
@@ -34,7 +35,7 @@
34
35
  },
35
36
  "devDependencies": {
36
37
  "@adapt-toolkit/broker": "0.10.12",
37
- "@ours.network/cli": "2.7.0",
38
+ "@ours.network/cli": "2.7.2",
38
39
  "@testing-library/jest-dom": "6.6.3",
39
40
  "@testing-library/react": "16.1.0",
40
41
  "@testing-library/user-event": "14.5.2",