@aeolus-fleet/trierarch 0.32.1 → 0.33.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 +11 -11
- package/dist/adapters/caller-check.d.ts +14 -0
- package/dist/adapters/caller-check.js +30 -0
- package/dist/adapters/caller-check.js.map +1 -1
- package/dist/adapters/claude-code.d.ts +26 -6
- package/dist/adapters/claude-code.js +54 -33
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/adapters/clone-workspace.js +10 -1
- package/dist/adapters/clone-workspace.js.map +1 -1
- package/dist/adapters/codex.d.ts +47 -16
- package/dist/adapters/codex.js +82 -45
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/container.d.ts +4 -2
- package/dist/adapters/container.js +24 -17
- package/dist/adapters/container.js.map +1 -1
- package/dist/adapters/files.d.ts +6 -0
- package/dist/adapters/files.js +16 -0
- package/dist/adapters/files.js.map +1 -1
- package/dist/adapters/git-workspace.js +21 -4
- package/dist/adapters/git-workspace.js.map +1 -1
- package/dist/adapters/harnesses.d.ts +4 -3
- package/dist/adapters/harnesses.js +6 -7
- package/dist/adapters/harnesses.js.map +1 -1
- package/dist/adapters/hold-protocol.d.ts +50 -0
- package/dist/adapters/hold-protocol.js +58 -0
- package/dist/adapters/hold-protocol.js.map +1 -0
- package/dist/adapters/hold-runtime.d.ts +36 -0
- package/dist/adapters/hold-runtime.js +146 -0
- package/dist/adapters/hold-runtime.js.map +1 -0
- package/dist/adapters/hold.d.ts +41 -0
- package/dist/adapters/hold.js +310 -0
- package/dist/adapters/hold.js.map +1 -0
- package/dist/adapters/paths.d.ts +2 -0
- package/dist/adapters/paths.js +1 -0
- package/dist/adapters/paths.js.map +1 -1
- package/dist/adapters/plugin-update.js +2 -0
- package/dist/adapters/plugin-update.js.map +1 -1
- package/dist/adapters/runtime-adapters.d.ts +14 -1
- package/dist/adapters/runtime-adapters.js +14 -2
- package/dist/adapters/runtime-adapters.js.map +1 -1
- package/dist/adapters/stop-turn.d.ts +5 -5
- package/dist/adapters/stop-turn.js +6 -6
- package/dist/adapters/stop-turn.js.map +1 -1
- package/dist/adapters/tmux.d.ts +7 -30
- package/dist/adapters/tmux.js +9 -107
- package/dist/adapters/tmux.js.map +1 -1
- package/dist/bin/aeolus-trierarch.js +16 -7
- package/dist/bin/aeolus-trierarch.js.map +1 -1
- package/dist/cli/config-check.js +1 -1
- package/dist/cli/config-check.js.map +1 -1
- package/dist/cli/hold.d.ts +7 -0
- package/dist/cli/hold.js +60 -0
- package/dist/cli/hold.js.map +1 -0
- package/dist/cli/init.d.ts +4 -0
- package/dist/cli/init.js +17 -11
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.js +7 -4
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/run.js +1 -1
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/upgrade.d.ts +6 -1
- package/dist/cli/upgrade.js +10 -2
- package/dist/cli/upgrade.js.map +1 -1
- package/dist/core/check-session-runtime.d.ts +5 -3
- package/dist/core/check-session-runtime.js +13 -14
- package/dist/core/check-session-runtime.js.map +1 -1
- package/dist/core/ports.d.ts +18 -12
- package/dist/core/reconciler.js +20 -5
- package/dist/core/reconciler.js.map +1 -1
- package/dist/core/remote-control.d.ts +15 -0
- package/dist/core/remote-control.js +30 -0
- package/dist/core/remote-control.js.map +1 -0
- package/package.json +1 -1
- package/dist/adapters/codex-screen.d.ts +0 -1
- package/dist/adapters/codex-screen.js +0 -19
- package/dist/adapters/codex-screen.js.map +0 -1
- package/dist/adapters/codex-session-log.d.ts +0 -8
- package/dist/adapters/codex-session-log.js +0 -45
- package/dist/adapters/codex-session-log.js.map +0 -1
package/dist/adapters/codex.d.ts
CHANGED
|
@@ -1,39 +1,70 @@
|
|
|
1
1
|
import type { TrierarchConfiguration } from '@aeolus-fleet/common';
|
|
2
|
+
import { z } from 'zod';
|
|
2
3
|
import type { AdapterFlag, HarnessPort, SessionRuntime } from '../core/ports.js';
|
|
3
4
|
import type { CodexSetup } from './codex-setup.js';
|
|
4
5
|
import { type CommandPart } from './command-line.js';
|
|
5
6
|
import { type AeolusPlugin } from './plugin-identity.js';
|
|
6
7
|
/**
|
|
7
|
-
* Codex as a harness (docs/architecture.md, "First adapters")
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* aeolus-fleet
|
|
14
|
-
*
|
|
15
|
-
*
|
|
8
|
+
* Codex as a harness (docs/architecture.md, "First adapters"), headless
|
|
9
|
+
* (headless H11): one `codex exec --json` per turn in the folder, the first
|
|
10
|
+
* with the first prompt, a restart `codex exec resume --last` (the folder's
|
|
11
|
+
* last conversation; one ship per folder), and every later turn `codex exec
|
|
12
|
+
* resume <thread id>`, which the hold starts for each line it is sent; between
|
|
13
|
+
* turns no Codex process runs. Always without the question tool, and
|
|
14
|
+
* `$aeolus-fleet-wake` sent to wake an idle session, each prompt with the line that
|
|
15
|
+
* no human reads its terminal (#585). The identity and the turn marker go
|
|
16
|
+
* through the aeolus-fleet plugin for Codex, in Codex's own plugin data folder,
|
|
17
|
+
* whose hooks run in `codex exec` as in a terminal. The plugin's new or
|
|
18
|
+
* changed hooks are trusted before every launch: a plugin update changes them,
|
|
19
|
+
* and Codex runs none it does not trust (#581).
|
|
16
20
|
*/
|
|
17
21
|
export declare const WAKE_PROMPT = "$aeolus-fleet-wake";
|
|
18
|
-
/**
|
|
19
|
-
* How long a typed wake waits before Enter. Codex takes an Enter that comes
|
|
20
|
-
* right after fast typing as part of a paste, a newline, and submits nothing.
|
|
21
|
-
*/
|
|
22
|
-
export declare const CODEX_TYPING_SETTLE_MS = 1000;
|
|
23
22
|
export declare const CODEX_ADAPTER_FLAGS: readonly AdapterFlag[];
|
|
24
23
|
/** The flags of Codex that are risky: it then runs every command without approval and outside its sandbox (#326). */
|
|
25
24
|
export declare const CODEX_RISKY_FLAGS: readonly string[];
|
|
26
|
-
/** `codex`, or `codex resume --last` on a restart, then the configured flags, --
|
|
25
|
+
/** `codex exec`, or `codex exec resume --last` on a restart, then the configured flags, --json, the question tool off, and the prompt last after `--`, so it never reads as a flag. */
|
|
27
26
|
export declare function codexCommandLine(at: {
|
|
28
27
|
flags: readonly string[];
|
|
29
28
|
prompt: string;
|
|
30
29
|
isFirstStart: boolean;
|
|
31
30
|
program?: string;
|
|
32
31
|
}): CommandPart[];
|
|
32
|
+
/**
|
|
33
|
+
* The command of a later turn (headless H11): the session's start command,
|
|
34
|
+
* resuming its thread by id instead of the folder's last conversation, with
|
|
35
|
+
* the line as its prompt after `--`.
|
|
36
|
+
*/
|
|
37
|
+
export declare function codexTurnCommand(at: {
|
|
38
|
+
start: readonly string[];
|
|
39
|
+
threadId: string;
|
|
40
|
+
line: string;
|
|
41
|
+
}): string[];
|
|
42
|
+
/** The event of `codex exec --json` that names the session's thread, which a later turn resumes (H11). */
|
|
43
|
+
export declare const codexThreadStartedSchema: z.ZodObject<{
|
|
44
|
+
type: z.ZodLiteral<"thread.started">;
|
|
45
|
+
thread_id: z.ZodString;
|
|
46
|
+
}, z.core.$strip>;
|
|
47
|
+
/**
|
|
48
|
+
* Why Codex's start failed, from its last error event (headless H13): the
|
|
49
|
+
* model it refused when that is the model it launched with (or any, when it
|
|
50
|
+
* launched with none, so Codex's own default), or else the error's message.
|
|
51
|
+
* Codex has no hook for a failed turn (#490). Its event shapes are tested on
|
|
52
|
+
* events captured from `codex exec --json` (test/logs).
|
|
53
|
+
*/
|
|
54
|
+
export declare function codexErrorIn(at: {
|
|
55
|
+
events: readonly string[];
|
|
56
|
+
model?: string;
|
|
57
|
+
}): {
|
|
58
|
+
kind: 'refused';
|
|
59
|
+
model: string;
|
|
60
|
+
} | {
|
|
61
|
+
kind: 'cause';
|
|
62
|
+
cause: string;
|
|
63
|
+
} | undefined;
|
|
33
64
|
export declare function createCodexHarness(options: {
|
|
34
65
|
configuration: TrierarchConfiguration;
|
|
35
66
|
plugin: AeolusPlugin;
|
|
36
|
-
sessions: Pick<SessionRuntime, 'start' | '
|
|
67
|
+
sessions: Pick<SessionRuntime, 'start' | 'send' | 'interrupt' | 'events'>;
|
|
37
68
|
/** Codex's own answers, where the aeolus-fleet plugin's hooks are trusted before each launch (#581). */
|
|
38
69
|
setup: Pick<CodexSetup, 'trustAeolusHooks'>;
|
|
39
70
|
/** The program to run; `codex` unless a test runs another. */
|
package/dist/adapters/codex.js
CHANGED
|
@@ -1,68 +1,108 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
import { LAUNCH_VARIABLE } from './claude-code.js';
|
|
3
|
-
import { codexScreenStoppedAt } from './codex-screen.js';
|
|
4
|
-
import { codexModelRefusedIn } from './codex-session-log.js';
|
|
5
3
|
import { partsWithWords, wordsOf } from './command-line.js';
|
|
6
4
|
import { effectiveFlags } from '../core/effective-flags.js';
|
|
7
5
|
import { firstPromptOf, wakePromptOf } from '../core/no-terminal-questions.js';
|
|
6
|
+
import { parsedLine } from './hold-protocol.js';
|
|
8
7
|
import { createLaunchMarks } from './launch-marker.js';
|
|
9
8
|
import { createPluginIdentity } from './plugin-identity.js';
|
|
10
|
-
import { stopTurn } from './stop-turn.js';
|
|
11
9
|
/**
|
|
12
|
-
* Codex as a harness (docs/architecture.md, "First adapters")
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* aeolus-fleet
|
|
19
|
-
*
|
|
20
|
-
*
|
|
10
|
+
* Codex as a harness (docs/architecture.md, "First adapters"), headless
|
|
11
|
+
* (headless H11): one `codex exec --json` per turn in the folder, the first
|
|
12
|
+
* with the first prompt, a restart `codex exec resume --last` (the folder's
|
|
13
|
+
* last conversation; one ship per folder), and every later turn `codex exec
|
|
14
|
+
* resume <thread id>`, which the hold starts for each line it is sent; between
|
|
15
|
+
* turns no Codex process runs. Always without the question tool, and
|
|
16
|
+
* `$aeolus-fleet-wake` sent to wake an idle session, each prompt with the line that
|
|
17
|
+
* no human reads its terminal (#585). The identity and the turn marker go
|
|
18
|
+
* through the aeolus-fleet plugin for Codex, in Codex's own plugin data folder,
|
|
19
|
+
* whose hooks run in `codex exec` as in a terminal. The plugin's new or
|
|
20
|
+
* changed hooks are trusted before every launch: a plugin update changes them,
|
|
21
|
+
* and Codex runs none it does not trust (#581).
|
|
21
22
|
*/
|
|
22
23
|
export const WAKE_PROMPT = '$aeolus-fleet-wake';
|
|
24
|
+
/** Added to every launch, as mechanism: the turn's events as JSON lines, which the hold keeps (headless H13, H14). */
|
|
25
|
+
const JSON_EVENTS = '--json';
|
|
23
26
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
|
|
27
|
-
export const CODEX_TYPING_SETTLE_MS = 1000;
|
|
28
|
-
/**
|
|
29
|
-
* Added to every launch, as mechanism: without it Codex runs the session's
|
|
30
|
-
* work in its shared app-server daemon, which keeps a turn running after the
|
|
31
|
-
* pane is gone, so a release or a crash would stop the pane but not the work.
|
|
27
|
+
* Left out of the configured flags: `codex exec` does not take it, and runs
|
|
28
|
+
* its turn in its own process, so a stop stops its work. Configurations
|
|
29
|
+
* written for Codex in a terminal may still carry it.
|
|
32
30
|
*/
|
|
33
31
|
const NO_DAEMON = '--no-daemon';
|
|
34
32
|
/**
|
|
35
33
|
* Added to every launch: Codex's question tool (request_user_input) waits for
|
|
36
|
-
* an answer
|
|
37
|
-
*
|
|
34
|
+
* an answer nobody gives, and would hold the turn. The session asks its
|
|
35
|
+
* questions over the fleet instead (#460).
|
|
38
36
|
*/
|
|
39
37
|
const NO_QUESTION_TOOL = '--config=tools.experimental_request_user_input.enabled=false';
|
|
40
38
|
const END_OF_FLAGS = '--';
|
|
39
|
+
const EXEC = 'exec';
|
|
40
|
+
const RESUME = 'resume';
|
|
41
|
+
const LAST = '--last';
|
|
41
42
|
export const CODEX_ADAPTER_FLAGS = [
|
|
42
|
-
{ flag:
|
|
43
|
+
{ flag: JSON_EVENTS, when: 'always' },
|
|
43
44
|
{ flag: NO_QUESTION_TOOL, when: 'always' },
|
|
44
45
|
];
|
|
45
46
|
/** The flags of Codex that are risky: it then runs every command without approval and outside its sandbox (#326). */
|
|
46
47
|
export const CODEX_RISKY_FLAGS = ['--dangerously-bypass-approvals-and-sandbox'];
|
|
47
|
-
/** `codex`, or `codex resume --last` on a restart, then the configured flags, --
|
|
48
|
+
/** `codex exec`, or `codex exec resume --last` on a restart, then the configured flags, --json, the question tool off, and the prompt last after `--`, so it never reads as a flag. */
|
|
48
49
|
export function codexCommandLine(at) {
|
|
49
50
|
const program = at.program ?? 'codex';
|
|
50
51
|
return partsWithWords([
|
|
51
|
-
{ words: at.isFirstStart ? [program] : [program,
|
|
52
|
+
{ words: at.isFirstStart ? [program, EXEC] : [program, EXEC, RESUME, LAST] },
|
|
52
53
|
{ words: at.flags.filter((flag) => flag !== NO_DAEMON), source: 'configuration' },
|
|
53
|
-
{ words: [
|
|
54
|
+
{ words: [JSON_EVENTS], source: 'adapter' },
|
|
54
55
|
{ words: [NO_QUESTION_TOOL], source: 'adapter' },
|
|
55
56
|
{ words: [END_OF_FLAGS, at.prompt] },
|
|
56
57
|
]);
|
|
57
58
|
}
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
/**
|
|
60
|
+
* The command of a later turn (headless H11): the session's start command,
|
|
61
|
+
* resuming its thread by id instead of the folder's last conversation, with
|
|
62
|
+
* the line as its prompt after `--`.
|
|
63
|
+
*/
|
|
64
|
+
export function codexTurnCommand(at) {
|
|
65
|
+
const end = at.start.lastIndexOf(END_OF_FLAGS);
|
|
66
|
+
const words = end === -1 ? at.start : at.start.slice(0, end);
|
|
67
|
+
// The program is every word before exec: a test runs Codex's stand-in as Node and its script.
|
|
68
|
+
const exec = words.indexOf(EXEC);
|
|
69
|
+
const rest = words.slice(exec + 1);
|
|
70
|
+
const flags = rest[0] === RESUME && rest[1] === LAST ? rest.slice(2) : rest;
|
|
71
|
+
return [...words.slice(0, exec), EXEC, RESUME, at.threadId, ...flags, END_OF_FLAGS, at.line];
|
|
72
|
+
}
|
|
73
|
+
/** The event of `codex exec --json` that names the session's thread, which a later turn resumes (H11). */
|
|
74
|
+
export const codexThreadStartedSchema = z.object({ type: z.literal('thread.started'), thread_id: z.string().min(1) });
|
|
75
|
+
/** Codex's error events in `codex exec --json`: a failed turn, or an error the turn met. */
|
|
76
|
+
const errorEventSchema = z.union([z.object({ type: z.literal('turn.failed'), error: z.object({ message: z.string() }) }), z.object({ type: z.literal('error'), message: z.string() })]);
|
|
77
|
+
/** The API error an error event carries as JSON text in its message, as Codex passes a refusal on. */
|
|
78
|
+
const apiErrorSchema = z.object({ error: z.object({ message: z.string(), code: z.string().optional() }) });
|
|
79
|
+
const NOT_SUPPORTED = /^The '([^']+)' model is not supported/u;
|
|
80
|
+
/** The harness's last error event in its events, as its message says it: an API error by its own message; none without one. */
|
|
81
|
+
function lastErrorIn(events) {
|
|
82
|
+
for (const line of [...events].reverse()) {
|
|
83
|
+
const event = errorEventSchema.safeParse(parsedLine(line));
|
|
84
|
+
if (event.success) {
|
|
85
|
+
const message = event.data.type === 'turn.failed' ? event.data.error.message : event.data.message;
|
|
86
|
+
const api = apiErrorSchema.safeParse(parsedLine(message));
|
|
87
|
+
return api.success ? { message: api.data.error.message, ...(api.data.error.code !== undefined && { code: api.data.error.code }) } : { message };
|
|
88
|
+
}
|
|
62
89
|
}
|
|
63
|
-
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Why Codex's start failed, from its last error event (headless H13): the
|
|
94
|
+
* model it refused when that is the model it launched with (or any, when it
|
|
95
|
+
* launched with none, so Codex's own default), or else the error's message.
|
|
96
|
+
* Codex has no hook for a failed turn (#490). Its event shapes are tested on
|
|
97
|
+
* events captured from `codex exec --json` (test/logs).
|
|
98
|
+
*/
|
|
99
|
+
export function codexErrorIn(at) {
|
|
100
|
+
const error = lastErrorIn(at.events);
|
|
101
|
+
if (error === undefined) {
|
|
64
102
|
return undefined;
|
|
65
103
|
}
|
|
104
|
+
const refused = error.code === 'model_not_found' ? NOT_SUPPORTED.exec(error.message)?.[1] : undefined;
|
|
105
|
+
return refused !== undefined && (at.model === undefined || refused === at.model) ? { kind: 'refused', model: refused } : { kind: 'cause', cause: error.message };
|
|
66
106
|
}
|
|
67
107
|
export function createCodexHarness(options) {
|
|
68
108
|
const { configuration, plugin, sessions } = options;
|
|
@@ -80,14 +120,14 @@ export function createCodexHarness(options) {
|
|
|
80
120
|
await options.setup.trustAeolusHooks(folder);
|
|
81
121
|
await marks.clear(folder);
|
|
82
122
|
// Codex reads outside its folder as it is: its read-only checkouts need no flag (#1182).
|
|
83
|
-
await sessions.start({ shipId, folder, command: wordsOf(command), env: { [LAUNCH_VARIABLE]: launchId }, ...(checkouts.length > 0 && { readOnly: checkouts.map((checkout) => checkout.path) }) });
|
|
123
|
+
await sessions.start({ shipId, folder, command: wordsOf(command), harness, env: { [LAUNCH_VARIABLE]: launchId }, ...(checkouts.length > 0 && { readOnly: checkouts.map((checkout) => checkout.path) }) });
|
|
84
124
|
},
|
|
85
125
|
handOver: async (session) => {
|
|
86
126
|
const line = await handOverLine(session);
|
|
87
127
|
if (line === undefined) {
|
|
88
128
|
return 'nothing';
|
|
89
129
|
}
|
|
90
|
-
await sessions.
|
|
130
|
+
await sessions.send({ shipId: session.shipId, line: wakePromptOf(line) });
|
|
91
131
|
return 'handed';
|
|
92
132
|
},
|
|
93
133
|
forceOver: async ({ shipId, folder, isTurnBusy }) => {
|
|
@@ -96,25 +136,22 @@ export function createCodexHarness(options) {
|
|
|
96
136
|
return 'nothing';
|
|
97
137
|
}
|
|
98
138
|
if (isTurnBusy) {
|
|
99
|
-
await
|
|
139
|
+
await sessions.interrupt(shipId);
|
|
100
140
|
}
|
|
101
|
-
await sessions.
|
|
141
|
+
await sessions.send({ shipId, line: wakePromptOf(line) });
|
|
102
142
|
return 'handed';
|
|
103
143
|
},
|
|
104
144
|
marksLaunches: () => marks.isMarking(),
|
|
105
|
-
// The marker says what the session did (#490); Codex has no hook for a failed turn, so a refusal is read from
|
|
145
|
+
// The marker says what the session did (#490); Codex has no hook for a failed turn, so a refusal, or why a start shows none, is read from its last error event (headless H13).
|
|
106
146
|
launchSeen: async ({ shipId, folder, launchId, model }) => {
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (refused !== undefined) {
|
|
111
|
-
return { kind: 'refused', model: refused };
|
|
147
|
+
const error = codexErrorIn({ events: await sessions.events(shipId), ...(model !== undefined && { model }) });
|
|
148
|
+
if (error?.kind === 'refused') {
|
|
149
|
+
return { kind: 'refused', model: error.model };
|
|
112
150
|
}
|
|
113
|
-
if (
|
|
151
|
+
if ((await marks.read({ folder, launchId }))?.isActive === true) {
|
|
114
152
|
return { kind: 'active' };
|
|
115
153
|
}
|
|
116
|
-
|
|
117
|
-
return { kind: 'none', ...(stoppedAt !== undefined && { screen: stoppedAt }) };
|
|
154
|
+
return { kind: 'none', ...(error !== undefined && { cause: error.cause }) };
|
|
118
155
|
},
|
|
119
156
|
};
|
|
120
157
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,8 +29,10 @@ export interface ContainerRuntimeOptions {
|
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
31
|
* The container session runtime (decision 0039): one container per ship,
|
|
32
|
-
* named after its ship id, with tmux inside, so
|
|
33
|
-
*
|
|
32
|
+
* named after its ship id, with tmux inside, so a line sent is typed and the
|
|
33
|
+
* events read are its screen, each an exec into it; a turn is stopped with
|
|
34
|
+
* Escape, as a person does. Its sessions move to holds in S3 of the headless
|
|
35
|
+
* design. Rootless only, with hard memory and cpu caps and no restart
|
|
34
36
|
* policy: the trierarch starts a dead container again itself. The container
|
|
35
37
|
* sees its folder, its ship's own home, as its home, and its ship's socket
|
|
36
38
|
* folder, at its own path, and nothing else of the host, never the runtime's
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
|
|
2
2
|
import { tmpdir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { setTimeout as wait } from 'node:timers/promises';
|
|
5
4
|
import { idSchema } from '@aeolus-fleet/common';
|
|
6
5
|
import { heldCommand } from './held-command.js';
|
|
7
6
|
import { shipHome } from './paths.js';
|
|
8
7
|
import { runCommand } from './run-command.js';
|
|
8
|
+
import { stopTurn } from './stop-turn.js';
|
|
9
9
|
const PREFIX = 'trierarch-';
|
|
10
10
|
const OWNER_LABEL = 'aeolus.trierarch';
|
|
11
11
|
const CONTAINER_OWNER = 'aeolus-trierarch';
|
|
@@ -55,8 +55,10 @@ function envFileOf(env) {
|
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* The container session runtime (decision 0039): one container per ship,
|
|
58
|
-
* named after its ship id, with tmux inside, so
|
|
59
|
-
*
|
|
58
|
+
* named after its ship id, with tmux inside, so a line sent is typed and the
|
|
59
|
+
* events read are its screen, each an exec into it; a turn is stopped with
|
|
60
|
+
* Escape, as a person does. Its sessions move to holds in S3 of the headless
|
|
61
|
+
* design. Rootless only, with hard memory and cpu caps and no restart
|
|
60
62
|
* policy: the trierarch starts a dead container again itself. The container
|
|
61
63
|
* sees its folder, its ship's own home, as its home, and its ship's socket
|
|
62
64
|
* folder, at its own path, and nothing else of the host, never the runtime's
|
|
@@ -87,6 +89,15 @@ export function createContainerRuntime(options) {
|
|
|
87
89
|
await runtime(['rm', '--force', containerName(shipId)]);
|
|
88
90
|
};
|
|
89
91
|
const tmux = (shipId, args) => ['exec', containerName(shipId), 'tmux', ...args];
|
|
92
|
+
const screen = async (shipId) => {
|
|
93
|
+
const shown = await runtime(tmux(shipId, ['capture-pane', '-p', '-J', '-S', `-${String(SCREEN_LINES)}`, '-t', TMUX_TARGET]));
|
|
94
|
+
if (shown.status === 0) {
|
|
95
|
+
return shown.stdout;
|
|
96
|
+
}
|
|
97
|
+
// An exited container printed its last screen as it ended.
|
|
98
|
+
const logged = await runtime(['logs', containerName(shipId)]);
|
|
99
|
+
return logged.status === 0 ? logged.stdout : '';
|
|
100
|
+
};
|
|
90
101
|
return {
|
|
91
102
|
list: async () => {
|
|
92
103
|
const listed = await must(['ps', '--all', '--filter', `label=${OWNER_LABEL}=${owner}`, '--format', '{{.Names}} {{.State}}']);
|
|
@@ -168,24 +179,20 @@ export function createContainerRuntime(options) {
|
|
|
168
179
|
await rm(secrets, { recursive: true, force: true });
|
|
169
180
|
}
|
|
170
181
|
},
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
await wait(settleMs);
|
|
175
|
-
}
|
|
182
|
+
// The line typed, then Enter, as a person types it in the session's terminal.
|
|
183
|
+
send: async ({ shipId, line }) => {
|
|
184
|
+
await must(tmux(shipId, ['send-keys', '-t', TMUX_TARGET, '-l', line]));
|
|
176
185
|
await must(tmux(shipId, ['send-keys', '-t', TMUX_TARGET, 'Enter']));
|
|
177
186
|
},
|
|
178
187
|
interrupt: async (shipId) => {
|
|
179
|
-
await
|
|
188
|
+
await stopTurn({ escape: async () => {
|
|
189
|
+
await must(tmux(shipId, ['send-keys', '-t', TMUX_TARGET, 'Escape']));
|
|
190
|
+
}, screen: () => screen(shipId) });
|
|
180
191
|
},
|
|
181
|
-
screen:
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
}
|
|
186
|
-
// An exited container printed its last screen as it ended.
|
|
187
|
-
const logged = await runtime(['logs', containerName(shipId)]);
|
|
188
|
-
return logged.status === 0 ? logged.stdout : '';
|
|
192
|
+
// The terminal's screen, one line each: it is all a session in a terminal shows of its events.
|
|
193
|
+
events: async (shipId) => {
|
|
194
|
+
const shown = await screen(shipId);
|
|
195
|
+
return shown === '' ? [] : shown.replace(/\n$/u, '').split('\n');
|
|
189
196
|
},
|
|
190
197
|
// The container's first process as the host sees it: every process of the session runs under it; 0 once it runs no more.
|
|
191
198
|
sessionRootOf: async (shipId) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/adapters/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/adapters/container.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/files.d.ts
CHANGED
|
@@ -47,6 +47,12 @@ export declare function initialConfiguration(): TrierarchConfiguration & {
|
|
|
47
47
|
/** The configuration's JSON Schema, written beside it so an editor checks it. */
|
|
48
48
|
export declare function configurationJsonSchema(): Record<string, unknown>;
|
|
49
49
|
export declare function loadConfiguration(path: string): Promise<TrierarchConfiguration>;
|
|
50
|
+
/**
|
|
51
|
+
* Takes Remote Control out of the configuration at the path, keeping all else
|
|
52
|
+
* it holds (headless H20): answers the harnesses whose flags carried it; none
|
|
53
|
+
* without a configuration that fits.
|
|
54
|
+
*/
|
|
55
|
+
export declare function removeRemoteControl(path: string): Promise<readonly string[]>;
|
|
50
56
|
/** The fleet, the trierarch's own ship and its crew token. A crew file written before the ship id was kept lacks it. */
|
|
51
57
|
export interface CrewFile {
|
|
52
58
|
readonly fleetUrl: string;
|
package/dist/adapters/files.js
CHANGED
|
@@ -2,6 +2,7 @@ import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
|
2
2
|
import { dirname } from 'node:path';
|
|
3
3
|
import { idSchema, trierarchConfigurationSchema as commonConfigurationSchema, trierarchNameSchema } from '@aeolus-fleet/common';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
+
import { withoutRemoteControl } from '../core/remote-control.js';
|
|
5
6
|
/**
|
|
6
7
|
* The trierarch's own files: its configuration, written by the operator, and
|
|
7
8
|
* its crew file, written by `init`: the fleet's URL and the trierarch's own
|
|
@@ -77,6 +78,21 @@ export async function loadConfiguration(path) {
|
|
|
77
78
|
}
|
|
78
79
|
return parsed.data;
|
|
79
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Takes Remote Control out of the configuration at the path, keeping all else
|
|
83
|
+
* it holds (headless H20): answers the harnesses whose flags carried it; none
|
|
84
|
+
* without a configuration that fits.
|
|
85
|
+
*/
|
|
86
|
+
export async function removeRemoteControl(path) {
|
|
87
|
+
const configuration = await loadConfiguration(path).catch(() => undefined);
|
|
88
|
+
const without = configuration === undefined ? undefined : withoutRemoteControl(configuration);
|
|
89
|
+
if (without === undefined || without.harnesses.length === 0) {
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
const raw = z.record(z.string(), z.unknown()).parse(JSON.parse(await readFile(path, 'utf8')));
|
|
93
|
+
await writeFile(path, `${JSON.stringify({ ...raw, harnesses: without.configuration.harnesses }, null, 2)}\n`);
|
|
94
|
+
return without.harnesses;
|
|
95
|
+
}
|
|
80
96
|
export async function writeCrewFile(path, crew) {
|
|
81
97
|
await mkdir(dirname(path), { recursive: true, mode: 0o700 });
|
|
82
98
|
const plugin = crew.pluginShipId === undefined ? '' : `pluginShipId=${crew.pluginShipId}\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/adapters/files.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/adapters/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdir,
|
|
1
|
+
import { mkdir, realpath, stat } from 'node:fs/promises';
|
|
2
2
|
import { join, relative, sep } from 'node:path';
|
|
3
3
|
import { runCommand } from './run-command.js';
|
|
4
4
|
import { clonedPath, cloneWhenMissing } from './trusted-clones.js';
|
|
@@ -89,9 +89,26 @@ export function createGitWorkspace(options) {
|
|
|
89
89
|
},
|
|
90
90
|
worktrees: async () => {
|
|
91
91
|
const found = [];
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
// git lists each worktree by its real path, so a root reached through a symbolic link (macOS's /var) is matched by its own.
|
|
93
|
+
const realRoot = await realpath(root).catch(() => root);
|
|
94
|
+
for (const repository of Object.keys(configuration.repositories)) {
|
|
95
|
+
const source = await repositoryOf(join(root, repository, 'worktree'));
|
|
96
|
+
if (source === undefined) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const listed = await runCommand('git', { args: ['-C', source, 'worktree', 'list', '--porcelain'] });
|
|
100
|
+
if (listed.status !== 0) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
for (const line of listed.stdout.split('\n')) {
|
|
104
|
+
if (!line.startsWith('worktree ')) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const parts = relative(realRoot, line.slice('worktree '.length)).split(sep);
|
|
108
|
+
const [listedRepository, name] = parts;
|
|
109
|
+
if (listedRepository === repository && name !== undefined && parts.length === 2) {
|
|
110
|
+
found.push({ path: join(root, repository, name), repository, name });
|
|
111
|
+
}
|
|
95
112
|
}
|
|
96
113
|
}
|
|
97
114
|
return found;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-workspace.js","sourceRoot":"","sources":["../../src/adapters/git-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"git-workspace.js","sourceRoot":"","sources":["../../src/adapters/git-workspace.ts"],"names":[],"mappings":"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"}
|