@aeolus-fleet/trierarch 0.20.2 → 0.20.3
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 +4 -3
- package/dist/adapters/claude-code-detector.js +22 -4
- package/dist/adapters/claude-code-detector.js.map +1 -1
- package/dist/adapters/claude-code-screen.d.ts +5 -0
- package/dist/adapters/claude-code-screen.js +15 -0
- package/dist/adapters/claude-code-screen.js.map +1 -0
- package/dist/adapters/claude-code-setup.d.ts +2 -0
- package/dist/adapters/claude-code-setup.js +4 -0
- package/dist/adapters/claude-code-setup.js.map +1 -1
- package/dist/adapters/claude-code.d.ts +5 -3
- package/dist/adapters/claude-code.js +21 -3
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/adapters/codex-detector.d.ts +5 -0
- package/dist/adapters/codex-detector.js +47 -11
- package/dist/adapters/codex-detector.js.map +1 -1
- package/dist/adapters/codex-screen.d.ts +5 -0
- package/dist/adapters/codex-screen.js +16 -0
- package/dist/adapters/codex-screen.js.map +1 -0
- package/dist/adapters/codex-setup.d.ts +9 -0
- package/dist/adapters/codex-setup.js +36 -0
- package/dist/adapters/codex-setup.js.map +1 -1
- package/dist/adapters/codex.d.ts +1 -1
- package/dist/adapters/codex.js +2 -0
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/detected-file.js +8 -2
- package/dist/adapters/detected-file.js.map +1 -1
- package/dist/adapters/detectors.js +2 -0
- package/dist/adapters/detectors.js.map +1 -1
- package/dist/adapters/harnesses.d.ts +1 -1
- package/dist/adapters/harnesses.js +2 -1
- package/dist/adapters/harnesses.js.map +1 -1
- package/dist/adapters/json-state.js +1 -0
- package/dist/adapters/json-state.js.map +1 -1
- package/dist/adapters/launch-screen.d.ts +18 -0
- package/dist/adapters/launch-screen.js +15 -0
- package/dist/adapters/launch-screen.js.map +1 -0
- package/dist/adapters/log.d.ts +1 -1
- package/dist/adapters/rest-fleet.d.ts +3 -7
- package/dist/adapters/rest-fleet.js +18 -4
- package/dist/adapters/rest-fleet.js.map +1 -1
- package/dist/adapters/tmux.d.ts +2 -0
- package/dist/adapters/tmux.js +6 -0
- package/dist/adapters/tmux.js.map +1 -1
- package/dist/adapters/trust.d.ts +14 -0
- package/dist/adapters/trust.js +29 -0
- package/dist/adapters/trust.js.map +1 -0
- package/dist/cli/add.d.ts +35 -0
- package/dist/cli/add.js +51 -0
- package/dist/cli/add.js.map +1 -0
- package/dist/cli/config-check.js +9 -3
- package/dist/cli/config-check.js.map +1 -1
- package/dist/cli/detect.d.ts +1 -1
- package/dist/cli/detect.js +4 -3
- package/dist/cli/detect.js.map +1 -1
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +17 -16
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.js +13 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/places.d.ts +8 -0
- package/dist/cli/places.js +20 -0
- package/dist/cli/places.js.map +1 -0
- package/dist/cli/run.js +29 -7
- package/dist/cli/run.js.map +1 -1
- package/dist/core/check-settings.d.ts +14 -2
- package/dist/core/check-settings.js +19 -3
- package/dist/core/check-settings.js.map +1 -1
- package/dist/core/detect-harnesses.d.ts +9 -3
- package/dist/core/detect-harnesses.js +6 -5
- package/dist/core/detect-harnesses.js.map +1 -1
- package/dist/core/detected-options.d.ts +7 -1
- package/dist/core/detected-options.js +40 -2
- package/dist/core/detected-options.js.map +1 -1
- package/dist/core/entry.d.ts +2 -0
- package/dist/core/entry.js.map +1 -1
- package/dist/core/ports.d.ts +59 -0
- package/dist/core/reconciler.d.ts +31 -2
- package/dist/core/reconciler.js +100 -13
- package/dist/core/reconciler.js.map +1 -1
- package/dist/core/refuse-model.d.ts +22 -0
- package/dist/core/refuse-model.js +32 -0
- package/dist/core/refuse-model.js.map +1 -0
- package/dist/core/report-self.d.ts +2 -1
- package/dist/core/report-self.js +15 -6
- package/dist/core/report-self.js.map +1 -1
- package/dist/core/run-pass.d.ts +6 -1
- package/dist/core/run-pass.js +68 -8
- package/dist/core/run-pass.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,11 +1,49 @@
|
|
|
1
|
+
/** The option that names the model: its ids come from detection only (#382). */
|
|
2
|
+
export const MODEL_OPTION = 'model';
|
|
3
|
+
/** The detected model option without the ids the machine refused, its default moving to the first id left; none when none is left. */
|
|
4
|
+
function offeredModel(found) {
|
|
5
|
+
const model = found.options[MODEL_OPTION];
|
|
6
|
+
if (model === undefined) {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
const refused = new Set((found.refused ?? []).map((each) => each.id));
|
|
10
|
+
const values = Object.fromEntries(Object.entries(model.values).filter(([id]) => !refused.has(id)));
|
|
11
|
+
const [first] = Object.keys(values);
|
|
12
|
+
if (first === undefined) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
const isDefaultLeft = model.default !== undefined && model.default in values;
|
|
16
|
+
return { values, ...(model.default !== undefined && { default: isDefaultLeft ? model.default : first }) };
|
|
17
|
+
}
|
|
18
|
+
/** The options without the model. */
|
|
19
|
+
function withoutModel(options) {
|
|
20
|
+
return Object.fromEntries(Object.entries(options).filter(([name]) => name !== MODEL_OPTION));
|
|
21
|
+
}
|
|
22
|
+
/** The detected options of a harness as offered: every one detected, the model without its refused ids. */
|
|
23
|
+
function offeredOptions(found) {
|
|
24
|
+
if (found === undefined) {
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
const rest = withoutModel(found.options);
|
|
28
|
+
const model = offeredModel(found);
|
|
29
|
+
return model === undefined ? rest : { [MODEL_OPTION]: model, ...rest };
|
|
30
|
+
}
|
|
1
31
|
/**
|
|
2
32
|
* The configuration with each configured harness's detected options added
|
|
3
33
|
* (#365): an option the operator wrote replaces the detected one of its name
|
|
4
34
|
* whole, values and default, so a hand edit is never overwritten and nothing
|
|
5
|
-
* is merged.
|
|
35
|
+
* is merged. The model is the exception (#382): its ids come from detection
|
|
36
|
+
* only, without the ids the machine refused, so a model the operator wrote is
|
|
37
|
+
* ignored. A detected harness the configuration does not offer is left out.
|
|
6
38
|
*/
|
|
7
39
|
export function withDetectedOptions(configuration, detected) {
|
|
8
|
-
const harnesses = Object.fromEntries(Object.entries(configuration.harnesses).map(([name, harness]) => [name, { ...harness, options: { ...detected[name]
|
|
40
|
+
const harnesses = Object.fromEntries(Object.entries(configuration.harnesses).map(([name, harness]) => [name, { ...harness, options: { ...offeredOptions(detected[name]), ...withoutModel(harness.options) } }]));
|
|
9
41
|
return { ...configuration, harnesses };
|
|
10
42
|
}
|
|
43
|
+
/** The harnesses whose configuration writes a model option, which is ignored (#382): the operator is told. */
|
|
44
|
+
export function modelOptionsIgnored(configuration) {
|
|
45
|
+
return Object.entries(configuration.harnesses)
|
|
46
|
+
.filter(([, harness]) => MODEL_OPTION in harness.options)
|
|
47
|
+
.map(([name]) => name);
|
|
48
|
+
}
|
|
11
49
|
//# sourceMappingURL=detected-options.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detected-options.js","sourceRoot":"","sources":["../../src/core/detected-options.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"detected-options.js","sourceRoot":"","sources":["../../src/core/detected-options.ts"],"names":[],"mappings":"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"}
|
package/dist/core/entry.d.ts
CHANGED
|
@@ -40,6 +40,8 @@ export interface Entry {
|
|
|
40
40
|
/** Where its workspace is, once made. */
|
|
41
41
|
readonly folder?: string;
|
|
42
42
|
readonly hasStarted: boolean;
|
|
43
|
+
/** When the session crewing checks in its launch window started (#382), ISO 8601; none before its launch. */
|
|
44
|
+
readonly launchedAt?: string;
|
|
43
45
|
/** The inbox count last seen, and whether a wake waits for the session to turn idle. */
|
|
44
46
|
readonly wake: {
|
|
45
47
|
readonly waiting: number;
|
package/dist/core/entry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/core/entry.ts"],"names":[],"mappings":"AAiBA,kGAAkG;AAClG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/core/entry.ts"],"names":[],"mappings":"AAiBA,kGAAkG;AAClG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAU,CAAC;AAgDlG,MAAM,CAAC,MAAM,WAAW,GAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAE/F,0CAA0C;AAC1C,MAAM,UAAU,SAAS,CAAC,KAAY,EAAE,MAAwC;IAC9E,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;AAC5E,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,QAAQ,CAAC,KAAqB,EAAE,KAAY;IAC1D,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;AAC5E,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,WAAW,CAAC,KAAqB,EAAE,MAAc;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC;IAClG,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC"}
|
package/dist/core/ports.d.ts
CHANGED
|
@@ -63,6 +63,14 @@ export interface WrittenStatus {
|
|
|
63
63
|
readonly attempt: number;
|
|
64
64
|
readonly startedAt: Date | null;
|
|
65
65
|
}
|
|
66
|
+
/** How the fleet answered a give-back (#382): it took the request back, or refused with its code and message. */
|
|
67
|
+
export type GiveBackAnswer = {
|
|
68
|
+
readonly kind: 'givenBack';
|
|
69
|
+
} | {
|
|
70
|
+
readonly kind: 'refused';
|
|
71
|
+
readonly code: string;
|
|
72
|
+
readonly message: string;
|
|
73
|
+
};
|
|
66
74
|
export interface FleetPort {
|
|
67
75
|
/** The fleet's URL, written into each session's identity. */
|
|
68
76
|
readonly url: string;
|
|
@@ -70,6 +78,20 @@ export interface FleetPort {
|
|
|
70
78
|
assignedRequests(): Promise<readonly AssignedRequest[]>;
|
|
71
79
|
/** Says how its crew of an assigned ship stands, with the restart attempt and when the session started (#332). */
|
|
72
80
|
writeStatus(shipId: ShipId, written: WrittenStatus): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Gives back a request it cannot crew, for the settings version it tried,
|
|
83
|
+
* while its crew is not final (#382): the fleet unassigns it and ends the
|
|
84
|
+
* ship's lease. A refusal is answered, not thrown.
|
|
85
|
+
*/
|
|
86
|
+
giveBack(shipId: ShipId, given: {
|
|
87
|
+
settingsVersion: number;
|
|
88
|
+
reason: string;
|
|
89
|
+
}): Promise<GiveBackAnswer>;
|
|
90
|
+
/** The trierarch's own ship, as its crew token says: its name names the machine. It answers while the lease holds. */
|
|
91
|
+
whoami(): Promise<{
|
|
92
|
+
shipId: ShipId;
|
|
93
|
+
name: string;
|
|
94
|
+
}>;
|
|
73
95
|
/** Confirms it released the ship of a releasing request, which then goes. */
|
|
74
96
|
confirmRelease(shipId: ShipId): Promise<void>;
|
|
75
97
|
ship(shipId: ShipId): Promise<FleetShipStatus>;
|
|
@@ -150,7 +172,24 @@ export interface HarnessPort {
|
|
|
150
172
|
shipId: ShipId;
|
|
151
173
|
folder: string;
|
|
152
174
|
}): Promise<void>;
|
|
175
|
+
/** What the session's screen shows in its launch window (#382), for the model it launched with; any model refused when it launched with none. */
|
|
176
|
+
launchSeen(session: {
|
|
177
|
+
shipId: ShipId;
|
|
178
|
+
model?: string;
|
|
179
|
+
}): Promise<LaunchSeen>;
|
|
153
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* What a session's screen shows in its launch window (#382): activity once
|
|
183
|
+
* its first prompt made a tool call, the model refused, or neither yet.
|
|
184
|
+
*/
|
|
185
|
+
export type LaunchSeen = {
|
|
186
|
+
readonly kind: 'active';
|
|
187
|
+
} | {
|
|
188
|
+
readonly kind: 'refused';
|
|
189
|
+
readonly model: string;
|
|
190
|
+
} | {
|
|
191
|
+
readonly kind: 'none';
|
|
192
|
+
};
|
|
154
193
|
/** A session the process supervisor runs, by ship id: running, or exited and kept so the exit is seen. */
|
|
155
194
|
export interface ObservedSession {
|
|
156
195
|
readonly shipId: ShipId;
|
|
@@ -167,6 +206,19 @@ export interface ObservedWorktree {
|
|
|
167
206
|
readonly name: string;
|
|
168
207
|
readonly shipId?: ShipId;
|
|
169
208
|
}
|
|
209
|
+
/** The configured repositories and folders each configured harness trusts, by name (#381). */
|
|
210
|
+
export type TrustedPlaces = Readonly<Record<string, {
|
|
211
|
+
readonly repositories: readonly string[];
|
|
212
|
+
readonly folders: readonly string[];
|
|
213
|
+
}>>;
|
|
214
|
+
/**
|
|
215
|
+
* What each harness trusts now, as its own files say (#381). Init trusts a
|
|
216
|
+
* place as it adds it; the trierarch only reads: a place a harness does not
|
|
217
|
+
* trust is never offered and never crewed.
|
|
218
|
+
*/
|
|
219
|
+
export interface TrustPort {
|
|
220
|
+
trusted(): Promise<TrustedPlaces>;
|
|
221
|
+
}
|
|
170
222
|
export interface WorkspacePort {
|
|
171
223
|
/** Makes the workspace, or finds the one a stop mid-crew left half made: its folder. */
|
|
172
224
|
prepare(workspace: {
|
|
@@ -210,6 +262,13 @@ export interface DetectedHarness {
|
|
|
210
262
|
readonly options: Readonly<Record<string, ConfiguredOption>>;
|
|
211
263
|
/** Why detection could not find what it should, for argo, once per version; none when it found it. */
|
|
212
264
|
readonly problem?: string;
|
|
265
|
+
/** The model ids a session on this machine refused at this version (#382), never offered again until the version changes or a hand detect; none when none was. */
|
|
266
|
+
readonly refused?: readonly RefusedModel[];
|
|
267
|
+
}
|
|
268
|
+
/** A model id a session refused, and when it was seen on its screen. */
|
|
269
|
+
export interface RefusedModel {
|
|
270
|
+
readonly id: string;
|
|
271
|
+
readonly at: Date;
|
|
213
272
|
}
|
|
214
273
|
/** What detection found, per harness. */
|
|
215
274
|
export type Detected = Readonly<Record<string, DetectedHarness | undefined>>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CrewStatus, ShipId, TrierarchConfiguration } from '@aeolus-fleet/common';
|
|
2
2
|
import { type Refusal } from './check-settings.js';
|
|
3
3
|
import { type Entry, type KeptWorktree, type TrierarchState } from './entry.js';
|
|
4
|
-
import type { ArgoReport, AssignedRequest, ClearRequestToMe, InboxAnswer, ObservedSession, ObservedWorktree, Turn, WrittenStatus } from './ports.js';
|
|
4
|
+
import type { ArgoReport, AssignedRequest, ClearRequestToMe, InboxAnswer, LaunchSeen, ObservedSession, ObservedWorktree, TrustedPlaces, Turn, WrittenStatus } from './ports.js';
|
|
5
5
|
/**
|
|
6
6
|
* The Reconciler (docs/architecture.md, "The trierarch"): a pure function
|
|
7
7
|
* from the crew requests assigned to the trierarch, its saved state, what
|
|
@@ -18,6 +18,8 @@ export interface Observed {
|
|
|
18
18
|
readonly inbox: InboxAnswer;
|
|
19
19
|
readonly turn: Turn;
|
|
20
20
|
}>>;
|
|
21
|
+
/** For each entry crewing whose session started: what its screen shows in its launch window (#382). */
|
|
22
|
+
readonly launches: Readonly<Record<string, LaunchSeen>>;
|
|
21
23
|
}
|
|
22
24
|
export type Action =
|
|
23
25
|
/** Crew the ship: starting prompt, register, workspace, identity, launch. Resumed while its own lease may still hold the ship. */
|
|
@@ -63,12 +65,33 @@ export type Action =
|
|
|
63
65
|
readonly shipId: ShipId;
|
|
64
66
|
readonly note: string;
|
|
65
67
|
}
|
|
66
|
-
/** Tell argo it cannot crew this settings version. */
|
|
68
|
+
/** Tell argo it cannot crew this settings version: its crew is final, so it is not given back. */
|
|
67
69
|
| {
|
|
68
70
|
readonly kind: 'refuse';
|
|
69
71
|
readonly shipId: ShipId;
|
|
70
72
|
readonly settingsVersion: number;
|
|
71
73
|
readonly refusal: Refusal;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Give back a request it cannot crew while its crew is not final (#382), with
|
|
77
|
+
* why, without the machine's name, which the run pass adds. With the entry it
|
|
78
|
+
* crewed with, which ends first: session, identity and clean worktree.
|
|
79
|
+
*/
|
|
80
|
+
| {
|
|
81
|
+
readonly kind: 'giveBack';
|
|
82
|
+
readonly shipId: ShipId;
|
|
83
|
+
readonly settingsVersion: number;
|
|
84
|
+
readonly reason: string;
|
|
85
|
+
readonly entry?: Entry;
|
|
86
|
+
}
|
|
87
|
+
/** A session refused the model it launched with (#382): kept refused at its harness's version, and argo told once. */
|
|
88
|
+
| {
|
|
89
|
+
readonly kind: 'modelRefused';
|
|
90
|
+
readonly shipId: ShipId;
|
|
91
|
+
readonly shipName?: string;
|
|
92
|
+
readonly harness: string;
|
|
93
|
+
readonly version: string;
|
|
94
|
+
readonly model: string;
|
|
72
95
|
} | {
|
|
73
96
|
readonly kind: 'argo';
|
|
74
97
|
readonly report: ArgoReport;
|
|
@@ -92,7 +115,13 @@ export interface ReconcileContext {
|
|
|
92
115
|
readonly observed: Observed;
|
|
93
116
|
readonly now: Date;
|
|
94
117
|
readonly configuration: TrierarchConfiguration;
|
|
118
|
+
/** What each harness trusts now: checked before every launch (#381). */
|
|
119
|
+
readonly trusted: TrustedPlaces;
|
|
120
|
+
/** Each harness's version as detection found it, for the reason a refused model is given back with (#382). */
|
|
121
|
+
readonly versions: Readonly<Record<string, string>>;
|
|
95
122
|
}
|
|
123
|
+
/** How long after its start a crewing session has to show activity (#382): its first prompt made a tool call. */
|
|
124
|
+
export declare const LAUNCH_WINDOW_MS = 60000;
|
|
96
125
|
export declare function reconcile(state: TrierarchState, context: ReconcileContext): Reconciled;
|
|
97
126
|
/**
|
|
98
127
|
* The status an entry writes (#332): its state; the restart attempt, the
|
package/dist/core/reconciler.js
CHANGED
|
@@ -1,11 +1,35 @@
|
|
|
1
|
-
import { checkSettings } from './check-settings.js';
|
|
1
|
+
import { checkSettings, trustRefusal } from './check-settings.js';
|
|
2
|
+
import { MODEL_OPTION } from './detected-options.js';
|
|
2
3
|
import { putEntry, removeEntry, withState } from './entry.js';
|
|
3
4
|
import { decideRestart, exitsInWindow } from './restart-policy.js';
|
|
5
|
+
/** How long after its start a crewing session has to show activity (#382): its first prompt made a tool call. */
|
|
6
|
+
export const LAUNCH_WINDOW_MS = 60_000;
|
|
7
|
+
const NO_ACTIVITY_REASON = 'no activity within a minute of its start';
|
|
4
8
|
const RESTARTING_NOTE = 'blocked: session crashed, restarting';
|
|
5
9
|
const CRASHED_NOTE = 'blocked: session crashed, restart budget spent';
|
|
6
10
|
/** The statuses the reconciler writes; crewing and running at the first crew are the crew's own to write. */
|
|
7
11
|
const WRITTEN = new Set(['running', 'restarting', 'crashed']);
|
|
8
12
|
const NOTHING = { actions: [], starts: 0 };
|
|
13
|
+
/** The statuses at which a crew is final (decision 0029): it is no longer given back. */
|
|
14
|
+
const FINAL = new Set(['running', 'restarting', 'crashed']);
|
|
15
|
+
/**
|
|
16
|
+
* What the trierarch does with settings it cannot crew (#382): while the
|
|
17
|
+
* crew is not final as the fleet holds it, it gives the request back with
|
|
18
|
+
* the field at fault as the reason, ending the entry it crewed with; once it
|
|
19
|
+
* is final, it tells argo, once per settings version.
|
|
20
|
+
*/
|
|
21
|
+
function uncrewable(at) {
|
|
22
|
+
const { request, refusal, state, entry } = at;
|
|
23
|
+
const { shipId, settingsVersion } = request;
|
|
24
|
+
if (state.refused[shipId] === settingsVersion) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
if (request.status === null || !FINAL.has(request.status)) {
|
|
28
|
+
const reason = refusal.field === undefined ? refusal.reason : `${refusal.field}: ${refusal.reason}`;
|
|
29
|
+
return [{ kind: 'giveBack', shipId, settingsVersion, reason, ...(entry !== undefined && { entry }) }];
|
|
30
|
+
}
|
|
31
|
+
return [{ kind: 'refuse', shipId, settingsVersion, refusal }];
|
|
32
|
+
}
|
|
9
33
|
export function reconcile(state, context) {
|
|
10
34
|
const { observed, configuration, requests, now } = context;
|
|
11
35
|
const requested = new Map(requests.map((request) => [request.shipId, request]));
|
|
@@ -25,7 +49,14 @@ export function reconcile(state, context) {
|
|
|
25
49
|
actions.push({ kind: 'release', shipId: entry.shipId });
|
|
26
50
|
continue;
|
|
27
51
|
}
|
|
28
|
-
const step = request.settingsVersion === entry.settingsVersion
|
|
52
|
+
const step = request.settingsVersion === entry.settingsVersion
|
|
53
|
+
? trustedStep(entry, { step: stepOf(entry, { ...context, canStart: canStart() }), request, state: next, context })
|
|
54
|
+
: newVersionStep(entry, { request, state: next, context });
|
|
55
|
+
if (step.isGivenBack === true) {
|
|
56
|
+
next = removeEntry(next, entry.shipId);
|
|
57
|
+
actions.push(...step.actions);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
29
60
|
const after = step.entry ?? entry;
|
|
30
61
|
next = step.entry === undefined ? next : putEntry(next, step.entry);
|
|
31
62
|
actions.push(...step.actions);
|
|
@@ -42,11 +73,9 @@ export function reconcile(state, context) {
|
|
|
42
73
|
actions.push({ kind: 'confirm', shipId: request.shipId });
|
|
43
74
|
continue;
|
|
44
75
|
}
|
|
45
|
-
const checked = checkSettings(request.settings, { shipId: request.shipId, configuration, state: next });
|
|
76
|
+
const checked = checkSettings(request.settings, { shipId: request.shipId, configuration, state: next, trusted: context.trusted });
|
|
46
77
|
if (!checked.isOk) {
|
|
47
|
-
|
|
48
|
-
actions.push({ kind: 'refuse', shipId: request.shipId, settingsVersion: request.settingsVersion, refusal: checked.error });
|
|
49
|
-
}
|
|
78
|
+
actions.push(...uncrewable({ request, refusal: checked.error, state: next }));
|
|
50
79
|
continue;
|
|
51
80
|
}
|
|
52
81
|
if (canStart()) {
|
|
@@ -108,17 +137,20 @@ function entryOf(checked, at) {
|
|
|
108
137
|
* A new settings version of a request it crews (Restart or Edit): the
|
|
109
138
|
* session stops and the ship is crewed again with that version, in its
|
|
110
139
|
* folder, with a fresh restart budget. It is no release: the worktree stays.
|
|
111
|
-
* Settings this trierarch cannot crew are
|
|
112
|
-
*
|
|
140
|
+
* Settings this trierarch cannot crew are given back while the crew is not
|
|
141
|
+
* final, its entry ending; once it is final, argo is told and the entry stays
|
|
142
|
+
* as it was.
|
|
113
143
|
*/
|
|
114
144
|
function newVersionStep(entry, at) {
|
|
115
145
|
const { request, state, context } = at;
|
|
116
|
-
const checked = checkSettings(request.settings, { shipId: entry.shipId, configuration: context.configuration, state });
|
|
146
|
+
const checked = checkSettings(request.settings, { shipId: entry.shipId, configuration: context.configuration, state, trusted: context.trusted });
|
|
117
147
|
if (!checked.isOk) {
|
|
148
|
+
const uncrewed = uncrewable({ request, refusal: checked.error, state, entry });
|
|
149
|
+
if (uncrewed.some((action) => action.kind === 'giveBack')) {
|
|
150
|
+
return { isGivenBack: true, actions: uncrewed, starts: 0 };
|
|
151
|
+
}
|
|
118
152
|
const step = stepOf(entry, { ...context, canStart: false });
|
|
119
|
-
return
|
|
120
|
-
? step
|
|
121
|
-
: { ...step, actions: [...step.actions, { kind: 'refuse', shipId: entry.shipId, settingsVersion: request.settingsVersion, refusal: checked.error }] };
|
|
153
|
+
return { ...step, actions: [...step.actions, ...uncrewed] };
|
|
122
154
|
}
|
|
123
155
|
const fresh = entryOf(checked.value, { shipId: entry.shipId, settingsVersion: request.settingsVersion, now: context.now });
|
|
124
156
|
return {
|
|
@@ -130,6 +162,24 @@ function newVersionStep(entry, at) {
|
|
|
130
162
|
starts: 0,
|
|
131
163
|
};
|
|
132
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* A step that would start the entry's session, held while its harness does
|
|
167
|
+
* not trust its repository or folder (#381): trust is checked before every
|
|
168
|
+
* launch, a restart too. While the crew is not final the request is given
|
|
169
|
+
* back and the entry ends (#382); once it is final, the entry stays as it is
|
|
170
|
+
* and argo is told once per settings version.
|
|
171
|
+
*/
|
|
172
|
+
function trustedStep(entry, at) {
|
|
173
|
+
const { step, request, state, context } = at;
|
|
174
|
+
const isLaunching = step.actions.some((action) => action.kind === 'crew' || action.kind === 'launch');
|
|
175
|
+
const refusal = isLaunching ? trustRefusal({ harness: entry.harness, workspace: entry.workspace, trusted: context.trusted }) : undefined;
|
|
176
|
+
if (refusal === undefined) {
|
|
177
|
+
return step;
|
|
178
|
+
}
|
|
179
|
+
const held = step.actions.filter((action) => action.kind !== 'crew' && action.kind !== 'launch');
|
|
180
|
+
const uncrewed = uncrewable({ request, refusal, state, entry });
|
|
181
|
+
return { ...(uncrewed.some((action) => action.kind === 'giveBack') && { isGivenBack: true }), actions: [...held, ...uncrewed], starts: 0 };
|
|
182
|
+
}
|
|
133
183
|
function stepOf(entry, context) {
|
|
134
184
|
const { observed, now, canStart } = context;
|
|
135
185
|
const seen = observed.ships[entry.shipId];
|
|
@@ -139,7 +189,7 @@ function stepOf(entry, context) {
|
|
|
139
189
|
}
|
|
140
190
|
switch (entry.state) {
|
|
141
191
|
case 'crewing':
|
|
142
|
-
return
|
|
192
|
+
return launchStep(entry, context);
|
|
143
193
|
case 'running':
|
|
144
194
|
return runningStep(entry, context);
|
|
145
195
|
case 'restarting':
|
|
@@ -151,6 +201,43 @@ function stepOf(entry, context) {
|
|
|
151
201
|
return NOTHING;
|
|
152
202
|
}
|
|
153
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* An entry crewing: crewed (again) until its session started, then in its
|
|
206
|
+
* launch window (#382). Activity makes the crew final, so it runs from when
|
|
207
|
+
* its session started. A model refused, or no activity within the minute,
|
|
208
|
+
* gives the request back, its entry ending. A session gone, as after the
|
|
209
|
+
* machine restarts, is crewed again.
|
|
210
|
+
*/
|
|
211
|
+
function launchStep(entry, context) {
|
|
212
|
+
const { observed, now } = context;
|
|
213
|
+
const { launchedAt, ...running } = entry;
|
|
214
|
+
const seen = observed.launches[entry.shipId];
|
|
215
|
+
if (launchedAt === undefined || seen === undefined) {
|
|
216
|
+
return { actions: [{ kind: 'crew', shipId: entry.shipId, isResumed: true }], starts: 1 };
|
|
217
|
+
}
|
|
218
|
+
const giveBack = (reason, first = []) => ({
|
|
219
|
+
isGivenBack: true,
|
|
220
|
+
actions: [...first, { kind: 'giveBack', shipId: entry.shipId, settingsVersion: entry.settingsVersion, reason, entry }],
|
|
221
|
+
starts: 0,
|
|
222
|
+
});
|
|
223
|
+
switch (seen.kind) {
|
|
224
|
+
case 'active':
|
|
225
|
+
// Running since its session started, so the session start it writes is that start; the window is closed.
|
|
226
|
+
return { entry: { ...running, state: 'running', since: launchedAt }, actions: [], starts: 0 };
|
|
227
|
+
case 'refused': {
|
|
228
|
+
const { harness } = entry;
|
|
229
|
+
const version = context.versions[harness];
|
|
230
|
+
const reason = `${harness}${version === undefined ? '' : ` ${version}`} refused ${seen.model}`;
|
|
231
|
+
// The harness's own default refused drops nothing: the machine never offered it as a model.
|
|
232
|
+
if (entry.options[MODEL_OPTION] === undefined || version === undefined) {
|
|
233
|
+
return giveBack(reason);
|
|
234
|
+
}
|
|
235
|
+
return giveBack(reason, [{ kind: 'modelRefused', shipId: entry.shipId, ...(entry.shipName !== undefined && { shipName: entry.shipName }), harness, version, model: seen.model }]);
|
|
236
|
+
}
|
|
237
|
+
case 'none':
|
|
238
|
+
return now.getTime() - new Date(launchedAt).getTime() >= LAUNCH_WINDOW_MS ? giveBack(NO_ACTIVITY_REASON) : NOTHING;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
154
241
|
function runningStep(entry, context) {
|
|
155
242
|
const { observed, now, canStart } = context;
|
|
156
243
|
const session = observed.sessions.find((each) => each.shipId === entry.shipId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconciler.js","sourceRoot":"","sources":["../../src/core/reconciler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reconciler.js","sourceRoot":"","sources":["../../src/core/reconciler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DetectHarnesses } from './detect-harnesses.js';
|
|
2
|
+
import type { Detected, DetectedStore, Logger } from './ports.js';
|
|
3
|
+
/** Keeps a model a session refused as refused, so the machine offers it no more (#382). */
|
|
4
|
+
export type RefuseModel = (refused: {
|
|
5
|
+
harness: string;
|
|
6
|
+
id: string;
|
|
7
|
+
at: Date;
|
|
8
|
+
}) => Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Use case: a session refused the model it launched with (#382). The id is
|
|
11
|
+
* kept refused for its harness's detected version, and what the machine
|
|
12
|
+
* offers now is given at once, so the next pass and the next report offer it
|
|
13
|
+
* no more. Then the harness is detected again in the background, keeping the
|
|
14
|
+
* id refused, and what that finds is given too: the loop never waits on a
|
|
15
|
+
* probe. A harness detection never found has no models to refuse.
|
|
16
|
+
*/
|
|
17
|
+
export declare function createRefuseModel(deps: {
|
|
18
|
+
store: DetectedStore;
|
|
19
|
+
detect: DetectHarnesses;
|
|
20
|
+
onDetected: (detected: Detected) => void;
|
|
21
|
+
logger: Pick<Logger, 'warn'>;
|
|
22
|
+
}): RefuseModel;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Use case: a session refused the model it launched with (#382). The id is
|
|
3
|
+
* kept refused for its harness's detected version, and what the machine
|
|
4
|
+
* offers now is given at once, so the next pass and the next report offer it
|
|
5
|
+
* no more. Then the harness is detected again in the background, keeping the
|
|
6
|
+
* id refused, and what that finds is given too: the loop never waits on a
|
|
7
|
+
* probe. A harness detection never found has no models to refuse.
|
|
8
|
+
*/
|
|
9
|
+
export function createRefuseModel(deps) {
|
|
10
|
+
return async ({ harness, id, at }) => {
|
|
11
|
+
const before = await deps.store.load();
|
|
12
|
+
const found = before[harness];
|
|
13
|
+
if (found === undefined) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const refused = found.refused ?? [];
|
|
17
|
+
const detected = refused.some((each) => each.id === id) ? before : { ...before, [harness]: { ...found, refused: [...refused, { id, at }] } };
|
|
18
|
+
if (detected !== before) {
|
|
19
|
+
await deps.store.save(detected);
|
|
20
|
+
}
|
|
21
|
+
deps.onDetected(detected);
|
|
22
|
+
void deps
|
|
23
|
+
.detect({ harnesses: [harness], by: 'refusal' })
|
|
24
|
+
.then(async () => {
|
|
25
|
+
deps.onDetected(await deps.store.load());
|
|
26
|
+
})
|
|
27
|
+
.catch((error) => {
|
|
28
|
+
deps.logger.warn(`${harness} could not be detected again after it refused ${id}: ${error instanceof Error ? error.message : String(error)}`);
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=refuse-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refuse-model.js","sourceRoot":"","sources":["../../src/core/refuse-model.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA+H;IAC/J,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7I,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1B,KAAK,IAAI;aACN,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;aAC/C,IAAI,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,iDAAiD,EAAE,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/I,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FleetPort, ProcessPort, StatePort, TrierarchSetup } from './ports.js';
|
|
1
|
+
import type { FleetPort, ProcessPort, StatePort, TrierarchSetup, TrustPort } from './ports.js';
|
|
2
2
|
/** Reports the trierarch's own ship when something changed; the first call, at start, always reports. */
|
|
3
3
|
export type ReportSelf = () => Promise<void>;
|
|
4
4
|
/**
|
|
@@ -11,6 +11,7 @@ export type ReportSelf = () => Promise<void>;
|
|
|
11
11
|
export declare function createReportSelf(deps: {
|
|
12
12
|
fleet: FleetPort;
|
|
13
13
|
processes: ProcessPort;
|
|
14
|
+
trust: TrustPort;
|
|
14
15
|
state: StatePort;
|
|
15
16
|
setup: TrierarchSetup;
|
|
16
17
|
}): ReportSelf;
|
package/dist/core/report-self.js
CHANGED
|
@@ -11,7 +11,7 @@ export function createReportSelf(deps) {
|
|
|
11
11
|
return async () => {
|
|
12
12
|
const state = await deps.state.load();
|
|
13
13
|
const running = (await deps.processes.list()).filter((session) => session.status === 'running').length;
|
|
14
|
-
const report = selfReportOf({ setup: deps.setup, state, running });
|
|
14
|
+
const report = selfReportOf({ setup: deps.setup, state, running, trusted: await deps.trust.trusted() });
|
|
15
15
|
const sent = JSON.stringify(report);
|
|
16
16
|
if (sent === lastSent) {
|
|
17
17
|
return;
|
|
@@ -21,18 +21,24 @@ export function createReportSelf(deps) {
|
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
function selfReportOf(at) {
|
|
24
|
-
const { setup, state, running } = at;
|
|
24
|
+
const { setup, state, running, trusted } = at;
|
|
25
25
|
const crashed = Object.values(state.entries).filter((entry) => entry.state === 'crashed').length;
|
|
26
26
|
const note = `${String(running)} of ${String(setup.configuration.caps.ships)} running${crashed > 0 ? `, ${String(crashed)} crashed` : ''}`;
|
|
27
|
-
return { state: running > 0 ? 'working' : 'idle', note, details: detailsOf(setup, state) };
|
|
27
|
+
return { state: running > 0 ? 'working' : 'idle', note, details: detailsOf(setup, { state, trusted }) };
|
|
28
28
|
}
|
|
29
29
|
/** A flag's name, without a value given with `=`. */
|
|
30
30
|
function flagName(flag) {
|
|
31
31
|
return flag.split('=', 1)[0] ?? flag;
|
|
32
32
|
}
|
|
33
|
-
/** The
|
|
34
|
-
function
|
|
33
|
+
/** The places every configured harness trusts: only those are offered (#381). */
|
|
34
|
+
function offeredOf(names, trustedBy) {
|
|
35
|
+
return names.filter((name) => trustedBy.every((places) => places.includes(name)));
|
|
36
|
+
}
|
|
37
|
+
/** The trierarch's report details: what it offers from its configuration and what its harnesses trust, the worktrees it kept and found, its version. */
|
|
38
|
+
function detailsOf(setup, at) {
|
|
35
39
|
const { configuration, version } = setup;
|
|
40
|
+
const { state, trusted } = at;
|
|
41
|
+
const byHarness = Object.keys(configuration.harnesses).map((harness) => trusted[harness] ?? { repositories: [], folders: [] });
|
|
36
42
|
return {
|
|
37
43
|
harnesses: Object.entries(configuration.harnesses).map(([harness, settings]) => {
|
|
38
44
|
const detected = setup.detected?.[harness];
|
|
@@ -44,7 +50,10 @@ function detailsOf(setup, state) {
|
|
|
44
50
|
...(detected !== undefined && { version: detected.version, modelsConfirmedAt: detected.confirmedAt?.toISOString() ?? null }),
|
|
45
51
|
};
|
|
46
52
|
}),
|
|
47
|
-
workspaces: {
|
|
53
|
+
workspaces: {
|
|
54
|
+
repositories: offeredOf(Object.keys(configuration.repositories), byHarness.map((places) => places.repositories)),
|
|
55
|
+
folders: offeredOf(Object.keys(configuration.folders), byHarness.map((places) => places.folders)),
|
|
56
|
+
},
|
|
48
57
|
caps: configuration.caps,
|
|
49
58
|
// Paths stay on the machine: names only (decision 0032).
|
|
50
59
|
kept: state.kept.map(({ shipId, repository }) => ({ shipId, repository })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-self.js","sourceRoot":"","sources":["../../src/core/report-self.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAOtD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"report-self.js","sourceRoot":"","sources":["../../src/core/report-self.ts"],"names":[],"mappings":"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"}
|