antechamber 1.0.39 → 1.0.41

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/dist/v2.js CHANGED
@@ -23,6 +23,7 @@
23
23
  */
24
24
  import { randomUUID } from "node:crypto";
25
25
  import { getAgentName } from "./agent-name.js";
26
+ import { toV2Permission } from "./approvals.js";
26
27
  import { questionFormID, toQuestionForm } from "./question-forms.js";
27
28
  import { v2PromptAttachments } from "./prompt-parts.js";
28
29
  function genId(prefix) {
@@ -97,6 +98,7 @@ export function toV2Session(info, opts = {}) {
97
98
  created: info.time.created,
98
99
  updated: info.time.updated,
99
100
  ...(info.time.idle !== undefined ? { idle: info.time.idle } : {}),
101
+ ...(info.time.viewed !== undefined ? { viewed: info.time.viewed } : {}),
100
102
  ...(info.time.archived !== undefined ? { archived: info.time.archived } : {}),
101
103
  },
102
104
  title: info.title,
@@ -127,7 +129,14 @@ function toV2UserMessage(info) {
127
129
  const metadata = user.metadata !== undefined ? { metadata: user.metadata } : {};
128
130
  // Admitted no-reply context lists as OpenCode's synthetic item, not as a user turn.
129
131
  if (user.synthetic)
130
- return { id: user.id, time: { created: user.time.created }, type: "synthetic", text, ...metadata };
132
+ return {
133
+ id: user.id,
134
+ time: { created: user.time.created },
135
+ type: "synthetic",
136
+ text,
137
+ ...(user.description !== undefined ? { description: user.description } : {}),
138
+ ...metadata,
139
+ };
131
140
  const inputs = info.parts.flatMap((part) => (part.type === "file" || part.type === "agent" ? [part] : []));
132
141
  return {
133
142
  id: user.id,
@@ -290,16 +299,28 @@ export class V2EventTranslator {
290
299
  switch (ev.type) {
291
300
  case "session.inbox.enqueued":
292
301
  case "session.inbox.delivered":
302
+ case "session.renamed":
303
+ case "session.agent.selected":
304
+ case "session.archived":
305
+ case "session.unarchived":
306
+ case "session.viewed":
293
307
  case "session.revert.staged":
294
308
  case "session.revert.cleared":
295
309
  case "session.revert.committed":
296
310
  case "session.compaction.started":
311
+ case "session.compaction.delta":
297
312
  case "session.compaction.ended":
298
313
  case "session.compaction.failed":
299
314
  case "session.shell.started":
300
315
  case "session.shell.ended":
301
316
  case "shell.created":
302
317
  case "shell.exited":
318
+ case "filesystem.changed":
319
+ case "project.updated":
320
+ case "provider.updated":
321
+ case "model.updated":
322
+ case "command.updated":
323
+ case "vcs.branch.updated":
303
324
  return [this.frame(directory, ev.type, ev.properties)];
304
325
  case "message.removed":
305
326
  return [
@@ -318,6 +339,7 @@ export class V2EventTranslator {
318
339
  subpath: subpathOf(info.directory),
319
340
  title: info.title,
320
341
  agent: info.agent ?? getAgentName(),
342
+ ...(info.model !== undefined ? { model: info.model } : {}),
321
343
  ...(info.parentID !== undefined ? { parentID: info.parentID } : {}),
322
344
  ...(info.parentMessageID !== undefined ? { parentMessageID: info.parentMessageID } : {}),
323
345
  ...(info.metadata !== undefined ? { metadata: info.metadata } : {}),
@@ -327,11 +349,9 @@ export class V2EventTranslator {
327
349
  case "session.updated": {
328
350
  const info = ev.properties.info;
329
351
  return [
330
- this.frame(directory, "session.renamed", { sessionID: info.id, title: info.title }),
331
352
  ...(info.metadata !== undefined
332
353
  ? [this.frame(directory, "session.metadata.updated", { sessionID: info.id, metadata: info.metadata })]
333
354
  : []),
334
- this.frame(directory, "session.agent.selected", { sessionID: info.id, agent: info.agent ?? getAgentName() }),
335
355
  ...(info.cost !== undefined
336
356
  ? [
337
357
  this.frame(directory, "session.usage.updated", {
@@ -427,7 +447,7 @@ export class V2EventTranslator {
427
447
  }
428
448
  case "permission.asked": {
429
449
  const p = ev.properties;
430
- return [this.frame(directory, "permission.asked", p)];
450
+ return [this.frame(directory, "permission.asked", toV2Permission(p))];
431
451
  }
432
452
  case "permission.replied":
433
453
  return [this.frame(directory, "permission.replied", ev.properties)];
@@ -489,12 +509,10 @@ export class V2EventTranslator {
489
509
  step.error = info.error ?? { name: "UnknownError", data: { message: "Provider error" } };
490
510
  }
491
511
  st.step = step;
492
- frames.push(this.frame(directory, "session.step.started", {
493
- sessionID: info.sessionID,
494
- assistantMessageID: info.id,
495
- agent: step.agent,
496
- model: step.model,
497
- }));
512
+ // OpenChamber 2.x takes the message's creation time from this frame (events.ts `session.step.started`) and
513
+ // reorders by it. A history refresh re-announces every reply, so `Date.now()` would move them all after the
514
+ // prompts they answer.
515
+ frames.push(this.frame(directory, "session.step.started", { sessionID: info.sessionID, assistantMessageID: info.id, agent: step.agent, model: step.model }, info.time.created));
498
516
  }
499
517
  else if (st.step) {
500
518
  st.step.cost = info.cost;
@@ -512,11 +530,11 @@ export class V2EventTranslator {
512
530
  if (st.step && !st.step.ended && info.time.completed !== undefined) {
513
531
  if (info.finish !== undefined)
514
532
  st.step.finish = info.finish;
515
- frames.push(...this.finalizeStep(directory, st.step));
533
+ frames.push(...this.finalizeStep(directory, st.step, info.time.completed));
516
534
  }
517
535
  return frames;
518
536
  }
519
- finalizeStep(directory, st) {
537
+ finalizeStep(directory, st, completed) {
520
538
  if (st.ended)
521
539
  return [];
522
540
  st.ended = true;
@@ -529,14 +547,14 @@ export class V2EventTranslator {
529
547
  error: st.error ?? { name: "UnknownError", data: { message: "Provider error" } },
530
548
  cost: st.cost,
531
549
  tokens: st.tokens,
532
- })
550
+ }, completed)
533
551
  : this.frame(directory, "session.step.ended", {
534
552
  sessionID: st.sessionID,
535
553
  assistantMessageID: st.messageID,
536
554
  ...(st.finish !== undefined ? { finish: st.finish } : {}),
537
555
  cost: st.cost,
538
556
  tokens: st.tokens,
539
- }),
557
+ }, completed),
540
558
  ];
541
559
  }
542
560
  onPartUpdated(directory, part, delta) {
@@ -704,14 +722,14 @@ export class V2EventTranslator {
704
722
  }
705
723
  return st;
706
724
  }
707
- frame(directory, type, data) {
725
+ frame(directory, type, data, created = Date.now()) {
708
726
  const aggregateID = typeof data.sessionID === "string" ? data.sessionID : undefined;
709
727
  const seq = aggregateID === undefined ? undefined : (this.sequences.get(aggregateID) ?? 0) + 1;
710
728
  if (aggregateID !== undefined && seq !== undefined)
711
729
  this.sequences.set(aggregateID, seq);
712
730
  return {
713
731
  id: genId("evt"),
714
- created: Date.now(),
732
+ created,
715
733
  type,
716
734
  location: { directory },
717
735
  data,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-compat",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-graph",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antechamber-omo-work",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
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.39",
3
+ "version": "1.0.41",
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",