@with-logic/elwood 0.1.1 → 0.1.2
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 +17 -3
- package/CONTRIBUTING.md +104 -0
- package/README.md +23 -17
- package/SECURITY.md +42 -0
- package/dist/claude/model-picker.d.ts.map +1 -1
- package/dist/claude/model-picker.js +4 -3
- package/dist/claude/model-picker.js.map +1 -1
- package/dist/claude/model-switch-confirmation.js +9 -1
- package/dist/claude/model-switch-confirmation.js.map +1 -1
- package/dist/claude/screen-table.js +1 -1
- package/dist/claude/screen-table.js.map +1 -1
- package/dist/claude/session/build.d.ts.map +1 -1
- package/dist/claude/session/build.js +3 -0
- package/dist/claude/session/build.js.map +1 -1
- package/dist/claude/session/start-or-resume.js +1 -0
- package/dist/claude/session/start-or-resume.js.map +1 -1
- package/dist/cli/interactive/spawn.d.ts.map +1 -1
- package/dist/cli/interactive/spawn.js +30 -9
- package/dist/cli/interactive/spawn.js.map +1 -1
- package/dist/cli/models/index.d.ts.map +1 -1
- package/dist/cli/models/index.js +6 -3
- package/dist/cli/models/index.js.map +1 -1
- package/dist/cli/request/layers.d.ts +2 -0
- package/dist/cli/request/layers.d.ts.map +1 -1
- package/dist/cli/request/layers.js +9 -5
- package/dist/cli/request/layers.js.map +1 -1
- package/dist/cli/sessions/index.d.ts +9 -2
- package/dist/cli/sessions/index.d.ts.map +1 -1
- package/dist/cli/sessions/index.js +2 -6
- package/dist/cli/sessions/index.js.map +1 -1
- package/dist/cli/sessions/settings.d.ts +11 -0
- package/dist/cli/sessions/settings.d.ts.map +1 -0
- package/dist/cli/sessions/settings.js +26 -0
- package/dist/cli/sessions/settings.js.map +1 -0
- package/dist/codex/model-picker.d.ts.map +1 -1
- package/dist/codex/model-picker.js +3 -2
- package/dist/codex/model-picker.js.map +1 -1
- package/dist/codex/session/build.d.ts.map +1 -1
- package/dist/codex/session/build.js +5 -7
- package/dist/codex/session/build.js.map +1 -1
- package/dist/codex/session/start-or-resume.js +1 -0
- package/dist/codex/session/start-or-resume.js.map +1 -1
- package/dist/core/input/index.d.ts.map +1 -1
- package/dist/core/input/index.js +15 -3
- package/dist/core/input/index.js.map +1 -1
- package/dist/core/models/input.d.ts +3 -0
- package/dist/core/models/input.d.ts.map +1 -0
- package/dist/core/models/input.js +9 -0
- package/dist/core/models/input.js.map +1 -0
- package/dist/core/models/picker.d.ts +2 -1
- package/dist/core/models/picker.d.ts.map +1 -1
- package/dist/core/models/picker.js +6 -5
- package/dist/core/models/picker.js.map +1 -1
- package/dist/core/models/tui-screen.d.ts +1 -1
- package/dist/core/models/tui-screen.d.ts.map +1 -1
- package/dist/core/models/tui-screen.js +26 -3
- package/dist/core/models/tui-screen.js.map +1 -1
- package/dist/runtime/session/base.d.ts.map +1 -1
- package/dist/runtime/session/base.js +4 -1
- package/dist/runtime/session/base.js.map +1 -1
- package/dist/runtime/session/commands.d.ts +2 -1
- package/dist/runtime/session/commands.d.ts.map +1 -1
- package/dist/runtime/session/commands.js +10 -4
- package/dist/runtime/session/commands.js.map +1 -1
- package/dist/runtime/session/lifecycle.d.ts +3 -4
- package/dist/runtime/session/lifecycle.d.ts.map +1 -1
- package/dist/runtime/session/lifecycle.js +6 -5
- package/dist/runtime/session/lifecycle.js.map +1 -1
- package/dist/state/directories.d.ts +4 -0
- package/dist/state/directories.d.ts.map +1 -0
- package/dist/state/directories.js +41 -0
- package/dist/state/directories.js.map +1 -0
- package/dist/state/files.d.ts.map +1 -1
- package/dist/state/files.js +25 -11
- package/dist/state/files.js.map +1 -1
- package/dist/state/private-session.d.ts.map +1 -1
- package/dist/state/private-session.js +2 -0
- package/dist/state/private-session.js.map +1 -1
- package/dist/state/store.d.ts.map +1 -1
- package/dist/state/store.js +7 -1
- package/dist/state/store.js.map +1 -1
- package/docs/cli-behavior.md +1 -1
- package/docs/codex/cli.md +57 -0
- package/docs/codex/config.md +47 -0
- package/docs/codex/hooks.md +70 -0
- package/examples/README.md +56 -0
- package/examples/full.ts +113 -0
- package/examples/minimal.ts +15 -0
- package/examples/stream.ts +39 -0
- package/examples/support.ts +71 -0
- package/package.json +10 -5
- package/prd/01-overview.md +21 -0
- package/prd/02-goals.md +47 -0
- package/prd/03-terminology.md +32 -0
- package/prd/04-architecture.md +121 -0
- package/prd/05-api/5.1-starting-claude.md +108 -0
- package/prd/05-api/5.2-resuming-claude.md +86 -0
- package/prd/05-api/5.3-claude-session-api.md +658 -0
- package/prd/05-api/5.4-events.md +145 -0
- package/prd/05-api/5.5-starting-codex.md +106 -0
- package/prd/05-api/5.6-resuming-codex.md +48 -0
- package/prd/05-api/5.7-codex-session-api.md +425 -0
- package/prd/05-api/5.8-session-api.md +122 -0
- package/prd/05-api/5.9-loops.md +170 -0
- package/prd/05-api/README.md +19 -0
- package/prd/06-claude-hook-bridge.md +164 -0
- package/prd/07-claude-policy.md +15 -0
- package/prd/07a-codex-hook-bridge.md +76 -0
- package/prd/08-state.md +127 -0
- package/prd/09-lifecycle.md +222 -0
- package/prd/10-errors.md +55 -0
- package/prd/11-test-app.md +53 -0
- package/prd/12-e2e.md +23 -0
- package/prd/12a-cli.md +375 -0
- package/prd/13-latitude.md +12 -0
- package/prd/14-conformance.md +333 -0
- package/prd/15-open-notes.md +8 -0
- package/prd/README.md +45 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,11 +7,25 @@ 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 `
|
|
11
|
-
back each entry are listed in
|
|
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.2] - 2026-09-13
|
|
16
|
+
|
|
17
|
+
- Preserve the inherited PATH when an interactive login shell exits successfully
|
|
18
|
+
without returning the PATH probe.
|
|
19
|
+
|
|
20
|
+
- Keep permission dialogs blocking across cursor movement and hold slash-command
|
|
21
|
+
input and recovery Enter while a decision is pending; cancel expired picker submissions.
|
|
22
|
+
- Reject planted state-directory and generated-file links before permission changes or writes.
|
|
23
|
+
- Forward `highTrust` on start-or-resume, wait for model-discovery readiness,
|
|
24
|
+
and resolve session listings independently of agent-specific environment defaults.
|
|
25
|
+
- Align foreground interactive launches with login-shell agent detection.
|
|
26
|
+
- Correct trust and IPC-persistence documentation, include linked package references,
|
|
27
|
+
and revalidate mutable website sprites using fresh URLs for previously cached clients.
|
|
28
|
+
|
|
15
29
|
## [0.1.1]
|
|
16
30
|
|
|
17
31
|
First usable public release.
|
|
@@ -61,7 +75,7 @@ version to install.
|
|
|
61
75
|
`{"type":"models"}` document of `AgentModelOption` rows. The adapters' launch
|
|
62
76
|
flag mapping now lives in shared `claudeLaunchArguments`/`codexLaunchArguments`
|
|
63
77
|
builders so interactive and headless launches cannot drift. (§12A.7–§12A.10,
|
|
64
|
-
C-CLI-
|
|
78
|
+
C-CLI-23 through C-CLI-26)
|
|
65
79
|
|
|
66
80
|
- Claude Code and Codex CLI adapters that run the real interactive CLI in a
|
|
67
81
|
PTY, launched through the user's login shell, and observe it through a
|
package/CONTRIBUTING.md
ADDED
|
@@ -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
|
-
`
|
|
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
|
|
99
|
-
|
|
100
|
-
|
|
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
|
|
@@ -277,8 +278,8 @@ statuses and error documents.
|
|
|
277
278
|
### Trust and security
|
|
278
279
|
|
|
279
280
|
Headless mode is non-interactive. With the default `--trust`, Elwood answers only
|
|
280
|
-
its allowlisted workspace-directory and extension trust dialogs
|
|
281
|
-
|
|
281
|
+
its allowlisted workspace-directory and extension trust dialogs. Codex hook
|
|
282
|
+
trust is bypassed session-wide, including hooks beyond Elwood’s own hooks. `--no-trust` disables the
|
|
282
283
|
workspace/extension approvals. Any other recognized dialog fails safely as
|
|
283
284
|
`blocked_prompt` instead of hanging or guessing.
|
|
284
285
|
|
|
@@ -453,10 +454,13 @@ immediate; both are safe after the process has already exited.
|
|
|
453
454
|
|
|
454
455
|
## Security and privacy
|
|
455
456
|
|
|
456
|
-
- Elwood answers
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
457
|
+
- With `autotrust`, Elwood answers allowlisted workspace, skill/plugin/MCP,
|
|
458
|
+
and Claude bypass-permissions acceptance dialogs. The library defaults to
|
|
459
|
+
`autotrust: false`; the CLI defaults to `--trust`. Codex hook trust is bypassed
|
|
460
|
+
for the entire launched session even without autotrust. Codex update dialogs
|
|
461
|
+
are skipped, and Claude browser-tools onboarding is dismissed. Other recognized
|
|
462
|
+
dialogs leave the session `blocked` for a human; the CLI fails such runs as
|
|
463
|
+
`blocked_prompt`.
|
|
460
464
|
- `--high-trust` (library `highTrust: true`) is the agent-neutral "never ask"
|
|
461
465
|
switch: Claude `bypassPermissions`, or Codex `danger-full-access` with
|
|
462
466
|
approval policy `never`. It removes the agent's own guardrails, so point it
|
|
@@ -468,9 +472,11 @@ immediate; both are safe after the process has already exited.
|
|
|
468
472
|
- The persisted session record holds schema version, `elwoodSessionId`,
|
|
469
473
|
adapter, `cwd`, and per-adapter resume state. Loop definitions are the only
|
|
470
474
|
persisted prompt text, in an owner-only `0600` sidecar.
|
|
471
|
-
-
|
|
472
|
-
|
|
473
|
-
|
|
475
|
+
- Elwood does not persist ordinary prompts, terminal output, hook payloads,
|
|
476
|
+
hook responses, transcripts, or warnings. Fresh bridge tokens and socket paths
|
|
477
|
+
are embedded in generated owner-only bridge scripts (`0600`), but excluded
|
|
478
|
+
from session records and never read back as credentials on resume. `teardown()`
|
|
479
|
+
removes these scripts; `stop()` preserves them with the session's runtime files.
|
|
474
480
|
- Hook bridge traffic stays on local IPC with a per-session token and an 8 MiB
|
|
475
481
|
request cap.
|
|
476
482
|
- Elwood does not modify the user's global agent configuration. Claude gets
|
|
@@ -524,13 +530,13 @@ immediate; both are safe after the process has already exited.
|
|
|
524
530
|
and hooks.
|
|
525
531
|
- [examples/README.md](examples/README.md): runnable minimal, streaming, and
|
|
526
532
|
low-level examples.
|
|
527
|
-
- [
|
|
533
|
+
- [prd/](prd/README.md): the behavior specification and conformance criteria.
|
|
528
534
|
- [CHANGELOG.md](CHANGELOG.md): consumer-facing changes.
|
|
529
|
-
- [site/](site
|
|
535
|
+
- [site/](https://github.com/with-logic/elwood/tree/main/site): the landing page and the generated documentation site.
|
|
530
536
|
|
|
531
537
|
## The website
|
|
532
538
|
|
|
533
|
-
[`site/`](site
|
|
539
|
+
[`site/`](https://github.com/with-logic/elwood/tree/main/site) is the landing page and the generated documentation site,
|
|
534
540
|
deployed to Vercel from this repository and served at [elwood.bot](https://elwood.bot). It is a static site with no framework
|
|
535
541
|
and no build step: HTML, CSS, ES modules, and the robot's sprite sheets.
|
|
536
542
|
|
|
@@ -539,7 +545,7 @@ cd site && python3 -m http.server 8766 --bind 127.0.0.1
|
|
|
539
545
|
```
|
|
540
546
|
|
|
541
547
|
The documentation page is generated from Markdown sources in
|
|
542
|
-
[`site/docs/guide/`](site/docs/guide
|
|
548
|
+
[`site/docs/guide/`](https://github.com/with-logic/elwood/tree/main/site/docs/guide) and reads the CLI's help text out of
|
|
543
549
|
`src/cli/help.ts`, so the published flag reference cannot drift from the code:
|
|
544
550
|
|
|
545
551
|
```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;
|
|
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
|
|
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
|
|
26
|
+
await sendPickerInput(io, key, cacheConfirmationWithCursor, true);
|
|
26
27
|
await waitForScreen(io.terminal, affirmativeCacheConfirmation, timeoutMs, "active Claude cache confirmation before apply");
|
|
27
|
-
await io
|
|
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;
|
|
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
|
-
|
|
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":"AAAA;;;GAGG;AAkBH,MAAM,aAAa,GAAG,wEAAwE,CAAC;AAC/F,MAAM,SAAS,GAAG,uDAAuD,CAAC;AAC1E,MAAM,SAAS,GAAG,2DAA2D,CAAC;AAC9E,MAAM,QAAQ,GAAG,4CAA4C,CAAC;AAE9D,kFAAkF;AAClF,MAAM,UAAU,6BAA6B,CAAC,IAAY;IACxD,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS,IAAI,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAChF,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACxE,IAAI,gBAAgB,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/D,OAAO;QACL,gBAAgB;QAChB,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC7D,cAAc,EAAE,eAAe,CAAC,MAAM,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,OAAO,6BAA6B,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;AAC3D,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAES,CAAC;IACd,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,KAAK,KAAK,eAAe;YAAE,MAAM,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QACpE,IAAI,KAAK,KAAK,sBAAsB;YAAE,MAAM,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IACpF,CAAC;IACD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,
|
|
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
|
|
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,
|
|
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,
|
|
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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"}
|
|
@@ -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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/spawn.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/spawn.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,0EAA0E;AAC1E,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhF,eAAO,MAAM,qBAAqB,EAAE,kBAanC,CAAC;AAEF,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,MAAM,CAIrF"}
|
|
@@ -3,18 +3,24 @@
|
|
|
3
3
|
* observation, the agent's own exit status.
|
|
4
4
|
* Implements PRD §12A.9 and C-CLI-25.
|
|
5
5
|
*/
|
|
6
|
-
import { spawn } from "node:child_process";
|
|
6
|
+
import { execFile, spawn } from "node:child_process";
|
|
7
7
|
import { constants } from "node:os";
|
|
8
8
|
import { causeDetails, elwoodError, errnoCode } from "../../core/errors.js";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
stdio: "inherit",
|
|
9
|
+
import { probeShellCommand, userShell } from "../../runtime/shell.js";
|
|
10
|
+
export const spawnInteractiveAgent = async (launch) => {
|
|
11
|
+
const path = await loginShellPath().catch((error) => {
|
|
12
|
+
throw spawnFailure(launch, error);
|
|
14
13
|
});
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
const child = spawn(launch.command, launch.args, {
|
|
16
|
+
cwd: launch.cwd,
|
|
17
|
+
env: { ...process.env, PATH: path },
|
|
18
|
+
stdio: "inherit",
|
|
19
|
+
});
|
|
20
|
+
child.once("error", (error) => reject(spawnFailure(launch, error)));
|
|
21
|
+
child.once("exit", (code, signal) => resolve(exitStatus(code, signal)));
|
|
22
|
+
});
|
|
23
|
+
};
|
|
18
24
|
/** A signal-terminated agent maps to the shell convention 128 + signal number. */
|
|
19
25
|
export function exitStatus(code, signal) {
|
|
20
26
|
if (code !== null)
|
|
@@ -29,4 +35,19 @@ function spawnFailure(launch, error) {
|
|
|
29
35
|
? `The ${launch.command} command is not available on PATH.`
|
|
30
36
|
: `Could not start ${launch.command} in the foreground.`, causeDetails(error));
|
|
31
37
|
}
|
|
38
|
+
/** Match detection PATH without inserting a shell between terminal signals and the agent. */
|
|
39
|
+
function loginShellPath() {
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
// NUL framing separates the exported PATH from incidental shell-startup stdout.
|
|
42
|
+
execFile(userShell(), probeShellCommand("printf '\\0%s\\0' \"$PATH\""), { timeout: 10_000 }, (error, stdout) => {
|
|
43
|
+
if (error)
|
|
44
|
+
reject(error);
|
|
45
|
+
else {
|
|
46
|
+
const parts = stdout.split("\u0000");
|
|
47
|
+
// Early-exiting shell startup can succeed without running the probe.
|
|
48
|
+
resolve(parts.length >= 3 ? parts.at(-2) : process.env["PATH"]);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
}
|
|
32
53
|
//# sourceMappingURL=spawn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/cli/interactive/spawn.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/cli/interactive/spawn.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/models/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAgB,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMnG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIvD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;CAClC,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;CACpC,CAAC;AAEF,wBAAsB,aAAa,CACjC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,eAAe,EACnB,YAAY,EAAE,yBAAyB,GACtC,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/models/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAgB,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMnG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIvD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;CAClC,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;CACpC,CAAC;AAEF,wBAAsB,aAAa,CACjC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,eAAe,EACnB,YAAY,EAAE,yBAAyB,GACtC,OAAO,CAAC,MAAM,CAAC,CAkDjB"}
|
package/dist/cli/models/index.js
CHANGED
|
@@ -29,9 +29,12 @@ export async function executeModels(request, session, io, dependencies) {
|
|
|
29
29
|
lifecycle.beginLaunch();
|
|
30
30
|
const started = await lifecycle.race(session.start());
|
|
31
31
|
if (started.completed) {
|
|
32
|
-
const
|
|
33
|
-
if (
|
|
34
|
-
|
|
32
|
+
const ready = await lifecycle.race(started.value.waitForStatus((status) => status === "ready"));
|
|
33
|
+
if (ready.completed) {
|
|
34
|
+
const listed = await lifecycle.race(started.value.listModels());
|
|
35
|
+
if (listed.completed)
|
|
36
|
+
models = listed.value;
|
|
37
|
+
}
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/models/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,YAAY,EAAgD,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAIzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAW3C,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA4B,EAC5B,OAAyB,EACzB,EAAmB,EACnB,YAAuC;IAEvC,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAC/F,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,MAAM,eAAe,GACnB,OAAO,CAAC,KAAK,KAAK,OAAO;QACvB,CAAC,CAAC,IAAI,yBAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC;QACvE,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,aAAa,GAAG,kBAAkB,CACtC,OAAO,EACP,OAAO,EACP,SAAS,EACT;QACE,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS;QACvB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KACzE,EACD,SAAS,EACT,eAAe,CAChB,CAAC;IACF,IAAI,MAA+C,CAAC;IACpD,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,IAAI,CAAC;QACH,SAAS,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/models/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,4 +27,6 @@ export declare function explicitAdapterOptions(parsed: ParsedRunCommand, env: En
|
|
|
27
27
|
readonly claudeOptionsExplicit: boolean;
|
|
28
28
|
readonly codexOptionsExplicit: boolean;
|
|
29
29
|
};
|
|
30
|
+
/** Resolve the state path without selecting or validating any agent (C-CLI-24). */
|
|
31
|
+
export declare function resolveStateSetting(parsed: ParsedRunCommand, env: EnvSettings, config: CliConfig, configPath: string, context: LayerContext): SourcedValue<string>;
|
|
30
32
|
//# sourceMappingURL=layers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../../../src/cli/request/layers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAsB,KAAK,YAAY,EAAW,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,KAAK,WAAW,EAA8B,MAAM,aAAa,CAAC;AAE3E,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACtC,oEAAoE;IACpE,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,OAAO,GAChB,eAAe,
|
|
1
|
+
{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../../../src/cli/request/layers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAsB,KAAK,YAAY,EAAW,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,KAAK,WAAW,EAA8B,MAAM,aAAa,CAAC;AAE3E,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACtC,oEAAoE;IACpE,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,OAAO,GAChB,eAAe,CAgCjB;AAYD,wFAAwF;AACxF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,WAAW,GACf;IAAE,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAA;CAAE,CAUrF;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,GACpB,YAAY,CAAC,MAAM,CAAC,CActB"}
|
|
@@ -10,14 +10,10 @@ import { nonBlank, optionalNonBlank } from "./values.js";
|
|
|
10
10
|
export function layeredSettings(parsed, env, config, configPath, context, resuming) {
|
|
11
11
|
const flags = parsed.flags;
|
|
12
12
|
const key = (name) => configKey(configPath, name);
|
|
13
|
-
const stateLocation = resolveStateLocation(context.env, context.homeDir);
|
|
14
|
-
const state = layered(sourced(flags.stateDir, "--state-dir"), sourced(env.stateDir, "ELWOOD_STATE_DIR"), sourced(config.stateDir, key("stateDir")), sourced(stateLocation.path, stateLocation.source));
|
|
15
13
|
const persona = layered(sourced(flags.persona, "--persona"), sourced(env.persona, "ELWOOD_PERSONA"), sourced(resuming ? undefined : config.persona, key("persona")), sourced(undefined, "unset"));
|
|
16
14
|
return {
|
|
17
15
|
timeout: layered(sourced(flags.timeout, "--timeout"), sourced(env.timeout, "ELWOOD_TIMEOUT"), sourced(config.timeout, key("timeout")), sourced(undefined, "built-in")),
|
|
18
|
-
stateDir:
|
|
19
|
-
? state.value
|
|
20
|
-
: resolve(context.invocationCwd, nonBlank(state.value, "stateDir")), state.source),
|
|
16
|
+
stateDir: resolveStateSetting(parsed, env, config, configPath, context),
|
|
21
17
|
persona: sourced(optionalNonBlank(persona.value, "persona"), persona.source),
|
|
22
18
|
model: layered(sourced(flags.model, "--model"), sourced(env.model, "ELWOOD_MODEL"), sourced(undefined, "unset"), sourced(undefined, "unset")),
|
|
23
19
|
effort: layered(sourced(flags.reasoningEffort, "--reasoning-effort"), sourced(env.reasoningEffort, "ELWOOD_REASONING_EFFORT"), sourced(undefined, "unset"), sourced(undefined, "unset")),
|
|
@@ -41,4 +37,12 @@ export function explicitAdapterOptions(parsed, env) {
|
|
|
41
37
|
env.codexApprovalPolicy !== undefined,
|
|
42
38
|
};
|
|
43
39
|
}
|
|
40
|
+
/** Resolve the state path without selecting or validating any agent (C-CLI-24). */
|
|
41
|
+
export function resolveStateSetting(parsed, env, config, configPath, context) {
|
|
42
|
+
const stateLocation = resolveStateLocation(context.env, context.homeDir);
|
|
43
|
+
const state = layered(sourced(parsed.flags.stateDir, "--state-dir"), sourced(env.stateDir, "ELWOOD_STATE_DIR"), sourced(config.stateDir, configKey(configPath, "stateDir")), sourced(stateLocation.path, stateLocation.source));
|
|
44
|
+
return sourced(state.source === stateLocation.source
|
|
45
|
+
? state.value
|
|
46
|
+
: resolve(context.invocationCwd, nonBlank(state.value, "stateDir")), state.source);
|
|
47
|
+
}
|
|
44
48
|
//# sourceMappingURL=layers.js.map
|