@aeolus-fleet/trierarch 0.33.1 → 0.34.0

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 (134) hide show
  1. package/README.md +7 -4
  2. package/dist/adapters/claude-code-setup.d.ts +11 -0
  3. package/dist/adapters/claude-code-setup.js +60 -0
  4. package/dist/adapters/claude-code-setup.js.map +1 -1
  5. package/dist/adapters/claude-code.d.ts +21 -18
  6. package/dist/adapters/claude-code.js +46 -36
  7. package/dist/adapters/claude-code.js.map +1 -1
  8. package/dist/adapters/codex-setup.d.ts +2 -0
  9. package/dist/adapters/codex-setup.js +6 -0
  10. package/dist/adapters/codex-setup.js.map +1 -1
  11. package/dist/adapters/codex.d.ts +2 -0
  12. package/dist/adapters/codex.js +31 -3
  13. package/dist/adapters/codex.js.map +1 -1
  14. package/dist/adapters/container.d.ts +36 -15
  15. package/dist/adapters/container.js +72 -93
  16. package/dist/adapters/container.js.map +1 -1
  17. package/dist/adapters/copilot-detector.d.ts +13 -0
  18. package/dist/adapters/copilot-detector.js +62 -0
  19. package/dist/adapters/copilot-detector.js.map +1 -0
  20. package/dist/adapters/copilot.d.ts +79 -0
  21. package/dist/adapters/copilot.js +187 -0
  22. package/dist/adapters/copilot.js.map +1 -0
  23. package/dist/adapters/detectors.js +6 -0
  24. package/dist/adapters/detectors.js.map +1 -1
  25. package/dist/adapters/files.d.ts +16 -0
  26. package/dist/adapters/files.js +5 -0
  27. package/dist/adapters/files.js.map +1 -1
  28. package/dist/adapters/harnesses.d.ts +3 -2
  29. package/dist/adapters/harnesses.js +21 -9
  30. package/dist/adapters/harnesses.js.map +1 -1
  31. package/dist/adapters/hold-runtime.d.ts +19 -5
  32. package/dist/adapters/hold-runtime.js +23 -10
  33. package/dist/adapters/hold-runtime.js.map +1 -1
  34. package/dist/adapters/hold.d.ts +12 -0
  35. package/dist/adapters/hold.js +66 -31
  36. package/dist/adapters/hold.js.map +1 -1
  37. package/dist/adapters/json-state.js +4 -0
  38. package/dist/adapters/json-state.js.map +1 -1
  39. package/dist/adapters/key-files.d.ts +16 -0
  40. package/dist/adapters/key-files.js +28 -0
  41. package/dist/adapters/key-files.js.map +1 -0
  42. package/dist/adapters/key-states.d.ts +21 -0
  43. package/dist/adapters/key-states.js +43 -0
  44. package/dist/adapters/key-states.js.map +1 -0
  45. package/dist/adapters/model-logins.d.ts +21 -0
  46. package/dist/adapters/model-logins.js +48 -0
  47. package/dist/adapters/model-logins.js.map +1 -0
  48. package/dist/adapters/model-proxy.d.ts +32 -0
  49. package/dist/adapters/model-proxy.js +171 -0
  50. package/dist/adapters/model-proxy.js.map +1 -0
  51. package/dist/adapters/paths.d.ts +4 -0
  52. package/dist/adapters/paths.js +2 -0
  53. package/dist/adapters/paths.js.map +1 -1
  54. package/dist/adapters/plugin.d.ts +11 -8
  55. package/dist/adapters/plugin.js +47 -13
  56. package/dist/adapters/plugin.js.map +1 -1
  57. package/dist/adapters/proxy-runtime.d.ts +31 -0
  58. package/dist/adapters/proxy-runtime.js +100 -0
  59. package/dist/adapters/proxy-runtime.js.map +1 -0
  60. package/dist/adapters/proxy-tokens.d.ts +25 -0
  61. package/dist/adapters/proxy-tokens.js +67 -0
  62. package/dist/adapters/proxy-tokens.js.map +1 -0
  63. package/dist/adapters/runtime-adapters.d.ts +11 -6
  64. package/dist/adapters/runtime-adapters.js +25 -11
  65. package/dist/adapters/runtime-adapters.js.map +1 -1
  66. package/dist/adapters/service.d.ts +1 -1
  67. package/dist/adapters/service.js +2 -2
  68. package/dist/adapters/service.js.map +1 -1
  69. package/dist/adapters/trust.d.ts +2 -1
  70. package/dist/adapters/trust.js +4 -1
  71. package/dist/adapters/trust.js.map +1 -1
  72. package/dist/adapters/vendor-answers.d.ts +6 -0
  73. package/dist/adapters/vendor-answers.js +38 -0
  74. package/dist/adapters/vendor-answers.js.map +1 -0
  75. package/dist/adapters/vendor-key-check.d.ts +23 -0
  76. package/dist/adapters/vendor-key-check.js +36 -0
  77. package/dist/adapters/vendor-key-check.js.map +1 -0
  78. package/dist/bin/aeolus-trierarch.js +7 -2
  79. package/dist/bin/aeolus-trierarch.js.map +1 -1
  80. package/dist/cli/add.d.ts +2 -2
  81. package/dist/cli/config-check.js +1 -1
  82. package/dist/cli/config-check.js.map +1 -1
  83. package/dist/cli/hold.js +13 -4
  84. package/dist/cli/hold.js.map +1 -1
  85. package/dist/cli/login.d.ts +72 -0
  86. package/dist/cli/login.js +114 -0
  87. package/dist/cli/login.js.map +1 -0
  88. package/dist/cli/main.js +85 -5
  89. package/dist/cli/main.js.map +1 -1
  90. package/dist/cli/proxy.d.ts +2 -0
  91. package/dist/cli/proxy.js +58 -0
  92. package/dist/cli/proxy.js.map +1 -0
  93. package/dist/cli/run.js +30 -4
  94. package/dist/cli/run.js.map +1 -1
  95. package/dist/cli/upgrade.d.ts +2 -2
  96. package/dist/cli/upgrade.js +2 -2
  97. package/dist/core/argo-reports.d.ts +10 -0
  98. package/dist/core/argo-reports.js +17 -0
  99. package/dist/core/argo-reports.js.map +1 -1
  100. package/dist/core/check-session-runtime.js +3 -1
  101. package/dist/core/check-session-runtime.js.map +1 -1
  102. package/dist/core/check-settings.d.ts +2 -0
  103. package/dist/core/check-settings.js +6 -1
  104. package/dist/core/check-settings.js.map +1 -1
  105. package/dist/core/entry.d.ts +12 -0
  106. package/dist/core/entry.js.map +1 -1
  107. package/dist/core/login.d.ts +28 -0
  108. package/dist/core/login.js +14 -0
  109. package/dist/core/login.js.map +1 -0
  110. package/dist/core/ports.d.ts +33 -1
  111. package/dist/core/reconciler.d.ts +5 -0
  112. package/dist/core/reconciler.js +12 -7
  113. package/dist/core/reconciler.js.map +1 -1
  114. package/dist/core/report-self.js +9 -3
  115. package/dist/core/report-self.js.map +1 -1
  116. package/dist/core/run-pass.d.ts +6 -1
  117. package/dist/core/run-pass.js +81 -13
  118. package/dist/core/run-pass.js.map +1 -1
  119. package/package.json +1 -2
  120. package/dist/adapters/claude-code-screen.d.ts +0 -1
  121. package/dist/adapters/claude-code-screen.js +0 -22
  122. package/dist/adapters/claude-code-screen.js.map +0 -1
  123. package/dist/adapters/held-command.d.ts +0 -13
  124. package/dist/adapters/held-command.js +0 -16
  125. package/dist/adapters/held-command.js.map +0 -1
  126. package/dist/adapters/launch-screen.d.ts +0 -14
  127. package/dist/adapters/launch-screen.js +0 -5
  128. package/dist/adapters/launch-screen.js.map +0 -1
  129. package/dist/adapters/stop-turn.d.ts +0 -13
  130. package/dist/adapters/stop-turn.js +0 -26
  131. package/dist/adapters/stop-turn.js.map +0 -1
  132. package/dist/adapters/tmux.d.ts +0 -13
  133. package/dist/adapters/tmux.js +0 -33
  134. package/dist/adapters/tmux.js.map +0 -1
@@ -1,10 +1,11 @@
1
1
  import { spawn } from 'node:child_process';
2
- import { readdir, readFile, rm, stat } from 'node:fs/promises';
2
+ import { mkdir, readdir, readFile, rm, stat } from 'node:fs/promises';
3
3
  import { uptime } from 'node:os';
4
4
  import { setTimeout as wait } from 'node:timers/promises';
5
5
  import { idSchema } from '@aeolus-fleet/common';
6
6
  import { INTERRUPT_WAIT_MS } from './hold.js';
7
7
  import { callHold, holdFilesOf } from './hold-protocol.js';
8
+ import { writeProxyToken } from './proxy-tokens.js';
8
9
  /** How long a hold has to answer a call other than interrupt. */
9
10
  const CALL_TIMEOUT_MS = 2000;
10
11
  /** How long a hold has to answer its first call after its start. */
@@ -17,9 +18,9 @@ const STOP_WAIT_MS = 5000;
17
18
  const EVENT_LINES = 200;
18
19
  /** Runs the command in the background and returns at once: its process is then nobody's child, so no session runs under the trierarch's own process. */
19
20
  const DETACHED = '"$@" < /dev/null > /dev/null 2>&1 &';
20
- /** What a session's start goes through: a systemd scope of its own under a systemd unit, which sets INVOCATION_ID, so a restart or upgrade of the service ends no session (#479, #537). */
21
+ /** What a session's start goes through: a systemd scope of its own under a systemd unit, which sets INVOCATION_ID, so a restart or upgrade of the service ends no session (#479, #537). It expands no variable in the command: systemd 259 would turn a $$ of it into $. */
21
22
  export function sessionsLaunch(at) {
22
- return at.platform === 'linux' && at.env.INVOCATION_ID !== undefined ? ['systemd-run', '--user', '--scope', '--quiet', '--collect', '--'] : [];
23
+ return at.platform === 'linux' && at.env.INVOCATION_ID !== undefined ? ['systemd-run', '--user', '--scope', '--quiet', '--collect', '--expand-environment=no', '--'] : [];
23
24
  }
24
25
  /**
25
26
  * The host session runtime (headless H4, H8, H9): one hold per ship, the
@@ -33,8 +34,12 @@ export function sessionsLaunch(at) {
33
34
  * A hold that answers runs; one that started since the machine did and no
34
35
  * longer answers has exited, kept so the exit is seen with its events; one
35
36
  * from before the machine started is gone. A hold another version started is
36
- * listed as such (H19), as is a session an older trierarch started in tmux,
37
- * which a start stops before the ship's hold starts.
37
+ * listed as such (H19). What runs beside the holds, as a container runtime's
38
+ * containers, is stopped with its ship's hold, and listed as of another
39
+ * version for a ship no hold holds: an older trierarch started it.
40
+ *
41
+ * A hold runs the session's command itself, unless the runtime holds it
42
+ * otherwise: a container runtime's hold runs the runtime's run of it (H18).
38
43
  */
39
44
  export function createHoldRuntime(options) {
40
45
  const { sessions, version } = options;
@@ -67,7 +72,7 @@ export function createHoldRuntime(options) {
67
72
  return { shipId, status: 'running', ...(answer.state.version !== version && { isOtherVersion: true }) };
68
73
  };
69
74
  const stop = async (shipId) => {
70
- await options.legacy?.stop(shipId);
75
+ await options.beside?.stop(shipId);
71
76
  const pid = await runningPid(shipId);
72
77
  if (pid !== undefined) {
73
78
  process.kill(pid, 'SIGTERM');
@@ -97,14 +102,22 @@ export function createHoldRuntime(options) {
97
102
  });
98
103
  const held = (await Promise.all(shipIds.map(observed))).flatMap((session) => (session === undefined ? [] : [session]));
99
104
  const heldIds = new Set(held.map((session) => session.shipId));
100
- const legacy = ((await options.legacy?.list()) ?? []).filter((session) => !heldIds.has(session.shipId)).map((session) => ({ ...session, isOtherVersion: true }));
101
- return [...held, ...legacy];
105
+ const beside = ((await options.beside?.list()) ?? []).filter((session) => !heldIds.has(session.shipId)).map((session) => ({ ...session, isOtherVersion: true }));
106
+ return [...held, ...beside];
102
107
  },
103
108
  stop,
104
- start: async ({ shipId, folder, command, harness, env = {} }) => {
109
+ start: async (session) => {
110
+ const { shipId, folder, harness, proxyToken } = session;
105
111
  await stop(shipId);
106
112
  const files = filesOf(shipId);
107
- const hold = [...options.program, 'hold', shipId, '--sessions', sessions, '--folder', folder, '--harness', harness, ...Object.entries(env).flatMap(([variable, value]) => ['--env', `${variable}=${value}`]), '--', ...command];
113
+ // The token goes in the session's folder, which only its user reads, and the hold reads it there: a command line is anyone's to see.
114
+ if (proxyToken !== undefined) {
115
+ await mkdir(files.folder, { recursive: true, mode: 0o700 });
116
+ await writeProxyToken(files.folder, proxyToken);
117
+ }
118
+ const tokenVariable = proxyToken === undefined ? [] : ['--proxy-token-variable', proxyToken.variable];
119
+ const { command, env } = options.heldAs === undefined ? { command: session.command, env: session.env ?? {} } : await options.heldAs(session, files);
120
+ const hold = [...options.program, 'hold', shipId, '--sessions', sessions, '--folder', folder, '--harness', harness, ...tokenVariable, ...Object.entries(env).flatMap(([variable, value]) => ['--env', `${variable}=${value}`]), '--', ...command];
108
121
  const [program = 'sh', ...args] = [...(options.launch ?? []), 'sh', '-c', DETACHED, 'sh', ...hold];
109
122
  const starter = spawn(program, args, { stdio: 'ignore', detached: true });
110
123
  await new Promise((resolve, reject) => {
@@ -1 +1 @@
1
- {"version":3,"file":"hold-runtime.js","sourceRoot":"","sources":["../../src/adapters/hold-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hold-runtime.js","sourceRoot":"","sources":["../../src/adapters/hold-runtime.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,18 @@ import type { HoldFiles } from './hold-protocol.js';
22
22
  * thread the first named, started once the last turn's process has ended.
23
23
  * Between turns no Codex process runs and the hold stays; its turn is stopped
24
24
  * with SIGINT, which ends the process (H12).
25
+ *
26
+ * Copilot runs one `copilot -p` per turn in the same way (CC4), each line the
27
+ * prompt of one resuming the session the last turn's result named. The
28
+ * `copilot` on the PATH is a launcher that runs the native Copilot as its
29
+ * child: a turn ends when the native process closed its output, not when the
30
+ * launcher exits, and its turn is stopped with SIGINT to its whole process
31
+ * group, since a SIGINT to the launcher alone ends the launcher and leaves
32
+ * the native process running the turn to its end. What Copilot writes on
33
+ * stderr is kept among the events, as it says a refused model or login
34
+ * there before any event. A turn that ends with a failing exit status ends
35
+ * the hold with it: the turn died, and the trierarch starts the session
36
+ * again (design harnesses/cursor-copilot, the died turn).
25
37
  */
26
38
  /** The longest the hold waits for an interrupted turn to end before the forced line goes in anyway (timings-and-limits.md). */
27
39
  export declare const INTERRUPT_WAIT_MS = 10000;
@@ -4,6 +4,7 @@ import { mkdir, rm, writeFile } from 'node:fs/promises';
4
4
  import { createServer } from 'node:net';
5
5
  import { createInterface } from 'node:readline';
6
6
  import { codexThreadStartedSchema, codexTurnCommand } from './codex.js';
7
+ import { copilotSessionIdOf, copilotStderrEvent, copilotTurnCommand } from './copilot.js';
7
8
  import { holdRequestSchema, parsedLine, REFUSED } from './hold-protocol.js';
8
9
  /**
9
10
  * The hold (headless H8 to H12): a small process per session, started outside
@@ -27,6 +28,18 @@ import { holdRequestSchema, parsedLine, REFUSED } from './hold-protocol.js';
27
28
  * thread the first named, started once the last turn's process has ended.
28
29
  * Between turns no Codex process runs and the hold stays; its turn is stopped
29
30
  * with SIGINT, which ends the process (H12).
31
+ *
32
+ * Copilot runs one `copilot -p` per turn in the same way (CC4), each line the
33
+ * prompt of one resuming the session the last turn's result named. The
34
+ * `copilot` on the PATH is a launcher that runs the native Copilot as its
35
+ * child: a turn ends when the native process closed its output, not when the
36
+ * launcher exits, and its turn is stopped with SIGINT to its whole process
37
+ * group, since a SIGINT to the launcher alone ends the launcher and leaves
38
+ * the native process running the turn to its end. What Copilot writes on
39
+ * stderr is kept among the events, as it says a refused model or login
40
+ * there before any event. A turn that ends with a failing exit status ends
41
+ * the hold with it: the turn died, and the trierarch starts the session
42
+ * again (design harnesses/cursor-copilot, the died turn).
30
43
  */
31
44
  /** The longest the hold waits for an interrupted turn to end before the forced line goes in anyway (timings-and-limits.md). */
32
45
  export const INTERRUPT_WAIT_MS = 10_000;
@@ -71,6 +84,9 @@ export async function runHold(options) {
71
84
  let isRestarting = false;
72
85
  let isStopping = false;
73
86
  const isCodex = harness === 'codex';
87
+ const isCopilot = harness === 'copilot';
88
+ /** Codex and Copilot run one process per turn, with no process between turns (H11, CC4). */
89
+ const isTurnPerProcess = isCodex || isCopilot;
74
90
  let controls = 0;
75
91
  const waiters = new Set();
76
92
  const tell = (event) => {
@@ -94,7 +110,7 @@ export async function runHold(options) {
94
110
  return;
95
111
  }
96
112
  const type = Reflect.get(event, 'type');
97
- const id = isCodex ? codexThreadStartedSchema.safeParse(event).data?.thread_id : sessionIdOf(event);
113
+ const id = isCodex ? codexThreadStartedSchema.safeParse(event).data?.thread_id : isCopilot ? copilotSessionIdOf(line) : sessionIdOf(event);
98
114
  if (id !== undefined && id !== sessionId) {
99
115
  sessionId = id;
100
116
  void writeFile(files.sessionId, id);
@@ -113,45 +129,60 @@ export async function runHold(options) {
113
129
  const guard = spawn(process.execPath, ['-e', GUARD], { env: {}, stdio: ['pipe', 'ignore', 'ignore'], detached: true });
114
130
  guard.stdin.on('error', () => undefined);
115
131
  guard.unref();
116
- /** Kills the harness's process group: the harness and every process it started. */
117
- const killGroup = (running) => {
132
+ /** Sends the signal to the harness's process group: the harness and every process it started. */
133
+ const signalGroup = (running, signal) => {
118
134
  try {
119
- process.kill(-(running.pid ?? 0), 'SIGKILL');
135
+ process.kill(-(running.pid ?? 0), signal);
120
136
  }
121
137
  catch {
122
138
  // Its group is gone already.
123
139
  }
124
140
  };
141
+ const killGroup = (running) => {
142
+ signalGroup(running, 'SIGKILL');
143
+ };
144
+ const spawnHarness = (program, args) => {
145
+ // A process group of its own: a stop ends the harness and every process it started.
146
+ const at = { cwd: folder, env: { ...environment }, detached: true };
147
+ return isCopilot ? spawn(program, args, { ...at, stdio: ['pipe', 'pipe', 'pipe'] }) : spawn(program, args, { ...at, stdio: ['pipe', 'pipe', 'ignore'] });
148
+ };
125
149
  const startHarness = (command) => {
126
150
  const [program = '', ...args] = command;
127
- // A process group of its own: a stop ends the harness and every process it started.
128
- const started = spawn(program, args, { cwd: folder, env: { ...environment }, stdio: ['pipe', 'pipe', 'ignore'], detached: true });
151
+ const started = spawnHarness(program, args);
129
152
  if (started.pid !== undefined) {
130
153
  guard.stdin.write(`${String(started.pid)}\n`);
131
154
  }
132
155
  started.stdin.on('error', () => undefined);
133
- // codex exec reads a stdin that is no terminal to its end before its turn: it gets none.
134
- if (isCodex) {
156
+ // codex exec reads a stdin that is no terminal to its end before its turn, and copilot -p may take it as its prompt: neither gets one.
157
+ if (isTurnPerProcess) {
135
158
  started.stdin.end();
136
159
  }
137
160
  createInterface({ input: started.stdout }).on('line', onLine);
161
+ if (started.stderr !== null) {
162
+ createInterface({ input: started.stderr }).on('line', (line) => {
163
+ onLine(copilotStderrEvent(line));
164
+ });
165
+ }
138
166
  started.on('error', () => {
139
167
  resolveEnd(1);
140
168
  });
141
- started.on('exit', (code) => {
142
- if (isCodex && child === started) {
169
+ // Copilot's turn ends once its native process closed the output it inherited from the launcher, which may exit first.
170
+ started.on(isCopilot ? 'close' : 'exit', (code) => {
171
+ if (isTurnPerProcess && child === started) {
143
172
  isBusy = false;
144
173
  child = undefined;
145
174
  }
146
175
  tell({ type: 'exit' });
147
- if (isStopping || (!isRestarting && !isCodex)) {
176
+ // A Copilot turn that failed died: its exit status ends the hold. One the hold stopped ends by its signal, with no status.
177
+ const isDiedTurn = isCopilot && code !== null && code !== 0;
178
+ if (isStopping || isDiedTurn || (!isRestarting && !isTurnPerProcess)) {
148
179
  resolveEnd(code ?? 1);
149
180
  }
150
181
  });
151
182
  return started;
152
183
  };
153
184
  let child = startHarness(options.command);
154
- if (isCodex) {
185
+ if (isTurnPerProcess) {
155
186
  isBusy = true;
156
187
  }
157
188
  /** Waits until the waiter is told what it waits for, or the time is up. */
@@ -176,14 +207,18 @@ export async function runHold(options) {
176
207
  const [program = '', ...flags] = options.command.filter((word) => word !== CONTINUE);
177
208
  return sessionId === undefined ? [program, ...flags, CONTINUE] : [program, ...flags, RESUME, sessionId];
178
209
  };
179
- /** Ends Codex's running turn: SIGINT, then its process group killed when it has not ended within the wait (H12). */
180
- const endCodexTurn = async (signal) => {
210
+ /** Ends the running turn of a harness with a process per turn: SIGINT, then its process group killed when it has not ended within the wait (H12). */
211
+ const endTurn = async (signal) => {
181
212
  const running = child;
182
213
  if (running === undefined) {
183
214
  return;
184
215
  }
185
216
  const exited = waitFor((event) => event.type === 'exit', INTERRUPT_WAIT_MS);
186
- if (signal === 'SIGINT') {
217
+ if (signal === 'SIGINT' && isCopilot) {
218
+ // To the native process too: the launcher alone would end and leave the turn running.
219
+ signalGroup(running, 'SIGINT');
220
+ }
221
+ else if (signal === 'SIGINT') {
187
222
  running.kill('SIGINT');
188
223
  }
189
224
  else {
@@ -194,35 +229,35 @@ export async function runHold(options) {
194
229
  await waitFor((event) => event.type === 'exit', INTERRUPT_WAIT_MS);
195
230
  }
196
231
  };
197
- /** Codex's next turn, once the last turn's process has ended: a codex exec resume of the session's thread (H11). */
198
- const startCodexTurn = async (line) => {
199
- if (sessionId === undefined) {
200
- return { isOk: false, error: 'Codex named no thread to resume yet' };
201
- }
232
+ /** The next turn, once the last turn's process has ended: a codex exec resume of the session's thread (H11), or a copilot -p resuming its session (CC4). */
233
+ const startTurn = async (line) => {
202
234
  if (child !== undefined) {
203
235
  const running = child;
204
236
  if ((await waitFor((event) => event.type === 'exit', INTERRUPT_WAIT_MS)) === undefined && child === running) {
205
- await endCodexTurn('SIGKILL');
237
+ await endTurn('SIGKILL');
206
238
  }
207
239
  }
240
+ if (sessionId === undefined) {
241
+ return { isOk: false, error: isCopilot ? 'Copilot named no session to resume yet' : 'Codex named no thread to resume yet' };
242
+ }
208
243
  isBusy = true;
209
- child = startHarness(codexTurnCommand({ start: options.command, threadId: sessionId, line }));
244
+ child = startHarness(isCopilot ? copilotTurnCommand({ start: options.command, sessionId, line }) : codexTurnCommand({ start: options.command, threadId: sessionId, line }));
210
245
  return { isOk: true };
211
246
  };
212
- /** The lines in the order they came: one waits for the one before, so two never start a codex exec resume on one thread. */
213
- let lastCodexSend = Promise.resolve();
214
- const sendCodex = (line) => {
215
- const sent = lastCodexSend.then(() => startCodexTurn(line));
247
+ /** The lines in the order they came: one waits for the one before, so two never start a turn on one session. */
248
+ let lastTurnSend = Promise.resolve();
249
+ const sendTurn = (line) => {
250
+ const sent = lastTurnSend.then(() => startTurn(line));
216
251
  // A failed send must not hold back the lines after it.
217
- lastCodexSend = sent.catch(() => undefined);
252
+ lastTurnSend = sent.catch(() => undefined);
218
253
  return sent;
219
254
  };
220
255
  const interrupt = async () => {
221
256
  if (!isBusy) {
222
257
  return;
223
258
  }
224
- if (isCodex) {
225
- await endCodexTurn('SIGINT');
259
+ if (isTurnPerProcess) {
260
+ await endTurn('SIGINT');
226
261
  return;
227
262
  }
228
263
  const current = child;
@@ -256,8 +291,8 @@ export async function runHold(options) {
256
291
  const answer = async (request) => {
257
292
  switch (request.call) {
258
293
  case 'send':
259
- if (isCodex) {
260
- return sendCodex(request.line);
294
+ if (isTurnPerProcess) {
295
+ return sendTurn(request.line);
261
296
  }
262
297
  isBusy = true;
263
298
  child?.stdin.write(`${request.line}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"hold.js","sourceRoot":"","sources":["../../src/adapters/hold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hold.js","sourceRoot":"","sources":["../../src/adapters/hold.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { dirname, join } from 'node:path';
3
3
  import { idSchema, trierarchWorkspaceSchema } from '@aeolus-fleet/common';
4
4
  import { z } from 'zod';
5
5
  import { EMPTY_STATE, ENTRY_STATES } from '../core/entry.js';
6
+ import { KEY_STATES, LOGINS } from '../core/login.js';
6
7
  import { LOW_RESOURCES } from '../core/machine-load.js';
7
8
  /**
8
9
  * The state store: `~/.aeolus/trierarch/state.json`, written whole and
@@ -33,6 +34,7 @@ const stateSchema = z.object({
33
34
  hasStarted: z.boolean(),
34
35
  launchedAt: z.string().optional(),
35
36
  launchId: z.string().optional(),
37
+ login: z.enum(LOGINS).optional(),
36
38
  isReleasedElsewhere: z.literal(true).optional(),
37
39
  crewFailures: z.int().min(1).optional(),
38
40
  isIdentityGone: z.literal(true).optional(),
@@ -42,7 +44,9 @@ const stateSchema = z.object({
42
44
  refused: z.record(z.string(), z.int().positive()),
43
45
  lowResources: z.array(z.enum(LOW_RESOURCES)).optional(),
44
46
  missingPlugins: z.array(z.string()).optional(),
47
+ notOffered: z.array(z.object({ harness: z.string(), reason: z.string() })).optional(),
45
48
  passFailure: z.object({ reason: z.string(), since: z.string() }).optional(),
49
+ keysTold: z.record(z.string(), z.enum(KEY_STATES)).optional(),
46
50
  failedStarts: z
47
51
  .object({
48
52
  shipIds: z.array(idSchema('ship')),
@@ -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":"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"}
@@ -0,0 +1,16 @@
1
+ import type { PluginHarness } from './plugin.js';
2
+ /**
3
+ * Each harness's API key, one file per harness in `~/.aeolus/trierarch/keys/`
4
+ * (api keys K5): mode 600 in a folder of mode 700. Only `aeolus-trierarch
5
+ * login` writes it and only the model proxy reads it (K7), with readKey
6
+ * below: the key never comes back out of here into the trierarch.
7
+ */
8
+ export interface KeyFiles {
9
+ has(harness: PluginHarness): Promise<boolean>;
10
+ write(harness: PluginHarness, key: string): Promise<void>;
11
+ /** Whether there was a key to remove. */
12
+ remove(harness: PluginHarness): Promise<boolean>;
13
+ }
14
+ export declare function createKeyFiles(folder: string): KeyFiles;
15
+ /** The harness's key, for the model proxy alone; none when it holds no key. */
16
+ export declare function readKey(folder: string, harness: PluginHarness): Promise<string | undefined>;
@@ -0,0 +1,28 @@
1
+ import { chmod, mkdir, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ export function createKeyFiles(folder) {
4
+ const fileOf = (harness) => join(folder, harness);
5
+ return {
6
+ has: async (harness) => stat(fileOf(harness)).then(() => true, () => false),
7
+ write: async (harness, key) => {
8
+ await mkdir(folder, { recursive: true, mode: 0o700 });
9
+ await chmod(folder, 0o700);
10
+ // Written beside it first, so the proxy never reads half a key.
11
+ const next = `${fileOf(harness)}.next`;
12
+ await writeFile(next, key, { mode: 0o600 });
13
+ await chmod(next, 0o600);
14
+ await rename(next, fileOf(harness));
15
+ },
16
+ remove: async (harness) => {
17
+ const wasThere = await stat(fileOf(harness)).then(() => true, () => false);
18
+ await rm(fileOf(harness), { force: true });
19
+ return wasThere;
20
+ },
21
+ };
22
+ }
23
+ /** The harness's key, for the model proxy alone; none when it holds no key. */
24
+ export async function readKey(folder, harness) {
25
+ const key = (await readFile(join(folder, harness), 'utf8').catch(() => '')).trim();
26
+ return key === '' ? undefined : key;
27
+ }
28
+ //# sourceMappingURL=key-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-files.js","sourceRoot":"","sources":["../../src/adapters/key-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAiBjC,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,MAAM,GAAG,CAAC,OAAsB,EAAU,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzE,OAAO;QACL,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CACrB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACxB,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,KAAK,CACZ;QACH,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;YAC5B,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACtD,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3B,gEAAgE;YAChE,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;YACvC,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACzB,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC/C,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,KAAK,CACZ,CAAC;YACF,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,OAAsB;IAClE,MAAM,GAAG,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnF,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AACtC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { KeyStateAt } from '../core/login.js';
2
+ import type { PluginHarness } from './plugin.js';
3
+ /**
4
+ * Each harness's key state (api keys K8, K9): the model proxy records what
5
+ * its vendor's answers say of the key, and the trierarch reads it. A state is
6
+ * kept for the key file it was said of, by the file's identity, never its
7
+ * content: a new key, which `login` writes as a new file, is ready again
8
+ * (K10), and no key is none.
9
+ */
10
+ export interface KeyStates {
11
+ stateOf(harness: PluginHarness): Promise<KeyStateAt>;
12
+ /** Keeps what the vendor's answer said of the harness's key now; a state it already has keeps its time, and a refused key stays refused until a new key. */
13
+ record(harness: PluginHarness, said: {
14
+ state: 'ready' | 'refused' | 'outOfCredit';
15
+ at: Date;
16
+ }): Promise<void>;
17
+ }
18
+ export declare function createKeyStates(at: {
19
+ keys: string;
20
+ file: string;
21
+ }): KeyStates;
@@ -0,0 +1,43 @@
1
+ import { mkdir, readFile, rename, stat, writeFile } from 'node:fs/promises';
2
+ import { dirname, join } from 'node:path';
3
+ import { z } from 'zod';
4
+ import { parsedLine } from './hold-protocol.js';
5
+ const recordedSchema = z.record(z.string(), z.object({ state: z.enum(['refused', 'outOfCredit']), at: z.string(), keyFile: z.object({ ino: z.number(), mtimeMs: z.number() }) }));
6
+ function isSameFile(left, right) {
7
+ return left.ino === right.ino && left.mtimeMs === right.mtimeMs;
8
+ }
9
+ export function createKeyStates(at) {
10
+ const keyFileOf = async (harness) => {
11
+ const found = await stat(join(at.keys, harness)).catch(() => undefined);
12
+ return found === undefined ? undefined : { ino: found.ino, mtimeMs: found.mtimeMs };
13
+ };
14
+ const recorded = async () => recordedSchema.safeParse(parsedLine(await readFile(at.file, 'utf8').catch(() => ''))).data ?? {};
15
+ return {
16
+ stateOf: async (harness) => {
17
+ const keyFile = await keyFileOf(harness);
18
+ if (keyFile === undefined) {
19
+ return { state: 'none' };
20
+ }
21
+ const said = (await recorded())[harness];
22
+ return said !== undefined && isSameFile(said.keyFile, keyFile) ? { state: said.state, at: said.at } : { state: 'ready' };
23
+ },
24
+ record: async (harness, said) => {
25
+ const keyFile = await keyFileOf(harness);
26
+ const all = await recorded();
27
+ const before = all[harness];
28
+ // A refused key leaves refused only as a new key login writes (K10), never by a later answer for the same key.
29
+ const isStillRefused = keyFile !== undefined && before?.state === 'refused' && isSameFile(before.keyFile, keyFile);
30
+ const isUnchanged = isStillRefused || (said.state === 'ready' ? before === undefined : keyFile === undefined || (before?.state === said.state && isSameFile(before.keyFile, keyFile)));
31
+ if (isUnchanged) {
32
+ return;
33
+ }
34
+ const others = Object.fromEntries(Object.entries(all).filter(([name]) => name !== harness));
35
+ const next = said.state === 'ready' || keyFile === undefined ? others : { ...others, [harness]: { state: said.state, at: said.at.toISOString(), keyFile } };
36
+ await mkdir(dirname(at.file), { recursive: true, mode: 0o700 });
37
+ const temporary = `${at.file}.next`;
38
+ await writeFile(temporary, JSON.stringify(next));
39
+ await rename(temporary, at.file);
40
+ },
41
+ };
42
+ }
43
+ //# sourceMappingURL=key-states.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-states.js","sourceRoot":"","sources":["../../src/adapters/key-states.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ModelLoginsPort } from '../core/ports.js';
2
+ import type { CodexSetup } from './codex-setup.js';
3
+ import type { KeyStates } from './key-states.js';
4
+ /**
5
+ * Whether a session can start on its login now (api keys K9): on an API key,
6
+ * only once its harness holds one, so a session never starts to be refused by
7
+ * the proxy, nor on its subscription instead (K2). On the subscription,
8
+ * only when nothing the harness reads itself would put a key in reach (K6).
9
+ */
10
+ export declare function createModelLogins(at: {
11
+ /** What the model proxy recorded of each key (api keys K8). */
12
+ keyStates: Pick<KeyStates, 'stateOf'>;
13
+ /** What in Claude Code's settings would give a session with the options in the folder a key, named; see ClaudeCodeSetup.keyInReach. */
14
+ claudeCode: {
15
+ keyInReach(at: {
16
+ options: Readonly<Record<string, string>>;
17
+ folder?: string;
18
+ }): Promise<string | undefined>;
19
+ };
20
+ codex: Pick<CodexSetup, 'loginKind'>;
21
+ }): ModelLoginsPort;