@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.
- package/README.md +7 -4
- package/dist/adapters/claude-code-setup.d.ts +11 -0
- package/dist/adapters/claude-code-setup.js +60 -0
- package/dist/adapters/claude-code-setup.js.map +1 -1
- package/dist/adapters/claude-code.d.ts +21 -18
- package/dist/adapters/claude-code.js +46 -36
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/adapters/codex-setup.d.ts +2 -0
- package/dist/adapters/codex-setup.js +6 -0
- package/dist/adapters/codex-setup.js.map +1 -1
- package/dist/adapters/codex.d.ts +2 -0
- package/dist/adapters/codex.js +31 -3
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/container.d.ts +36 -15
- package/dist/adapters/container.js +72 -93
- package/dist/adapters/container.js.map +1 -1
- package/dist/adapters/copilot-detector.d.ts +13 -0
- package/dist/adapters/copilot-detector.js +62 -0
- package/dist/adapters/copilot-detector.js.map +1 -0
- package/dist/adapters/copilot.d.ts +79 -0
- package/dist/adapters/copilot.js +187 -0
- package/dist/adapters/copilot.js.map +1 -0
- package/dist/adapters/detectors.js +6 -0
- package/dist/adapters/detectors.js.map +1 -1
- package/dist/adapters/files.d.ts +16 -0
- package/dist/adapters/files.js +5 -0
- package/dist/adapters/files.js.map +1 -1
- package/dist/adapters/harnesses.d.ts +3 -2
- package/dist/adapters/harnesses.js +21 -9
- package/dist/adapters/harnesses.js.map +1 -1
- package/dist/adapters/hold-runtime.d.ts +19 -5
- package/dist/adapters/hold-runtime.js +23 -10
- package/dist/adapters/hold-runtime.js.map +1 -1
- package/dist/adapters/hold.d.ts +12 -0
- package/dist/adapters/hold.js +66 -31
- package/dist/adapters/hold.js.map +1 -1
- package/dist/adapters/json-state.js +4 -0
- package/dist/adapters/json-state.js.map +1 -1
- package/dist/adapters/key-files.d.ts +16 -0
- package/dist/adapters/key-files.js +28 -0
- package/dist/adapters/key-files.js.map +1 -0
- package/dist/adapters/key-states.d.ts +21 -0
- package/dist/adapters/key-states.js +43 -0
- package/dist/adapters/key-states.js.map +1 -0
- package/dist/adapters/model-logins.d.ts +21 -0
- package/dist/adapters/model-logins.js +48 -0
- package/dist/adapters/model-logins.js.map +1 -0
- package/dist/adapters/model-proxy.d.ts +32 -0
- package/dist/adapters/model-proxy.js +171 -0
- package/dist/adapters/model-proxy.js.map +1 -0
- package/dist/adapters/paths.d.ts +4 -0
- package/dist/adapters/paths.js +2 -0
- package/dist/adapters/paths.js.map +1 -1
- package/dist/adapters/plugin.d.ts +11 -8
- package/dist/adapters/plugin.js +47 -13
- package/dist/adapters/plugin.js.map +1 -1
- package/dist/adapters/proxy-runtime.d.ts +31 -0
- package/dist/adapters/proxy-runtime.js +100 -0
- package/dist/adapters/proxy-runtime.js.map +1 -0
- package/dist/adapters/proxy-tokens.d.ts +25 -0
- package/dist/adapters/proxy-tokens.js +67 -0
- package/dist/adapters/proxy-tokens.js.map +1 -0
- package/dist/adapters/runtime-adapters.d.ts +11 -6
- package/dist/adapters/runtime-adapters.js +25 -11
- package/dist/adapters/runtime-adapters.js.map +1 -1
- package/dist/adapters/service.d.ts +1 -1
- package/dist/adapters/service.js +2 -2
- package/dist/adapters/service.js.map +1 -1
- package/dist/adapters/trust.d.ts +2 -1
- package/dist/adapters/trust.js +4 -1
- package/dist/adapters/trust.js.map +1 -1
- package/dist/adapters/vendor-answers.d.ts +6 -0
- package/dist/adapters/vendor-answers.js +38 -0
- package/dist/adapters/vendor-answers.js.map +1 -0
- package/dist/adapters/vendor-key-check.d.ts +23 -0
- package/dist/adapters/vendor-key-check.js +36 -0
- package/dist/adapters/vendor-key-check.js.map +1 -0
- package/dist/bin/aeolus-trierarch.js +7 -2
- package/dist/bin/aeolus-trierarch.js.map +1 -1
- package/dist/cli/add.d.ts +2 -2
- package/dist/cli/config-check.js +1 -1
- package/dist/cli/config-check.js.map +1 -1
- package/dist/cli/hold.js +20 -6
- package/dist/cli/hold.js.map +1 -1
- package/dist/cli/login.d.ts +72 -0
- package/dist/cli/login.js +114 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/main.js +85 -5
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/proxy.d.ts +2 -0
- package/dist/cli/proxy.js +58 -0
- package/dist/cli/proxy.js.map +1 -0
- package/dist/cli/run.js +30 -4
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/upgrade.d.ts +2 -2
- package/dist/cli/upgrade.js +2 -2
- package/dist/core/argo-reports.d.ts +10 -0
- package/dist/core/argo-reports.js +17 -0
- package/dist/core/argo-reports.js.map +1 -1
- package/dist/core/check-session-runtime.js +3 -1
- package/dist/core/check-session-runtime.js.map +1 -1
- package/dist/core/check-settings.d.ts +2 -0
- package/dist/core/check-settings.js +6 -1
- package/dist/core/check-settings.js.map +1 -1
- package/dist/core/entry.d.ts +12 -0
- package/dist/core/entry.js.map +1 -1
- package/dist/core/login.d.ts +28 -0
- package/dist/core/login.js +14 -0
- package/dist/core/login.js.map +1 -0
- package/dist/core/ports.d.ts +33 -1
- package/dist/core/reconciler.d.ts +5 -0
- package/dist/core/reconciler.js +12 -7
- package/dist/core/reconciler.js.map +1 -1
- package/dist/core/report-self.js +9 -3
- package/dist/core/report-self.js.map +1 -1
- package/dist/core/run-pass.d.ts +6 -1
- package/dist/core/run-pass.js +81 -13
- package/dist/core/run-pass.js.map +1 -1
- package/package.json +1 -2
- package/dist/adapters/claude-code-screen.d.ts +0 -1
- package/dist/adapters/claude-code-screen.js +0 -22
- package/dist/adapters/claude-code-screen.js.map +0 -1
- package/dist/adapters/held-command.d.ts +0 -13
- package/dist/adapters/held-command.js +0 -16
- package/dist/adapters/held-command.js.map +0 -1
- package/dist/adapters/launch-screen.d.ts +0 -14
- package/dist/adapters/launch-screen.js +0 -5
- package/dist/adapters/launch-screen.js.map +0 -1
- package/dist/adapters/stop-turn.d.ts +0 -13
- package/dist/adapters/stop-turn.js +0 -26
- package/dist/adapters/stop-turn.js.map +0 -1
- package/dist/adapters/tmux.d.ts +0 -13
- package/dist/adapters/tmux.js +0 -33
- package/dist/adapters/tmux.js.map +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { type PluginHarness } from './plugin.js';
|
|
4
|
+
declare const proxyTokenSchema: z.ZodObject<{
|
|
5
|
+
harness: z.ZodEnum<{
|
|
6
|
+
"claude-code": "claude-code";
|
|
7
|
+
codex: "codex";
|
|
8
|
+
}>;
|
|
9
|
+
token: z.ZodString;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
export type ProxyToken = z.infer<typeof proxyTokenSchema>;
|
|
12
|
+
/** A fresh token for one start of a session. */
|
|
13
|
+
export declare function newProxyToken(): string;
|
|
14
|
+
export declare function writeProxyToken(folder: string, proxyToken: {
|
|
15
|
+
readonly harness: string;
|
|
16
|
+
readonly token: string;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
/** The running session that holds the token for the harness, by its ship; none for any other token. */
|
|
19
|
+
export declare function sessionOfToken(sessions: string, at: {
|
|
20
|
+
harness: PluginHarness;
|
|
21
|
+
token: string;
|
|
22
|
+
}): Promise<ShipId | undefined>;
|
|
23
|
+
/** The token kept in the session's folder; none without one. */
|
|
24
|
+
export declare function readProxyToken(folder: string): Promise<ProxyToken | undefined>;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
import { chmod, readdir, readFile, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { idSchema } from '@aeolus-fleet/common';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { parsedLine } from './hold-protocol.js';
|
|
7
|
+
import { PLUGIN_HARNESSES } from './plugin.js';
|
|
8
|
+
/**
|
|
9
|
+
* Each session's proxy token (headless H16): a random token of its own, kept
|
|
10
|
+
* in the session's folder beside its hold's files, mode 600, with the harness
|
|
11
|
+
* it may reach. The model proxy takes a token only while that hold runs, so a
|
|
12
|
+
* stopped session's token is refused, and the folder goes with the session.
|
|
13
|
+
*/
|
|
14
|
+
const FILE = 'proxy-token';
|
|
15
|
+
const proxyTokenSchema = z.object({ harness: z.enum(PLUGIN_HARNESSES), token: z.string().min(1) });
|
|
16
|
+
/** How many random bytes a session's proxy token holds. */
|
|
17
|
+
const TOKEN_BYTES = 32;
|
|
18
|
+
/** A fresh token for one start of a session. */
|
|
19
|
+
export function newProxyToken() {
|
|
20
|
+
return randomBytes(TOKEN_BYTES).toString('base64url');
|
|
21
|
+
}
|
|
22
|
+
export async function writeProxyToken(folder, proxyToken) {
|
|
23
|
+
const file = join(folder, FILE);
|
|
24
|
+
await writeFile(file, JSON.stringify({ harness: proxyToken.harness, token: proxyToken.token }), { mode: 0o600 });
|
|
25
|
+
await chmod(file, 0o600);
|
|
26
|
+
}
|
|
27
|
+
/** Whether the hold whose pid file is in the folder runs. */
|
|
28
|
+
async function isHoldRunning(folder) {
|
|
29
|
+
const pid = Number(await readFile(join(folder, 'hold.pid'), 'utf8').catch(() => ''));
|
|
30
|
+
if (!Number.isInteger(pid) || pid <= 1) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
process.kill(pid, 0);
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function isSameToken(given, held) {
|
|
42
|
+
const left = Buffer.from(given);
|
|
43
|
+
const right = Buffer.from(held);
|
|
44
|
+
return left.length === right.length && timingSafeEqual(left, right);
|
|
45
|
+
}
|
|
46
|
+
/** The running session that holds the token for the harness, by its ship; none for any other token. */
|
|
47
|
+
export async function sessionOfToken(sessions, at) {
|
|
48
|
+
const folders = await readdir(sessions).catch(() => []);
|
|
49
|
+
for (const name of folders) {
|
|
50
|
+
const shipId = idSchema('ship').safeParse(name);
|
|
51
|
+
if (!shipId.success) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const folder = join(sessions, name);
|
|
55
|
+
const held = proxyTokenSchema.safeParse(parsedLine(await readFile(join(folder, FILE), 'utf8').catch(() => '')));
|
|
56
|
+
if (held.success && held.data.harness === at.harness && isSameToken(at.token, held.data.token) && (await isHoldRunning(folder))) {
|
|
57
|
+
return shipId.data;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
/** The token kept in the session's folder; none without one. */
|
|
63
|
+
export async function readProxyToken(folder) {
|
|
64
|
+
const held = proxyTokenSchema.safeParse(parsedLine(await readFile(join(folder, FILE), 'utf8').catch(() => '')));
|
|
65
|
+
return held.success ? held.data : undefined;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=proxy-tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-tokens.js","sourceRoot":"","sources":["../../src/adapters/proxy-tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,14 @@ import type { SessionRuntime, WorkspacePort } from '../core/ports.js';
|
|
|
3
3
|
import type { SessionRoots } from './caller-check.js';
|
|
4
4
|
import type { TrustedClones } from './trusted-clones.js';
|
|
5
5
|
import type { TrierarchPaths } from './paths.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
import { type ProxyRuntime } from './proxy-runtime.js';
|
|
7
|
+
/** The model proxy on this machine (headless H16), started as a hold is. */
|
|
8
|
+
export declare function modelProxy(at: {
|
|
9
|
+
paths: TrierarchPaths;
|
|
10
|
+
version: string;
|
|
11
|
+
launch?: readonly string[];
|
|
12
|
+
}): ProxyRuntime;
|
|
13
|
+
/** The sessions on the host (headless H4, H8): one hold per ship. */
|
|
11
14
|
export declare function hostSessions(at: {
|
|
12
15
|
paths: TrierarchPaths;
|
|
13
16
|
version: string;
|
|
@@ -23,11 +26,13 @@ export interface RuntimeAdapters {
|
|
|
23
26
|
homes: string;
|
|
24
27
|
managedSettings: string;
|
|
25
28
|
};
|
|
29
|
+
/** Where a session reaches the model proxy the trierarch reaches at the url (headless H16): there on the host, at Podman's host address in a container. */
|
|
30
|
+
readonly modelProxyUrlOf: (url: string) => string;
|
|
26
31
|
}
|
|
27
32
|
/**
|
|
28
33
|
* The adapters the configuration's session runtime picks (decision 0039): on
|
|
29
34
|
* the host, a hold per ship and a worktree per ship (headless H4); in containers, a container per ship
|
|
30
|
-
* from the image of the trierarch's own version, with the configured binary
|
|
35
|
+
* run by its hold (H18), from the image of the trierarch's own version, with the configured binary
|
|
31
36
|
* and caps and the machine's model token, a clone per ship in place of the
|
|
32
37
|
* worktree, by its real path, and a home of each ship's own.
|
|
33
38
|
*/
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { realpath } from 'node:fs/promises';
|
|
2
2
|
import { fileURLToPath } from 'node:url';
|
|
3
3
|
import { createCloneWorkspace } from './clone-workspace.js';
|
|
4
|
-
import { createContainerRuntime } from './container.js';
|
|
4
|
+
import { containerProxyUrl, createContainerRuntime } from './container.js';
|
|
5
5
|
import { createGitWorkspace } from './git-workspace.js';
|
|
6
6
|
import { createHoldRuntime } from './hold-runtime.js';
|
|
7
|
-
import {
|
|
7
|
+
import { createProxyRuntime } from './proxy-runtime.js';
|
|
8
8
|
/** The session image `release.yml` publishes with each version (decision 0011, 0039). */
|
|
9
9
|
const SESSION_IMAGE = 'ghcr.io/thomashendrickx/aeolus-session';
|
|
10
10
|
/** The trierarch program as it runs now, which starts each hold: `hold` and its words follow. */
|
|
11
11
|
const TRIERARCH_PROGRAM = [process.execPath, fileURLToPath(new URL('../bin/aeolus-trierarch.js', import.meta.url))];
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*/
|
|
12
|
+
/** The model proxy on this machine (headless H16), started as a hold is. */
|
|
13
|
+
export function modelProxy(at) {
|
|
14
|
+
return createProxyRuntime({ folder: at.paths.proxy, sessions: at.paths.sessions, keys: at.paths.keys, program: TRIERARCH_PROGRAM, version: at.version, launch: at.launch ?? [] });
|
|
15
|
+
}
|
|
16
|
+
/** The sessions on the host (headless H4, H8): one hold per ship. */
|
|
17
17
|
export function hostSessions(at) {
|
|
18
|
-
return createHoldRuntime({ sessions: at.paths.sessions, program: at.program ?? TRIERARCH_PROGRAM, version: at.version, platform: process.platform, launch: at.launch ?? []
|
|
18
|
+
return createHoldRuntime({ sessions: at.paths.sessions, program: at.program ?? TRIERARCH_PROGRAM, version: at.version, platform: process.platform, launch: at.launch ?? [] });
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* The adapters the configuration's session runtime picks (decision 0039): on
|
|
22
22
|
* the host, a hold per ship and a worktree per ship (headless H4); in containers, a container per ship
|
|
23
|
-
* from the image of the trierarch's own version, with the configured binary
|
|
23
|
+
* run by its hold (H18), from the image of the trierarch's own version, with the configured binary
|
|
24
24
|
* and caps and the machine's model token, a clone per ship in place of the
|
|
25
25
|
* worktree, by its real path, and a home of each ship's own.
|
|
26
26
|
*/
|
|
@@ -29,14 +29,28 @@ export function runtimeAdaptersOf(at) {
|
|
|
29
29
|
const root = configuration.worktreeRoot ?? paths.worktrees;
|
|
30
30
|
const { runtime } = configuration;
|
|
31
31
|
if (runtime?.kind !== 'container') {
|
|
32
|
-
return { sessions: hostSessions({ paths, version, launch, ...(at.program !== undefined && { program: at.program }) }), workspace: createGitWorkspace({ configuration, root, ...(trusted !== undefined && { clones: trusted }) }) };
|
|
32
|
+
return { modelProxyUrlOf: (url) => url, sessions: hostSessions({ paths, version, launch, ...(at.program !== undefined && { program: at.program }) }), workspace: createGitWorkspace({ configuration, root, ...(trusted !== undefined && { clones: trusted }) }) };
|
|
33
33
|
}
|
|
34
34
|
const clones = createCloneWorkspace({ configuration, root, ...(trusted !== undefined && { clones: trusted }) });
|
|
35
35
|
return {
|
|
36
|
-
sessions: createContainerRuntime({
|
|
36
|
+
sessions: createContainerRuntime({
|
|
37
|
+
binary: runtime.binary,
|
|
38
|
+
image: `${SESSION_IMAGE}:${version}`,
|
|
39
|
+
tokenFile: paths.modelToken,
|
|
40
|
+
homes: paths.homes,
|
|
41
|
+
sockets: paths.sockets,
|
|
42
|
+
memory: runtime.memory,
|
|
43
|
+
cpus: runtime.cpus,
|
|
44
|
+
sessions: paths.sessions,
|
|
45
|
+
program: at.program ?? TRIERARCH_PROGRAM,
|
|
46
|
+
version,
|
|
47
|
+
platform: process.platform,
|
|
48
|
+
launch,
|
|
49
|
+
}),
|
|
37
50
|
// The container mounts the folder at the path it is given, where the plugin inside keys it by `pwd -P` as the host's does: one path for both, the real one.
|
|
38
51
|
workspace: { ...clones, prepare: async (at) => ({ folder: await realpath((await clones.prepare(at)).folder) }) },
|
|
39
52
|
shipHomes: { homes: paths.homes, managedSettings },
|
|
53
|
+
modelProxyUrlOf: containerProxyUrl,
|
|
40
54
|
};
|
|
41
55
|
}
|
|
42
56
|
//# sourceMappingURL=runtime-adapters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-adapters.js","sourceRoot":"","sources":["../../src/adapters/runtime-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAMzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-adapters.js","sourceRoot":"","sources":["../../src/adapters/runtime-adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,7 +41,7 @@ export interface Service {
|
|
|
41
41
|
}
|
|
42
42
|
/** Runs a program and answers how it ended. */
|
|
43
43
|
export type Exec = (command: string, args: readonly string[]) => Promise<CommandResult>;
|
|
44
|
-
/** The service's environment: PATH, so it finds
|
|
44
|
+
/** The service's environment: PATH, so it finds git, claude, codex and the container runtime, and the trierarch's own variables. */
|
|
45
45
|
export declare function serviceEnvironment(env: Readonly<Record<string, string | undefined>>): Record<string, string>;
|
|
46
46
|
export declare function createService(options: {
|
|
47
47
|
platform: string;
|
package/dist/adapters/service.js
CHANGED
|
@@ -12,7 +12,7 @@ export const SYSTEMD_UNIT = 'aeolus-trierarch.service';
|
|
|
12
12
|
/** The variables the trierarch itself reads, carried into the service when set where install ran. */
|
|
13
13
|
const TRIERARCH_VARIABLES = ['AEOLUS_PLUGIN_ROOT', 'AEOLUS_PLUGIN_DATA', 'AEOLUS_CODEX_PLUGIN_ROOT', 'AEOLUS_CODEX_PLUGIN_DATA', 'CODEX_HOME', 'CLAUDE_CONFIG_DIR', 'AEOLUS_TRIERARCH_CONFIG'];
|
|
14
14
|
const DEFAULT_PATH = '/usr/bin:/bin';
|
|
15
|
-
/** The service's environment: PATH, so it finds
|
|
15
|
+
/** The service's environment: PATH, so it finds git, claude, codex and the container runtime, and the trierarch's own variables. */
|
|
16
16
|
export function serviceEnvironment(env) {
|
|
17
17
|
const environment = { PATH: env.PATH ?? DEFAULT_PATH };
|
|
18
18
|
for (const name of TRIERARCH_VARIABLES) {
|
|
@@ -69,7 +69,7 @@ ExecStart="${at.run.node}" "${at.run.script}" run
|
|
|
69
69
|
${variables}
|
|
70
70
|
Restart=always
|
|
71
71
|
RestartSec=5
|
|
72
|
-
# The sessions run
|
|
72
|
+
# The sessions run under holds the trierarch starts, each in a scope of its own: a stop ends the trierarch only (#479).
|
|
73
73
|
KillMode=process
|
|
74
74
|
|
|
75
75
|
[Install]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/adapters/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,4BAA4B,CAAC;AAC1D,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAsCvD,qGAAqG;AACrG,MAAM,mBAAmB,GAAG,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,YAAY,EAAE,mBAAmB,EAAE,yBAAyB,CAAU,CAAC;AAExM,MAAM,YAAY,GAAG,eAAe,CAAC;AAErC,
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/adapters/service.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/trust.d.ts
CHANGED
|
@@ -7,7 +7,8 @@ import type { TrustPort } from '../core/ports.js';
|
|
|
7
7
|
* repository; a folder when its path is. A harness with no reader trusts
|
|
8
8
|
* nothing. Claude Code's skip-permissions flag is unaccepted until bypass
|
|
9
9
|
* permissions mode is accepted in its settings (#403); Codex asks about no
|
|
10
|
-
* flag.
|
|
10
|
+
* flag. Copilot asks about no folder in `copilot -p`, so it trusts every
|
|
11
|
+
* configured place (Copilot CLI 1.0.105, in a new folder it never saw).
|
|
11
12
|
*/
|
|
12
13
|
export declare function createTrust(at: {
|
|
13
14
|
configuration: TrierarchConfiguration;
|
package/dist/adapters/trust.js
CHANGED
|
@@ -8,14 +8,17 @@ import { codexTrustedFolders } from './codex-setup.js';
|
|
|
8
8
|
* repository; a folder when its path is. A harness with no reader trusts
|
|
9
9
|
* nothing. Claude Code's skip-permissions flag is unaccepted until bypass
|
|
10
10
|
* permissions mode is accepted in its settings (#403); Codex asks about no
|
|
11
|
-
* flag.
|
|
11
|
+
* flag. Copilot asks about no folder in `copilot -p`, so it trusts every
|
|
12
|
+
* configured place (Copilot CLI 1.0.105, in a new folder it never saw).
|
|
12
13
|
*/
|
|
13
14
|
export function createTrust(at) {
|
|
14
15
|
const { configuration, homeDirectory, env, managedSettings } = at;
|
|
15
16
|
const claudeCode = createClaudeCodeSetup({ homeDirectory, managedSettings, ...(env.CLAUDE_CONFIG_DIR !== undefined && { configDirectory: env.CLAUDE_CONFIG_DIR }) });
|
|
17
|
+
const configured = new Set([...Object.values(configuration.repositories), ...Object.values(configuration.folders)].map((place) => place.path));
|
|
16
18
|
const readers = {
|
|
17
19
|
'claude-code': () => claudeCode.trustedFolders(),
|
|
18
20
|
codex: () => codexTrustedFolders({ homeDirectory, env }),
|
|
21
|
+
copilot: () => Promise.resolve(configured),
|
|
19
22
|
};
|
|
20
23
|
const unaccepted = {
|
|
21
24
|
'claude-code': async () => ((await claudeCode.isSkipPermissionsAccepted()) ? [] : [SKIP_PERMISSIONS]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/adapters/trust.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD
|
|
1
|
+
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/adapters/trust.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,EAAgJ;IAC1K,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC;IAClE,MAAM,UAAU,GAAG,qBAAqB,CAAC,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,iBAAiB,KAAK,SAAS,IAAI,EAAE,eAAe,EAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;IACrK,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/I,MAAM,OAAO,GAA+E;QAC1F,aAAa,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE;QAChD,KAAK,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;QACxD,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;KAC3C,CAAC;IACF,MAAM,UAAU,GAA6E;QAC3F,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;KACtG,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,MAA8C,EAAE,OAA4B,EAAY,EAAE,CACzG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACnB,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC9C,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAE3B,OAAO;QACL,OAAO,EAAE,KAAK,IAA4B,EAAE;YAC1C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBACzD,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;gBAClE,MAAM,eAAe,GAAG,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;gBAC9D,OAAO,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,EAAE,CAAU,CAAC;YAC/J,CAAC,CAAC,CACH,CAAC;YACF,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* What a vendor's answer to a request on a key says of the key (api keys K9),
|
|
4
|
+
* as each vendor documents its errors: refused for a key it does not take,
|
|
5
|
+
* out of credit for a billing problem or a spend limit; nothing for a rate
|
|
6
|
+
* limit or a server error, which the harness waits out and retries.
|
|
7
|
+
*/
|
|
8
|
+
const HTTP_UNAUTHORIZED = 401;
|
|
9
|
+
const HTTP_PAYMENT_REQUIRED = 402;
|
|
10
|
+
const anthropicSchema = z.object({ error: z.object({ type: z.string(), message: z.string().optional() }) });
|
|
11
|
+
const openAiSchema = z.object({ error: z.object({ type: z.string().nullish(), code: z.string().nullish() }) });
|
|
12
|
+
/** Anthropic names no code of its own for a spend limit or an empty balance: its messages say it. */
|
|
13
|
+
const ANTHROPIC_CREDIT = /credit balance|usage limits|spend limit/iu;
|
|
14
|
+
const OPENAI_CREDIT = new Set(['insufficient_quota', 'credit_balance_exhausted', 'organization_spend_limit_exceeded', 'project_spend_limit_exceeded']);
|
|
15
|
+
function parsed(body) {
|
|
16
|
+
try {
|
|
17
|
+
return JSON.parse(body);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function keyStateOfAnswer(answer) {
|
|
24
|
+
const { harness, status } = answer;
|
|
25
|
+
if (status >= 200 && status < 300) {
|
|
26
|
+
return 'ready';
|
|
27
|
+
}
|
|
28
|
+
if (status === HTTP_UNAUTHORIZED) {
|
|
29
|
+
return 'refused';
|
|
30
|
+
}
|
|
31
|
+
if (harness === 'claude-code') {
|
|
32
|
+
const error = anthropicSchema.safeParse(parsed(answer.body)).data?.error;
|
|
33
|
+
return status === HTTP_PAYMENT_REQUIRED || error?.type === 'billing_error' || ANTHROPIC_CREDIT.test(error?.message ?? '') ? 'outOfCredit' : undefined;
|
|
34
|
+
}
|
|
35
|
+
const error = openAiSchema.safeParse(parsed(answer.body)).data?.error;
|
|
36
|
+
return [error?.code, error?.type].some((name) => name !== undefined && name !== null && OPENAI_CREDIT.has(name)) ? 'outOfCredit' : undefined;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=vendor-answers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendor-answers.js","sourceRoot":"","sources":["../../src/adapters/vendor-answers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;GAKG;AAEH,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5G,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAE/G,qGAAqG;AACrG,MAAM,gBAAgB,GAAG,2CAA2C,CAAC;AACrE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,oBAAoB,EAAE,0BAA0B,EAAE,mCAAmC,EAAE,8BAA8B,CAAC,CAAC,CAAC;AAEvJ,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAgE;IAC/F,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACnC,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,MAAM,KAAK,iBAAiB,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;QACzE,OAAO,MAAM,KAAK,qBAAqB,IAAI,KAAK,EAAE,IAAI,KAAK,eAAe,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IACxJ,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;IACtE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/I,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PluginHarness } from './plugin.js';
|
|
2
|
+
/**
|
|
3
|
+
* Checks an API key with one free call to its harness's vendor, the model list
|
|
4
|
+
* (api keys K11), before `login` writes it. The cause it gives names the
|
|
5
|
+
* vendor's status and error type or code, never the vendor's message: OpenAI's
|
|
6
|
+
* quotes part of the key (K7). Nor a failed request's own message, which
|
|
7
|
+
* quotes a header it could not send: a key that cannot be a header is refused
|
|
8
|
+
* before anything is sent.
|
|
9
|
+
*/
|
|
10
|
+
export type KeyCheck = {
|
|
11
|
+
readonly kind: 'taken';
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: 'refused';
|
|
14
|
+
readonly cause: string;
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: 'unreachable';
|
|
17
|
+
readonly cause: string;
|
|
18
|
+
};
|
|
19
|
+
export declare function checkKey(at: {
|
|
20
|
+
harness: PluginHarness;
|
|
21
|
+
key: string;
|
|
22
|
+
vendorUrl?: string;
|
|
23
|
+
}): Promise<KeyCheck>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const ANTHROPIC_VERSION = '2023-06-01';
|
|
3
|
+
const CHECK_TIMEOUT_MS = 15_000;
|
|
4
|
+
const VENDORS = {
|
|
5
|
+
'claude-code': { name: 'Anthropic', url: 'https://api.anthropic.com', headers: (key) => ({ 'x-api-key': key, 'anthropic-version': ANTHROPIC_VERSION }) },
|
|
6
|
+
codex: { name: 'OpenAI', url: 'https://api.openai.com', headers: (key) => ({ authorization: `Bearer ${key}` }) },
|
|
7
|
+
};
|
|
8
|
+
/** What an API key is made of: visible ASCII, no space or line break, so it can travel as a header. */
|
|
9
|
+
const KEY_PATTERN = /^[\x21-\x7e]+$/u;
|
|
10
|
+
/** How Node names why a request found no server, such as ECONNREFUSED. */
|
|
11
|
+
const causeSchema = z.object({ cause: z.object({ code: z.string() }) });
|
|
12
|
+
/** Both vendors answer an error as `{ error: { type, code? } }`; OpenAI's code is the more precise. */
|
|
13
|
+
const errorSchema = z.object({ error: z.object({ type: z.string().optional(), code: z.string().nullish() }) });
|
|
14
|
+
export async function checkKey(at) {
|
|
15
|
+
const vendor = VENDORS[at.harness];
|
|
16
|
+
const url = at.vendorUrl ?? vendor.url;
|
|
17
|
+
if (!KEY_PATTERN.test(at.key)) {
|
|
18
|
+
return { kind: 'refused', cause: 'The key holds a character no API key holds, such as a line break or a space' };
|
|
19
|
+
}
|
|
20
|
+
let response;
|
|
21
|
+
try {
|
|
22
|
+
response = await fetch(`${url}/v1/models`, { headers: vendor.headers(at.key), signal: AbortSignal.timeout(CHECK_TIMEOUT_MS) });
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
const code = causeSchema.safeParse(error);
|
|
26
|
+
const reason = code.success ? code.data.cause.code : 'no answer';
|
|
27
|
+
return { kind: 'unreachable', cause: `${vendor.name} could not be reached at ${url} (${reason})` };
|
|
28
|
+
}
|
|
29
|
+
if (response.ok) {
|
|
30
|
+
return { kind: 'taken' };
|
|
31
|
+
}
|
|
32
|
+
const parsed = errorSchema.safeParse(await response.json().catch(() => undefined));
|
|
33
|
+
const errorName = parsed.success ? (parsed.data.error.code ?? parsed.data.error.type) : undefined;
|
|
34
|
+
return { kind: 'refused', cause: `${vendor.name} refused the key: ${String(response.status)}${errorName === undefined ? '' : ` ${errorName}`}` };
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=vendor-key-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendor-key-check.js","sourceRoot":"","sources":["../../src/adapters/vendor-key-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* `aeolus-trierarch`: runs a trierarch on this machine (docs/trierarch.md).
|
|
4
|
-
* See `main.ts` for its commands. A session's hold (`hold`)
|
|
5
|
-
*
|
|
4
|
+
* See `main.ts` for its commands. A session's hold (`hold`) and the model
|
|
5
|
+
* proxy (`proxy`) load only what they need: they run for as long as the
|
|
6
|
+
* sessions do.
|
|
6
7
|
*/
|
|
7
8
|
const [command, ...words] = process.argv.slice(2);
|
|
8
9
|
if (command === 'hold') {
|
|
9
10
|
const { holdCommand } = await import('../cli/hold.js');
|
|
10
11
|
process.exitCode = await holdCommand(words, { env: process.env, platform: process.platform });
|
|
11
12
|
}
|
|
13
|
+
else if (command === 'proxy') {
|
|
14
|
+
const { proxyCommand } = await import('../cli/proxy.js');
|
|
15
|
+
process.exitCode = await proxyCommand(words);
|
|
16
|
+
}
|
|
12
17
|
else {
|
|
13
18
|
const { CLAUDE_CODE_MANAGED_SETTINGS } = await import('../adapters/claude-code-setup.js');
|
|
14
19
|
const { main } = await import('../cli/main.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aeolus-trierarch.js","sourceRoot":"","sources":["../../src/bin/aeolus-trierarch.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"aeolus-trierarch.js","sourceRoot":"","sources":["../../src/bin/aeolus-trierarch.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACvD,OAAO,CAAC,QAAQ,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChG,CAAC;KAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;IAC/B,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACzD,OAAO,CAAC,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;KAAM,CAAC;IACN,MAAM,EAAE,4BAA4B,EAAE,GAAG,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC;IAC1F,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,4BAA4B,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnJ,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;AAClC,CAAC"}
|
package/dist/cli/add.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ import { type PlaceKind } from './places.js';
|
|
|
9
9
|
* the trierarch may crew ships in, and trusts it, in one step. Adding a place
|
|
10
10
|
* is what trusts it: it is checked as init checks it, written to the
|
|
11
11
|
* configuration, and trusted for every configured harness that asks. Then the
|
|
12
|
-
* service restarts so the trierarch reads it; its sessions run
|
|
13
|
-
*
|
|
12
|
+
* service restarts so the trierarch reads it; its sessions run under holds of
|
|
13
|
+
* their own and keep running. It reports once the new process has said its
|
|
14
14
|
* version (#402). A place it holds under the same name and path
|
|
15
15
|
* is trusted again.
|
|
16
16
|
*/
|
package/dist/cli/config-check.js
CHANGED
|
@@ -41,7 +41,7 @@ export async function configCheck(paths, machine) {
|
|
|
41
41
|
flags,
|
|
42
42
|
options: Object.fromEntries(Object.entries(harness.options).map(([option, settings]) => [option, settings.values])),
|
|
43
43
|
adapterFlags: adapterFlags[name] ?? [],
|
|
44
|
-
...(await commandLinesOf({ harness: name, flags, files, permissionModes: detected[name]?.permissionModes
|
|
44
|
+
...(await commandLinesOf({ harness: name, flags, files, permissionModes: detected[name]?.permissionModes })),
|
|
45
45
|
},
|
|
46
46
|
];
|
|
47
47
|
})));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-check.js","sourceRoot":"","sources":["../../src/cli/config-check.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config-check.js","sourceRoot":"","sources":["../../src/cli/config-check.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/hold.js
CHANGED
|
@@ -4,16 +4,23 @@ import { idSchema } from '@aeolus-fleet/common';
|
|
|
4
4
|
import { createTrierarchCallerCheck } from '../adapters/caller-check.js';
|
|
5
5
|
import { runHold } from '../adapters/hold.js';
|
|
6
6
|
import { holdFilesOf } from '../adapters/hold-protocol.js';
|
|
7
|
+
import { readProxyToken } from '../adapters/proxy-tokens.js';
|
|
7
8
|
import { runningVersion } from '../adapters/version.js';
|
|
8
9
|
/**
|
|
9
10
|
* `aeolus-trierarch hold <ship id> --sessions <folder> --folder <folder>
|
|
10
11
|
* --harness <name> [--env NAME=value]... -- <command>...`: the hold of one
|
|
11
12
|
* session (headless H8), as the trierarch starts it, never a person. The
|
|
12
|
-
* harness's environment is built from nothing (H10): HOME
|
|
13
|
-
* hold's own, then each `--env` given
|
|
13
|
+
* harness's environment is built from nothing (H10): HOME, PATH, USER and
|
|
14
|
+
* LOGNAME from the hold's own, then each `--env` given, and with
|
|
15
|
+
* `--proxy-token-variable` the session's proxy token from its folder in that
|
|
16
|
+
* variable (api keys K7); nothing else of the trierarch's.
|
|
14
17
|
*/
|
|
15
|
-
/**
|
|
16
|
-
|
|
18
|
+
/**
|
|
19
|
+
* What the harness takes of the hold's own environment; everything else it is
|
|
20
|
+
* given. USER and LOGNAME name the user: on macOS Claude Code finds its login
|
|
21
|
+
* in the Keychain by them, and without them it is not logged in.
|
|
22
|
+
*/
|
|
23
|
+
const KEPT_VARIABLES = ['HOME', 'PATH', 'USER', 'LOGNAME'];
|
|
17
24
|
/** The harness's environment, from the hold's own and the variables given. */
|
|
18
25
|
export function harnessEnvironment(own, given) {
|
|
19
26
|
const kept = KEPT_VARIABLES.flatMap((variable) => {
|
|
@@ -47,12 +54,19 @@ export async function holdCommand(words, at) {
|
|
|
47
54
|
const separator = pair?.indexOf('=') ?? -1;
|
|
48
55
|
return pair === undefined || separator < 1 ? [] : [[pair.slice(0, separator), pair.slice(separator + 1)]];
|
|
49
56
|
}));
|
|
57
|
+
const files = holdFilesOf(sessions, shipId.data);
|
|
58
|
+
const tokenVariable = options.includes('--proxy-token-variable') ? valueOf('--proxy-token-variable') : undefined;
|
|
59
|
+
const proxyToken = tokenVariable === undefined ? undefined : await readProxyToken(files.folder);
|
|
60
|
+
if (tokenVariable !== undefined && proxyToken === undefined) {
|
|
61
|
+
process.stderr.write(`No proxy token in ${files.folder}\n`);
|
|
62
|
+
return 2;
|
|
63
|
+
}
|
|
50
64
|
return runHold({
|
|
51
|
-
files
|
|
65
|
+
files,
|
|
52
66
|
folder,
|
|
53
67
|
harness,
|
|
54
68
|
command,
|
|
55
|
-
environment: harnessEnvironment(at.env, given),
|
|
69
|
+
environment: harnessEnvironment(at.env, { ...given, ...(tokenVariable !== undefined && proxyToken !== undefined && { [tokenVariable]: proxyToken.token }) }),
|
|
56
70
|
version: runningVersion(),
|
|
57
71
|
mayCall: createTrierarchCallerCheck({ platform: at.platform, sessionRoots: () => holdPids(sessions) }),
|
|
58
72
|
});
|
package/dist/cli/hold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hold.js","sourceRoot":"","sources":["../../src/cli/hold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD
|
|
1
|
+
{"version":3,"file":"hold.js","sourceRoot":"","sources":["../../src/cli/hold.ts"],"names":[],"mappings":"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"}
|