antechamber 1.0.1 → 1.0.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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,25 @@ and this project uses [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.0.3] - 2026-10-20
11
+
12
+ ### Added
13
+
14
+ - The OpenChamber extensions install by Git URL, and OpenChamber offers each release under
15
+ **Update** in Settings → Extensions: every release commits them to the `extension/omo-graph`,
16
+ `extension/omo-work` and `extension/omo-compat` branches, so add
17
+ `https://github.com/eliottness/antechamber#extension/omo-graph` (or `#extension/omo-work`,
18
+ `#extension/omo-compat`). The bare repository URL keeps failing with OpenChamber's "panel.id must
19
+ be kebab-case" toast, because it points at antechamber itself. ZIP installs still work but are
20
+ never updated.
21
+
22
+ ## [1.0.2] - 2026-10-20
23
+
24
+ ### Fixed
25
+
26
+ - Restore main-session costs before listing sessions after a restart, and keep live usage totals cumulative
27
+ across assistant steps.
28
+
10
29
  ## [1.0.1] - 2026-10-20
11
30
 
12
31
  ### Added
package/README.md CHANGED
@@ -228,13 +228,14 @@ source fits where OpenChamber runs:
228
228
  | OpenChamber runs | Add | Value |
229
229
  |---|---|---|
230
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/releases/latest/download/antechamber-omo-graph.zip` (attached to every GitHub release) |
232
- | anywhere, offline | **ZIP file** | that same `antechamber-omo-graph.zip`, downloaded, or built with `npm run build && npm run pack:extension -- antechamber-omo-graph.zip` |
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
233
 
234
234
  Then approve its two permissions (follow sessions, run the local service) and
235
- open it from the rail icon. Don't install it from the repository's Git URL:
236
- OpenChamber clones the repository root, which is antechamber itself, not the
237
- extension, and refuses it as an invalid manifest. Details:
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:
238
239
  [extensions/omo-dag/README.md](extensions/omo-dag/README.md).
239
240
 
240
241
  ## OpenChamber extension: OmO Work
@@ -248,8 +249,8 @@ with a Fire now button. On 2.x, monitors appear here instead of as subagent
248
249
  sessions.
249
250
 
250
251
  Add it like OmO Graph: the folder `antechamber setup` prints
251
- (`.../extensions/omo-work`, built by `npm run build`), or
252
- `https://github.com/eliottness/antechamber/releases/latest/download/antechamber-omo-work.zip`.
252
+ (`.../extensions/omo-work`, built by `npm run build`), or the URL
253
+ `https://github.com/eliottness/antechamber#extension/omo-work`.
253
254
  Approve its local service. It needs an antechamber version that writes a
254
255
  work-status token into its run record (this release or newer) and an
255
256
  OpenChamber restart after upgrading. Details:
@@ -262,11 +263,31 @@ or newer. It tells OpenChamber how to display OmO tool calls that antechamber
262
263
  maps onto OpenChamber's cards; today it heads eval cells with `JS Eval` or
263
264
  `Python Eval` and the cell's summary. Add it the same way as OmO Graph: the
264
265
  folder `antechamber setup` prints (`.../extensions/omo-compat`, no build
265
- needed), or the release archive
266
- `https://github.com/eliottness/antechamber/releases/latest/download/antechamber-omo-compat.zip`.
266
+ needed), or the URL
267
+ `https://github.com/eliottness/antechamber#extension/omo-compat`.
267
268
  It asks for no permissions. Details:
268
269
  [extensions/omo-compat/README.md](extensions/omo-compat/README.md).
269
270
 
271
+ ## Upgrading the OpenChamber extensions
272
+
273
+ Every antechamber release ships the three extensions at its own version. How
274
+ an installed extension moves to a new release depends on how it was added:
275
+
276
+ - **Git URL** (`https://github.com/eliottness/antechamber#extension/...`):
277
+ Settings → Extensions shows **Update available** once a release is out
278
+ (OpenChamber checks at most hourly; **Check for updates** checks now).
279
+ **Update** replaces it in place and keeps its approvals and settings.
280
+ - **Folder**: the folder belongs to the antechamber installation, so it
281
+ changes with `antechamber upgrade` (or `git pull && npm ci && npm run build`
282
+ in a checkout). Toggle the extension off and on to restart its service.
283
+ - **ZIP** (file or release URL): OpenChamber never checks these. Add the new
284
+ archive and choose **Reinstall**, or switch to the Git URL once: remove the
285
+ extension, then add it by URL.
286
+
287
+ Each extension is built against the antechamber of the same release, so
288
+ upgrade antechamber too and restart OpenChamber to run it; `antechamber
289
+ doctor` shows the running version.
290
+
270
291
  ## Configuration
271
292
 
272
293
  Connector settings use the `ANTECHAMBER_` prefix; the deprecated `OCPI_`
@@ -119,6 +119,7 @@ export declare class SessionManager {
119
119
  * global/recent view; `list(directory)` stays the per-project source of truth.
120
120
  */
121
121
  listAll(): OCSession[];
122
+ private sessionInfo;
122
123
  get(sessionId: string): ManagedSession | undefined;
123
124
  remove(sessionId: string): Promise<boolean>;
124
125
  private removeLive;
package/dist/sessions.js CHANGED
@@ -312,10 +312,10 @@ export class SessionManager {
312
312
  this.subagents.restoreAll();
313
313
  if (directory !== undefined) {
314
314
  this.ensureScanned(directory);
315
- return [...this.sessions.values()].map((s) => s.info).filter((s) => s.directory === directory);
315
+ return [...this.sessions.values()].filter((s) => s.info.directory === directory).map((s) => this.sessionInfo(s));
316
316
  }
317
317
  // Unfiltered: keep the old semantics — live sessions only.
318
- return [...this.sessions.values()].filter((s) => s.restored === undefined).map((s) => s.info);
318
+ return [...this.sessions.values()].filter((s) => s.restored === undefined).map((s) => this.sessionInfo(s));
319
319
  }
320
320
  /**
321
321
  * Every restorable session on disk (all directories) plus live ones. Backs the
@@ -326,7 +326,12 @@ export class SessionManager {
326
326
  this.refreshNativeTitles();
327
327
  this.ensureAllScanned();
328
328
  this.subagents.restoreAll();
329
- return [...this.sessions.values()].map((s) => s.info);
329
+ return [...this.sessions.values()].map((s) => this.sessionInfo(s));
330
+ }
331
+ sessionInfo(s) {
332
+ if (s.restored !== undefined)
333
+ this.ensureMessages(s);
334
+ return s.info;
330
335
  }
331
336
  get(sessionId) {
332
337
  if (this.disposed)
@@ -334,9 +339,13 @@ export class SessionManager {
334
339
  const live = this.sessions.get(sessionId);
335
340
  if (live !== undefined) {
336
341
  this.refreshNativeTitles();
342
+ this.sessionInfo(live);
337
343
  return live;
338
344
  }
339
- return this.subagents.restore(sessionId) ?? this.resolveRestored(sessionId);
345
+ const restored = this.subagents.restore(sessionId) ?? this.resolveRestored(sessionId);
346
+ if (restored !== undefined)
347
+ this.sessionInfo(restored);
348
+ return restored;
340
349
  }
341
350
  async remove(sessionId) {
342
351
  return this.lifecycle.run(() => this.removeLive(sessionId));
package/dist/v2.js CHANGED
@@ -282,6 +282,15 @@ export class V2EventTranslator {
282
282
  ? [this.frame(directory, "session.metadata.updated", { sessionID: info.id, metadata: info.metadata })]
283
283
  : []),
284
284
  this.frame(directory, "session.agent.selected", { sessionID: info.id, agent: info.agent ?? getAgentName() }),
285
+ ...(info.cost !== undefined
286
+ ? [
287
+ this.frame(directory, "session.usage.updated", {
288
+ sessionID: info.id,
289
+ cost: info.cost,
290
+ tokens: info.tokens ?? zeroTokens(),
291
+ }),
292
+ ]
293
+ : []),
285
294
  ];
286
295
  }
287
296
  case "session.diff":
@@ -462,7 +471,6 @@ export class V2EventTranslator {
462
471
  return [];
463
472
  st.ended = true;
464
473
  return [
465
- this.frame(directory, "session.usage.updated", { sessionID: st.sessionID, cost: st.cost, tokens: st.tokens }),
466
474
  st.finish === "error"
467
475
  ? this.frame(directory, "session.step.failed", {
468
476
  sessionID: st.sessionID,
@@ -31,8 +31,11 @@ In OpenChamber, open **Settings → Extensions → Add**:
31
31
  `$(npm root -g)/antechamber/extensions/omo-compat` for an npm install, or
32
32
  `<checkout>/extensions/omo-compat` from a source checkout. It needs no build.
33
33
  - **URL**, from anywhere:
34
- `https://github.com/eliottness/antechamber/releases/latest/download/antechamber-omo-compat.zip`.
35
- Every GitHub release attaches this archive.
34
+ `https://github.com/eliottness/antechamber#extension/omo-compat`, a Git
35
+ install that OpenChamber offers to update after each release. Every GitHub
36
+ release also attaches
37
+ `https://github.com/eliottness/antechamber/releases/latest/download/antechamber-omo-compat.zip`,
38
+ which installs by URL too, but OpenChamber never updates ZIP installs.
36
39
 
37
40
  There is nothing to approve and no rail icon. Reload open chats after
38
41
  installing so their cards pick up the new header.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-compat",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
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",
@@ -58,16 +58,18 @@ fits where OpenChamber runs:
58
58
  - source checkout: `<checkout>/extensions/omo-dag`, after `npm run build`
59
59
  (which also writes `panel/main.js` and `service/main.js`).
60
60
  - **URL**, from anywhere, including a remote OpenChamber you only reach in a
61
- browser:
62
- `https://github.com/eliottness/antechamber/releases/latest/download/antechamber-omo-graph.zip`.
63
- Every GitHub release attaches this archive. Append a version instead of
64
- `latest` (`.../releases/download/vX.Y.Z/antechamber-omo-graph.zip`) to pin
65
- one.
66
- - **ZIP file**, for offline hosts: the same archive, downloaded, or built with
61
+ browser: `https://github.com/eliottness/antechamber#extension/omo-graph`.
62
+ Every release commits the built extension to the `extension/omo-graph`
63
+ branch, so OpenChamber offers it under **Update** in Settings → Extensions.
64
+ To pin a version instead, install its release archive by URL,
65
+ `https://github.com/eliottness/antechamber/releases/download/vX.Y.Z/antechamber-omo-graph.zip`;
66
+ OpenChamber never updates ZIP installs.
67
+ - **ZIP file**, for offline hosts: that archive, downloaded, or built with
67
68
  `npm run build && npm run pack:extension -- antechamber-omo-graph.zip`.
68
69
 
69
- Don't use the repository's Git URL. OpenChamber clones the repository root,
70
- which is antechamber itself, and rejects it as `invalid-manifest`.
70
+ Keep the `#extension/omo-graph` part of the URL. Without it OpenChamber clones
71
+ the repository root, which is antechamber itself, and rejects it as
72
+ `invalid-manifest`, which its toast words as "panel.id must be kebab-case".
71
73
 
72
74
  Approve the request. The extension asks for two things:
73
75
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-graph",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
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",
@@ -31,9 +31,12 @@ In OpenChamber, open **Settings → Extensions → Add**:
31
31
  installed: the path `antechamber setup` prints,
32
32
  `$(npm root -g)/antechamber/extensions/omo-work` for npm installs or
33
33
  `<checkout>/extensions/omo-work` after `npm run build`.
34
- - **URL**:
35
- `https://github.com/eliottness/antechamber/releases/latest/download/antechamber-omo-work.zip`.
36
- - **ZIP file**: the same archive, or
34
+ - **URL**: `https://github.com/eliottness/antechamber#extension/omo-work`, a
35
+ Git install that OpenChamber offers to update after each release. The
36
+ release archive,
37
+ `https://github.com/eliottness/antechamber/releases/latest/download/antechamber-omo-work.zip`,
38
+ also installs by URL, but OpenChamber never updates ZIP installs.
39
+ - **ZIP file**: that archive, or
37
40
  `npm run build && npm run pack:work-extension -- antechamber-omo-work.zip`.
38
41
 
39
42
  Approve its **local service**. The section then appears in the Work Status
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-work",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
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.1",
3
+ "version": "1.0.3",
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",