@aeolus-fleet/trierarch 0.33.1 → 0.35.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 (164) 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-usage.d.ts +2 -0
  6. package/dist/adapters/claude-code-usage.js +16 -12
  7. package/dist/adapters/claude-code-usage.js.map +1 -1
  8. package/dist/adapters/claude-code.d.ts +21 -18
  9. package/dist/adapters/claude-code.js +46 -36
  10. package/dist/adapters/claude-code.js.map +1 -1
  11. package/dist/adapters/clone-workspace.js +4 -0
  12. package/dist/adapters/clone-workspace.js.map +1 -1
  13. package/dist/adapters/codex-setup.d.ts +2 -0
  14. package/dist/adapters/codex-setup.js +6 -0
  15. package/dist/adapters/codex-setup.js.map +1 -1
  16. package/dist/adapters/codex-usage.d.ts +2 -0
  17. package/dist/adapters/codex-usage.js +16 -11
  18. package/dist/adapters/codex-usage.js.map +1 -1
  19. package/dist/adapters/codex.d.ts +2 -0
  20. package/dist/adapters/codex.js +31 -3
  21. package/dist/adapters/codex.js.map +1 -1
  22. package/dist/adapters/container.d.ts +36 -15
  23. package/dist/adapters/container.js +72 -93
  24. package/dist/adapters/container.js.map +1 -1
  25. package/dist/adapters/copilot-detector.d.ts +13 -0
  26. package/dist/adapters/copilot-detector.js +62 -0
  27. package/dist/adapters/copilot-detector.js.map +1 -0
  28. package/dist/adapters/copilot.d.ts +79 -0
  29. package/dist/adapters/copilot.js +187 -0
  30. package/dist/adapters/copilot.js.map +1 -0
  31. package/dist/adapters/core-version.d.ts +1 -1
  32. package/dist/adapters/core-version.js +1 -1
  33. package/dist/adapters/detectors.js +6 -0
  34. package/dist/adapters/detectors.js.map +1 -1
  35. package/dist/adapters/files.d.ts +16 -0
  36. package/dist/adapters/files.js +5 -0
  37. package/dist/adapters/files.js.map +1 -1
  38. package/dist/adapters/harnesses.d.ts +3 -2
  39. package/dist/adapters/harnesses.js +21 -9
  40. package/dist/adapters/harnesses.js.map +1 -1
  41. package/dist/adapters/hold-runtime.d.ts +19 -5
  42. package/dist/adapters/hold-runtime.js +23 -10
  43. package/dist/adapters/hold-runtime.js.map +1 -1
  44. package/dist/adapters/hold.d.ts +12 -0
  45. package/dist/adapters/hold.js +66 -31
  46. package/dist/adapters/hold.js.map +1 -1
  47. package/dist/adapters/json-state.js +5 -0
  48. package/dist/adapters/json-state.js.map +1 -1
  49. package/dist/adapters/key-files.d.ts +16 -0
  50. package/dist/adapters/key-files.js +28 -0
  51. package/dist/adapters/key-files.js.map +1 -0
  52. package/dist/adapters/key-states.d.ts +21 -0
  53. package/dist/adapters/key-states.js +43 -0
  54. package/dist/adapters/key-states.js.map +1 -0
  55. package/dist/adapters/model-logins.d.ts +21 -0
  56. package/dist/adapters/model-logins.js +48 -0
  57. package/dist/adapters/model-logins.js.map +1 -0
  58. package/dist/adapters/model-proxy.d.ts +32 -0
  59. package/dist/adapters/model-proxy.js +171 -0
  60. package/dist/adapters/model-proxy.js.map +1 -0
  61. package/dist/adapters/paths.d.ts +4 -0
  62. package/dist/adapters/paths.js +2 -0
  63. package/dist/adapters/paths.js.map +1 -1
  64. package/dist/adapters/plugin.d.ts +11 -8
  65. package/dist/adapters/plugin.js +47 -13
  66. package/dist/adapters/plugin.js.map +1 -1
  67. package/dist/adapters/proxy-runtime.d.ts +31 -0
  68. package/dist/adapters/proxy-runtime.js +100 -0
  69. package/dist/adapters/proxy-runtime.js.map +1 -0
  70. package/dist/adapters/proxy-tokens.d.ts +25 -0
  71. package/dist/adapters/proxy-tokens.js +67 -0
  72. package/dist/adapters/proxy-tokens.js.map +1 -0
  73. package/dist/adapters/rest-fleet.js +3 -5
  74. package/dist/adapters/rest-fleet.js.map +1 -1
  75. package/dist/adapters/runtime-adapters.d.ts +11 -6
  76. package/dist/adapters/runtime-adapters.js +25 -11
  77. package/dist/adapters/runtime-adapters.js.map +1 -1
  78. package/dist/adapters/service.d.ts +3 -1
  79. package/dist/adapters/service.js +6 -2
  80. package/dist/adapters/service.js.map +1 -1
  81. package/dist/adapters/ship-sockets.d.ts +1 -1
  82. package/dist/adapters/ship-sockets.js +2 -2
  83. package/dist/adapters/ship-sockets.js.map +1 -1
  84. package/dist/adapters/tokens-per-login.d.ts +8 -0
  85. package/dist/adapters/tokens-per-login.js +15 -0
  86. package/dist/adapters/tokens-per-login.js.map +1 -0
  87. package/dist/adapters/trust.d.ts +2 -1
  88. package/dist/adapters/trust.js +4 -1
  89. package/dist/adapters/trust.js.map +1 -1
  90. package/dist/adapters/usage.d.ts +2 -0
  91. package/dist/adapters/usage.js +1 -1
  92. package/dist/adapters/usage.js.map +1 -1
  93. package/dist/adapters/vendor-answers.d.ts +6 -0
  94. package/dist/adapters/vendor-answers.js +38 -0
  95. package/dist/adapters/vendor-answers.js.map +1 -0
  96. package/dist/adapters/vendor-key-check.d.ts +23 -0
  97. package/dist/adapters/vendor-key-check.js +36 -0
  98. package/dist/adapters/vendor-key-check.js.map +1 -0
  99. package/dist/bin/aeolus-trierarch.js +7 -2
  100. package/dist/bin/aeolus-trierarch.js.map +1 -1
  101. package/dist/cli/add.d.ts +2 -2
  102. package/dist/cli/add.js +1 -1
  103. package/dist/cli/add.js.map +1 -1
  104. package/dist/cli/config-check.js +1 -1
  105. package/dist/cli/config-check.js.map +1 -1
  106. package/dist/cli/hold.js +13 -4
  107. package/dist/cli/hold.js.map +1 -1
  108. package/dist/cli/init.js +19 -2
  109. package/dist/cli/init.js.map +1 -1
  110. package/dist/cli/login.d.ts +72 -0
  111. package/dist/cli/login.js +114 -0
  112. package/dist/cli/login.js.map +1 -0
  113. package/dist/cli/main.js +89 -8
  114. package/dist/cli/main.js.map +1 -1
  115. package/dist/cli/proxy.d.ts +2 -0
  116. package/dist/cli/proxy.js +58 -0
  117. package/dist/cli/proxy.js.map +1 -0
  118. package/dist/cli/run.js +31 -5
  119. package/dist/cli/run.js.map +1 -1
  120. package/dist/cli/upgrade.d.ts +5 -3
  121. package/dist/cli/upgrade.js +9 -3
  122. package/dist/cli/upgrade.js.map +1 -1
  123. package/dist/core/argo-reports.d.ts +10 -0
  124. package/dist/core/argo-reports.js +17 -0
  125. package/dist/core/argo-reports.js.map +1 -1
  126. package/dist/core/check-session-runtime.js +3 -1
  127. package/dist/core/check-session-runtime.js.map +1 -1
  128. package/dist/core/check-settings.d.ts +2 -0
  129. package/dist/core/check-settings.js +6 -1
  130. package/dist/core/check-settings.js.map +1 -1
  131. package/dist/core/entry.d.ts +14 -0
  132. package/dist/core/entry.js.map +1 -1
  133. package/dist/core/login.d.ts +49 -0
  134. package/dist/core/login.js +24 -0
  135. package/dist/core/login.js.map +1 -0
  136. package/dist/core/ports.d.ts +39 -4
  137. package/dist/core/read-usage.d.ts +2 -1
  138. package/dist/core/read-usage.js +6 -3
  139. package/dist/core/read-usage.js.map +1 -1
  140. package/dist/core/reconciler.d.ts +5 -0
  141. package/dist/core/reconciler.js +12 -7
  142. package/dist/core/reconciler.js.map +1 -1
  143. package/dist/core/report-self.d.ts +6 -2
  144. package/dist/core/report-self.js +34 -8
  145. package/dist/core/report-self.js.map +1 -1
  146. package/dist/core/run-pass.d.ts +6 -1
  147. package/dist/core/run-pass.js +84 -14
  148. package/dist/core/run-pass.js.map +1 -1
  149. package/package.json +3 -4
  150. package/dist/adapters/claude-code-screen.d.ts +0 -1
  151. package/dist/adapters/claude-code-screen.js +0 -22
  152. package/dist/adapters/claude-code-screen.js.map +0 -1
  153. package/dist/adapters/held-command.d.ts +0 -13
  154. package/dist/adapters/held-command.js +0 -16
  155. package/dist/adapters/held-command.js.map +0 -1
  156. package/dist/adapters/launch-screen.d.ts +0 -14
  157. package/dist/adapters/launch-screen.js +0 -5
  158. package/dist/adapters/launch-screen.js.map +0 -1
  159. package/dist/adapters/stop-turn.d.ts +0 -13
  160. package/dist/adapters/stop-turn.js +0 -26
  161. package/dist/adapters/stop-turn.js.map +0 -1
  162. package/dist/adapters/tmux.d.ts +0 -13
  163. package/dist/adapters/tmux.js +0 -33
  164. package/dist/adapters/tmux.js.map +0 -1
@@ -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,8 @@ 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(),
38
+ earlierLogins: z.array(z.object({ login: z.enum(LOGINS), until: z.string() })).optional(),
36
39
  isReleasedElsewhere: z.literal(true).optional(),
37
40
  crewFailures: z.int().min(1).optional(),
38
41
  isIdentityGone: z.literal(true).optional(),
@@ -42,7 +45,9 @@ const stateSchema = z.object({
42
45
  refused: z.record(z.string(), z.int().positive()),
43
46
  lowResources: z.array(z.enum(LOW_RESOURCES)).optional(),
44
47
  missingPlugins: z.array(z.string()).optional(),
48
+ notOffered: z.array(z.object({ harness: z.string(), reason: z.string() })).optional(),
45
49
  passFailure: z.object({ reason: z.string(), since: z.string() }).optional(),
50
+ keysTold: z.record(z.string(), z.enum(KEY_STATES)).optional(),
46
51
  failedStarts: z
47
52
  .object({
48
53
  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":"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;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD;;;;;;;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,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;QACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;QAChC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;QACzF,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QAC/C,YAAY,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACvC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;KAC3C,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;IACjD,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC9C,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3E,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7D,YAAY,EAAE,CAAC;SACZ,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC/E,CAAC;SACD,QAAQ,EAAE;CACd,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"}
@@ -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;
@@ -0,0 +1,48 @@
1
+ import { PLUGIN_HARNESSES } from './plugin.js';
2
+ /**
3
+ * Whether a session can start on its login now (api keys K9): on an API key,
4
+ * only once its harness holds one, so a session never starts to be refused by
5
+ * the proxy, nor on its subscription instead (K2). On the subscription,
6
+ * only when nothing the harness reads itself would put a key in reach (K6).
7
+ */
8
+ export function createModelLogins(at) {
9
+ return {
10
+ startProblem: async ({ harness, login, options, folder }) => {
11
+ if (login === 'subscription') {
12
+ return subscriptionProblem(at, { harness, options, ...(folder !== undefined && { folder }) });
13
+ }
14
+ if (harness === 'copilot') {
15
+ return "copilot signs in with this computer's own login and runs on no API key: run the ship on its subscription";
16
+ }
17
+ const { state, at: since = '' } = await keyStateOf(at, harness);
18
+ switch (state) {
19
+ case 'ready':
20
+ return undefined;
21
+ case 'none':
22
+ return `${harness} has no API key on this computer: aeolus-trierarch login ${harness} --api-key`;
23
+ case 'refused':
24
+ return `${harness}'s API key was refused by its vendor since ${since}: give it a new one with aeolus-trierarch login ${harness} --api-key`;
25
+ case 'outOfCredit':
26
+ return `${harness}'s API key is out of credit since ${since}: it is checked every 15 minutes, or at once with aeolus-trierarch login ${harness} --check`;
27
+ }
28
+ },
29
+ keyState: (harness) => keyStateOf(at, harness),
30
+ };
31
+ }
32
+ /** The harness's key state; none for a harness this trierarch keeps no key for. */
33
+ function keyStateOf(at, harness) {
34
+ const known = PLUGIN_HARNESSES.find((name) => name === harness);
35
+ return known === undefined ? Promise.resolve({ state: 'none' }) : at.keyStates.stateOf(known);
36
+ }
37
+ /** Why a session of the harness would not run on its subscription alone; none when it would. */
38
+ async function subscriptionProblem(at, session) {
39
+ if (session.harness === 'claude-code') {
40
+ const found = await at.claudeCode.keyInReach({ options: session.options, ...(session.folder !== undefined && { folder: session.folder }) });
41
+ return found === undefined ? undefined : `claude-code would reach an API key on its subscription (${found}): remove it, or run the ship on its API key`;
42
+ }
43
+ if (session.harness === 'codex' && (await at.codex.loginKind()) === 'apiKey') {
44
+ return 'codex is logged in with an API key, not ChatGPT: log Codex in with ChatGPT (codex logout, then codex login), or run the ship on its API key';
45
+ }
46
+ return undefined;
47
+ }
48
+ //# sourceMappingURL=model-logins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-logins.js","sourceRoot":"","sources":["../../src/adapters/model-logins.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAMjC;IACC,OAAO;QACL,YAAY,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;YAC1D,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;gBAC7B,OAAO,mBAAmB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YAChG,CAAC;YACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,0GAA0G,CAAC;YACpH,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAChE,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,OAAO;oBACV,OAAO,SAAS,CAAC;gBACnB,KAAK,MAAM;oBACT,OAAO,GAAG,OAAO,4DAA4D,OAAO,YAAY,CAAC;gBACnG,KAAK,SAAS;oBACZ,OAAO,GAAG,OAAO,8CAA8C,KAAK,mDAAmD,OAAO,YAAY,CAAC;gBAC7I,KAAK,aAAa;oBAChB,OAAO,GAAG,OAAO,qCAAqC,KAAK,4EAA4E,OAAO,UAAU,CAAC;YAC7J,CAAC;QACH,CAAC;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,SAAS,UAAU,CAAC,EAA6C,EAAE,OAAe;IAChF,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAyB,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACvF,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChG,CAAC;AAED,gGAAgG;AAChG,KAAK,UAAU,mBAAmB,CAAC,EAA2C,EAAE,OAAwF;IACtK,IAAI,OAAO,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5I,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,2DAA2D,KAAK,8CAA8C,CAAC;IAC1J,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC7E,OAAO,6IAA6I,CAAC;IACvJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { type IncomingMessage, type ServerResponse } from 'node:http';
2
+ import { type PluginHarness } from './plugin.js';
3
+ /**
4
+ * The model proxy (headless H16, api keys K7): the one process that reads a
5
+ * harness's API key. A session reaches its vendor through it with a token of
6
+ * its own; the proxy takes the token only from a running session of that
7
+ * harness, swaps it for the key, and forwards the request to that harness's
8
+ * vendor alone: `/anthropic/...` to Anthropic for Claude Code, `/openai/...`
9
+ * to OpenAI for Codex. Its refusals name neither a key nor a token. It reads
10
+ * every vendor answer to the key and records what it says of the key (api
11
+ * keys K9): a success as it streams, an error once whole, before it is sent
12
+ * on unchanged.
13
+ */
14
+ export interface ModelProxy {
15
+ readonly handle: (request: IncomingMessage, response: ServerResponse) => void;
16
+ /** Checks each key out of credit once (api keys K10), as the proxy does every 15 minutes. */
17
+ readonly checkOutOfCredit: () => Promise<void>;
18
+ }
19
+ /** The proxy's own path, which answers its version. */
20
+ export declare const STATE_PATH = "/aeolus/state";
21
+ /** The proxy's own path that checks a harness's key at once, `<path>/<harness>` (login --check, K10). */
22
+ export declare const CHECK_PATH = "/aeolus/check/";
23
+ /** How often a key out of credit is checked (K10). */
24
+ export declare const CHECK_INTERVAL_MS: number;
25
+ export declare function createModelProxy(at: {
26
+ sessions: string;
27
+ keys: string;
28
+ keyStates: string;
29
+ version: string;
30
+ vendors?: Partial<Record<PluginHarness, string>>;
31
+ now?: () => Date;
32
+ }): ModelProxy;