@with-logic/elwood 0.2.0 → 0.2.1

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
@@ -12,6 +12,12 @@ back each entry are listed in `prd/14-conformance.md`.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.2.1] - 2026-10-24
16
+
17
+ - Reduce median active Elwood CPU by 11.3% in the measured 50-session workload
18
+ by sharing completed-frame text, preserving fresh public snapshots and direct
19
+ xterm writes.
20
+
15
21
  ## [0.2.0] - 2026-10-22
16
22
 
17
23
  - Codex question turns settle after native completion even when consecutive answer echoes contain caret-like multiline text.
package/README.md CHANGED
@@ -549,6 +549,8 @@ immediate; both are safe after the process has already exited.
549
549
  size, and persisting/resuming.
550
550
  - [docs/embedding.md](docs/embedding.md): wiring a session into a host
551
551
  application (Electron and similar).
552
+ - [docs/performance.md](docs/performance.md): fifty-session measurements, headless
553
+ history budgets, and terminal-engine assessment.
552
554
  - [docs/loops.md](docs/loops.md): recurring prompts and `/loop` parsing.
553
555
  - [docs/images.md](docs/images.md): attaching images to a turn.
554
556
  - [docs/login-recovery.md](docs/login-recovery.md): detecting and recovering an
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AASjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,KAAK,OAAO,GAAG;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C,8BAAsB,gBAAiB,SAAQ,mBAAmB;IAChE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAE1C,SAAS,aACP,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,oBAAoB,EAClC,cAAc,EAAE,oBAAoB,EACpC,eAAe,EAAE,SAAS,uBAAuB,EAAE;IA4CrD,6FAA6F;cAC1E,cAAc,IAAI,OAAO;IAI5C;;;;;OAKG;IACH,SAAS,CAAC,wBAAwB,IAAI,OAAO;IAI7C,+FAA+F;IAC/F,SAAS,CAAC,kBAAkB,IAAI,OAAO;IAIvC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAGhE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAGlE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAGnE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAGzC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAGzC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC;IAGnE,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GACzE,OAAO,CAAC,IAAI,CAAC;IAGhB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAGnE,SAAS,IAAI,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC;IAGnD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,6FAA6F;IAC7F,SAAS,CAAC,kBAAkB,IAAI,MAAM,GAAG,SAAS;IAIlD,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAGhD,qFAAqF;IACrF,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7F,8EAA8E;IAC9E,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAInD,OAAO,CAAC,OAAO;CAiBhB"}
@@ -11,7 +11,7 @@ import { submissionControlOptions } from "../../core/input/submission-cancel.js"
11
11
  import { isPickerIntervention } from "../../core/models/intervention.js";
12
12
  import { submissionAttempt } from "../../core/simple/submission-context.js";
13
13
  import { assertStopInput } from "../../core/stop-input.js";
14
- import { currentRenderedFrame } from "../../terminal/cursor.js";
14
+ import { currentRenderedFrame, renderedSnapshot } from "../../terminal/cursor.js";
15
15
  import { CommandSurface } from "./commands.js";
16
16
  import { enqueueSubmission, } from "./image-attach.js";
17
17
  import { PickerInputOwnership } from "./picker-input.js";
@@ -28,7 +28,9 @@ export class AgentSessionBase extends QuestionSessionBase {
28
28
  terminal: ownership.automated,
29
29
  inputSignal: () => ownership.signal(),
30
30
  observeRendered: (listener) => {
31
- terminal.xterm.onWriteParsed(listener);
31
+ // xterm runs this after the ordered completed-frame observers.
32
+ const read = () => renderedSnapshot(terminal).text;
33
+ terminal.xterm.onWriteParsed(() => listener(read));
32
34
  },
33
35
  statusEvents,
34
36
  status: () => this.status,
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/runtime/session/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/runtime/session/base.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,7 @@ export type CommandSurfaceDeps = {
29
29
  readonly blocked: () => boolean;
30
30
  readonly picker: () => ModelPickerSpec;
31
31
  readonly controlQueue: ControlQueue;
32
- readonly observeRendered?: (listener: () => void) => void;
32
+ readonly observeRendered?: (listener: (read?: () => string) => void) => void;
33
33
  readonly inputSignal?: () => AbortSignal;
34
34
  readonly submitDirect: (command: string, signal: AbortSignal) => Promise<void>;
35
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAItE,OAAO,EAEL,KAAK,eAAe,EAGrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,2BAA2B,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAW/D,KAAK,OAAO,GAAG;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,mBAAmB,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,eAAe,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,WAAW,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChF,CAAC;AAEF,4FAA4F;AAC5F,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAI5C,OAAO,CAAC,YAAY,CAA4B;gBAEpC,IAAI,EAAE,kBAAkB;IAKpC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3C,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCzC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC;IAQnE;;;;;;OAMG;IACH,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GACzE,OAAO,CAAC,IAAI,CAAC;IAShB,WAAW,IAAI,OAAO;IAItB,6FAA6F;IAC7F,oBAAoB,IAAI,OAAO;CAGhC"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAItE,OAAO,EAEL,KAAK,eAAe,EAGrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,2BAA2B,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAW/D,KAAK,OAAO,GAAG;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,mBAAmB,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,eAAe,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,WAAW,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChF,CAAC;AAEF,4FAA4F;AAC5F,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAI5C,OAAO,CAAC,YAAY,CAA4B;gBAEpC,IAAI,EAAE,kBAAkB;IAKpC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3C,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCzC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC;IAQnE;;;;;;OAMG;IACH,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GACzE,OAAO,CAAC,IAAI,CAAC;IAShB,WAAW,IAAI,OAAO;IAItB,6FAA6F;IAC7F,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -5,7 +5,7 @@ import type { ModelPickerIo, ModelPickerSpec } from "../../core/models/picker.ts
5
5
  import type { ScreenTerminal } from "../../core/models/tui-screen.ts";
6
6
  type PickerDeps = {
7
7
  readonly controlQueue: ControlQueue;
8
- readonly observeRendered?: (listener: () => void) => void;
8
+ readonly observeRendered?: (listener: (read?: () => string) => void) => void;
9
9
  readonly inputSignal?: () => AbortSignal;
10
10
  readonly submitDirect: (command: string, signal: AbortSignal) => Promise<void>;
11
11
  /** Also carries the optional observation barrier (`settled`/`renderFailed`) when real. */
@@ -41,7 +41,7 @@ export declare class PickerTransactions {
41
41
  * human's state, so a WRITE that is not part of a picker transaction — `/login`
42
42
  * recovery, a queued paste — must be withheld while it is up (C-API-55).
43
43
  */
44
- foreignDialogVisible(): boolean;
44
+ foreignDialogVisible(read?: () => string): boolean;
45
45
  /**
46
46
  * Runs `work` inside one exclusive queue slot, so no other command or message is
47
47
  * dispatched until the whole open/navigate/apply-or-cancel flow settles. The queue
@@ -1 +1 @@
1
- {"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/picker.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAWtE,KAAK,UAAU,GAAG;IAChB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,WAAW,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,0FAA0F;IAC1F,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,eAAe,CAAC;CACxC,CAAC;AAEF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,MAAM,CAA0D;IACxE,OAAO,CAAC,QAAQ,CAA8B;IAC9C,wFAAwF;IACxF,OAAO,CAAC,WAAW,CAAK;gBACZ,IAAI,EAAE,UAAU;IAK5B;;;;;;;;;OASG;IACH,WAAW,IAAI,OAAO;IAetB;;;;;;;OAOG;IACH,oBAAoB,IAAI,OAAO;IAM/B;;;;;OAKG;IACG,GAAG,CAAC,CAAC,EACT,IAAI,EAAE,aAAa,GAAG,WAAW,EACjC,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAC3D,OAAO,CAAC,CAAC,CAAC;IAwDb,OAAO,CAAC,EAAE;YA6BI,OAAO;CAQtB"}
1
+ {"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/picker.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAWtE,KAAK,UAAU,GAAG;IAChB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,WAAW,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,0FAA0F;IAC1F,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,eAAe,CAAC;CACxC,CAAC;AAEF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,MAAM,CAA0D;IACxE,OAAO,CAAC,QAAQ,CAA8B;IAC9C,wFAAwF;IACxF,OAAO,CAAC,WAAW,CAAK;gBACZ,IAAI,EAAE,UAAU;IAK5B;;;;;;;;;OASG;IACH,WAAW,IAAI,OAAO;IAetB;;;;;;;OAOG;IACH,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO;IAMlD;;;;;OAKG;IACG,GAAG,CAAC,CAAC,EACT,IAAI,EAAE,aAAa,GAAG,WAAW,EACjC,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAC3D,OAAO,CAAC,CAAC,CAAC;IAwDb,OAAO,CAAC,EAAE;YA6BI,OAAO;CAQtB"}
@@ -10,7 +10,7 @@ export class PickerTransactions {
10
10
  clearStreak = 0;
11
11
  constructor(deps) {
12
12
  this.deps = deps;
13
- deps.observeRendered?.(() => this.foreignDialogVisible());
13
+ deps.observeRendered?.((read) => this.foreignDialogVisible(read));
14
14
  }
15
15
  /**
16
16
  * Whether a model dialog is on screen that queued input must not be written into.
@@ -46,12 +46,12 @@ export class PickerTransactions {
46
46
  * human's state, so a WRITE that is not part of a picker transaction — `/login`
47
47
  * recovery, a queued paste — must be withheld while it is up (C-API-55).
48
48
  */
49
- foreignDialogVisible() {
49
+ foreignDialogVisible(read) {
50
50
  if (this.survivor !== undefined)
51
51
  return false;
52
52
  if (this.active?.progress.commandSubmitted && !this.active.signal.aborted)
53
53
  return false;
54
- return this.foreign.observe(this.deps.terminal.snapshot().text, this.deps.picker());
54
+ return this.foreign.observe(read?.() ?? this.deps.terminal.snapshot().text, this.deps.picker());
55
55
  }
56
56
  /**
57
57
  * Runs `work` inside one exclusive queue slot, so no other command or message is
@@ -1 +1 @@
1
- {"version":3,"file":"picker.js","sourceRoot":"","sources":["../../../src/runtime/session/picker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"picker.js","sourceRoot":"","sources":["../../../src/runtime/session/picker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAInD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,SAAS,EACT,aAAa,EACb,WAAW,EACX,SAAS,EACT,IAAI,GAEL,MAAM,qBAAqB,CAAC;AAc7B,MAAM,OAAO,kBAAkB;IACZ,IAAI,CAAa;IACjB,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC3C,MAAM,CAA0D;IAChE,QAAQ,CAA8B;IAC9C,wFAAwF;IAChF,WAAW,GAAG,CAAC,CAAC;IACxB,YAAY,IAAgB;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;;;;OASG;IACH,WAAW;QACT,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACvF,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,wFAAwF;QACxF,uFAAuF;QACvF,qFAAqF;QACrF,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,WAAW,GAAG,WAAW;YAAE,OAAO,IAAI,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACH,oBAAoB,CAAC,IAAmB;QACtC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC9C,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QACxF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAClG,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CACP,IAAiC,EACjC,IAAqB,EACrB,SAAiB,EACjB,IAA4D;QAE5D,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CACH,QAAQ,CAAC,KAAK,CACZ,WAAW,CAAC,yBAAyB,EAAE,+CAA+C,CAAC,CACxF,EACH,SAAS,CACV,CAAC;QACF,IAAI,MAAU,CAAC;QACf,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CACvC,IAAI,EACJ,KAAK,EAAE,MAAM,EAAE,EAAE;gBACf,kFAAkF;gBAClF,6EAA6E;gBAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;gBAClD,8EAA8E;gBAC9E,6EAA6E;gBAC7E,6EAA6E;gBAC7E,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,SAAS;oBACtE,MAAM,WAAW,CACf,yBAAyB,EACzB,mEAAmE,CACpE,CAAC;gBACJ,MAAM,QAAQ,GAAa;oBACzB,YAAY,EAAE,SAAS;oBACvB,gBAAgB,EAAE,KAAK;oBACvB,UAAU,EAAE,KAAK;oBACjB,UAAU,EAAE,KAAK;iBAClB,CAAC;gBACF,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;gBACpF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC7D,IAAI,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrF,KAAK,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC;oBACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC/D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,QAAQ,CAAC,gBAAgB;wBACjD,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;oBAChD,MAAM,KAAK,CAAC;gBACd,CAAC;wBAAS,CAAC;oBACT,KAAK,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC7C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC1B,CAAC;YACH,CAAC,EACD,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CACjE,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAEO,EAAE,CAAC,MAAmB,EAAE,IAAqB,EAAE,QAAkB;QACvE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAmB;YAC/B,QAAQ,EAAE,GAAG,EAAE;gBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACjC,QAAQ,CAAC,UAAU,KAAK,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,SAAS,CAAC;gBAC7E,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,KAAK,KAAK,SAAS;oBAAE,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC;;oBAClD,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC;QACF,OAAO;YACL,QAAQ;YACR,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YAC1B,uEAAuE;YACvE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;gBACjC,MAAM,CAAC,cAAc,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1E,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC;YACnC,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,IAAqB,EACrB,QAAkB,EAClB,MAAmB;QAEnB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjF,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACtC,CAAC;CACF"}
@@ -10,7 +10,7 @@ export declare function hasUnknownOrNonPristineOutput(terminal: ElwoodTerminal):
10
10
  export declare function captureRenderProgress(terminal: ElwoodTerminal): () => boolean;
11
11
  /** Private queued-input notification; terminal wrappers share the tracked xterm identity. */
12
12
  export declare function subscribeRender(terminal: ElwoodTerminal, listener: () => void): () => void;
13
- /** Called inside an owned render callback; subsequent trust reads reuse this snapshot. */
13
+ /** Completed-render and post-parse picker observations share text with subsequent trust reads. */
14
14
  export declare function renderedSnapshot(terminal: ElwoodTerminal): TerminalSnapshot;
15
15
  export declare class RenderCursor {
16
16
  private readonly listeners;
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/terminal/cursor.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAItE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAEhE;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,gBAAgB,GAAG,SAAS,CAK3F;AAED,4FAA4F;AAC5F,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAE/E;AAED,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,OAAO,CAG7E;AAED,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAE1F;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,gBAAgB,CAE3E;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAM3C,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAE1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgB;IAChD,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,WAAW,CAAM;gBAEb,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,OAAO;IAoB9D,QAAQ,IAAI,MAAM;IAIlB,kFAAkF;IAClF,MAAM,IAAI,MAAM;IAGhB,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjD,eAAe,IAAI,MAAM,OAAO;IAIhC,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,cAAc,IAAI,OAAO,CAE5B;IACD,QAAQ,CAAC,OAAO,EAAE,MAAM,gBAAgB,GAAG,gBAAgB;IAgB3D,OAAO,IAAI,IAAI;CAKhB"}
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/terminal/cursor.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAItE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAEhE;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,gBAAgB,GAAG,SAAS,CAK3F;AAED,4FAA4F;AAC5F,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAE/E;AAED,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,OAAO,CAG7E;AAED,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAE1F;AAED,kGAAkG;AAClG,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,gBAAgB,CAE3E;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAM3C,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAE1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgB;IAChD,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,WAAW,CAAM;gBAEb,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,OAAO;IAyB9D,QAAQ,IAAI,MAAM;IAIlB,kFAAkF;IAClF,MAAM,IAAI,MAAM;IAGhB,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjD,eAAe,IAAI,MAAM,OAAO;IAIhC,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,cAAc,IAAI,OAAO,CAE5B;IACD,QAAQ,CAAC,OAAO,EAAE,MAAM,gBAAgB,GAAG,gBAAgB;IAgB3D,OAAO,IAAI,IAAI;CAKhB"}
@@ -22,7 +22,7 @@ export function captureRenderProgress(terminal) {
22
22
  export function subscribeRender(terminal, listener) {
23
23
  return tracked.get(terminal.xterm)?.subscribe(listener) ?? (() => undefined);
24
24
  }
25
- /** Called inside an owned render callback; subsequent trust reads reuse this snapshot. */
25
+ /** Completed-render and post-parse picker observations share text with subsequent trust reads. */
26
26
  export function renderedSnapshot(terminal) {
27
27
  return tracked.get(terminal.xterm)?.snapshot(() => terminal.snapshot()) ?? terminal.snapshot();
28
28
  }
@@ -60,6 +60,11 @@ export class RenderCursor {
60
60
  })),
61
61
  terminal.parser.registerEscHandler({ final: "c" }, reset),
62
62
  terminal.parser.registerCsiHandler({ intermediates: "!", final: "p" }, reset),
63
+ {
64
+ dispose: invalidateOnMutation(terminal, () => {
65
+ this.frame = undefined;
66
+ }),
67
+ },
63
68
  ];
64
69
  }
65
70
  received() {
@@ -113,4 +118,34 @@ export class RenderCursor {
113
118
  handler.dispose();
114
119
  }
115
120
  }
121
+ /** Raw xterm mutations bypass owned revisions, but must never reuse older viewport text. */
122
+ function invalidateOnMutation(terminal, invalidate) {
123
+ const restore = [];
124
+ const writes = ["write", "writeln"];
125
+ for (const method of writes) {
126
+ const original = terminal[method];
127
+ const write = original.bind(terminal);
128
+ terminal[method] = (data, callback) => {
129
+ // writeln can parse its first internal write synchronously after user input.
130
+ invalidate();
131
+ write(data, () => {
132
+ invalidate();
133
+ callback?.();
134
+ });
135
+ };
136
+ restore.push(() => {
137
+ terminal[method] = original;
138
+ });
139
+ }
140
+ const reset = terminal.reset;
141
+ terminal.reset = () => {
142
+ reset.call(terminal);
143
+ invalidate();
144
+ };
145
+ return () => {
146
+ for (const method of restore)
147
+ method();
148
+ terminal.reset = reset;
149
+ };
150
+ }
116
151
  //# sourceMappingURL=cursor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/terminal/cursor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/terminal/cursor.ts"],"names":[],"mappings":"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"}
package/docs/embedding.md CHANGED
@@ -80,3 +80,10 @@ cap does not constrain your state layout.
80
80
  before the user starts a session — use `listClaudeModels`/`listCodexModels`.
81
81
  They spin up a throwaway session, list, and always tear it down, so they cost
82
82
  a few seconds each; cache the result in the parent app if you call them often.
83
+
84
+ ## Scaling concurrent sessions
85
+
86
+ See [performance.md](performance.md) for the fifty-session workload, measured
87
+ CPU improvement, and the existing `terminal.xterm.options.scrollback` history
88
+ budget. Headless history and the browser terminal's history are separate;
89
+ choose both budgets and avoid polling fresh snapshots for hidden sessions.
@@ -0,0 +1,88 @@
1
+ # Terminal engine assessment — October 24, 2026
2
+
3
+ Keep xterm for the current optimization. A private Ghostty WASM probe showed
4
+ a useful parser/formatter CPU reduction, but does not yet implement Elwood's
5
+ terminal contract. Replacing the engine requires an explicit API migration: the
6
+ public `terminal.xterm` exposes the complete headless xterm Terminal, including proposed
7
+ APIs. Running both engines would retain both parsing and buffer costs.
8
+
9
+ ## Probe scope and provenance
10
+
11
+ The experiment instantiated the official full `ghostty-vt.wasm` in Node 26.3.1
12
+ with one WASM instance containing 50 terminals. Both engines parsed the same
13
+ 80 full-screen redraws at 120 columns by 40 rows. The snapshot variant decoded
14
+ Ghostty's plain formatter output and checked final round markers. UTF-8 copy
15
+ and decoding were included. This was a standalone diagnostic, not the full
16
+ Elwood runtime workload; no hook/watch/classification or browser costs were
17
+ included. The trace did not fill scrollback.
18
+
19
+ The official nightly release was associated with source revision
20
+ `22f100c6367045bb5fc86172f837047dee2f7670`, library `0.1.0-dev`.
21
+ The 1,189,559-byte WASM SHA-256 was
22
+ `e23598cefe95b42d441221a45d22d435c9c1915bca7475fe735e7617eac1a0d1`.
23
+ Its embedded type metadata had a null commit field: the binary hash pins the
24
+ measured bytes; the source association comes from release metadata. The `tip`
25
+ URL moves and must not be treated as an immutable version. No dependency or
26
+ WASM binary was added to Elwood.
27
+
28
+ Sources: [official release](https://github.com/ghostty-org/ghostty/releases/tag/tip),
29
+ [WASM API](https://github.com/ghostty-org/ghostty/blob/22f100c6367045bb5fc86172f837047dee2f7670/include/ghostty/vt/wasm.h),
30
+ [official example](https://github.com/ghostty-org/ghostty/blob/22f100c6367045bb5fc86172f837047dee2f7670/example/wasm-vt/index.html).
31
+
32
+ ## Standalone measurements
33
+
34
+ Three alternating fresh processes per engine used shared input/output scratch
35
+ for all Ghostty terminals. The xterm side included Elwood's headless write queue
36
+ and cursor tracking from commit `34ab7dd5`. The snapshot paths differ: xterm extracts the full physical
37
+ viewport; Ghostty formats plain text. These numbers compare the prototypes,
38
+ not equivalent complete engines.
39
+
40
+ | Diagnostic median | xterm path | Ghostty WASM path |
41
+ |---|---:|---:|
42
+ | Parsing path CPU | 326.275 ms | 176.598 ms |
43
+ | Parsing plus snapshot/formatter CPU | 559.623 ms | 343.816 ms |
44
+ | Parsing plus snapshot/formatter RSS | 131.6 MiB | 139.5 MiB |
45
+
46
+ Parsing CPU samples were 345.918 / 326.275 / 229.376 ms for xterm and
47
+ 225.668 / 147.451 / 176.598 ms for Ghostty. Snapshot/formatter samples were
48
+ 575.996 / 559.623 / 429.162 ms and 356.796 / 343.816 / 322.240 ms.
49
+ The host was busy; all paired CPU comparisons favored the prototype, but the
50
+ variation is substantial. The approximately 39% lower median CPU in the
51
+ formatter comparison is not a whole-Elwood speedup.
52
+
53
+ Ghostty's shared linear memory reached 23.625 MiB; WASM allocations must not
54
+ be inferred from JS heap alone. Process RSS was not lower in the formatter
55
+ comparison. No lower-memory replacement conclusion follows from this trace.
56
+ An earlier per-terminal scratch variant allocated about 16 MiB unnecessarily;
57
+ only the shared-scratch measurements above are used for this comparison.
58
+
59
+ ## Compatibility work required before replacement
60
+
61
+ Elwood needs exactly one line per physical viewport row, cursor coordinates
62
+ through scrollback and reflow, and cell-column prefix extraction for wide and
63
+ combining characters. Question editors require cursor-cell dimming to distinguish
64
+ placeholder text from real answers. Plain formatter output does not prove those
65
+ properties.
66
+
67
+ A replacement must also preserve parser-completion ordering, input ownership,
68
+ protocol replies, title updates, synchronized-output holds, resize events,
69
+ wrap-pending cursor positions and failure/disposal behavior. The WASM prototype
70
+ did not install the write-to-PTY callback; query responses were therefore absent.
71
+ Its marker checks establish only the diagnostic trace, not native CLI safety.
72
+
73
+ The next useful engine experiment would compare full viewport/cursor/style and
74
+ protocol-event fixtures through a compatibility adapter. A native addon should
75
+ follow only if measured WASM boundary costs justify its build/distribution cost.
76
+ Sources: [render state](https://github.com/ghostty-org/ghostty/blob/22f100c6367045bb5fc86172f837047dee2f7670/include/ghostty/vt/render.h),
77
+ [grid references](https://github.com/ghostty-org/ghostty/blob/22f100c6367045bb5fc86172f837047dee2f7670/include/ghostty/vt/grid_ref.h),
78
+ [terminal effects](https://github.com/ghostty-org/ghostty/blob/22f100c6367045bb5fc86172f837047dee2f7670/include/ghostty/vt/terminal.h).
79
+
80
+ ## Other candidates
81
+
82
+ [libvterm 0.3.3](https://www.leonerd.org.uk/code/libvterm/) provides a screen and
83
+ output callbacks, but its released screen-cell attributes lack the dim/faint
84
+ flag used by question provenance. [vte](https://github.com/alacritty/vte) is a
85
+ parser rather than a complete terminal emulator.
86
+ [libtsm](https://github.com/Aetf/libtsm) still needs protocol, Unicode, dimming,
87
+ resize and packaging verification. None offered a measured compatible replacement
88
+ within this investigation.
@@ -71,3 +71,123 @@ under active output.
71
71
  Re-run the probe after changes to rendering, frame classification, replay,
72
72
  transcript polling, or cleanup. Compare output correctness and cleanup as well
73
73
  as throughput, memory, and event-loop delay.
74
+
75
+ ## Fifty-session runtime workload
76
+
77
+ ```sh
78
+ node --expose-gc --no-warnings scripts/performance/fleet/index.ts
79
+ ```
80
+
81
+ This probe starts 50 production runtimes, alternating Claude and Codex, with
82
+ synthetic PTY producers. Dependency seams model macOS even on other hosts; this
83
+ does not test native-agent support on those hosts. It exercises real local hook
84
+ sockets, transcript watchers, frame observers, public snapshots and cleanup without
85
+ launching agent CLIs or making model calls. Each session receives 80 full-screen redraws at
86
+ 120 columns by 40 rows, then 1,200 scrolling lines. Assertions check all
87
+ 15,155,250 output bytes, 500 transcript activities and final viewport markers.
88
+ The process reports setup separately, a two-second idle CPU sample, active CPU,
89
+ wall time, event-loop delay, live memory after GC and resource cleanup.
90
+ For a quick smoke run, set `ELWOOD_BENCH_SESSIONS=2 ELWOOD_BENCH_ROUNDS=2`.
91
+
92
+ ### October 24, 2026: shared completed-frame text
93
+
94
+ Three alternating reference/candidate pairs used the same worktree, v2 probe
95
+ and Node 26.3.1 on the development Mac. Both sides used the benchmark from
96
+ `f6e4406c`; the reference restored runtime files from release `ba8b634e`
97
+ (0.2.0), while the candidate used the runtime at `f6e4406c`.
98
+ Values below are medians, not guarantees. Host activity changed absolute
99
+ timings substantially between measurement windows; compare matched pairs.
100
+
101
+ | Parent-process metric | Reference | Shared frame | Change |
102
+ |---|---:|---:|---:|
103
+ | Active CPU | 1,177.071 ms | 1,043.927 ms | −11.3% |
104
+ | Idle CPU over two seconds | 20.955 ms | 22.113 ms | +1.158 ms; variable |
105
+ | Live JS heap | 52.828 MiB | 53.084 MiB | +0.5% |
106
+
107
+ Active CPU samples were 1,176.453 / 1,177.071 / 1,195.298 ms before and
108
+ 1,043.927 / 1,045.998 / 1,031.162 ms after. Every v2 run passed per-session
109
+ byte/activity attribution, final viewport markers and resource-count checks.
110
+ The probe awaits teardown of every session, removing private socket homes before
111
+ its shared root. Regression tests verify filesystem cleanup, rejection ordering,
112
+ extra handles of an existing type and offsetting per-session accounting gaps.
113
+ Idle samples ranged from 20.275–25.492 ms before and 16.285–23.858 ms after;
114
+ no idle optimization is claimed. The CPU reduction is below the initial 15%
115
+ estimate, with effectively unchanged live heap.
116
+
117
+ The change removes a second viewport conversion in foreign-picker observation
118
+ while preserving fresh public snapshots and input-boundary reads. Raw xterm
119
+ writes, writeln and reset invalidate private cached text; disposal restores the
120
+ original methods. Regression tests fail with the change removed, including a
121
+ raw write in an owned parser drain, writeln's synchronous parse after user input
122
+ and method restoration on disposal.
123
+
124
+ An earlier v1 comparison measured 10.3% lower CPU. Its aggregate assertions
125
+ did not establish per-session completeness, same-type handle counts or socket-home
126
+ removal; the v2 comparison above supersedes that result.
127
+
128
+ These measurements exclude browser rendering and agent-process memory/CPU.
129
+ The probe's final screen assertions and 500 activity count protect this workload;
130
+ they do not establish correctness for every native dialog. The repository's
131
+ conformance suite remains the merge gate.
132
+
133
+ ## Consumer memory and rendering budgets
134
+
135
+ Elwood's headless xterm retains 1,000 history lines by default. Consumers that
136
+ retain their own raw terminal history can opt out of headless scrollback through
137
+ the existing advanced xterm handle:
138
+
139
+ ```ts
140
+ import { CodexSession } from "@with-logic/elwood";
141
+
142
+ const session = await new CodexSession({ cwd }).start();
143
+ session.terminal.xterm.options.scrollback = 0;
144
+ ```
145
+
146
+ The same setting applies to Claude sessions. Apply it at session creation,
147
+ before sustained output. This discards headless scrollback and changes what
148
+ xterm can recover/reflow on scrolling and resizing; choose a small nonzero
149
+ budget if that history is needed. It does not change the consumer's own replay
150
+ store or browser terminal's independent scrollback setting.
151
+
152
+ Three alternating default/zero-history runs of the fixed 50-session workload
153
+ on Node 26.3.1, commit `f6e4406c`, measured the following medians after
154
+ 1,200 scrolling lines per session. The experimental preload changed only xterm
155
+ constructor scrollback; all byte, transcript, viewport and cleanup assertions
156
+ passed. A separate two-adapter smoke used the public setter above and verified
157
+ zero history rows after scrolling. This is a configuration comparison, not a
158
+ runtime default change.
159
+
160
+ | Parent-process memory | Default 1,000 lines | Zero history |
161
+ |---|---:|---:|
162
+ | Live JS heap | 53.080 MiB | 38.977 MiB |
163
+ | External memory | 81.017 MiB | 13.065 MiB |
164
+ | Process RSS | 318.766 MiB | 231.484 MiB |
165
+
166
+ JS heap samples ranged from 53.078–53.080 MiB at the default budget and
167
+ 34.650–38.987 MiB at zero history. History, dimensions, GC and host activity
168
+ affect these values. CPU and
169
+ idle timing varied enough that no CPU benefit is claimed for this setting.
170
+
171
+ For many-session consumers:
172
+
173
+ - Feed all ordered `terminal:data` bytes to the consumer's terminal/history
174
+ pipeline; batch browser writes without dropping bytes or ANSI boundaries.
175
+ - Keep only visible terminals rendering. Bound browser scrollback independently
176
+ and avoid polling public snapshots for every hidden session. Public snapshots
177
+ deliberately perform a fresh viewport read.
178
+ - Use normalized activity for chat/progress updates. Append to a bounded store
179
+ and batch UI updates instead of rerendering all terminal history per event.
180
+ - Measure Elwood parent CPU separately from agent child processes and the UI
181
+ renderer. Browser refresh/history costs do not appear in the headless probe.
182
+
183
+ The update-dialog prefilter prototype reduced active CPU by 3.8% in its matched
184
+ window, below this investigation's 5% decision threshold, and was not retained.
185
+ Fifty idle sessions used roughly 20 ms of parent CPU per two seconds; the
186
+ measurements did not justify a polling rewrite. The
187
+ [terminal engine assessment](performance/terminal-engines.md) records the
188
+ Ghostty prototype and the compatibility requirements for a replacement.
189
+
190
+ The fleet probe dispatches authenticated local hook requests directly; it does
191
+ not launch the generated hook-bridge subprocess for each request. Bridge-process
192
+ startup/CPU, agent processes and the browser need separate measurements. The
193
+ parent-process results do not establish a whole-system scaling guarantee.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@with-logic/elwood",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Control interactive agentic coding CLIs (Claude Code, Codex) through real terminal sessions: typed hooks, a unified activity stream, resumable sessions, and a headless CLI.",
5
5
  "license": "MIT",
6
6
  "author": "Logic App, Inc.",