@aeolus-fleet/trierarch 0.33.0 → 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 +20 -6
  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
@@ -0,0 +1,72 @@
1
+ import type { Readable } from 'node:stream';
2
+ import { type RunningFile } from '../adapters/files.js';
3
+ import type { KeyFiles } from '../adapters/key-files.js';
4
+ import { type PluginHarness } from '../adapters/plugin.js';
5
+ import type { Service } from '../adapters/service.js';
6
+ import type { KeyCheck } from '../adapters/vendor-key-check.js';
7
+ import type { KeyStateAt, Login as SessionLogin } from '../core/login.js';
8
+ /**
9
+ * `aeolus-trierarch login` (api keys K11): keeps a harness's API key on this
10
+ * computer, chooses which login each harness and ship runs on, and says them.
11
+ * A key comes in on stdin, never a flag, so it stays out of the shell history
12
+ * (#445); it is written only once its vendor takes it, and never said back
13
+ * (K7). The logins go in the configuration (K5), every other key of it kept as
14
+ * written. Every change restarts the service, as `add` does; sessions keep
15
+ * running, each on the login it started with (K3).
16
+ */
17
+ export type LoginRequest = {
18
+ readonly kind: 'show';
19
+ } | {
20
+ readonly kind: 'apiKey';
21
+ readonly harness: PluginHarness;
22
+ } | {
23
+ readonly kind: 'removeKey';
24
+ readonly harness: PluginHarness;
25
+ } | {
26
+ readonly kind: 'check';
27
+ readonly harness: PluginHarness;
28
+ } | {
29
+ readonly kind: 'setDefault';
30
+ readonly harness: PluginHarness;
31
+ readonly login: SessionLogin;
32
+ } | {
33
+ readonly kind: 'setShip';
34
+ readonly shipName: string;
35
+ readonly login: SessionLogin | 'default';
36
+ };
37
+ /** The key's state as login knows it: a key is written only once its vendor took it (K8). */
38
+ export type KeyState = 'none' | 'ready';
39
+ export interface HarnessLogin {
40
+ readonly harness: PluginHarness;
41
+ /** A harness with no default in the configuration runs on its subscription (K5). */
42
+ readonly default: SessionLogin;
43
+ readonly key: KeyState;
44
+ }
45
+ /** A ship the configuration names, on its own login. */
46
+ export interface ShipLogin {
47
+ readonly shipName: string;
48
+ readonly login: SessionLogin;
49
+ }
50
+ export interface LoginReport {
51
+ readonly harnesses: readonly HarnessLogin[];
52
+ readonly ships: readonly ShipLogin[];
53
+ readonly said: readonly string[];
54
+ }
55
+ export interface Login {
56
+ readonly request: LoginRequest;
57
+ /** The configuration's file. */
58
+ readonly config: string;
59
+ readonly keys: KeyFiles;
60
+ /** The key, as the operator types it at a terminal or pipes it in. */
61
+ readonly readKey: () => Promise<string>;
62
+ readonly check: (harness: PluginHarness, key: string) => Promise<KeyCheck>;
63
+ readonly service: Pick<Service, 'status' | 'restart'>;
64
+ readonly running: () => Promise<RunningFile | undefined>;
65
+ /** Waits between reads of running.json; a test passes one that does not wait. */
66
+ readonly sleep?: (ms: number) => Promise<void>;
67
+ /** Has the model proxy check the harness's key at once (K10): its state after; none when the proxy does not run. */
68
+ readonly checkNow: (harness: PluginHarness) => Promise<KeyStateAt | undefined>;
69
+ }
70
+ export declare function login(at: Login): Promise<LoginReport>;
71
+ /** A key piped in: all of the input, without its line end. */
72
+ export declare function readKeyFrom(input: Readable): Promise<string>;
@@ -0,0 +1,114 @@
1
+ import { readFile, writeFile } from 'node:fs/promises';
2
+ import { z } from 'zod';
3
+ import { loadConfiguration, TrierarchFileError } from '../adapters/files.js';
4
+ import { PLUGIN_HARNESSES } from '../adapters/plugin.js';
5
+ import { NOT_SAID_YET, startNewProcess } from './new-process.js';
6
+ const HARNESS_NAMES = { 'claude-code': 'Claude Code', codex: 'Codex' };
7
+ const LOGIN_NAMES = { apiKey: 'API key', subscription: 'Subscription' };
8
+ const LOGIN_WIDTH = Math.max(...Object.values(LOGIN_NAMES).map((name) => name.length));
9
+ /** The configuration as written: its logins read, every other key kept as it is. */
10
+ const rawSchema = z.object({ logins: z.object({ default: z.record(z.string(), z.string()).optional(), ships: z.record(z.string(), z.string()).optional() }).optional() }).loose();
11
+ export async function login(at) {
12
+ const said = await change(at);
13
+ // Before init there is no configuration: every harness then runs on its subscription.
14
+ const logins = (await loadConfiguration(at.config).catch(() => undefined))?.logins ?? {};
15
+ const harnesses = await Promise.all(PLUGIN_HARNESSES.map(async (harness) => ({ harness, default: logins.default?.[harness] ?? 'subscription', key: (await at.keys.has(harness)) ? 'ready' : 'none' })));
16
+ const ships = Object.entries(logins.ships ?? {})
17
+ .map(([shipName, shipLogin]) => ({ shipName, login: shipLogin }))
18
+ .sort((left, right) => left.shipName.localeCompare(right.shipName));
19
+ if (at.request.kind === 'show') {
20
+ const width = Math.max(...Object.values(HARNESS_NAMES).map((name) => name.length), ...ships.map((ship) => ship.shipName.length));
21
+ const lines = [
22
+ ...harnesses.map((harness) => `${HARNESS_NAMES[harness.harness].padEnd(width)} default ${LOGIN_NAMES[harness.default].padEnd(LOGIN_WIDTH)} ${harness.key === 'ready' ? 'API key ready' : 'no API key'}`),
23
+ ...ships.map((ship) => `${ship.shipName.padEnd(width)} ${LOGIN_NAMES[ship.login]}`),
24
+ ];
25
+ return { harnesses, ships, said: lines };
26
+ }
27
+ return { harnesses, ships, said };
28
+ }
29
+ /** Writes the logins into the configuration, every other key kept; answers whether that changed them. */
30
+ async function writeLogins(config, next) {
31
+ // Checked as the trierarch reads it, so a broken configuration is said, never written over.
32
+ await loadConfiguration(config);
33
+ const raw = rawSchema.parse(JSON.parse(await readFile(config, 'utf8')));
34
+ const logins = next(raw.logins);
35
+ if (JSON.stringify(logins) === JSON.stringify(raw.logins ?? {})) {
36
+ return false;
37
+ }
38
+ await writeFile(config, `${JSON.stringify({ ...raw, logins }, null, 2)}\n`);
39
+ return true;
40
+ }
41
+ /** What the request changes and what it says of it; nothing for show. */
42
+ async function change(at) {
43
+ const { request, keys } = at;
44
+ switch (request.kind) {
45
+ case 'show':
46
+ return [];
47
+ case 'apiKey': {
48
+ const key = (await at.readKey()).trim();
49
+ if (key === '') {
50
+ throw new TrierarchFileError('No API key came in: pipe it in, or type it when asked.');
51
+ }
52
+ const checked = await at.check(request.harness, key);
53
+ if (checked.kind !== 'taken') {
54
+ throw new TrierarchFileError(`${checked.cause}. Nothing was written.`);
55
+ }
56
+ await keys.write(request.harness, key);
57
+ return [`The vendor took the API key for ${HARNESS_NAMES[request.harness]}; it is kept on this computer only.`, ...(await restart(at))];
58
+ }
59
+ case 'removeKey':
60
+ if (!(await keys.remove(request.harness))) {
61
+ return [`${HARNESS_NAMES[request.harness]} holds no API key: nothing to remove.`];
62
+ }
63
+ return [`Removed the API key for ${HARNESS_NAMES[request.harness]}.`, ...(await restart(at))];
64
+ case 'check': {
65
+ const name = HARNESS_NAMES[request.harness];
66
+ const key = await at.checkNow(request.harness);
67
+ if (key === undefined) {
68
+ throw new TrierarchFileError('The model proxy does not run: it runs while the service does and a harness holds a key (aeolus-trierarch start).');
69
+ }
70
+ switch (key.state) {
71
+ case 'ready':
72
+ return [`${name}'s API key is ready: its waiting ships start within a pass.`];
73
+ case 'outOfCredit':
74
+ return [`${name}'s API key is still out of credit since ${key.at ?? ''}. The proxy checks it again every 15 minutes.`];
75
+ case 'refused':
76
+ return [`${name}'s API key was refused by its vendor: give it a new one with aeolus-trierarch login ${request.harness} --api-key.`];
77
+ case 'none':
78
+ return [`${name} holds no API key: aeolus-trierarch login ${request.harness} --api-key.`];
79
+ }
80
+ break;
81
+ }
82
+ case 'setDefault': {
83
+ const name = HARNESS_NAMES[request.harness];
84
+ const label = LOGIN_NAMES[request.login];
85
+ const isChanged = await writeLogins(at.config, (logins = {}) => ({ ...logins, default: { ...logins.default, [request.harness]: request.login } }));
86
+ return isChanged ? [`${name} runs on ${label} by default, from each session's next start.`, ...(await restart(at))] : [`${name} runs on ${label} by default already.`];
87
+ }
88
+ case 'setShip': {
89
+ const { shipName } = request;
90
+ const label = request.login === 'default' ? "its harness's default" : LOGIN_NAMES[request.login];
91
+ const isChanged = await writeLogins(at.config, (logins = {}) => {
92
+ const others = Object.fromEntries(Object.entries(logins.ships ?? {}).filter(([name]) => name !== shipName));
93
+ return { ...logins, ships: request.login === 'default' ? others : { ...others, [shipName]: request.login } };
94
+ });
95
+ return isChanged ? [`${shipName} runs on ${label} from its next start.`, ...(await restart(at))] : [`${shipName} runs on ${label} already.`];
96
+ }
97
+ }
98
+ }
99
+ async function restart(at) {
100
+ if (!(await at.service.status()).isInstalled) {
101
+ return ['The service is not installed: run aeolus-trierarch install to run it.'];
102
+ }
103
+ const { hasSaidVersion } = await startNewProcess({ start: () => at.service.restart(), service: at.service, running: at.running, ...(at.sleep !== undefined && { sleep: at.sleep }) });
104
+ return ['The trierarch restarted; its sessions kept running.', ...(hasSaidVersion ? [] : [NOT_SAID_YET])];
105
+ }
106
+ /** A key piped in: all of the input, without its line end. */
107
+ export async function readKeyFrom(input) {
108
+ const chunks = [];
109
+ for await (const chunk of input) {
110
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
111
+ }
112
+ return Buffer.concat(chunks).toString('utf8').trim();
113
+ }
114
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/cli/login.ts"],"names":[],"mappings":"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"}
package/dist/cli/main.js CHANGED
@@ -3,6 +3,7 @@ import { access } from 'node:fs/promises';
3
3
  import { homedir } from 'node:os';
4
4
  import { join } from 'node:path';
5
5
  import { fileURLToPath } from 'node:url';
6
+ import { z } from 'zod';
6
7
  import { cappedLogStream, isWritingTo } from '../adapters/capped-log.js';
7
8
  import { createClaudeCodeSetup } from '../adapters/claude-code-setup.js';
8
9
  import { createCodexSetup } from '../adapters/codex-setup.js';
@@ -11,6 +12,7 @@ import { createDetectedFile } from '../adapters/detected-file.js';
11
12
  import { createDetectors } from '../adapters/detectors.js';
12
13
  import { loadConfiguration, readCrewFile, readRunningFile, removeRemoteControl, TrierarchFileError } from '../adapters/files.js';
13
14
  import { createJsonState } from '../adapters/json-state.js';
15
+ import { createKeyFiles } from '../adapters/key-files.js';
14
16
  import { createLogger, readLogLine, renderLogLine } from '../adapters/log.js';
15
17
  import { createStyle, isColourTerminal } from '../adapters/style.js';
16
18
  import { trierarchPaths } from '../adapters/paths.js';
@@ -19,8 +21,11 @@ import { createPluginUpdate } from '../adapters/plugin-update.js';
19
21
  import { createRestFleet } from '../adapters/rest-fleet.js';
20
22
  import { runCommand, streamCommand } from '../adapters/run-command.js';
21
23
  import { createService, serviceEnvironment } from '../adapters/service.js';
22
- import { hostSessions } from '../adapters/runtime-adapters.js';
24
+ import { hostSessions, modelProxy } from '../adapters/runtime-adapters.js';
25
+ import { checkKey } from '../adapters/vendor-key-check.js';
26
+ import { CHECK_PATH } from '../adapters/model-proxy.js';
23
27
  import { runningVersion } from '../adapters/version.js';
28
+ import { KEY_STATES } from '../core/login.js';
24
29
  import { createDetectHarnesses } from '../core/detect-harnesses.js';
25
30
  import { createUninstall } from '../core/uninstall.js';
26
31
  import { configCheck } from './config-check.js';
@@ -28,6 +33,7 @@ import { detectOptions } from './detect.js';
28
33
  import { addPlace } from './add.js';
29
34
  import { initTrierarch } from './init.js';
30
35
  import { describeList, inspectList } from './list.js';
36
+ import { login, readKeyFrom } from './login.js';
31
37
  import { createServiceLog } from './logs.js';
32
38
  import { createTerminalPrompter } from './prompter.js';
33
39
  import { runTrierarch } from './run.js';
@@ -45,6 +51,12 @@ export const USAGE = [
45
51
  ' add folder <name> <path> add a folder to crew a ship in as it is, the same way',
46
52
  ' config check check the configuration and give the effective flags per harness',
47
53
  ' detect detect again what each configured harness offers (models, effort) and keep it beside the configuration',
54
+ ' login each harness\'s login and whether it holds an API key',
55
+ ' login <harness> --api-key read an API key for claude-code or codex from stdin (not shown as typed), check it with the vendor and keep it on this computer only, then restart the service; sessions keep running',
56
+ ' login <harness> --remove-key remove the API key for that harness, then restart the service',
57
+ ' login <harness> --check check an API key out of credit at once, as the model proxy does every 15 minutes',
58
+ ' login <harness> --default api-key|subscription the login that harness\'s sessions run on, from each one\'s next start, then restart the service',
59
+ ' login --ship <name> api-key|subscription|default the login that ship runs on, or its harness\'s default again, from its next start, then restart the service',
48
60
  '',
49
61
  'Look:',
50
62
  ' status the version, the aeolus-fleet plugin per harness, the repositories, the service, the fleet and its own lease, caps in use, entries by state, kept worktrees and orphans',
@@ -62,10 +74,10 @@ export const USAGE = [
62
74
  '',
63
75
  '--json answers JSON, for a ship to read.',
64
76
  ].join('\n');
65
- const VALUE_FLAGS = new Set(['--config', '--fleet-url', '--ship-id', '--plugin-ship-id', '--secret', '--lines']);
77
+ const VALUE_FLAGS = new Set(['--config', '--fleet-url', '--ship-id', '--plugin-ship-id', '--secret', '--lines', '--default', '--ship']);
66
78
  /** Set for the installed version's upgrade that runs the plugin step of an upgrade (#725), which restarts the service itself (#829); older versions ignore it. */
67
79
  const PLUGIN_STEP_VARIABLE = 'AEOLUS_TRIERARCH_PLUGIN_STEP';
68
- const SWITCHES = new Set(['--json', '--yes', '--follow', '--no-load', '--version']);
80
+ const SWITCHES = new Set(['--json', '--yes', '--follow', '--no-load', '--version', '--api-key', '--remove-key', '--check']);
69
81
  const DEFAULT_LINES = 50;
70
82
  const FOLLOW_INTERVAL_MS = 500;
71
83
  /** The command words, flag values and switches of a command line; undefined for a flag it does not know. */
@@ -100,6 +112,44 @@ function parse(argv) {
100
112
  function summaryOf(said, style) {
101
113
  return [`\n${style.tone('strong', 'Summary')}`, ...said.map((line) => ` ${line}`)].join('\n');
102
114
  }
115
+ /** A key's state as the model proxy answers a check. */
116
+ const keyStateAtSchema = z.object({ state: z.enum(KEY_STATES), at: z.string().optional() });
117
+ /** The login a command line names: api-key or subscription, and default where it may clear one. */
118
+ const LOGIN_WORDS = { 'api-key': 'apiKey', subscription: 'subscription', default: 'default' };
119
+ /** What a login command line asks: show with nothing more, a ship's login with --ship, else a key to read or remove or a default for the harness it names. */
120
+ function loginRequest(word, at) {
121
+ const isApiKey = at.switches.has('--api-key');
122
+ const isRemoveKey = at.switches.has('--remove-key');
123
+ const isCheck = at.switches.has('--check');
124
+ const shipName = at.values.get('--ship');
125
+ const defaultWord = at.values.get('--default');
126
+ if (shipName !== undefined) {
127
+ const login = LOGIN_WORDS[word ?? ''];
128
+ if (login === undefined) {
129
+ throw new TrierarchFileError('A ship\'s login is api-key, subscription or default: aeolus-trierarch login --ship build-docs api-key');
130
+ }
131
+ return { kind: 'setShip', shipName, login };
132
+ }
133
+ if (word === undefined && !isApiKey && !isRemoveKey && !isCheck && defaultWord === undefined) {
134
+ return { kind: 'show' };
135
+ }
136
+ if (word === 'copilot') {
137
+ // Copilot signs in with the machine's own login (CC6): it has no API key, default or check to set.
138
+ throw new TrierarchFileError("Copilot signs in with this computer's own login (copilot login), never an API key: the trierarch keeps no Copilot key and runs every Copilot session on that login");
139
+ }
140
+ const harness = PLUGIN_HARNESSES.find((name) => name === word);
141
+ if (harness === undefined || [isApiKey, isRemoveKey, isCheck, defaultWord !== undefined].filter(Boolean).length !== 1) {
142
+ throw new TrierarchFileError(`login takes ${PLUGIN_HARNESSES.join(' or ')}: aeolus-trierarch login claude-code --api-key`);
143
+ }
144
+ if (defaultWord !== undefined) {
145
+ const login = LOGIN_WORDS[defaultWord];
146
+ if (login === undefined || login === 'default') {
147
+ throw new TrierarchFileError(`A login is api-key or subscription: aeolus-trierarch login ${harness} --default api-key`);
148
+ }
149
+ return { kind: 'setDefault', harness, login };
150
+ }
151
+ return { kind: isApiKey ? 'apiKey' : isCheck ? 'check' : 'removeKey', harness };
152
+ }
103
153
  /** Runs one command line of `aeolus-trierarch`. */
104
154
  export async function main(argv, machine) {
105
155
  const { env, platform } = machine;
@@ -208,6 +258,36 @@ export async function main(argv, machine) {
208
258
  const { text, ...data } = await configCheck(paths, { files: { claudeCode: claudeCodeSetup() }, host: createContainerHost({ modelTokenFile: paths.modelToken }) });
209
259
  return { data, text };
210
260
  },
261
+ login: async () => {
262
+ const report = await login({
263
+ request: loginRequest(words[1], { switches, values }),
264
+ config: paths.config,
265
+ keys: createKeyFiles(paths.keys),
266
+ readKey: async () => {
267
+ if (!process.stdin.isTTY) {
268
+ return readKeyFrom(process.stdin);
269
+ }
270
+ // Asked on stderr, so stdout holds the answer alone.
271
+ const prompter = createTerminalPrompter({ input: process.stdin, output: process.stderr, style: createStyle({ isColour: isColourTerminal(env, process.stderr.isTTY) }) });
272
+ try {
273
+ return await prompter.secret('API key (not shown):');
274
+ }
275
+ finally {
276
+ prompter.close();
277
+ }
278
+ },
279
+ check: (harness, key) => checkKey({ harness, key }),
280
+ checkNow: async (harness) => {
281
+ const url = await modelProxy({ paths, version: runningVersion() }).url();
282
+ const answer = url === undefined ? undefined : await fetch(`${url}${CHECK_PATH}${harness}`, { method: 'POST' }).catch(() => undefined);
283
+ const key = keyStateAtSchema.safeParse(answer?.ok === true ? await answer.json().catch(() => undefined) : undefined);
284
+ return key.success ? key.data : undefined;
285
+ },
286
+ service: serviceAt(),
287
+ running: () => readRunningFile(paths.running),
288
+ });
289
+ return { data: report, text: report.said.join('\n') };
290
+ },
211
291
  detect: async () => {
212
292
  const { text, ...data } = await detectOptions({ configuration: await loadConfiguration(paths.config), detect: detectAt() });
213
293
  return { data, text };
@@ -315,8 +395,8 @@ export async function main(argv, machine) {
315
395
  return { data: { stopped: true }, text: 'aeolus-trierarch stopped.' };
316
396
  },
317
397
  };
318
- // upgrade takes a word after it, the version; add takes three, the kind, the name and the path.
319
- const command = words[0] === 'upgrade' && words.length <= 2 ? commands.upgrade : words[0] === 'add' && words.length === 4 ? commands.add : commands[words.join(' ')];
398
+ // upgrade takes a word after it, the version; add takes three, the kind, the name and the path; login one, the harness.
399
+ const command = (words[0] === 'upgrade' || words[0] === 'login') && words.length <= 2 ? commands[words[0]] : words[0] === 'add' && words.length === 4 ? commands.add : commands[words.join(' ')];
320
400
  if (command === undefined) {
321
401
  return { output: USAGE, code: 2 };
322
402
  }
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** Runs the proxy with the words after `proxy`; answers its exit code, or 2 for words it cannot take. */
2
+ export declare function proxyCommand(words: readonly string[]): Promise<number>;
@@ -0,0 +1,58 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { createServer } from 'node:http';
3
+ import { CHECK_INTERVAL_MS, createModelProxy } from '../adapters/model-proxy.js';
4
+ import { keyStatesFileOf, proxyFilesOf } from '../adapters/proxy-runtime.js';
5
+ import { runningVersion } from '../adapters/version.js';
6
+ /**
7
+ * `aeolus-trierarch proxy --folder <folder> --sessions <folder> --keys <folder>`:
8
+ * the model proxy (headless H16), as the trierarch starts it, never a person.
9
+ * It listens on loopback, on the port it listened on before when it can, so a
10
+ * running session reaches it where it did; it writes its port and pid in its
11
+ * folder, checks each key out of credit every 15 minutes, and ends on SIGTERM.
12
+ */
13
+ const LOOPBACK = '127.0.0.1';
14
+ function listen(server, port) {
15
+ return new Promise((resolve, reject) => {
16
+ server.once('error', reject);
17
+ server.listen(port, LOOPBACK, () => {
18
+ server.off('error', reject);
19
+ const address = server.address();
20
+ resolve(typeof address === 'object' && address !== null ? address.port : port);
21
+ });
22
+ });
23
+ }
24
+ /** Runs the proxy with the words after `proxy`; answers its exit code, or 2 for words it cannot take. */
25
+ export async function proxyCommand(words) {
26
+ const valueOf = (name) => (words.includes(name) ? words[words.indexOf(name) + 1] : undefined);
27
+ const folder = valueOf('--folder');
28
+ const sessions = valueOf('--sessions');
29
+ const keys = valueOf('--keys');
30
+ if (folder === undefined || sessions === undefined || keys === undefined) {
31
+ process.stderr.write('Usage: aeolus-trierarch proxy --folder <folder> --sessions <folder> --keys <folder>\n');
32
+ return 2;
33
+ }
34
+ const files = proxyFilesOf(folder);
35
+ await mkdir(folder, { recursive: true, mode: 0o700 });
36
+ const proxy = createModelProxy({ sessions, keys, keyStates: keyStatesFileOf(folder), version: runningVersion() });
37
+ const server = createServer(proxy.handle);
38
+ const before = Number(await readFile(files.port, 'utf8').catch(() => '0'));
39
+ // The port it had may be taken by now: then any free one, and sessions started from now reach it there.
40
+ const port = await listen(server, Number.isInteger(before) ? before : 0).catch(() => listen(server, 0));
41
+ await writeFile(files.port, String(port));
42
+ await writeFile(files.pid, String(process.pid));
43
+ // A key out of credit is checked every 15 minutes (api keys K10); a check that fails is tried again at the next.
44
+ const checks = setInterval(() => {
45
+ proxy.checkOutOfCredit().catch(() => undefined);
46
+ }, CHECK_INTERVAL_MS);
47
+ await new Promise((resolve) => {
48
+ process.once('SIGTERM', () => {
49
+ clearInterval(checks);
50
+ server.closeAllConnections();
51
+ server.close(() => {
52
+ resolve();
53
+ });
54
+ });
55
+ });
56
+ return 0;
57
+ }
58
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/cli/proxy.ts"],"names":[],"mappings":"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"}
package/dist/cli/run.js CHANGED
@@ -16,11 +16,17 @@ import { adapterFlagsOf, createHarnesses, riskyFlagsOf } from '../adapters/harne
16
16
  import { createFolderProcesses } from '../adapters/folder-processes.js';
17
17
  import { createGitCheckouts } from '../adapters/git-checkouts.js';
18
18
  import { createJsonState } from '../adapters/json-state.js';
19
+ import { createKeyFiles } from '../adapters/key-files.js';
20
+ import { createModelLogins } from '../adapters/model-logins.js';
21
+ import { createKeyStates } from '../adapters/key-states.js';
22
+ import { keyStatesFileOf } from '../adapters/proxy-runtime.js';
23
+ import { claudeCodeKeyInReach } from '../adapters/claude-code.js';
19
24
  import { createMachine } from '../adapters/machine.js';
20
25
  import { shipHome } from '../adapters/paths.js';
21
26
  import { runCommand } from '../adapters/run-command.js';
22
27
  import { createRestFleet } from '../adapters/rest-fleet.js';
23
- import { runtimeAdaptersOf } from '../adapters/runtime-adapters.js';
28
+ import { modelProxy, runtimeAdaptersOf } from '../adapters/runtime-adapters.js';
29
+ import { PLUGIN_HARNESSES } from '../adapters/plugin.js';
24
30
  import { createCallerCheck } from '../adapters/caller-check.js';
25
31
  import { createShipSockets } from '../adapters/ship-sockets.js';
26
32
  import { sessionsLaunch } from '../adapters/hold-runtime.js';
@@ -99,8 +105,14 @@ export async function runTrierarch(input) {
99
105
  let offered = { configuration, detected };
100
106
  const version = runningVersion();
101
107
  const clones = trustedClonesOf({ configured, held: trustedRepositories, root: paths.repositories });
102
- const { sessions, workspace, shipHomes } = runtimeAdaptersOf({ configuration, paths, version, launch: sessionsLaunch({ platform: process.platform, env }), managedSettings, clones });
103
- const { harnesses, plugins } = await createHarnesses({ configuration, homeDirectory, env, managedSettings, detected: () => offered.detected, sessions, ...(shipHomes !== undefined && { shipHomes }) });
108
+ const { sessions, workspace, shipHomes, modelProxyUrlOf } = runtimeAdaptersOf({ configuration, paths, version, launch: sessionsLaunch({ platform: process.platform, env }), managedSettings, clones });
109
+ // The model proxy runs while any harness holds an API key (headless H16); a pass starts it again when it is gone.
110
+ const keys = createKeyFiles(paths.keys);
111
+ const proxy = modelProxy({ paths, version, launch: sessionsLaunch({ platform: process.platform, env }) });
112
+ const { harnesses, plugins } = await createHarnesses({ configuration, homeDirectory, env, managedSettings, detected: () => offered.detected, sessions, proxyUrl: async () => {
113
+ const url = await proxy.url();
114
+ return url === undefined ? undefined : modelProxyUrlOf(url);
115
+ }, ...(shipHomes !== undefined && { shipHomes }) });
104
116
  const state = createJsonState(paths.state);
105
117
  const trust = createTrust({ configuration, homeDirectory, env, managedSettings });
106
118
  const clock = { now: () => new Date() };
@@ -139,7 +151,14 @@ export async function runTrierarch(input) {
139
151
  },
140
152
  refreshCheckouts: (shipId) => checkouts.refresh(shipId),
141
153
  });
142
- const runPass = createRunPass({ fleet, harnesses, processes: sessions, folderProcesses: createFolderProcesses(), workspace, checkouts, trust, state, setup, clock, logger, refuseModel, newLaunchId: randomUUID, sockets });
154
+ const claudeCodeSetup = createClaudeCodeSetup({ homeDirectory, managedSettings, ...(env.CLAUDE_CONFIG_DIR !== undefined && { configDirectory: env.CLAUDE_CONFIG_DIR }) });
155
+ const modelLogins = createModelLogins({
156
+ keyStates: createKeyStates({ keys: paths.keys, file: keyStatesFileOf(paths.proxy) }),
157
+ // The harness as launch reads it, so the guard sees the flags the session would start with (K6).
158
+ claudeCode: { keyInReach: ({ options, folder }) => claudeCodeKeyInReach(claudeCodeSetup, { harness: configuration.harnesses['claude-code'] ?? { flags: [], options: {} }, options, ...(folder !== undefined && { folder }) }) },
159
+ codex: createCodexSetup(),
160
+ });
161
+ const runPass = createRunPass({ fleet, harnesses, processes: sessions, folderProcesses: createFolderProcesses(), workspace, checkouts, trust, state, setup, clock, logger, refuseModel, newLaunchId: randomUUID, sockets, modelLogins, ...(configured.logins !== undefined && { logins: configured.logins }) });
143
162
  // The machine's load (#400) and the harnesses' usage (#353), each read on its own interval for the report.
144
163
  const readLoad = createReadLoad({ machine: createMachine({ worktreeRoot: configuration.worktreeRoot ?? paths.worktrees }), fleet, state, clock, logger });
145
164
  const usage = createUsage({
@@ -155,8 +174,15 @@ export async function runTrierarch(input) {
155
174
  const readUsage = createReadUsage({ usage, state, clock, logger, harnesses: Object.keys(configured.harnesses), prices: priceTableOf(configured.prices) });
156
175
  const reportSelf = createReportSelf({ fleet, processes: sessions, trust, state, setup, readLoad, readUsage, clock });
157
176
  const askForTrustedRepositories = createAskForTrustedRepositories({ fleet, logger, ...(crew.pluginShipId !== undefined && { pluginShipId: crew.pluginShipId }) });
177
+ const keepProxy = async () => {
178
+ const held = await Promise.all(PLUGIN_HARNESSES.map((harness) => keys.has(harness)));
179
+ await proxy.keep({ isNeeded: held.includes(true) }).catch((error) => {
180
+ logger.warn(`the model proxy: ${error instanceof Error ? error.message : String(error)}`);
181
+ });
182
+ };
158
183
  // Each pass ends with the trierarch's own report: the first at start, then only when it changed.
159
184
  const pass = async () => {
185
+ await keepProxy();
160
186
  await askForTrustedRepositories();
161
187
  await runPass();
162
188
  await reportSelf();