@fnndsc/brasa 0.44.1 → 0.45.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/dist/buildinfo.json +1 -1
- package/dist/builtins/help.js +22 -6
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/sys/tasks.d.ts +46 -0
- package/dist/builtins/sys/tasks.js +128 -0
- package/dist/builtins/sys/tasks.js.map +1 -0
- package/dist/builtins/sys/textFilters.js +3 -3
- package/dist/builtins/sys/textFilters.js.map +1 -1
- package/dist/core/backend.d.ts +3 -0
- package/dist/core/backend.js.map +1 -1
- package/dist/core/coreCommands.js +5 -0
- package/dist/core/coreCommands.js.map +1 -1
- package/dist/core/engine.d.ts +8 -0
- package/dist/core/engine.js +15 -3
- package/dist/core/engine.js.map +1 -1
- package/dist/core/runner.d.ts +231 -0
- package/dist/core/runner.js +391 -0
- package/dist/core/runner.js.map +1 -0
- package/dist/core/version.d.ts +14 -0
- package/dist/core/version.js +19 -0
- package/dist/core/version.js.map +1 -1
- package/dist/core.d.ts +2 -1
- package/dist/core.js +2 -1
- package/dist/core.js.map +1 -1
- package/dist/notes.json +1 -1
- package/package.json +5 -5
package/dist/core/engine.d.ts
CHANGED
|
@@ -157,6 +157,14 @@ export interface BrasaEngine {
|
|
|
157
157
|
* @param surface - The surface.
|
|
158
158
|
*/
|
|
159
159
|
surface_install(surface: Surface): void;
|
|
160
|
+
/**
|
|
161
|
+
* Picks up the backend's jobs that were running when the session last
|
|
162
|
+
* ended (core/runner.ts). A host calls it once, after installing its surface,
|
|
163
|
+
* which says whether the `tasks` tier is granted.
|
|
164
|
+
*
|
|
165
|
+
* @returns How many went on.
|
|
166
|
+
*/
|
|
167
|
+
jobs_resume?(): number;
|
|
160
168
|
}
|
|
161
169
|
/**
|
|
162
170
|
* Sets the shared stop-on-error flag. Exposed so the boot layer (which owns
|
package/dist/core/engine.js
CHANGED
|
@@ -42,6 +42,7 @@ import { answerAdapters_register } from '../session/answerAdapters.js';
|
|
|
42
42
|
import { numbering_get } from '../session/answer.js';
|
|
43
43
|
import { sink_get, sink_set } from './sink.js';
|
|
44
44
|
import { backend_install, backendInstalled_get } from './backend.js';
|
|
45
|
+
import { JobRunner, jobsRoot_of, runner_get, runner_install } from './runner.js';
|
|
45
46
|
import { vfsDispatcher_get } from './filesystem.js';
|
|
46
47
|
import { itemType_isContainer } from './itemKinds.js';
|
|
47
48
|
/**
|
|
@@ -254,13 +255,21 @@ async function vfsProviders_register() {
|
|
|
254
255
|
vfsDispatcher.provider_register(new StaticVfsProvider('/usr/games'));
|
|
255
256
|
vfsDispatcher.provider_register(new StaticVfsProvider('/usr/share'));
|
|
256
257
|
vfsDispatcher.provider_register(new StaticVfsProvider('/usr/share/doc'));
|
|
257
|
-
// A backend's task sources that bring no mount of their own are the core's to show.
|
|
258
|
+
// A backend's task sources that bring no mount of their own are the core's to show, the runner's among them.
|
|
258
259
|
const { TaskSourceVfsProvider } = await import('./tasks.js');
|
|
259
|
-
for (const source of
|
|
260
|
+
for (const source of taskSources_all()) {
|
|
260
261
|
if (source.mounted !== true)
|
|
261
262
|
vfsDispatcher.provider_register(new TaskSourceVfsProvider(source));
|
|
262
263
|
}
|
|
263
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* Every task source of the session: the backend's own, and its jobs as the runner keeps them.
|
|
267
|
+
*
|
|
268
|
+
* @returns The sources.
|
|
269
|
+
*/
|
|
270
|
+
function taskSources_all() {
|
|
271
|
+
return [...(backendInstalled_get()?.tasks ?? []), ...(runner_get()?.taskSources_get() ?? [])];
|
|
272
|
+
}
|
|
264
273
|
/**
|
|
265
274
|
* Creates the engine: initializes session state, registers the VFS
|
|
266
275
|
* providers, and returns the facade a host drives.
|
|
@@ -279,6 +288,8 @@ export async function engine_create(backend) {
|
|
|
279
288
|
backend_install(backend);
|
|
280
289
|
// What each listing's rows are, so `@3` can name one.
|
|
281
290
|
answerAdapters_register();
|
|
291
|
+
const jobs = backendInstalled_get()?.jobs ?? [];
|
|
292
|
+
runner_install(jobs.length > 0 ? new JobRunner(jobsRoot_of(backendInstalled_get()?.id ?? 'session'), jobs) : null);
|
|
282
293
|
await session.init();
|
|
283
294
|
await vfsProviders_register();
|
|
284
295
|
// A backend's containers are folders to every tool, the dispatcher's read included.
|
|
@@ -300,7 +311,7 @@ export async function engine_create(backend) {
|
|
|
300
311
|
// The backend answers for its own subjects (ChRIS: feeds); a task it
|
|
301
312
|
// leaves to the core is watched by the core.
|
|
302
313
|
watch_set: (subject, owner, on) => backendInstalled_get()?.watch?.set(subject, owner, on)
|
|
303
|
-
?? taskWatch_set(subject, owner, on,
|
|
314
|
+
?? taskWatch_set(subject, owner, on, taskSources_all()),
|
|
304
315
|
watch_release: (owner) => {
|
|
305
316
|
backendInstalled_get()?.watch?.release(owner);
|
|
306
317
|
taskWatch_release(owner);
|
|
@@ -308,6 +319,7 @@ export async function engine_create(backend) {
|
|
|
308
319
|
ambient_listen,
|
|
309
320
|
sink_install: (sink) => { sink_set(sink); },
|
|
310
321
|
surface_install: (surface) => { surface_set(surface); },
|
|
322
|
+
jobs_resume: () => runner_get()?.jobs_resume() ?? 0,
|
|
311
323
|
};
|
|
312
324
|
}
|
|
313
325
|
/**
|
package/dist/core/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/core/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,cAAc,EACd,0BAA0B,GAE3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,EAChB,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AACxO,OAAO,EAAE,UAAU,EAAE,WAAW,EAAkB,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAkB,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAmB,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/core/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { type TaskProgress, type TaskState } from '@fnndsc/menu';
|
|
2
|
+
import type { TaskSource } from './backend.js';
|
|
3
|
+
/** The model a job's end travels as, on the ambient channel. */
|
|
4
|
+
export declare const JOB_MODEL_KIND: string;
|
|
5
|
+
/** How many of a job's last log lines its task carries as `logTail`. */
|
|
6
|
+
export declare const JOB_LOG_TAIL_LINES: number;
|
|
7
|
+
/**
|
|
8
|
+
* What the runner keeps of one job, on disk and in memory.
|
|
9
|
+
*
|
|
10
|
+
* @property id - Its name in its source, a path segment.
|
|
11
|
+
* @property source - The source's id: the job is `/proc/<source>/<id>`.
|
|
12
|
+
* @property label - What an operator reads it as.
|
|
13
|
+
* @property state - Where it stands.
|
|
14
|
+
* @property progress - How far it has come, when it says.
|
|
15
|
+
* @property started - When it started, ISO 8601.
|
|
16
|
+
* @property ended - When it ended, ISO 8601.
|
|
17
|
+
* @property data - What the job asked to remember (a cloud job's id), read back by `resume`.
|
|
18
|
+
* @property outcome - Its last word: why it failed, or how it ended.
|
|
19
|
+
*/
|
|
20
|
+
export interface JobRecord {
|
|
21
|
+
id: string;
|
|
22
|
+
source: string;
|
|
23
|
+
label: string;
|
|
24
|
+
state: TaskState;
|
|
25
|
+
progress?: TaskProgress;
|
|
26
|
+
started: string;
|
|
27
|
+
ended?: string;
|
|
28
|
+
data: Record<string, unknown>;
|
|
29
|
+
outcome?: string;
|
|
30
|
+
}
|
|
31
|
+
/** What a running job is handed. */
|
|
32
|
+
export interface JobContext {
|
|
33
|
+
/** Aborted when an operator asks the job to stop; the job ends when its current operation does. */
|
|
34
|
+
readonly signal: AbortSignal;
|
|
35
|
+
/** What the job remembered so far (all of it again, after a restart). */
|
|
36
|
+
readonly data: Readonly<Record<string, unknown>>;
|
|
37
|
+
/** Says how far it has come. */
|
|
38
|
+
progress_set(progress: TaskProgress): void;
|
|
39
|
+
/** Writes one line to its log. */
|
|
40
|
+
log_write(line: string): void;
|
|
41
|
+
/** Remembers one value across a restart. */
|
|
42
|
+
data_set(key: string, value: unknown): void;
|
|
43
|
+
}
|
|
44
|
+
/** A job's work: resolves when done, throws when failed; resolving after its signal aborted is a cancel. */
|
|
45
|
+
export type JobRun = (context: JobContext) => Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* One kind of job a backend runs (stratus: a domain's build steps).
|
|
48
|
+
*
|
|
49
|
+
* @property id - Its name, and its folder: `/proc/<id>`.
|
|
50
|
+
* @property label - What an operator reads it as.
|
|
51
|
+
* @property resume - Picks a job that was running when the session ended up
|
|
52
|
+
* again, from its record: the work to go on with, or null when it cannot
|
|
53
|
+
* go on (it is then marked failed, saying so).
|
|
54
|
+
*/
|
|
55
|
+
export interface JobSource {
|
|
56
|
+
readonly id: string;
|
|
57
|
+
readonly label: string;
|
|
58
|
+
readonly resume?: (record: JobRecord) => JobRun | null;
|
|
59
|
+
}
|
|
60
|
+
/** Why a job did not start. */
|
|
61
|
+
export declare class JobRefusal extends Error {
|
|
62
|
+
/**
|
|
63
|
+
* @param message - The refusal, as the operator reads it.
|
|
64
|
+
*/
|
|
65
|
+
constructor(message: string);
|
|
66
|
+
}
|
|
67
|
+
/** What `kill` did. */
|
|
68
|
+
export type JobStopResult = 'stopping' | 'already-stopping' | 'not-running' | 'unknown';
|
|
69
|
+
/**
|
|
70
|
+
* The folder the runner keeps a backend's jobs in:
|
|
71
|
+
* `$XDG_STATE_HOME/<backend>/jobs` (`~/.local/state` when unset).
|
|
72
|
+
*
|
|
73
|
+
* @param backendId - The backend's id.
|
|
74
|
+
* @param env - The environment.
|
|
75
|
+
* @returns The folder.
|
|
76
|
+
*/
|
|
77
|
+
export declare function jobsRoot_of(backendId: string, env?: NodeJS.ProcessEnv): string;
|
|
78
|
+
/** The runner: every job source of one session. */
|
|
79
|
+
export declare class JobRunner {
|
|
80
|
+
private readonly root;
|
|
81
|
+
private readonly sources;
|
|
82
|
+
private readonly allowed;
|
|
83
|
+
private readonly entries;
|
|
84
|
+
private readonly events;
|
|
85
|
+
/**
|
|
86
|
+
* @param root - The folder its records and logs live in.
|
|
87
|
+
* @param sources - The backend's job sources.
|
|
88
|
+
* @param allowed - Whether starting a job is allowed now (the `tasks` tier).
|
|
89
|
+
*/
|
|
90
|
+
constructor(root: string, sources: ReadonlyArray<JobSource>, allowed?: () => boolean);
|
|
91
|
+
/**
|
|
92
|
+
* A job's key in the map.
|
|
93
|
+
*
|
|
94
|
+
* @param source - Its source's id.
|
|
95
|
+
* @param id - Its id.
|
|
96
|
+
* @returns The key.
|
|
97
|
+
*/
|
|
98
|
+
private key_of;
|
|
99
|
+
/**
|
|
100
|
+
* A source's folder, made when missing.
|
|
101
|
+
*
|
|
102
|
+
* @param source - Its id.
|
|
103
|
+
* @returns The folder.
|
|
104
|
+
*/
|
|
105
|
+
private folder_of;
|
|
106
|
+
/**
|
|
107
|
+
* Reads a source's records back from disk.
|
|
108
|
+
*
|
|
109
|
+
* @param source - Its id.
|
|
110
|
+
*/
|
|
111
|
+
private records_load;
|
|
112
|
+
/**
|
|
113
|
+
* A job's log, as lines.
|
|
114
|
+
*
|
|
115
|
+
* @param source - Its source.
|
|
116
|
+
* @param id - Its id.
|
|
117
|
+
* @returns The lines (none when it has no log).
|
|
118
|
+
*/
|
|
119
|
+
private logLines_read;
|
|
120
|
+
/**
|
|
121
|
+
* Saves a job's record.
|
|
122
|
+
*
|
|
123
|
+
* @param entry - The job.
|
|
124
|
+
*/
|
|
125
|
+
private record_save;
|
|
126
|
+
/**
|
|
127
|
+
* Adds a line to a job's log, on disk and in its tail, and tells anyone following.
|
|
128
|
+
*
|
|
129
|
+
* @param entry - The job.
|
|
130
|
+
* @param line - The line.
|
|
131
|
+
*/
|
|
132
|
+
private log_append;
|
|
133
|
+
/**
|
|
134
|
+
* Runs a job's work to its end and records how it ended.
|
|
135
|
+
*
|
|
136
|
+
* @param entry - The job.
|
|
137
|
+
* @param run - Its work.
|
|
138
|
+
* @returns Its record at the end.
|
|
139
|
+
*/
|
|
140
|
+
private work_run;
|
|
141
|
+
/**
|
|
142
|
+
* Starts a job.
|
|
143
|
+
*
|
|
144
|
+
* @param source - Its source's id.
|
|
145
|
+
* @param id - Its id (a path segment); a job of that id that has ended is replaced.
|
|
146
|
+
* @param label - What an operator reads it as.
|
|
147
|
+
* @param run - Its work.
|
|
148
|
+
* @param data - What it starts out remembering.
|
|
149
|
+
* @returns Its record as it starts; `finished` resolves with its record at the end.
|
|
150
|
+
* @throws JobRefusal - Without the `tasks` tier, for an unknown source, or while that id still runs.
|
|
151
|
+
*/
|
|
152
|
+
job_start(source: string, id: string, label: string, run: JobRun, data?: Record<string, unknown>): {
|
|
153
|
+
record: JobRecord;
|
|
154
|
+
finished: Promise<JobRecord>;
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Picks up the jobs that were running when the session last ended: each
|
|
158
|
+
* source's `resume` gives the work to go on with, or the job is marked
|
|
159
|
+
* failed, saying why. Run once, after the surface is installed.
|
|
160
|
+
*
|
|
161
|
+
* @returns How many went on.
|
|
162
|
+
*/
|
|
163
|
+
jobs_resume(): number;
|
|
164
|
+
/**
|
|
165
|
+
* Asks a running job to stop.
|
|
166
|
+
*
|
|
167
|
+
* @param source - Its source.
|
|
168
|
+
* @param id - Its id.
|
|
169
|
+
* @returns What happened.
|
|
170
|
+
*/
|
|
171
|
+
job_stop(source: string, id: string): JobStopResult;
|
|
172
|
+
/**
|
|
173
|
+
* One job's record.
|
|
174
|
+
*
|
|
175
|
+
* @param source - Its source.
|
|
176
|
+
* @param id - Its id.
|
|
177
|
+
* @returns A copy, or undefined.
|
|
178
|
+
*/
|
|
179
|
+
job_get(source: string, id: string): JobRecord | undefined;
|
|
180
|
+
/**
|
|
181
|
+
* Every job, or one source's.
|
|
182
|
+
*
|
|
183
|
+
* @param source - A source's id; absent, all.
|
|
184
|
+
* @returns Copies of their records, newest first.
|
|
185
|
+
*/
|
|
186
|
+
jobs_list(source?: string): JobRecord[];
|
|
187
|
+
/**
|
|
188
|
+
* Follows a job, as `tail -f` does: its last lines kept in memory first,
|
|
189
|
+
* then each new one, then its end.
|
|
190
|
+
*
|
|
191
|
+
* @param source - Its source.
|
|
192
|
+
* @param id - Its id.
|
|
193
|
+
* @param onLine - Hears each new line.
|
|
194
|
+
* @param signal - Stops following (the job goes on).
|
|
195
|
+
* @returns Its record at the end, or at the moment following stopped.
|
|
196
|
+
*/
|
|
197
|
+
job_follow(source: string, id: string, onLine: (line: string) => void, signal?: AbortSignal): Promise<JobRecord | undefined>;
|
|
198
|
+
/**
|
|
199
|
+
* A job's log, whole.
|
|
200
|
+
*
|
|
201
|
+
* @param source - Its source.
|
|
202
|
+
* @param id - Its id.
|
|
203
|
+
* @returns The log, or null when there is none.
|
|
204
|
+
*/
|
|
205
|
+
log_read(source: string, id: string): string | null;
|
|
206
|
+
/**
|
|
207
|
+
* The job sources as task sources, for `/proc` and the tiles.
|
|
208
|
+
*
|
|
209
|
+
* @returns One task source per job source.
|
|
210
|
+
*/
|
|
211
|
+
taskSources_get(): TaskSource[];
|
|
212
|
+
/**
|
|
213
|
+
* A job as a task.
|
|
214
|
+
*
|
|
215
|
+
* @param record - Its record.
|
|
216
|
+
* @returns The task.
|
|
217
|
+
*/
|
|
218
|
+
private task_of;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Installs the session's runner.
|
|
222
|
+
*
|
|
223
|
+
* @param runner - The runner, or null to remove it.
|
|
224
|
+
*/
|
|
225
|
+
export declare function runner_install(runner: JobRunner | null): void;
|
|
226
|
+
/**
|
|
227
|
+
* The session's runner.
|
|
228
|
+
*
|
|
229
|
+
* @returns It, or null when the backend runs no jobs.
|
|
230
|
+
*/
|
|
231
|
+
export declare function runner_get(): JobRunner | null;
|