@kheleshikhi/studio-agent 0.6.1 → 0.9.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/README.md +269 -13
- package/dist/attempt.d.ts +4 -0
- package/dist/attempt.js +11 -1
- package/dist/attempt.js.map +1 -1
- package/dist/browser.d.ts +89 -3
- package/dist/browser.js +536 -14
- package/dist/browser.js.map +1 -1
- package/dist/cli.d.ts +20 -0
- package/dist/cli.js +851 -73
- package/dist/cli.js.map +1 -1
- package/dist/context.d.ts +66 -0
- package/dist/context.js +207 -0
- package/dist/context.js.map +1 -0
- package/dist/daemon.js +109 -7
- package/dist/daemon.js.map +1 -1
- package/dist/episode-runner.d.ts +109 -0
- package/dist/episode-runner.js +381 -0
- package/dist/episode-runner.js.map +1 -0
- package/dist/episode.d.ts +332 -0
- package/dist/episode.js +648 -0
- package/dist/episode.js.map +1 -0
- package/dist/presence.d.ts +49 -0
- package/dist/presence.js +141 -0
- package/dist/presence.js.map +1 -0
- package/dist/project.d.ts +30 -0
- package/dist/project.js +204 -0
- package/dist/project.js.map +1 -0
- package/dist/render-jobs.d.ts +101 -0
- package/dist/render-jobs.js +241 -0
- package/dist/render-jobs.js.map +1 -0
- package/dist/scenario.d.ts +33 -1
- package/dist/scenario.js +143 -5
- package/dist/scenario.js.map +1 -1
- package/dist/shot-provenance.d.ts +66 -0
- package/dist/shot-provenance.js +114 -0
- package/dist/shot-provenance.js.map +1 -0
- package/dist/state.js +10 -6
- package/dist/state.js.map +1 -1
- package/dist/video.d.ts +197 -0
- package/dist/video.js +446 -0
- package/dist/video.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { CliError } from "./types.js";
|
|
2
|
+
export type RenderJobState = "running" | "cancelling" | "completed" | "failed" | "cancelled";
|
|
3
|
+
export type RenderProgress = {
|
|
4
|
+
stage: string;
|
|
5
|
+
frame?: number;
|
|
6
|
+
frames?: number;
|
|
7
|
+
};
|
|
8
|
+
export type RenderJobContext = {
|
|
9
|
+
signal: AbortSignal;
|
|
10
|
+
progress: (value: RenderProgress) => void;
|
|
11
|
+
};
|
|
12
|
+
export type RenderRunner<T = unknown> = (context: RenderJobContext) => Promise<T>;
|
|
13
|
+
export type RenderJobError = {
|
|
14
|
+
code: string;
|
|
15
|
+
message: string;
|
|
16
|
+
stage: string;
|
|
17
|
+
exitCode: number;
|
|
18
|
+
details?: unknown;
|
|
19
|
+
};
|
|
20
|
+
export type RenderJobView = {
|
|
21
|
+
id: string;
|
|
22
|
+
kind: string;
|
|
23
|
+
state: RenderJobState;
|
|
24
|
+
progress: RenderProgress;
|
|
25
|
+
elapsed_ms: number;
|
|
26
|
+
cancel_reason?: string;
|
|
27
|
+
error?: RenderJobError;
|
|
28
|
+
};
|
|
29
|
+
export declare const RENDER_JOB_LIMITS: {
|
|
30
|
+
/** No status poll for this long: the client is gone, so the job is cancelled. */
|
|
31
|
+
abandonAfterMs: number;
|
|
32
|
+
/** The documented ceiling is ~9 minutes of capture; this is generous headroom. */
|
|
33
|
+
maxRuntimeMs: number;
|
|
34
|
+
/** A finished job's result is kept this long for its client to collect. */
|
|
35
|
+
retainMs: number;
|
|
36
|
+
};
|
|
37
|
+
/** The error a renderer throws when its job's signal is aborted. */
|
|
38
|
+
export declare function cancelledError(signal: AbortSignal): CliError;
|
|
39
|
+
/** Throw [cancelledError] when the job was cancelled; called between frames. */
|
|
40
|
+
export declare function throwIfCancelled(signal: AbortSignal | undefined): void;
|
|
41
|
+
export declare class RenderJobs {
|
|
42
|
+
private readonly options;
|
|
43
|
+
private readonly jobs;
|
|
44
|
+
readonly limits: typeof RENDER_JOB_LIMITS;
|
|
45
|
+
/** Jobs that may run at once: one per render browser the daemon owns. */
|
|
46
|
+
readonly maxConcurrent: number;
|
|
47
|
+
constructor(options?: {
|
|
48
|
+
clock?: () => number;
|
|
49
|
+
limits?: Partial<typeof RENDER_JOB_LIMITS>;
|
|
50
|
+
maxConcurrent?: number;
|
|
51
|
+
});
|
|
52
|
+
private now;
|
|
53
|
+
/** Start one job; refused while another is still running or stopping. */
|
|
54
|
+
start(kind: string, runner: RenderRunner, cleanup?: () => Promise<void>): RenderJobView;
|
|
55
|
+
private find;
|
|
56
|
+
/** A client's poll: the job's state, and its result once it completed. Keeps the job alive. */
|
|
57
|
+
status(id: string): {
|
|
58
|
+
job: RenderJobView;
|
|
59
|
+
result?: unknown;
|
|
60
|
+
};
|
|
61
|
+
/** Ask a running job to stop; it becomes `cancelled` once the renderer has. */
|
|
62
|
+
cancel(id: string, reason?: string): RenderJobView;
|
|
63
|
+
private abort;
|
|
64
|
+
/** Cancel abandoned or overlong jobs and forget old finished ones. Run periodically. */
|
|
65
|
+
sweep(): void;
|
|
66
|
+
/** Resolves once the job's renderer and cleanup have finished (tests and shutdown). */
|
|
67
|
+
settled(id: string): Promise<RenderJobView>;
|
|
68
|
+
/** Cancel everything and wait (daemon shutdown). */
|
|
69
|
+
stopAll(reason?: string): Promise<void>;
|
|
70
|
+
private view;
|
|
71
|
+
}
|
|
72
|
+
export type RenderJobRunners = Record<string, (request: Record<string, unknown>, context: RenderJobContext) => Promise<unknown>>;
|
|
73
|
+
export type RenderJobCleanups = Record<string, (request: Record<string, unknown>) => Promise<void>>;
|
|
74
|
+
/**
|
|
75
|
+
* The daemon's job routes: `POST /render-jobs` {kind, request} starts one,
|
|
76
|
+
* `GET /render-jobs/<id>` polls it, `DELETE /render-jobs/<id>` cancels it.
|
|
77
|
+
* Returns null for any other route.
|
|
78
|
+
*/
|
|
79
|
+
export declare function renderJobRoute(jobs: RenderJobs, runners: RenderJobRunners, cleanups: RenderJobCleanups, method: string, pathname: string, body: () => Promise<Record<string, unknown>>): Promise<{
|
|
80
|
+
status: number;
|
|
81
|
+
value: Record<string, unknown>;
|
|
82
|
+
} | null>;
|
|
83
|
+
export type Rpc = <T>(path: string, init?: {
|
|
84
|
+
method?: string;
|
|
85
|
+
body?: string;
|
|
86
|
+
signal?: AbortSignal;
|
|
87
|
+
}) => Promise<T>;
|
|
88
|
+
export type RenderJobClientOptions = {
|
|
89
|
+
pollMs?: number;
|
|
90
|
+
/** Ctrl-C or the caller giving up: the job is cancelled, then this throws. */
|
|
91
|
+
signal?: AbortSignal;
|
|
92
|
+
onProgress?: (job: RenderJobView) => void;
|
|
93
|
+
sleep?: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Run one render as a daemon job: start, poll until it ends, return its
|
|
97
|
+
* result. Each request is short, so no request comes near any client or
|
|
98
|
+
* server timeout however long the render is. A daemon that predates jobs
|
|
99
|
+
* (`AGENT_LOCAL_RPC_NOT_FOUND`) is served by its single long request.
|
|
100
|
+
*/
|
|
101
|
+
export declare function runRenderJob<T>(rpc: Rpc, kind: string, legacyRoute: string, request: Record<string, unknown>, options?: RenderJobClientOptions): Promise<T>;
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Long presentation renders as bounded daemon jobs.
|
|
3
|
+
*
|
|
4
|
+
* A 120 s / 30 fps render captures 3,600 frames at roughly 150 ms each: about
|
|
5
|
+
* nine minutes inside the daemon. A single loopback request that answers only
|
|
6
|
+
* after the last frame cannot carry that, because Node's fetch gives up on a
|
|
7
|
+
* response whose headers have not arrived after 300 s
|
|
8
|
+
* (`UND_ERR_HEADERS_TIMEOUT`), while the daemon kept rendering for nobody.
|
|
9
|
+
*
|
|
10
|
+
* So the CLI starts a job, polls its status and progress with short
|
|
11
|
+
* requests, and receives the result when the job completes. A job is
|
|
12
|
+
* bounded on both sides:
|
|
13
|
+
*
|
|
14
|
+
* - one job per render browser at a time (one by default; the daemon owns
|
|
15
|
+
* `NERDBRO_RENDER_WORKERS` browsers, each with its own page and profile);
|
|
16
|
+
* - a job nobody has polled for `abandonAfterMs` is cancelled (the CLI
|
|
17
|
+
* died, was killed, or lost the daemon), and so is a job that runs past
|
|
18
|
+
* `maxRuntimeMs`;
|
|
19
|
+
* - `DELETE` cancels it; the renderer stops at its next frame;
|
|
20
|
+
* - a cancelled or failed job runs its cleanup (the frames and audio it
|
|
21
|
+
* wrote) once the renderer has really stopped;
|
|
22
|
+
* - a finished job is forgotten `retainMs` after it ended.
|
|
23
|
+
*
|
|
24
|
+
* A failure keeps the stage the renderer last reported, so the caller can
|
|
25
|
+
* say where it failed.
|
|
26
|
+
*/
|
|
27
|
+
import { randomBytes } from "node:crypto";
|
|
28
|
+
import { CliError } from "./types.js";
|
|
29
|
+
export const RENDER_JOB_LIMITS = {
|
|
30
|
+
/** No status poll for this long: the client is gone, so the job is cancelled. */
|
|
31
|
+
abandonAfterMs: 60_000,
|
|
32
|
+
/** The documented ceiling is ~9 minutes of capture; this is generous headroom. */
|
|
33
|
+
maxRuntimeMs: 45 * 60_000,
|
|
34
|
+
/** A finished job's result is kept this long for its client to collect. */
|
|
35
|
+
retainMs: 10 * 60_000,
|
|
36
|
+
};
|
|
37
|
+
/** The error a renderer throws when its job's signal is aborted. */
|
|
38
|
+
export function cancelledError(signal) {
|
|
39
|
+
const reason = typeof signal.reason === "string" ? signal.reason : "cancelled";
|
|
40
|
+
return new CliError(`The render was cancelled (${reason}).`, "VIDEO_RENDER_CANCELLED", 1, { reason });
|
|
41
|
+
}
|
|
42
|
+
/** Throw [cancelledError] when the job was cancelled; called between frames. */
|
|
43
|
+
export function throwIfCancelled(signal) {
|
|
44
|
+
if (signal?.aborted)
|
|
45
|
+
throw cancelledError(signal);
|
|
46
|
+
}
|
|
47
|
+
export class RenderJobs {
|
|
48
|
+
options;
|
|
49
|
+
jobs = new Map();
|
|
50
|
+
limits;
|
|
51
|
+
/** Jobs that may run at once: one per render browser the daemon owns. */
|
|
52
|
+
maxConcurrent;
|
|
53
|
+
constructor(options = {}) {
|
|
54
|
+
this.options = options;
|
|
55
|
+
this.maxConcurrent = Math.max(1, Math.floor(options.maxConcurrent ?? 1));
|
|
56
|
+
this.limits = { ...RENDER_JOB_LIMITS, ...options.limits };
|
|
57
|
+
}
|
|
58
|
+
now() { return (this.options.clock ?? Date.now)(); }
|
|
59
|
+
/** Start one job; refused while another is still running or stopping. */
|
|
60
|
+
start(kind, runner, cleanup) {
|
|
61
|
+
const active = [...this.jobs.values()].filter((job) => job.state === "running" || job.state === "cancelling");
|
|
62
|
+
if (active.length >= this.maxConcurrent) {
|
|
63
|
+
throw new CliError("The daemon is already rendering; wait for that render or cancel it.", "VIDEO_RENDER_BUSY", 3, { job: active[0].id, active: active.length, max_concurrent: this.maxConcurrent });
|
|
64
|
+
}
|
|
65
|
+
const now = this.now();
|
|
66
|
+
const controller = new AbortController();
|
|
67
|
+
const job = {
|
|
68
|
+
id: `render_${randomBytes(9).toString("base64url")}`,
|
|
69
|
+
kind, state: "running", progress: { stage: "starting" },
|
|
70
|
+
startedAt: now, lastSeenAt: now, controller,
|
|
71
|
+
};
|
|
72
|
+
const progress = (value) => { if (job.state === "running" || job.state === "cancelling")
|
|
73
|
+
job.progress = { ...value }; };
|
|
74
|
+
job.done = (async () => {
|
|
75
|
+
try {
|
|
76
|
+
const result = await runner({ signal: controller.signal, progress });
|
|
77
|
+
throwIfCancelled(controller.signal);
|
|
78
|
+
job.result = result;
|
|
79
|
+
job.state = "completed";
|
|
80
|
+
job.progress = { ...job.progress, stage: "completed" };
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
const failure = error instanceof CliError ? error : new CliError(String(error), "VIDEO_RENDER_FAILED");
|
|
84
|
+
const details = failure.details && typeof failure.details === "object" ? failure.details : undefined;
|
|
85
|
+
const stage = typeof details?.stage === "string" ? details.stage : job.progress.stage;
|
|
86
|
+
if (controller.signal.aborted) {
|
|
87
|
+
const reason = typeof controller.signal.reason === "string" ? controller.signal.reason : "cancelled";
|
|
88
|
+
job.state = "cancelled";
|
|
89
|
+
job.error = { code: "VIDEO_RENDER_CANCELLED", message: `The render was cancelled (${reason}).`, stage, exitCode: 1, details: { reason } };
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
job.state = "failed";
|
|
93
|
+
job.error = { code: failure.code, message: failure.message, stage, exitCode: failure.exitCode, details: failure.details };
|
|
94
|
+
}
|
|
95
|
+
if (cleanup)
|
|
96
|
+
await cleanup().catch(() => undefined);
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
job.finishedAt = this.now();
|
|
100
|
+
}
|
|
101
|
+
})();
|
|
102
|
+
this.jobs.set(job.id, job);
|
|
103
|
+
return this.view(job);
|
|
104
|
+
}
|
|
105
|
+
find(id) {
|
|
106
|
+
const job = this.jobs.get(id);
|
|
107
|
+
if (!job)
|
|
108
|
+
throw new CliError("No such render job (it finished long ago, or the daemon restarted).", "VIDEO_RENDER_JOB_UNKNOWN", 1, { job: id });
|
|
109
|
+
return job;
|
|
110
|
+
}
|
|
111
|
+
/** A client's poll: the job's state, and its result once it completed. Keeps the job alive. */
|
|
112
|
+
status(id) {
|
|
113
|
+
const job = this.find(id);
|
|
114
|
+
job.lastSeenAt = this.now();
|
|
115
|
+
return { job: this.view(job), ...(job.state === "completed" ? { result: job.result } : {}) };
|
|
116
|
+
}
|
|
117
|
+
/** Ask a running job to stop; it becomes `cancelled` once the renderer has. */
|
|
118
|
+
cancel(id, reason = "cancelled by client") {
|
|
119
|
+
const job = this.find(id);
|
|
120
|
+
this.abort(job, reason);
|
|
121
|
+
return this.view(job);
|
|
122
|
+
}
|
|
123
|
+
abort(job, reason) {
|
|
124
|
+
if (job.state !== "running")
|
|
125
|
+
return;
|
|
126
|
+
job.state = "cancelling";
|
|
127
|
+
job.cancelReason = reason;
|
|
128
|
+
job.controller.abort(reason);
|
|
129
|
+
}
|
|
130
|
+
/** Cancel abandoned or overlong jobs and forget old finished ones. Run periodically. */
|
|
131
|
+
sweep() {
|
|
132
|
+
const now = this.now();
|
|
133
|
+
for (const job of [...this.jobs.values()]) {
|
|
134
|
+
if (job.state === "running" && now - job.lastSeenAt > this.limits.abandonAfterMs)
|
|
135
|
+
this.abort(job, "abandoned: no client polled it");
|
|
136
|
+
else if (job.state === "running" && now - job.startedAt > this.limits.maxRuntimeMs)
|
|
137
|
+
this.abort(job, "timed out");
|
|
138
|
+
else if (job.finishedAt !== undefined && now - job.finishedAt > this.limits.retainMs)
|
|
139
|
+
this.jobs.delete(job.id);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/** Resolves once the job's renderer and cleanup have finished (tests and shutdown). */
|
|
143
|
+
async settled(id) {
|
|
144
|
+
const job = this.find(id);
|
|
145
|
+
await job.done;
|
|
146
|
+
return this.view(job);
|
|
147
|
+
}
|
|
148
|
+
/** Cancel everything and wait (daemon shutdown). */
|
|
149
|
+
async stopAll(reason = "daemon stopping") {
|
|
150
|
+
const pending = [...this.jobs.values()];
|
|
151
|
+
for (const job of pending)
|
|
152
|
+
this.abort(job, reason);
|
|
153
|
+
await Promise.all(pending.map((job) => job.done));
|
|
154
|
+
}
|
|
155
|
+
view(job) {
|
|
156
|
+
return {
|
|
157
|
+
id: job.id, kind: job.kind, state: job.state, progress: { ...job.progress },
|
|
158
|
+
elapsed_ms: (job.finishedAt ?? this.now()) - job.startedAt,
|
|
159
|
+
...(job.cancelReason ? { cancel_reason: job.cancelReason } : {}),
|
|
160
|
+
...(job.error ? { error: job.error } : {}),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The daemon's job routes: `POST /render-jobs` {kind, request} starts one,
|
|
166
|
+
* `GET /render-jobs/<id>` polls it, `DELETE /render-jobs/<id>` cancels it.
|
|
167
|
+
* Returns null for any other route.
|
|
168
|
+
*/
|
|
169
|
+
export async function renderJobRoute(jobs, runners, cleanups, method, pathname, body) {
|
|
170
|
+
if (pathname === "/render-jobs" && method === "POST") {
|
|
171
|
+
const input = await body();
|
|
172
|
+
const kind = String(input.kind);
|
|
173
|
+
const runner = Object.hasOwn(runners, kind) ? runners[kind] : undefined;
|
|
174
|
+
if (!runner)
|
|
175
|
+
throw new CliError(`Unknown render job kind ${kind}.`, "VIDEO_RENDER_JOB_INVALID", 2);
|
|
176
|
+
const request = (input.request && typeof input.request === "object" ? input.request : {});
|
|
177
|
+
const cleanup = cleanups[kind];
|
|
178
|
+
const job = jobs.start(kind, (context) => runner(request, context), cleanup ? () => cleanup(request) : undefined);
|
|
179
|
+
return { status: 202, value: { ok: true, job } };
|
|
180
|
+
}
|
|
181
|
+
const match = /^\/render-jobs\/([A-Za-z0-9_-]{1,64})$/.exec(pathname);
|
|
182
|
+
if (!match)
|
|
183
|
+
return null;
|
|
184
|
+
if (method === "GET")
|
|
185
|
+
return { status: 200, value: { ok: true, ...jobs.status(match[1]) } };
|
|
186
|
+
if (method === "DELETE")
|
|
187
|
+
return { status: 200, value: { ok: true, job: jobs.cancel(match[1]) } };
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
function abortableSleep(milliseconds, signal) {
|
|
191
|
+
return new Promise((resolve) => {
|
|
192
|
+
if (signal?.aborted) {
|
|
193
|
+
resolve();
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const timer = setTimeout(done, milliseconds);
|
|
197
|
+
function done() { clearTimeout(timer); signal?.removeEventListener("abort", done); resolve(); }
|
|
198
|
+
signal?.addEventListener("abort", done, { once: true });
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Run one render as a daemon job: start, poll until it ends, return its
|
|
203
|
+
* result. Each request is short, so no request comes near any client or
|
|
204
|
+
* server timeout however long the render is. A daemon that predates jobs
|
|
205
|
+
* (`AGENT_LOCAL_RPC_NOT_FOUND`) is served by its single long request.
|
|
206
|
+
*/
|
|
207
|
+
export async function runRenderJob(rpc, kind, legacyRoute, request, options = {}) {
|
|
208
|
+
const sleep = options.sleep ?? abortableSleep;
|
|
209
|
+
let started;
|
|
210
|
+
try {
|
|
211
|
+
started = await rpc("/render-jobs", { method: "POST", body: JSON.stringify({ kind, request }) });
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
if (error instanceof CliError && error.code === "AGENT_LOCAL_RPC_NOT_FOUND") {
|
|
215
|
+
return (await rpc(legacyRoute, { method: "POST", body: JSON.stringify(request) })).result;
|
|
216
|
+
}
|
|
217
|
+
throw error;
|
|
218
|
+
}
|
|
219
|
+
const id = started.job.id;
|
|
220
|
+
for (;;) {
|
|
221
|
+
if (options.signal?.aborted) {
|
|
222
|
+
await rpc(`/render-jobs/${id}`, { method: "DELETE" }).catch(() => undefined);
|
|
223
|
+
const reason = typeof options.signal.reason === "string" ? options.signal.reason : "interrupted";
|
|
224
|
+
throw new CliError(`The render was cancelled (${reason}).`, "VIDEO_RENDER_CANCELLED", 130, { reason, job: id, stage: started.job.progress.stage });
|
|
225
|
+
}
|
|
226
|
+
await sleep(options.pollMs ?? 1000, options.signal);
|
|
227
|
+
if (options.signal?.aborted)
|
|
228
|
+
continue;
|
|
229
|
+
const status = await rpc(`/render-jobs/${id}`, { method: "GET" });
|
|
230
|
+
started = status;
|
|
231
|
+
options.onProgress?.(status.job);
|
|
232
|
+
if (status.job.state === "completed")
|
|
233
|
+
return status.result;
|
|
234
|
+
if (status.job.state === "failed" || status.job.state === "cancelled") {
|
|
235
|
+
const error = status.job.error ?? { code: "VIDEO_RENDER_FAILED", message: "The render failed.", stage: status.job.progress.stage, exitCode: 1 };
|
|
236
|
+
const details = error.details && typeof error.details === "object" ? error.details : {};
|
|
237
|
+
throw new CliError(error.message, error.code, error.exitCode, { ...details, stage: error.stage, job: id });
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=render-jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-jobs.js","sourceRoot":"","sources":["../src/render-jobs.ts"],"names":[],"mappings":"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"}
|
package/dist/scenario.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
export type ProbeSetup = Record<string, string | number | boolean>;
|
|
1
2
|
export type DriveStep = {
|
|
2
|
-
op: "set" | "fire" | "press" | "tap" | "drag" | "play" | "pause" | "seek" | "reset" | "wait" | "assert" | "capture";
|
|
3
|
+
op: "set" | "fire" | "press" | "tap" | "drag" | "play" | "pause" | "seek" | "step" | "reset" | "restart" | "previewState" | "select" | "wait" | "assert" | "capture";
|
|
3
4
|
target?: string;
|
|
4
5
|
value?: string | number | boolean;
|
|
6
|
+
/** Synthetic declared-variable values applied before a `previewState`. */
|
|
7
|
+
setup?: ProbeSetup;
|
|
5
8
|
path?: string;
|
|
6
9
|
equals?: string | number | boolean | null;
|
|
7
10
|
between?: [number, number];
|
|
@@ -12,8 +15,37 @@ export type DriveScenario = {
|
|
|
12
15
|
version: 1;
|
|
13
16
|
steps: DriveStep[];
|
|
14
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Domains of the shared `kheleshikhi.studio-observation.v2` contract. The
|
|
20
|
+
* human Observatory renders the same map, so a path here names exactly what
|
|
21
|
+
* the Maker sees.
|
|
22
|
+
*/
|
|
23
|
+
export declare const SHARED_OBSERVATION_ROOTS: string[];
|
|
15
24
|
export declare function parseScenario(value: unknown): DriveScenario;
|
|
16
25
|
export declare function validObservationPath(path: string): boolean;
|
|
17
26
|
export declare function observedValue(observation: Record<string, unknown>, path: string): unknown;
|
|
18
27
|
export declare function matchesObservation(observation: Record<string, unknown>, step: DriveStep): boolean;
|
|
19
28
|
export declare function isDriveCommand(step: DriveStep): boolean;
|
|
29
|
+
export type ExperienceStep = Omit<DriveStep, "op"> & {
|
|
30
|
+
op: "fire" | "fireSceneEvent" | "fireCue" | "press" | "previewState" | "select" | "play" | "pause" | "seek" | "restart" | "wait" | "assert" | "capture";
|
|
31
|
+
};
|
|
32
|
+
export type ExperienceScenario = {
|
|
33
|
+
version: 1;
|
|
34
|
+
steps: ExperienceStep[];
|
|
35
|
+
};
|
|
36
|
+
export declare function parseExperienceScenario(value: unknown): ExperienceScenario;
|
|
37
|
+
export declare function validExperiencePath(path: string): boolean;
|
|
38
|
+
export declare function matchesExperienceObservation(observation: Record<string, unknown>, step: ExperienceStep): boolean;
|
|
39
|
+
export declare function isExperienceCommand(step: ExperienceStep): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Probe or journey. A journey starts from the real initial condition and uses
|
|
42
|
+
* only learner-reachable actions; anything that jumped, fired a hidden event,
|
|
43
|
+
* seeked, or applied synthetic setup is a probe, and so is any run whose
|
|
44
|
+
* shared observation reported `probe.active` at any point. Probe evidence is
|
|
45
|
+
* development evidence; it never proves a learner can reach the result.
|
|
46
|
+
*/
|
|
47
|
+
export declare function evidenceMode(kind: "scene" | "experience", steps: Array<{
|
|
48
|
+
op: string;
|
|
49
|
+
}>, observations: Array<Record<string, unknown> | undefined>): "probe" | "journey";
|
|
50
|
+
/** A bounded, secret-free summary of one drive step for the activity feed. */
|
|
51
|
+
export declare function stepSummary(step: DriveStep | ExperienceStep, ok: boolean, actual?: unknown): Record<string, unknown>;
|
package/dist/scenario.js
CHANGED
|
@@ -1,16 +1,43 @@
|
|
|
1
1
|
import { CliError } from "./types.js";
|
|
2
|
-
const COMMANDS = new Set([
|
|
2
|
+
const COMMANDS = new Set([
|
|
3
|
+
"set", "fire", "press", "tap", "drag", "play", "pause", "seek", "step", "reset",
|
|
4
|
+
"restart", "previewState", "select",
|
|
5
|
+
]);
|
|
3
6
|
const OPERATIONS = new Set([...COMMANDS, "wait", "assert", "capture"]);
|
|
7
|
+
/**
|
|
8
|
+
* Domains of the shared `kheleshikhi.studio-observation.v2` contract. The
|
|
9
|
+
* human Observatory renders the same map, so a path here names exactly what
|
|
10
|
+
* the Maker sees.
|
|
11
|
+
*/
|
|
12
|
+
export const SHARED_OBSERVATION_ROOTS = ["runtime", "scene", "timeline", "probe", "selection", "diagnostics"];
|
|
4
13
|
const PATH_ROOTS = new Set([
|
|
5
|
-
"active_states", "host_variables", "motion_outputs", "learner_controls",
|
|
14
|
+
"active_states", "preview_override_states", "host_variables", "motion_outputs", "learner_controls",
|
|
6
15
|
"recent_scene_event", "scene_event_sequence", "scene_clock_seconds",
|
|
7
16
|
"scene_clock_playing", "machine_dispatches", "math_graph", "runtime_ready",
|
|
17
|
+
"learner_camera",
|
|
8
18
|
"geometry_instance_ids", "error_summary",
|
|
9
19
|
"recent_audio_event", "audio_failed_count",
|
|
10
|
-
"captions", "visual_ready",
|
|
20
|
+
"captions", "visual_ready", "active_visual_band",
|
|
11
21
|
"gestures",
|
|
22
|
+
...SHARED_OBSERVATION_ROOTS,
|
|
12
23
|
]);
|
|
13
24
|
const IDENTIFIER = /^[A-Za-z][A-Za-z0-9_-]*$/;
|
|
25
|
+
/** A Scene machine State is always `machine/state`: one id alone is ambiguous across machines. */
|
|
26
|
+
const MACHINE_STATE = /^[A-Za-z][A-Za-z0-9_-]{0,79}\/[A-Za-z][A-Za-z0-9_-]{0,79}$/;
|
|
27
|
+
const SCENE_SELECTION = /^(scene|instance|variable|control|binding|behavior|event|gesture|mathPath|connection|machine|state|transition|graph|series|marker|intersection):[^\u0000-\u001f]{1,150}$/;
|
|
28
|
+
const EXPERIENCE_SELECTION = /^(state|transition|cue|scene|variable|audio):[A-Za-z0-9_.-]{1,80}$/;
|
|
29
|
+
const MAX_SETUP_VARIABLES = 16;
|
|
30
|
+
/** Operations that steer the runtime off its natural learner path. */
|
|
31
|
+
const SCENE_PROBE_OPERATIONS = new Set(["previewState", "fire", "seek", "step"]);
|
|
32
|
+
const EXPERIENCE_PROBE_OPERATIONS = new Set(["previewState", "fire", "fireSceneEvent", "fireCue", "seek"]);
|
|
33
|
+
function validSetup(value) {
|
|
34
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
35
|
+
return false;
|
|
36
|
+
const entries = Object.entries(value);
|
|
37
|
+
return entries.length >= 1 && entries.length <= MAX_SETUP_VARIABLES && entries.every(([key, item]) => IDENTIFIER.test(key) && key.length <= 80 &&
|
|
38
|
+
(typeof item === "boolean" || typeof item === "number" && Number.isFinite(item) ||
|
|
39
|
+
typeof item === "string" && item.length <= 160));
|
|
40
|
+
}
|
|
14
41
|
function invalid(message) {
|
|
15
42
|
throw new CliError(message, "STUDIO_SCENARIO_INVALID", 2);
|
|
16
43
|
}
|
|
@@ -27,14 +54,23 @@ export function parseScenario(value) {
|
|
|
27
54
|
const step = raw;
|
|
28
55
|
if (typeof step.op !== "string" || !OPERATIONS.has(step.op))
|
|
29
56
|
invalid(`Step ${index} has an unsupported operation.`);
|
|
30
|
-
const allowed = new Set(["op", "target", "value", "path", "equals", "between", "timeoutMs", "name"]);
|
|
57
|
+
const allowed = new Set(["op", "target", "value", "path", "equals", "between", "timeoutMs", "name", "setup"]);
|
|
31
58
|
if (Object.keys(step).some((key) => !allowed.has(key)))
|
|
32
59
|
invalid(`Step ${index} has an unknown field.`);
|
|
60
|
+
if (step.op === "previewState" && (typeof step.target !== "string" || !MACHINE_STATE.test(step.target))) {
|
|
61
|
+
invalid(`Step ${index} previewState needs an unambiguous machine/state target, for example "measurement/ready".`);
|
|
62
|
+
}
|
|
63
|
+
if (step.op === "select" && (typeof step.target !== "string" || !SCENE_SELECTION.test(step.target))) {
|
|
64
|
+
invalid(`Step ${index} select needs a kind:id target, for example "instance:calipers" or "state:measurement/ready".`);
|
|
65
|
+
}
|
|
66
|
+
if (step.setup !== undefined && (step.op !== "previewState" || !validSetup(step.setup))) {
|
|
67
|
+
invalid(`Step ${index} setup is allowed only on previewState, with 1–${MAX_SETUP_VARIABLES} declared variable values.`);
|
|
68
|
+
}
|
|
33
69
|
if (["set", "fire", "press", "tap", "drag"].includes(step.op) &&
|
|
34
70
|
(typeof step.target !== "string" || !IDENTIFIER.test(step.target) || step.target.length > 80)) {
|
|
35
71
|
invalid(`Step ${index} needs a semantic target id.`);
|
|
36
72
|
}
|
|
37
|
-
if (["set", "drag", "seek"].includes(step.op) &&
|
|
73
|
+
if (["set", "drag", "seek", "step"].includes(step.op) &&
|
|
38
74
|
(typeof step.value !== "number" && typeof step.value !== "boolean" && typeof step.value !== "string" ||
|
|
39
75
|
typeof step.value === "number" && !Number.isFinite(step.value))) {
|
|
40
76
|
invalid(`Step ${index} needs a finite value.`);
|
|
@@ -87,4 +123,106 @@ export function matchesObservation(observation, step) {
|
|
|
87
123
|
return value === step.equals;
|
|
88
124
|
}
|
|
89
125
|
export function isDriveCommand(step) { return COMMANDS.has(step.op); }
|
|
126
|
+
const EXPERIENCE_COMMANDS = new Set(["fire", "fireSceneEvent", "fireCue", "press", "previewState", "select", "play", "pause", "seek", "restart"]);
|
|
127
|
+
const EXPERIENCE_ROOTS = new Set([
|
|
128
|
+
"mounted", "active_state", "active_scene", "active_band", "warm_bands",
|
|
129
|
+
"scene_active_states", "master_variables", "timeline_ms",
|
|
130
|
+
"timeline_duration_ms", "timeline_playing", "recent_master_event",
|
|
131
|
+
"recent_transition", "last_cue", "audio_state", "audio_error",
|
|
132
|
+
"preview_override", "error_summary",
|
|
133
|
+
"completed", "source_hash", "source_origin",
|
|
134
|
+
"experience", ...SHARED_OBSERVATION_ROOTS,
|
|
135
|
+
]);
|
|
136
|
+
export function parseExperienceScenario(value) {
|
|
137
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
138
|
+
invalid("Scenario must be an object.");
|
|
139
|
+
const raw = value;
|
|
140
|
+
if (raw.version !== 1 || !Array.isArray(raw.steps) || raw.steps.length < 1 || raw.steps.length > 64)
|
|
141
|
+
invalid("Experience scenario requires version 1 and 1–64 steps.");
|
|
142
|
+
const steps = raw.steps.map((item, index) => {
|
|
143
|
+
if (!item || typeof item !== "object" || Array.isArray(item))
|
|
144
|
+
invalid(`Step ${index} must be an object.`);
|
|
145
|
+
const step = item;
|
|
146
|
+
if (typeof step.op !== "string" || !EXPERIENCE_COMMANDS.has(step.op) && !["wait", "assert", "capture"].includes(step.op))
|
|
147
|
+
invalid(`Step ${index} has an unsupported operation.`);
|
|
148
|
+
if (Object.keys(step).some((key) => !["op", "target", "value", "path", "equals", "between", "timeoutMs", "name", "setup"].includes(key)))
|
|
149
|
+
invalid(`Step ${index} has an unknown field.`);
|
|
150
|
+
if (["fire", "fireSceneEvent", "fireCue", "press"].includes(step.op) &&
|
|
151
|
+
(typeof step.target !== "string" || !IDENTIFIER.test(step.target) || step.target.length > 80))
|
|
152
|
+
invalid(`Step ${index} needs a semantic target.`);
|
|
153
|
+
// A bare id is a master State; `machine/state` is a machine State of the
|
|
154
|
+
// active Scene. The two forms never collide.
|
|
155
|
+
if (step.op === "previewState" && (typeof step.target !== "string" ||
|
|
156
|
+
!(IDENTIFIER.test(step.target) && step.target.length <= 80 || MACHINE_STATE.test(step.target))))
|
|
157
|
+
invalid(`Step ${index} previewState needs a master State id or a Scene machine/state target.`);
|
|
158
|
+
if (step.op === "select" && (typeof step.target !== "string" || !EXPERIENCE_SELECTION.test(step.target)))
|
|
159
|
+
invalid(`Step ${index} select needs a kind:id target, for example "state:measure".`);
|
|
160
|
+
// Setup scope follows the target: a master State takes master Experience
|
|
161
|
+
// variables, a `machine/state` takes variables the active Scene declares.
|
|
162
|
+
// The page validates each name, type and declared range.
|
|
163
|
+
if (step.setup !== undefined && (step.op !== "previewState" || typeof step.target !== "string" ||
|
|
164
|
+
!validSetup(step.setup)))
|
|
165
|
+
invalid(`Step ${index} setup is allowed only on previewState, with 1–${MAX_SETUP_VARIABLES} declared variable values (master variables for a master State, Scene variables for machine/state).`);
|
|
166
|
+
if (step.op === "seek" && (typeof step.value !== "number" || !Number.isFinite(step.value) || step.value < 0))
|
|
167
|
+
invalid(`Step ${index} needs a nonnegative Timeline millisecond value.`);
|
|
168
|
+
if (["wait", "assert"].includes(step.op)) {
|
|
169
|
+
if (typeof step.path !== "string" || !validExperiencePath(step.path))
|
|
170
|
+
invalid(`Step ${index} needs an allowed observation path.`);
|
|
171
|
+
if (Object.hasOwn(step, "equals") === (step.between !== undefined))
|
|
172
|
+
invalid(`Step ${index} needs exactly one comparison.`);
|
|
173
|
+
if (step.between !== undefined && (!Array.isArray(step.between) || step.between.length !== 2 ||
|
|
174
|
+
step.between.some((n) => typeof n !== "number" || !Number.isFinite(n)) || step.between[0] > step.between[1]))
|
|
175
|
+
invalid(`Step ${index} has invalid bounds.`);
|
|
176
|
+
}
|
|
177
|
+
if (step.timeoutMs !== undefined && (typeof step.timeoutMs !== "number" || !Number.isInteger(step.timeoutMs) || step.timeoutMs < 1 || step.timeoutMs > 30_000))
|
|
178
|
+
invalid(`Step ${index} timeout must be 1–30000 ms.`);
|
|
179
|
+
if (step.name !== undefined && (typeof step.name !== "string" || !/^[A-Za-z0-9_-]{1,60}$/.test(step.name)))
|
|
180
|
+
invalid(`Step ${index} has invalid capture name.`);
|
|
181
|
+
return step;
|
|
182
|
+
});
|
|
183
|
+
return { version: 1, steps };
|
|
184
|
+
}
|
|
185
|
+
export function validExperiencePath(path) {
|
|
186
|
+
const parts = path.split(".");
|
|
187
|
+
return parts.length <= 4 && EXPERIENCE_ROOTS.has(parts[0]) &&
|
|
188
|
+
parts.slice(1).every((part) => /^[A-Za-z0-9_-]{1,80}$/.test(part));
|
|
189
|
+
}
|
|
190
|
+
export function matchesExperienceObservation(observation, step) {
|
|
191
|
+
if (!validExperiencePath(step.path || ""))
|
|
192
|
+
invalid("Observation path is not allowed.");
|
|
193
|
+
const value = (step.path || "").split(".").reduce((current, key) => current && typeof current === "object" && Object.hasOwn(current, key)
|
|
194
|
+
? current[key] : undefined, observation);
|
|
195
|
+
if (step.between)
|
|
196
|
+
return typeof value === "number" && value >= step.between[0] && value <= step.between[1];
|
|
197
|
+
return value === step.equals;
|
|
198
|
+
}
|
|
199
|
+
export function isExperienceCommand(step) { return EXPERIENCE_COMMANDS.has(step.op); }
|
|
200
|
+
/**
|
|
201
|
+
* Probe or journey. A journey starts from the real initial condition and uses
|
|
202
|
+
* only learner-reachable actions; anything that jumped, fired a hidden event,
|
|
203
|
+
* seeked, or applied synthetic setup is a probe, and so is any run whose
|
|
204
|
+
* shared observation reported `probe.active` at any point. Probe evidence is
|
|
205
|
+
* development evidence; it never proves a learner can reach the result.
|
|
206
|
+
*/
|
|
207
|
+
export function evidenceMode(kind, steps, observations) {
|
|
208
|
+
const synthetic = kind === "scene" ? SCENE_PROBE_OPERATIONS : EXPERIENCE_PROBE_OPERATIONS;
|
|
209
|
+
if (steps.some((step) => synthetic.has(step.op)))
|
|
210
|
+
return "probe";
|
|
211
|
+
return observations.some((observation) => observation?.probe?.active === true) ? "probe" : "journey";
|
|
212
|
+
}
|
|
213
|
+
/** A bounded, secret-free summary of one drive step for the activity feed. */
|
|
214
|
+
export function stepSummary(step, ok, actual) {
|
|
215
|
+
const scalar = (value) => typeof value === "string" ? value.slice(0, 80) :
|
|
216
|
+
typeof value === "number" || typeof value === "boolean" || value === null ? value : undefined;
|
|
217
|
+
return {
|
|
218
|
+
op: step.op,
|
|
219
|
+
...(step.target ? { target: step.target.slice(0, 160) } : {}),
|
|
220
|
+
...(step.value !== undefined ? { value: scalar(step.value) } : {}),
|
|
221
|
+
...(step.setup ? { setup_keys: Object.keys(step.setup).slice(0, 16) } : {}),
|
|
222
|
+
...(step.path ? { path: step.path.slice(0, 160) } : {}),
|
|
223
|
+
...(actual !== undefined && scalar(actual) !== undefined ? { observed: scalar(actual) } : {}),
|
|
224
|
+
...(step.name ? { name: step.name } : {}),
|
|
225
|
+
ok,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
90
228
|
//# sourceMappingURL=scenario.js.map
|
package/dist/scenario.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scenario.js","sourceRoot":"","sources":["../src/scenario.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scenario.js","sourceRoot":"","sources":["../src/scenario.ts"],"names":[],"mappings":"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"}
|