@nodetool-ai/runtime 0.8.8 → 0.8.9-beta.1

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 (145) hide show
  1. package/dist/.nodetool-build-stamp +1 -1
  2. package/dist/context.d.ts +6 -2
  3. package/dist/context.d.ts.map +1 -1
  4. package/dist/context.js +13 -24
  5. package/dist/context.js.map +1 -1
  6. package/dist/host-binaries.d.ts +5 -5
  7. package/dist/host-binaries.js +5 -5
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/invocation-account.d.ts +1 -42
  13. package/dist/invocation-account.d.ts.map +1 -1
  14. package/dist/invocation-account.js +1 -59
  15. package/dist/invocation-account.js.map +1 -1
  16. package/dist/media/abort.d.ts +8 -0
  17. package/dist/media/abort.d.ts.map +1 -0
  18. package/dist/media/abort.js +18 -0
  19. package/dist/media/abort.js.map +1 -0
  20. package/dist/media/audio-encoder.d.ts +37 -0
  21. package/dist/media/audio-encoder.d.ts.map +1 -0
  22. package/dist/media/audio-encoder.js +118 -0
  23. package/dist/media/audio-encoder.js.map +1 -0
  24. package/dist/media/audio.d.ts +36 -0
  25. package/dist/media/audio.d.ts.map +1 -0
  26. package/dist/media/audio.js +84 -0
  27. package/dist/media/audio.js.map +1 -0
  28. package/dist/media/av.d.ts +51 -0
  29. package/dist/media/av.d.ts.map +1 -0
  30. package/dist/media/av.js +146 -0
  31. package/dist/media/av.js.map +1 -0
  32. package/dist/media/codecs.d.ts +9 -0
  33. package/dist/media/codecs.d.ts.map +1 -0
  34. package/dist/media/codecs.js +17 -0
  35. package/dist/media/codecs.js.map +1 -0
  36. package/dist/media/concat.d.ts +56 -0
  37. package/dist/media/concat.d.ts.map +1 -0
  38. package/dist/media/concat.js +319 -0
  39. package/dist/media/concat.js.map +1 -0
  40. package/dist/media/convert.d.ts +31 -0
  41. package/dist/media/convert.d.ts.map +1 -0
  42. package/dist/media/convert.js +114 -0
  43. package/dist/media/convert.js.map +1 -0
  44. package/dist/media/decode.d.ts +31 -0
  45. package/dist/media/decode.d.ts.map +1 -0
  46. package/dist/media/decode.js +85 -0
  47. package/dist/media/decode.js.map +1 -0
  48. package/dist/media/filter-graph.d.ts +53 -0
  49. package/dist/media/filter-graph.d.ts.map +1 -0
  50. package/dist/media/filter-graph.js +260 -0
  51. package/dist/media/filter-graph.js.map +1 -0
  52. package/dist/media/frames.d.ts +31 -0
  53. package/dist/media/frames.d.ts.map +1 -0
  54. package/dist/media/frames.js +112 -0
  55. package/dist/media/frames.js.map +1 -0
  56. package/dist/media/index.d.ts +26 -0
  57. package/dist/media/index.d.ts.map +1 -0
  58. package/dist/media/index.js +26 -0
  59. package/dist/media/index.js.map +1 -0
  60. package/dist/media/mux.d.ts +58 -0
  61. package/dist/media/mux.d.ts.map +1 -0
  62. package/dist/media/mux.js +234 -0
  63. package/dist/media/mux.js.map +1 -0
  64. package/dist/media/probe.d.ts +84 -0
  65. package/dist/media/probe.d.ts.map +1 -0
  66. package/dist/media/probe.js +133 -0
  67. package/dist/media/probe.js.map +1 -0
  68. package/dist/media/rgba.d.ts +78 -0
  69. package/dist/media/rgba.d.ts.map +1 -0
  70. package/dist/media/rgba.js +285 -0
  71. package/dist/media/rgba.js.map +1 -0
  72. package/dist/media/testing.d.ts +119 -0
  73. package/dist/media/testing.d.ts.map +1 -0
  74. package/dist/media/testing.js +343 -0
  75. package/dist/media/testing.js.map +1 -0
  76. package/dist/media/transcode.d.ts +17 -0
  77. package/dist/media/transcode.d.ts.map +1 -0
  78. package/dist/media/transcode.js +19 -0
  79. package/dist/media/transcode.js.map +1 -0
  80. package/dist/media/transform.d.ts +61 -0
  81. package/dist/media/transform.d.ts.map +1 -0
  82. package/dist/media/transform.js +371 -0
  83. package/dist/media/transform.js.map +1 -0
  84. package/dist/media/verify.d.ts +17 -0
  85. package/dist/media/verify.d.ts.map +1 -0
  86. package/dist/media/verify.js +65 -0
  87. package/dist/media/verify.js.map +1 -0
  88. package/dist/media-loader.d.ts +8 -0
  89. package/dist/media-loader.d.ts.map +1 -0
  90. package/dist/media-loader.js +10 -0
  91. package/dist/media-loader.js.map +1 -0
  92. package/dist/prefixed-storage-adapter.d.ts.map +1 -1
  93. package/dist/prefixed-storage-adapter.js +1 -1
  94. package/dist/prefixed-storage-adapter.js.map +1 -1
  95. package/dist/providers/anthropic-provider.d.ts.map +1 -1
  96. package/dist/providers/anthropic-provider.js +1 -17
  97. package/dist/providers/anthropic-provider.js.map +1 -1
  98. package/dist/providers/data-uri.d.ts +6 -0
  99. package/dist/providers/data-uri.d.ts.map +1 -0
  100. package/dist/providers/data-uri.js +19 -0
  101. package/dist/providers/data-uri.js.map +1 -0
  102. package/dist/providers/fake-provider.js +1 -1
  103. package/dist/providers/meta-transcription.d.ts +1 -5
  104. package/dist/providers/meta-transcription.d.ts.map +1 -1
  105. package/dist/providers/meta-transcription.js +9 -55
  106. package/dist/providers/meta-transcription.js.map +1 -1
  107. package/dist/providers/node-llama-cpp-trending.generated.js +91 -91
  108. package/dist/providers/node-llama-cpp-trending.generated.js.map +1 -1
  109. package/dist/providers/ollama-provider.d.ts.map +1 -1
  110. package/dist/providers/ollama-provider.js +1 -17
  111. package/dist/providers/ollama-provider.js.map +1 -1
  112. package/dist/providers/openai-provider.js +2 -2
  113. package/dist/providers/openai-provider.js.map +1 -1
  114. package/dist/providers/safe-url.d.ts +1 -69
  115. package/dist/providers/safe-url.d.ts.map +1 -1
  116. package/dist/providers/safe-url.js +1 -284
  117. package/dist/providers/safe-url.js.map +1 -1
  118. package/dist/providers/topaz-provider.d.ts +1 -1
  119. package/dist/providers/topaz-provider.js +1 -1
  120. package/dist/providers/video-frame-fallback.d.ts +1 -1
  121. package/dist/providers/video-frame-fallback.js +4 -4
  122. package/dist/providers/video-frame-fallback.js.map +1 -1
  123. package/dist/providers/video-frames.d.ts +6 -16
  124. package/dist/providers/video-frames.d.ts.map +1 -1
  125. package/dist/providers/video-frames.js +48 -116
  126. package/dist/providers/video-frames.js.map +1 -1
  127. package/dist/storage-workspace.d.ts +1 -61
  128. package/dist/storage-workspace.d.ts.map +1 -1
  129. package/dist/storage-workspace.js +2 -430
  130. package/dist/storage-workspace.js.map +1 -1
  131. package/dist/testing.d.ts.map +1 -1
  132. package/dist/testing.js +57 -1
  133. package/dist/testing.js.map +1 -1
  134. package/dist/trim-video-window.d.ts.map +1 -1
  135. package/dist/trim-video-window.js +2 -32
  136. package/dist/trim-video-window.js.map +1 -1
  137. package/dist/workspace.d.ts +1 -118
  138. package/dist/workspace.d.ts.map +1 -1
  139. package/dist/workspace.js +1 -111
  140. package/dist/workspace.js.map +1 -1
  141. package/dist/yt-dlp-format.d.ts +22 -0
  142. package/dist/yt-dlp-format.d.ts.map +1 -0
  143. package/dist/yt-dlp-format.js +90 -0
  144. package/dist/yt-dlp-format.js.map +1 -0
  145. package/package.json +23 -6
@@ -1,434 +1,6 @@
1
- /**
2
- * The one {@link Workspace} implementation, over any {@link StorageAdapter}.
3
- *
4
- * There is deliberately no second implementation for local folders: a local
5
- * workspace is this class over a `FileStorageAdapter`, which is what keeps the
6
- * two deployments on the same code path instead of on two that drift.
7
- */
8
- import { getNodeBuiltinSync } from "@nodetool-ai/config";
9
- import { FileStorageAdapter } from "@nodetool-ai/storage";
10
1
  import { setWorkspaceFactory } from "./context.js";
11
- import { PrefixedStorageAdapter } from "./prefixed-storage-adapter.js";
12
- import { withTaskSpan } from "./tracing-helpers.js";
13
- import { WorkspacePathError } from "./workspace.js";
14
- // Loaded lazily so this module still imports in browser / Edge runtimes, the
15
- // same way the storage adapters above it do. Only `materialize`, `absorb`,
16
- // `scratchDir` and the local branches of `mkdir`/`deleteAll` need them, and
17
- // each says so when they are missing.
18
- const nodeFsP = getNodeBuiltinSync("node:fs/promises");
19
- const nodePath = getNodeBuiltinSync("node:path");
20
- const nodeOs = getNodeBuiltinSync("node:os");
21
- function requireNode() {
22
- if (!nodeFsP || !nodePath || !nodeOs) {
23
- throw new Error("Local workspace file access requires a Node.js runtime; this workspace " +
24
- "operation is not available here");
25
- }
26
- return { fs: nodeFsP, path: nodePath, os: nodeOs };
27
- }
28
- /** `path.resolve`, but only where Node is available. */
29
- function resolvePath(...parts) {
30
- return requireNode().path.resolve(...parts);
31
- }
32
- /**
33
- * Strip the prefixes a caller may write a workspace path with.
34
- *
35
- * `/workspace/notes.md`, `workspace/notes.md` and `notes.md` are the same
36
- * file: agents and generated code write all three, and the sandbox has always
37
- * treated `/workspace` as the root. An absolute path is read as
38
- * workspace-relative rather than rejected, because that is what a model writes
39
- * when it thinks it is on a normal filesystem.
40
- */
41
- function stripWorkspacePrefix(path) {
42
- let p = path.replaceAll("\\", "/").trim();
43
- if (p.startsWith("/workspace/"))
44
- return p.slice("/workspace/".length);
45
- if (p === "/workspace" || p === "workspace")
46
- return "";
47
- if (p.startsWith("workspace/"))
48
- return p.slice("workspace/".length);
49
- // A Windows drive letter or a POSIX absolute path: keep the tail.
50
- p = p.replace(/^[A-Za-z]:\//, "");
51
- return p.startsWith("/") ? p.slice(1) : p;
52
- }
53
- /** Normalize to a key: no `.`/`..` segments, no leading or trailing slash. */
54
- function normalize(path) {
55
- const segments = [];
56
- for (const segment of stripWorkspacePrefix(path).split("/")) {
57
- if (!segment || segment === ".")
58
- continue;
59
- if (segment === "..") {
60
- if (segments.length === 0)
61
- throw new WorkspacePathError(path);
62
- segments.pop();
63
- continue;
64
- }
65
- segments.push(segment);
66
- }
67
- return segments.join("/");
68
- }
69
- /**
70
- * The real directory an adapter reads and writes, when it has one.
71
- *
72
- * Detected by shape rather than by `instanceof`: a host may pass any adapter
73
- * that fronts a real directory, including one of its own. An `instanceof`
74
- * check against `FileStorageAdapter` silently reports such a workspace as
75
- * virtual, which would send every local run through the staging path.
76
- */
77
- function localRootOf(storage) {
78
- const candidate = storage.rootDir;
79
- return typeof candidate === "string" && candidate !== "" ? candidate : null;
80
- }
81
- /**
82
- * Whether a path's real (symlink-resolved) location stays inside the root.
83
- *
84
- * A local workspace's containment cannot be decided lexically: a symlink
85
- * inside it can point anywhere on the host, and following one is how an agent
86
- * reads `~/.ssh/id_rsa` through a file called `notes`. A virtual workspace
87
- * needs none of this — an object store has no symlinks — which is why the
88
- * check runs only when there is a real directory.
89
- *
90
- * A path that is not there is not an escape — a write target legitimately does
91
- * not exist yet, and a read of a missing file must answer "missing" rather
92
- * than "outside" — so the nearest existing ancestor is checked instead.
93
- * `lstat`, not `access`: a DANGLING symlink pointing outside the root looks
94
- * absent to `access`, and the create would then follow it out.
95
- */
96
- async function realPathWithinRoot(root, candidate) {
97
- const { fs, path } = requireNode();
98
- const realRoot = await fs.realpath(root);
99
- const within = (real) => {
100
- const rel = path.relative(realRoot, real);
101
- return rel === "" || (!rel.startsWith("..") && !path.isAbsolute(rel));
102
- };
103
- try {
104
- return within(await fs.realpath(candidate));
105
- }
106
- catch {
107
- // Not resolvable — either absent, or a link with no target.
108
- }
109
- try {
110
- // Exists as a link whose target does not — never follow it.
111
- await fs.lstat(candidate);
112
- return false;
113
- }
114
- catch {
115
- // Genuinely absent: the parent decides.
116
- }
117
- // Walk up to the nearest ancestor that exists — writing `out/deep/x.txt`
118
- // into a workspace that has neither directory yet is ordinary, and only the
119
- // first real ancestor can be resolved.
120
- let parent = path.dirname(candidate);
121
- while (true) {
122
- try {
123
- return within(await fs.realpath(parent));
124
- }
125
- catch {
126
- // realpath failed — either this ancestor is genuinely absent, or it is
127
- // itself a dangling symlink. lstat, not the loop's next iteration,
128
- // tells them apart: a dangling symlink exists at this exact path and
129
- // must never be walked past, or a symlink one level up pointing
130
- // straight at the root would resolve "within" by accident.
131
- try {
132
- await fs.lstat(parent);
133
- return false;
134
- }
135
- catch {
136
- // Genuinely absent: keep climbing.
137
- }
138
- const next = path.dirname(parent);
139
- if (next === parent)
140
- return false;
141
- parent = next;
142
- }
143
- }
144
- }
145
- const textDecoder = new TextDecoder();
146
- const textEncoder = new TextEncoder();
147
- export class StorageWorkspace {
148
- storage;
149
- localDir;
150
- scratch = null;
151
- constructor(storage, opts = {}) {
152
- this.storage = storage;
153
- this.localDir = opts.localDir ?? localRootOf(storage);
154
- }
155
- rootReady = null;
156
- /** Create the workspace directory once, on first use. */
157
- ensureRoot() {
158
- if (!this.localDir)
159
- return Promise.resolve();
160
- const dir = this.localDir;
161
- this.rootReady ??= requireNode()
162
- .fs.mkdir(dir, { recursive: true })
163
- .then(() => undefined);
164
- return this.rootReady;
165
- }
166
- key(path) {
167
- const key = normalize(path);
168
- if (!key)
169
- throw new WorkspacePathError(path);
170
- return key;
171
- }
172
- /**
173
- * Refuse a path whose real location leaves the workspace.
174
- *
175
- * Called on every operation that touches a local workspace. `key()` already
176
- * refuses a `..` that climbs out lexically; this is the half a symlink
177
- * defeats.
178
- */
179
- async assertContained(path) {
180
- if (!this.localDir)
181
- return;
182
- // The root may not exist yet (a workspace folder created on first use).
183
- // Without this the walk below climbs past it to an ancestor that does
184
- // exist, finds that outside the root, and refuses every path in a
185
- // perfectly good workspace.
186
- await this.ensureRoot();
187
- const target = resolvePath(this.localDir, this.key(path));
188
- if (!(await realPathWithinRoot(this.localDir, target))) {
189
- throw new WorkspacePathError(path);
190
- }
191
- }
192
- uri(path) {
193
- return this.storage.uriForKey(this.key(path));
194
- }
195
- read(path) {
196
- return withTaskSpan("io", "workspace.read", {}, async (span) => {
197
- await this.assertContained(path);
198
- const bytes = await this.storage.retrieve(this.uri(path));
199
- span?.setAttribute("nodetool.workspace.bytes", bytes?.byteLength ?? 0);
200
- // The file backend answers with a Buffer, the object stores with a plain
201
- // Uint8Array. A caller comparing or structured-cloning the result must
202
- // not be able to tell which backend it got, so narrow to the common type.
203
- if (bytes === null)
204
- return null;
205
- return bytes instanceof Uint8Array && bytes.constructor === Uint8Array
206
- ? bytes
207
- : new Uint8Array(bytes);
208
- });
209
- }
210
- async readText(path) {
211
- const bytes = await this.read(path);
212
- return bytes === null ? null : textDecoder.decode(bytes);
213
- }
214
- write(path, data, contentType) {
215
- const bytes = typeof data === "string" ? textEncoder.encode(data) : data;
216
- return withTaskSpan("io", "workspace.write", { "nodetool.workspace.bytes": bytes.byteLength }, async () => {
217
- await this.assertContained(path);
218
- await this.storage.store(this.key(path), bytes, contentType);
219
- });
220
- }
221
- async exists(path) {
222
- try {
223
- await this.assertContained(path);
224
- }
225
- catch {
226
- return false;
227
- }
228
- return this.storage.exists(this.uri(path));
229
- }
230
- async stat(path) {
231
- await this.assertContained(path);
232
- const key = this.key(path);
233
- const st = await this.storage.stat(this.storage.uriForKey(key));
234
- if (st) {
235
- return {
236
- path: key,
237
- size: st.size,
238
- modifiedAt: st.modifiedAt,
239
- contentType: st.contentType,
240
- isDirectory: false
241
- };
242
- }
243
- // No object at that key: it may still be a directory. On an object store a
244
- // directory exists only as a shared prefix of other keys, so an empty one
245
- // is indistinguishable from an absent one — but on a local workspace it is
246
- // a real directory, and reporting an existing empty folder as missing is a
247
- // difference a caller can see.
248
- const listing = await this.storage.list(`${key}/`, { delimiter: "/" });
249
- if (listing.entries.length > 0 || listing.commonPrefixes.length > 0) {
250
- return { path: key, size: 0, modifiedAt: 0, isDirectory: true };
251
- }
252
- if (this.localDir) {
253
- const { fs } = requireNode();
254
- try {
255
- const info = await fs.stat(resolvePath(this.localDir, key));
256
- if (info.isDirectory()) {
257
- return {
258
- path: key,
259
- size: 0,
260
- modifiedAt: info.mtimeMs,
261
- isDirectory: true
262
- };
263
- }
264
- }
265
- catch {
266
- // Absent — fall through.
267
- }
268
- }
269
- return null;
270
- }
271
- list(path = "", opts = {}) {
272
- return withTaskSpan("io", "workspace.list", { "nodetool.workspace.recursive": opts.recursive === true }, () => this.listEntries(path, opts));
273
- }
274
- async listEntries(path, opts) {
275
- const key = normalize(path);
276
- if (key)
277
- await this.assertContained(key);
278
- const prefix = key ? `${key}/` : "";
279
- const listing = await this.storage.list(prefix, opts.recursive === true ? {} : { delimiter: "/" });
280
- const files = listing.entries.map((entry) => ({
281
- path: entry.key,
282
- name: entry.key.slice(entry.key.lastIndexOf("/") + 1),
283
- size: entry.size,
284
- modifiedAt: entry.modifiedAt,
285
- isDirectory: false
286
- }));
287
- const dirs = listing.commonPrefixes.map((p) => {
288
- const trimmed = p.endsWith("/") ? p.slice(0, -1) : p;
289
- return {
290
- path: trimmed,
291
- name: trimmed.slice(trimmed.lastIndexOf("/") + 1),
292
- size: 0,
293
- modifiedAt: 0,
294
- isDirectory: true
295
- };
296
- });
297
- return [...dirs, ...files].sort((a, b) => a.path.localeCompare(b.path));
298
- }
299
- async delete(path) {
300
- await this.assertContained(path);
301
- return this.storage.delete(this.uri(path));
302
- }
303
- async deleteAll(path) {
304
- const key = normalize(path);
305
- // Same containment rule as every other mutating operation: without it a
306
- // symlinked directory inside the workspace (`out -> ~/Documents`) makes
307
- // this delete the link's target. `list` reads through the symlink and
308
- // hands back keys that are lexically inside the root, so the adapter's own
309
- // lexical check passes and `unlink` follows the link out.
310
- if (key)
311
- await this.assertContained(key);
312
- const listing = await this.storage.list(key ? `${key}/` : "");
313
- let deleted = 0;
314
- for (const entry of listing.entries) {
315
- if (await this.storage.delete(entry.uri))
316
- deleted++;
317
- }
318
- // On an object store the prefix is gone once its keys are. A real
319
- // directory would linger and keep showing up in `list`, so remove it —
320
- // otherwise the same call leaves two different workspaces behind.
321
- if (this.localDir && key) {
322
- await requireNode().fs.rm(resolvePath(this.localDir, key), {
323
- recursive: true,
324
- force: true
325
- });
326
- }
327
- return deleted;
328
- }
329
- async mkdir(path) {
330
- // An object store has no directories — a key's prefix is its directory, so
331
- // there is nothing to create and nothing to fail. A local workspace makes
332
- // the real directory so an empty one survives and a host binary can cd
333
- // into it.
334
- if (this.localDir) {
335
- const key = normalize(path);
336
- if (!key)
337
- return;
338
- await this.assertContained(key);
339
- await requireNode().fs.mkdir(resolvePath(this.localDir, key), {
340
- recursive: true
341
- });
342
- }
343
- }
344
- async copy(from, to) {
345
- const bytes = await this.read(from);
346
- if (bytes === null) {
347
- throw new Error(`Cannot copy '${from}': it does not exist`);
348
- }
349
- const st = await this.stat(from);
350
- await this.write(to, bytes, st?.contentType);
351
- }
352
- async move(from, to) {
353
- await this.copy(from, to);
354
- await this.delete(from);
355
- }
356
- materialize(path) {
357
- return withTaskSpan("io", "workspace.materialize", {}, () => this.stage(path));
358
- }
359
- async stage(path) {
360
- await this.assertContained(path);
361
- const key = this.key(path);
362
- if (this.localDir)
363
- return resolvePath(this.localDir, key);
364
- const bytes = await this.read(key);
365
- if (bytes === null) {
366
- throw new Error(`Cannot stage '${path}': it does not exist`);
367
- }
368
- const node = requireNode();
369
- const target = node.path.join(await this.scratchDir(), key);
370
- await node.fs.mkdir(node.path.dirname(target), { recursive: true });
371
- await node.fs.writeFile(target, bytes);
372
- return target;
373
- }
374
- absorb(localPath, path) {
375
- return withTaskSpan("io", "workspace.absorb", {}, () => this.absorbFile(localPath, path));
376
- }
377
- async absorbFile(localPath, path) {
378
- const node = requireNode();
379
- if (this.localDir &&
380
- node.path.resolve(localPath) ===
381
- node.path.resolve(this.localDir, this.key(path))) {
382
- // The binary already wrote in place — the workspace *is* that file.
383
- return;
384
- }
385
- await this.write(path, new Uint8Array(await node.fs.readFile(localPath)));
386
- }
387
- async scratchDir() {
388
- if (this.localDir)
389
- return this.localDir;
390
- const node = requireNode();
391
- this.scratch ??= node.fs.mkdtemp(node.path.join(node.os.tmpdir(), "nodetool-ws-"));
392
- return this.scratch;
393
- }
394
- async cleanupScratch() {
395
- const scratch = this.scratch;
396
- this.scratch = null;
397
- if (scratch) {
398
- await requireNode().fs.rm(await scratch, { recursive: true, force: true });
399
- }
400
- }
401
- }
402
- /**
403
- * Build a workspace over a storage backend.
404
- *
405
- * `prefix` carves a namespace out of a shared bucket — how a cloud deployment
406
- * gives each user their own workspace inside the one bucket it has.
407
- */
408
- export function createWorkspace(storage, opts = {}) {
409
- if (!opts.prefix)
410
- return new StorageWorkspace(storage);
411
- return new StorageWorkspace(new PrefixedStorageAdapter(storage, opts.prefix), {
412
- // A prefixed view of a local folder still has a real directory: the
413
- // subfolder the prefix names.
414
- localDir: (() => {
415
- const root = localRootOf(storage);
416
- return root ? resolvePath(root, opts.prefix) : null;
417
- })()
418
- });
419
- }
420
- /** A workspace over a real directory. */
421
- export function createLocalWorkspace(dir) {
422
- return new StorageWorkspace(new FileStorageAdapter(dir));
423
- }
424
- /**
425
- * Teach {@link ProcessingContext} how to build a workspace from the older
426
- * `workspaceDir` / `workspaceStorage` options.
427
- *
428
- * The context cannot import this module — it must stay loadable off Node —
429
- * so the direction is inverted: importing this file (which every host does,
430
- * via the package index) installs the factory.
431
- */
2
+ import { StorageWorkspace, createLocalWorkspace } from "@nodetool-ai/runtime-core";
3
+ export { StorageWorkspace, createWorkspace, createLocalWorkspace } from "@nodetool-ai/runtime-core";
432
4
  setWorkspaceFactory((opts) => {
433
5
  if (opts.workspace)
434
6
  return opts.workspace;
@@ -1 +1 @@
1
- {"version":3,"file":"storage-workspace.js","sourceRoot":"","sources":["../src/storage-workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage-workspace.js","sourceRoot":"","sources":["../src/storage-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEpG,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE;IAC3B,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1C,IAAI,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC9E,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,iBAAiB,EAAe,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC;;;OAGG;IACH,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnE;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAgCD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAwGnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAC5E,MAAM,IAAI,CAyBZ"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,iBAAiB,EAAe,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC;;;OAGG;IACH,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnE;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAgCD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAwJnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAC5E,MAAM,IAAI,CAyBZ"}
package/dist/testing.js CHANGED
@@ -14,7 +14,7 @@ const fs = getNodeBuiltinSync("node:fs");
14
14
  import { InMemoryStorageAdapter } from "@nodetool-ai/storage";
15
15
  import { ProcessingContext, MemoryCache } from "./context.js";
16
16
  import { FakeProvider } from "./providers/fake-provider.js";
17
- import { isString } from "@nodetool-ai/protocol";
17
+ import { isString, isRecord } from "@nodetool-ai/protocol";
18
18
  /**
19
19
  * Default `fetch` stub. Returns an empty `200 OK` `text/plain` response
20
20
  * for every URL. Real workflows expecting JSON will get `{}` back.
@@ -58,6 +58,9 @@ export function createFakeContext(options = {}) {
58
58
  let assetCounter = 0;
59
59
  let sequenceCounter = 0;
60
60
  const sequences = new Map();
61
+ const storyboards = new Map();
62
+ const entities = new Map();
63
+ const assets = new Map();
61
64
  const context = new ProcessingContext({
62
65
  jobId: options.jobId ?? "fake-job",
63
66
  userId,
@@ -98,8 +101,61 @@ export function createFakeContext(options = {}) {
98
101
  await storage.store(`${userId}/${id}.${ext}`, args.content, args.contentType);
99
102
  }
100
103
  }
104
+ assets.set(id, args.contentType);
101
105
  return { id, name: args.name, content_type: args.contentType };
102
106
  },
107
+ getStoryboard: async ({ id }) => storyboards.get(id) ?? null,
108
+ listStoryboards: async ({ projectId, limit }) => [...storyboards.values()]
109
+ .filter(board => !projectId || board.project_id === projectId)
110
+ .slice(0, limit),
111
+ findRecastStoryboard: async ({ projectId, templateId, recastKey }) => [...storyboards.values()]
112
+ .find(board => (!projectId || board.project_id === projectId) && isRecord(board.document) && board.document.templateId === templateId && board.document.recastKey === recastKey) ?? null,
113
+ createStoryboard: async ({ name, projectId, document }) => {
114
+ const id = globalThis.crypto.randomUUID().replaceAll("-", "");
115
+ const board = { id, name: name ?? "", project_id: projectId ?? "default", document };
116
+ storyboards.set(id, board);
117
+ return board;
118
+ },
119
+ updateStoryboard: async ({ id, document }) => {
120
+ const existing = storyboards.get(id);
121
+ if (!existing) {
122
+ return null;
123
+ }
124
+ const saved = { ...existing, document: document ?? existing.document };
125
+ storyboards.set(id, saved);
126
+ return saved;
127
+ },
128
+ getEntity: async ({ id }) => entities.get(id) ?? null,
129
+ listEntities: async ({ projectId, kind, tags, nameContains, limit }) => [...entities.values()]
130
+ .filter(entity => (!projectId || entity.project_id === projectId) && (!kind || entity.kind === kind) && (!nameContains || entity.name.toLowerCase().includes(nameContains.toLowerCase())) && (!tags?.length || tags.every(tag => entity.tags?.includes(tag))))
131
+ .slice(0, limit),
132
+ upsertEntity: async (args) => {
133
+ if (!assets.get(args.imageAssetId)?.startsWith("image/")) {
134
+ throw new Error("Fake entity reference must identify a created image asset");
135
+ }
136
+ const projectId = args.projectId ?? "default";
137
+ const existing = [...entities.values()].find(entity => entity.project_id === projectId && (args.source?.key ? entity.source?.key === args.source.key : entity.kind === args.kind && entity.name.toLowerCase() === args.name.toLowerCase()));
138
+ const entity = {
139
+ ...existing,
140
+ type: "entity", id: existing?.id ?? args.imageAssetId,
141
+ kind: args.kind, name: args.name, descriptor: args.descriptor, project_id: projectId,
142
+ reference_images: [{ type: "image", asset_id: args.imageAssetId, uri: `asset://${args.imageAssetId}.png` }]
143
+ };
144
+ if (args.description !== undefined) {
145
+ entity.description = args.description;
146
+ }
147
+ if (args.tags !== undefined) {
148
+ entity.tags = args.tags;
149
+ }
150
+ if (args.source !== undefined) {
151
+ entity.source = args.source;
152
+ }
153
+ if (args.voiceId !== undefined) {
154
+ entity.voice_id = args.voiceId;
155
+ }
156
+ entities.set(entity.id, entity);
157
+ return { entity, created: !existing };
158
+ },
103
159
  // Timeline nodes save a sequence document and read it back by id.
104
160
  createTimelineSequence: async ({ sequence }) => {
105
161
  sequenceCounter += 1;
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"trim-video-window.d.ts","sourceRoot":"","sources":["../src/trim-video-window.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAgDrB"}
1
+ {"version":3,"file":"trim-video-window.d.ts","sourceRoot":"","sources":["../src/trim-video-window.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAmBrB"}
@@ -1,10 +1,5 @@
1
- import { execFile as execFileCallback } from "node:child_process";
2
- import { promisify } from "node:util";
3
- import { promises as fs } from "node:fs";
4
- import os from "node:os";
5
- import path from "node:path";
1
+ import { trimVideo } from "./media/convert.js";
6
2
  import { withTaskSpan } from "./tracing-helpers.js";
7
- const execFile = promisify(execFileCallback);
8
3
  /**
9
4
  * Materialize the exact constant-speed source window sent to a video editor.
10
5
  * The source asset remains untouched in storage. The returned MP4 starts at
@@ -20,31 +15,6 @@ export async function trimVideoWindow(input, startMs, endMs, signal) {
20
15
  throw new Error("Video edit source window must be a positive finite range.");
21
16
  }
22
17
  signal?.throwIfAborted();
23
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), "nodetool-video-edit-"));
24
- const inputPath = path.join(dir, "input.mp4");
25
- const outputPath = path.join(dir, "window.mp4");
26
- try {
27
- await fs.writeFile(inputPath, input);
28
- await withTaskSpan("cpu", "ffmpeg.trim_video_window", { "nodetool.video.input_bytes": input.length }, () => execFile("ffmpeg", [
29
- "-y",
30
- "-i",
31
- inputPath,
32
- "-ss",
33
- String(startMs / 1000),
34
- "-t",
35
- String((endMs - startMs) / 1000),
36
- "-c:v",
37
- "libx264",
38
- "-c:a",
39
- "aac",
40
- "-movflags",
41
- "+faststart",
42
- outputPath
43
- ], { maxBuffer: 50 * 1024 * 1024, signal }));
44
- return new Uint8Array(await fs.readFile(outputPath));
45
- }
46
- finally {
47
- await fs.rm(dir, { recursive: true, force: true });
48
- }
18
+ return withTaskSpan("cpu", "media.trim_video_window", { "nodetool.video.input_bytes": input.length }, () => trimVideo(input, startMs / 1000, endMs / 1000, { signal }));
49
19
  }
50
20
  //# sourceMappingURL=trim-video-window.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"trim-video-window.js","sourceRoot":"","sources":["../src/trim-video-window.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAiB,EACjB,OAAe,EACf,KAAa,EACb,MAAoB;IAEpB,IACE,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,OAAO,GAAG,CAAC;QACX,KAAK,IAAI,OAAO,EAChB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,YAAY,CAChB,KAAK,EACL,0BAA0B,EAC1B,EAAE,4BAA4B,EAAE,KAAK,CAAC,MAAM,EAAE,EAC9C,GAAG,EAAE,CACH,QAAQ,CACN,QAAQ,EACR;YACE,IAAI;YACJ,IAAI;YACJ,SAAS;YACT,KAAK;YACL,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,IAAI;YACJ,MAAM,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;YAChC,MAAM;YACN,SAAS;YACT,MAAM;YACN,KAAK;YACL,WAAW;YACX,YAAY;YACZ,UAAU;SACX,EACD,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,MAAM,EAAE,CACxC,CACJ,CAAC;QACF,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACvD,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"trim-video-window.js","sourceRoot":"","sources":["../src/trim-video-window.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAiB,EACjB,OAAe,EACf,KAAa,EACb,MAAoB;IAEpB,IACE,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,OAAO,GAAG,CAAC;QACX,KAAK,IAAI,OAAO,EAChB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,YAAY,CACjB,KAAK,EACL,yBAAyB,EACzB,EAAE,4BAA4B,EAAE,KAAK,CAAC,MAAM,EAAE,EAC9C,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CACjE,CAAC;AACJ,CAAC"}