antechamber 1.0.5 → 1.0.6

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/CHANGELOG.md CHANGED
@@ -7,6 +7,10 @@ and this project uses [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.0.6] - 2026-10-20
11
+
12
+ - docs: integrate the OmO Work extension across the docs (#55)
13
+
10
14
  ## [1.0.5] - 2026-10-20
11
15
 
12
16
  ### Fixed
package/README.md CHANGED
@@ -27,7 +27,8 @@ an **external OpenCode server** and sessions run on OmO.
27
27
  - Tool calls rendered as native OpenChamber tool parts (bash, write, edit,
28
28
  and so on), including subagent/task cards.
29
29
  - Approvals and questions bridged through pi's extension-UI protocol.
30
- - Todo list bridging from pi/OmO's todo tool to OpenChamber's task panel.
30
+ - Todo list bridging from pi/OmO's todo tool to OpenChamber's task panel
31
+ (OpenChamber 1.x; on 2.x, the OmO Work section shows it by phase).
31
32
  - Fork, revert, and unrevert backed by the agent's session tree, not a
32
33
  filesystem snapshot. Reverting changes conversation context only; it never
33
34
  touches files on disk.
@@ -37,12 +38,10 @@ an **external OpenCode server** and sessions run on OmO.
37
38
  ownership tracking for detached task-host processes it spawned.
38
39
  - Idle reaping and a live-process cap (`ANTECHAMBER_MAX_LIVE`) so long-running
39
40
  deployments don't accumulate agent processes.
40
- - An optional OpenChamber extension, **OmO Graph**, that draws the OmO
41
- sub-agents behind the open session as a live, clickable graph (see
42
- [OpenChamber extension](#openchamber-extension-omo-graph)).
43
- - An optional OpenChamber 2.x Work Status section, **OmO Work**, for the
44
- session's todo phases, monitors, eval cells and background work (see
45
- [OmO Work](#openchamber-extension-omo-work)).
41
+ - Optional [OpenChamber extensions](#openchamber-extensions): **OmO Graph**
42
+ draws the OmO sub-agents behind the open session as a live, clickable graph,
43
+ and **OmO Work** (OpenChamber 2.x) shows the session's todo phases,
44
+ monitors, eval cells and other background work in the Work Status panel.
46
45
 
47
46
  ## Supported backends
48
47
 
@@ -93,11 +92,13 @@ skips the check. It needs a global npm or bun install, so it is refused for
93
92
  source checkouts and `npx`. Drop the flag (plain `antechamber setup`) to point
94
93
  OpenChamber back at the `antechamber` bin and stop auto-updates.
95
94
 
96
- Optionally, add the bundled [OmO Graph extension](#openchamber-extension-omo-graph):
97
- `setup` ends by printing its folder
98
- (`$(npm root -g)/antechamber/extensions/omo-dag`). In OpenChamber, open
99
- **Settings → Extensions → Add → Folder**, paste that path, and approve the two
100
- permissions it asks for. The folder is updated in place by `npm update -g`.
95
+ Optionally, add the bundled [OpenChamber extensions](#openchamber-extensions):
96
+ `setup` ends by printing their folders (under
97
+ `$(npm root -g)/antechamber/extensions/`). In OpenChamber, open
98
+ **Settings → Extensions → Add → Folder**, paste a path, and approve the
99
+ permissions it asks for. On OpenChamber 2.x, add OmO Work to see monitors,
100
+ eval cells and the todo list in the Work Status panel. The folders are updated
101
+ in place by `npm update -g`.
101
102
 
102
103
  For an isolated OpenChamber instance, leaving your main settings untouched:
103
104
 
@@ -205,67 +206,88 @@ node dist/cli.js setup --profile ~/.config/antechamber-openchamber \
205
206
  The source launcher requires the built `dist/cli.js`. Pull updates, run
206
207
  `npm ci && npm run build`, and restart OpenChamber.
207
208
 
208
- `npm run build` also builds the OmO Graph extension; `setup` prints its folder
209
- (`$PWD/extensions/omo-dag`) to add in **Settings → Extensions → Add → Folder**.
209
+ `npm run build` also builds the OmO Graph and OmO Work extensions; `setup`
210
+ prints their folders (`$PWD/extensions/omo-dag`, `$PWD/extensions/omo-work`) to
211
+ add in **Settings → Extensions → Add → Folder**.
210
212
 
211
- ## OpenChamber extension: OmO Graph
213
+ ## OpenChamber extensions
212
214
 
213
- `extensions/omo-dag` is an OpenChamber extension that ships with antechamber
214
- and is built by `npm run build`. With the default OmO backend, it adds a rail panel
215
- showing the open session's orchestrator and every sub-agent OmO launched,
216
- grouped in waves:
215
+ antechamber ships three optional OpenChamber extensions, in the npm package and
216
+ attached to every GitHub release. None is required to run sessions.
217
+
218
+ | Extension | Adds | OpenChamber | Asks for |
219
+ |---|---|---|---|
220
+ | [OmO Graph](#omo-graph) (`extensions/omo-dag`) | a rail panel drawing the session's OmO sub-agents as a live graph | 1.22 or newer | sessions, local service |
221
+ | [OmO Work](#omo-work) (`extensions/omo-work`) | a Work Status section with the session's todo phases, monitors, eval cells, background sessions and goal timer | 2.3.2 or newer | local service |
222
+ | [OmO Compatibility](#omo-compatibility) (`extensions/omo-compat`) | headers for OmO tool cards, such as `JS Eval` on eval cells | 1.24 or newer | nothing |
223
+
224
+ All three run on OpenChamber web and desktop; VS Code and mobile load no
225
+ extensions.
226
+
227
+ ### Installing an extension
228
+
229
+ In OpenChamber, open **Settings → Extensions → Add** and pick the source that
230
+ fits where OpenChamber runs:
231
+
232
+ | OpenChamber runs | Add | OmO Graph | OmO Work | OmO Compatibility |
233
+ |---|---|---|---|---|
234
+ | anywhere (recommended) | **URL** (Git) | `https://github.com/eliottness/antechamber#extension/omo-graph` | `…#extension/omo-work` | `…#extension/omo-compat` |
235
+ | on the machine where antechamber is installed | **Folder** | `extensions/omo-dag` | `extensions/omo-work` | `extensions/omo-compat` |
236
+ | anywhere, offline | **ZIP file** | `antechamber-omo-graph.zip` | `antechamber-omo-work.zip` | `antechamber-omo-compat.zip` |
237
+
238
+ - **URL**: a Git install from the branch every release publishes. OpenChamber
239
+ offers to update it after each release. Keep the `#extension/...` part: the
240
+ bare repository URL makes OpenChamber clone antechamber itself, whose
241
+ `package.json` is not an extension, and OpenChamber words that rejection as
242
+ "panel.id must be kebab-case".
243
+ - **Folder**: the paths `antechamber setup` prints, under
244
+ `$(npm root -g)/antechamber/` for npm installs or the checkout after
245
+ `npm run build`.
246
+ - **ZIP file**: attached to every GitHub release, or built with
247
+ `npm run build && npm run pack:extension -- antechamber-omo-graph.zip` (OmO
248
+ Graph) or `npm run pack:work-extension -- antechamber-omo-work.zip` (OmO
249
+ Work). OpenChamber never updates ZIP installs.
250
+
251
+ Then approve the permissions it asks for. See
252
+ [Upgrading the OpenChamber extensions](#upgrading-the-openchamber-extensions)
253
+ for how each source moves to a new release.
254
+
255
+ ### OmO Graph
256
+
257
+ With the default OmO backend, OmO Graph adds a rail panel showing the open
258
+ session's orchestrator and every sub-agent OmO launched, grouped in waves:
217
259
 
218
260
  - each card shows the sub-agent's live state, duration, agent and model;
219
261
  - hovering a card highlights its input and output edges;
220
262
  - clicking a card opens that sub-agent's session.
221
263
 
222
- It reads OmO's task store and antechamber's session registry read-only,
223
- through a small local service that OpenChamber starts.
264
+ Its local service reads OmO's task store and antechamber's session registry
265
+ read-only. Details: [extensions/omo-dag/README.md](extensions/omo-dag/README.md).
224
266
 
225
- Install it from OpenChamber's **Settings → Extensions → Add**, using whichever
226
- source fits where OpenChamber runs:
267
+ ### OmO Work
227
268
 
228
- | OpenChamber runs | Add | Value |
229
- |---|---|---|
230
- | on the machine where antechamber is installed | **Folder** | the path `antechamber setup` prints: `$(npm root -g)/antechamber/extensions/omo-dag` for npm installs, `<checkout>/extensions/omo-dag` after `npm run build` from source |
231
- | anywhere (remote host, browser-only access) | **URL** | `https://github.com/eliottness/antechamber#extension/omo-graph`, a Git install that OpenChamber offers to update after each release |
232
- | anywhere, offline | **ZIP file** | `antechamber-omo-graph.zip` from a GitHub release, or built with `npm run build && npm run pack:extension -- antechamber-omo-graph.zip`. OpenChamber never updates ZIP installs |
233
-
234
- Then approve its two permissions (follow sessions, run the local service) and
235
- open it from the rail icon. Keep the `#extension/omo-graph` part of the URL:
236
- the bare repository URL makes OpenChamber clone antechamber itself, whose
237
- `package.json` is not an extension, and OpenChamber words that rejection as
238
- "panel.id must be kebab-case". Details:
239
- [extensions/omo-dag/README.md](extensions/omo-dag/README.md).
240
-
241
- ## OpenChamber extension: OmO Work
242
-
243
- `extensions/omo-work` adds an **OmO Work** section to OpenChamber 2.x's Work
244
- Status panel (OpenChamber 2.3.2 or newer; 1.x has no extension sections). For
245
- the open session it shows the OmO todo list grouped by phase, terminal
246
- monitors with their matched lines, detached eval cells with their output and a
247
- Stop button, background terminal sessions, and the goal continuation timer
248
- with a Fire now button. On 2.x, monitors appear here instead of as subagent
249
- sessions.
250
-
251
- Add it like OmO Graph: the folder `antechamber setup` prints
252
- (`.../extensions/omo-work`, built by `npm run build`), or the URL
253
- `https://github.com/eliottness/antechamber#extension/omo-work`.
254
- Approve its local service. It needs an antechamber version that writes a
255
- work-status token into its run record (this release or newer) and an
256
- OpenChamber restart after upgrading. Details:
269
+ OmO Work adds an **OmO Work** section to OpenChamber 2.x's Work Status panel,
270
+ for the background work of the open session:
271
+
272
+ - the OmO todo list grouped by phase, with progress per phase;
273
+ - terminal monitors, with their command, filter and latest matched lines (on
274
+ 2.x, monitors appear here instead of as subagent sessions);
275
+ - detached eval cells, with their output and a **Stop** button;
276
+ - background terminal sessions that are still running;
277
+ - the goal continuation timer, what it waits on, and a **Fire now** button.
278
+
279
+ Its local service talks to the running antechamber through the
280
+ `/antechamber/work-status` routes, authenticated by a token antechamber writes
281
+ into its private run record, so it never needs the server password. It needs
282
+ antechamber running on the same machine as OpenChamber. Details:
257
283
  [extensions/omo-work/README.md](extensions/omo-work/README.md).
258
284
 
259
- ## OpenChamber extension: OmO Compatibility
285
+ ### OmO Compatibility
260
286
 
261
- `extensions/omo-compat` is a second, code-free extension for OpenChamber 1.24
262
- or newer. It tells OpenChamber how to display OmO tool calls that antechamber
263
- maps onto OpenChamber's cards; today it heads eval cells with `JS Eval` or
264
- `Python Eval` and the cell's summary. Add it the same way as OmO Graph: the
265
- folder `antechamber setup` prints (`.../extensions/omo-compat`, no build
266
- needed), or the URL
267
- `https://github.com/eliottness/antechamber#extension/omo-compat`.
268
- It asks for no permissions. Details:
287
+ OmO Compatibility is a manifest with no code. It tells OpenChamber how to
288
+ display OmO tool calls that antechamber maps onto OpenChamber's cards; today
289
+ it heads eval cells with `JS Eval` or `Python Eval` and the cell's summary. It
290
+ needs no build. Details:
269
291
  [extensions/omo-compat/README.md](extensions/omo-compat/README.md).
270
292
 
271
293
  ## Upgrading the OpenChamber extensions
@@ -377,6 +399,8 @@ provenance and creates the GitHub release from the CHANGELOG. See
377
399
  - [RELEASE.md](RELEASE.md) - automatic patch releases to npm and GitHub on every push to `main`
378
400
 
379
401
  - [extensions/omo-dag/README.md](extensions/omo-dag/README.md) - the OmO Graph OpenChamber extension ([design](extensions/omo-dag/docs/DESIGN.md))
402
+ - [extensions/omo-work/README.md](extensions/omo-work/README.md) - the OmO Work status section for OpenChamber 2.x ([design](extensions/omo-work/docs/DESIGN.md))
403
+ - [extensions/omo-compat/README.md](extensions/omo-compat/README.md) - the OmO Compatibility display rules
380
404
 
381
405
  ## Credits
382
406
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-compat",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "OpenChamber extension: displays OmO tool calls the way OmO means them when OpenChamber runs on antechamber",
5
5
  "private": true,
6
6
  "type": "module",
@@ -31,6 +31,10 @@ sessions on OmO.
31
31
  The panel docks in the right rail. The same page is also available full
32
32
  screen from the sidebar's Extension pages menu.
33
33
 
34
+ On OpenChamber 2.x, the bundled [OmO Work](../omo-work/README.md) section
35
+ complements the graph with the session's todo phases, monitors, eval cells and
36
+ other background work.
37
+
34
38
  ## Requirements
35
39
 
36
40
  - OpenChamber **1.22 or newer**, on web or desktop. It is verified against
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-graph",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "OpenChamber extension: live, interactive graph of the OmO sub-agents behind the current session",
5
5
  "private": true,
6
6
  "type": "module",
@@ -64,7 +64,8 @@ section (sandboxed iframe) --serviceRequest /status?session=ses_...--> OpenChamb
64
64
  `antechamber serve` writes `<state dir>/run/<pid>.json` (mode 0600) with its
65
65
  URL and a random token that opens only the `/antechamber/work-status` routes. The service
66
66
  picks the running server whose agent holds the session and relays the snapshot
67
- and the Stop and Fire now actions. It keeps no state. See
67
+ and the Stop and Fire now actions. It keeps no state. See [docs/DESIGN.md](docs/DESIGN.md) for the snapshot, refresh,
68
+ server choice and security boundary, and
68
69
  [docs/architecture.md](../../docs/architecture.md#omo-work-status-section) for
69
70
  where each piece of data comes from in OmO.
70
71
 
@@ -0,0 +1,117 @@
1
+ # OmO Work: design
2
+
3
+ OmO Work is an OpenChamber 2.x Work Status section for the background work of
4
+ the open session. This document covers its parts, its data, its security
5
+ boundary and its limits. Where each field comes from in OmO is documented in
6
+ [docs/architecture.md](../../../docs/architecture.md#omo-work-status-section).
7
+
8
+ ## Parts
9
+
10
+ ```
11
+ OpenChamber Work Status panel
12
+ └─ section frame (status/index.html + status/main.js, sandboxed iframe)
13
+ │ host.serviceRequest GET /status, GET /eval, POST /eval/stop, POST /goal/fire
14
+ ▼
15
+ OpenChamber host ── loopback + OPENCHAMBER_SERVICE_TOKEN ──▶ service/main.js (Node, on the host)
16
+ │ reads <state dir>/run/<pid>.json
17
+ │ Bearer <run token>
18
+ ▼
19
+ antechamber /antechamber/work-status/<session>[...]
20
+ │ snapshot from its bridges,
21
+ ▼ eval_cells.* / goal RPC to OmO
22
+ omo --mode rpc
23
+ ```
24
+
25
+ - **Manifest**: `contributes.statusSection` with its own entry, a host
26
+ `service`, and a `panel` block with no entry. OpenChamber 2.x's manifest
27
+ parser requires a `panel` object, but without `panel.entry` there is no rail
28
+ icon or panel; the section is the only surface.
29
+ - **Frame** (`src/status.ts`, `src/view.ts`): renders the snapshot. It follows
30
+ the open session through `host.onSession`, sizes itself through
31
+ `host.setHeight`, and publishes one host header control, **Data path**, when
32
+ the host supports status controls.
33
+ - **Service** (`src/service.ts`, `src/discovery.ts`): stateless relay. It finds
34
+ running antechamber servers through their run records and forwards the
35
+ frame's requests.
36
+ - **Adapter** (`src/work-status.ts` in antechamber): builds the snapshot and
37
+ runs the actions.
38
+
39
+ ## Snapshot
40
+
41
+ `GET /antechamber/work-status/<session>` answers one JSON object, version 1:
42
+
43
+ | Field | Content |
44
+ |---|---|
45
+ | `live` | the session's agent process is running; peek, Stop and Fire now need it |
46
+ | `todo` | todo phases in OmO's order, each `{name, tasks: [{content, status}]}`, status `pending`, `in_progress`, `completed` or `cancelled` |
47
+ | `monitors` | live watches (newest first), then the five most recently ended, each with its last 20 matched lines and, once ended, a readable reason |
48
+ | `evalCells` | detached eval cells from `eval_cells.list`, or from the codemode wake source when the list is unavailable (`evalCellsListed: false`) |
49
+ | `background` | background terminal sessions whose process is alive |
50
+ | `goal` | the goal continuation timer (`armed`, `kind`, `dueAtMs`) and the wake-source counts it waits on, or `null` |
51
+ | `wakeSources` | other active wake sources without a dedicated view |
52
+
53
+ The frame checks the envelope (`src/model.ts`) and imports these types from the
54
+ adapter, so a shape change on either side fails the typecheck.
55
+
56
+ ## Refresh
57
+
58
+ The frame polls `/status` one request at a time:
59
+
60
+ - every 1.5 s while anything can change on its own (a live monitor, a running
61
+ or queued cell, a background session, an armed timer, a task in progress);
62
+ - every 5 s otherwise, and while the page is hidden;
63
+ - every 10 s after an error, keeping the last snapshot on screen with the
64
+ error above it.
65
+
66
+ A session switch bumps a generation counter, so a late answer for the previous
67
+ session is dropped. Elapsed times and countdowns tick every second from the
68
+ snapshot without refetching. An open eval cell's output is re-read on each
69
+ poll while the cell runs, and once more when its state changes, so a finished
70
+ cell shows its last lines.
71
+
72
+ The adapter caches `eval_cells.list` for one second per session, so several
73
+ open sections cost one RPC.
74
+
75
+ ## Choosing the server
76
+
77
+ Several antechamber servers can run at once, and each can answer for a session
78
+ it only knows from disk. For `/status`, the service asks the servers in order,
79
+ newest first, and prefers the first answer with `live: true`, else the first
80
+ successful one. It remembers which server answered for each session and sends
81
+ that session's actions there.
82
+
83
+ Run records without a `token` (older antechamber versions) and records of dead
84
+ processes are skipped. A wildcard bind address (`0.0.0.0`, `::`) is dialed on
85
+ loopback.
86
+
87
+ ## Security boundary
88
+
89
+ - **Token scope**: `serve` generates a random 256-bit token at start and writes
90
+ it into `<state dir>/run/<pid>.json` (file 0600, directory 0700). The adapter
91
+ accepts it as `Authorization: Bearer <token>` only when the normalized path
92
+ starts with `/antechamber/work-status/`, so dot segments, `%2e` and
93
+ backslashes cannot reach other routes. It never replaces the server password
94
+ for anything else.
95
+ - **Who can read it**: only processes running as the same user, which can
96
+ already read antechamber's state directory and drive OmO directly.
97
+ - **Frame**: the sandboxed iframe holds no token. It reaches the service only
98
+ through the host, which adds its own per-service token. All text from OmO is
99
+ inserted with `textContent`, never as HTML.
100
+ - **Inputs**: session IDs must match `ses_[0-9A-Za-z]+` and cell IDs
101
+ `[\w.:-]{1,128}`, in both the service and the adapter. Output peeks are
102
+ capped at 64 KiB.
103
+ - **Actions**: Stop and Fire now map to OmO's own RPC requests
104
+ (`eval_cells.stop`, `goal_continuation_fire_now`). The extension kills no
105
+ process itself.
106
+
107
+ ## Limits
108
+
109
+ - No Stop for monitors or background terminal sessions, and no continuation
110
+ holds: OmO exposes neither over RPC.
111
+ - Eval cells need OmO's codemode. Without it, or while the agent process is
112
+ stopped, the section shows the cells OmO last reported, without output or
113
+ Stop.
114
+ - Background sessions come from OmO's terminal manifest, which OmO writes on
115
+ start and exit; their command is shown but not their output.
116
+ - The service must run on the machine that runs antechamber, since it reads
117
+ the run records.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-work",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "OpenChamber 2.x Work Status section: OmO todo phases, monitors, eval cells and background work of the current session",
5
5
  "private": true,
6
6
  "type": "module",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "OpenCode-compatible HTTP/SSE server that lets OpenChamber drive the pi coding agent (and OmO) over RPC",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -40,6 +40,7 @@
40
40
  "extensions/omo-work/status/main.js",
41
41
  "extensions/omo-work/service/main.js",
42
42
  "extensions/omo-work/README.md",
43
+ "extensions/omo-work/docs/DESIGN.md",
43
44
  "extensions/omo-compat/package.json",
44
45
  "extensions/omo-compat/icon.svg",
45
46
  "extensions/omo-compat/README.md",