@t4h.framework/dev 0.0.0-experimental-20261006120135 → 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.
- package/CHANGELOG.md +27 -1
- package/README.md +29 -0
- package/dist/AppProcess.d.ts +11 -2
- package/dist/AppProcess.js +16 -4
- package/dist/AppProcess.js.map +1 -1
- package/dist/HeadlessApp.d.ts +65 -0
- package/dist/HeadlessApp.js +163 -0
- package/dist/HeadlessApp.js.map +1 -0
- package/dist/Server.d.ts +3 -0
- package/dist/Server.js +6 -11
- package/dist/Server.js.map +1 -1
- package/dist/constants/server.d.ts +4 -0
- package/dist/constants/server.js +4 -0
- package/dist/constants/server.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/models/RuntimeControlServer.d.ts +32 -0
- package/dist/models/RuntimeControlServer.js +75 -0
- package/dist/models/RuntimeControlServer.js.map +1 -0
- package/dist/models/RuntimeDebugLog.d.ts +10 -0
- package/dist/models/RuntimeDebugLog.js +32 -0
- package/dist/models/RuntimeDebugLog.js.map +1 -0
- package/dist/models/RuntimeEvent.d.ts +95 -0
- package/dist/models/RuntimeEvent.js +2 -0
- package/dist/models/RuntimeEvent.js.map +1 -0
- package/dist/models/WorkflowRunJob.d.ts +4 -0
- package/dist/services/RuntimeEvents.service.d.ts +16 -0
- package/dist/services/RuntimeEvents.service.js +35 -0
- package/dist/services/RuntimeEvents.service.js.map +1 -0
- package/dist/services/WorkflowRunScheduler.service.d.ts +11 -1
- package/dist/services/WorkflowRunScheduler.service.js +93 -3
- package/dist/services/WorkflowRunScheduler.service.js.map +1 -1
- package/dist/tools/format-runtime-event.d.ts +3 -0
- package/dist/tools/format-runtime-event.js +51 -0
- package/dist/tools/format-runtime-event.js.map +1 -0
- package/dist/tools/runtime-control-client.d.ts +15 -0
- package/dist/tools/runtime-control-client.js +54 -0
- package/dist/tools/runtime-control-client.js.map +1 -0
- package/dist/tools/runtime-registry.d.ts +26 -0
- package/dist/tools/runtime-registry.js +57 -0
- package/dist/tools/runtime-registry.js.map +1 -0
- package/dist/tools/start-runtime-monitor.d.ts +12 -0
- package/dist/tools/start-runtime-monitor.js +69 -0
- package/dist/tools/start-runtime-monitor.js.map +1 -0
- package/dist/tools/to-runtime-config.d.ts +3 -0
- package/dist/tools/to-runtime-config.js +13 -0
- package/dist/tools/to-runtime-config.js.map +1 -0
- package/dist/use-cases/ExecuteWorkflowRunAsyncActivity.usecase.d.ts +3 -1
- package/dist/use-cases/ExecuteWorkflowRunAsyncActivity.usecase.js +20 -2
- package/dist/use-cases/ExecuteWorkflowRunAsyncActivity.usecase.js.map +1 -1
- package/dist/use-cases/NextTickWorkflowRun.usecase.d.ts +3 -1
- package/dist/use-cases/NextTickWorkflowRun.usecase.js +40 -3
- package/dist/use-cases/NextTickWorkflowRun.usecase.js.map +1 -1
- package/dist/workers/app-process.js +34 -17
- package/dist/workers/app-process.js.map +1 -1
- package/dist/workers/workflow-worker.js +4 -0
- package/dist/workers/workflow-worker.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
# @t4h.framework/dev
|
|
2
2
|
|
|
3
|
-
## 0.0.0-experimental-
|
|
3
|
+
## 0.0.0-experimental-20261006133319
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
|
+
- [#208](https://github.com/tech4humans-brasil/framework/pull/208) [`c312bfb`](https://github.com/tech4humans-brasil/framework/commit/c312bfb0f1b1ddbc40d8ac0ede113c5614aa9df8) Thanks [@tony-tsx](https://github.com/tony-tsx)! - `framework workflows` lists, describes and runs the workflows of the app from
|
|
8
|
+
the terminal, without the dev server: `framework workflows <workflow> run
|
|
9
|
+
--input '<json>'` builds the project, runs the workflow, waits for it
|
|
10
|
+
(`--timeout`) and prints the run as JSON — with the activities, logs and child
|
|
11
|
+
runs under `--trace`. It exits with `0` when the run fulfills, `1` when it is
|
|
12
|
+
rejected or the command fails, and `2` on timeout, so scripts and AI agents can
|
|
13
|
+
test workflows headlessly.
|
|
14
|
+
|
|
15
|
+
`@t4h.framework/dev` exports `HeadlessApp`, the API behind it, and the app
|
|
16
|
+
process resolves its bundle root from `file:` URLs.
|
|
17
|
+
|
|
7
18
|
- [#207](https://github.com/tech4humans-brasil/framework/pull/207) [`92db468`](https://github.com/tech4humans-brasil/framework/commit/92db468f819d3c7d01884526598acd5fbef9b4ef) Thanks [@tony-tsx](https://github.com/tony-tsx)! - Workflows run asynchronously on a pool of worker threads. Starting a run,
|
|
8
19
|
delivering a callback, advancing an activity, a timeout and the settlement of a
|
|
9
20
|
parent run only queue work; a scheduler runs it with at most one step per run
|
|
@@ -18,6 +29,21 @@
|
|
|
18
29
|
stored there so every worker sees the same cache. A worker that dies rejects
|
|
19
30
|
the runs it held and is replaced.
|
|
20
31
|
|
|
32
|
+
- [#210](https://github.com/tech4humans-brasil/framework/pull/210) [`990c074`](https://github.com/tech4humans-brasil/framework/commit/990c074af498cb7610d310e295ad613dce7a9b52) Thanks [@tony-tsx](https://github.com/tony-tsx)! - The dev runtime publishes what it runs: jobs queued, started and finished
|
|
33
|
+
(with the queue counts), runs created and settled, activities started, waiting
|
|
34
|
+
and settled (with the error of a rejected one), timeouts and lost workers.
|
|
35
|
+
- `--debug` on `framework dev` and `framework workflows <workflow> run` prints
|
|
36
|
+
those events on stderr; `--debug-log <file>` appends them to a file as NDJSON.
|
|
37
|
+
- Every app process registers itself and listens on a local socket (named pipe
|
|
38
|
+
on Windows). `framework runtime ls` lists them, `framework runtime status`
|
|
39
|
+
prints the queue, the jobs running and waiting and the runs in progress, and
|
|
40
|
+
`framework runtime watch` follows the events live (`--json` for NDJSON),
|
|
41
|
+
reconnecting across `dev` rebuilds.
|
|
42
|
+
|
|
43
|
+
`@t4h.framework/dev` exports `listRuntimes`, `requestRuntimeStatus`,
|
|
44
|
+
`watchRuntime` and `formatRuntimeEvent`, and takes `debugLog` on `Server` and
|
|
45
|
+
`HeadlessApp.up`.
|
|
46
|
+
|
|
21
47
|
## 0.22.4
|
|
22
48
|
|
|
23
49
|
## 0.22.3
|
package/README.md
CHANGED
|
@@ -188,6 +188,13 @@ export default defineConfig({
|
|
|
188
188
|
})
|
|
189
189
|
```
|
|
190
190
|
|
|
191
|
+
### Debugging and monitoring
|
|
192
|
+
|
|
193
|
+
The runtime publishes an event for every job it queues, starts and finishes (with the queue counts at that moment), every run created and settled, every activity started, waiting and settled, every timeout and every worker lost.
|
|
194
|
+
|
|
195
|
+
- **Debug log** — `framework dev --debug` / `framework workflows <workflow> run --debug` print them on stderr; `--debug-log <file>` appends them to a file as NDJSON. Programmatically: `debugLog: '-'` or a path on `Server` and `HeadlessApp.up`.
|
|
196
|
+
- **Another process** — each app process registers in `<tmpdir>/t4h-framework/runtimes` and listens on a local socket (named pipe on Windows). `framework runtime ls | status | watch` reads it; from code, `listRuntimes()`, `requestRuntimeStatus(runtime)` and `watchRuntime(runtime, { onEvent })`.
|
|
197
|
+
|
|
191
198
|
## State
|
|
192
199
|
|
|
193
200
|
Workflow runs, activities, pending async activities, logs and the cache live in a SQLite database (`node:sqlite`) in a temporary file the app process creates and removes on exit; the workers open the same file (WAL mode). With `workers: 0` it stays in memory. Every successful build forks a fresh process, so **a rebuild resets all runs, timers and pending activities**; the `manifest` SSE event tells a UI to reload. The queue is not durable either: nothing resumes across rebuilds, by design.
|
|
@@ -235,6 +242,28 @@ await server.down()
|
|
|
235
242
|
|
|
236
243
|
`vite: false` disables Vite; `vite.root` / `vite.configFile` point at another Vite project. The server logs the listening URL, build output and the routes of every workflow through `logger` (default `console`, `false` to silence). A manifest with a workflow that has no authorization (and no app default) emits `error` with a `WorkflowAuthorizationMissingError`; `framework dev` exits with code 1 in that case.
|
|
237
244
|
|
|
245
|
+
### Headless runs
|
|
246
|
+
|
|
247
|
+
`HeadlessApp` builds the project once and loads it without the HTTP server or Vite — what `framework workflows` uses to run a workflow from the terminal:
|
|
248
|
+
|
|
249
|
+
```typescript
|
|
250
|
+
import { HeadlessApp } from '@t4h.framework/dev'
|
|
251
|
+
|
|
252
|
+
const app = await HeadlessApp.up({ entrypoint: './package.json', env: {} })
|
|
253
|
+
|
|
254
|
+
try {
|
|
255
|
+
const { run, timedOut, waiting, trace } = await app.run(
|
|
256
|
+
'create-invoice',
|
|
257
|
+
{ customerId: 'c-1', amount: 100 },
|
|
258
|
+
{ timeoutInMs: 60_000, trace: true },
|
|
259
|
+
)
|
|
260
|
+
} finally {
|
|
261
|
+
await app.down()
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
`run()` resolves once the run settles or the timeout elapses (`timedOut: true`, with the async activities still waiting in `waiting`); `trace` adds the activities, logs and child runs. Unknown workflows, invalid input and build failures throw a `HeadlessAppError` with `status` and `details`. The app's stdout goes to stderr.
|
|
266
|
+
|
|
238
267
|
## Dev claims
|
|
239
268
|
|
|
240
269
|
In production, claims are fulfilled by the runtime (database connections, real HTTP clients, etc.). During local development, `@t4h.framework/dev` registers in-memory substitutes:
|
package/dist/AppProcess.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { fork } from 'node:child_process';
|
|
|
2
2
|
import { EventEmitter } from 'node:events';
|
|
3
3
|
import type { App } from '@t4h.framework/core';
|
|
4
4
|
import type { FrameworkRuntimeConfig } from './models/FrameworkConfig.js';
|
|
5
|
+
import type { RuntimeKind } from './tools/runtime-registry.js';
|
|
5
6
|
export type AppManifest = ReturnType<App['toManifest']>;
|
|
6
7
|
export type AppProcessState = 'idle' | 'starting' | 'ready' | 'exited';
|
|
7
8
|
export declare class AppProcessNotReadyError extends Error {
|
|
@@ -12,28 +13,36 @@ export interface AppProcessOptions {
|
|
|
12
13
|
readyTimeoutInMs?: number;
|
|
13
14
|
killTimeoutInMs?: number;
|
|
14
15
|
fork?: typeof fork;
|
|
16
|
+
/** Where the app writes its stdout; `stderr` keeps the parent stdout clean. */
|
|
17
|
+
stdout?: 'inherit' | 'stderr';
|
|
15
18
|
}
|
|
16
19
|
export interface AppProcessUpOptions {
|
|
17
20
|
/** Public origin of the HTTP server in front of this process; webhooks build callback URLs on it. */
|
|
18
21
|
serverUrl?: string;
|
|
19
22
|
/** How the app runs workflows; see `FrameworkConfig.runtime`. */
|
|
20
23
|
runtime?: FrameworkRuntimeConfig;
|
|
24
|
+
/** Advertised to `framework runtime` so it can tell runtimes apart. */
|
|
25
|
+
kind?: RuntimeKind;
|
|
26
|
+
projectDir?: string;
|
|
27
|
+
/** Logs every runtime event: `-` to stderr, or a file path (NDJSON). */
|
|
28
|
+
debugLog?: string;
|
|
21
29
|
}
|
|
22
30
|
export declare class AppProcess extends EventEmitter {
|
|
23
31
|
private readonly workerPath;
|
|
24
32
|
private readonly readyTimeoutInMs;
|
|
25
33
|
private readonly killTimeoutInMs;
|
|
26
34
|
private readonly forkProcess;
|
|
35
|
+
private readonly stdout;
|
|
27
36
|
private readonly server;
|
|
28
37
|
private child;
|
|
29
38
|
private client;
|
|
30
39
|
private ready;
|
|
31
40
|
private currentManifest;
|
|
32
41
|
private currentState;
|
|
33
|
-
constructor({ workerPath, readyTimeoutInMs, killTimeoutInMs, fork: forkProcess, }?: AppProcessOptions);
|
|
42
|
+
constructor({ workerPath, readyTimeoutInMs, killTimeoutInMs, fork: forkProcess, stdout, }?: AppProcessOptions);
|
|
34
43
|
get manifest(): AppManifest | null;
|
|
35
44
|
get state(): AppProcessState;
|
|
36
|
-
up(entrypoint: string, env: Record<string, string>, { serverUrl, runtime }?: AppProcessUpOptions): Promise<AppManifest>;
|
|
45
|
+
up(entrypoint: string, env: Record<string, string>, { serverUrl, runtime, kind, projectDir, debugLog, }?: AppProcessUpOptions): Promise<AppManifest>;
|
|
37
46
|
down(): Promise<void>;
|
|
38
47
|
private kill;
|
|
39
48
|
whenReady(): Promise<AppManifest>;
|
package/dist/AppProcess.js
CHANGED
|
@@ -3,7 +3,7 @@ import { EventEmitter } from 'node:events';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { styleText } from 'node:util';
|
|
5
5
|
import Type from 'typebox';
|
|
6
|
-
import { APP_KILL_TIMEOUT_IN_MS, APP_READY_TIMEOUT_IN_MS, RUNTIME_CONCURRENCY_ARG, RUNTIME_WORKERS_ARG, SERVER_URL_ARG, WORKFLOW_RUN_EVENTS, } from './constants/server.js';
|
|
6
|
+
import { APP_KILL_TIMEOUT_IN_MS, APP_READY_TIMEOUT_IN_MS, DEBUG_LOG_ARG, PROJECT_DIR_ARG, RUNTIME_CONCURRENCY_ARG, RUNTIME_KIND_ARG, RUNTIME_WORKERS_ARG, SERVER_URL_ARG, WORKFLOW_RUN_EVENTS, } from './constants/server.js';
|
|
7
7
|
import { JSONRPCClient } from './models/JSONRPCClient.js';
|
|
8
8
|
import { JSONRPCServer, JSONRPCServerMethod } from './models/JSONRPCServer.js';
|
|
9
9
|
export class AppProcessNotReadyError extends Error {
|
|
@@ -14,18 +14,20 @@ export class AppProcess extends EventEmitter {
|
|
|
14
14
|
readyTimeoutInMs;
|
|
15
15
|
killTimeoutInMs;
|
|
16
16
|
forkProcess;
|
|
17
|
+
stdout;
|
|
17
18
|
server;
|
|
18
19
|
child = null;
|
|
19
20
|
client = null;
|
|
20
21
|
ready = null;
|
|
21
22
|
currentManifest = null;
|
|
22
23
|
currentState = 'idle';
|
|
23
|
-
constructor({ workerPath = path.join(import.meta.dirname, 'workers', 'app-process.js'), readyTimeoutInMs = APP_READY_TIMEOUT_IN_MS, killTimeoutInMs = APP_KILL_TIMEOUT_IN_MS, fork: forkProcess = fork, } = {}) {
|
|
24
|
+
constructor({ workerPath = path.join(import.meta.dirname, 'workers', 'app-process.js'), readyTimeoutInMs = APP_READY_TIMEOUT_IN_MS, killTimeoutInMs = APP_KILL_TIMEOUT_IN_MS, fork: forkProcess = fork, stdout = 'inherit', } = {}) {
|
|
24
25
|
super();
|
|
25
26
|
this.workerPath = workerPath;
|
|
26
27
|
this.readyTimeoutInMs = readyTimeoutInMs;
|
|
27
28
|
this.killTimeoutInMs = killTimeoutInMs;
|
|
28
29
|
this.forkProcess = forkProcess;
|
|
30
|
+
this.stdout = stdout;
|
|
29
31
|
this.server = new JSONRPCServer([
|
|
30
32
|
new JSONRPCServerMethod('manifest', { schema: [Type.Any()] }, (manifest) => this.onManifest(manifest)),
|
|
31
33
|
...WORKFLOW_RUN_EVENTS.map(event => new JSONRPCServerMethod(event, { schema: [Type.Any()] }, (payload) => void this.emit(event, payload))),
|
|
@@ -39,7 +41,7 @@ export class AppProcess extends EventEmitter {
|
|
|
39
41
|
get state() {
|
|
40
42
|
return this.currentState;
|
|
41
43
|
}
|
|
42
|
-
async up(entrypoint, env, { serverUrl, runtime } = {}) {
|
|
44
|
+
async up(entrypoint, env, { serverUrl, runtime, kind, projectDir, debugLog, } = {}) {
|
|
43
45
|
const previous = this.child;
|
|
44
46
|
this.child = null;
|
|
45
47
|
this.client?.rejectPending(new AppProcessNotReadyError('App process is restarting'));
|
|
@@ -57,8 +59,18 @@ export class AppProcess extends EventEmitter {
|
|
|
57
59
|
...(runtime?.concurrency !== undefined
|
|
58
60
|
? [`${RUNTIME_CONCURRENCY_ARG}${runtime.concurrency}`]
|
|
59
61
|
: []),
|
|
62
|
+
...(kind ? [`${RUNTIME_KIND_ARG}${kind}`] : []),
|
|
63
|
+
...(projectDir ? [`${PROJECT_DIR_ARG}${projectDir}`] : []),
|
|
64
|
+
...(debugLog ? [`${DEBUG_LOG_ARG}${debugLog}`] : []),
|
|
60
65
|
...Object.entries(env).map(([name, value]) => `${name}=${value}`),
|
|
61
|
-
], {
|
|
66
|
+
], {
|
|
67
|
+
stdio: [
|
|
68
|
+
'ignore',
|
|
69
|
+
this.stdout === 'stderr' ? process.stderr : 'inherit',
|
|
70
|
+
'inherit',
|
|
71
|
+
'ipc',
|
|
72
|
+
],
|
|
73
|
+
});
|
|
62
74
|
const client = new JSONRPCClient(message => {
|
|
63
75
|
child.send(message);
|
|
64
76
|
});
|
package/dist/AppProcess.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppProcess.js","sourceRoot":"","sources":["../src/AppProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAqB,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAGrC,OAAO,IAAI,MAAM,SAAS,CAAA;AAE1B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,GACpB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"AppProcess.js","sourceRoot":"","sources":["../src/AppProcess.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { AppProcess, type AppManifest } from './AppProcess.js';
|
|
2
|
+
export declare const DEFAULT_HEADLESS_RUN_TIMEOUT_IN_MS = 60000;
|
|
3
|
+
export type HeadlessAppProcess = Pick<AppProcess, 'call' | 'down'> & Pick<NodeJS.EventEmitter, 'on' | 'off'>;
|
|
4
|
+
export interface HeadlessAppUpOptions {
|
|
5
|
+
/** Path to the project's `package.json` (or its directory). */
|
|
6
|
+
entrypoint: string;
|
|
7
|
+
env?: Record<string, string>;
|
|
8
|
+
/** Logs every runtime event: `-` to stderr, or a file path (NDJSON). */
|
|
9
|
+
debugLog?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface HeadlessRunOptions {
|
|
12
|
+
/** Gives up waiting after this long; the run keeps its `running` status. */
|
|
13
|
+
timeoutInMs?: number;
|
|
14
|
+
/** Adds the activities, logs and child runs of the run to the result. */
|
|
15
|
+
trace?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface HeadlessRunSummary {
|
|
18
|
+
id: string;
|
|
19
|
+
workflow: string;
|
|
20
|
+
status: 'running' | 'fulfilled' | 'rejected';
|
|
21
|
+
[key: string]: unknown;
|
|
22
|
+
}
|
|
23
|
+
export interface HeadlessRunTrace {
|
|
24
|
+
activities: unknown[];
|
|
25
|
+
logs: unknown[];
|
|
26
|
+
children: unknown[];
|
|
27
|
+
}
|
|
28
|
+
export interface HeadlessRunResult {
|
|
29
|
+
run: HeadlessRunSummary & {
|
|
30
|
+
input: unknown;
|
|
31
|
+
output: unknown;
|
|
32
|
+
};
|
|
33
|
+
/** True when the run was still running when `timeoutInMs` elapsed. */
|
|
34
|
+
timedOut: boolean;
|
|
35
|
+
/** Async activities still waiting for a callback, advance or timeout. */
|
|
36
|
+
waiting: unknown[];
|
|
37
|
+
trace?: HeadlessRunTrace;
|
|
38
|
+
}
|
|
39
|
+
export declare class HeadlessAppError extends Error {
|
|
40
|
+
readonly status: number | undefined;
|
|
41
|
+
readonly details: unknown;
|
|
42
|
+
readonly name = "HeadlessAppError";
|
|
43
|
+
constructor(message: string, status: number | undefined, details: unknown);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Builds the project once and loads it in an app process without the HTTP
|
|
47
|
+
* server or the panel, to start workflows from code or a terminal.
|
|
48
|
+
*/
|
|
49
|
+
export declare class HeadlessApp {
|
|
50
|
+
private readonly appProcess;
|
|
51
|
+
readonly manifest: AppManifest;
|
|
52
|
+
private readonly outDir;
|
|
53
|
+
constructor(appProcess: HeadlessAppProcess, manifest: AppManifest, outDir?: string | null);
|
|
54
|
+
static up({ entrypoint, env, debugLog, }: HeadlessAppUpOptions): Promise<HeadlessApp>;
|
|
55
|
+
get workflows(): AppManifest['workflows'];
|
|
56
|
+
/** Starts a run and waits until it settles or `timeoutInMs` elapses. */
|
|
57
|
+
run(workflowId: string, input: unknown, { timeoutInMs, trace, }?: HeadlessRunOptions): Promise<HeadlessRunResult>;
|
|
58
|
+
down(): Promise<void>;
|
|
59
|
+
private waitUntilSettled;
|
|
60
|
+
private trace;
|
|
61
|
+
/** Activities in the order they ran. */
|
|
62
|
+
private findActivities;
|
|
63
|
+
private findAll;
|
|
64
|
+
private call;
|
|
65
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { stripVTControlCharacters } from 'node:util';
|
|
5
|
+
import { AppProcess } from './AppProcess.js';
|
|
6
|
+
import { JSONRPCError } from './models/JSONRPCError.js';
|
|
7
|
+
import { loadFrameworkConfig } from './tools/load-framework-config.js';
|
|
8
|
+
import { mkdirOutDirProjectFromTsConfigPathAndJsonPackagePath } from './tools/mkdir-out-dir-project-from-ts-config-path-and-json-package-path.js';
|
|
9
|
+
import { resolvePackageJsonPath } from './tools/resolve-package-json-path.js';
|
|
10
|
+
import { resolveTsconfigFromPackageJsonPath } from './tools/resolve-tsconfig-path-from-package-json-path.js';
|
|
11
|
+
import { toRuntimeConfig } from './tools/to-runtime-config.js';
|
|
12
|
+
import { tsBuild } from './tools/ts-build.js';
|
|
13
|
+
const PAGE_LIMIT = 100;
|
|
14
|
+
export const DEFAULT_HEADLESS_RUN_TIMEOUT_IN_MS = 60_000;
|
|
15
|
+
export class HeadlessAppError extends Error {
|
|
16
|
+
status;
|
|
17
|
+
details;
|
|
18
|
+
name = 'HeadlessAppError';
|
|
19
|
+
constructor(message, status, details) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.status = status;
|
|
22
|
+
this.details = details;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Builds the project once and loads it in an app process without the HTTP
|
|
27
|
+
* server or the panel, to start workflows from code or a terminal.
|
|
28
|
+
*/
|
|
29
|
+
export class HeadlessApp {
|
|
30
|
+
appProcess;
|
|
31
|
+
manifest;
|
|
32
|
+
outDir;
|
|
33
|
+
constructor(appProcess, manifest, outDir = null) {
|
|
34
|
+
this.appProcess = appProcess;
|
|
35
|
+
this.manifest = manifest;
|
|
36
|
+
this.outDir = outDir;
|
|
37
|
+
}
|
|
38
|
+
static async up({ entrypoint, env = {}, debugLog, }) {
|
|
39
|
+
const packageJsonPath = await resolvePackageJsonPath(entrypoint);
|
|
40
|
+
const tsConfigPath = await resolveTsconfigFromPackageJsonPath(packageJsonPath);
|
|
41
|
+
const projectDir = path.dirname(packageJsonPath);
|
|
42
|
+
const runtime = toRuntimeConfig((await loadFrameworkConfig(projectDir)).runtime);
|
|
43
|
+
const { outDir } = await mkdirOutDirProjectFromTsConfigPathAndJsonPackagePath(tsConfigPath, packageJsonPath);
|
|
44
|
+
const removeOutDir = () => fs.promises.rm(outDir, { recursive: true, force: true });
|
|
45
|
+
try {
|
|
46
|
+
const build = tsBuild(tsConfigPath, {
|
|
47
|
+
outDir: path.join(outDir, 'dist'),
|
|
48
|
+
sourceMap: true,
|
|
49
|
+
declaration: false,
|
|
50
|
+
declarationMap: false,
|
|
51
|
+
});
|
|
52
|
+
if (!build.ok)
|
|
53
|
+
throw new HeadlessAppError('Build failed', undefined, {
|
|
54
|
+
diagnostics: build.diagnostics.map(stripVTControlCharacters),
|
|
55
|
+
});
|
|
56
|
+
const { default: packageJson } = await import(packageJsonPath, {
|
|
57
|
+
with: { type: 'json' },
|
|
58
|
+
});
|
|
59
|
+
if (typeof packageJson.main !== 'string')
|
|
60
|
+
throw new Error('Main is not a string');
|
|
61
|
+
const appProcess = new AppProcess({ stdout: 'stderr' });
|
|
62
|
+
const manifest = await appProcess
|
|
63
|
+
.up(pathToFileURL(path.join(outDir, 'dist', packageJson.main)).href, env, { runtime, kind: 'headless', projectDir, debugLog })
|
|
64
|
+
.catch(async (error) => {
|
|
65
|
+
await appProcess.down();
|
|
66
|
+
throw error;
|
|
67
|
+
});
|
|
68
|
+
return new HeadlessApp(appProcess, manifest, outDir);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
await removeOutDir();
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
get workflows() {
|
|
76
|
+
return this.manifest.workflows;
|
|
77
|
+
}
|
|
78
|
+
/** Starts a run and waits until it settles or `timeoutInMs` elapses. */
|
|
79
|
+
async run(workflowId, input, { timeoutInMs = DEFAULT_HEADLESS_RUN_TIMEOUT_IN_MS, trace = false, } = {}) {
|
|
80
|
+
const settled = new Set();
|
|
81
|
+
const waiters = new Map();
|
|
82
|
+
const onUpdated = (payload) => {
|
|
83
|
+
if (payload.status === 'running')
|
|
84
|
+
return;
|
|
85
|
+
settled.add(payload.id);
|
|
86
|
+
waiters.get(payload.id)?.();
|
|
87
|
+
};
|
|
88
|
+
this.appProcess.on('run:updated', onUpdated);
|
|
89
|
+
try {
|
|
90
|
+
const { id } = await this.call('workflow.run', workflowId, input);
|
|
91
|
+
const timedOut = !(await this.waitUntilSettled(id, settled, waiters, timeoutInMs));
|
|
92
|
+
const run = await this.call('workflow.runs.findById', id);
|
|
93
|
+
const activities = await this.findActivities(id);
|
|
94
|
+
return {
|
|
95
|
+
run,
|
|
96
|
+
timedOut,
|
|
97
|
+
waiting: activities.filter(isWaiting),
|
|
98
|
+
...(trace ? { trace: await this.trace(id, activities) } : {}),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
this.appProcess.off('run:updated', onUpdated);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async down() {
|
|
106
|
+
await this.appProcess.down();
|
|
107
|
+
if (this.outDir)
|
|
108
|
+
await fs.promises.rm(this.outDir, { recursive: true, force: true });
|
|
109
|
+
}
|
|
110
|
+
async waitUntilSettled(id, settled, waiters, timeoutInMs) {
|
|
111
|
+
const done = Promise.withResolvers();
|
|
112
|
+
waiters.set(id, () => done.resolve(true));
|
|
113
|
+
const timer = setTimeout(() => done.resolve(false), timeoutInMs);
|
|
114
|
+
try {
|
|
115
|
+
// The run may have settled before `workflow.run` answered.
|
|
116
|
+
if (settled.has(id))
|
|
117
|
+
return true;
|
|
118
|
+
const current = await this.call('workflow.runs.findById', id);
|
|
119
|
+
if (current.status !== 'running')
|
|
120
|
+
return true;
|
|
121
|
+
return await done.promise;
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
clearTimeout(timer);
|
|
125
|
+
waiters.delete(id);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async trace(runId, activities) {
|
|
129
|
+
const detailed = await Promise.all(activities.map(activity => this.call('workflow.runs.activities.findById', runId, activity.id)));
|
|
130
|
+
const logs = await this.findAll('workflow.runs.logs.find', 'logs', runId);
|
|
131
|
+
const children = await this.findAll('workflow.runs.find', 'runs', undefined, { parentRun: runId });
|
|
132
|
+
return { activities: detailed, logs: logs.reverse(), children };
|
|
133
|
+
}
|
|
134
|
+
/** Activities in the order they ran. */
|
|
135
|
+
async findActivities(runId) {
|
|
136
|
+
const activities = await this.findAll('workflow.runs.activities.find', 'activities', runId);
|
|
137
|
+
return activities.reverse();
|
|
138
|
+
}
|
|
139
|
+
async findAll(method, key, runId, query = {}) {
|
|
140
|
+
const items = [];
|
|
141
|
+
for (let offset = 0;; offset += PAGE_LIMIT) {
|
|
142
|
+
const page = { ...query, limit: PAGE_LIMIT, offset };
|
|
143
|
+
const result = await this.call(method, ...(runId === undefined ? [page] : [runId, page]));
|
|
144
|
+
items.push(...result[key]);
|
|
145
|
+
if (offset + PAGE_LIMIT >= result.count)
|
|
146
|
+
return items;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async call(method, ...params) {
|
|
150
|
+
try {
|
|
151
|
+
return await this.appProcess.call(method, ...params);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
if (!(error instanceof JSONRPCError))
|
|
155
|
+
throw error;
|
|
156
|
+
throw new HeadlessAppError(error.message, error.data?.status, error.data?.details);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function isWaiting(activity) {
|
|
161
|
+
return activity.kind === 'async' && activity.pendingStatus === 'pending';
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=HeadlessApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeadlessApp.js","sourceRoot":"","sources":["../src/HeadlessApp.ts"],"names":[],"mappings":"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"}
|
package/dist/Server.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface ServerOptions {
|
|
|
14
14
|
host?: string;
|
|
15
15
|
vite?: ServerViteOptions | false;
|
|
16
16
|
logger?: ServerLogger | false;
|
|
17
|
+
/** Logs every runtime event: `-` to stderr, or a file path (NDJSON). */
|
|
18
|
+
debugLog?: string;
|
|
17
19
|
}
|
|
18
20
|
export interface ServerAddress {
|
|
19
21
|
host: string;
|
|
@@ -32,6 +34,7 @@ export declare class Server extends EventEmitter {
|
|
|
32
34
|
private packageJsonPath;
|
|
33
35
|
private outDir;
|
|
34
36
|
private runtime;
|
|
37
|
+
private projectDir;
|
|
35
38
|
constructor(options: ServerOptions);
|
|
36
39
|
get manifest(): AppManifest | null;
|
|
37
40
|
get address(): ServerAddress;
|
package/dist/Server.js
CHANGED
|
@@ -15,21 +15,11 @@ import { loadFrameworkConfig } from './tools/load-framework-config.js';
|
|
|
15
15
|
import { mkdirOutDirProjectFromTsConfigPathAndJsonPackagePath } from './tools/mkdir-out-dir-project-from-ts-config-path-and-json-package-path.js';
|
|
16
16
|
import { resolvePackageJsonPath } from './tools/resolve-package-json-path.js';
|
|
17
17
|
import { resolveTsconfigFromPackageJsonPath } from './tools/resolve-tsconfig-path-from-package-json-path.js';
|
|
18
|
+
import { toRuntimeConfig } from './tools/to-runtime-config.js';
|
|
18
19
|
import { tsBuildWatch } from './tools/ts-build-watch.js';
|
|
19
20
|
function isApiPath(pathname) {
|
|
20
21
|
return [PROJECTS_ROUTES_PREFIX, DEV_ROUTES_PREFIX].some(prefix => pathname === prefix || pathname.startsWith(`${prefix}/`));
|
|
21
22
|
}
|
|
22
|
-
function toRuntimeConfig(runtime) {
|
|
23
|
-
if (!runtime)
|
|
24
|
-
return undefined;
|
|
25
|
-
const { workers, concurrency } = runtime;
|
|
26
|
-
if (workers !== undefined && !(Number.isInteger(workers) && workers >= 0))
|
|
27
|
-
throw new Error(`framework.config runtime.workers must be an integer >= 0, got ${workers}`);
|
|
28
|
-
if (concurrency !== undefined &&
|
|
29
|
-
!(Number.isInteger(concurrency) && concurrency >= 1))
|
|
30
|
-
throw new Error(`framework.config runtime.concurrency must be an integer >= 1, got ${concurrency}`);
|
|
31
|
-
return { workers, concurrency };
|
|
32
|
-
}
|
|
33
23
|
function notFound(res) {
|
|
34
24
|
res.statusCode = 404;
|
|
35
25
|
res.setHeader('content-type', 'text/plain; charset=utf-8');
|
|
@@ -47,6 +37,7 @@ export class Server extends EventEmitter {
|
|
|
47
37
|
packageJsonPath = null;
|
|
48
38
|
outDir = null;
|
|
49
39
|
runtime = undefined;
|
|
40
|
+
projectDir = null;
|
|
50
41
|
constructor(options) {
|
|
51
42
|
super();
|
|
52
43
|
this.options = options;
|
|
@@ -76,6 +67,7 @@ export class Server extends EventEmitter {
|
|
|
76
67
|
const project = await mkdirOutDirProjectFromTsConfigPathAndJsonPackagePath(tsConfigPath, this.packageJsonPath);
|
|
77
68
|
this.outDir = project.outDir;
|
|
78
69
|
const projectDir = path.dirname(this.packageJsonPath);
|
|
70
|
+
this.projectDir = projectDir;
|
|
79
71
|
this.runtime = toRuntimeConfig((await loadFrameworkConfig(projectDir)).runtime);
|
|
80
72
|
const app = createApp({
|
|
81
73
|
appProcess: this.appProcess,
|
|
@@ -154,6 +146,9 @@ export class Server extends EventEmitter {
|
|
|
154
146
|
manifest = await this.appProcess.up(entrypoint, this.options.env, {
|
|
155
147
|
serverUrl: this.currentAddress?.url,
|
|
156
148
|
runtime: this.runtime,
|
|
149
|
+
kind: 'dev',
|
|
150
|
+
projectDir: this.projectDir ?? undefined,
|
|
151
|
+
debugLog: this.options.debugLog,
|
|
157
152
|
});
|
|
158
153
|
}
|
|
159
154
|
catch (error) {
|
package/dist/Server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAItD,OAAO,EAAE,UAAU,EAAoB,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAEhD,OAAO,EAAE,iCAAiC,EAAE,MAAM,+CAA+C,CAAA;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,oDAAoD,EAAE,MAAM,4EAA4E,CAAA;AACjJ,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,EAAE,kCAAkC,EAAE,MAAM,yDAAyD,CAAA;AAC5G,OAAO,EAAE,YAAY,EAAuB,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,4 +14,8 @@ export declare const WORKFLOW_RUN_EVENTS: readonly ["run:created", "run:updated"
|
|
|
14
14
|
export declare const WORKFLOW_RUN_JOB_CONCURRENCY = 4;
|
|
15
15
|
export declare const RUNTIME_WORKERS_ARG = "--runtime-workers=";
|
|
16
16
|
export declare const RUNTIME_CONCURRENCY_ARG = "--runtime-concurrency=";
|
|
17
|
+
export declare const RUNTIME_KIND_ARG = "--runtime-kind=";
|
|
18
|
+
export declare const PROJECT_DIR_ARG = "--project-dir=";
|
|
19
|
+
/** `-` for readable lines on stderr, or a file path for NDJSON. */
|
|
20
|
+
export declare const DEBUG_LOG_ARG = "--debug-log=";
|
|
17
21
|
export declare const WORKFLOW_WORKER_READY_TIMEOUT_IN_MS = 30000;
|
package/dist/constants/server.js
CHANGED
|
@@ -14,5 +14,9 @@ export const WORKFLOW_RUN_EVENTS = ['run:created', 'run:updated'];
|
|
|
14
14
|
export const WORKFLOW_RUN_JOB_CONCURRENCY = 4;
|
|
15
15
|
export const RUNTIME_WORKERS_ARG = '--runtime-workers=';
|
|
16
16
|
export const RUNTIME_CONCURRENCY_ARG = '--runtime-concurrency=';
|
|
17
|
+
export const RUNTIME_KIND_ARG = '--runtime-kind=';
|
|
18
|
+
export const PROJECT_DIR_ARG = '--project-dir=';
|
|
19
|
+
/** `-` for readable lines on stderr, or a file path for NDJSON. */
|
|
20
|
+
export const DEBUG_LOG_ARG = '--debug-log=';
|
|
17
21
|
export const WORKFLOW_WORKER_READY_TIMEOUT_IN_MS = 30_000;
|
|
18
22
|
//# sourceMappingURL=server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/constants/server.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAA;AAEhC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAA;AAEvC,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,GAAG,IAAI,CAAA;AAElD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,GAAG,IAAI,CAAA;AAEvD,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,GAAG,IAAI,CAAA;AAEzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAA;AAE7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAA;AAE3C,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAA;AAElD,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,CAAA;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAA;AAExC,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAA;AAE7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,aAAa,EAAE,aAAa,CAAU,CAAA;AAE1E,uFAAuF;AACvF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAA;AAE7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAA;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,wBAAwB,CAAA;AAE/D,MAAM,CAAC,MAAM,mCAAmC,GAAG,MAAM,CAAA"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/constants/server.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAA;AAEhC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAA;AAEvC,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,GAAG,IAAI,CAAA;AAElD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,GAAG,IAAI,CAAA;AAEvD,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,GAAG,IAAI,CAAA;AAEzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAA;AAE7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAA;AAE3C,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAA;AAElD,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,CAAA;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAA;AAExC,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAA;AAE7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,aAAa,EAAE,aAAa,CAAU,CAAA;AAE1E,uFAAuF;AACvF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAA;AAE7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAA;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,wBAAwB,CAAA;AAE/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,CAAA;AAEjD,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAA;AAE/C,mEAAmE;AACnE,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAA;AAE3C,MAAM,CAAC,MAAM,mCAAmC,GAAG,MAAM,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export * from './Server.js';
|
|
2
2
|
export * from './models/WorkflowAuthorizationMissingError.js';
|
|
3
3
|
export type { AppManifest, AppProcessState } from './AppProcess.js';
|
|
4
|
+
export * from './HeadlessApp.js';
|
|
5
|
+
export { DEBUG_LOG_STDERR } from './models/RuntimeDebugLog.js';
|
|
6
|
+
export type * from './models/RuntimeEvent.js';
|
|
7
|
+
export { formatRuntimeEvent } from './tools/format-runtime-event.js';
|
|
8
|
+
export * from './tools/runtime-control-client.js';
|
|
9
|
+
export { listRuntimes, type RuntimeInfo, type RuntimeKind, type RuntimeStatus, } from './tools/runtime-registry.js';
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
export * from './Server.js';
|
|
2
2
|
export * from './models/WorkflowAuthorizationMissingError.js';
|
|
3
|
+
export * from './HeadlessApp.js';
|
|
4
|
+
export { DEBUG_LOG_STDERR } from './models/RuntimeDebugLog.js';
|
|
5
|
+
export { formatRuntimeEvent } from './tools/format-runtime-event.js';
|
|
6
|
+
export * from './tools/runtime-control-client.js';
|
|
7
|
+
export { listRuntimes, } from './tools/runtime-registry.js';
|
|
3
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,+CAA+C,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,+CAA+C,CAAA;AAE7D,cAAc,kBAAkB,CAAA;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,cAAc,mCAAmC,CAAA;AACjD,OAAO,EACL,YAAY,GAIb,MAAM,6BAA6B,CAAA"}
|