@t4h.framework/dev 0.0.0-experimental-20261006121555 → 0.0.0-experimental-20261006133319

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.
Files changed (56) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/README.md +7 -0
  3. package/dist/AppProcess.d.ts +7 -1
  4. package/dist/AppProcess.js +5 -2
  5. package/dist/AppProcess.js.map +1 -1
  6. package/dist/HeadlessApp.d.ts +3 -1
  7. package/dist/HeadlessApp.js +2 -2
  8. package/dist/HeadlessApp.js.map +1 -1
  9. package/dist/Server.d.ts +3 -0
  10. package/dist/Server.js +5 -0
  11. package/dist/Server.js.map +1 -1
  12. package/dist/constants/server.d.ts +4 -0
  13. package/dist/constants/server.js +4 -0
  14. package/dist/constants/server.js.map +1 -1
  15. package/dist/index.d.ts +5 -0
  16. package/dist/index.js +4 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/models/RuntimeControlServer.d.ts +32 -0
  19. package/dist/models/RuntimeControlServer.js +75 -0
  20. package/dist/models/RuntimeControlServer.js.map +1 -0
  21. package/dist/models/RuntimeDebugLog.d.ts +10 -0
  22. package/dist/models/RuntimeDebugLog.js +32 -0
  23. package/dist/models/RuntimeDebugLog.js.map +1 -0
  24. package/dist/models/RuntimeEvent.d.ts +95 -0
  25. package/dist/models/RuntimeEvent.js +2 -0
  26. package/dist/models/RuntimeEvent.js.map +1 -0
  27. package/dist/models/WorkflowRunJob.d.ts +4 -0
  28. package/dist/services/RuntimeEvents.service.d.ts +16 -0
  29. package/dist/services/RuntimeEvents.service.js +35 -0
  30. package/dist/services/RuntimeEvents.service.js.map +1 -0
  31. package/dist/services/WorkflowRunScheduler.service.d.ts +11 -1
  32. package/dist/services/WorkflowRunScheduler.service.js +93 -3
  33. package/dist/services/WorkflowRunScheduler.service.js.map +1 -1
  34. package/dist/tools/format-runtime-event.d.ts +3 -0
  35. package/dist/tools/format-runtime-event.js +51 -0
  36. package/dist/tools/format-runtime-event.js.map +1 -0
  37. package/dist/tools/runtime-control-client.d.ts +15 -0
  38. package/dist/tools/runtime-control-client.js +54 -0
  39. package/dist/tools/runtime-control-client.js.map +1 -0
  40. package/dist/tools/runtime-registry.d.ts +26 -0
  41. package/dist/tools/runtime-registry.js +57 -0
  42. package/dist/tools/runtime-registry.js.map +1 -0
  43. package/dist/tools/start-runtime-monitor.d.ts +12 -0
  44. package/dist/tools/start-runtime-monitor.js +69 -0
  45. package/dist/tools/start-runtime-monitor.js.map +1 -0
  46. package/dist/use-cases/ExecuteWorkflowRunAsyncActivity.usecase.d.ts +3 -1
  47. package/dist/use-cases/ExecuteWorkflowRunAsyncActivity.usecase.js +20 -2
  48. package/dist/use-cases/ExecuteWorkflowRunAsyncActivity.usecase.js.map +1 -1
  49. package/dist/use-cases/NextTickWorkflowRun.usecase.d.ts +3 -1
  50. package/dist/use-cases/NextTickWorkflowRun.usecase.js +40 -3
  51. package/dist/use-cases/NextTickWorkflowRun.usecase.js.map +1 -1
  52. package/dist/workers/app-process.js +31 -16
  53. package/dist/workers/app-process.js.map +1 -1
  54. package/dist/workers/workflow-worker.js +4 -0
  55. package/dist/workers/workflow-worker.js.map +1 -1
  56. package/package.json +1 -1
@@ -0,0 +1,16 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import type { RuntimeEvent, RuntimeEventBody } from '../models/RuntimeEvent.js';
3
+ /**
4
+ * Publishes what the runtime does (jobs, runs, activities, timeouts) for the
5
+ * debug log and `framework runtime watch`. Worker threads forward their
6
+ * events to the coordinator, which is the only one with listeners.
7
+ */
8
+ export declare class RuntimeEventsService extends EventEmitter<{
9
+ event: [RuntimeEvent];
10
+ }> {
11
+ private forward;
12
+ forwardTo(forward: (event: RuntimeEvent) => void): void;
13
+ publish(body: RuntimeEventBody): void;
14
+ /** Re-emits an event that already happened elsewhere (a worker). */
15
+ dispatch(event: RuntimeEvent): void;
16
+ }
@@ -0,0 +1,35 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { EventEmitter } from 'node:events';
8
+ import { Injectable } from 'pleroma';
9
+ /**
10
+ * Publishes what the runtime does (jobs, runs, activities, timeouts) for the
11
+ * debug log and `framework runtime watch`. Worker threads forward their
12
+ * events to the coordinator, which is the only one with listeners.
13
+ */
14
+ let RuntimeEventsService = class RuntimeEventsService extends EventEmitter {
15
+ forward = null;
16
+ forwardTo(forward) {
17
+ this.forward = forward;
18
+ }
19
+ publish(body) {
20
+ if (!this.forward && this.listenerCount('event') === 0)
21
+ return;
22
+ this.dispatch({ ...body, at: new Date().toISOString() });
23
+ }
24
+ /** Re-emits an event that already happened elsewhere (a worker). */
25
+ dispatch(event) {
26
+ if (this.forward)
27
+ return this.forward(event);
28
+ this.emit('event', event);
29
+ }
30
+ };
31
+ RuntimeEventsService = __decorate([
32
+ Injectable()
33
+ ], RuntimeEventsService);
34
+ export { RuntimeEventsService };
35
+ //# sourceMappingURL=RuntimeEvents.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeEvents.service.js","sourceRoot":"","sources":["../../src/services/RuntimeEvents.service.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAIpC;;;;GAIG;AAEI,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,YAExC;IACQ,OAAO,GAA2C,IAAI,CAAA;IAEvD,SAAS,CAAC,OAAsC;QACrD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEM,OAAO,CAAC,IAAsB;QACnC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAM;QAE9D,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,oEAAoE;IAC7D,QAAQ,CAAC,KAAmB;QACjC,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAE5C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC3B,CAAC;CACF,CAAA;AArBY,oBAAoB;IADhC,UAAU,EAAE;GACA,oBAAoB,CAqBhC"}
@@ -1,4 +1,6 @@
1
+ import { RuntimeEventsService } from './RuntimeEvents.service.js';
1
2
  import { TimeoutSchedulerService } from './TimeoutScheduler.service.js';
3
+ import type { RuntimeJobSummary, RuntimeQueueSnapshot, RuntimeQueueStats } from '../models/RuntimeEvent.js';
2
4
  import type { WorkflowRunJob } from '../models/WorkflowRunJob.js';
3
5
  import { WorkflowRunRepository } from '../repositories/WorkflowRun.repository.js';
4
6
  export interface WorkflowRunJobExecutor {
@@ -15,9 +17,11 @@ export interface WorkflowRunSchedulerForward {
15
17
  scheduleTimeout(runId: string, pendingId: string, timeoutAt: Date): void;
16
18
  cancelTimeout(pendingId: string): void;
17
19
  }
20
+ export declare function toRuntimeJobSummary(job: WorkflowRunJob): RuntimeJobSummary;
18
21
  export declare class WorkflowRunSchedulerService {
19
22
  private readonly timeoutScheduler;
20
23
  private readonly workflowRunRepository;
24
+ private readonly runtimeEvents;
21
25
  private executor;
22
26
  private forward;
23
27
  private readonly urgent;
@@ -27,7 +31,12 @@ export declare class WorkflowRunSchedulerService {
27
31
  private readonly laneByRun;
28
32
  private inFlight;
29
33
  private pinnedByLane;
30
- constructor(timeoutScheduler: TimeoutSchedulerService, workflowRunRepository: WorkflowRunRepository);
34
+ private readonly running;
35
+ constructor(timeoutScheduler: TimeoutSchedulerService, workflowRunRepository: WorkflowRunRepository, runtimeEvents: RuntimeEventsService);
36
+ /** Counts of the queue and of every lane. */
37
+ stats(): RuntimeQueueStats;
38
+ /** `stats()` plus the jobs running and the first ones waiting. */
39
+ snapshot(): RuntimeQueueSnapshot;
31
40
  /** Runs jobs on `executor` instead of the current thread. */
32
41
  use(executor: WorkflowRunJobExecutor): void;
33
42
  /** Hands every job and timeout to the coordinator (worker threads). */
@@ -48,5 +57,6 @@ export declare class WorkflowRunSchedulerService {
48
57
  private dispatch;
49
58
  private unpinIfSettled;
50
59
  private isQueued;
60
+ private publishQueued;
51
61
  private logFailure;
52
62
  }
@@ -9,13 +9,26 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
9
9
  };
10
10
  import { styleText } from 'node:util';
11
11
  import { Inject, Injectable } from 'pleroma';
12
+ import { RuntimeEventsService } from './RuntimeEvents.service.js';
12
13
  import { TimeoutSchedulerService } from './TimeoutScheduler.service.js';
13
14
  import { LocalWorkflowRunJobExecutor } from '../models/LocalWorkflowRunJobExecutor.js';
14
15
  import { WorkflowRunRepository } from '../repositories/WorkflowRun.repository.js';
15
16
  const jobRunId = (job) => 'runId' in job ? job.runId : undefined;
17
+ const SNAPSHOT_WAITING_LIMIT = 50;
18
+ export function toRuntimeJobSummary(job) {
19
+ const target = 'pendingId' in job
20
+ ? job.pendingId
21
+ : 'activityId' in job
22
+ ? job.activityId
23
+ : 'childRunId' in job
24
+ ? job.childRunId
25
+ : null;
26
+ return { kind: job.kind, runId: jobRunId(job) ?? null, target };
27
+ }
16
28
  let WorkflowRunSchedulerService = class WorkflowRunSchedulerService {
17
29
  timeoutScheduler;
18
30
  workflowRunRepository;
31
+ runtimeEvents;
19
32
  executor = null;
20
33
  forward = null;
21
34
  urgent = [];
@@ -25,9 +38,39 @@ let WorkflowRunSchedulerService = class WorkflowRunSchedulerService {
25
38
  laneByRun = new Map();
26
39
  inFlight = [];
27
40
  pinnedByLane = [];
28
- constructor(timeoutScheduler, workflowRunRepository) {
41
+ running = new Set();
42
+ constructor(timeoutScheduler, workflowRunRepository, runtimeEvents) {
29
43
  this.timeoutScheduler = timeoutScheduler;
30
44
  this.workflowRunRepository = workflowRunRepository;
45
+ this.runtimeEvents = runtimeEvents;
46
+ }
47
+ /** Counts of the queue and of every lane. */
48
+ stats() {
49
+ const { lanes, concurrency } = this.getExecutor();
50
+ const inFlight = this.inFlight.reduce((sum, count) => sum + count, 0);
51
+ return {
52
+ workers: lanes,
53
+ concurrency,
54
+ capacity: lanes * concurrency,
55
+ queued: this.urgent.length + this.normal.length,
56
+ urgent: this.urgent.length,
57
+ inFlight,
58
+ lanes: this.inFlight.map((count, lane) => ({
59
+ lane,
60
+ inFlight: count,
61
+ pinnedRuns: this.pinnedByLane[lane] ?? 0,
62
+ })),
63
+ };
64
+ }
65
+ /** `stats()` plus the jobs running and the first ones waiting. */
66
+ snapshot() {
67
+ return {
68
+ ...this.stats(),
69
+ running: [...this.running].map(job => ({ ...job })),
70
+ waiting: [...this.urgent, ...this.normal]
71
+ .slice(0, SNAPSHOT_WAITING_LIMIT)
72
+ .map(entry => toRuntimeJobSummary(entry.job)),
73
+ };
31
74
  }
32
75
  /** Runs jobs on `executor` instead of the current thread. */
33
76
  use(executor) {
@@ -54,6 +97,7 @@ let WorkflowRunSchedulerService = class WorkflowRunSchedulerService {
54
97
  resolve: () => { },
55
98
  reject: error => this.logFailure(job, error),
56
99
  });
100
+ this.publishQueued(job);
57
101
  this.drain();
58
102
  }
59
103
  /** Queues a job ahead of background work and resolves with its result. */
@@ -66,6 +110,7 @@ let WorkflowRunSchedulerService = class WorkflowRunSchedulerService {
66
110
  resolve: value => resolve(value),
67
111
  reject,
68
112
  });
113
+ this.publishQueued(job);
69
114
  this.drain();
70
115
  });
71
116
  }
@@ -76,7 +121,16 @@ let WorkflowRunSchedulerService = class WorkflowRunSchedulerService {
76
121
  scheduleTimeout(runId, pendingId, timeoutAt) {
77
122
  if (this.forward)
78
123
  return this.forward.scheduleTimeout(runId, pendingId, timeoutAt);
79
- this.timeoutScheduler.schedule(pendingId, timeoutAt, () => this.enqueue({ kind: 'pending.execute', runId, pendingId }));
124
+ this.timeoutScheduler.schedule(pendingId, timeoutAt, () => {
125
+ this.runtimeEvents.publish({ type: 'timeout:fired', runId, pendingId });
126
+ this.enqueue({ kind: 'pending.execute', runId, pendingId });
127
+ });
128
+ this.runtimeEvents.publish({
129
+ type: 'timeout:scheduled',
130
+ runId,
131
+ pendingId,
132
+ timeoutAt: timeoutAt.toISOString(),
133
+ });
80
134
  }
81
135
  cancelTimeout(pendingId) {
82
136
  if (this.forward)
@@ -147,11 +201,39 @@ let WorkflowRunSchedulerService = class WorkflowRunSchedulerService {
147
201
  }
148
202
  }
149
203
  this.inFlight[lane] += 1;
204
+ const summary = toRuntimeJobSummary(job);
205
+ const startedAt = Date.now();
206
+ const running = {
207
+ ...summary,
208
+ lane,
209
+ startedAt: new Date(startedAt).toISOString(),
210
+ };
211
+ this.running.add(running);
212
+ this.runtimeEvents.publish({
213
+ type: 'job:started',
214
+ job: summary,
215
+ lane,
216
+ queue: this.stats(),
217
+ });
218
+ let failure = null;
150
219
  this.getExecutor()
151
220
  .execute(lane, job)
221
+ .catch(error => {
222
+ failure = error instanceof Error ? error.message : String(error);
223
+ throw error;
224
+ })
152
225
  .then(resolve, reject)
153
226
  .finally(() => {
154
227
  this.inFlight[lane] -= 1;
228
+ this.running.delete(running);
229
+ this.runtimeEvents.publish({
230
+ type: 'job:finished',
231
+ job: summary,
232
+ lane,
233
+ durationInMs: Date.now() - startedAt,
234
+ error: failure,
235
+ queue: this.stats(),
236
+ });
155
237
  if (runId) {
156
238
  this.busyRuns.delete(runId);
157
239
  void this.unpinIfSettled(runId);
@@ -174,6 +256,13 @@ let WorkflowRunSchedulerService = class WorkflowRunSchedulerService {
174
256
  isQueued(runId) {
175
257
  return [...this.urgent, ...this.normal].some(entry => jobRunId(entry.job) === runId);
176
258
  }
259
+ publishQueued(job) {
260
+ this.runtimeEvents.publish({
261
+ type: 'job:queued',
262
+ job: toRuntimeJobSummary(job),
263
+ queue: this.stats(),
264
+ });
265
+ }
177
266
  logFailure(job, error) {
178
267
  const target = jobRunId(job);
179
268
  console.error(styleText('red', `[Runtime] ${job.kind} failed${target ? ` for run ${target}` : ''}:`, { stream: process.stderr }), error);
@@ -182,7 +271,8 @@ let WorkflowRunSchedulerService = class WorkflowRunSchedulerService {
182
271
  WorkflowRunSchedulerService = __decorate([
183
272
  Injectable(),
184
273
  __param(0, Inject(() => TimeoutSchedulerService)),
185
- __param(1, Inject(() => WorkflowRunRepository))
274
+ __param(1, Inject(() => WorkflowRunRepository)),
275
+ __param(2, Inject(() => RuntimeEventsService))
186
276
  ], WorkflowRunSchedulerService);
187
277
  export { WorkflowRunSchedulerService };
188
278
  //# sourceMappingURL=WorkflowRunScheduler.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowRunScheduler.service.js","sourceRoot":"","sources":["../../src/services/WorkflowRunScheduler.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WorkflowRunScheduler.service.js","sourceRoot":"","sources":["../../src/services/WorkflowRunScheduler.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RuntimeEvent } from '../models/RuntimeEvent.js';
2
+ /** One human-readable line per event, for the terminal. */
3
+ export declare function formatRuntimeEvent(event: RuntimeEvent): string;
@@ -0,0 +1,51 @@
1
+ const time = (at) => at.slice(11, 23);
2
+ const job = ({ kind, runId, target }) => [
3
+ kind,
4
+ ...(runId ? [`run=${runId}`] : []),
5
+ ...(target ? [`target=${target}`] : []),
6
+ ].join(' ');
7
+ const queue = ({ queued, inFlight, capacity }) => `queue=${queued} running=${inFlight}/${capacity}`;
8
+ function describe(event) {
9
+ switch (event.type) {
10
+ case 'job:queued':
11
+ return `${job(event.job)} | ${queue(event.queue)}`;
12
+ case 'job:started':
13
+ return `${job(event.job)} lane=${event.lane} | ${queue(event.queue)}`;
14
+ case 'job:finished':
15
+ return [
16
+ `${job(event.job)} lane=${event.lane} ${event.durationInMs}ms`,
17
+ event.error ? `failed: ${event.error}` : 'ok',
18
+ `| ${queue(event.queue)}`,
19
+ ].join(' ');
20
+ case 'run:created':
21
+ return [
22
+ `${event.workflow} run=${event.runId}`,
23
+ ...(event.parentRunId ? [`parent=${event.parentRunId}`] : []),
24
+ ].join(' ');
25
+ case 'run:settled':
26
+ return `${event.workflow} run=${event.runId} ${event.status}`;
27
+ case 'activity:started':
28
+ return `${event.activityType} (${event.kind}) run=${event.runId} activity=${event.activityId}`;
29
+ case 'activity:waiting':
30
+ return [
31
+ `${event.activityType} run=${event.runId} activity=${event.activityId}`,
32
+ ...(event.timeoutAt ? [`timeout=${event.timeoutAt}`] : []),
33
+ ].join(' ');
34
+ case 'activity:settled':
35
+ return [
36
+ `${event.activityType} ${event.status} run=${event.runId} activity=${event.activityId}`,
37
+ ...(event.error ? [`error: ${event.error}`] : []),
38
+ ].join(' ');
39
+ case 'timeout:scheduled':
40
+ return `run=${event.runId} pending=${event.pendingId} at=${event.timeoutAt}`;
41
+ case 'timeout:fired':
42
+ return `run=${event.runId} pending=${event.pendingId}`;
43
+ case 'worker:lost':
44
+ return `lane=${event.lane} ${event.error}`;
45
+ }
46
+ }
47
+ /** One human-readable line per event, for the terminal. */
48
+ export function formatRuntimeEvent(event) {
49
+ return `${time(event.at)} ${event.type.padEnd(17)} ${describe(event)}`;
50
+ }
51
+ //# sourceMappingURL=format-runtime-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-runtime-event.js","sourceRoot":"","sources":["../../src/tools/format-runtime-event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { RuntimeInfo, RuntimeStatus } from './runtime-registry.js';
2
+ import type { RuntimeEvent } from '../models/RuntimeEvent.js';
3
+ export interface RuntimeWatcher {
4
+ /** Resolves when the runtime closes the connection (or `close()` is called). */
5
+ readonly closed: Promise<void>;
6
+ close(): void;
7
+ }
8
+ export interface RuntimeWatchHandlers {
9
+ onStatus?: (status: RuntimeStatus) => void;
10
+ onEvent: (event: RuntimeEvent) => void;
11
+ }
12
+ /** Reads the queue and run counts of a running app process. */
13
+ export declare function requestRuntimeStatus(runtime: Pick<RuntimeInfo, 'socket'>): Promise<RuntimeStatus>;
14
+ /** Follows the events of a running app process until it closes. */
15
+ export declare function watchRuntime(runtime: Pick<RuntimeInfo, 'socket'>, { onStatus, onEvent }: RuntimeWatchHandlers): RuntimeWatcher;
@@ -0,0 +1,54 @@
1
+ import net from 'node:net';
2
+ const toStatus = ({ runtime, queue, runs }) => ({
3
+ runtime,
4
+ queue,
5
+ runs,
6
+ });
7
+ function connect(runtime, request, onMessage) {
8
+ const socket = net.createConnection(runtime.socket);
9
+ const closed = Promise.withResolvers();
10
+ let buffer = '';
11
+ socket.setEncoding('utf8');
12
+ socket.on('connect', () => socket.write(`${JSON.stringify(request)}\n`));
13
+ socket.on('data', (chunk) => {
14
+ buffer += chunk;
15
+ let end;
16
+ while ((end = buffer.indexOf('\n')) !== -1) {
17
+ const line = buffer.slice(0, end);
18
+ buffer = buffer.slice(end + 1);
19
+ if (line)
20
+ onMessage(JSON.parse(line));
21
+ }
22
+ });
23
+ socket.on('error', closed.reject);
24
+ socket.on('close', () => closed.resolve());
25
+ return { socket, closed: closed.promise };
26
+ }
27
+ /** Reads the queue and run counts of a running app process. */
28
+ export async function requestRuntimeStatus(runtime) {
29
+ let status = null;
30
+ let failure = null;
31
+ const { closed } = connect(runtime, { method: 'status' }, message => {
32
+ if (message.type === 'status')
33
+ status = toStatus(message);
34
+ if (message.type === 'error')
35
+ failure = message.message;
36
+ });
37
+ await closed;
38
+ if (failure)
39
+ throw new Error(failure);
40
+ if (!status)
41
+ throw new Error('The runtime closed without a status');
42
+ return status;
43
+ }
44
+ /** Follows the events of a running app process until it closes. */
45
+ export function watchRuntime(runtime, { onStatus, onEvent }) {
46
+ const { socket, closed } = connect(runtime, { method: 'watch' }, message => {
47
+ if (message.type === 'status')
48
+ onStatus?.(toStatus(message));
49
+ if (message.type === 'event')
50
+ onEvent(message.event);
51
+ });
52
+ return { closed, close: () => socket.end() };
53
+ }
54
+ //# sourceMappingURL=runtime-control-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-control-client.js","sourceRoot":"","sources":["../../src/tools/runtime-control-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { RuntimeQueueSnapshot } from '../models/RuntimeEvent.js';
2
+ export type RuntimeKind = 'dev' | 'headless' | 'app';
3
+ /** What a running app process advertises about itself. */
4
+ export interface RuntimeInfo {
5
+ pid: number;
6
+ /** The `framework dev` / `framework workflows` process that forked it. */
7
+ parentPid: number;
8
+ kind: RuntimeKind;
9
+ projectDir: string | null;
10
+ entrypoint: string;
11
+ socket: string;
12
+ startedAt: string;
13
+ }
14
+ export interface RuntimeStatus {
15
+ runtime: RuntimeInfo;
16
+ queue: RuntimeQueueSnapshot;
17
+ runs: {
18
+ running: number;
19
+ };
20
+ }
21
+ /** Per-user directory where running app processes register. */
22
+ export declare function runtimeRegistryDir(): string;
23
+ export declare function runtimeRegistryFile(pid: number): string;
24
+ export declare function runtimeSocketPath(pid: number): string;
25
+ /** Runtimes still running, oldest first; leftovers of dead ones are removed. */
26
+ export declare function listRuntimes(): Promise<RuntimeInfo[]>;
@@ -0,0 +1,57 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ /** Per-user directory where running app processes register. */
5
+ export function runtimeRegistryDir() {
6
+ return path.join(os.tmpdir(), 't4h-framework', 'runtimes');
7
+ }
8
+ export function runtimeRegistryFile(pid) {
9
+ return path.join(runtimeRegistryDir(), `${pid}.json`);
10
+ }
11
+ export function runtimeSocketPath(pid) {
12
+ if (process.platform === 'win32')
13
+ return `\\\\.\\pipe\\t4h-framework-runtime-${pid}`;
14
+ return path.join(runtimeRegistryDir(), `${pid}.sock`);
15
+ }
16
+ function isAlive(pid) {
17
+ try {
18
+ process.kill(pid, 0);
19
+ return true;
20
+ }
21
+ catch (error) {
22
+ return error.code === 'EPERM';
23
+ }
24
+ }
25
+ /** Runtimes still running, oldest first; leftovers of dead ones are removed. */
26
+ export async function listRuntimes() {
27
+ const dir = runtimeRegistryDir();
28
+ let names;
29
+ try {
30
+ names = await fs.promises.readdir(dir);
31
+ }
32
+ catch {
33
+ return [];
34
+ }
35
+ const runtimes = [];
36
+ for (const name of names) {
37
+ if (!name.endsWith('.json'))
38
+ continue;
39
+ const file = path.join(dir, name);
40
+ let info;
41
+ try {
42
+ info = JSON.parse(await fs.promises.readFile(file, 'utf8'));
43
+ }
44
+ catch {
45
+ continue;
46
+ }
47
+ if (isAlive(info.pid)) {
48
+ runtimes.push(info);
49
+ continue;
50
+ }
51
+ await fs.promises.rm(file, { force: true });
52
+ if (process.platform !== 'win32')
53
+ await fs.promises.rm(info.socket, { force: true });
54
+ }
55
+ return runtimes.sort((a, b) => a.startedAt.localeCompare(b.startedAt));
56
+ }
57
+ //# sourceMappingURL=runtime-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-registry.js","sourceRoot":"","sources":["../../src/tools/runtime-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAwB5B,+DAA+D;AAC/D,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,UAAU,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC9B,OAAO,sCAAsC,GAAG,EAAE,CAAA;IAEpD,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,CAAA;AACvD,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QAEpB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAQ,KAA+B,CAAC,IAAI,KAAK,OAAO,CAAA;IAC1D,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAA;IAEhC,IAAI,KAAe,CAAA;IAEnB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,QAAQ,GAAkB,EAAE,CAAA;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAQ;QAErC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAEjC,IAAI,IAAiB,CAAA;QAErB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEnB,SAAQ;QACV,CAAC;QAED,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC9B,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;AACxE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type RuntimeKind } from './runtime-registry.js';
2
+ export interface RuntimeMonitorOptions {
3
+ kind: RuntimeKind;
4
+ projectDir: string | null;
5
+ entrypoint: string;
6
+ /** `-` (stderr), a file path (NDJSON) or `null` for no debug log. */
7
+ debugLog: string | null;
8
+ }
9
+ /** Turns run events into runtime events and opens the debug log. */
10
+ export declare function startRuntimeEvents(debugLog: string | null): void;
11
+ /** Registers this app process so `framework runtime` can find and watch it. */
12
+ export declare function startRuntimeControl({ kind, projectDir, entrypoint, }: Omit<RuntimeMonitorOptions, 'debugLog'>): Promise<void>;
@@ -0,0 +1,69 @@
1
+ import { styleText } from 'node:util';
2
+ import { container } from 'pleroma';
3
+ import { runtimeSocketPath, } from './runtime-registry.js';
4
+ import { RuntimeControlServer } from '../models/RuntimeControlServer.js';
5
+ import { RuntimeDebugLog } from '../models/RuntimeDebugLog.js';
6
+ import { RuntimeEventsService } from '../services/RuntimeEvents.service.js';
7
+ import { WorkflowRunEventsService } from '../services/WorkflowRunEvents.service.js';
8
+ import { WorkflowRunFacade } from '../services/WorkflowRunFacade.service.js';
9
+ import { WorkflowRunSchedulerService } from '../services/WorkflowRunScheduler.service.js';
10
+ /** Turns run events into runtime events and opens the debug log. */
11
+ export function startRuntimeEvents(debugLog) {
12
+ const runtimeEvents = container.resolve(RuntimeEventsService);
13
+ const runEvents = container.resolve(WorkflowRunEventsService);
14
+ const settled = new Set();
15
+ runEvents.on('run:created', (run) => runtimeEvents.publish({
16
+ type: 'run:created',
17
+ runId: run.id,
18
+ workflow: run.workflow,
19
+ parentRunId: run.parentWorkflowRun,
20
+ }));
21
+ runEvents.on('run:updated', (run) => {
22
+ if (run.status === 'running' || settled.has(run.id))
23
+ return;
24
+ settled.add(run.id);
25
+ runtimeEvents.publish({
26
+ type: 'run:settled',
27
+ runId: run.id,
28
+ workflow: run.workflow,
29
+ status: run.status,
30
+ });
31
+ });
32
+ if (!debugLog)
33
+ return;
34
+ const log = new RuntimeDebugLog(debugLog);
35
+ runtimeEvents.on('event', log.write);
36
+ process.once('exit', () => log.close());
37
+ }
38
+ /** Registers this app process so `framework runtime` can find and watch it. */
39
+ export async function startRuntimeControl({ kind, projectDir, entrypoint, }) {
40
+ const scheduler = container.resolve(WorkflowRunSchedulerService);
41
+ const info = {
42
+ pid: process.pid,
43
+ parentPid: process.ppid,
44
+ kind,
45
+ projectDir,
46
+ entrypoint,
47
+ socket: runtimeSocketPath(process.pid),
48
+ startedAt: new Date().toISOString(),
49
+ };
50
+ const control = new RuntimeControlServer(info, async () => ({
51
+ runtime: info,
52
+ queue: scheduler.snapshot(),
53
+ runs: {
54
+ running: (await container
55
+ .resolve(WorkflowRunFacade)
56
+ .find({ status: 'running', limit: 1 })).count,
57
+ },
58
+ }), container.resolve(RuntimeEventsService));
59
+ try {
60
+ await control.start();
61
+ process.once('exit', () => control.close());
62
+ }
63
+ catch (error) {
64
+ console.warn(styleText('yellow', '[runtime] control socket unavailable:', {
65
+ stream: process.stderr,
66
+ }), error);
67
+ }
68
+ }
69
+ //# sourceMappingURL=start-runtime-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-runtime-monitor.js","sourceRoot":"","sources":["../../src/tools/start-runtime-monitor.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { WorkflowRunActivityRepository } from '../repositories/WorkflowRunActivi
4
4
  import { WorkflowRunAsyncActivityPendingRepository } from '../repositories/WorkflowRunAsyncActivityPending.repository.js';
5
5
  import { ActivityRegistryService } from '../services/ActivityRegistry.service.js';
6
6
  import { RuntimeContextService } from '../services/RuntimeContext.service.js';
7
+ import { RuntimeEventsService } from '../services/RuntimeEvents.service.js';
7
8
  import { WorkflowRunEventsService } from '../services/WorkflowRunEvents.service.js';
8
9
  import { WorkflowRunLockService } from '../services/WorkflowRunLock.service.js';
9
10
  import { WorkflowRunSchedulerService } from '../services/WorkflowRunScheduler.service.js';
@@ -19,6 +20,7 @@ export declare class ExecuteWorkflowRunAsyncActivity {
19
20
  private readonly lock;
20
21
  private readonly context;
21
22
  private readonly events;
22
- constructor(workflowRunRepository: WorkflowRunRepository, workflowRunActivityRepository: WorkflowRunActivityRepository, workflowRunAsyncActivityPendingRepository: WorkflowRunAsyncActivityPendingRepository, activityRegistry: ActivityRegistryService, scheduler: WorkflowRunSchedulerService, lock: WorkflowRunLockService, context: RuntimeContextService, events: WorkflowRunEventsService);
23
+ private readonly runtimeEvents;
24
+ constructor(workflowRunRepository: WorkflowRunRepository, workflowRunActivityRepository: WorkflowRunActivityRepository, workflowRunAsyncActivityPendingRepository: WorkflowRunAsyncActivityPendingRepository, activityRegistry: ActivityRegistryService, scheduler: WorkflowRunSchedulerService, lock: WorkflowRunLockService, context: RuntimeContextService, events: WorkflowRunEventsService, runtimeEvents: RuntimeEventsService);
23
25
  execute(pendingId: string, { context }?: ExecuteWorkflowRunAsyncActivityOptions): Promise<void>;
24
26
  }