@aeolus-fleet/trierarch 0.17.3 → 0.19.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/LICENSE +201 -0
- package/README.md +18 -16
- package/dist/adapters/claude-code.d.ts +11 -1
- package/dist/adapters/claude-code.js +32 -10
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/adapters/codex.d.ts +10 -1
- package/dist/adapters/codex.js +15 -4
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/command-line.d.ts +15 -0
- package/dist/adapters/command-line.js +17 -0
- package/dist/adapters/command-line.js.map +1 -0
- package/dist/adapters/files.d.ts +9 -0
- package/dist/adapters/files.js +16 -0
- package/dist/adapters/files.js.map +1 -1
- package/dist/adapters/flags.d.ts +2 -2
- package/dist/adapters/flags.js +2 -2
- package/dist/adapters/git-workspace.js +1 -1
- package/dist/adapters/harnesses.d.ts +10 -2
- package/dist/adapters/harnesses.js +26 -3
- package/dist/adapters/harnesses.js.map +1 -1
- package/dist/adapters/json-state.d.ts +6 -4
- package/dist/adapters/json-state.js +21 -21
- package/dist/adapters/json-state.js.map +1 -1
- package/dist/adapters/log.d.ts +39 -0
- package/dist/adapters/log.js +65 -0
- package/dist/adapters/log.js.map +1 -0
- package/dist/adapters/paths.d.ts +1 -0
- package/dist/adapters/paths.js +1 -0
- package/dist/adapters/paths.js.map +1 -1
- package/dist/adapters/rest-fleet.d.ts +4 -3
- package/dist/adapters/rest-fleet.js +38 -18
- package/dist/adapters/rest-fleet.js.map +1 -1
- package/dist/adapters/service.js +18 -15
- package/dist/adapters/service.js.map +1 -1
- package/dist/adapters/style.d.ts +18 -0
- package/dist/adapters/style.js +38 -0
- package/dist/adapters/style.js.map +1 -0
- package/dist/cli/config-check.d.ts +11 -2
- package/dist/cli/config-check.js +26 -5
- package/dist/cli/config-check.js.map +1 -1
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +41 -15
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/list.d.ts +7 -4
- package/dist/cli/list.js +18 -8
- package/dist/cli/list.js.map +1 -1
- package/dist/cli/main.js +33 -16
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/prompter.d.ts +4 -0
- package/dist/cli/prompter.js +18 -3
- package/dist/cli/prompter.js.map +1 -1
- package/dist/cli/run.d.ts +13 -8
- package/dist/cli/run.js +48 -27
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/status.d.ts +13 -4
- package/dist/cli/status.js +43 -17
- package/dist/cli/status.js.map +1 -1
- package/dist/core/check-settings.d.ts +25 -0
- package/dist/core/check-settings.js +52 -0
- package/dist/core/check-settings.js.map +1 -0
- package/dist/core/entry.d.ts +18 -30
- package/dist/core/entry.js +3 -1
- package/dist/core/entry.js.map +1 -1
- package/dist/core/handle-delivery.d.ts +9 -14
- package/dist/core/handle-delivery.js +4 -133
- package/dist/core/handle-delivery.js.map +1 -1
- package/dist/core/options-schema.d.ts +7 -0
- package/dist/core/options-schema.js +10 -0
- package/dist/core/options-schema.js.map +1 -0
- package/dist/core/ports.d.ts +60 -6
- package/dist/core/reconciler.d.ts +32 -12
- package/dist/core/reconciler.js +107 -23
- package/dist/core/reconciler.js.map +1 -1
- package/dist/core/report-self.d.ts +16 -0
- package/dist/core/report-self.js +41 -0
- package/dist/core/report-self.js.map +1 -0
- package/dist/core/run-pass.d.ts +8 -4
- package/dist/core/run-pass.js +135 -56
- package/dist/core/run-pass.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +7 -5
- package/dist/core/answers.d.ts +0 -4
- package/dist/core/answers.js +0 -27
- package/dist/core/answers.js.map +0 -1
- package/dist/core/check-want.d.ts +0 -32
- package/dist/core/check-want.js +0 -80
- package/dist/core/check-want.js.map +0 -1
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import type { TrierarchConfiguration } from '@aeolus-fleet/common';
|
|
2
|
-
import type { HarnessPort } from '../core/ports.js';
|
|
2
|
+
import type { AdapterFlag, HarnessPort } from '../core/ports.js';
|
|
3
|
+
import type { CommandPart } from './command-line.js';
|
|
3
4
|
import type { AeolusPlugin } from './plugin-identity.js';
|
|
4
5
|
import type { Tmux } from './tmux.js';
|
|
6
|
+
/** The flags each configured harness's adapter adds itself, for describe. */
|
|
7
|
+
export declare function adapterFlagsOf(configuration: TrierarchConfiguration): Record<string, readonly AdapterFlag[]>;
|
|
8
|
+
/** What a harness launches with the given flags, on a first start and a restart, for config check; undefined without an adapter. */
|
|
9
|
+
export declare function commandLinesOf(harness: string, flags: readonly string[]): {
|
|
10
|
+
firstStart: CommandPart[];
|
|
11
|
+
restart: CommandPart[];
|
|
12
|
+
} | undefined;
|
|
5
13
|
/**
|
|
6
14
|
* The adapters of the harnesses the configuration offers, by name, each with
|
|
7
15
|
* the aeolus plugin its harness installed. A plugin is looked for only for a
|
|
8
16
|
* harness on offer, so a machine without Codex needs no Codex plugin. A
|
|
9
17
|
* configured harness this trierarch has no adapter for is refused at start,
|
|
10
|
-
* so no
|
|
18
|
+
* so no request for it is ever crewed.
|
|
11
19
|
*/
|
|
12
20
|
export declare function createHarnesses(at: {
|
|
13
21
|
configuration: TrierarchConfiguration;
|
|
@@ -1,12 +1,35 @@
|
|
|
1
|
-
import { createClaudeCodeHarness } from './claude-code.js';
|
|
2
|
-
import { createCodexHarness } from './codex.js';
|
|
1
|
+
import { CLAUDE_CODE_ADAPTER_FLAGS, claudeCodeCommandLine, createClaudeCodeHarness, WAKE_PROMPT as CLAUDE_CODE_WAKE_PROMPT } from './claude-code.js';
|
|
2
|
+
import { CODEX_ADAPTER_FLAGS, codexCommandLine, createCodexHarness, WAKE_PROMPT as CODEX_WAKE_PROMPT } from './codex.js';
|
|
3
3
|
import { findAeolusPlugin } from './plugin.js';
|
|
4
|
+
/** What the settings' first prompt and a ship's session name stand for where config check shows a command line. */
|
|
5
|
+
const FIRST_PROMPT = '<first prompt>';
|
|
6
|
+
const SESSION_NAME = '[<repository or folder>] <ship>';
|
|
7
|
+
/** Per harness this trierarch has an adapter for: the flags it adds itself, and its command line for given flags. */
|
|
8
|
+
const ADAPTERS = {
|
|
9
|
+
'claude-code': {
|
|
10
|
+
adapterFlags: CLAUDE_CODE_ADAPTER_FLAGS,
|
|
11
|
+
commandLine: ({ flags, isFirstStart }) => claudeCodeCommandLine({ flags, sessionName: SESSION_NAME, prompt: isFirstStart ? FIRST_PROMPT : CLAUDE_CODE_WAKE_PROMPT, isFirstStart }),
|
|
12
|
+
},
|
|
13
|
+
codex: {
|
|
14
|
+
adapterFlags: CODEX_ADAPTER_FLAGS,
|
|
15
|
+
commandLine: ({ flags, isFirstStart }) => codexCommandLine({ flags, prompt: isFirstStart ? FIRST_PROMPT : CODEX_WAKE_PROMPT, isFirstStart }),
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
/** The flags each configured harness's adapter adds itself, for describe. */
|
|
19
|
+
export function adapterFlagsOf(configuration) {
|
|
20
|
+
return Object.fromEntries(Object.keys(configuration.harnesses).map((name) => [name, ADAPTERS[name]?.adapterFlags ?? []]));
|
|
21
|
+
}
|
|
22
|
+
/** What a harness launches with the given flags, on a first start and a restart, for config check; undefined without an adapter. */
|
|
23
|
+
export function commandLinesOf(harness, flags) {
|
|
24
|
+
const adapter = ADAPTERS[harness];
|
|
25
|
+
return adapter === undefined ? undefined : { firstStart: adapter.commandLine({ flags, isFirstStart: true }), restart: adapter.commandLine({ flags, isFirstStart: false }) };
|
|
26
|
+
}
|
|
4
27
|
/**
|
|
5
28
|
* The adapters of the harnesses the configuration offers, by name, each with
|
|
6
29
|
* the aeolus plugin its harness installed. A plugin is looked for only for a
|
|
7
30
|
* harness on offer, so a machine without Codex needs no Codex plugin. A
|
|
8
31
|
* configured harness this trierarch has no adapter for is refused at start,
|
|
9
|
-
* so no
|
|
32
|
+
* so no request for it is ever crewed.
|
|
10
33
|
*/
|
|
11
34
|
export async function createHarnesses(at) {
|
|
12
35
|
const { configuration, homeDirectory, env, sessions } = at;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../../src/adapters/harnesses.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../../src/adapters/harnesses.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,11 @@ import type { StatePort } from '../core/ports.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* The state store: `~/.aeolus/trierarch/state.json`, written whole and
|
|
4
4
|
* atomically (a temporary file, then a rename), so a stop mid-write leaves the
|
|
5
|
-
* last state. It holds no secret.
|
|
6
|
-
*
|
|
5
|
+
* last state. It holds no secret. A state file of the 0.17 trierarch, whose
|
|
6
|
+
* ships are not migrated (decision 0013), is moved aside to
|
|
7
|
+
* `state.0.17.json` and the trierarch starts empty: its sessions are then
|
|
8
|
+
* strays, stopped by the loop.
|
|
7
9
|
*/
|
|
8
|
-
/**
|
|
9
|
-
export declare const
|
|
10
|
+
/** Where a 0.17 state file is moved, beside the new one. */
|
|
11
|
+
export declare const OLD_STATE_FILE = "state.0.17.json";
|
|
10
12
|
export declare function createJsonState(path: string): StatePort;
|
|
@@ -1,46 +1,42 @@
|
|
|
1
1
|
import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { dirname } from 'node:path';
|
|
3
|
-
import { idSchema,
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { idSchema, trierarchWorkspaceSchema } from '@aeolus-fleet/common';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { EMPTY_STATE } from '../core/entry.js';
|
|
5
|
+
import { EMPTY_STATE, ENTRY_STATES } from '../core/entry.js';
|
|
6
6
|
/**
|
|
7
7
|
* The state store: `~/.aeolus/trierarch/state.json`, written whole and
|
|
8
8
|
* atomically (a temporary file, then a rename), so a stop mid-write leaves the
|
|
9
|
-
* last state. It holds no secret.
|
|
10
|
-
*
|
|
9
|
+
* last state. It holds no secret. A state file of the 0.17 trierarch, whose
|
|
10
|
+
* ships are not migrated (decision 0013), is moved aside to
|
|
11
|
+
* `state.0.17.json` and the trierarch starts empty: its sessions are then
|
|
12
|
+
* strays, stopped by the loop.
|
|
11
13
|
*/
|
|
12
|
-
/**
|
|
13
|
-
export const
|
|
14
|
-
const outgoingSchema = z.object({
|
|
15
|
-
to: idSchema('ship'),
|
|
16
|
-
inReplyTo: z.string().optional(),
|
|
17
|
-
name: z.string(),
|
|
18
|
-
payload: z.record(z.string(), z.unknown()),
|
|
19
|
-
idempotencyKey: z.string(),
|
|
20
|
-
});
|
|
14
|
+
/** Where a 0.17 state file is moved, beside the new one. */
|
|
15
|
+
export const OLD_STATE_FILE = 'state.0.17.json';
|
|
21
16
|
const stateSchema = z.object({
|
|
22
17
|
entries: z.record(z.string(), z.object({
|
|
23
18
|
shipId: idSchema('ship'),
|
|
24
19
|
shipName: z.string().optional(),
|
|
20
|
+
settingsVersion: z.int().positive(),
|
|
25
21
|
harness: z.string(),
|
|
26
22
|
workspace: trierarchWorkspaceSchema,
|
|
27
23
|
squadron: z.string().optional(),
|
|
28
24
|
firstPrompt: z.string().optional(),
|
|
29
25
|
options: z.record(z.string(), z.string()),
|
|
30
|
-
|
|
31
|
-
state: z.enum(TRIERARCH_ENTRY_STATES),
|
|
26
|
+
state: z.enum(ENTRY_STATES),
|
|
32
27
|
since: z.string(),
|
|
33
28
|
exits: z.array(z.string()),
|
|
34
29
|
restartAt: z.string().optional(),
|
|
35
30
|
folder: z.string().optional(),
|
|
36
31
|
hasStarted: z.boolean(),
|
|
37
|
-
release: z.object({ messageId: z.string(), sender: idSchema('ship'), isForced: z.boolean() }).optional(),
|
|
38
32
|
wake: z.object({ waiting: z.int().nonnegative(), isPending: z.boolean() }),
|
|
39
33
|
})),
|
|
40
|
-
applied: z.record(z.string(), z.array(outgoingSchema)),
|
|
41
34
|
kept: z.array(z.object({ shipId: idSchema('ship'), path: z.string() })),
|
|
42
35
|
orphans: z.array(z.string()),
|
|
36
|
+
refused: z.record(z.string(), z.int().positive()),
|
|
43
37
|
});
|
|
38
|
+
/** The 0.17 state file: it alone kept the messages it applied. */
|
|
39
|
+
const oldStateSchema = z.looseObject({ applied: z.unknown() });
|
|
44
40
|
function isMissing(error) {
|
|
45
41
|
return error instanceof Error && 'code' in error && error.code === 'ENOENT';
|
|
46
42
|
}
|
|
@@ -57,13 +53,17 @@ export function createJsonState(path) {
|
|
|
57
53
|
}
|
|
58
54
|
throw error;
|
|
59
55
|
}
|
|
60
|
-
|
|
56
|
+
const json = JSON.parse(text);
|
|
57
|
+
if (oldStateSchema.safeParse(json).success) {
|
|
58
|
+
await rename(path, join(dirname(path), OLD_STATE_FILE));
|
|
59
|
+
return EMPTY_STATE;
|
|
60
|
+
}
|
|
61
|
+
return stateSchema.parse(json);
|
|
61
62
|
},
|
|
62
63
|
save: async (state) => {
|
|
63
|
-
const applied = Object.fromEntries(Object.entries(state.applied).slice(-APPLIED_CAP));
|
|
64
64
|
await mkdir(dirname(path), { recursive: true });
|
|
65
65
|
const temporary = `${path}.tmp`;
|
|
66
|
-
await writeFile(temporary, `${JSON.stringify(
|
|
66
|
+
await writeFile(temporary, `${JSON.stringify(state, null, 2)}\n`, { mode: 0o600 });
|
|
67
67
|
await rename(temporary, path);
|
|
68
68
|
},
|
|
69
69
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-state.js","sourceRoot":"","sources":["../../src/adapters/json-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"json-state.js","sourceRoot":"","sources":["../../src/adapters/json-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type Style } from './style.js';
|
|
3
|
+
import type { Logger } from '../core/ports.js';
|
|
4
|
+
declare const logRecordSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
5
|
+
time: z.ZodString;
|
|
6
|
+
shipId: z.ZodString;
|
|
7
|
+
shipName: z.ZodOptional<z.ZodString>;
|
|
8
|
+
action: z.ZodString;
|
|
9
|
+
outcome: z.ZodString;
|
|
10
|
+
next: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
12
|
+
time: z.ZodString;
|
|
13
|
+
level: z.ZodEnum<{
|
|
14
|
+
info: "info";
|
|
15
|
+
warn: "warn";
|
|
16
|
+
}>;
|
|
17
|
+
message: z.ZodString;
|
|
18
|
+
}, z.core.$strict>]>;
|
|
19
|
+
export type LogRecord = z.infer<typeof logRecordSchema>;
|
|
20
|
+
/** A stream the log writes to, and whether a person reads it there. */
|
|
21
|
+
export interface LogStream {
|
|
22
|
+
write(text: string): void;
|
|
23
|
+
readonly isTerminal: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** A line of the log as its record, or as it is when it is none. */
|
|
26
|
+
export declare function readLogLine(line: string): LogRecord | {
|
|
27
|
+
line: string;
|
|
28
|
+
};
|
|
29
|
+
/** A line of the log as the operator reads it. */
|
|
30
|
+
export declare function renderLogLine(line: string, style?: Style): string;
|
|
31
|
+
/** Info and actions to `out`, warnings to `err`; each a JSON line, or rendered text where a person reads it. */
|
|
32
|
+
export declare function createLogger(at: {
|
|
33
|
+
out: LogStream;
|
|
34
|
+
err: LogStream;
|
|
35
|
+
now: () => Date;
|
|
36
|
+
}): Logger & {
|
|
37
|
+
info(message: string): void;
|
|
38
|
+
};
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { PLAIN } from './style.js';
|
|
3
|
+
/**
|
|
4
|
+
* The trierarch's log, `~/.aeolus/trierarch/logs/trierarch.log`: one JSON
|
|
5
|
+
* object per line, an action the loop took for a ship or a message. JSON so
|
|
6
|
+
* `aeolus-trierarch logs --json` passes the records on as they are, and
|
|
7
|
+
* `logs` renders them for the operator. A run in a terminal writes the
|
|
8
|
+
* rendered text instead. A line that is no record (an older line, a stack
|
|
9
|
+
* trace) is read and shown as it is.
|
|
10
|
+
*/
|
|
11
|
+
const actionRecordSchema = z.strictObject({
|
|
12
|
+
time: z.string(),
|
|
13
|
+
shipId: z.string(),
|
|
14
|
+
shipName: z.string().optional(),
|
|
15
|
+
action: z.string(),
|
|
16
|
+
outcome: z.string(),
|
|
17
|
+
next: z.string().optional(),
|
|
18
|
+
});
|
|
19
|
+
const messageRecordSchema = z.strictObject({ time: z.string(), level: z.enum(['info', 'warn']), message: z.string() });
|
|
20
|
+
const logRecordSchema = z.union([actionRecordSchema, messageRecordSchema]);
|
|
21
|
+
const FAILED = 'failed:';
|
|
22
|
+
/** A record as the operator reads it; where the style colours, the time quiet, the ship strong, a failure bad and what happens next busy. */
|
|
23
|
+
function render(record, style = PLAIN) {
|
|
24
|
+
const time = style.tone('quiet', record.time);
|
|
25
|
+
if ('level' in record) {
|
|
26
|
+
return `${time} ${record.level === 'warn' ? style.tone('busy', record.level) : record.level} ${record.message}`;
|
|
27
|
+
}
|
|
28
|
+
const ship = style.tone('strong', record.shipName === undefined ? record.shipId : `${record.shipId} (${record.shipName})`);
|
|
29
|
+
const outcome = record.outcome.startsWith(FAILED) ? style.tone('bad', record.outcome) : record.outcome;
|
|
30
|
+
return `${time} ${ship} ${record.action}: ${outcome}${record.next === undefined ? '' : `. ${style.tone('busy', `Next: ${record.next}`)}`}`;
|
|
31
|
+
}
|
|
32
|
+
/** A line of the log as its record, or as it is when it is none. */
|
|
33
|
+
export function readLogLine(line) {
|
|
34
|
+
try {
|
|
35
|
+
const record = logRecordSchema.safeParse(JSON.parse(line));
|
|
36
|
+
return record.success ? record.data : { line };
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return { line };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** A line of the log as the operator reads it. */
|
|
43
|
+
export function renderLogLine(line, style = PLAIN) {
|
|
44
|
+
const read = readLogLine(line);
|
|
45
|
+
return 'line' in read ? read.line : render(read, style);
|
|
46
|
+
}
|
|
47
|
+
/** Info and actions to `out`, warnings to `err`; each a JSON line, or rendered text where a person reads it. */
|
|
48
|
+
export function createLogger(at) {
|
|
49
|
+
const write = (stream, record) => {
|
|
50
|
+
stream.write(`${stream.isTerminal ? render(record) : JSON.stringify(record)}\n`);
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
info: (message) => {
|
|
54
|
+
write(at.out, { time: at.now().toISOString(), level: 'info', message });
|
|
55
|
+
},
|
|
56
|
+
warn: (message) => {
|
|
57
|
+
write(at.err, { time: at.now().toISOString(), level: 'warn', message });
|
|
58
|
+
},
|
|
59
|
+
action: (logged) => {
|
|
60
|
+
const { time, ...rest } = logged;
|
|
61
|
+
write(at.out, { time: time.toISOString(), ...rest });
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/adapters/log.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/paths.d.ts
CHANGED
package/dist/adapters/paths.js
CHANGED
|
@@ -7,6 +7,7 @@ export function trierarchPaths(at) {
|
|
|
7
7
|
configSchema: join(home, 'config.schema.json'),
|
|
8
8
|
crewToken: join(home, 'crew-token'),
|
|
9
9
|
state: join(home, 'state.json'),
|
|
10
|
+
running: join(home, 'running.json'),
|
|
10
11
|
logs: join(home, 'logs'),
|
|
11
12
|
worktrees: join(home, 'worktrees'),
|
|
12
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/adapters/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/adapters/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAmBjC,MAAM,UAAU,cAAc,CAAC,EAA8C;IAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC5D,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QAC9C,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC;QAC9C,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;QACnC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;QAC/B,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;QACnC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -2,9 +2,10 @@ import { type ShipId } from '@aeolus-fleet/common';
|
|
|
2
2
|
import type { Delivery, FleetPort } from '../core/ports.js';
|
|
3
3
|
/**
|
|
4
4
|
* The fleet over its REST API (`/api/v1`), as any ship may call it: the
|
|
5
|
-
* trierarch's own crew (receive, ack, send
|
|
6
|
-
* `
|
|
7
|
-
*
|
|
5
|
+
* trierarch's own crew (receive, ack, pong, send to argo, report) with its
|
|
6
|
+
* crew token, its `crew:run` calls for the ships assigned to it (assigned
|
|
7
|
+
* requests, status, confirm, ship, getStartingPrompt, release), and a
|
|
8
|
+
* session's register, inbox and report. A refusal the trierarch does not expect throws
|
|
8
9
|
* with the fleet's code and message.
|
|
9
10
|
*/
|
|
10
11
|
/** What the trierarch states as model and harness: it is software, not a model, as squadrons is (#157). */
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { idSchema, receivedDeliverySchema, shipDetailOutputSchema
|
|
1
|
+
import { assignedCrewRequestsOutputSchema, idSchema, receivedDeliverySchema, shipDetailOutputSchema } from '@aeolus-fleet/common';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { runningVersion } from './version.js';
|
|
4
4
|
/**
|
|
5
5
|
* The fleet over its REST API (`/api/v1`), as any ship may call it: the
|
|
6
|
-
* trierarch's own crew (receive, ack, send
|
|
7
|
-
* `
|
|
8
|
-
*
|
|
6
|
+
* trierarch's own crew (receive, ack, pong, send to argo, report) with its
|
|
7
|
+
* crew token, its `crew:run` calls for the ships assigned to it (assigned
|
|
8
|
+
* requests, status, confirm, ship, getStartingPrompt, release), and a
|
|
9
|
+
* session's register, inbox and report. A refusal the trierarch does not expect throws
|
|
9
10
|
* with the fleet's code and message.
|
|
10
11
|
*/
|
|
11
12
|
/** What the trierarch states as model and harness: it is software, not a model, as squadrons is (#157). */
|
|
@@ -25,6 +26,8 @@ export class FleetRefusal extends Error {
|
|
|
25
26
|
}
|
|
26
27
|
export function createRestFleet(options) {
|
|
27
28
|
const fleetUrl = options.fleetUrl.replace(/\/$/, '');
|
|
29
|
+
/** A call that got no answer: said with the fleet's url, unless it was stopped on purpose. */
|
|
30
|
+
const unreachable = (error, signal) => signal?.aborted === true ? error : new Error(`The fleet at ${fleetUrl} cannot be reached: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
28
31
|
async function call(request) {
|
|
29
32
|
const headers = {};
|
|
30
33
|
const crewToken = request.crewToken ?? options.crewToken;
|
|
@@ -39,12 +42,23 @@ export function createRestFleet(options) {
|
|
|
39
42
|
: { method: 'POST', headers: { ...headers, 'content-type': 'application/json' }, body: JSON.stringify(request.body), signal: request.signal ?? null });
|
|
40
43
|
}
|
|
41
44
|
catch (error) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
throw unreachable(error, request.signal);
|
|
46
|
+
}
|
|
47
|
+
// While the fleet restarts, an answer may come empty, as a proxy's page, or cut off: none of it is the fleet's word.
|
|
48
|
+
let text;
|
|
49
|
+
try {
|
|
50
|
+
text = await response.text();
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
throw unreachable(error, request.signal);
|
|
54
|
+
}
|
|
55
|
+
let body;
|
|
56
|
+
try {
|
|
57
|
+
body = JSON.parse(text);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
throw new Error(`The fleet at ${fleetUrl} cannot be reached: it answered ${String(response.status)} without JSON, as while it restarts`, { cause: error });
|
|
46
61
|
}
|
|
47
|
-
const body = await response.json();
|
|
48
62
|
if (!response.ok) {
|
|
49
63
|
const refusal = refusalSchema.safeParse(body);
|
|
50
64
|
throw refusal.success ? new FleetRefusal(refusal.data.code, refusal.data.message) : new FleetRefusal(String(response.status), 'The fleet refused');
|
|
@@ -87,20 +101,23 @@ export function createRestFleet(options) {
|
|
|
87
101
|
ack: async (deliveryId) => {
|
|
88
102
|
await call({ path: '/ship/ack', body: { deliveryId }, answers: z.unknown() });
|
|
89
103
|
},
|
|
90
|
-
|
|
104
|
+
pong: async (deliveryId) => {
|
|
105
|
+
await call({ path: '/ship/pong', body: { deliveryId }, answers: z.unknown() });
|
|
106
|
+
},
|
|
107
|
+
reportToArgo: async ({ text, idempotencyKey }) => {
|
|
91
108
|
await call({
|
|
92
109
|
path: '/ship/send',
|
|
93
|
-
body: {
|
|
94
|
-
selector: { kind: 'ship', shipId: message.to },
|
|
95
|
-
payload: JSON.stringify(message.payload),
|
|
96
|
-
contentType: trierarchContentType(message.name),
|
|
97
|
-
model: TRIERARCH_SELF.model,
|
|
98
|
-
idempotencyKey: message.idempotencyKey,
|
|
99
|
-
...(message.inReplyTo !== undefined && { inReplyTo: message.inReplyTo }),
|
|
100
|
-
},
|
|
110
|
+
body: { selector: { kind: 'ship', name: 'argo' }, payload: text, contentType: 'text/plain', model: TRIERARCH_SELF.model, idempotencyKey },
|
|
101
111
|
answers: z.object({ messageId: idSchema('message') }),
|
|
102
112
|
});
|
|
103
113
|
},
|
|
114
|
+
assignedRequests: async () => (await call({ path: '/fleet/assignedCrewRequests', answers: assignedCrewRequestsOutputSchema })).map(({ shipId, settings, settingsVersion, status }) => ({ shipId, settings, settingsVersion, status })),
|
|
115
|
+
writeStatus: async (shipId, status) => {
|
|
116
|
+
await call({ path: '/fleet/reportCrewStatus', body: { shipId, status }, answers: z.unknown() });
|
|
117
|
+
},
|
|
118
|
+
confirmRelease: async (shipId) => {
|
|
119
|
+
await call({ path: '/fleet/confirmCrewRelease', body: { shipId }, answers: z.unknown() });
|
|
120
|
+
},
|
|
104
121
|
inbox: async (crewToken) => {
|
|
105
122
|
try {
|
|
106
123
|
const { waiting } = await call({ path: '/ship/inbox', crewToken, body: {}, answers: z.object({ waiting: z.int() }) });
|
|
@@ -116,6 +133,9 @@ export function createRestFleet(options) {
|
|
|
116
133
|
report: async ({ crewToken, state, note }) => {
|
|
117
134
|
await call({ path: '/ship/report', crewToken, body: { state, note }, answers: z.unknown() });
|
|
118
135
|
},
|
|
136
|
+
reportSelf: async ({ state, note, details }) => {
|
|
137
|
+
await call({ path: '/ship/report', body: { state, note, details }, answers: z.unknown() });
|
|
138
|
+
},
|
|
119
139
|
};
|
|
120
140
|
}
|
|
121
141
|
//# sourceMappingURL=rest-fleet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest-fleet.js","sourceRoot":"","sources":["../../src/adapters/rest-fleet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"rest-fleet.js","sourceRoot":"","sources":["../../src/adapters/rest-fleet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,QAAQ,EAAE,sBAAsB,EAAE,sBAAsB,EAAe,MAAM,sBAAsB,CAAC;AAC/I,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;;;;GAOG;AAEH,2GAA2G;AAC3G,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,KAAK,EAAE,2BAA2B,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAW,CAAC;AAE7H,uFAAuF;AACvF,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAW,CAAC;AAE7C,wFAAwF;AACxF,MAAM,eAAe,GAAG,aAAa,CAAC;AAEtC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAE1E,sDAAsD;AACtD,MAAM,OAAO,YAAa,SAAQ,KAAK;IAE1B;IADX,YACW,IAAY,EACrB,OAAe;QAEf,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAHpB,SAAI,GAAJ,IAAI,CAAQ;IAIvB,CAAC;CACF;AAWD,MAAM,UAAU,eAAe,CAAC,OAAgD;IAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrD,8FAA8F;IAC9F,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,MAA+B,EAAW,EAAE,CAC/E,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,gBAAgB,QAAQ,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1K,KAAK,UAAU,IAAI,CAAI,OAA0G;QAC/H,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;QACzD,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;YACrB,OAAO,CAAC,aAAa,GAAG,UAAU,SAAS,EAAE,CAAC;QAChD,CAAC;QACD,8CAA8C;QAC9C,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CACpB,GAAG,QAAQ,UAAU,OAAO,CAAC,IAAI,EAAE,EACnC,OAAO,CAAC,IAAI,KAAK,SAAS;gBACxB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;gBAC5D,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,CACxJ,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,qHAAqH;QACrH,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,gBAAgB,QAAQ,mCAAmC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,qCAAqC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7J,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACrJ,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,IAAwC,EAAE,OAAe,EAAE,EAAE,CAC7E,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAEhJ,OAAO;QACL,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC;gBACpG,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;oBACpB,KAAK,cAAc;wBACjB,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;oBACnD,KAAK,QAAQ;wBACX,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC7C,KAAK,SAAS;wBACZ,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBAC/B,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAChE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;gBAC9B,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5I,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;QACzD,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC;QACpE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACxB,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACxB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7L,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5J,CAAC;QACD,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YACxB,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YACzB,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,YAAY,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE;YAC/C,MAAM,IAAI,CAAC;gBACT,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE;gBACzI,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;aACtD,CAAC,CAAC;QACL,CAAC;QACD,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAC3B,CAAC,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1M,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACpC,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC/B,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YACzB,IAAI,CAAC;gBACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,CAAC;oBACrG,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBAChC,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;YAC3C,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7C,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7F,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/adapters/service.js
CHANGED
|
@@ -62,7 +62,7 @@ function systemdUnit(at) {
|
|
|
62
62
|
.map(([name, value]) => `Environment="${name}=${value}"`)
|
|
63
63
|
.join('\n');
|
|
64
64
|
return `[Unit]
|
|
65
|
-
Description=Aeolus trierarch: keeps the ships
|
|
65
|
+
Description=Aeolus trierarch: keeps the ships assigned to it crewed on this machine
|
|
66
66
|
|
|
67
67
|
[Service]
|
|
68
68
|
ExecStart="${at.run.node}" "${at.run.script}" run
|
|
@@ -90,7 +90,7 @@ function elapsedSeconds(etime) {
|
|
|
90
90
|
async function exists(path) {
|
|
91
91
|
return (await stat(path).catch(() => undefined)) !== undefined;
|
|
92
92
|
}
|
|
93
|
-
/** How long stop
|
|
93
|
+
/** How long stop and install wait for the service to be gone: checks, a second apart. */
|
|
94
94
|
const STOP_CHECKS = 30;
|
|
95
95
|
const STOP_CHECK_MS = 1000;
|
|
96
96
|
const NOT_INSTALLED = 'The service is not installed: run aeolus-trierarch install';
|
|
@@ -134,12 +134,23 @@ export function createService(options) {
|
|
|
134
134
|
const bootstrap = async () => {
|
|
135
135
|
await must('launchctl', ['bootstrap', domain, file]);
|
|
136
136
|
};
|
|
137
|
+
// Unloading, not killing: KeepAlive would start a killed one again. It loads again at the next login.
|
|
138
|
+
// bootout returns before the process has exited: unloaded means launchd has the agent gone.
|
|
139
|
+
const bootout = async () => {
|
|
140
|
+
await exec('launchctl', ['bootout', target]);
|
|
141
|
+
for (let check = 0; await isLoaded(); check += 1) {
|
|
142
|
+
if (check >= STOP_CHECKS) {
|
|
143
|
+
throw new Error(`The trierarch still runs ${String((STOP_CHECKS * STOP_CHECK_MS) / MS_PER_SECOND)} s after it was stopped: see aeolus-trierarch status`);
|
|
144
|
+
}
|
|
145
|
+
await sleep(STOP_CHECK_MS);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
137
148
|
return {
|
|
138
149
|
write,
|
|
139
150
|
install: async () => {
|
|
140
151
|
await write();
|
|
141
152
|
// Unload an earlier copy first: bootstrap refuses a loaded agent.
|
|
142
|
-
await
|
|
153
|
+
await bootout();
|
|
143
154
|
await bootstrap();
|
|
144
155
|
},
|
|
145
156
|
uninstall: async () => {
|
|
@@ -150,17 +161,7 @@ export function createService(options) {
|
|
|
150
161
|
await mustBeInstalled();
|
|
151
162
|
await ((await isLoaded()) ? must('launchctl', ['kickstart', target]) : bootstrap());
|
|
152
163
|
},
|
|
153
|
-
|
|
154
|
-
// bootout returns before the process has exited: stopped means launchd has the agent gone.
|
|
155
|
-
stop: async () => {
|
|
156
|
-
await exec('launchctl', ['bootout', target]);
|
|
157
|
-
for (let check = 0; await isLoaded(); check += 1) {
|
|
158
|
-
if (check >= STOP_CHECKS) {
|
|
159
|
-
throw new Error(`The trierarch still runs ${String((STOP_CHECKS * STOP_CHECK_MS) / MS_PER_SECOND)} s after it was stopped: see aeolus-trierarch status`);
|
|
160
|
-
}
|
|
161
|
-
await sleep(STOP_CHECK_MS);
|
|
162
|
-
}
|
|
163
|
-
},
|
|
164
|
+
stop: bootout,
|
|
164
165
|
restart: async () => {
|
|
165
166
|
await mustBeInstalled();
|
|
166
167
|
await ((await isLoaded()) ? must('launchctl', ['kickstart', '-k', target]) : bootstrap());
|
|
@@ -191,7 +192,9 @@ export function createService(options) {
|
|
|
191
192
|
install: async () => {
|
|
192
193
|
await write();
|
|
193
194
|
await systemctl('daemon-reload');
|
|
194
|
-
await systemctl('enable',
|
|
195
|
+
await systemctl('enable', SYSTEMD_UNIT);
|
|
196
|
+
// restart, not start: an active unit runs the old file until it restarts. It starts an inactive one too.
|
|
197
|
+
await systemctl('restart', SYSTEMD_UNIT);
|
|
195
198
|
},
|
|
196
199
|
uninstall: async () => {
|
|
197
200
|
await exec('systemctl', ['--user', 'disable', '--now', SYSTEMD_UNIT]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/adapters/service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/adapters/service.ts"],"names":[],"mappings":"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"}
|