@aeolus-fleet/trierarch 0.20.3 → 0.20.5

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 (59) hide show
  1. package/README.md +4 -4
  2. package/dist/adapters/claude-code-screen.js +12 -2
  3. package/dist/adapters/claude-code-screen.js.map +1 -1
  4. package/dist/adapters/claude-code-setup.d.ts +8 -2
  5. package/dist/adapters/claude-code-setup.js +11 -0
  6. package/dist/adapters/claude-code-setup.js.map +1 -1
  7. package/dist/adapters/claude-code.d.ts +14 -2
  8. package/dist/adapters/claude-code.js +20 -5
  9. package/dist/adapters/claude-code.js.map +1 -1
  10. package/dist/adapters/codex-screen.js +1 -0
  11. package/dist/adapters/codex-screen.js.map +1 -1
  12. package/dist/adapters/codex.d.ts +3 -2
  13. package/dist/adapters/codex.js +15 -4
  14. package/dist/adapters/codex.js.map +1 -1
  15. package/dist/adapters/flags.d.ts +0 -8
  16. package/dist/adapters/flags.js +1 -12
  17. package/dist/adapters/flags.js.map +1 -1
  18. package/dist/adapters/git-workspace.js +5 -0
  19. package/dist/adapters/git-workspace.js.map +1 -1
  20. package/dist/adapters/harnesses.js +2 -1
  21. package/dist/adapters/harnesses.js.map +1 -1
  22. package/dist/adapters/json-state.js +1 -0
  23. package/dist/adapters/json-state.js.map +1 -1
  24. package/dist/adapters/launch-screen.d.ts +8 -2
  25. package/dist/adapters/launch-screen.js +8 -3
  26. package/dist/adapters/launch-screen.js.map +1 -1
  27. package/dist/adapters/service.d.ts +2 -0
  28. package/dist/adapters/service.js +10 -1
  29. package/dist/adapters/service.js.map +1 -1
  30. package/dist/adapters/trust.d.ts +3 -1
  31. package/dist/adapters/trust.js +11 -3
  32. package/dist/adapters/trust.js.map +1 -1
  33. package/dist/cli/add.d.ts +7 -1
  34. package/dist/cli/add.js +3 -2
  35. package/dist/cli/add.js.map +1 -1
  36. package/dist/cli/config-check.js +2 -1
  37. package/dist/cli/config-check.js.map +1 -1
  38. package/dist/cli/init.d.ts +8 -3
  39. package/dist/cli/init.js +61 -34
  40. package/dist/cli/init.js.map +1 -1
  41. package/dist/cli/main.js +5 -4
  42. package/dist/cli/main.js.map +1 -1
  43. package/dist/cli/new-process.d.ts +23 -0
  44. package/dist/cli/new-process.js +25 -0
  45. package/dist/cli/new-process.js.map +1 -0
  46. package/dist/core/check-settings.d.ts +13 -1
  47. package/dist/core/check-settings.js +19 -1
  48. package/dist/core/check-settings.js.map +1 -1
  49. package/dist/core/effective-flags.d.ts +9 -0
  50. package/dist/core/effective-flags.js +13 -0
  51. package/dist/core/effective-flags.js.map +1 -0
  52. package/dist/core/entry.d.ts +2 -0
  53. package/dist/core/entry.js.map +1 -1
  54. package/dist/core/ports.d.ts +16 -2
  55. package/dist/core/reconciler.js +126 -50
  56. package/dist/core/reconciler.js.map +1 -1
  57. package/dist/core/run-pass.js +73 -24
  58. package/dist/core/run-pass.js.map +1 -1
  59. package/package.json +3 -3
package/README.md CHANGED
@@ -27,7 +27,7 @@ That gives the command `aeolus-trierarch`.
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`, 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.
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. When the configuration offers Claude Code, it answers Claude Code's one-time questions ahead, so a session nobody watches never waits on one, and otherwise leaves Claude Code's files alone: 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), completes Claude Code's onboarding there without asking (each launch completes it again), 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
 
@@ -39,11 +39,11 @@ That gives the command `aeolus-trierarch`.
39
39
  | --- | --- |
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
- | `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; sessions keep running. A place written into `config.json` by hand is never offered and never crewed until it is added |
42
+ | `aeolus-trierarch logs [--lines <n>] [--follow]` | The last lines of `~/.aeolus/trierarch/logs/trierarch.log`, where the launchd agent writes on macOS, and with `--follow` each new one. On Linux the systemd user unit writes to the journal instead: `journalctl --user -u aeolus-trierarch`. 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 |
44
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) |
45
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)) |
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 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 |
47
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 |
48
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 |
49
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/` |
@@ -2,12 +2,22 @@ import { launchSeenWith } from './launch-screen.js';
2
2
  /**
3
3
  * Claude Code's screen in a session's launch window (#382), as Claude Code
4
4
  * 2.1.295 writes it: the one place its texts are matched, tested on screens
5
- * captured from real sessions (test/screens).
5
+ * captured from real sessions (test/screens). Its first-run screens (#403)
6
+ * show on a machine where it never ran by hand, and each waits for a key.
7
+ * It marks a tool call with ⏺ on macOS and with ● on Linux (#487).
6
8
  */
7
9
  const CLAUDE_CODE_TEXTS = {
8
10
  // 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,
11
+ 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
12
  refused: /There's an issue with the selected model \(([^()\s]+)\)/gu,
13
+ screens: [
14
+ { name: 'theme picker', text: /Choose the text style that looks best with your terminal/u },
15
+ { name: 'login method question', text: /Select login method:/u },
16
+ { name: 'security notes', text: /^ Security notes:/mu },
17
+ { name: 'folder trust question', text: /Is this a project you created or one you trust\?/u },
18
+ { name: 'bypass permissions warning', text: /WARNING: Claude Code running in Bypass Permissions mode/u },
19
+ { name: 'fullscreen renderer offer', text: /Try the new fullscreen renderer\?/u },
20
+ ],
11
21
  };
12
22
  export function claudeCodeLaunchSeen(at) {
13
23
  return launchSeenWith(CLAUDE_CODE_TEXTS, at);
@@ -1 +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"}
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;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAgB;IACrC,gKAAgK;IAChK,QAAQ,EACN,yMAAyM;IAC3M,OAAO,EAAE,2DAA2D;IACpE,OAAO,EAAE;QACP,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,2DAA2D,EAAE;QAC3F,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,EAAE;QAChE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,qBAAqB,EAAE;QACvD,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,mDAAmD,EAAE;QAC5F,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,0DAA0D,EAAE;QACxG,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,oCAAoC,EAAE;KAClF;CACF,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,EAAsC;IACzE,OAAO,cAAc,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC"}
@@ -4,8 +4,12 @@
4
4
  * its first start there, even with `--dangerously-skip-permissions`; trusting
5
5
  * a folder covers every folder under it, so trusting the worktree root covers
6
6
  * every worktree. It asks once per user whether to accept bypass permissions
7
- * mode. Both answers live in Claude Code's own files, which this changes key
8
- * by key, keeping everything else and the file's mode.
7
+ * mode. On a machine where it never ran by hand it shows its onboarding (the
8
+ * theme, the login, the security notes) and later offers its fullscreen
9
+ * renderer (#403); a completed onboarding skips the first, and an offer seen
10
+ * as often as it is shown skips the second. The answers live in Claude Code's
11
+ * own files, which this changes key by key, keeping everything else and the
12
+ * file's mode.
9
13
  */
10
14
  export interface ClaudeCodeSetup {
11
15
  trust(folder: string): Promise<void>;
@@ -14,6 +18,8 @@ export interface ClaudeCodeSetup {
14
18
  trustedFolders(): Promise<ReadonlySet<string>>;
15
19
  acceptSkipPermissions(): Promise<void>;
16
20
  isSkipPermissionsAccepted(): Promise<boolean>;
21
+ completeOnboarding(): Promise<void>;
22
+ isOnboardingComplete(): Promise<boolean>;
17
23
  }
18
24
  export declare function createClaudeCodeSetup(at: {
19
25
  homeDirectory: string;
@@ -3,6 +3,8 @@ import { dirname, join } from 'node:path';
3
3
  import { z } from 'zod';
4
4
  import { TrierarchFileError } from './files.js';
5
5
  const jsonObjectSchema = z.record(z.string(), z.unknown());
6
+ /** How often Claude Code 2.1.295 offers its fullscreen renderer at most: once seen this often, it offers it no more. */
7
+ const FULLSCREEN_OFFER_SHOWN_MAX = 3;
6
8
  /** A file only its user reads, as Claude Code keeps ~/.claude.json. */
7
9
  const PRIVATE_MODE = 0o600;
8
10
  async function readJsonObject(path) {
@@ -31,6 +33,7 @@ export function createClaudeCodeSetup(at) {
31
33
  const state = join(at.homeDirectory, '.claude.json');
32
34
  const settings = join(at.homeDirectory, '.claude', 'settings.json');
33
35
  const projectsOf = (claude) => jsonObjectSchema.safeParse(claude.projects).data ?? {};
36
+ const fullscreenOfferSeen = (claude) => z.number().safeParse(claude.fullscreenUpsellSeenCount).data ?? 0;
34
37
  return {
35
38
  trust: async (folder) => {
36
39
  const claude = await readJsonObject(state);
@@ -50,6 +53,14 @@ export function createClaudeCodeSetup(at) {
50
53
  await writeJsonObject(settings, { ...(await readJsonObject(settings)), skipDangerousModePermissionPrompt: true });
51
54
  },
52
55
  isSkipPermissionsAccepted: async () => (await readJsonObject(settings)).skipDangerousModePermissionPrompt === true,
56
+ completeOnboarding: async () => {
57
+ const claude = await readJsonObject(state);
58
+ await writeJsonObject(state, { ...claude, hasCompletedOnboarding: true, fullscreenUpsellSeenCount: Math.max(fullscreenOfferSeen(claude), FULLSCREEN_OFFER_SHOWN_MAX) });
59
+ },
60
+ isOnboardingComplete: async () => {
61
+ const claude = await readJsonObject(state);
62
+ return claude.hasCompletedOnboarding === true && fullscreenOfferSeen(claude) >= FULLSCREEN_OFFER_SHOWN_MAX;
63
+ },
53
64
  };
54
65
  }
55
66
  //# sourceMappingURL=claude-code-setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code-setup.js","sourceRoot":"","sources":["../../src/adapters/claude-code-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code-setup.js","sourceRoot":"","sources":["../../src/adapters/claude-code-setup.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,30 @@
1
1
  import type { TrierarchConfiguration } from '@aeolus-fleet/common';
2
2
  import type { AdapterFlag, HarnessPort } from '../core/ports.js';
3
+ import type { ClaudeCodeSetup } from './claude-code-setup.js';
3
4
  import { type CommandPart } from './command-line.js';
4
5
  import { type AeolusPlugin } from './plugin-identity.js';
5
6
  import type { Tmux } from './tmux.js';
6
7
  /**
7
8
  * Claude Code as a harness (docs/architecture.md, "First adapters"): `claude`
8
9
  * in the folder, `--continue` on a restart when the folder has a conversation
9
- * to continue, `/aeolus:wake` typed to wake an idle session. A session's identity is written and read through the aeolus
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.
15
+ * Its onboarding is completed before every launch, so a session on a machine
16
+ * where Claude Code never ran by hand stops at no first-run screen (#403). A
17
+ * session's identity is written and read through the aeolus
10
18
  * plugin's own `aeolus-identity.sh`, never a copy of how the plugin names its
11
19
  * files.
12
20
  */
13
21
  export declare const WAKE_PROMPT = "/aeolus:wake";
14
22
  export declare const CLAUDE_CODE_ADAPTER_FLAGS: readonly AdapterFlag[];
23
+ /** Claude Code's flag that runs every tool without asking; it asks once per user to accept that (#403). */
24
+ export declare const SKIP_PERMISSIONS = "--dangerously-skip-permissions";
15
25
  /** The flags of Claude Code that are risky: it then runs every tool without asking (#326). */
16
26
  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. */
27
+ /** `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
28
  export declare function claudeCodeCommandLine(at: {
19
29
  flags: readonly string[];
20
30
  sessionName: string;
@@ -28,6 +38,8 @@ export declare function createClaudeCodeHarness(options: {
28
38
  sessions: Pick<Tmux, 'start' | 'type' | 'screen'>;
29
39
  /** Claude Code's projects folder, where it keeps each folder's conversations. */
30
40
  projects: string;
41
+ /** Claude Code's own files, where its onboarding is completed before each launch (#403). */
42
+ setup: Pick<ClaudeCodeSetup, 'completeOnboarding'>;
31
43
  /** The program to run; `claude` unless a test runs another. */
32
44
  command?: string;
33
45
  }): HarnessPort;
@@ -2,12 +2,19 @@ import { readdir } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
3
  import { claudeCodeLaunchSeen } from './claude-code-screen.js';
4
4
  import { partsWithWords, wordsOf } from './command-line.js';
5
- import { effectiveFlags } from './flags.js';
5
+ import { effectiveFlags } from '../core/effective-flags.js';
6
6
  import { createPluginIdentity } from './plugin-identity.js';
7
7
  /**
8
8
  * Claude Code as a harness (docs/architecture.md, "First adapters"): `claude`
9
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. A session's identity is written and read through the aeolus
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.
15
+ * Its onboarding is completed before every launch, so a session on a machine
16
+ * where Claude Code never ran by hand stops at no first-run screen (#403). A
17
+ * session's identity is written and read through the aeolus
11
18
  * plugin's own `aeolus-identity.sh`, never a copy of how the plugin names its
12
19
  * files.
13
20
  */
@@ -15,9 +22,15 @@ export const WAKE_PROMPT = '/aeolus:wake';
15
22
  const REMOTE_CONTROL = '--remote-control';
16
23
  const CONTINUE = '--continue';
17
24
  const END_OF_FLAGS = '--';
18
- export const CLAUDE_CODE_ADAPTER_FLAGS = [{ flag: CONTINUE, when: 'restart' }];
25
+ const NO_PANE_PROMPTS = '--disallowedTools=AskUserQuestion,EnterPlanMode,ExitPlanMode';
26
+ export const CLAUDE_CODE_ADAPTER_FLAGS = [
27
+ { flag: NO_PANE_PROMPTS, when: 'always' },
28
+ { flag: CONTINUE, when: 'restart' },
29
+ ];
30
+ /** Claude Code's flag that runs every tool without asking; it asks once per user to accept that (#403). */
31
+ export const SKIP_PERMISSIONS = '--dangerously-skip-permissions';
19
32
  /** The flags of Claude Code that are risky: it then runs every tool without asking (#326). */
20
- export const CLAUDE_CODE_RISKY_FLAGS = ['--dangerously-skip-permissions'];
33
+ export const CLAUDE_CODE_RISKY_FLAGS = [SKIP_PERMISSIONS];
21
34
  /**
22
35
  * The configured flags, with a name for the remote-control session where the
23
36
  * operator gave `--remote-control` without one: `[<repository or folder>]
@@ -37,11 +50,12 @@ function namedRemoteControl(flags, name) {
37
50
  { words: flags.slice(at + 1), source: 'configuration' },
38
51
  ];
39
52
  }
40
- /** `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. */
53
+ /** `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. */
41
54
  export function claudeCodeCommandLine(at) {
42
55
  return partsWithWords([
43
56
  { words: [at.program ?? 'claude'] },
44
57
  ...namedRemoteControl(at.flags, at.sessionName),
58
+ { words: [NO_PANE_PROMPTS], source: 'adapter' },
45
59
  { words: at.isFirstStart ? [] : [CONTINUE], source: 'adapter' },
46
60
  { words: [END_OF_FLAGS, at.prompt] },
47
61
  ]);
@@ -77,6 +91,7 @@ export function createClaudeCodeHarness(options) {
77
91
  isFirstStart: isFirstStart || !(await hasConversation(options.projects, folder)),
78
92
  ...(options.command !== undefined && { program: options.command }),
79
93
  });
94
+ await options.setup.completeOnboarding();
80
95
  await sessions.start({ shipId, folder, command: wordsOf(command) });
81
96
  },
82
97
  wake: async ({ shipId }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ const CODEX_TEXTS = {
9
9
  // A tool call done: "• Ran echo hi", "• Explored", "• Called aeolus.whoami", "• Edited file.ts".
10
10
  activity: /^• (?:Ran \S|Explored$|Called \S|Edited \S)/mu,
11
11
  refused: /"type":"invalid_request_error","message":"The '([^']+)' model is not supported/gu,
12
+ screens: [],
12
13
  };
13
14
  export function codexLaunchSeen(at) {
14
15
  return launchSeenWith(CODEX_TEXTS, at);
@@ -1 +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"}
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;IAC3F,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,EAAsC;IACpE,OAAO,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC"}
@@ -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`, and `$aeolus-wake` typed
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;
@@ -1,11 +1,12 @@
1
1
  import { codexLaunchSeen } from './codex-screen.js';
2
2
  import { partsWithWords, wordsOf } from './command-line.js';
3
- import { effectiveFlags } from './flags.js';
3
+ import { effectiveFlags } from '../core/effective-flags.js';
4
4
  import { createPluginIdentity } from './plugin-identity.js';
5
5
  /**
6
6
  * Codex as a harness (docs/architecture.md, "First adapters"): `codex` in the
7
7
  * folder, `codex resume --last` on a restart (the folder's last conversation;
8
- * one ship per folder), always with `--no-daemon`, and `$aeolus-wake` typed
8
+ * one ship per folder), always with `--no-daemon` and without the question
9
+ * tool, and `$aeolus-wake` typed
9
10
  * to wake an idle session. The identity and the turn marker go through the
10
11
  * aeolus plugin for Codex, in Codex's own plugin data folder.
11
12
  */
@@ -21,17 +22,27 @@ export const CODEX_TYPING_SETTLE_MS = 1000;
21
22
  * pane is gone, so a release or a crash would stop the pane but not the work.
22
23
  */
23
24
  const NO_DAEMON = '--no-daemon';
25
+ /**
26
+ * Added to every launch: Codex's question tool (request_user_input) waits for
27
+ * an answer in the pane, which nobody watches, and would take the keys of a
28
+ * wake. The session asks its questions over the fleet instead (#460).
29
+ */
30
+ const NO_QUESTION_TOOL = '--config=tools.experimental_request_user_input.enabled=false';
24
31
  const END_OF_FLAGS = '--';
25
- export const CODEX_ADAPTER_FLAGS = [{ flag: NO_DAEMON, when: 'always' }];
32
+ export const CODEX_ADAPTER_FLAGS = [
33
+ { flag: NO_DAEMON, when: 'always' },
34
+ { flag: NO_QUESTION_TOOL, when: 'always' },
35
+ ];
26
36
  /** The flags of Codex that are risky: it then runs every command without approval and outside its sandbox (#326). */
27
37
  export const CODEX_RISKY_FLAGS = ['--dangerously-bypass-approvals-and-sandbox'];
28
- /** `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. */
38
+ /** `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. */
29
39
  export function codexCommandLine(at) {
30
40
  const program = at.program ?? 'codex';
31
41
  return partsWithWords([
32
42
  { words: at.isFirstStart ? [program] : [program, 'resume', '--last'] },
33
43
  { words: at.flags.filter((flag) => flag !== NO_DAEMON), source: 'configuration' },
34
44
  { words: [NO_DAEMON], source: 'adapter' },
45
+ { words: [NO_QUESTION_TOOL], source: 'adapter' },
35
46
  { words: [END_OF_FLAGS, at.prompt] },
36
47
  ]);
37
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,3 @@
1
1
  import type { TrierarchConfiguration } from '@aeolus-fleet/common';
2
- type HarnessConfiguration = TrierarchConfiguration['harnesses'][string];
3
- /**
4
- * The flags a launch gets: the harness's own, then each option's value as the
5
- * settings picked it, or its default. Settings pick names only; the flags come
6
- * from the configuration alone.
7
- */
8
- export declare function effectiveFlags(harness: HarnessConfiguration, options: Readonly<Record<string, string>>): string[];
9
2
  /** What `config check` prints: per harness, the flags settings with no options launch with, and each option's values. */
10
3
  export declare function describeFlags(configuration: TrierarchConfiguration): string;
11
- export {};
@@ -1,15 +1,4 @@
1
- /**
2
- * The flags a launch gets: the harness's own, then each option's value as the
3
- * settings picked it, or its default. Settings pick names only; the flags come
4
- * from the configuration alone.
5
- */
6
- export function effectiveFlags(harness, options) {
7
- const picked = Object.entries(harness.options).flatMap(([name, option]) => {
8
- const value = options[name] ?? option.default;
9
- return value === undefined ? [] : (option.values[value] ?? []);
10
- });
11
- return [...harness.flags, ...picked];
12
- }
1
+ import { effectiveFlags } from '../core/effective-flags.js';
13
2
  /** What `config check` prints: per harness, the flags settings with no options launch with, and each option's values. */
14
3
  export function describeFlags(configuration) {
15
4
  return Object.entries(configuration.harnesses)
@@ -1 +1 @@
1
- {"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/adapters/flags.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAA6B,EAAE,OAAyC;IACrG,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE;QACxE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;QAC9C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,yHAAyH;AACzH,MAAM,UAAU,aAAa,CAAC,aAAqC;IACjE,OAAO,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC;SAC3C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;QACzF,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7D,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;YACzG,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/adapters/flags.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,yHAAyH;AACzH,MAAM,UAAU,aAAa,CAAC,aAAqC;IACjE,OAAO,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC;SAC3C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;QACzF,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7D,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;YACzG,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
@@ -53,6 +53,11 @@ export function createGitWorkspace(options) {
53
53
  return { folder };
54
54
  },
55
55
  isClean: async (folder) => (await git(['-C', folder, 'status', '--porcelain'])).trim() === '',
56
+ unsaved: async (folder) => {
57
+ const changes = await git(['-C', folder, 'status', '--porcelain']);
58
+ const commits = await git(['-C', folder, 'log', '--format=commit %h %s', 'HEAD', '--not', '--branches', '--tags', '--remotes']);
59
+ return [...changes.split('\n'), ...commits.split('\n')].filter((line) => line !== '');
60
+ },
56
61
  remove: async (folder) => {
57
62
  const repository = repositoryOf(folder);
58
63
  if (repository === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"git-workspace.js","sourceRoot":"","sources":["../../src/adapters/git-workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-workspace.js","sourceRoot":"","sources":["../../src/adapters/git-workspace.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { join } from 'node:path';
2
2
  import { CLAUDE_CODE_ADAPTER_FLAGS, CLAUDE_CODE_RISKY_FLAGS, claudeCodeCommandLine, createClaudeCodeHarness, WAKE_PROMPT as CLAUDE_CODE_WAKE_PROMPT } from './claude-code.js';
3
+ import { createClaudeCodeSetup } from './claude-code-setup.js';
3
4
  import { CODEX_ADAPTER_FLAGS, CODEX_RISKY_FLAGS, codexCommandLine, createCodexHarness, WAKE_PROMPT as CODEX_WAKE_PROMPT } from './codex.js';
4
5
  import { findAeolusPlugin } from './plugin.js';
5
6
  /** What the settings' first prompt and a ship's session name stand for where config check shows a command line. */
@@ -48,7 +49,7 @@ export async function createHarnesses(at) {
48
49
  }
49
50
  const plugin = await findAeolusPlugin({ homeDirectory, env, harness: name });
50
51
  plugins[name] = plugin;
51
- harnesses[name] = name === 'codex' ? createCodexHarness({ configuration, plugin, sessions }) : createClaudeCodeHarness({ configuration, plugin, sessions, projects: join(env.CLAUDE_CONFIG_DIR ?? join(homeDirectory, '.claude'), 'projects') });
52
+ harnesses[name] = name === 'codex' ? createCodexHarness({ configuration, plugin, sessions }) : createClaudeCodeHarness({ configuration, plugin, sessions, projects: join(env.CLAUDE_CONFIG_DIR ?? join(homeDirectory, '.claude'), 'projects'), setup: createClaudeCodeSetup({ homeDirectory }) });
52
53
  }
53
54
  return { harnesses, plugins };
54
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../../src/adapters/harnesses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../../src/adapters/harnesses.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@ const stateSchema = z.object({
30
30
  folder: z.string().optional(),
31
31
  hasStarted: z.boolean(),
32
32
  launchedAt: z.string().optional(),
33
+ isFinal: z.literal(true).optional(),
33
34
  wake: z.object({ waiting: z.int().nonnegative(), isPending: z.boolean() }),
34
35
  })),
35
36
  kept: z.array(z.object({ shipId: idSchema('ship'), repository: z.string(), path: z.string() })),
@@ -1 +1 @@
1
- {"version":3,"file":"json-state.js","sourceRoot":"","sources":["../../src/adapters/json-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-state.js","sourceRoot":"","sources":["../../src/adapters/json-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAuB,MAAM,kBAAkB,CAAC;AAGlF;;;;;;;GAOG;AAEH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAEhD,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,CACf,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,eAAe,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,SAAS,EAAE,wBAAwB;QACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QACzC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;QAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;QACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QACnC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;KAC3E,CAAC,CACH;IACD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/F,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1F,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;CAClD,CAAC,CAAC;AAEH,kEAAkE;AAClE,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAE/D,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO;QACL,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrB,OAAO,WAAW,CAAC;gBACrB,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC3C,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;gBACxD,OAAO,WAAW,CAAC;YACrB,CAAC;YACD,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,gHAAgH;gBAChH,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,iKAAiK,CACzK,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,KAAqB,EAAE,EAAE;YACpC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,GAAG,IAAI,MAAM,CAAC;YAChC,MAAM,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACnF,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -5,12 +5,18 @@ export interface LaunchTexts {
5
5
  readonly activity: RegExp;
6
6
  /** The refusal of a model, with the id it refused as its first group; global, so every refusal is seen. */
7
7
  readonly refused: RegExp;
8
+ /** The harness's screens a session can stop at before its first prompt runs (#403), each by its name and a text only it shows. */
9
+ readonly screens: readonly {
10
+ readonly name: string;
11
+ readonly text: RegExp;
12
+ }[];
8
13
  }
9
14
  /**
10
15
  * What the screen shows: the model refused, when a refusal names the one it
11
16
  * launched with (or any, when it launched with none, so the CLI's own
12
- * default); else activity when a tool line shows; else none. A refusal of
13
- * another id is only text, as when a ship discusses one.
17
+ * default); else activity when a tool line shows; else none, naming the
18
+ * known screen it stopped at when one shows. A refusal of another id is only
19
+ * text, as when a ship discusses one.
14
20
  */
15
21
  export declare function launchSeenWith(texts: LaunchTexts, at: {
16
22
  screen: string;
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * What the screen shows: the model refused, when a refusal names the one it
3
3
  * launched with (or any, when it launched with none, so the CLI's own
4
- * default); else activity when a tool line shows; else none. A refusal of
5
- * another id is only text, as when a ship discusses one.
4
+ * default); else activity when a tool line shows; else none, naming the
5
+ * known screen it stopped at when one shows. A refusal of another id is only
6
+ * text, as when a ship discusses one.
6
7
  */
7
8
  export function launchSeenWith(texts, at) {
8
9
  for (const [, id] of at.screen.matchAll(texts.refused)) {
@@ -10,6 +11,10 @@ export function launchSeenWith(texts, at) {
10
11
  return { kind: 'refused', model: id };
11
12
  }
12
13
  }
13
- return texts.activity.test(at.screen) ? { kind: 'active' } : { kind: 'none' };
14
+ if (texts.activity.test(at.screen)) {
15
+ return { kind: 'active' };
16
+ }
17
+ const stopped = texts.screens.find((screen) => screen.text.test(at.screen));
18
+ return stopped === undefined ? { kind: 'none' } : { kind: 'none', screen: stopped.name };
14
19
  }
15
20
  //# sourceMappingURL=launch-screen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"launch-screen.js","sourceRoot":"","sources":["../../src/adapters/launch-screen.ts"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAkB,EAAE,EAAsC;IACvF,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,IAAI,EAAE,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACpE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"launch-screen.js","sourceRoot":"","sources":["../../src/adapters/launch-screen.ts"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAkB,EAAE,EAAsC;IACvF,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,IAAI,EAAE,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACpE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AAC3F,CAAC"}
@@ -26,6 +26,8 @@ export interface ServiceStatus {
26
26
  export interface Service {
27
27
  /** Writes the service's file without loading it. */
28
28
  write(): Promise<void>;
29
+ /** Writes the service's file over an installed one, for its next start, leaving the running trierarch and its sessions alone. */
30
+ rewrite(): Promise<void>;
29
31
  /** Writes the service's file, then loads and starts it. */
30
32
  install(): Promise<void>;
31
33
  /** Stops the service and removes its file. */
@@ -69,6 +69,8 @@ ExecStart="${at.run.node}" "${at.run.script}" run
69
69
  ${variables}
70
70
  Restart=always
71
71
  RestartSec=5
72
+ # The sessions run in the tmux server the trierarch starts, in this unit's control group: a stop ends the trierarch only (#479).
73
+ KillMode=process
72
74
 
73
75
  [Install]
74
76
  WantedBy=default.target
@@ -147,6 +149,8 @@ export function createService(options) {
147
149
  };
148
150
  return {
149
151
  write,
152
+ // launchd reads the file when it loads the agent again; the trierarch's own stop and start do.
153
+ rewrite: write,
150
154
  install: async () => {
151
155
  await write();
152
156
  // Unload an earlier copy first: bootstrap refuses a loaded agent.
@@ -189,6 +193,11 @@ export function createService(options) {
189
193
  };
190
194
  return {
191
195
  write,
196
+ // A reload, not a restart: systemd stops and starts the unit as the new file says from then on.
197
+ rewrite: async () => {
198
+ await write();
199
+ await systemctl('daemon-reload');
200
+ },
192
201
  install: async () => {
193
202
  await write();
194
203
  await systemctl('daemon-reload');
@@ -222,6 +231,6 @@ export function createService(options) {
222
231
  };
223
232
  }
224
233
  const elsewhere = () => Promise.reject(new Error(`aeolus-trierarch knows launchd (macOS) and systemd (Linux), not ${platform}: run aeolus-trierarch run under your own supervisor`));
225
- return { write: elsewhere, install: elsewhere, uninstall: elsewhere, start: elsewhere, stop: elsewhere, restart: elsewhere, status: elsewhere };
234
+ return { write: elsewhere, rewrite: elsewhere, install: elsewhere, uninstall: elsewhere, start: elsewhere, stop: elsewhere, restart: elsewhere, status: elsewhere };
226
235
  }
227
236
  //# sourceMappingURL=service.js.map