@with-logic/elwood 0.1.1 → 0.1.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.
Files changed (156) hide show
  1. package/CHANGELOG.md +30 -3
  2. package/CONTRIBUTING.md +104 -0
  3. package/README.md +43 -31
  4. package/SECURITY.md +42 -0
  5. package/dist/claude/model-picker.d.ts.map +1 -1
  6. package/dist/claude/model-picker.js +4 -3
  7. package/dist/claude/model-picker.js.map +1 -1
  8. package/dist/claude/model-switch-confirmation.js +9 -1
  9. package/dist/claude/model-switch-confirmation.js.map +1 -1
  10. package/dist/claude/screen-table.js +1 -1
  11. package/dist/claude/screen-table.js.map +1 -1
  12. package/dist/claude/session/build.d.ts.map +1 -1
  13. package/dist/claude/session/build.js +3 -0
  14. package/dist/claude/session/build.js.map +1 -1
  15. package/dist/claude/session/start-or-resume.js +1 -0
  16. package/dist/claude/session/start-or-resume.js.map +1 -1
  17. package/dist/cli/help.d.ts +1 -1
  18. package/dist/cli/help.d.ts.map +1 -1
  19. package/dist/cli/help.js +13 -10
  20. package/dist/cli/help.js.map +1 -1
  21. package/dist/cli/interactive/spawn.d.ts.map +1 -1
  22. package/dist/cli/interactive/spawn.js +30 -9
  23. package/dist/cli/interactive/spawn.js.map +1 -1
  24. package/dist/cli/main.d.ts.map +1 -1
  25. package/dist/cli/main.js +9 -0
  26. package/dist/cli/main.js.map +1 -1
  27. package/dist/cli/models/combined.d.ts +6 -0
  28. package/dist/cli/models/combined.d.ts.map +1 -0
  29. package/dist/cli/models/combined.js +92 -0
  30. package/dist/cli/models/combined.js.map +1 -0
  31. package/dist/cli/models/index.d.ts +2 -0
  32. package/dist/cli/models/index.d.ts.map +1 -1
  33. package/dist/cli/models/index.js +21 -7
  34. package/dist/cli/models/index.js.map +1 -1
  35. package/dist/cli/models/render.d.ts +4 -0
  36. package/dist/cli/models/render.d.ts.map +1 -1
  37. package/dist/cli/models/render.js +28 -1
  38. package/dist/cli/models/render.js.map +1 -1
  39. package/dist/cli/models/result.d.ts +13 -0
  40. package/dist/cli/models/result.d.ts.map +1 -0
  41. package/dist/cli/models/result.js +2 -0
  42. package/dist/cli/models/result.js.map +1 -0
  43. package/dist/cli/models/settings.d.ts +61 -0
  44. package/dist/cli/models/settings.d.ts.map +1 -0
  45. package/dist/cli/models/settings.js +24 -0
  46. package/dist/cli/models/settings.js.map +1 -0
  47. package/dist/cli/models/signals.d.ts +11 -0
  48. package/dist/cli/models/signals.d.ts.map +1 -0
  49. package/dist/cli/models/signals.js +21 -0
  50. package/dist/cli/models/signals.js.map +1 -0
  51. package/dist/cli/request/index.js +1 -1
  52. package/dist/cli/request/index.js.map +1 -1
  53. package/dist/cli/request/layers.d.ts +2 -0
  54. package/dist/cli/request/layers.d.ts.map +1 -1
  55. package/dist/cli/request/layers.js +9 -5
  56. package/dist/cli/request/layers.js.map +1 -1
  57. package/dist/cli/request/validation.d.ts.map +1 -1
  58. package/dist/cli/request/validation.js +0 -4
  59. package/dist/cli/request/validation.js.map +1 -1
  60. package/dist/cli/run/output.d.ts.map +1 -1
  61. package/dist/cli/run/output.js +3 -6
  62. package/dist/cli/run/output.js.map +1 -1
  63. package/dist/cli/sessions/index.d.ts +9 -2
  64. package/dist/cli/sessions/index.d.ts.map +1 -1
  65. package/dist/cli/sessions/index.js +2 -6
  66. package/dist/cli/sessions/index.js.map +1 -1
  67. package/dist/cli/sessions/settings.d.ts +11 -0
  68. package/dist/cli/sessions/settings.d.ts.map +1 -0
  69. package/dist/cli/sessions/settings.js +26 -0
  70. package/dist/cli/sessions/settings.js.map +1 -0
  71. package/dist/codex/model-picker.d.ts.map +1 -1
  72. package/dist/codex/model-picker.js +3 -2
  73. package/dist/codex/model-picker.js.map +1 -1
  74. package/dist/codex/session/build.d.ts.map +1 -1
  75. package/dist/codex/session/build.js +5 -7
  76. package/dist/codex/session/build.js.map +1 -1
  77. package/dist/codex/session/start-or-resume.js +1 -0
  78. package/dist/codex/session/start-or-resume.js.map +1 -1
  79. package/dist/core/input/index.d.ts.map +1 -1
  80. package/dist/core/input/index.js +15 -3
  81. package/dist/core/input/index.js.map +1 -1
  82. package/dist/core/models/input.d.ts +3 -0
  83. package/dist/core/models/input.d.ts.map +1 -0
  84. package/dist/core/models/input.js +9 -0
  85. package/dist/core/models/input.js.map +1 -0
  86. package/dist/core/models/picker.d.ts +2 -1
  87. package/dist/core/models/picker.d.ts.map +1 -1
  88. package/dist/core/models/picker.js +6 -5
  89. package/dist/core/models/picker.js.map +1 -1
  90. package/dist/core/models/tui-screen.d.ts +1 -1
  91. package/dist/core/models/tui-screen.d.ts.map +1 -1
  92. package/dist/core/models/tui-screen.js +26 -3
  93. package/dist/core/models/tui-screen.js.map +1 -1
  94. package/dist/runtime/session/base.d.ts.map +1 -1
  95. package/dist/runtime/session/base.js +4 -1
  96. package/dist/runtime/session/base.js.map +1 -1
  97. package/dist/runtime/session/commands.d.ts +2 -1
  98. package/dist/runtime/session/commands.d.ts.map +1 -1
  99. package/dist/runtime/session/commands.js +10 -4
  100. package/dist/runtime/session/commands.js.map +1 -1
  101. package/dist/runtime/session/lifecycle.d.ts +3 -4
  102. package/dist/runtime/session/lifecycle.d.ts.map +1 -1
  103. package/dist/runtime/session/lifecycle.js +6 -5
  104. package/dist/runtime/session/lifecycle.js.map +1 -1
  105. package/dist/state/directories.d.ts +4 -0
  106. package/dist/state/directories.d.ts.map +1 -0
  107. package/dist/state/directories.js +41 -0
  108. package/dist/state/directories.js.map +1 -0
  109. package/dist/state/files.d.ts.map +1 -1
  110. package/dist/state/files.js +25 -11
  111. package/dist/state/files.js.map +1 -1
  112. package/dist/state/private-session.d.ts.map +1 -1
  113. package/dist/state/private-session.js +2 -0
  114. package/dist/state/private-session.js.map +1 -1
  115. package/dist/state/store.d.ts.map +1 -1
  116. package/dist/state/store.js +7 -1
  117. package/dist/state/store.js.map +1 -1
  118. package/docs/cli-behavior.md +1 -1
  119. package/docs/cli-output.md +40 -10
  120. package/docs/cli.md +3 -2
  121. package/docs/codex/cli.md +57 -0
  122. package/docs/codex/config.md +47 -0
  123. package/docs/codex/hooks.md +70 -0
  124. package/examples/README.md +56 -0
  125. package/examples/full.ts +113 -0
  126. package/examples/minimal.ts +15 -0
  127. package/examples/stream.ts +39 -0
  128. package/examples/support.ts +71 -0
  129. package/package.json +10 -5
  130. package/prd/01-overview.md +21 -0
  131. package/prd/02-goals.md +47 -0
  132. package/prd/03-terminology.md +32 -0
  133. package/prd/04-architecture.md +121 -0
  134. package/prd/05-api/5.1-starting-claude.md +108 -0
  135. package/prd/05-api/5.2-resuming-claude.md +86 -0
  136. package/prd/05-api/5.3-claude-session-api.md +658 -0
  137. package/prd/05-api/5.4-events.md +145 -0
  138. package/prd/05-api/5.5-starting-codex.md +106 -0
  139. package/prd/05-api/5.6-resuming-codex.md +48 -0
  140. package/prd/05-api/5.7-codex-session-api.md +425 -0
  141. package/prd/05-api/5.8-session-api.md +122 -0
  142. package/prd/05-api/5.9-loops.md +170 -0
  143. package/prd/05-api/README.md +19 -0
  144. package/prd/06-claude-hook-bridge.md +164 -0
  145. package/prd/07-claude-policy.md +15 -0
  146. package/prd/07a-codex-hook-bridge.md +76 -0
  147. package/prd/08-state.md +127 -0
  148. package/prd/09-lifecycle.md +222 -0
  149. package/prd/10-errors.md +55 -0
  150. package/prd/11-test-app.md +53 -0
  151. package/prd/12-e2e.md +23 -0
  152. package/prd/12a-cli.md +402 -0
  153. package/prd/13-latitude.md +12 -0
  154. package/prd/14-conformance.md +333 -0
  155. package/prd/15-open-notes.md +8 -0
  156. package/prd/README.md +45 -0
package/CHANGELOG.md CHANGED
@@ -7,11 +7,38 @@ and doc tweaks are omitted. The format follows
7
7
  [Keep a Changelog](https://keepachangelog.com); this project is pre-1.0, so
8
8
  everything lands under **Unreleased** until the first tagged release.
9
9
 
10
- Observable behavior is specified in `PRD.md`; the conformance criteria that
11
- back each entry are listed in PRD.md §14.
10
+ Observable behavior is specified in `prd/`; the conformance criteria that
11
+ back each entry are listed in `prd/14-conformance.md`.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.1.3] - 2026-09-14
16
+
17
+ - Keep live session warnings quiet in text and JSON CLI output, including model
18
+ discovery; enable them with `--verbose` or `--debug`. JSONL warning events and
19
+ fatal errors remain available as before.
20
+
21
+ - List both Claude and Codex catalogs in bare `elwood models`, with agent
22
+ associations, partial failure diagnostics, and one shared timeout budget.
23
+ Explicit `--agent` keeps the single-agent output contract.
24
+
25
+ - Preserve new CLI sessions by default so they can be listed and resumed; use
26
+ `--ephemeral` to remove new or resumed Elwood state after the run.
27
+
28
+ ## [0.1.2] - 2026-09-13
29
+
30
+ - Preserve the inherited PATH when an interactive login shell exits successfully
31
+ without returning the PATH probe.
32
+
33
+ - Keep permission dialogs blocking across cursor movement and hold slash-command
34
+ input and recovery Enter while a decision is pending; cancel expired picker submissions.
35
+ - Reject planted state-directory and generated-file links before permission changes or writes.
36
+ - Forward `highTrust` on start-or-resume, wait for model-discovery readiness,
37
+ and resolve session listings independently of agent-specific environment defaults.
38
+ - Align foreground interactive launches with login-shell agent detection.
39
+ - Correct trust and IPC-persistence documentation, include linked package references,
40
+ and revalidate mutable website sprites using fresh URLs for previously cached clients.
41
+
15
42
  ## [0.1.1]
16
43
 
17
44
  First usable public release.
@@ -61,7 +88,7 @@ version to install.
61
88
  `{"type":"models"}` document of `AgentModelOption` rows. The adapters' launch
62
89
  flag mapping now lives in shared `claudeLaunchArguments`/`codexLaunchArguments`
63
90
  builders so interactive and headless launches cannot drift. (§12A.7–§12A.10,
64
- C-CLI-21 through C-CLI-24)
91
+ C-CLI-23 through C-CLI-26)
65
92
 
66
93
  - Claude Code and Codex CLI adapters that run the real interactive CLI in a
67
94
  PTY, launched through the user's login shell, and observe it through a
@@ -0,0 +1,104 @@
1
+ # Contributing
2
+
3
+ Thanks for helping with Elwood. This project is spec-first: `prd/` is the
4
+ contract for observable behavior, and `CLAUDE.md` (also linked as `AGENTS.md`)
5
+ is the implementation guide for anyone, human or AI, changing code. Read both
6
+ before opening a pull request.
7
+
8
+ ## Requirements
9
+
10
+ - macOS (the only supported platform for v0.1; the unit suite also runs on
11
+ Linux).
12
+ - Node.js 24 or newer. `.node-version` pins the major version for version
13
+ managers.
14
+ - For end-to-end tests: an installed and authenticated Claude Code and/or
15
+ Codex CLI.
16
+
17
+ ## Setup and checks
18
+
19
+ ```sh
20
+ npm install
21
+ npm run check
22
+ ```
23
+
24
+ `npm run check` is the merge gate. It runs, in order:
25
+
26
+ 1. `npm run build` (emits `dist/`, which the CLI tests and `npm link` need),
27
+ 2. `tsc --noEmit`,
28
+ 3. `biome check .`,
29
+ 4. `scripts/check-lines.ts` (every code file at or below 200 lines),
30
+ 5. `vitest run --coverage` with 100% line, branch, function, and statement
31
+ coverage.
32
+
33
+ Useful narrower commands:
34
+
35
+ ```sh
36
+ npm run typecheck
37
+ npm run lint # or npm run lint:fix
38
+ npx vitest run tests/unit/some-file.test.ts
39
+ npm run test:e2e # real Claude/Codex sessions; uses model quota
40
+ ```
41
+
42
+ The e2e suite skips any test whose agent CLI is not installed. It starts real
43
+ sessions in temporary directories and answers workspace trust prompts for those
44
+ directories automatically.
45
+
46
+ ## Making a change
47
+
48
+ 1. If the change is observable by a user, an API consumer, or a second
49
+ implementation (commands, flags, events, output shapes, config, state,
50
+ errors, defaults, limits, security guarantees, conformance criteria), update
51
+ `prd/` first.
52
+ 2. Implement the smallest matching slice in `src/`.
53
+ 3. Add or update tests in `tests/`. Conformance tests name their criterion in
54
+ the title, for example `C-CLI-03 resume rejects --cwd`.
55
+ 4. If the change is consumer-facing, add a bullet to `CHANGELOG.md` under
56
+ `## [Unreleased]`.
57
+ 5. If the real Claude or Codex CLI taught you something a unit test could not,
58
+ record it in `docs/cli-behavior.md`.
59
+ 6. Run `npm run check`.
60
+
61
+ ## Pull requests
62
+
63
+ - Keep pull requests small and focused on one change.
64
+ - Do not include secrets, access tokens, credentials, or private data in
65
+ issues, tests, logs, screenshots, or fixtures.
66
+ - Describe what changed and why. If the change touches readiness, turn
67
+ detection, trust prompts, resume, or input paths, say how you verified it
68
+ against the real CLI.
69
+
70
+ ## Local test apps
71
+
72
+ Two maintainer tools exercise the library interactively:
73
+
74
+ ```sh
75
+ # Terminal smoke app, Claude by default.
76
+ npm run dev:app -- --cwd /path/to/project
77
+ npm run dev:app -- --agent codex --cwd /path/to/project
78
+ npm run dev:app -- --cwd /path/to/project --resume <elwoodSessionId>
79
+
80
+ # Browser debugger on http://localhost:4317 with an xterm.js mirror and a
81
+ # structured event inspector.
82
+ npm run dev:web
83
+ ```
84
+
85
+ They live under `dev/`, outside `src/`, and are not part of the published
86
+ package. They are development utilities, so they are typechecked and linted
87
+ like everything else but are excluded from the coverage gate.
88
+
89
+ ## Repository map
90
+
91
+ | Path | Purpose |
92
+ |---|---|
93
+ | `prd/` | Source of truth for behavior and conformance criteria (one file per section). |
94
+ | `src/index.ts` | Public package exports. |
95
+ | `src/core/` | Adapter-neutral session machinery: control queue, status detection, turns, loops, images, warnings. |
96
+ | `src/runtime/` | Shared session base class, startup checks, teardown, and test seams. |
97
+ | `src/claude/`, `src/codex/` | The two adapters: launch, hooks, transcripts, validation. |
98
+ | `src/cli/` | The `elwood` executable. |
99
+ | `src/state/` | Session records and private sidecar files. |
100
+ | `src/bridge/` | Local hook bridge server and generated bridge script. |
101
+ | `src/terminal/`, `src/pty/` | Headless xterm.js model and node-pty adapter. |
102
+ | `dev/` | Local terminal and browser dev apps (not published, not coverage-gated). |
103
+ | `tests/` | Unit, conformance, and e2e suites. |
104
+ | `docs/` | Guides and the record of empirically learned CLI behavior. |
package/README.md CHANGED
@@ -48,7 +48,7 @@ transcripts the CLI already provides.
48
48
  - **Two ways in.** A TypeScript library for applications, and an `elwood`
49
49
  command for shell scripts and pipelines.
50
50
 
51
- `PRD.md` is the source of truth for observable behavior. If this README, the
51
+ [`prd/`](prd/README.md) is the source of truth for observable behavior. If this README, the
52
52
  tests, or the implementation disagree with the PRD, the PRD wins.
53
53
 
54
54
  ## Requirements
@@ -95,9 +95,10 @@ for await (const event of session.stream("Run the test suite and report failures
95
95
  await session.close();
96
96
  ```
97
97
 
98
- `CodexSession` has the same shape. `autotrust: true` lets Elwood answer the
99
- CLI's workspace trust prompt for `cwd` on your behalf; leave it off when a human
100
- should make that decision. There is no default turn timeout; pass
98
+ `CodexSession` has the same shape. `autotrust: true` lets Elwood answer its
99
+ allowlisted workspace and extension trust prompts on your behalf; see
100
+ [Security and privacy](#security-and-privacy) for the full scope. Leave it off
101
+ when a human should make those decisions. There is no default turn timeout; pass
101
102
  `send(prompt, { timeoutMs })` (a `TurnOptions` field) to bound one turn.
102
103
 
103
104
  ## Quickstart: CLI
@@ -106,7 +107,7 @@ should make that decision. There is no default turn timeout; pass
106
107
  elwood "Summarize this repository"
107
108
  git diff | elwood --agent claude "Review this diff for correctness"
108
109
  elwood --output json "Run the tests and summarize failures" | jq -r .response
109
- elwood --keep --output json "Remember that the release color is teal"
110
+ elwood --output json "Remember that the release color is teal"
110
111
  elwood --resume <sessionId> "What is the release color?"
111
112
  ```
112
113
 
@@ -178,11 +179,13 @@ combined with `--stream`, `--verbose`, `--debug`, or `--output jsonl`.
178
179
 
179
180
  ### Continuation and cleanup
180
181
 
181
- New runs are ephemeral unless `--keep` is supplied. A kept text run reports its
182
- session ID on stderr; JSON and JSONL include it in the terminal record:
182
+ New and resumed headless runs preserve Elwood state by default. A resumable
183
+ session ID is reported on stderr for text output and in the terminal record for
184
+ JSON and JSONL. `--keep` explicitly selects the default; use `--ephemeral` for
185
+ one-off runs that should remove their Elwood state afterward:
183
186
 
184
187
  ```sh
185
- first=$(elwood --keep --output json "Remember that the release color is teal")
188
+ first=$(elwood --output json "Remember that the release color is teal")
186
189
  id=$(printf '%s' "$first" | jq -r .sessionId)
187
190
  elwood --resume "$id" "What is the release color?"
188
191
  elwood --resume "$id" --ephemeral "Finish this conversation"
@@ -231,7 +234,7 @@ signal: a socket left behind by a force-killed owner reads as live until that
231
234
  session is next started or torn down. Unreadable records are skipped with a
232
235
  stderr warning, and an empty state directory is a normal empty result.
233
236
  `resume <id>` follows every `--resume` rule: stored agent and workspace, no
234
- `--cwd`, no `--keep`, no persona, and piped stdin composes the same way.
237
+ `--cwd`, no persona, and piped stdin composes the same way.
235
238
 
236
239
  `elwood interactive [id]` opens the real `claude` or `codex` TUI in the current
237
240
  terminal — no hidden PTY, no automation, no observation, no Elwood state — with
@@ -258,27 +261,31 @@ command rejects `--output json|jsonl`, `--stream`, `--verbose`, `--debug`,
258
261
 
259
262
  ### Listing models
260
263
 
261
- `elwood models` starts the selected agent briefly, opens and cancels its own
262
- model picker, tears the session down, and prints the rows. Text marks the
263
- current model with `*` and the default with `(default)`; JSON is one
264
- `{"schemaVersion":1,"type":"models",...}` document of `AgentModelOption` rows:
264
+ `elwood models` lists Claude and Codex models, with each model's agent noted.
265
+ It probes Claude then Codex, briefly opening and cancelling each model picker,
266
+ and removes both probe sessions afterward. `--agent` limits the listing to one
267
+ agent; saved configuration and `ELWOOD_AGENT` do not narrow the bare command.
268
+ Text marks the current model with `*` and the default with `(default)`.
265
269
 
266
270
  ```sh
267
271
  elwood models
272
+ elwood models --output json | jq '.agents[] | {agent, models}'
268
273
  elwood models --agent claude --output json | jq -r '.models[] | select(.isCurrent) | .id'
269
274
  ```
270
275
 
271
- Starting the agent is unavoidable because the picker is the only source of the
272
- list. The command honors `--agent`, `--cwd`, `--model`, `--reasoning-effort`,
273
- `--timeout`, `--state-dir`, trust, and posture flags, leaves no Elwood state
274
- behind, and maps failures (timeout, interruption, blocked prompts) to the usual
275
- statuses and error documents.
276
+ JSON is one `{"schemaVersion":1,"type":"models",...}` document. Combined
277
+ listings contain `agents: [{agent, models}]` and `errors: [...]`; explicit
278
+ `--agent` retains the single `agent` and `models` fields. If one agent fails or
279
+ is unavailable, the other catalog remains available and the command exits
280
+ nonzero. `--timeout` is one budget shared by both probes, and Ctrl-C stops
281
+ further probes. Workspace, model, reasoning, trust, state-directory, and
282
+ matching adapter posture settings apply; the configured model stays unchanged.
276
283
 
277
284
  ### Trust and security
278
285
 
279
286
  Headless mode is non-interactive. With the default `--trust`, Elwood answers only
280
- its allowlisted workspace-directory and extension trust dialogs (plus the
281
- Elwood-owned Codex hook trust needed for operation). `--no-trust` disables the
287
+ its allowlisted workspace-directory and extension trust dialogs. Codex hook
288
+ trust is bypassed session-wide, including hooks beyond Elwood’s own hooks. `--no-trust` disables the
282
289
  workspace/extension approvals. Any other recognized dialog fails safely as
283
290
  `blocked_prompt` instead of hanging or guessing.
284
291
 
@@ -453,10 +460,13 @@ immediate; both are safe after the process has already exited.
453
460
 
454
461
  ## Security and privacy
455
462
 
456
- - Elwood answers only a narrow allowlist of prompts: workspace trust (opt-in via
457
- `autotrust`), Codex hook-trust and update dialogs, and Claude's browser-tools
458
- onboarding. Any other dialog leaves the session `blocked` for a human; the
459
- CLI fails such runs as `blocked_prompt`.
463
+ - With `autotrust`, Elwood answers allowlisted workspace, skill/plugin/MCP,
464
+ and Claude bypass-permissions acceptance dialogs. The library defaults to
465
+ `autotrust: false`; the CLI defaults to `--trust`. Codex hook trust is bypassed
466
+ for the entire launched session even without autotrust. Codex update dialogs
467
+ are skipped, and Claude browser-tools onboarding is dismissed. Other recognized
468
+ dialogs leave the session `blocked` for a human; the CLI fails such runs as
469
+ `blocked_prompt`.
460
470
  - `--high-trust` (library `highTrust: true`) is the agent-neutral "never ask"
461
471
  switch: Claude `bypassPermissions`, or Codex `danger-full-access` with
462
472
  approval policy `never`. It removes the agent's own guardrails, so point it
@@ -468,9 +478,11 @@ immediate; both are safe after the process has already exited.
468
478
  - The persisted session record holds schema version, `elwoodSessionId`,
469
479
  adapter, `cwd`, and per-adapter resume state. Loop definitions are the only
470
480
  persisted prompt text, in an owner-only `0600` sidecar.
471
- - Prompts, terminal output, hook payloads, hook responses, transcripts,
472
- warnings, bridge tokens, and socket paths are never persisted. Tokens are
473
- minted fresh on every start and never trusted from disk.
481
+ - Elwood does not persist ordinary prompts, terminal output, hook payloads,
482
+ hook responses, transcripts, or warnings. Fresh bridge tokens and socket paths
483
+ are embedded in generated owner-only bridge scripts (`0600`), but excluded
484
+ from session records and never read back as credentials on resume. `teardown()`
485
+ removes these scripts; `stop()` preserves them with the session's runtime files.
474
486
  - Hook bridge traffic stays on local IPC with a per-session token and an 8 MiB
475
487
  request cap.
476
488
  - Elwood does not modify the user's global agent configuration. Claude gets
@@ -524,13 +536,13 @@ immediate; both are safe after the process has already exited.
524
536
  and hooks.
525
537
  - [examples/README.md](examples/README.md): runnable minimal, streaming, and
526
538
  low-level examples.
527
- - [PRD.md](PRD.md): the behavior specification and conformance criteria.
539
+ - [prd/](prd/README.md): the behavior specification and conformance criteria.
528
540
  - [CHANGELOG.md](CHANGELOG.md): consumer-facing changes.
529
- - [site/](site/): the landing page and the generated documentation site.
541
+ - [site/](https://github.com/with-logic/elwood/tree/main/site): the landing page and the generated documentation site.
530
542
 
531
543
  ## The website
532
544
 
533
- [`site/`](site/) is the landing page and the generated documentation site,
545
+ [`site/`](https://github.com/with-logic/elwood/tree/main/site) is the landing page and the generated documentation site,
534
546
  deployed to Vercel from this repository and served at [elwood.bot](https://elwood.bot). It is a static site with no framework
535
547
  and no build step: HTML, CSS, ES modules, and the robot's sprite sheets.
536
548
 
@@ -539,7 +551,7 @@ cd site && python3 -m http.server 8766 --bind 127.0.0.1
539
551
  ```
540
552
 
541
553
  The documentation page is generated from Markdown sources in
542
- [`site/docs/guide/`](site/docs/guide/) and reads the CLI's help text out of
554
+ [`site/docs/guide/`](https://github.com/with-logic/elwood/tree/main/site/docs/guide) and reads the CLI's help text out of
543
555
  `src/cli/help.ts`, so the published flag reference cannot drift from the code:
544
556
 
545
557
  ```sh
package/SECURITY.md ADDED
@@ -0,0 +1,42 @@
1
+ # Security Policy
2
+
3
+ Elwood drives interactive agent CLIs (Claude Code and Codex) inside real
4
+ terminal sessions, answers a narrow allowlist of their trust prompts on behalf
5
+ of the embedding application, and can drive Claude's `/login` recovery flow.
6
+ Bugs in those paths can change the security posture of the wrapped agent, so we
7
+ treat them as security issues.
8
+
9
+ ## Reporting a vulnerability
10
+
11
+ Please do not open a public issue for a suspected vulnerability. Use GitHub's
12
+ private vulnerability reporting for this repository ("Report a vulnerability"
13
+ under the Security tab). Include the Elwood version, the agent CLI and version,
14
+ the operating system, and a minimal reproduction.
15
+
16
+ We aim to acknowledge reports within five business days.
17
+
18
+ ## Scope
19
+
20
+ In scope:
21
+
22
+ - Elwood answering a prompt it should not have answered, or submitting input
23
+ into a dialog it should have treated as blocking.
24
+ - Leakage of bridge tokens, hook payloads, terminal contents, or other secrets
25
+ into persisted state, warnings, structured CLI output, or logs.
26
+ - Escapes from the session-scoped settings and configuration Elwood generates
27
+ (for example, mutating a user's global agent configuration when the
28
+ documentation says it will not).
29
+ - Unsafe filesystem handling in Elwood-owned state: symlink following,
30
+ permission checks, or non-atomic writes.
31
+ - Command construction that could execute attacker-controlled input.
32
+
33
+ Out of scope:
34
+
35
+ - Behavior of the wrapped agents themselves. Report those to Anthropic or
36
+ OpenAI.
37
+ - Actions an agent takes inside a workspace you asked it to work in with the
38
+ permissions you granted it.
39
+
40
+ ## Supported versions
41
+
42
+ Only the latest release receives security fixes.
@@ -1 +1 @@
1
- {"version":3,"file":"model-picker.d.ts","sourceRoot":"","sources":["../../src/claude/model-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAYhE,eAAO,MAAM,iBAAiB,EAAE,eAqC/B,CAAC"}
1
+ {"version":3,"file":"model-picker.d.ts","sourceRoot":"","sources":["../../src/claude/model-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAYhE,eAAO,MAAM,iBAAiB,EAAE,eAsC/B,CAAC"}
@@ -2,6 +2,7 @@
2
2
  * Claude /model picker automation spec.
3
3
  * Implements PRD §5.3, C-API-23, and C-API-24.
4
4
  */
5
+ import { sendPickerInput } from "../core/models/input.js";
5
6
  import { claudeModelPickerHeader, parseClaudeModelPicker } from "../core/models/rows.js";
6
7
  import { waitForScreen } from "../core/models/tui-screen.js";
7
8
  import { isClaudeIdleComposer, parseClaudeSwitchConfirmation, } from "./model-switch-confirmation.js";
@@ -15,16 +16,16 @@ export const claudeModelPicker = {
15
16
  // "s" applies for this session only. Enter or a number key would save the
16
17
  // selection as the user's default for new sessions, which §4.5 forbids.
17
18
  apply: async (io, timeoutMs) => {
18
- await io.terminal.sendInput("s");
19
+ await sendPickerInput(io, "s", (text) => claudeModelPickerHeader.test(text));
19
20
  const next = await waitForScreen(io.terminal, (text) => cacheConfirmationWithCursor(text) || isClaudeIdleComposer(text), timeoutMs, "claude model switch confirmation or idle composer");
20
21
  const confirmation = parseClaudeSwitchConfirmation(next);
21
22
  if (confirmation?.isCacheWarning === true) {
22
23
  const delta = confirmation.affirmativeIndex - confirmation.selectedIndex;
23
24
  const key = delta > 0 ? arrowDown : arrowUp;
24
25
  for (let step = 0; step < Math.abs(delta); step += 1)
25
- await io.terminal.sendInput(key);
26
+ await sendPickerInput(io, key, cacheConfirmationWithCursor, true);
26
27
  await waitForScreen(io.terminal, affirmativeCacheConfirmation, timeoutMs, "active Claude cache confirmation before apply");
27
- await io.terminal.sendInput(enterKey);
28
+ await sendPickerInput(io, enterKey, affirmativeCacheConfirmation, true);
28
29
  }
29
30
  await waitForScreen(io.terminal, (text) => isClaudeIdleComposer(text) &&
30
31
  parseClaudeSwitchConfirmation(text) === undefined &&
@@ -1 +1 @@
1
- {"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../../src/claude/model-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,gCAAgC,CAAC;AAExC,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,MAAM,OAAO,GAAG,UAAU,CAAC;AAE3B,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,KAAK,EAAE,sBAAsB;IAC7B,0EAA0E;IAC1E,wEAAwE;IACxE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;QAC7B,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,aAAa,CAC9B,EAAE,CAAC,QAAQ,EACX,CAAC,IAAI,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,EACzE,SAAS,EACT,mDAAmD,CACpD,CAAC;QACF,MAAM,YAAY,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,YAAY,EAAE,cAAc,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,gBAAgB,GAAG,YAAY,CAAC,aAAa,CAAC;YACzE,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC;gBAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACvF,MAAM,aAAa,CACjB,EAAE,CAAC,QAAQ,EACX,4BAA4B,EAC5B,SAAS,EACT,+CAA+C,CAChD,CAAC;YACF,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,aAAa,CACjB,EAAE,CAAC,QAAQ,EACX,CAAC,IAAI,EAAE,EAAE,CACP,oBAAoB,CAAC,IAAI,CAAC;YAC1B,6BAA6B,CAAC,IAAI,CAAC,KAAK,SAAS;YACjD,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EACrC,SAAS,EACT,yCAAyC,CAC1C,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,2BAA2B,CAAC,IAAY;IAC/C,MAAM,YAAY,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,YAAY,EAAE,cAAc,KAAK,IAAI,IAAI,YAAY,CAAC,aAAa,IAAI,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAY;IAChD,MAAM,YAAY,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,CACL,YAAY,EAAE,cAAc,KAAK,IAAI;QACrC,YAAY,CAAC,aAAa,KAAK,YAAY,CAAC,gBAAgB,CAC7D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../../src/claude/model-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,gCAAgC,CAAC;AAExC,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,MAAM,OAAO,GAAG,UAAU,CAAC;AAE3B,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,KAAK,EAAE,sBAAsB;IAC7B,0EAA0E;IAC1E,wEAAwE;IACxE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;QAC7B,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,MAAM,aAAa,CAC9B,EAAE,CAAC,QAAQ,EACX,CAAC,IAAI,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,EACzE,SAAS,EACT,mDAAmD,CACpD,CAAC;QACF,MAAM,YAAY,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,YAAY,EAAE,cAAc,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,gBAAgB,GAAG,YAAY,CAAC,aAAa,CAAC;YACzE,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC;gBAClD,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,2BAA2B,EAAE,IAAI,CAAC,CAAC;YACpE,MAAM,aAAa,CACjB,EAAE,CAAC,QAAQ,EACX,4BAA4B,EAC5B,SAAS,EACT,+CAA+C,CAChD,CAAC;YACF,MAAM,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,4BAA4B,EAAE,IAAI,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,aAAa,CACjB,EAAE,CAAC,QAAQ,EACX,CAAC,IAAI,EAAE,EAAE,CACP,oBAAoB,CAAC,IAAI,CAAC;YAC1B,6BAA6B,CAAC,IAAI,CAAC,KAAK,SAAS;YACjD,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EACrC,SAAS,EACT,yCAAyC,CAC1C,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,2BAA2B,CAAC,IAAY;IAC/C,MAAM,YAAY,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,YAAY,EAAE,cAAc,KAAK,IAAI,IAAI,YAAY,CAAC,aAAa,IAAI,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAY;IAChD,MAAM,YAAY,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,CACL,YAAY,EAAE,cAAc,KAAK,IAAI;QACrC,YAAY,CAAC,aAAa,KAAK,YAAY,CAAC,gBAAgB,CAC7D,CAAC;AACJ,CAAC"}
@@ -42,7 +42,15 @@ function switchDialogRegion(text) {
42
42
  }
43
43
  if (latest === undefined)
44
44
  return undefined;
45
- return { subject: latest.subject, text: lines.slice(latest.index).join("\n") };
45
+ const region = lines.slice(latest.index);
46
+ const lastOption = region.findLastIndex((line) => optionPattern.test(line));
47
+ // A later dialog can lack a switch title. Its question/options must not inherit
48
+ // the earlier cache warning's authority merely because they share a viewport.
49
+ const footer = /^\s*(?:Enter to confirm|Esc to cancel)(?:\s*[·•]\s*(?:Enter to confirm|Esc to cancel))*\s*$/i;
50
+ if (region.slice(lastOption + 1).some((line) => line.trim() !== "" && !footer.test(line))) {
51
+ return undefined;
52
+ }
53
+ return { subject: latest.subject, text: region.join("\n") };
46
54
  }
47
55
  function switchOptions(text) {
48
56
  const options = text.split("\n").flatMap((line) => {
@@ -1 +1 @@
1
- {"version":3,"file":"model-switch-confirmation.js","sourceRoot":"","sources":["../../src/claude/model-switch-confirmation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-switch-confirmation.js","sourceRoot":"","sources":["../../src/claude/model-switch-confirmation.ts"],"names":[],"mappings":"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"}
@@ -39,7 +39,7 @@ export const claudeScreenFactTable = {
39
39
  {
40
40
  id: "claude-permission-dialog",
41
41
  fact: "blocking_prompt_visible",
42
- all: [/Do you want to .+\?/i, /^\s*❯\s*1\.\s*Yes/im, /Esc to cancel/i],
42
+ all: [/Do you want to [^?]+\?/i, /^\s*(?:❯\s*)?1\.\s*Yes/im, /Esc to cancel/i],
43
43
  },
44
44
  {
45
45
  id: "claude-model-switch-confirmation",
@@ -1 +1 @@
1
- {"version":3,"file":"screen-table.js","sourceRoot":"","sources":["../../src/claude/screen-table.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAE5E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAoB;IACpD,KAAK,EAAE,QAAQ;IACf,eAAe,EAAE,gBAAgB;IACjC,KAAK,EAAE;QACL,EAAE,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE;QAC3E,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE;QACpF;YACE,EAAE,EAAE,sBAAsB;YAC1B,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,OAAO;YACf,GAAG,EAAE,CAAC,UAAU,CAAC;SAClB;QACD,EAAE,EAAE,EAAE,yBAAyB,EAAE,IAAI,EAAE,4BAA4B,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE;QAC/F;YACE,EAAE,EAAE,0BAA0B;YAC9B,IAAI,EAAE,yBAAyB;YAC/B,GAAG,EAAE,CAAC,sBAAsB,EAAE,qBAAqB,EAAE,gBAAgB,CAAC;SACvE;QACD;YACE,EAAE,EAAE,kCAAkC;YACtC,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,0BAA0B;SAClC;KACF;CACF,CAAC;AAEF,+EAA+E;AAC/E,MAAM,UAAU,mCAAmC,CAAC,SAAkB;IACpE,OAAO,sBAAsB,CAAC,qBAAqB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"screen-table.js","sourceRoot":"","sources":["../../src/claude/screen-table.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAE5E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAoB;IACpD,KAAK,EAAE,QAAQ;IACf,eAAe,EAAE,gBAAgB;IACjC,KAAK,EAAE;QACL,EAAE,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE;QAC3E,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE;QACpF;YACE,EAAE,EAAE,sBAAsB;YAC1B,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,OAAO;YACf,GAAG,EAAE,CAAC,UAAU,CAAC;SAClB;QACD,EAAE,EAAE,EAAE,yBAAyB,EAAE,IAAI,EAAE,4BAA4B,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE;QAC/F;YACE,EAAE,EAAE,0BAA0B;YAC9B,IAAI,EAAE,yBAAyB;YAC/B,GAAG,EAAE,CAAC,yBAAyB,EAAE,0BAA0B,EAAE,gBAAgB,CAAC;SAC/E;QACD;YACE,EAAE,EAAE,kCAAkC;YACtC,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,0BAA0B;SAClC;KACF;CACF,CAAC;AAEF,+EAA+E;AAC/E,MAAM,UAAU,mCAAmC,CAAC,SAAkB;IACpE,OAAO,sBAAsB,CAAC,qBAAqB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC5E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/claude/session/build.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQ9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EAAE,KAAK,sBAAsB,EAAkB,MAAM,iBAAiB,CAAC;AAK9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAUlD,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC/D,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,iBAAiB,CAAC,CAkJ5B"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/claude/session/build.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQ9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EAAE,KAAK,sBAAsB,EAAkB,MAAM,iBAAiB,CAAC;AAK9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAUlD,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC/D,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,iBAAiB,CAAC,CAoJ5B"}
@@ -111,6 +111,7 @@ export async function buildClaudeSession(input) {
111
111
  // Hook-backed readiness + deadline fallback; on resume the first composer also marks ready (C-API-28).
112
112
  ready.armDeadline();
113
113
  const reading = observeRenderedFrame(observers, frame, session);
114
+ active.inputBlocking = reading.facts.blocking_prompt_visible;
114
115
  observeReadinessFrame(reading.facts); // blocking gate + resume-composer mark
115
116
  // Surface a mid-session login-expiry banner once (C-CLAUDE-18); no-op pre-readiness.
116
117
  session?.noteLoginExpiry(frame.text);
@@ -135,6 +136,8 @@ export async function buildClaudeSession(input) {
135
136
  // Release the startup buffer once the check settles (§9.4).
136
137
  await assertStartupThenRelease("claude", startupOutput, () => startupExit);
137
138
  active.submitEvidence("startup_usable");
139
+ if (active.inputBlocking)
140
+ active.submitEvidence("blocking_prompt_shown");
138
141
  }, { before: beforeCleanup, pty, bridge, terminal, after: () => transcriptWatcher.stop() });
139
142
  // Open buffered startup warnings after return so synchronous subscribers see them (C-API-14).
140
143
  if (preflightWarning !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/claude/session/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/claude/session/build.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ function resumeOptions(elwoodSessionId, start) {
24
24
  tools: start.tools,
25
25
  autoupdate: start.autoupdate,
26
26
  autotrust: start.autotrust,
27
+ highTrust: start.highTrust,
27
28
  hookTimeoutMs: start.hookTimeoutMs,
28
29
  strictVersionCheck: start.strictVersionCheck,
29
30
  });
@@ -1 +1 @@
1
- {"version":3,"file":"start-or-resume.js","sourceRoot":"","sources":["../../../src/claude/session/start-or-resume.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAA4B,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAExF,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,MAAM,UAAU,mBAAmB,CACjC,OAAmC;IAEnC,MAAM,EAAE,eAAe,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC;IACrD,OAAO,aAAa,CAClB,eAAe,EACf,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,EACrD,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,4EAA4E;AAC5E,SAAS,aAAa,CAAC,eAAuB,EAAE,KAAyB;IACvE,MAAM,SAAS,GAAG,OAAO,CAAuD;QAC9E,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;KAC7C,CAAC,CAAC;IACH,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"start-or-resume.js","sourceRoot":"","sources":["../../../src/claude/session/start-or-resume.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAA4B,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAExF,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,MAAM,UAAU,mBAAmB,CACjC,OAAmC;IAEnC,MAAM,EAAE,eAAe,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC;IACrD,OAAO,aAAa,CAClB,eAAe,EACf,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,EACrD,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,4EAA4E;AAC5E,SAAS,aAAa,CAAC,eAAuB,EAAE,KAAyB;IACvE,MAAM,SAAS,GAAG,OAAO,CAAuD;QAC9E,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;KAC7C,CAAC,CAAC;IACH,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;AAC3D,CAAC"}
@@ -2,6 +2,6 @@
2
2
  * Static production help for the first-party headless Elwood command.
3
3
  * Implements PRD §12A.1/§12A.7-§12A.10 and C-CLI-02/C-CLI-21 through C-CLI-26.
4
4
  */
5
- export declare const cliHelp = "Usage: elwood [options] [prompt...]\n elwood run [options] [prompt...]\n elwood resume <id> [options] [prompt...]\n elwood interactive [id] [options]\n elwood sessions [--state-dir <path>] [--output <text|json>]\n elwood models [options] [--output <text|json>]\n elwood config <command>\n\nRun one Claude Code or Codex turn and write its combined assistant response.\nPositional text and piped stdin are combined with one blank line.\n\nExamples:\n elwood \"Summarize this repository\"\n git diff | elwood \"Review this diff for correctness\"\n elwood run --output json < prompt.txt\n elwood --keep --output json \"Remember this decision\"\n\nCommands:\n run Run one agent turn (default)\n resume <id> [prompt...] Resume a kept session; same as run --resume <id>\n interactive [id] Open the agent's own TUI here with Elwood's settings\n sessions List Elwood-owned session records; never starts an agent\n models List the agent's models (starts the agent briefly)\n config Inspect or update global defaults; see config --help\n help Show this help\n\nAgent and turn options:\n --agent <claude|codex> Select the agent (default: first available of claude, codex)\n --model <id> Select or switch the model\n --reasoning-effort <level> Claude: low|medium|high|xhigh|max\n Codex: none|minimal|low|medium|high|xhigh|max\n --persona <prompt> Run a real side-effect-capable setup turn; hide its answer\n -C, --cwd <path> Workspace for a new run (default: current directory)\n --image <path> Attach an image; repeat to preserve order\n --timeout <duration> Bound launch, setup, and turn (default: none; ms|s|m|h)\n --trust / --no-trust Toggle allowlisted trust automation (default: trust)\n --no-defaults Ignore saved config and ELWOOD_* run defaults\n\nContinuation and output:\n --keep Preserve Elwood state for a new session\n --resume <id> Resume the exact stored agent and workspace\n --ephemeral Remove resumed Elwood state afterward\n --output <text|json|jsonl> Stdout protocol (default: text)\n --stream / --no-stream Toggle incremental text output (default: off)\n --verbose / --no-verbose Toggle concise elapsed progress on stderr (default: off)\n --debug Write full sanitized event details to stderr\n --head View the full agent TUI in this terminal\n --state-dir <path> Override CLI-owned state storage\n\nAgent posture defaults and supported values:\n --high-trust / --no-high-trust\n Never ask for permissions on either agent (default: off):\n Claude bypassPermissions; Codex danger-full-access + never\n --claude-permission-mode <default|acceptEdits|plan|auto|dontAsk|bypassPermissions>\n Default: dontAsk\n --codex-sandbox <read-only|workspace-write|danger-full-access>\n Default: workspace-write\n --codex-approval-policy <untrusted|on-request|never>\n Default: never\n\nHead mode is view-only and requires terminal stdin and stderr. It cannot be\ncombined with stream, verbose, debug, or JSONL output. Ctrl-C still interrupts.\n\nWarnings and diagnostics use stderr; stdout remains the selected protocol.\nUse \"elwood config effective\" to explain resolved values and their sources.\n\nResume subcommand:\n elwood resume <id> [prompt...] is exactly elwood run --resume <id>: the stored\n agent and workspace are used, --cwd is rejected, and piped stdin still applies.\n\nInteractive mode:\n elwood interactive [id] runs claude or codex in the foreground of this terminal\n with the resolved agent, model, effort, workspace, and posture passed as the\n agent's own flags. Elwood does not observe or record the conversation and\n writes no session state. With an id, the stored session's own conversation is\n resumed in its stored workspace with its stored posture. Requires a terminal on\n stdin and stdout; cannot be combined with --output json/jsonl, --stream,\n --verbose, --debug, --head, --timeout, --persona, --image, --keep, --ephemeral,\n or --resume. Built-in posture defaults are not applied unless configured.\n\nSession listing:\n elwood sessions lists id, agent, live, resumable, last used, created, and\n workspace for records in the effective state directory. \"live\" means a\n launch's bridge socket is present. Text is an aligned table; --output json\n emits one {\"schemaVersion\":1,\"type\":\"sessions\",...} document. An empty state\n directory is a normal, empty result.\n\nModel listing:\n elwood models starts the selected agent briefly, opens and cancels its own\n model picker, tears the session down, and prints the rows. Text marks the\n current model with * and the default with (default); --output json emits one\n {\"schemaVersion\":1,\"type\":\"models\",...} document. Honors --agent, --cwd,\n --model, --reasoning-effort, --timeout, --state-dir, trust, and posture flags.\n\n -h, --help Show this help\n -V, --version Show the Elwood version\n";
5
+ export declare const cliHelp = "Usage: elwood [options] [prompt...]\n elwood run [options] [prompt...]\n elwood resume <id> [options] [prompt...]\n elwood interactive [id] [options]\n elwood sessions [--state-dir <path>] [--output <text|json>]\n elwood models [options] [--output <text|json>]\n elwood config <command>\n\nRun one Claude Code or Codex turn and write its combined assistant response.\nPositional text and piped stdin are combined with one blank line.\n\nExamples:\n elwood \"Summarize this repository\"\n git diff | elwood \"Review this diff for correctness\"\n elwood run --output json < prompt.txt\n elwood --output json \"Remember this decision\"\n\nCommands:\n run Run one agent turn (default)\n resume <id> [prompt...] Resume a kept session; same as run --resume <id>\n interactive [id] Open the agent's own TUI here with Elwood's settings\n sessions List Elwood-owned session records; never starts an agent\n models List both agents' models (starts each briefly)\n config Inspect or update global defaults; see config --help\n help Show this help\n\nAgent and turn options:\n --agent <claude|codex> Select the agent (default: first available of claude, codex)\n --model <id> Select or switch the model\n --reasoning-effort <level> Claude: low|medium|high|xhigh|max\n Codex: none|minimal|low|medium|high|xhigh|max\n --persona <prompt> Run a real side-effect-capable setup turn; hide its answer\n -C, --cwd <path> Workspace for a new run (default: current directory)\n --image <path> Attach an image; repeat to preserve order\n --timeout <duration> Bound launch, setup, and turn (default: none; ms|s|m|h)\n --trust / --no-trust Toggle allowlisted trust automation (default: trust)\n --no-defaults Ignore saved config and ELWOOD_* run defaults\n\nContinuation and output:\n --keep Preserve Elwood state (default)\n --resume <id> Resume the exact stored agent and workspace\n --ephemeral Remove new or resumed Elwood state afterward\n --output <text|json|jsonl> Stdout protocol (default: text)\n --stream / --no-stream Toggle incremental text output (default: off)\n --verbose / --no-verbose Toggle warnings and concise progress on stderr (default: off)\n --debug Write full sanitized event details to stderr\n --head View the full agent TUI in this terminal\n --state-dir <path> Override CLI-owned state storage\n\nAgent posture defaults and supported values:\n --high-trust / --no-high-trust\n Never ask for permissions on either agent (default: off):\n Claude bypassPermissions; Codex danger-full-access + never\n --claude-permission-mode <default|acceptEdits|plan|auto|dontAsk|bypassPermissions>\n Default: dontAsk\n --codex-sandbox <read-only|workspace-write|danger-full-access>\n Default: workspace-write\n --codex-approval-policy <untrusted|on-request|never>\n Default: never\n\nHead mode is view-only and requires terminal stdin and stderr. It cannot be\ncombined with stream, verbose, debug, or JSONL output. Ctrl-C still interrupts.\n\nWarnings and diagnostics use stderr; stdout remains the selected protocol.\nUse \"elwood config effective\" to explain resolved values and their sources.\n\nResume subcommand:\n elwood resume <id> [prompt...] is exactly elwood run --resume <id>: the stored\n agent and workspace are used, --cwd is rejected, and piped stdin still applies.\n\nInteractive mode:\n elwood interactive [id] runs claude or codex in the foreground of this terminal\n with the resolved agent, model, effort, workspace, and posture passed as the\n agent's own flags. Elwood does not observe or record the conversation and\n writes no session state. With an id, the stored session's own conversation is\n resumed in its stored workspace with its stored posture. Requires a terminal on\n stdin and stdout; cannot be combined with --output json/jsonl, --stream,\n --verbose, --debug, --head, --timeout, --persona, --image, --keep, --ephemeral,\n or --resume. Built-in posture defaults are not applied unless configured.\n\nSession listing:\n elwood sessions lists id, agent, live, resumable, last used, created, and\n workspace for records in the effective state directory. \"live\" means a\n launch's bridge socket is present. Text is an aligned table; --output json\n emits one {\"schemaVersion\":1,\"type\":\"sessions\",...} document. An empty state\n directory is a normal, empty result.\n\nModel listing:\n elwood models probes Claude then Codex, showing each model's agent. --agent\n limits the listing to that agent; saved/environment agent defaults do not.\n Each probe opens and cancels the picker, then removes its session state.\n Text marks current with * and default with (default); JSON emits one models\n document: agents/errors arrays for both, or agent/models with --agent.\n Partial failures retain available models and exit nonzero. --timeout is one\n budget for the whole command; Ctrl-C stops further probes. Honors --cwd,\n --model, --reasoning-effort, --state-dir, trust, and matching posture flags.\n\n -h, --help Show this help\n -V, --version Show the Elwood version\n";
6
6
  export declare const cliConfigHelp = "Usage: elwood config <command> [arguments]\n\nInspect or update Elwood's global user configuration without starting an agent.\n\nCommands:\n path Print the global config path\n show Print the saved configuration document\n effective [run options] Explain resolved launch/output settings and sources\n get <key> Print one configured scalar\n set <key> <value> Set one documented config key\n unset <key> Remove one configured key\n\n -h, --help Show this help\n\nExamples:\n elwood config show\n elwood config effective --agent claude\n elwood config set codex.sandbox workspace-write\n";
7
7
  //# sourceMappingURL=help.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,OAAO,yxKAgGnB,CAAC;AAEF,eAAO,MAAM,aAAa,usBAkBzB,CAAC"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,OAAO,g/KAmGnB,CAAC;AAEF,eAAO,MAAM,aAAa,usBAkBzB,CAAC"}