@aeolus-fleet/trierarch 0.20.2 → 0.20.4
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/README.md +5 -4
- package/dist/adapters/claude-code-detector.js +22 -4
- package/dist/adapters/claude-code-detector.js.map +1 -1
- package/dist/adapters/claude-code-screen.d.ts +5 -0
- package/dist/adapters/claude-code-screen.js +15 -0
- package/dist/adapters/claude-code-screen.js.map +1 -0
- package/dist/adapters/claude-code-setup.d.ts +2 -0
- package/dist/adapters/claude-code-setup.js +4 -0
- package/dist/adapters/claude-code-setup.js.map +1 -1
- package/dist/adapters/claude-code.d.ts +10 -4
- package/dist/adapters/claude-code.js +32 -5
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/adapters/codex-detector.d.ts +5 -0
- package/dist/adapters/codex-detector.js +47 -11
- package/dist/adapters/codex-detector.js.map +1 -1
- package/dist/adapters/codex-screen.d.ts +5 -0
- package/dist/adapters/codex-screen.js +16 -0
- package/dist/adapters/codex-screen.js.map +1 -0
- package/dist/adapters/codex-setup.d.ts +9 -0
- package/dist/adapters/codex-setup.js +36 -0
- package/dist/adapters/codex-setup.js.map +1 -1
- package/dist/adapters/codex.d.ts +4 -3
- package/dist/adapters/codex.js +16 -3
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/detected-file.js +8 -2
- package/dist/adapters/detected-file.js.map +1 -1
- package/dist/adapters/detectors.js +2 -0
- package/dist/adapters/detectors.js.map +1 -1
- package/dist/adapters/git-workspace.js +5 -0
- package/dist/adapters/git-workspace.js.map +1 -1
- package/dist/adapters/harnesses.d.ts +1 -1
- package/dist/adapters/harnesses.js +2 -1
- package/dist/adapters/harnesses.js.map +1 -1
- package/dist/adapters/json-state.js +2 -0
- package/dist/adapters/json-state.js.map +1 -1
- package/dist/adapters/launch-screen.d.ts +18 -0
- package/dist/adapters/launch-screen.js +15 -0
- package/dist/adapters/launch-screen.js.map +1 -0
- package/dist/adapters/log.d.ts +1 -1
- package/dist/adapters/rest-fleet.d.ts +3 -7
- package/dist/adapters/rest-fleet.js +18 -4
- package/dist/adapters/rest-fleet.js.map +1 -1
- package/dist/adapters/tmux.d.ts +2 -0
- package/dist/adapters/tmux.js +6 -0
- package/dist/adapters/tmux.js.map +1 -1
- package/dist/adapters/trust.d.ts +14 -0
- package/dist/adapters/trust.js +29 -0
- package/dist/adapters/trust.js.map +1 -0
- package/dist/cli/add.d.ts +41 -0
- package/dist/cli/add.js +52 -0
- package/dist/cli/add.js.map +1 -0
- package/dist/cli/config-check.js +9 -3
- package/dist/cli/config-check.js.map +1 -1
- package/dist/cli/detect.d.ts +1 -1
- package/dist/cli/detect.js +4 -3
- package/dist/cli/detect.js.map +1 -1
- package/dist/cli/init.d.ts +6 -1
- package/dist/cli/init.js +24 -20
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.js +17 -5
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/new-process.d.ts +23 -0
- package/dist/cli/new-process.js +25 -0
- package/dist/cli/new-process.js.map +1 -0
- package/dist/cli/places.d.ts +8 -0
- package/dist/cli/places.js +20 -0
- package/dist/cli/places.js.map +1 -0
- package/dist/cli/run.js +29 -7
- package/dist/cli/run.js.map +1 -1
- package/dist/core/check-settings.d.ts +14 -2
- package/dist/core/check-settings.js +19 -3
- package/dist/core/check-settings.js.map +1 -1
- package/dist/core/detect-harnesses.d.ts +9 -3
- package/dist/core/detect-harnesses.js +6 -5
- package/dist/core/detect-harnesses.js.map +1 -1
- package/dist/core/detected-options.d.ts +7 -1
- package/dist/core/detected-options.js +40 -2
- package/dist/core/detected-options.js.map +1 -1
- package/dist/core/entry.d.ts +4 -0
- package/dist/core/entry.js.map +1 -1
- package/dist/core/ports.d.ts +65 -0
- package/dist/core/reconciler.d.ts +31 -2
- package/dist/core/reconciler.js +193 -40
- package/dist/core/reconciler.js.map +1 -1
- package/dist/core/refuse-model.d.ts +22 -0
- package/dist/core/refuse-model.js +32 -0
- package/dist/core/refuse-model.js.map +1 -0
- package/dist/core/report-self.d.ts +2 -1
- package/dist/core/report-self.js +15 -6
- package/dist/core/report-self.js.map +1 -1
- package/dist/core/run-pass.d.ts +6 -1
- package/dist/core/run-pass.js +136 -28
- package/dist/core/run-pass.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -23,11 +23,11 @@ That gives the command `aeolus-trierarch`.
|
|
|
23
23
|
- the fleet URL, the ship id and the secret. The secret is not shown as you type it, so it stays out of your shell history and any transcript. It registers the ship, keeps its crew token in `~/.aeolus/trierarch/crew-token` (readable by you only) and writes the secret nowhere;
|
|
24
24
|
- whether Claude Code launches with `--dangerously-skip-permissions` and with `--remote-control` (both no unless you say yes);
|
|
25
25
|
- where `codex` runs or Codex is configured already: whether to offer Codex, and whether it launches with `--dangerously-bypass-approvals-and-sandbox` (no unless you say yes). Every Codex session launches with `--no-daemon` whatever the flags, so stopping it stops its work;
|
|
26
|
-
- the repositories it may make worktrees of, by name and path;
|
|
26
|
+
- the repositories it may make worktrees of, by name and path. It trusts each one, as both Claude Code and Codex ask about a worktree's repository;
|
|
27
27
|
- the folders it may crew a ship in as they are, by name and path. It trusts each one, so a session there starts with no trust question;
|
|
28
28
|
- the caps: how many ships it takes, how many sessions run at once.
|
|
29
29
|
|
|
30
|
-
It writes `~/.aeolus/trierarch/config.json`, with `config.schema.json` beside it so an editor checks it. When the configuration offers Codex, it answers Codex's one-time questions ahead too, through `codex app-server` as Codex's own dialogs do: it trusts each configured repository and folder in `~/.codex/config.toml` (a repository covers its worktrees), and trusts the aeolus plugin's hooks, without which a Codex session marks no turn and is never woken. A plugin update changes the hooks: run `aeolus-trierarch init` again after updating the aeolus plugin for Codex. It answers Claude Code's one-time questions ahead, so a session nobody watches never waits on one: it trusts the worktree root in `~/.claude.json`,
|
|
30
|
+
It writes `~/.aeolus/trierarch/config.json`, with `config.schema.json` beside it so an editor checks it. When the configuration offers Codex, it answers Codex's one-time questions ahead too, through `codex app-server` as Codex's own dialogs do: it trusts each configured repository and folder in `~/.codex/config.toml` (a repository covers its worktrees), and trusts the aeolus plugin's hooks, without which a Codex session marks no turn and is never woken. A plugin update changes the hooks: run `aeolus-trierarch init` again after updating the aeolus plugin for Codex. It answers Claude Code's one-time questions ahead, so a session nobody watches never waits on one: it trusts the worktree root in `~/.claude.json`, each configured repository and each configured folder (on every run, so a place added since is trusted too), and, when the sessions skip permissions, offers to accept bypass permissions mode in `~/.claude/settings.json`. Then it offers to install and start the service: a launchd agent on macOS (`~/Library/LaunchAgents/dev.aeolus-fleet.trierarch.plist`), a systemd user unit on Linux (`aeolus-trierarch.service`), started at login and again whenever it stops.
|
|
31
31
|
|
|
32
32
|
Without a terminal, pass everything as flags and take every default with `--yes`: `aeolus-trierarch init --fleet-url https://fleet.example.com --ship-id shp_... --secret aeolus_sk_v1_... --yes`. Prefer the prompt: a secret in a flag lands in your shell history.
|
|
33
33
|
|
|
@@ -40,9 +40,10 @@ That gives the command `aeolus-trierarch`.
|
|
|
40
40
|
| `aeolus-trierarch status` | The installed version, and the one the service runs when it differs (then it says to restart), the service (running, pid, since), the fleet and the trierarch's own lease, the caps in use, the entries by state, kept worktrees and orphans |
|
|
41
41
|
| `aeolus-trierarch list` | The ships it crews: ship, state, harness, workspace, since, restarts |
|
|
42
42
|
| `aeolus-trierarch logs [--lines <n>] [--follow]` | The last lines of `~/.aeolus/trierarch/logs/trierarch.log`, and with `--follow` each new one. The log holds one JSON record per line: each action the loop takes for a ship (crew, launch, wake, report, release, confirm, forget, leave, stop) as `{ time, shipId, shipName, action, outcome, next }`, where `next` says what happens after a failure, or a message as `{ time, level, message }`. `logs` renders them as text, and `--json` gives the records as they are (a line that is no record as `{ line }`). `run` in a terminal writes the text |
|
|
43
|
+
| `aeolus-trierarch add repository <name> <path>`, `aeolus-trierarch add folder <name> <path>` | Adds a repository to make worktrees of, or a folder to crew a ship in as it is, checked as init checks it, and trusts it for every configured harness in one step: adding a place is what trusts it. Then it restarts the service so the trierarch offers it, and waits until the new process says its version (at most 30 seconds); sessions keep running. A place written into `config.json` by hand is never offered and never crewed until it is added |
|
|
43
44
|
| `aeolus-trierarch config check` | Checks the configuration and gives the flags each harness launches with, and each option value's flags. Then the command each harness launches on a first start and on a restart, with each flag marked `(configuration)` or `(adapter)` when the adapter adds it itself (`--no-daemon` for Codex, `--continue` on a Claude Code restart, the remote-control session name) |
|
|
44
45
|
| `aeolus-trierarch detect` | Detects again what each configured harness offers (its models, and effort where its CLI has a flag for it) and keeps it in `~/.aeolus/trierarch/detected.json`, then gives per harness its version, each option's values and when its models were last confirmed. Restart the trierarch so it reads them ([docs/trierarch.md](../../docs/trierarch.md#detected-options)) |
|
|
45
|
-
| `aeolus-trierarch start`, `stop`, `restart` | The service. `stop` returns once the trierarch has exited; a stopped one starts again at the next login. Restart it after you change the configuration |
|
|
46
|
+
| `aeolus-trierarch start`, `stop`, `restart` | The service. `stop` returns once the trierarch has exited; a stopped one starts again at the next login. `restart` returns once the new process says its version (at most 30 seconds). Restart it after you change the configuration |
|
|
46
47
|
| `aeolus-trierarch upgrade [version]` | Installs the given version, or the latest on npm, globally and pinned to it. Then it stops the old process and starts the new one, waits until the new one says its version (at most 30 seconds), and shows `status`. Sessions keep running: the new process takes them over. If the install fails, the old version keeps running. It never upgrades on its own |
|
|
47
48
|
| `aeolus-trierarch install [--no-load]` | Installs the service; over a running one it waits for the old process to exit, then loads it again. With `--no-load` it only writes its file |
|
|
48
49
|
| `aeolus-trierarch uninstall` | Removes the service and stops every session. It deletes nothing else: it lists the worktrees it leaves, and keeps its own files under `~/.aeolus/trierarch/` |
|
|
@@ -84,7 +85,7 @@ To stop the trierarch: `aeolus-trierarch stop`, or `aeolus-trierarch uninstall`
|
|
|
84
85
|
- **folders**: by name, used as they are, one ship per folder, never removed.
|
|
85
86
|
- **harnesses**: `claude-code`, `codex` or both: the flags every launch gets, and named options. A crew request's settings pick option values by name; they never add a flag or carry a path. There is no policy on which flags: put `--dangerously-skip-permissions` in `flags` if you want it. The trierarch never adds a flag by itself. With `--remote-control` and no name after it, each session is named `[<repository or folder>] <ship>`, such as `[aeolus-fleet] trial-1`, so it is easy to find among your remote-control sessions.
|
|
86
87
|
|
|
87
|
-
`aeolus-trierarch init` writes caps, repositories, folders, and Claude Code's and Codex's flags, and detects each harness's models and effort levels into `detected.json` ([docs/trierarch.md](../../docs/trierarch.md#detected-options)). Options you write here replace the detected option of the same name whole
|
|
88
|
+
`aeolus-trierarch init` writes caps, repositories, folders, and Claude Code's and Codex's flags, and detects each harness's models and effort levels into `detected.json` ([docs/trierarch.md](../../docs/trierarch.md#detected-options)). Options you write here replace the detected option of the same name whole, except `model`: model ids come from detection only, and a `model` here is ignored (#382). The example above narrows Claude Code's effort to two levels with a default, and takes the detected models as they are. Edit the file for options and `worktreeRoot`, then `aeolus-trierarch config check` and `aeolus-trierarch restart`.
|
|
88
89
|
|
|
89
90
|
The trierarch finds the aeolus plugin in each offered harness's plugin cache (the newest version): Claude Code's under `~/.claude/plugins`, Codex's under `~/.codex/plugins` (or `$CODEX_HOME/plugins`). Set `AEOLUS_PLUGIN_ROOT` and `AEOLUS_PLUGIN_DATA` (Claude Code), or `AEOLUS_CODEX_PLUGIN_ROOT` and `AEOLUS_CODEX_PLUGIN_DATA` (Codex), to point it elsewhere. `aeolus-trierarch install` carries these, `CODEX_HOME`, `AEOLUS_TRIERARCH_CONFIG` and `PATH` into the service as they are set where it runs.
|
|
90
91
|
|
|
@@ -40,14 +40,32 @@ function outcomeOf(alias, result) {
|
|
|
40
40
|
return { kind: 'unknown' };
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* An option's entry in --help on one line: its own line and the lines its
|
|
45
|
+
* description wraps onto (#383), those indented deeper that start no option.
|
|
46
|
+
*/
|
|
47
|
+
function entryOf(help, flag) {
|
|
48
|
+
const lines = help.split('\n');
|
|
49
|
+
const start = lines.findIndex((line) => line.trimStart().startsWith(flag));
|
|
50
|
+
if (start === -1) {
|
|
51
|
+
return '';
|
|
52
|
+
}
|
|
53
|
+
const indent = (lines[start] ?? '').length - (lines[start] ?? '').trimStart().length;
|
|
54
|
+
const wrapped = lines.slice(start + 1).findIndex((line) => line.length - line.trimStart().length <= indent || line.trimStart().startsWith('-'));
|
|
55
|
+
const end = wrapped === -1 ? lines.length : start + 1 + wrapped;
|
|
56
|
+
return lines
|
|
57
|
+
.slice(start, end)
|
|
58
|
+
.map((line) => line.trim())
|
|
59
|
+
.join(' ');
|
|
60
|
+
}
|
|
43
61
|
/** The aliases --help names for --model, quoted, such as 'opus'. */
|
|
44
62
|
function aliasesOf(help) {
|
|
45
|
-
const
|
|
46
|
-
return [...
|
|
63
|
+
const entry = entryOf(help, '--model <model>');
|
|
64
|
+
return [...entry.matchAll(/'([a-z0-9][a-z0-9._-]*)'/g)].flatMap((match) => (match[1] === undefined ? [] : [match[1]]));
|
|
47
65
|
}
|
|
48
66
|
/** The levels `--effort <level> ... (low, medium, high)` names in --help, each a value name. */
|
|
49
67
|
function effortLevelsOf(help) {
|
|
50
|
-
const listed =
|
|
68
|
+
const listed = /\(([^)]*)\)/.exec(entryOf(help, '--effort <level>'))?.[1];
|
|
51
69
|
return (listed ?? '')
|
|
52
70
|
.split(',')
|
|
53
71
|
.map((level) => level.trim())
|
|
@@ -88,7 +106,7 @@ export function createClaudeCodeDetector(deps) {
|
|
|
88
106
|
...(levels.length > 0 && { effort: optionOf(levels, '--effort') }),
|
|
89
107
|
},
|
|
90
108
|
...(aliases.length === 0 && {
|
|
91
|
-
problem: `Claude Code ${version}'s --help names no model alias, so this machine declares no Claude Code model
|
|
109
|
+
problem: `Claude Code ${version}'s --help names no model alias, so this machine declares no Claude Code model until an update of Claude Code names one`,
|
|
92
110
|
}),
|
|
93
111
|
};
|
|
94
112
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-detector.js","sourceRoot":"","sources":["../../src/adapters/claude-code-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;;;;;;GAUG;AAEH,qGAAqG;AACrG,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAEnD,iDAAiD;AACjD,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,qDAAqD;AACrD,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAChD,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAKtF,yFAAyF;AACzF,SAAS,YAAY,CAAC,KAAa,EAAE,UAA6C;IAChF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9F,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,MAAqB;IACrD,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACtE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACtE,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"claude-code-detector.js","sourceRoot":"","sources":["../../src/adapters/claude-code-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { launchSeenWith } from './launch-screen.js';
|
|
2
|
+
/**
|
|
3
|
+
* Claude Code's screen in a session's launch window (#382), as Claude Code
|
|
4
|
+
* 2.1.295 writes it: the one place its texts are matched, tested on screens
|
|
5
|
+
* captured from real sessions (test/screens).
|
|
6
|
+
*/
|
|
7
|
+
const CLAUDE_CODE_TEXTS = {
|
|
8
|
+
// A tool call collapsed once done ("Ran 1 shell command", "Read 1 file", "Called aeolus"), under way ("⏺ Reading 1 file…"), or shown whole ("⏺ Bash(echo hi)").
|
|
9
|
+
activity: /^ {2}(?:Ran|Read|Wrote|Edited|Updated|Searched for|Listed|Fetched) \d+ |^ {2}Called \S+|^⏺ (?:Running|Reading|Calling|Writing|Editing|Updating|Searching|Listing|Fetching) |^⏺ [A-Za-z][\w-]*\(/mu,
|
|
10
|
+
refused: /There's an issue with the selected model \(([^()\s]+)\)/gu,
|
|
11
|
+
};
|
|
12
|
+
export function claudeCodeLaunchSeen(at) {
|
|
13
|
+
return launchSeenWith(CLAUDE_CODE_TEXTS, at);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=claude-code-screen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-screen.js","sourceRoot":"","sources":["../../src/adapters/claude-code-screen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAoB,MAAM,oBAAoB,CAAC;AAEtE;;;;GAIG;AACH,MAAM,iBAAiB,GAAgB;IACrC,gKAAgK;IAChK,QAAQ,EACN,mMAAmM;IACrM,OAAO,EAAE,2DAA2D;CACrE,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,EAAsC;IACzE,OAAO,cAAc,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
export interface ClaudeCodeSetup {
|
|
11
11
|
trust(folder: string): Promise<void>;
|
|
12
12
|
isTrusted(folder: string): Promise<boolean>;
|
|
13
|
+
/** Every folder it trusts, from one read of its file (#381). */
|
|
14
|
+
trustedFolders(): Promise<ReadonlySet<string>>;
|
|
13
15
|
acceptSkipPermissions(): Promise<void>;
|
|
14
16
|
isSkipPermissionsAccepted(): Promise<boolean>;
|
|
15
17
|
}
|
|
@@ -42,6 +42,10 @@ export function createClaudeCodeSetup(at) {
|
|
|
42
42
|
const project = jsonObjectSchema.safeParse(projectsOf(await readJsonObject(state))[folder]).data;
|
|
43
43
|
return project?.hasTrustDialogAccepted === true;
|
|
44
44
|
},
|
|
45
|
+
trustedFolders: async () => {
|
|
46
|
+
const projects = Object.entries(projectsOf(await readJsonObject(state)));
|
|
47
|
+
return new Set(projects.filter(([, project]) => jsonObjectSchema.safeParse(project).data?.hasTrustDialogAccepted === true).map(([folder]) => folder));
|
|
48
|
+
},
|
|
45
49
|
acceptSkipPermissions: async () => {
|
|
46
50
|
await writeJsonObject(settings, { ...(await readJsonObject(settings)), skipDangerousModePermissionPrompt: true });
|
|
47
51
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-setup.js","sourceRoot":"","sources":["../../src/adapters/claude-code-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-code-setup.js","sourceRoot":"","sources":["../../src/adapters/claude-code-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,12 @@ import { type AeolusPlugin } from './plugin-identity.js';
|
|
|
5
5
|
import type { Tmux } from './tmux.js';
|
|
6
6
|
/**
|
|
7
7
|
* Claude Code as a harness (docs/architecture.md, "First adapters"): `claude`
|
|
8
|
-
* in the folder, `--continue` on a restart
|
|
9
|
-
*
|
|
8
|
+
* in the folder, `--continue` on a restart when the folder has a conversation
|
|
9
|
+
* to continue, `/aeolus:wake` typed to wake an idle session, and always
|
|
10
|
+
* without AskUserQuestion and plan mode: nobody watches the session's pane, so
|
|
11
|
+
* it asks its questions over the fleet, and a question form or a plan approval
|
|
12
|
+
* waiting there would take the keys of a wake (#457, #460). Plan mode goes as a
|
|
13
|
+
* whole: without ExitPlanMode alone a session that entered it could never leave. A session's identity is written and read through the aeolus
|
|
10
14
|
* plugin's own `aeolus-identity.sh`, never a copy of how the plugin names its
|
|
11
15
|
* files.
|
|
12
16
|
*/
|
|
@@ -14,7 +18,7 @@ export declare const WAKE_PROMPT = "/aeolus:wake";
|
|
|
14
18
|
export declare const CLAUDE_CODE_ADAPTER_FLAGS: readonly AdapterFlag[];
|
|
15
19
|
/** The flags of Claude Code that are risky: it then runs every tool without asking (#326). */
|
|
16
20
|
export declare const CLAUDE_CODE_RISKY_FLAGS: readonly string[];
|
|
17
|
-
/** `claude`, the flags, `--continue` on a restart, then the prompt last after `--`: no flag takes it (`--remote-control [name]` has an optional value), and it never reads as a flag. */
|
|
21
|
+
/** `claude`, the flags, AskUserQuestion and plan mode disallowed, `--continue` on a restart, then the prompt last after `--`: no flag takes it (`--remote-control [name]` has an optional value), and it never reads as a flag. */
|
|
18
22
|
export declare function claudeCodeCommandLine(at: {
|
|
19
23
|
flags: readonly string[];
|
|
20
24
|
sessionName: string;
|
|
@@ -25,7 +29,9 @@ export declare function claudeCodeCommandLine(at: {
|
|
|
25
29
|
export declare function createClaudeCodeHarness(options: {
|
|
26
30
|
configuration: TrierarchConfiguration;
|
|
27
31
|
plugin: AeolusPlugin;
|
|
28
|
-
sessions: Pick<Tmux, 'start' | 'type'>;
|
|
32
|
+
sessions: Pick<Tmux, 'start' | 'type' | 'screen'>;
|
|
33
|
+
/** Claude Code's projects folder, where it keeps each folder's conversations. */
|
|
34
|
+
projects: string;
|
|
29
35
|
/** The program to run; `claude` unless a test runs another. */
|
|
30
36
|
command?: string;
|
|
31
37
|
}): HarnessPort;
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
import { readdir } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { claudeCodeLaunchSeen } from './claude-code-screen.js';
|
|
1
4
|
import { partsWithWords, wordsOf } from './command-line.js';
|
|
2
5
|
import { effectiveFlags } from './flags.js';
|
|
3
6
|
import { createPluginIdentity } from './plugin-identity.js';
|
|
4
7
|
/**
|
|
5
8
|
* Claude Code as a harness (docs/architecture.md, "First adapters"): `claude`
|
|
6
|
-
* in the folder, `--continue` on a restart
|
|
7
|
-
*
|
|
9
|
+
* in the folder, `--continue` on a restart when the folder has a conversation
|
|
10
|
+
* to continue, `/aeolus:wake` typed to wake an idle session, and always
|
|
11
|
+
* without AskUserQuestion and plan mode: nobody watches the session's pane, so
|
|
12
|
+
* it asks its questions over the fleet, and a question form or a plan approval
|
|
13
|
+
* waiting there would take the keys of a wake (#457, #460). Plan mode goes as a
|
|
14
|
+
* whole: without ExitPlanMode alone a session that entered it could never leave. A session's identity is written and read through the aeolus
|
|
8
15
|
* plugin's own `aeolus-identity.sh`, never a copy of how the plugin names its
|
|
9
16
|
* files.
|
|
10
17
|
*/
|
|
@@ -12,7 +19,11 @@ export const WAKE_PROMPT = '/aeolus:wake';
|
|
|
12
19
|
const REMOTE_CONTROL = '--remote-control';
|
|
13
20
|
const CONTINUE = '--continue';
|
|
14
21
|
const END_OF_FLAGS = '--';
|
|
15
|
-
|
|
22
|
+
const NO_PANE_PROMPTS = '--disallowedTools=AskUserQuestion,EnterPlanMode,ExitPlanMode';
|
|
23
|
+
export const CLAUDE_CODE_ADAPTER_FLAGS = [
|
|
24
|
+
{ flag: NO_PANE_PROMPTS, when: 'always' },
|
|
25
|
+
{ flag: CONTINUE, when: 'restart' },
|
|
26
|
+
];
|
|
16
27
|
/** The flags of Claude Code that are risky: it then runs every tool without asking (#326). */
|
|
17
28
|
export const CLAUDE_CODE_RISKY_FLAGS = ['--dangerously-skip-permissions'];
|
|
18
29
|
/**
|
|
@@ -34,15 +45,30 @@ function namedRemoteControl(flags, name) {
|
|
|
34
45
|
{ words: flags.slice(at + 1), source: 'configuration' },
|
|
35
46
|
];
|
|
36
47
|
}
|
|
37
|
-
/** `claude`, the flags, `--continue` on a restart, then the prompt last after `--`: no flag takes it (`--remote-control [name]` has an optional value), and it never reads as a flag. */
|
|
48
|
+
/** `claude`, the flags, AskUserQuestion and plan mode disallowed, `--continue` on a restart, then the prompt last after `--`: no flag takes it (`--remote-control [name]` has an optional value), and it never reads as a flag. */
|
|
38
49
|
export function claudeCodeCommandLine(at) {
|
|
39
50
|
return partsWithWords([
|
|
40
51
|
{ words: [at.program ?? 'claude'] },
|
|
41
52
|
...namedRemoteControl(at.flags, at.sessionName),
|
|
53
|
+
{ words: [NO_PANE_PROMPTS], source: 'adapter' },
|
|
42
54
|
{ words: at.isFirstStart ? [] : [CONTINUE], source: 'adapter' },
|
|
43
55
|
{ words: [END_OF_FLAGS, at.prompt] },
|
|
44
56
|
]);
|
|
45
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Whether Claude Code keeps a conversation for the folder: it keeps each in
|
|
60
|
+
* its projects folder, under the folder's path with every character other
|
|
61
|
+
* than a letter or digit as `-`. Without one, `claude --continue` exits at
|
|
62
|
+
* once (#381), so a restart starts fresh instead.
|
|
63
|
+
*/
|
|
64
|
+
async function hasConversation(projects, folder) {
|
|
65
|
+
try {
|
|
66
|
+
return (await readdir(join(projects, folder.replace(/[^a-zA-Z0-9]/g, '-')))).some((file) => file.endsWith('.jsonl'));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
46
72
|
export function createClaudeCodeHarness(options) {
|
|
47
73
|
const { configuration, plugin, sessions } = options;
|
|
48
74
|
return {
|
|
@@ -57,7 +83,7 @@ export function createClaudeCodeHarness(options) {
|
|
|
57
83
|
flags: effectiveFlags(settings, picked),
|
|
58
84
|
sessionName: `[${workspace.kind === 'worktree' ? workspace.repository : workspace.name}] ${shipName}`,
|
|
59
85
|
prompt,
|
|
60
|
-
isFirstStart,
|
|
86
|
+
isFirstStart: isFirstStart || !(await hasConversation(options.projects, folder)),
|
|
61
87
|
...(options.command !== undefined && { program: options.command }),
|
|
62
88
|
});
|
|
63
89
|
await sessions.start({ shipId, folder, command: wordsOf(command) });
|
|
@@ -65,6 +91,7 @@ export function createClaudeCodeHarness(options) {
|
|
|
65
91
|
wake: async ({ shipId }) => {
|
|
66
92
|
await sessions.type({ shipId, text: WAKE_PROMPT });
|
|
67
93
|
},
|
|
94
|
+
launchSeen: async ({ shipId, model }) => claudeCodeLaunchSeen({ screen: await sessions.screen(shipId), ...(model !== undefined && { model }) }),
|
|
68
95
|
};
|
|
69
96
|
}
|
|
70
97
|
//# sourceMappingURL=claude-code.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import type { HarnessDetector } from '../core/ports.js';
|
|
2
2
|
import type { CommandResult } from './run-command.js';
|
|
3
|
+
/** The longest a probe may take: a CLI that hangs is ended, its model neither confirmed nor refused. */
|
|
4
|
+
export declare const CODEX_PROBE_TIMEOUT_MS = 60000;
|
|
3
5
|
export declare function createCodexDetector(deps: {
|
|
4
6
|
run: (command: string, options: {
|
|
5
7
|
args: readonly string[];
|
|
8
|
+
cwd?: string;
|
|
6
9
|
timeoutMs?: number;
|
|
7
10
|
}) => Promise<CommandResult>;
|
|
8
11
|
/** The user's Codex configuration, `~/.codex/config.toml`; undefined when there is none. */
|
|
9
12
|
readConfig: () => Promise<string | undefined>;
|
|
13
|
+
/** An empty folder to probe from, so no project's instructions or settings apply. */
|
|
14
|
+
neutralFolder: () => Promise<string>;
|
|
10
15
|
/** The program to run; `codex` unless a test runs another. */
|
|
11
16
|
program?: string;
|
|
12
17
|
}): HarnessDetector;
|
|
@@ -2,17 +2,35 @@ import { trierarchNameSchema } from '@aeolus-fleet/common';
|
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
/**
|
|
4
4
|
* Detecting Codex (#365; docs/trierarch.md, "Detected options"): its own
|
|
5
|
-
* catalog,
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* catalog names its models, the one it runs with now (`codex debug models`),
|
|
6
|
+
* else the bundled one (`--bundled`), offline. The catalog says what Codex
|
|
7
|
+
* knows, not what this login may use (#392): each of its models, hidden ones
|
|
8
|
+
* included, is probed once with a short non-interactive turn, from a neutral
|
|
9
|
+
* folder and never as a ship, and only the ones it confirms are declared,
|
|
10
|
+
* each with `-m`. A model whose probe neither confirms nor refuses it
|
|
11
|
+
* (offline, timed out) keeps what was confirmed before at the same version.
|
|
12
|
+
* The default is the model the user's `~/.codex/config.toml` sets at its top
|
|
13
|
+
* level when confirmed, else the first confirmed model the catalog shows;
|
|
14
|
+
* none is declared without one. Codex has no effort flag, so no effort is
|
|
9
15
|
* declared.
|
|
10
16
|
*/
|
|
11
17
|
const catalogSchema = z.object({ models: z.array(z.object({ slug: z.string(), visibility: z.string() })) });
|
|
12
18
|
/** The longest --version and the catalog may take: both are read offline. */
|
|
13
19
|
const QUICK_TIMEOUT_MS = 10_000;
|
|
20
|
+
/** The longest a probe may take: a CLI that hangs is ended, its model neither confirmed nor refused. */
|
|
21
|
+
export const CODEX_PROBE_TIMEOUT_MS = 60_000;
|
|
22
|
+
const PROBE_PROMPT = 'Reply OK';
|
|
14
23
|
/** The catalog's way of marking a model the picker shows. */
|
|
15
24
|
const VISIBLE = 'list';
|
|
25
|
+
/** How Codex says this login may not use a model, as codex-cli 0.160.1 answers it. */
|
|
26
|
+
const REFUSALS = ['invalid_request_error', 'model is not supported'];
|
|
27
|
+
function outcomeOf(result) {
|
|
28
|
+
const said = `${result.stdout}\n${result.stderr}`;
|
|
29
|
+
if (REFUSALS.some((refusal) => said.includes(refusal))) {
|
|
30
|
+
return 'refused';
|
|
31
|
+
}
|
|
32
|
+
return result.status === 0 ? 'confirmed' : 'unknown';
|
|
33
|
+
}
|
|
16
34
|
/** The `model = "..."` of the configuration's top level, before its first table. */
|
|
17
35
|
function configuredModelOf(config) {
|
|
18
36
|
const topLevel = (config ?? '').split(/^\s*\[/m)[0] ?? '';
|
|
@@ -37,16 +55,34 @@ export function createCodexDetector(deps) {
|
|
|
37
55
|
const result = await deps.run(program, { args: ['--version'], timeoutMs: QUICK_TIMEOUT_MS }).catch(() => undefined);
|
|
38
56
|
return result?.status === 0 ? /\S+$/.exec(result.stdout.trim())?.[0] : undefined;
|
|
39
57
|
},
|
|
40
|
-
detect: async ({ version, now }) => {
|
|
41
|
-
const catalog = catalogOf(await deps.run(program, { args: ['debug', 'models'
|
|
42
|
-
|
|
43
|
-
const [
|
|
44
|
-
if (
|
|
58
|
+
detect: async ({ version, previous, now }) => {
|
|
59
|
+
const catalog = catalogOf(await deps.run(program, { args: ['debug', 'models'], timeoutMs: QUICK_TIMEOUT_MS })) ??
|
|
60
|
+
catalogOf(await deps.run(program, { args: ['debug', 'models', '--bundled'], timeoutMs: QUICK_TIMEOUT_MS }));
|
|
61
|
+
const models = (catalog?.models ?? []).filter((model) => trierarchNameSchema.safeParse(model.slug).success);
|
|
62
|
+
if (models.length === 0) {
|
|
45
63
|
return undefined;
|
|
46
64
|
}
|
|
65
|
+
const before = previous?.version === version ? previous : undefined;
|
|
66
|
+
const confirmedBefore = new Set(Object.keys(before?.options.model?.values ?? {}));
|
|
67
|
+
const folder = await deps.neutralFolder();
|
|
68
|
+
const confirmed = [];
|
|
69
|
+
let isAnyConfirmed = false;
|
|
70
|
+
for (const { slug } of models) {
|
|
71
|
+
const outcome = outcomeOf(await deps.run(program, { args: ['exec', '--skip-git-repo-check', '-m', slug, PROBE_PROMPT], cwd: folder, timeoutMs: CODEX_PROBE_TIMEOUT_MS }).catch(() => ({ status: 1, stdout: '', stderr: '' })));
|
|
72
|
+
isAnyConfirmed ||= outcome === 'confirmed';
|
|
73
|
+
if (outcome === 'confirmed' || (outcome === 'unknown' && confirmedBefore.has(slug))) {
|
|
74
|
+
confirmed.push(slug);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const confirmedAt = isAnyConfirmed ? now : (before?.confirmedAt ?? null);
|
|
78
|
+
if (confirmed.length === 0) {
|
|
79
|
+
return { version, detectedAt: now, confirmedAt, options: {}, problem: `Codex ${version} confirmed none of its catalog's models for this login, so this machine declares no Codex model` };
|
|
80
|
+
}
|
|
47
81
|
const configured = configuredModelOf(await deps.readConfig());
|
|
48
|
-
const
|
|
49
|
-
|
|
82
|
+
const shown = models.filter((model) => model.visibility === VISIBLE).map((model) => model.slug);
|
|
83
|
+
const defaultModel = configured !== undefined && confirmed.includes(configured) ? configured : shown.find((slug) => confirmed.includes(slug));
|
|
84
|
+
const values = Object.fromEntries(confirmed.map((slug) => [slug, ['-m', slug]]));
|
|
85
|
+
return { version, detectedAt: now, confirmedAt, options: { model: { values, ...(defaultModel !== undefined && { default: defaultModel }) } } };
|
|
50
86
|
},
|
|
51
87
|
};
|
|
52
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-detector.js","sourceRoot":"","sources":["../../src/adapters/codex-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB
|
|
1
|
+
{"version":3,"file":"codex-detector.js","sourceRoot":"","sources":["../../src/adapters/codex-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { launchSeenWith } from './launch-screen.js';
|
|
2
|
+
/**
|
|
3
|
+
* Codex's screen in a session's launch window (#382), as Codex 0.160.1
|
|
4
|
+
* writes it: the one place its texts are matched, tested on screens captured
|
|
5
|
+
* from real sessions (test/screens). "• Working" shows even with no tool
|
|
6
|
+
* call, so it is no activity.
|
|
7
|
+
*/
|
|
8
|
+
const CODEX_TEXTS = {
|
|
9
|
+
// A tool call done: "• Ran echo hi", "• Explored", "• Called aeolus.whoami", "• Edited file.ts".
|
|
10
|
+
activity: /^• (?:Ran \S|Explored$|Called \S|Edited \S)/mu,
|
|
11
|
+
refused: /"type":"invalid_request_error","message":"The '([^']+)' model is not supported/gu,
|
|
12
|
+
};
|
|
13
|
+
export function codexLaunchSeen(at) {
|
|
14
|
+
return launchSeenWith(CODEX_TEXTS, at);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=codex-screen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-screen.js","sourceRoot":"","sources":["../../src/adapters/codex-screen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAoB,MAAM,oBAAoB,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,WAAW,GAAgB;IAC/B,iGAAiG;IACjG,QAAQ,EAAE,+CAA+C;IACzD,OAAO,EAAE,kFAAkF;CAC5F,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,EAAsC;IACpE,OAAO,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -16,3 +16,12 @@ export interface CodexSetup {
|
|
|
16
16
|
export declare function createCodexSetup(options?: {
|
|
17
17
|
command?: string;
|
|
18
18
|
}): CodexSetup;
|
|
19
|
+
/**
|
|
20
|
+
* The folders Codex trusts (#381), read from its config.toml in CODEX_HOME,
|
|
21
|
+
* or ~/.codex without it: each `projects` table whose `trust_level` is
|
|
22
|
+
* `trusted`. None where Codex keeps no configuration yet.
|
|
23
|
+
*/
|
|
24
|
+
export declare function codexTrustedFolders(at: {
|
|
25
|
+
homeDirectory: string;
|
|
26
|
+
env: Readonly<Record<string, string | undefined>>;
|
|
27
|
+
}): Promise<ReadonlySet<string>>;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
2
4
|
import { createInterface } from 'node:readline';
|
|
3
5
|
import { z } from 'zod';
|
|
4
6
|
import { runningVersion } from './version.js';
|
|
@@ -103,4 +105,38 @@ export function createCodexSetup(options = {}) {
|
|
|
103
105
|
}),
|
|
104
106
|
};
|
|
105
107
|
}
|
|
108
|
+
/** A `[projects."<path>"]` or `[projects.'<path>']` table header in Codex's config.toml, as Codex writes it. */
|
|
109
|
+
const PROJECT_HEADER = /^\s*\[\s*projects\.(?:"((?:[^"\\]|\\.)*)"|'([^']*)')\s*\]\s*$/;
|
|
110
|
+
const TABLE_HEADER = /^\s*\[/;
|
|
111
|
+
const TRUSTED_LEVEL = /^\s*trust_level\s*=\s*(?:"trusted"|'trusted')\s*(?:#.*)?$/;
|
|
112
|
+
/**
|
|
113
|
+
* The folders Codex trusts (#381), read from its config.toml in CODEX_HOME,
|
|
114
|
+
* or ~/.codex without it: each `projects` table whose `trust_level` is
|
|
115
|
+
* `trusted`. None where Codex keeps no configuration yet.
|
|
116
|
+
*/
|
|
117
|
+
export async function codexTrustedFolders(at) {
|
|
118
|
+
let text;
|
|
119
|
+
try {
|
|
120
|
+
text = await readFile(join(at.env.CODEX_HOME ?? join(at.homeDirectory, '.codex'), 'config.toml'), 'utf8');
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return new Set();
|
|
124
|
+
}
|
|
125
|
+
const trusted = new Set();
|
|
126
|
+
let project;
|
|
127
|
+
for (const line of text.split('\n')) {
|
|
128
|
+
const header = PROJECT_HEADER.exec(line);
|
|
129
|
+
if (header !== null) {
|
|
130
|
+
// A basic string's escapes read as JSON's do; a literal string has none.
|
|
131
|
+
project = header[1] === undefined ? header[2] : z.string().parse(JSON.parse(`"${header[1]}"`));
|
|
132
|
+
}
|
|
133
|
+
else if (TABLE_HEADER.test(line)) {
|
|
134
|
+
project = undefined;
|
|
135
|
+
}
|
|
136
|
+
else if (project !== undefined && TRUSTED_LEVEL.test(line)) {
|
|
137
|
+
trusted.add(project);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return trusted;
|
|
141
|
+
}
|
|
106
142
|
//# sourceMappingURL=codex-setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-setup.js","sourceRoot":"","sources":["../../src/adapters/codex-setup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codex-setup.js","sourceRoot":"","sources":["../../src/adapters/codex-setup.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/codex.d.ts
CHANGED
|
@@ -6,7 +6,8 @@ import type { Tmux } from './tmux.js';
|
|
|
6
6
|
/**
|
|
7
7
|
* Codex as a harness (docs/architecture.md, "First adapters"): `codex` in the
|
|
8
8
|
* folder, `codex resume --last` on a restart (the folder's last conversation;
|
|
9
|
-
* one ship per folder), always with `--no-daemon
|
|
9
|
+
* one ship per folder), always with `--no-daemon` and without the question
|
|
10
|
+
* tool, and `$aeolus-wake` typed
|
|
10
11
|
* to wake an idle session. The identity and the turn marker go through the
|
|
11
12
|
* aeolus plugin for Codex, in Codex's own plugin data folder.
|
|
12
13
|
*/
|
|
@@ -19,7 +20,7 @@ export declare const CODEX_TYPING_SETTLE_MS = 1000;
|
|
|
19
20
|
export declare const CODEX_ADAPTER_FLAGS: readonly AdapterFlag[];
|
|
20
21
|
/** The flags of Codex that are risky: it then runs every command without approval and outside its sandbox (#326). */
|
|
21
22
|
export declare const CODEX_RISKY_FLAGS: readonly string[];
|
|
22
|
-
/** `codex`, or `codex resume --last` on a restart, then the configured flags, --no-daemon once, and the prompt last after `--`, so it never reads as a flag. */
|
|
23
|
+
/** `codex`, or `codex resume --last` on a restart, then the configured flags, --no-daemon once, the question tool off, and the prompt last after `--`, so it never reads as a flag. */
|
|
23
24
|
export declare function codexCommandLine(at: {
|
|
24
25
|
flags: readonly string[];
|
|
25
26
|
prompt: string;
|
|
@@ -29,7 +30,7 @@ export declare function codexCommandLine(at: {
|
|
|
29
30
|
export declare function createCodexHarness(options: {
|
|
30
31
|
configuration: TrierarchConfiguration;
|
|
31
32
|
plugin: AeolusPlugin;
|
|
32
|
-
sessions: Pick<Tmux, 'start' | 'type'>;
|
|
33
|
+
sessions: Pick<Tmux, 'start' | 'type' | 'screen'>;
|
|
33
34
|
/** The program to run; `codex` unless a test runs another. */
|
|
34
35
|
command?: string;
|
|
35
36
|
}): HarnessPort;
|