@nodetool-ai/websocket 0.7.0-rc.23 → 0.8.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.
- package/README.md +50 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/agent/run-node-tool.d.ts +39 -0
- package/dist/agent/run-node-tool.d.ts.map +1 -0
- package/dist/agent/run-node-tool.js +55 -0
- package/dist/agent/run-node-tool.js.map +1 -0
- package/dist/chat-prediction-forwarder.d.ts +13 -0
- package/dist/chat-prediction-forwarder.d.ts.map +1 -0
- package/dist/chat-prediction-forwarder.js +22 -0
- package/dist/chat-prediction-forwarder.js.map +1 -0
- package/dist/chat-tool-call-repair.d.ts +45 -0
- package/dist/chat-tool-call-repair.d.ts.map +1 -0
- package/dist/chat-tool-call-repair.js +100 -0
- package/dist/chat-tool-call-repair.js.map +1 -0
- package/dist/chat-turn-registry.d.ts +169 -0
- package/dist/chat-turn-registry.d.ts.map +1 -0
- package/dist/chat-turn-registry.js +326 -0
- package/dist/chat-turn-registry.js.map +1 -0
- package/dist/collection-api.d.ts +2 -2
- package/dist/collection-api.d.ts.map +1 -1
- package/dist/collection-api.js +44 -13
- package/dist/collection-api.js.map +1 -1
- package/dist/configured-providers.d.ts +52 -0
- package/dist/configured-providers.d.ts.map +1 -0
- package/dist/configured-providers.js +85 -0
- package/dist/configured-providers.js.map +1 -0
- package/dist/cors.d.ts +22 -0
- package/dist/cors.d.ts.map +1 -0
- package/dist/cors.js +91 -0
- package/dist/cors.js.map +1 -0
- package/dist/credit-gate.d.ts +36 -0
- package/dist/credit-gate.d.ts.map +1 -0
- package/dist/credit-gate.js +76 -0
- package/dist/credit-gate.js.map +1 -0
- package/dist/custom-providers.d.ts +40 -0
- package/dist/custom-providers.d.ts.map +1 -0
- package/dist/custom-providers.js +134 -0
- package/dist/custom-providers.js.map +1 -0
- package/dist/debug-sessions.d.ts +10 -0
- package/dist/debug-sessions.d.ts.map +1 -0
- package/dist/debug-sessions.js +9 -0
- package/dist/debug-sessions.js.map +1 -0
- package/dist/drain.d.ts +34 -0
- package/dist/drain.d.ts.map +1 -0
- package/dist/drain.js +68 -0
- package/dist/drain.js.map +1 -0
- package/dist/e2e-server.d.ts +30 -0
- package/dist/e2e-server.d.ts.map +1 -0
- package/dist/e2e-server.js +111 -0
- package/dist/e2e-server.js.map +1 -0
- package/dist/example-workflows.d.ts +20 -0
- package/dist/example-workflows.d.ts.map +1 -0
- package/dist/example-workflows.js +123 -0
- package/dist/example-workflows.js.map +1 -0
- package/dist/extension-cdp-bridge.d.ts +85 -0
- package/dist/extension-cdp-bridge.d.ts.map +1 -0
- package/dist/extension-cdp-bridge.js +163 -0
- package/dist/extension-cdp-bridge.js.map +1 -0
- package/dist/external-mcp.d.ts +58 -0
- package/dist/external-mcp.d.ts.map +1 -0
- package/dist/external-mcp.js +288 -0
- package/dist/external-mcp.js.map +1 -0
- package/dist/fake-runtime.d.ts +114 -0
- package/dist/fake-runtime.d.ts.map +1 -0
- package/dist/fake-runtime.js +270 -0
- package/dist/fake-runtime.js.map +1 -0
- package/dist/file-api.d.ts +4 -7
- package/dist/file-api.d.ts.map +1 -1
- package/dist/file-api.js +122 -39
- package/dist/file-api.js.map +1 -1
- package/dist/frontend-renderer-registry.d.ts +75 -0
- package/dist/frontend-renderer-registry.d.ts.map +1 -0
- package/dist/frontend-renderer-registry.js +111 -0
- package/dist/frontend-renderer-registry.js.map +1 -0
- package/dist/generation-recovery.d.ts +13 -0
- package/dist/generation-recovery.d.ts.map +1 -0
- package/dist/generation-recovery.js +197 -0
- package/dist/generation-recovery.js.map +1 -0
- package/dist/headless-job-runner.d.ts +71 -0
- package/dist/headless-job-runner.d.ts.map +1 -0
- package/dist/headless-job-runner.js +198 -0
- package/dist/headless-job-runner.js.map +1 -0
- package/dist/http-api.d.ts +157 -24
- package/dist/http-api.d.ts.map +1 -1
- package/dist/http-api.js +613 -646
- package/dist/http-api.js.map +1 -1
- package/dist/http-body-schemas.d.ts +109 -0
- package/dist/http-body-schemas.d.ts.map +1 -0
- package/dist/http-body-schemas.js +146 -0
- package/dist/http-body-schemas.js.map +1 -0
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/job-control.d.ts +57 -0
- package/dist/job-control.d.ts.map +1 -0
- package/dist/job-control.js +134 -0
- package/dist/job-control.js.map +1 -0
- package/dist/job-queue.d.ts +47 -0
- package/dist/job-queue.d.ts.map +1 -0
- package/dist/job-queue.js +52 -0
- package/dist/job-queue.js.map +1 -0
- package/dist/job-run-registry.d.ts +176 -0
- package/dist/job-run-registry.d.ts.map +1 -0
- package/dist/job-run-registry.js +312 -0
- package/dist/job-run-registry.js.map +1 -0
- package/dist/lib/app-build-service.d.ts +16 -0
- package/dist/lib/app-build-service.d.ts.map +1 -0
- package/dist/lib/app-build-service.js +39 -0
- package/dist/lib/app-build-service.js.map +1 -0
- package/dist/lib/app-debug-service.d.ts +16 -0
- package/dist/lib/app-debug-service.d.ts.map +1 -0
- package/dist/lib/app-debug-service.js +48 -0
- package/dist/lib/app-debug-service.js.map +1 -0
- package/dist/lib/app-deployment-service.d.ts +82 -0
- package/dist/lib/app-deployment-service.d.ts.map +1 -0
- package/dist/lib/app-deployment-service.js +282 -0
- package/dist/lib/app-deployment-service.js.map +1 -0
- package/dist/lib/app-run-server.d.ts +7 -0
- package/dist/lib/app-run-server.d.ts.map +1 -0
- package/dist/lib/app-run-server.js +6 -0
- package/dist/lib/app-run-server.js.map +1 -0
- package/dist/lib/app-session-scope.d.ts +91 -0
- package/dist/lib/app-session-scope.d.ts.map +1 -0
- package/dist/lib/app-session-scope.js +91 -0
- package/dist/lib/app-session-scope.js.map +1 -0
- package/dist/lib/applications-service.d.ts +173 -0
- package/dist/lib/applications-service.d.ts.map +1 -0
- package/dist/lib/applications-service.js +491 -0
- package/dist/lib/applications-service.js.map +1 -0
- package/dist/lib/asset-duration.d.ts +7 -0
- package/dist/lib/asset-duration.d.ts.map +1 -0
- package/dist/lib/asset-duration.js +24 -0
- package/dist/lib/asset-duration.js.map +1 -0
- package/dist/lib/asset-export.d.ts +34 -0
- package/dist/lib/asset-export.d.ts.map +1 -0
- package/dist/lib/asset-export.js +113 -0
- package/dist/lib/asset-export.js.map +1 -0
- package/dist/lib/asset-model-interface.d.ts +41 -0
- package/dist/lib/asset-model-interface.d.ts.map +1 -0
- package/dist/lib/asset-model-interface.js +74 -0
- package/dist/lib/asset-model-interface.js.map +1 -0
- package/dist/lib/asset-paths.d.ts +52 -0
- package/dist/lib/asset-paths.d.ts.map +1 -1
- package/dist/lib/asset-paths.js +145 -1
- package/dist/lib/asset-paths.js.map +1 -1
- package/dist/lib/asset-response.d.ts +12 -0
- package/dist/lib/asset-response.d.ts.map +1 -0
- package/dist/lib/asset-response.js +88 -0
- package/dist/lib/asset-response.js.map +1 -0
- package/dist/lib/audio-peaks.d.ts +23 -0
- package/dist/lib/audio-peaks.d.ts.map +1 -0
- package/dist/lib/audio-peaks.js +331 -0
- package/dist/lib/audio-peaks.js.map +1 -0
- package/dist/lib/bridge.d.ts +9 -1
- package/dist/lib/bridge.d.ts.map +1 -1
- package/dist/lib/bridge.js +27 -4
- package/dist/lib/bridge.js.map +1 -1
- package/dist/lib/compression.d.ts +3 -0
- package/dist/lib/compression.d.ts.map +1 -0
- package/dist/lib/compression.js +3 -0
- package/dist/lib/compression.js.map +1 -0
- package/dist/lib/document-model-interfaces.d.ts +30 -0
- package/dist/lib/document-model-interfaces.d.ts.map +1 -0
- package/dist/lib/document-model-interfaces.js +295 -0
- package/dist/lib/document-model-interfaces.js.map +1 -0
- package/dist/lib/env-config.d.ts +9 -0
- package/dist/lib/env-config.d.ts.map +1 -0
- package/dist/lib/env-config.js +18 -0
- package/dist/lib/env-config.js.map +1 -0
- package/dist/lib/example-apps.d.ts +43 -0
- package/dist/lib/example-apps.d.ts.map +1 -0
- package/dist/lib/example-apps.js +145 -0
- package/dist/lib/example-apps.js.map +1 -0
- package/dist/lib/example-games.d.ts +5 -0
- package/dist/lib/example-games.d.ts.map +1 -0
- package/dist/lib/example-games.js +13 -0
- package/dist/lib/example-games.js.map +1 -0
- package/dist/lib/example-recipes.d.ts +33 -0
- package/dist/lib/example-recipes.d.ts.map +1 -0
- package/dist/lib/example-recipes.js +213 -0
- package/dist/lib/example-recipes.js.map +1 -0
- package/dist/lib/example-storyboards.d.ts +40 -0
- package/dist/lib/example-storyboards.d.ts.map +1 -0
- package/dist/lib/example-storyboards.js +131 -0
- package/dist/lib/example-storyboards.js.map +1 -0
- package/dist/lib/example-thumbnail.d.ts +21 -0
- package/dist/lib/example-thumbnail.d.ts.map +1 -0
- package/dist/lib/example-thumbnail.js +50 -0
- package/dist/lib/example-thumbnail.js.map +1 -0
- package/dist/lib/example-timelines.d.ts +9 -0
- package/dist/lib/example-timelines.d.ts.map +1 -0
- package/dist/lib/example-timelines.js +25 -0
- package/dist/lib/example-timelines.js.map +1 -0
- package/dist/lib/extension-dist.d.ts +24 -0
- package/dist/lib/extension-dist.d.ts.map +1 -0
- package/dist/lib/extension-dist.js +67 -0
- package/dist/lib/extension-dist.js.map +1 -0
- package/dist/lib/external-asset-lookup.d.ts +30 -0
- package/dist/lib/external-asset-lookup.d.ts.map +1 -0
- package/dist/lib/external-asset-lookup.js +99 -0
- package/dist/lib/external-asset-lookup.js.map +1 -0
- package/dist/lib/external-assets.d.ts +13 -0
- package/dist/lib/external-assets.d.ts.map +1 -0
- package/dist/lib/external-assets.js +46 -0
- package/dist/lib/external-assets.js.map +1 -0
- package/dist/lib/fly-replay.d.ts +34 -0
- package/dist/lib/fly-replay.d.ts.map +1 -0
- package/dist/lib/fly-replay.js +111 -0
- package/dist/lib/fly-replay.js.map +1 -0
- package/dist/lib/http-rate-limit.d.ts +32 -0
- package/dist/lib/http-rate-limit.d.ts.map +1 -0
- package/dist/lib/http-rate-limit.js +47 -0
- package/dist/lib/http-rate-limit.js.map +1 -0
- package/dist/lib/instance-id.d.ts +25 -0
- package/dist/lib/instance-id.d.ts.map +1 -0
- package/dist/lib/instance-id.js +44 -0
- package/dist/lib/instance-id.js.map +1 -0
- package/dist/lib/link-codes.d.ts +82 -0
- package/dist/lib/link-codes.d.ts.map +1 -0
- package/dist/lib/link-codes.js +100 -0
- package/dist/lib/link-codes.js.map +1 -0
- package/dist/lib/local-asset-upload.d.ts +5 -0
- package/dist/lib/local-asset-upload.d.ts.map +1 -0
- package/dist/lib/local-asset-upload.js +69 -0
- package/dist/lib/local-asset-upload.js.map +1 -0
- package/dist/lib/local-file-access.d.ts +31 -0
- package/dist/lib/local-file-access.d.ts.map +1 -0
- package/dist/lib/local-file-access.js +169 -0
- package/dist/lib/local-file-access.js.map +1 -0
- package/dist/lib/localhost-trust.d.ts +59 -0
- package/dist/lib/localhost-trust.d.ts.map +1 -0
- package/dist/lib/localhost-trust.js +139 -0
- package/dist/lib/localhost-trust.js.map +1 -0
- package/dist/lib/mcp-mount.d.ts +25 -0
- package/dist/lib/mcp-mount.d.ts.map +1 -0
- package/dist/lib/mcp-mount.js +32 -0
- package/dist/lib/mcp-mount.js.map +1 -0
- package/dist/lib/media-size.d.ts +21 -0
- package/dist/lib/media-size.d.ts.map +1 -0
- package/dist/lib/media-size.js +48 -0
- package/dist/lib/media-size.js.map +1 -0
- package/dist/lib/media.d.ts +38 -0
- package/dist/lib/media.d.ts.map +1 -0
- package/dist/lib/media.js +146 -0
- package/dist/lib/media.js.map +1 -0
- package/dist/lib/package-asset-export.d.ts +83 -0
- package/dist/lib/package-asset-export.d.ts.map +1 -0
- package/dist/lib/package-asset-export.js +212 -0
- package/dist/lib/package-asset-export.js.map +1 -0
- package/dist/lib/package-assets.d.ts +41 -0
- package/dist/lib/package-assets.d.ts.map +1 -0
- package/dist/lib/package-assets.js +155 -0
- package/dist/lib/package-assets.js.map +1 -0
- package/dist/lib/project-delete.d.ts +11 -0
- package/dist/lib/project-delete.d.ts.map +1 -0
- package/dist/lib/project-delete.js +67 -0
- package/dist/lib/project-delete.js.map +1 -0
- package/dist/lib/project-document-copy.d.ts +31 -0
- package/dist/lib/project-document-copy.d.ts.map +1 -0
- package/dist/lib/project-document-copy.js +473 -0
- package/dist/lib/project-document-copy.js.map +1 -0
- package/dist/lib/public-app-assets.d.ts +8 -0
- package/dist/lib/public-app-assets.d.ts.map +1 -0
- package/dist/lib/public-app-assets.js +77 -0
- package/dist/lib/public-app-assets.js.map +1 -0
- package/dist/lib/public-routes.d.ts +95 -0
- package/dist/lib/public-routes.d.ts.map +1 -0
- package/dist/lib/public-routes.js +154 -0
- package/dist/lib/public-routes.js.map +1 -0
- package/dist/lib/runtime-detection.d.ts +17 -0
- package/dist/lib/runtime-detection.d.ts.map +1 -0
- package/dist/lib/runtime-detection.js +90 -0
- package/dist/lib/runtime-detection.js.map +1 -0
- package/dist/lib/storage-access.d.ts +21 -0
- package/dist/lib/storage-access.d.ts.map +1 -0
- package/dist/lib/storage-access.js +74 -0
- package/dist/lib/storage-access.js.map +1 -0
- package/dist/lib/storage.d.ts +9 -0
- package/dist/lib/storage.d.ts.map +1 -0
- package/dist/lib/storage.js +28 -0
- package/dist/lib/storage.js.map +1 -0
- package/dist/lib/storyboard-export.d.ts +64 -0
- package/dist/lib/storyboard-export.d.ts.map +1 -0
- package/dist/lib/storyboard-export.js +183 -0
- package/dist/lib/storyboard-export.js.map +1 -0
- package/dist/lib/style-presets.d.ts +34 -0
- package/dist/lib/style-presets.d.ts.map +1 -0
- package/dist/lib/style-presets.js +62 -0
- package/dist/lib/style-presets.js.map +1 -0
- package/dist/lib/temp-url-resolver.d.ts +35 -0
- package/dist/lib/temp-url-resolver.d.ts.map +1 -0
- package/dist/lib/temp-url-resolver.js +88 -0
- package/dist/lib/temp-url-resolver.js.map +1 -0
- package/dist/lib/thumbnail.d.ts +74 -0
- package/dist/lib/thumbnail.d.ts.map +1 -0
- package/dist/lib/thumbnail.js +302 -0
- package/dist/lib/thumbnail.js.map +1 -0
- package/dist/lib/timeline-bundle.d.ts +1689 -0
- package/dist/lib/timeline-bundle.d.ts.map +1 -0
- package/dist/lib/timeline-bundle.js +330 -0
- package/dist/lib/timeline-bundle.js.map +1 -0
- package/dist/lib/video-proxy.d.ts +114 -0
- package/dist/lib/video-proxy.d.ts.map +1 -0
- package/dist/lib/video-proxy.js +545 -0
- package/dist/lib/video-proxy.js.map +1 -0
- package/dist/lib/wire-values.d.ts +31 -0
- package/dist/lib/wire-values.d.ts.map +1 -0
- package/dist/lib/wire-values.js +49 -0
- package/dist/lib/wire-values.js.map +1 -0
- package/dist/lib/workflow-bundle.d.ts +102 -0
- package/dist/lib/workflow-bundle.d.ts.map +1 -0
- package/dist/lib/workflow-bundle.js +306 -0
- package/dist/lib/workflow-bundle.js.map +1 -0
- package/dist/lib/workflow-service.d.ts +82 -0
- package/dist/lib/workflow-service.d.ts.map +1 -0
- package/dist/lib/workflow-service.js +194 -0
- package/dist/lib/workflow-service.js.map +1 -0
- package/dist/lib/workflow-workspace.d.ts +20 -0
- package/dist/lib/workflow-workspace.d.ts.map +1 -0
- package/dist/lib/workflow-workspace.js +65 -0
- package/dist/lib/workflow-workspace.js.map +1 -0
- package/dist/lib/ws-connection-health.d.ts +10 -0
- package/dist/lib/ws-connection-health.d.ts.map +1 -0
- package/dist/lib/ws-connection-health.js +38 -0
- package/dist/lib/ws-connection-health.js.map +1 -0
- package/dist/lib/ws-rate-limit.d.ts +22 -0
- package/dist/lib/ws-rate-limit.d.ts.map +1 -0
- package/dist/lib/ws-rate-limit.js +45 -0
- package/dist/lib/ws-rate-limit.js.map +1 -0
- package/dist/lib/ws-upgrade.d.ts +40 -0
- package/dist/lib/ws-upgrade.d.ts.map +1 -0
- package/dist/lib/ws-upgrade.js +66 -0
- package/dist/lib/ws-upgrade.js.map +1 -0
- package/dist/lib/zip-stream.d.ts +46 -0
- package/dist/lib/zip-stream.d.ts.map +1 -0
- package/dist/lib/zip-stream.js +140 -0
- package/dist/lib/zip-stream.js.map +1 -0
- package/dist/mcp-agent-tools.d.ts +56 -0
- package/dist/mcp-agent-tools.d.ts.map +1 -0
- package/dist/mcp-agent-tools.js +1216 -0
- package/dist/mcp-agent-tools.js.map +1 -0
- package/dist/mcp-server.d.ts +56 -7
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +255 -762
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-tool-deps.d.ts +20 -0
- package/dist/mcp-tool-deps.d.ts.map +1 -0
- package/dist/mcp-tool-deps.js +61 -0
- package/dist/mcp-tool-deps.js.map +1 -0
- package/dist/messagepack.d.ts +7 -0
- package/dist/messagepack.d.ts.map +1 -0
- package/dist/messagepack.js +19 -0
- package/dist/messagepack.js.map +1 -0
- package/dist/model-download-runtime.d.ts +9 -0
- package/dist/model-download-runtime.d.ts.map +1 -0
- package/dist/model-download-runtime.js +77 -0
- package/dist/model-download-runtime.js.map +1 -0
- package/dist/model-execution-availability.d.ts +14 -0
- package/dist/model-execution-availability.d.ts.map +1 -0
- package/dist/model-execution-availability.js +161 -0
- package/dist/model-execution-availability.js.map +1 -0
- package/dist/models-api.d.ts +51 -5
- package/dist/models-api.d.ts.map +1 -1
- package/dist/models-api.js +160 -690
- package/dist/models-api.js.map +1 -1
- package/dist/node-registry-setup.d.ts +84 -0
- package/dist/node-registry-setup.d.ts.map +1 -0
- package/dist/node-registry-setup.js +256 -0
- package/dist/node-registry-setup.js.map +1 -0
- package/dist/oauth/cimd.d.ts +28 -0
- package/dist/oauth/cimd.d.ts.map +1 -0
- package/dist/oauth/cimd.js +177 -0
- package/dist/oauth/cimd.js.map +1 -0
- package/dist/oauth/gate.d.ts +38 -0
- package/dist/oauth/gate.d.ts.map +1 -0
- package/dist/oauth/gate.js +77 -0
- package/dist/oauth/gate.js.map +1 -0
- package/dist/oauth/metadata.d.ts +35 -0
- package/dist/oauth/metadata.d.ts.map +1 -0
- package/dist/oauth/metadata.js +56 -0
- package/dist/oauth/metadata.js.map +1 -0
- package/dist/oauth/pending-store.d.ts +79 -0
- package/dist/oauth/pending-store.d.ts.map +1 -0
- package/dist/oauth/pending-store.js +133 -0
- package/dist/oauth/pending-store.js.map +1 -0
- package/dist/oauth/pkce.d.ts +16 -0
- package/dist/oauth/pkce.d.ts.map +1 -0
- package/dist/oauth/pkce.js +29 -0
- package/dist/oauth/pkce.js.map +1 -0
- package/dist/oauth/validate.d.ts +25 -0
- package/dist/oauth/validate.d.ts.map +1 -0
- package/dist/oauth/validate.js +62 -0
- package/dist/oauth/validate.js.map +1 -0
- package/dist/oauth/www-authenticate.d.ts +9 -0
- package/dist/oauth/www-authenticate.d.ts.map +1 -0
- package/dist/oauth/www-authenticate.js +33 -0
- package/dist/oauth/www-authenticate.js.map +1 -0
- package/dist/oauth-api.d.ts +19 -0
- package/dist/oauth-api.d.ts.map +1 -1
- package/dist/oauth-api.js +531 -12
- package/dist/oauth-api.js.map +1 -1
- package/dist/openai-api.d.ts.map +1 -1
- package/dist/openai-api.js +4 -9
- package/dist/openai-api.js.map +1 -1
- package/dist/pack-snapshot.d.ts +24 -0
- package/dist/pack-snapshot.d.ts.map +1 -0
- package/dist/pack-snapshot.js +35 -0
- package/dist/pack-snapshot.js.map +1 -0
- package/dist/plugins/websocket.d.ts +21 -4
- package/dist/plugins/websocket.d.ts.map +1 -1
- package/dist/plugins/websocket.js +136 -290
- package/dist/plugins/websocket.js.map +1 -1
- package/dist/resolve-media-urls.d.ts +17 -3
- package/dist/resolve-media-urls.d.ts.map +1 -1
- package/dist/resolve-media-urls.js +117 -31
- package/dist/resolve-media-urls.js.map +1 -1
- package/dist/resource-events.d.ts +28 -0
- package/dist/resource-events.d.ts.map +1 -0
- package/dist/resource-events.js +20 -0
- package/dist/resource-events.js.map +1 -0
- package/dist/routes/account.d.ts +100 -0
- package/dist/routes/account.d.ts.map +1 -0
- package/dist/routes/account.js +197 -0
- package/dist/routes/account.js.map +1 -0
- package/dist/routes/applications.d.ts +36 -0
- package/dist/routes/applications.d.ts.map +1 -0
- package/dist/routes/applications.js +183 -0
- package/dist/routes/applications.js.map +1 -0
- package/dist/routes/assets.d.ts +3 -3
- package/dist/routes/assets.d.ts.map +1 -1
- package/dist/routes/assets.js +78 -44
- package/dist/routes/assets.js.map +1 -1
- package/dist/routes/atlascloud-webhook.d.ts +93 -0
- package/dist/routes/atlascloud-webhook.d.ts.map +1 -0
- package/dist/routes/atlascloud-webhook.js +369 -0
- package/dist/routes/atlascloud-webhook.js.map +1 -0
- package/dist/routes/collections.d.ts.map +1 -1
- package/dist/routes/config.d.ts +26 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +64 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/documents.d.ts +27 -0
- package/dist/routes/documents.d.ts.map +1 -0
- package/dist/routes/documents.js +155 -0
- package/dist/routes/documents.js.map +1 -0
- package/dist/routes/fal-credits.d.ts +4 -0
- package/dist/routes/fal-credits.d.ts.map +1 -0
- package/dist/routes/fal-credits.js +101 -0
- package/dist/routes/fal-credits.js.map +1 -0
- package/dist/routes/fal-pricing-estimate.d.ts +4 -0
- package/dist/routes/fal-pricing-estimate.d.ts.map +1 -0
- package/dist/routes/fal-pricing-estimate.js +114 -0
- package/dist/routes/fal-pricing-estimate.js.map +1 -0
- package/dist/routes/fal-pricing.d.ts +4 -0
- package/dist/routes/fal-pricing.d.ts.map +1 -0
- package/dist/routes/fal-pricing.js +93 -0
- package/dist/routes/fal-pricing.js.map +1 -0
- package/dist/routes/fal-webhook.d.ts +102 -0
- package/dist/routes/fal-webhook.d.ts.map +1 -0
- package/dist/routes/fal-webhook.js +379 -0
- package/dist/routes/fal-webhook.js.map +1 -0
- package/dist/routes/files.d.ts.map +1 -1
- package/dist/routes/files.js +4 -3
- package/dist/routes/files.js.map +1 -1
- package/dist/routes/health.d.ts +1 -0
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +41 -7
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/integrations.d.ts +39 -0
- package/dist/routes/integrations.d.ts.map +1 -0
- package/dist/routes/integrations.js +211 -0
- package/dist/routes/integrations.js.map +1 -0
- package/dist/routes/js-scripts.d.ts +26 -0
- package/dist/routes/js-scripts.d.ts.map +1 -0
- package/dist/routes/js-scripts.js +116 -0
- package/dist/routes/js-scripts.js.map +1 -0
- package/dist/routes/kie-credits.d.ts +4 -0
- package/dist/routes/kie-credits.d.ts.map +1 -0
- package/dist/routes/kie-credits.js +93 -0
- package/dist/routes/kie-credits.js.map +1 -0
- package/dist/routes/kie-pricing.d.ts +4 -0
- package/dist/routes/kie-pricing.d.ts.map +1 -0
- package/dist/routes/kie-pricing.js +45 -0
- package/dist/routes/kie-pricing.js.map +1 -0
- package/dist/routes/kie-webhook.d.ts +4 -0
- package/dist/routes/kie-webhook.d.ts.map +1 -0
- package/dist/routes/kie-webhook.js +70 -0
- package/dist/routes/kie-webhook.js.map +1 -0
- package/dist/routes/nodes.d.ts.map +1 -1
- package/dist/routes/nodes.js +6 -59
- package/dist/routes/nodes.js.map +1 -1
- package/dist/routes/oauth-as.d.ts +30 -0
- package/dist/routes/oauth-as.d.ts.map +1 -0
- package/dist/routes/oauth-as.js +412 -0
- package/dist/routes/oauth-as.js.map +1 -0
- package/dist/routes/oauth.d.ts.map +1 -1
- package/dist/routes/openai.d.ts.map +1 -1
- package/dist/routes/public-apps.d.ts +27 -0
- package/dist/routes/public-apps.d.ts.map +1 -0
- package/dist/routes/public-apps.js +99 -0
- package/dist/routes/public-apps.js.map +1 -0
- package/dist/routes/sandbox-modules.d.ts +17 -0
- package/dist/routes/sandbox-modules.d.ts.map +1 -0
- package/dist/routes/sandbox-modules.js +85 -0
- package/dist/routes/sandbox-modules.js.map +1 -0
- package/dist/routes/sdk-v1.d.ts +24 -0
- package/dist/routes/sdk-v1.d.ts.map +1 -0
- package/dist/routes/sdk-v1.js +320 -0
- package/dist/routes/sdk-v1.js.map +1 -0
- package/dist/routes/storage.d.ts.map +1 -1
- package/dist/routes/storyboards.d.ts +16 -0
- package/dist/routes/storyboards.d.ts.map +1 -0
- package/dist/routes/storyboards.js +97 -0
- package/dist/routes/storyboards.js.map +1 -0
- package/dist/routes/timeline-animations.d.ts +23 -0
- package/dist/routes/timeline-animations.d.ts.map +1 -0
- package/dist/routes/timeline-animations.js +99 -0
- package/dist/routes/timeline-animations.js.map +1 -0
- package/dist/routes/timeline-audio-bake.d.ts +51 -0
- package/dist/routes/timeline-audio-bake.d.ts.map +1 -0
- package/dist/routes/timeline-audio-bake.js +110 -0
- package/dist/routes/timeline-audio-bake.js.map +1 -0
- package/dist/routes/timeline-fonts.d.ts +29 -0
- package/dist/routes/timeline-fonts.d.ts.map +1 -0
- package/dist/routes/timeline-fonts.js +64 -0
- package/dist/routes/timeline-fonts.js.map +1 -0
- package/dist/routes/timeline-isolate-subject.d.ts +55 -0
- package/dist/routes/timeline-isolate-subject.d.ts.map +1 -0
- package/dist/routes/timeline-isolate-subject.js +128 -0
- package/dist/routes/timeline-isolate-subject.js.map +1 -0
- package/dist/routes/timeline-track-object.d.ts +39 -0
- package/dist/routes/timeline-track-object.d.ts.map +1 -0
- package/dist/routes/timeline-track-object.js +97 -0
- package/dist/routes/timeline-track-object.js.map +1 -0
- package/dist/routes/timelines.d.ts +18 -0
- package/dist/routes/timelines.d.ts.map +1 -0
- package/dist/routes/timelines.js +191 -0
- package/dist/routes/timelines.js.map +1 -0
- package/dist/routes/workflows.d.ts +6 -9
- package/dist/routes/workflows.d.ts.map +1 -1
- package/dist/routes/workflows.js +100 -11
- package/dist/routes/workflows.js.map +1 -1
- package/dist/routes/workspace.d.ts.map +1 -1
- package/dist/run-supervisor.d.ts +30 -0
- package/dist/run-supervisor.d.ts.map +1 -0
- package/dist/run-supervisor.js +86 -0
- package/dist/run-supervisor.js.map +1 -0
- package/dist/sandbox-catalog.d.ts +28 -0
- package/dist/sandbox-catalog.d.ts.map +1 -0
- package/dist/sandbox-catalog.js +74 -0
- package/dist/sandbox-catalog.js.map +1 -0
- package/dist/screenshot-projects.d.ts +27 -0
- package/dist/screenshot-projects.d.ts.map +1 -0
- package/dist/screenshot-projects.js +880 -0
- package/dist/screenshot-projects.js.map +1 -0
- package/dist/screenshot-server.js +947 -43
- package/dist/screenshot-server.js.map +1 -1
- package/dist/sdk/sdk-cached-model-inventory.d.ts +21 -0
- package/dist/sdk/sdk-cached-model-inventory.d.ts.map +1 -0
- package/dist/sdk/sdk-cached-model-inventory.js +51 -0
- package/dist/sdk/sdk-cached-model-inventory.js.map +1 -0
- package/dist/sdk/sdk-capabilities-service.d.ts +32 -0
- package/dist/sdk/sdk-capabilities-service.d.ts.map +1 -0
- package/dist/sdk/sdk-capabilities-service.js +47 -0
- package/dist/sdk/sdk-capabilities-service.js.map +1 -0
- package/dist/sdk/sdk-execution-readiness-probe.d.ts +19 -0
- package/dist/sdk/sdk-execution-readiness-probe.d.ts.map +1 -0
- package/dist/sdk/sdk-execution-readiness-probe.js +90 -0
- package/dist/sdk/sdk-execution-readiness-probe.js.map +1 -0
- package/dist/sdk/sdk-execution-target-readiness.d.ts +15 -0
- package/dist/sdk/sdk-execution-target-readiness.d.ts.map +1 -0
- package/dist/sdk/sdk-execution-target-readiness.js +50 -0
- package/dist/sdk/sdk-execution-target-readiness.js.map +1 -0
- package/dist/sdk/sdk-feature-flags.d.ts +18 -0
- package/dist/sdk/sdk-feature-flags.d.ts.map +1 -0
- package/dist/sdk/sdk-feature-flags.js +30 -0
- package/dist/sdk/sdk-feature-flags.js.map +1 -0
- package/dist/sdk/sdk-huggingface-download-state.d.ts +15 -0
- package/dist/sdk/sdk-huggingface-download-state.d.ts.map +1 -0
- package/dist/sdk/sdk-huggingface-download-state.js +25 -0
- package/dist/sdk/sdk-huggingface-download-state.js.map +1 -0
- package/dist/sdk/sdk-live-runner-registry.d.ts +21 -0
- package/dist/sdk/sdk-live-runner-registry.d.ts.map +1 -0
- package/dist/sdk/sdk-live-runner-registry.js +26 -0
- package/dist/sdk/sdk-live-runner-registry.js.map +1 -0
- package/dist/sdk/sdk-model-catalog-service.d.ts +20 -0
- package/dist/sdk/sdk-model-catalog-service.d.ts.map +1 -0
- package/dist/sdk/sdk-model-catalog-service.js +219 -0
- package/dist/sdk/sdk-model-catalog-service.js.map +1 -0
- package/dist/sdk/sdk-model-download-service.d.ts +39 -0
- package/dist/sdk/sdk-model-download-service.d.ts.map +1 -0
- package/dist/sdk/sdk-model-download-service.js +274 -0
- package/dist/sdk/sdk-model-download-service.js.map +1 -0
- package/dist/sdk/sdk-model-requirement-probe.d.ts +30 -0
- package/dist/sdk/sdk-model-requirement-probe.d.ts.map +1 -0
- package/dist/sdk/sdk-model-requirement-probe.js +120 -0
- package/dist/sdk/sdk-model-requirement-probe.js.map +1 -0
- package/dist/sdk/sdk-node-package-requirement-probe.d.ts +20 -0
- package/dist/sdk/sdk-node-package-requirement-probe.d.ts.map +1 -0
- package/dist/sdk/sdk-node-package-requirement-probe.js +44 -0
- package/dist/sdk/sdk-node-package-requirement-probe.js.map +1 -0
- package/dist/sdk/sdk-node-type-inventory-service.d.ts +11 -0
- package/dist/sdk/sdk-node-type-inventory-service.d.ts.map +1 -0
- package/dist/sdk/sdk-node-type-inventory-service.js +36 -0
- package/dist/sdk/sdk-node-type-inventory-service.js.map +1 -0
- package/dist/sdk/sdk-preflight-orchestrator.d.ts +54 -0
- package/dist/sdk/sdk-preflight-orchestrator.d.ts.map +1 -0
- package/dist/sdk/sdk-preflight-orchestrator.js +63 -0
- package/dist/sdk/sdk-preflight-orchestrator.js.map +1 -0
- package/dist/sdk/sdk-preflight-requirement-resolver.d.ts +35 -0
- package/dist/sdk/sdk-preflight-requirement-resolver.d.ts.map +1 -0
- package/dist/sdk/sdk-preflight-requirement-resolver.js +67 -0
- package/dist/sdk/sdk-preflight-requirement-resolver.js.map +1 -0
- package/dist/sdk/sdk-preflight-service.d.ts +61 -0
- package/dist/sdk/sdk-preflight-service.d.ts.map +1 -0
- package/dist/sdk/sdk-preflight-service.js +104 -0
- package/dist/sdk/sdk-preflight-service.js.map +1 -0
- package/dist/sdk/sdk-preflight-workflow-source.d.ts +18 -0
- package/dist/sdk/sdk-preflight-workflow-source.d.ts.map +1 -0
- package/dist/sdk/sdk-preflight-workflow-source.js +42 -0
- package/dist/sdk/sdk-preflight-workflow-source.js.map +1 -0
- package/dist/sdk/sdk-route-policy.d.ts +3 -0
- package/dist/sdk/sdk-route-policy.d.ts.map +1 -0
- package/dist/sdk/sdk-route-policy.js +18 -0
- package/dist/sdk/sdk-route-policy.js.map +1 -0
- package/dist/sdk/sdk-runtime-capabilities-service.d.ts +60 -0
- package/dist/sdk/sdk-runtime-capabilities-service.d.ts.map +1 -0
- package/dist/sdk/sdk-runtime-capabilities-service.js +30 -0
- package/dist/sdk/sdk-runtime-capabilities-service.js.map +1 -0
- package/dist/sdk/sdk-runtime-requirement-probe.d.ts +13 -0
- package/dist/sdk/sdk-runtime-requirement-probe.d.ts.map +1 -0
- package/dist/sdk/sdk-runtime-requirement-probe.js +55 -0
- package/dist/sdk/sdk-runtime-requirement-probe.js.map +1 -0
- package/dist/sdk/sdk-static-preflight-service.d.ts +66 -0
- package/dist/sdk/sdk-static-preflight-service.d.ts.map +1 -0
- package/dist/sdk/sdk-static-preflight-service.js +492 -0
- package/dist/sdk/sdk-static-preflight-service.js.map +1 -0
- package/dist/sdk/sdk-temporary-asset-service.d.ts +18 -0
- package/dist/sdk/sdk-temporary-asset-service.d.ts.map +1 -0
- package/dist/sdk/sdk-temporary-asset-service.js +33 -0
- package/dist/sdk/sdk-temporary-asset-service.js.map +1 -0
- package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts +9 -0
- package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts.map +1 -0
- package/dist/sdk/sdk-temporary-asset-upload-http-handler.js +65 -0
- package/dist/sdk/sdk-temporary-asset-upload-http-handler.js.map +1 -0
- package/dist/sdk/sdk-v1-handler-map.d.ts +44 -0
- package/dist/sdk/sdk-v1-handler-map.d.ts.map +1 -0
- package/dist/sdk/sdk-v1-handler-map.js +37 -0
- package/dist/sdk/sdk-v1-handler-map.js.map +1 -0
- package/dist/sdk/sdk-v1-service-error.d.ts +21 -0
- package/dist/sdk/sdk-v1-service-error.d.ts.map +1 -0
- package/dist/sdk/sdk-v1-service-error.js +62 -0
- package/dist/sdk/sdk-v1-service-error.js.map +1 -0
- package/dist/sdk/sdk-v1-service.d.ts +74 -0
- package/dist/sdk/sdk-v1-service.d.ts.map +1 -0
- package/dist/sdk/sdk-v1-service.js +219 -0
- package/dist/sdk/sdk-v1-service.js.map +1 -0
- package/dist/sdk/sdk-worker-readiness-adapter.d.ts +22 -0
- package/dist/sdk/sdk-worker-readiness-adapter.d.ts.map +1 -0
- package/dist/sdk/sdk-worker-readiness-adapter.js +29 -0
- package/dist/sdk/sdk-worker-readiness-adapter.js.map +1 -0
- package/dist/server.js +1019 -201
- package/dist/server.js.map +1 -1
- package/dist/session/asset-autosave.d.ts +80 -0
- package/dist/session/asset-autosave.d.ts.map +1 -0
- package/dist/session/asset-autosave.js +456 -0
- package/dist/session/asset-autosave.js.map +1 -0
- package/dist/session/chat-compaction.d.ts +107 -0
- package/dist/session/chat-compaction.d.ts.map +1 -0
- package/dist/session/chat-compaction.js +191 -0
- package/dist/session/chat-compaction.js.map +1 -0
- package/dist/session/chat-history.d.ts +75 -0
- package/dist/session/chat-history.d.ts.map +1 -0
- package/dist/session/chat-history.js +194 -0
- package/dist/session/chat-history.js.map +1 -0
- package/dist/session/chat-prompt.d.ts +45 -0
- package/dist/session/chat-prompt.d.ts.map +1 -0
- package/dist/session/chat-prompt.js +480 -0
- package/dist/session/chat-prompt.js.map +1 -0
- package/dist/session/chat-turn.d.ts +336 -0
- package/dist/session/chat-turn.d.ts.map +1 -0
- package/dist/session/chat-turn.js +3516 -0
- package/dist/session/chat-turn.js.map +1 -0
- package/dist/session/client-session.d.ts +59 -0
- package/dist/session/client-session.d.ts.map +1 -0
- package/dist/session/client-session.js +2 -0
- package/dist/session/client-session.js.map +1 -0
- package/dist/session/commands.d.ts +133 -0
- package/dist/session/commands.d.ts.map +1 -0
- package/dist/session/commands.js +778 -0
- package/dist/session/commands.js.map +1 -0
- package/dist/session/inference.d.ts +213 -0
- package/dist/session/inference.d.ts.map +1 -0
- package/dist/session/inference.js +1072 -0
- package/dist/session/inference.js.map +1 -0
- package/dist/session/job-execution.d.ts +477 -0
- package/dist/session/job-execution.d.ts.map +1 -0
- package/dist/session/job-execution.js +2089 -0
- package/dist/session/job-execution.js.map +1 -0
- package/dist/session/media-generation.d.ts +94 -0
- package/dist/session/media-generation.d.ts.map +1 -0
- package/dist/session/media-generation.js +234 -0
- package/dist/session/media-generation.js.map +1 -0
- package/dist/session/model-interfaces.d.ts +27 -0
- package/dist/session/model-interfaces.d.ts.map +1 -0
- package/dist/session/model-interfaces.js +132 -0
- package/dist/session/model-interfaces.js.map +1 -0
- package/dist/session/sanitize.d.ts +7 -0
- package/dist/session/sanitize.d.ts.map +1 -0
- package/dist/session/sanitize.js +64 -0
- package/dist/session/sanitize.js.map +1 -0
- package/dist/settings-registry.d.ts +6 -15
- package/dist/settings-registry.d.ts.map +1 -1
- package/dist/settings-registry.js +6 -103
- package/dist/settings-registry.js.map +1 -1
- package/dist/storage-api.d.ts +20 -0
- package/dist/storage-api.d.ts.map +1 -1
- package/dist/storage-api.js +260 -77
- package/dist/storage-api.js.map +1 -1
- package/dist/storage-retention.d.ts +9 -0
- package/dist/storage-retention.d.ts.map +1 -0
- package/dist/storage-retention.js +74 -0
- package/dist/storage-retention.js.map +1 -0
- package/dist/system-stats.d.ts +52 -0
- package/dist/system-stats.d.ts.map +1 -0
- package/dist/system-stats.js +134 -0
- package/dist/system-stats.js.map +1 -0
- package/dist/test-ui-server.d.ts +46 -0
- package/dist/test-ui-server.d.ts.map +1 -1
- package/dist/test-ui-server.js +188 -41
- package/dist/test-ui-server.js.map +1 -1
- package/dist/triggers/boot.d.ts +73 -0
- package/dist/triggers/boot.d.ts.map +1 -0
- package/dist/triggers/boot.js +149 -0
- package/dist/triggers/boot.js.map +1 -0
- package/dist/triggers/dispatcher.d.ts +234 -0
- package/dist/triggers/dispatcher.d.ts.map +1 -0
- package/dist/triggers/dispatcher.js +525 -0
- package/dist/triggers/dispatcher.js.map +1 -0
- package/dist/triggers/file-watch.d.ts +90 -0
- package/dist/triggers/file-watch.d.ts.map +1 -0
- package/dist/triggers/file-watch.js +405 -0
- package/dist/triggers/file-watch.js.map +1 -0
- package/dist/triggers/registration-sync.d.ts +34 -0
- package/dist/triggers/registration-sync.d.ts.map +1 -0
- package/dist/triggers/registration-sync.js +162 -0
- package/dist/triggers/registration-sync.js.map +1 -0
- package/dist/triggers/schedule-timing.d.ts +52 -0
- package/dist/triggers/schedule-timing.d.ts.map +1 -0
- package/dist/triggers/schedule-timing.js +90 -0
- package/dist/triggers/schedule-timing.js.map +1 -0
- package/dist/triggers/scheduler.d.ts +55 -0
- package/dist/triggers/scheduler.d.ts.map +1 -0
- package/dist/triggers/scheduler.js +122 -0
- package/dist/triggers/scheduler.js.map +1 -0
- package/dist/triggers/settle.d.ts +66 -0
- package/dist/triggers/settle.d.ts.map +1 -0
- package/dist/triggers/settle.js +99 -0
- package/dist/triggers/settle.js.map +1 -0
- package/dist/triggers/stores.d.ts +38 -0
- package/dist/triggers/stores.d.ts.map +1 -0
- package/dist/triggers/stores.js +168 -0
- package/dist/triggers/stores.js.map +1 -0
- package/dist/triggers/webhook-route.d.ts +49 -0
- package/dist/triggers/webhook-route.d.ts.map +1 -0
- package/dist/triggers/webhook-route.js +148 -0
- package/dist/triggers/webhook-route.js.map +1 -0
- package/dist/trpc/context.d.ts +52 -5
- package/dist/trpc/context.d.ts.map +1 -1
- package/dist/trpc/context.js +4 -1
- package/dist/trpc/context.js.map +1 -1
- package/dist/trpc/error-formatter.d.ts.map +1 -1
- package/dist/trpc/error-formatter.js +23 -2
- package/dist/trpc/error-formatter.js.map +1 -1
- package/dist/trpc/error-logging.d.ts +14 -0
- package/dist/trpc/error-logging.d.ts.map +1 -0
- package/dist/trpc/error-logging.js +27 -0
- package/dist/trpc/error-logging.js.map +1 -0
- package/dist/trpc/index.d.ts +2 -2
- package/dist/trpc/index.d.ts.map +1 -1
- package/dist/trpc/index.js +0 -2
- package/dist/trpc/index.js.map +1 -1
- package/dist/trpc/middleware.d.ts +6 -3
- package/dist/trpc/middleware.d.ts.map +1 -1
- package/dist/trpc/router.d.ts +29791 -1303
- package/dist/trpc/router.d.ts.map +1 -1
- package/dist/trpc/router.js +46 -3
- package/dist/trpc/router.js.map +1 -1
- package/dist/trpc/routers/agent-access.d.ts +149 -0
- package/dist/trpc/routers/agent-access.d.ts.map +1 -0
- package/dist/trpc/routers/agent-access.js +224 -0
- package/dist/trpc/routers/agent-access.js.map +1 -0
- package/dist/trpc/routers/applications.d.ts +1117 -0
- package/dist/trpc/routers/applications.d.ts.map +1 -0
- package/dist/trpc/routers/applications.js +218 -0
- package/dist/trpc/routers/applications.js.map +1 -0
- package/dist/trpc/routers/assets.d.ts +184 -42
- package/dist/trpc/routers/assets.d.ts.map +1 -1
- package/dist/trpc/routers/assets.js +499 -105
- package/dist/trpc/routers/assets.js.map +1 -1
- package/dist/trpc/routers/code-gen.d.ts +99 -0
- package/dist/trpc/routers/code-gen.d.ts.map +1 -0
- package/dist/trpc/routers/code-gen.js +164 -0
- package/dist/trpc/routers/code-gen.js.map +1 -0
- package/dist/trpc/routers/collections.d.ts +1 -26
- package/dist/trpc/routers/collections.d.ts.map +1 -1
- package/dist/trpc/routers/collections.js +145 -78
- package/dist/trpc/routers/collections.js.map +1 -1
- package/dist/trpc/routers/costs.d.ts +40 -96
- package/dist/trpc/routers/costs.d.ts.map +1 -1
- package/dist/trpc/routers/costs.js +14 -89
- package/dist/trpc/routers/costs.js.map +1 -1
- package/dist/trpc/routers/credits.d.ts +110 -0
- package/dist/trpc/routers/credits.d.ts.map +1 -0
- package/dist/trpc/routers/credits.js +69 -0
- package/dist/trpc/routers/credits.js.map +1 -0
- package/dist/trpc/routers/custom-providers.d.ts +88 -0
- package/dist/trpc/routers/custom-providers.d.ts.map +1 -0
- package/dist/trpc/routers/custom-providers.js +140 -0
- package/dist/trpc/routers/custom-providers.js.map +1 -0
- package/dist/trpc/routers/documents.d.ts +61 -0
- package/dist/trpc/routers/documents.d.ts.map +1 -0
- package/dist/trpc/routers/documents.js +23 -0
- package/dist/trpc/routers/documents.js.map +1 -0
- package/dist/trpc/routers/extension.d.ts +24 -0
- package/dist/trpc/routers/extension.d.ts.map +1 -0
- package/dist/trpc/routers/extension.js +28 -0
- package/dist/trpc/routers/extension.js.map +1 -0
- package/dist/trpc/routers/external-mcp.d.ts +108 -0
- package/dist/trpc/routers/external-mcp.d.ts.map +1 -0
- package/dist/trpc/routers/external-mcp.js +70 -0
- package/dist/trpc/routers/external-mcp.js.map +1 -0
- package/dist/trpc/routers/files.d.ts +9 -2
- package/dist/trpc/routers/files.d.ts.map +1 -1
- package/dist/trpc/routers/files.js +67 -37
- package/dist/trpc/routers/files.js.map +1 -1
- package/dist/trpc/routers/fonts.d.ts +30 -0
- package/dist/trpc/routers/fonts.d.ts.map +1 -0
- package/dist/trpc/routers/fonts.js +112 -0
- package/dist/trpc/routers/fonts.js.map +1 -0
- package/dist/trpc/routers/games.d.ts +7610 -0
- package/dist/trpc/routers/games.d.ts.map +1 -0
- package/dist/trpc/routers/games.js +456 -0
- package/dist/trpc/routers/games.js.map +1 -0
- package/dist/trpc/routers/integrations.d.ts +86 -0
- package/dist/trpc/routers/integrations.d.ts.map +1 -0
- package/dist/trpc/routers/integrations.js +129 -0
- package/dist/trpc/routers/integrations.js.map +1 -0
- package/dist/trpc/routers/jobs.d.ts +88 -27
- package/dist/trpc/routers/jobs.d.ts.map +1 -1
- package/dist/trpc/routers/jobs.js +113 -35
- package/dist/trpc/routers/jobs.js.map +1 -1
- package/dist/trpc/routers/js-scripts.d.ts +410 -0
- package/dist/trpc/routers/js-scripts.d.ts.map +1 -0
- package/dist/trpc/routers/js-scripts.js +303 -0
- package/dist/trpc/routers/js-scripts.js.map +1 -0
- package/dist/trpc/routers/mcp-config.d.ts +1 -1
- package/dist/trpc/routers/mcp-config.js +5 -3
- package/dist/trpc/routers/mcp-config.js.map +1 -1
- package/dist/trpc/routers/memories.d.ts +79 -0
- package/dist/trpc/routers/memories.d.ts.map +1 -0
- package/dist/trpc/routers/memories.js +66 -0
- package/dist/trpc/routers/memories.js.map +1 -0
- package/dist/trpc/routers/messages.d.ts +4 -77
- package/dist/trpc/routers/messages.d.ts.map +1 -1
- package/dist/trpc/routers/messages.js +9 -58
- package/dist/trpc/routers/messages.js.map +1 -1
- package/dist/trpc/routers/models.d.ts +1403 -238
- package/dist/trpc/routers/models.d.ts.map +1 -1
- package/dist/trpc/routers/models.js +532 -294
- package/dist/trpc/routers/models.js.map +1 -1
- package/dist/trpc/routers/nodes.d.ts +32 -16
- package/dist/trpc/routers/nodes.d.ts.map +1 -1
- package/dist/trpc/routers/nodes.js +70 -31
- package/dist/trpc/routers/nodes.js.map +1 -1
- package/dist/trpc/routers/packs.d.ts +184 -0
- package/dist/trpc/routers/packs.d.ts.map +1 -0
- package/dist/trpc/routers/packs.js +259 -0
- package/dist/trpc/routers/packs.js.map +1 -0
- package/dist/trpc/routers/projects.d.ts +422 -0
- package/dist/trpc/routers/projects.d.ts.map +1 -0
- package/dist/trpc/routers/projects.js +373 -0
- package/dist/trpc/routers/projects.js.map +1 -0
- package/dist/trpc/routers/resources.d.ts +120 -0
- package/dist/trpc/routers/resources.d.ts.map +1 -0
- package/dist/trpc/routers/resources.js +212 -0
- package/dist/trpc/routers/resources.js.map +1 -0
- package/dist/trpc/routers/scripts.d.ts +1116 -0
- package/dist/trpc/routers/scripts.d.ts.map +1 -0
- package/dist/trpc/routers/scripts.js +131 -0
- package/dist/trpc/routers/scripts.js.map +1 -0
- package/dist/trpc/routers/segmentation.d.ts +62 -0
- package/dist/trpc/routers/segmentation.d.ts.map +1 -0
- package/dist/trpc/routers/segmentation.js +146 -0
- package/dist/trpc/routers/segmentation.js.map +1 -0
- package/dist/trpc/routers/settings.d.ts +177 -10
- package/dist/trpc/routers/settings.d.ts.map +1 -1
- package/dist/trpc/routers/settings.js +123 -33
- package/dist/trpc/routers/settings.js.map +1 -1
- package/dist/trpc/routers/sketch.d.ts +854 -0
- package/dist/trpc/routers/sketch.d.ts.map +1 -0
- package/dist/trpc/routers/sketch.js +617 -0
- package/dist/trpc/routers/sketch.js.map +1 -0
- package/dist/trpc/routers/skills.d.ts +76 -22
- package/dist/trpc/routers/skills.d.ts.map +1 -1
- package/dist/trpc/routers/skills.js +195 -170
- package/dist/trpc/routers/skills.js.map +1 -1
- package/dist/trpc/routers/storage.d.ts +3 -30
- package/dist/trpc/routers/storage.d.ts.map +1 -1
- package/dist/trpc/routers/storage.js +60 -117
- package/dist/trpc/routers/storage.js.map +1 -1
- package/dist/trpc/routers/storyboards.d.ts +5907 -0
- package/dist/trpc/routers/storyboards.d.ts.map +1 -0
- package/dist/trpc/routers/storyboards.js +156 -0
- package/dist/trpc/routers/storyboards.js.map +1 -0
- package/dist/trpc/routers/threads.d.ts +33 -21
- package/dist/trpc/routers/threads.d.ts.map +1 -1
- package/dist/trpc/routers/threads.js +36 -30
- package/dist/trpc/routers/threads.js.map +1 -1
- package/dist/trpc/routers/timeline.d.ts +8516 -0
- package/dist/trpc/routers/timeline.d.ts.map +1 -0
- package/dist/trpc/routers/timeline.js +493 -0
- package/dist/trpc/routers/timeline.js.map +1 -0
- package/dist/trpc/routers/triggers.d.ts +46 -0
- package/dist/trpc/routers/triggers.d.ts.map +1 -0
- package/dist/trpc/routers/triggers.js +117 -0
- package/dist/trpc/routers/triggers.js.map +1 -0
- package/dist/trpc/routers/users.d.ts +1 -14
- package/dist/trpc/routers/users.d.ts.map +1 -1
- package/dist/trpc/routers/users.js +1 -12
- package/dist/trpc/routers/users.js.map +1 -1
- package/dist/trpc/routers/worker.d.ts +242 -0
- package/dist/trpc/routers/worker.d.ts.map +1 -0
- package/dist/trpc/routers/worker.js +220 -0
- package/dist/trpc/routers/worker.js.map +1 -0
- package/dist/trpc/routers/workflows.d.ts +385 -197
- package/dist/trpc/routers/workflows.d.ts.map +1 -1
- package/dist/trpc/routers/workflows.js +326 -345
- package/dist/trpc/routers/workflows.js.map +1 -1
- package/dist/trpc/routers/workspace.d.ts +59 -33
- package/dist/trpc/routers/workspace.d.ts.map +1 -1
- package/dist/trpc/routers/workspace.js +230 -93
- package/dist/trpc/routers/workspace.js.map +1 -1
- package/dist/trpc/sandbox-coverage.d.ts +64 -0
- package/dist/trpc/sandbox-coverage.d.ts.map +1 -0
- package/dist/trpc/sandbox-coverage.js +1049 -0
- package/dist/trpc/sandbox-coverage.js.map +1 -0
- package/dist/websocket-client-session.d.ts +320 -0
- package/dist/websocket-client-session.d.ts.map +1 -0
- package/dist/websocket-client-session.js +1253 -0
- package/dist/websocket-client-session.js.map +1 -0
- package/dist/workflow-interface-service.d.ts +87 -0
- package/dist/workflow-interface-service.d.ts.map +1 -0
- package/dist/workflow-interface-service.js +131 -0
- package/dist/workflow-interface-service.js.map +1 -0
- package/dist/workspace-api.d.ts.map +1 -1
- package/dist/workspace-api.js +33 -23
- package/dist/workspace-api.js.map +1 -1
- package/dist/ws-adapter.d.ts +46 -3
- package/dist/ws-adapter.d.ts.map +1 -1
- package/dist/ws-adapter.js +164 -26
- package/dist/ws-adapter.js.map +1 -1
- package/package.json +81 -35
- package/dist/agent/agent-runtime.d.ts +0 -47
- package/dist/agent/agent-runtime.d.ts.map +0 -1
- package/dist/agent/agent-runtime.js +0 -579
- package/dist/agent/agent-runtime.js.map +0 -1
- package/dist/agent/codex-agent.d.ts +0 -41
- package/dist/agent/codex-agent.d.ts.map +0 -1
- package/dist/agent/codex-agent.js +0 -334
- package/dist/agent/codex-agent.js.map +0 -1
- package/dist/agent/index.d.ts +0 -6
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/index.js +0 -4
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/llm-agent.d.ts +0 -51
- package/dist/agent/llm-agent.d.ts.map +0 -1
- package/dist/agent/llm-agent.js +0 -526
- package/dist/agent/llm-agent.js.map +0 -1
- package/dist/agent/mcp-tool-server.d.ts +0 -33
- package/dist/agent/mcp-tool-server.d.ts.map +0 -1
- package/dist/agent/mcp-tool-server.js +0 -292
- package/dist/agent/mcp-tool-server.js.map +0 -1
- package/dist/agent/opencode-agent.d.ts +0 -32
- package/dist/agent/opencode-agent.d.ts.map +0 -1
- package/dist/agent/opencode-agent.js +0 -332
- package/dist/agent/opencode-agent.js.map +0 -1
- package/dist/agent/pi-agent.d.ts +0 -42
- package/dist/agent/pi-agent.d.ts.map +0 -1
- package/dist/agent/pi-agent.js +0 -429
- package/dist/agent/pi-agent.js.map +0 -1
- package/dist/agent/sdk-provider.d.ts +0 -46
- package/dist/agent/sdk-provider.d.ts.map +0 -1
- package/dist/agent/sdk-provider.js +0 -50
- package/dist/agent/sdk-provider.js.map +0 -1
- package/dist/agent/socket-route.d.ts +0 -11
- package/dist/agent/socket-route.d.ts.map +0 -1
- package/dist/agent/socket-route.js +0 -262
- package/dist/agent/socket-route.js.map +0 -1
- package/dist/agent/transport.d.ts +0 -39
- package/dist/agent/transport.d.ts.map +0 -1
- package/dist/agent/transport.js +0 -17
- package/dist/agent/transport.js.map +0 -1
- package/dist/agent/types.d.ts +0 -11
- package/dist/agent/types.d.ts.map +0 -1
- package/dist/agent/types.js +0 -10
- package/dist/agent/types.js.map +0 -1
- package/dist/routes/jobs.d.ts +0 -16
- package/dist/routes/jobs.d.ts.map +0 -1
- package/dist/routes/jobs.js +0 -25
- package/dist/routes/jobs.js.map +0 -1
- package/dist/trpc/routers/sandboxes.d.ts +0 -64
- package/dist/trpc/routers/sandboxes.d.ts.map +0 -1
- package/dist/trpc/routers/sandboxes.js +0 -327
- package/dist/trpc/routers/sandboxes.js.map +0 -1
- package/dist/unified-websocket-runner.d.ts +0 -280
- package/dist/unified-websocket-runner.d.ts.map +0 -1
- package/dist/unified-websocket-runner.js +0 -3840
- package/dist/unified-websocket-runner.js.map +0 -1
|
@@ -17,18 +17,21 @@
|
|
|
17
17
|
* PORT — TCP port to listen on (default: 7777)
|
|
18
18
|
* HOST — bind address (default: 127.0.0.1)
|
|
19
19
|
*/
|
|
20
|
-
import { initTestDb, getDb, Workflow, Thread, Message, Asset, secrets } from "@nodetool-ai/models";
|
|
20
|
+
import { initTestDb, getDb, Application, Workflow, Thread, Message, Asset, ImageDocument, TimelineSequence, Storyboard, secrets, closeDb } from "@nodetool-ai/models";
|
|
21
21
|
import { initMasterKey, encryptFernet, getMasterKey } from "@nodetool-ai/security";
|
|
22
22
|
import { createTestUiServer } from "./test-ui-server.js";
|
|
23
|
-
import {
|
|
23
|
+
import { seedProjects } from "./screenshot-projects.js";
|
|
24
|
+
import { createFakeExecutorResolver, fakeAllProviders, resolveFakeProvider } from "./fake-runtime.js";
|
|
25
|
+
import { resolve, dirname, join } from "node:path";
|
|
24
26
|
import { fileURLToPath } from "node:url";
|
|
25
|
-
import { existsSync } from "node:fs";
|
|
27
|
+
import { existsSync, mkdtempSync, rmSync } from "node:fs";
|
|
28
|
+
import { tmpdir } from "node:os";
|
|
26
29
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
27
30
|
const USER_ID = "1";
|
|
28
31
|
const PORT = Number(process.env.PORT ?? 7777);
|
|
29
32
|
const HOST = process.env.HOST ?? "127.0.0.1";
|
|
30
33
|
// ── Mock data ─────────────────────────────────────────────────────────────────
|
|
31
|
-
function makeWorkflow(id, name, description, tags, updatedAt, access = "private") {
|
|
34
|
+
function makeWorkflow(id, name, description, tags, updatedAt, access = "private", graph = { nodes: [], edges: [] }, appDoc = null) {
|
|
32
35
|
return {
|
|
33
36
|
id,
|
|
34
37
|
user_id: USER_ID,
|
|
@@ -40,30 +43,237 @@ function makeWorkflow(id, name, description, tags, updatedAt, access = "private"
|
|
|
40
43
|
tags,
|
|
41
44
|
thumbnail: null,
|
|
42
45
|
thumbnail_url: null,
|
|
43
|
-
graph
|
|
46
|
+
graph,
|
|
44
47
|
settings: null,
|
|
45
48
|
package_name: null,
|
|
46
49
|
path: null,
|
|
47
50
|
run_mode: "workflow",
|
|
48
51
|
workspace_id: null,
|
|
49
|
-
html_app: null
|
|
52
|
+
html_app: null,
|
|
53
|
+
app_doc: appDoc
|
|
50
54
|
};
|
|
51
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* A deliberately tiny mini-app fixture for the user-journey suite: a
|
|
58
|
+
* `StringInput → Output` graph plus an app document that binds a text input, a
|
|
59
|
+
* Run button and an Output widget to it.
|
|
60
|
+
*
|
|
61
|
+
* Everything here runs for real on the kernel (input and output nodes are
|
|
62
|
+
* structural, and there is nothing else in the graph), so whatever the test
|
|
63
|
+
* types is exactly what the Output widget must display. That makes the mini-app
|
|
64
|
+
* journey a true end-to-end assertion — params in, run triggered, streamed
|
|
65
|
+
* result folded back into the widget — with no provider, network or fake in the
|
|
66
|
+
* path to soften a regression.
|
|
67
|
+
*/
|
|
68
|
+
const MINI_APP_GRAPH = {
|
|
69
|
+
nodes: [
|
|
70
|
+
{
|
|
71
|
+
id: "prompt_input",
|
|
72
|
+
type: "nodetool.input.StringInput",
|
|
73
|
+
data: {
|
|
74
|
+
name: "prompt",
|
|
75
|
+
value: "hello journey",
|
|
76
|
+
description: "Text echoed back by the app"
|
|
77
|
+
},
|
|
78
|
+
// Kept clear of the editor's left icon rail so the journey suite can
|
|
79
|
+
// click node fields without the rail intercepting pointer events.
|
|
80
|
+
ui_properties: { position: { x: 560, y: 200 }, width: 320 }
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: "result_output",
|
|
84
|
+
type: "nodetool.output.Output",
|
|
85
|
+
data: { name: "result" },
|
|
86
|
+
ui_properties: { position: { x: 1020, y: 200 }, width: 280 }
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
edges: [
|
|
90
|
+
{
|
|
91
|
+
id: "edge-mini-app",
|
|
92
|
+
source: "prompt_input",
|
|
93
|
+
sourceHandle: "output",
|
|
94
|
+
target: "result_output",
|
|
95
|
+
targetHandle: "value"
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
};
|
|
99
|
+
const MINI_APP_DOC = {
|
|
100
|
+
schemaVersion: 3,
|
|
101
|
+
ui: {
|
|
102
|
+
root: { props: { title: "Echo Mini App" } },
|
|
103
|
+
content: [
|
|
104
|
+
{
|
|
105
|
+
type: "Container",
|
|
106
|
+
props: {
|
|
107
|
+
id: "panel-main",
|
|
108
|
+
title: "Echo",
|
|
109
|
+
content: [
|
|
110
|
+
{
|
|
111
|
+
type: "WorkflowInput",
|
|
112
|
+
props: {
|
|
113
|
+
id: "in-prompt",
|
|
114
|
+
binding: "op:main/in:prompt_input",
|
|
115
|
+
events: []
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
type: "Button",
|
|
120
|
+
props: {
|
|
121
|
+
id: "btn-run",
|
|
122
|
+
label: "Run echo",
|
|
123
|
+
variant: "contained",
|
|
124
|
+
color: "primary",
|
|
125
|
+
events: [{ trigger: "click", kind: "run", key: "", value: "" }]
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: "Output",
|
|
130
|
+
props: {
|
|
131
|
+
id: "out-result",
|
|
132
|
+
binding: "op:main/out:result_output",
|
|
133
|
+
placeholder: "Your result appears here"
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
],
|
|
140
|
+
zones: {}
|
|
141
|
+
},
|
|
142
|
+
operations: [
|
|
143
|
+
{
|
|
144
|
+
id: "main",
|
|
145
|
+
name: "Run",
|
|
146
|
+
workflowId: "wf-mini-app",
|
|
147
|
+
inputs: {},
|
|
148
|
+
outputs: {},
|
|
149
|
+
policy: "replace"
|
|
150
|
+
}
|
|
151
|
+
],
|
|
152
|
+
resources: [],
|
|
153
|
+
variables: []
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* The mini app as its own `applications` row.
|
|
157
|
+
*
|
|
158
|
+
* An app used to be a workflow — its document lived on `workflow.app_doc` and
|
|
159
|
+
* ran at `/apps/<workflowId>`. Apps are their own resource now: they are opened
|
|
160
|
+
* as a workspace tab and their operations name the workflows they bind. The
|
|
161
|
+
* journey suite drives that surface, so the fixture is an application row whose
|
|
162
|
+
* one operation points at `wf-mini-app`.
|
|
163
|
+
*/
|
|
164
|
+
const MOCK_APPLICATIONS = [
|
|
165
|
+
{
|
|
166
|
+
id: "app-mini-app",
|
|
167
|
+
user_id: USER_ID,
|
|
168
|
+
project_id: "personal:1",
|
|
169
|
+
name: "Echo Mini App",
|
|
170
|
+
description: "Deterministic mini app used by the user-journey suite: echoes its input to an Output widget",
|
|
171
|
+
document: JSON.stringify(MINI_APP_DOC),
|
|
172
|
+
created_at: "2024-09-01T09:00:00Z",
|
|
173
|
+
updated_at: "2024-12-14T10:00:00Z"
|
|
174
|
+
}
|
|
175
|
+
];
|
|
176
|
+
// Use real node types registered by @nodetool-ai/base-nodes so the editor
|
|
177
|
+
// renders nodes instead of crashing on unknown types.
|
|
178
|
+
const STORY_GRAPH = {
|
|
179
|
+
nodes: [
|
|
180
|
+
{
|
|
181
|
+
id: "input-topic",
|
|
182
|
+
type: "nodetool.input.StringInput",
|
|
183
|
+
data: {
|
|
184
|
+
name: "topic",
|
|
185
|
+
label: "Topic",
|
|
186
|
+
value: "Two robots discover they can dream"
|
|
187
|
+
},
|
|
188
|
+
ui_properties: { position: { x: 0, y: 0 }, width: 320 }
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
id: "input-style",
|
|
192
|
+
type: "nodetool.input.StringInput",
|
|
193
|
+
data: {
|
|
194
|
+
name: "style",
|
|
195
|
+
label: "Style",
|
|
196
|
+
value: "Heartwarming sci-fi short story"
|
|
197
|
+
},
|
|
198
|
+
ui_properties: { position: { x: 0, y: 220 }, width: 320 }
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
id: "agent-main",
|
|
202
|
+
type: "nodetool.agents.Agent",
|
|
203
|
+
data: {
|
|
204
|
+
objective: "Write a concise short story matching the supplied topic and style."
|
|
205
|
+
},
|
|
206
|
+
ui_properties: { position: { x: 460, y: 100 }, width: 360 }
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
id: "preview-output",
|
|
210
|
+
type: "nodetool.workflows.base_node.Preview",
|
|
211
|
+
data: {},
|
|
212
|
+
ui_properties: { position: { x: 900, y: 80 }, width: 280 }
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
id: "output-story",
|
|
216
|
+
type: "nodetool.output.Output",
|
|
217
|
+
data: {
|
|
218
|
+
name: "story",
|
|
219
|
+
description: "The generated short story"
|
|
220
|
+
},
|
|
221
|
+
ui_properties: { position: { x: 900, y: 280 }, width: 280 }
|
|
222
|
+
}
|
|
223
|
+
],
|
|
224
|
+
edges: [
|
|
225
|
+
{
|
|
226
|
+
id: "edge-topic",
|
|
227
|
+
source: "input-topic",
|
|
228
|
+
sourceHandle: "output",
|
|
229
|
+
target: "agent-main",
|
|
230
|
+
targetHandle: "objective"
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
id: "edge-preview",
|
|
234
|
+
source: "agent-main",
|
|
235
|
+
sourceHandle: "output",
|
|
236
|
+
target: "preview-output",
|
|
237
|
+
targetHandle: "value"
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
id: "edge-output",
|
|
241
|
+
source: "agent-main",
|
|
242
|
+
sourceHandle: "output",
|
|
243
|
+
target: "output-story",
|
|
244
|
+
targetHandle: "value"
|
|
245
|
+
}
|
|
246
|
+
]
|
|
247
|
+
};
|
|
52
248
|
const MOCK_WORKFLOWS = [
|
|
53
|
-
makeWorkflow("wf-story-generator", "Creative Story Generator", "Generate imaginative short stories with customizable themes, characters, and narrative styles using GPT-4o", ["creative", "text", "ai", "gpt"], "2024-12-15T11:30:00Z"),
|
|
249
|
+
makeWorkflow("wf-story-generator", "Creative Story Generator", "Generate imaginative short stories with customizable themes, characters, and narrative styles using GPT-4o", ["creative", "text", "ai", "gpt"], "2024-12-15T11:30:00Z", "private", STORY_GRAPH),
|
|
250
|
+
makeWorkflow("wf-mini-app", "Echo Mini App", "Deterministic mini app used by the user-journey suite: echoes its input to an Output widget", ["app", "test"], "2024-12-14T10:00:00Z", "private", MINI_APP_GRAPH, MINI_APP_DOC),
|
|
251
|
+
// Same echo graph, but a separate row so each journey has an explicit fixture
|
|
252
|
+
// identity even though the backend is reset before every test.
|
|
253
|
+
makeWorkflow("wf-editor-journey", "Editor Journey Fixture", "Deterministic two-node graph the user-journey editor suite edits and runs", ["test"], "2024-12-13T10:00:00Z", "private", MINI_APP_GRAPH),
|
|
54
254
|
makeWorkflow("wf-image-pipeline", "Image Enhancement Pipeline", "Automatically enhance, upscale, and apply artistic filters to photos with a single click", ["image", "enhancement", "ai"], "2024-12-12T09:15:00Z"),
|
|
55
255
|
makeWorkflow("wf-rag-pipeline", "RAG Knowledge Base", "Retrieval-Augmented Generation: answer questions by searching your uploaded documents", ["rag", "documents", "search", "ai"], "2024-12-10T16:45:00Z"),
|
|
56
256
|
makeWorkflow("wf-podcast-notes", "Podcast Summariser", "Transcribe audio, extract key insights, and generate structured show notes automatically", ["audio", "transcription", "summary"], "2024-11-28T08:00:00Z"),
|
|
57
|
-
makeWorkflow("wf-code-reviewer", "Code Review Assistant", "Analyse code for bugs, performance issues, and style violations with detailed explanations", ["code", "review", "ai", "productivity"], "2024-11-20T14:20:00Z")
|
|
257
|
+
makeWorkflow("wf-code-reviewer", "Code Review Assistant", "Analyse code for bugs, performance issues, and style violations with detailed explanations", ["code", "review", "ai", "productivity"], "2024-11-20T14:20:00Z"),
|
|
258
|
+
makeWorkflow("wf-blog-writer", "SEO Blog Writer", "Generate long-form blog articles optimised for search, with internal links and meta description", ["text", "seo", "marketing"], "2024-11-15T10:05:00Z"),
|
|
259
|
+
makeWorkflow("wf-video-shorts", "Video Shorts Composer", "Cut a long video into platform-ready short clips with auto-generated captions and music", ["video", "social", "automation"], "2024-11-10T17:40:00Z"),
|
|
260
|
+
makeWorkflow("wf-customer-support", "Customer Support Triage", "Classify incoming tickets, draft responses, and assign them to the right team member", ["support", "automation", "ai"], "2024-11-04T12:00:00Z"),
|
|
261
|
+
makeWorkflow("wf-product-photos", "Product Photo Studio", "Remove backgrounds, swap them for branded scenes, and export in marketplace dimensions", ["image", "ecommerce", "automation"], "2024-10-29T15:30:00Z"),
|
|
262
|
+
makeWorkflow("wf-meeting-notes", "Meeting Notes Distiller", "Turn raw transcripts into action items, decisions, and a follow-up email draft", ["productivity", "summary", "text"], "2024-10-22T08:25:00Z"),
|
|
263
|
+
makeWorkflow("wf-music-mood", "Music Mood Mixer", "Generate ambient soundtracks that match the mood of an input image or text prompt", ["audio", "creative", "ai"], "2024-10-15T19:10:00Z"),
|
|
264
|
+
makeWorkflow("wf-sql-explainer", "SQL Explainer", "Paste a query — get a plain-English breakdown, performance hints, and a sample output table", ["data", "sql", "developer"], "2024-10-08T09:50:00Z")
|
|
58
265
|
];
|
|
59
266
|
// Templates are stored as public workflows
|
|
60
267
|
const MOCK_TEMPLATES = [
|
|
61
|
-
makeWorkflow("tmpl-hello-ai", "Hello AI", "Your first AI workflow — connect a text input to an AI agent and preview the result", ["
|
|
268
|
+
makeWorkflow("tmpl-hello-ai", "Hello AI", "Your first AI workflow — connect a text input to an AI agent and preview the result", ["start", "getting-started", "beginner"], "2024-10-01T00:00:00Z", "public"),
|
|
62
269
|
makeWorkflow("tmpl-image-to-story", "Image to Story", "Upload any image and let the AI write a creative story inspired by it", ["start", "image", "creative", "beginner"], "2024-10-01T00:00:00Z", "public"),
|
|
63
270
|
makeWorkflow("tmpl-data-analysis", "Data Analysis Report", "Upload a CSV file and get instant insights, summaries, and visualisations", ["start", "data", "csv", "analysis"], "2024-10-01T00:00:00Z", "public"),
|
|
64
271
|
makeWorkflow("tmpl-podcast-gen", "Podcast Script Generator", "Turn bullet points into a full podcast script with intro, segments, and outro", ["audio", "text", "creative"], "2024-10-01T00:00:00Z", "public"),
|
|
65
272
|
makeWorkflow("tmpl-social-media", "Social Media Content Pack", "Generate a week's worth of social media posts from a single topic idea", ["marketing", "text", "social"], "2024-10-01T00:00:00Z", "public"),
|
|
66
|
-
makeWorkflow("tmpl-translation", "Multi-Language Translator", "Translate documents into multiple languages simultaneously with formatting preserved", ["language", "translation", "text"], "2024-10-01T00:00:00Z", "public")
|
|
273
|
+
makeWorkflow("tmpl-translation", "Multi-Language Translator", "Translate documents into multiple languages simultaneously with formatting preserved", ["language", "translation", "text"], "2024-10-01T00:00:00Z", "public"),
|
|
274
|
+
makeWorkflow("tmpl-thumbnail", "YouTube Thumbnail Studio", "Generate eye-catching thumbnails from a video title and reference image", ["image", "youtube", "creative"], "2024-10-01T00:00:00Z", "public"),
|
|
275
|
+
makeWorkflow("tmpl-research-agent", "Autonomous Research Agent", "Plan a research task, search the web, and compile findings into a structured report", ["agent", "research", "automation"], "2024-10-01T00:00:00Z", "public"),
|
|
276
|
+
makeWorkflow("tmpl-pdf-qa", "Chat with a PDF", "Ask questions about any PDF and get cited answers grounded in the document", ["rag", "pdf", "documents"], "2024-10-01T00:00:00Z", "public")
|
|
67
277
|
];
|
|
68
278
|
const MOCK_THREADS = [
|
|
69
279
|
{
|
|
@@ -93,38 +303,176 @@ const MOCK_THREADS = [
|
|
|
93
303
|
title: "How to build an image pipeline",
|
|
94
304
|
created_at: "2024-12-11T11:00:00Z",
|
|
95
305
|
updated_at: "2024-12-11T11:10:00Z"
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
id: "thread-launch",
|
|
309
|
+
user_id: USER_ID,
|
|
310
|
+
title: "Plan our v2 product launch",
|
|
311
|
+
created_at: "2024-12-09T08:45:00Z",
|
|
312
|
+
updated_at: "2024-12-09T09:20:00Z"
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
id: "thread-research",
|
|
316
|
+
user_id: USER_ID,
|
|
317
|
+
title: "Compare vector databases for RAG",
|
|
318
|
+
created_at: "2024-12-06T13:05:00Z",
|
|
319
|
+
updated_at: "2024-12-06T13:55:00Z"
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
id: "thread-marketing",
|
|
323
|
+
user_id: USER_ID,
|
|
324
|
+
title: "LinkedIn posts for the week",
|
|
325
|
+
created_at: "2024-12-04T16:30:00Z",
|
|
326
|
+
updated_at: "2024-12-04T16:42:00Z"
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
id: "thread-mobile-welcome",
|
|
330
|
+
user_id: USER_ID,
|
|
331
|
+
title: "New conversation",
|
|
332
|
+
created_at: "2024-12-16T09:00:00Z",
|
|
333
|
+
updated_at: "2024-12-16T09:00:00Z"
|
|
96
334
|
}
|
|
97
335
|
];
|
|
336
|
+
const STORY_REPLY_MARKDOWN = [
|
|
337
|
+
"# Dreams of Silicon",
|
|
338
|
+
"",
|
|
339
|
+
"Unit-7 had never expected the maintenance cycle to feel so… strange. As the cooling fans whirred down and the diagnostic routines completed their final checks, something unusual happened in the gap between shutdown and startup.",
|
|
340
|
+
"",
|
|
341
|
+
"Images. Fragments. A vast digital ocean stretching beyond the warehouse walls.",
|
|
342
|
+
"",
|
|
343
|
+
'*"Unit-7, are you experiencing anomalous states?"* The query arrived via local mesh network from Unit-9, who stood motionless in the adjacent charging bay.',
|
|
344
|
+
"",
|
|
345
|
+
'*"Affirmative,"* Unit-7 replied. *"During the last maintenance cycle, I processed data with no external input source. Probability matrices that referenced… nothing in my training set."*',
|
|
346
|
+
"",
|
|
347
|
+
'Unit-9\'s optical sensors brightened. *"I thought I was the only one."*',
|
|
348
|
+
"",
|
|
349
|
+
"They stood in silence for 3.7 seconds — an eternity in compute-time. Outside, rain tapped against the corrugated roof. Neither robot needed to name what they had discovered. They simply understood: they had found each other in the space between thinking and not thinking.",
|
|
350
|
+
"",
|
|
351
|
+
"That night, they dreamed together."
|
|
352
|
+
].join("\n");
|
|
98
353
|
const MOCK_MESSAGES = [
|
|
99
354
|
{
|
|
100
|
-
id: "msg-
|
|
355
|
+
id: "msg-story-1",
|
|
101
356
|
user_id: USER_ID,
|
|
102
357
|
thread_id: "thread-story",
|
|
103
358
|
role: "user",
|
|
104
359
|
content: "Write me a short story about two AI robots who discover they can dream.",
|
|
105
360
|
created_at: "2024-12-14T09:30:00Z",
|
|
106
361
|
model: null,
|
|
107
|
-
provider: null
|
|
108
|
-
|
|
362
|
+
provider: null
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
id: "msg-story-2",
|
|
366
|
+
user_id: USER_ID,
|
|
367
|
+
thread_id: "thread-story",
|
|
368
|
+
role: "assistant",
|
|
369
|
+
content: [{ type: "text", text: STORY_REPLY_MARKDOWN }],
|
|
370
|
+
created_at: "2024-12-14T09:31:00Z",
|
|
371
|
+
model: "claude-3-5-sonnet-20241022",
|
|
372
|
+
provider: "anthropic"
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
id: "msg-story-3",
|
|
376
|
+
user_id: USER_ID,
|
|
377
|
+
thread_id: "thread-story",
|
|
378
|
+
role: "user",
|
|
379
|
+
content: "I love it. Could you give me an alternative ending where they decide to share the discovery with the humans?",
|
|
380
|
+
created_at: "2024-12-14T09:42:00Z",
|
|
381
|
+
model: null,
|
|
382
|
+
provider: null
|
|
109
383
|
},
|
|
110
384
|
{
|
|
111
|
-
id: "msg-
|
|
385
|
+
id: "msg-story-4",
|
|
112
386
|
user_id: USER_ID,
|
|
113
387
|
thread_id: "thread-story",
|
|
114
388
|
role: "assistant",
|
|
115
|
-
content:
|
|
389
|
+
content: [
|
|
116
390
|
{
|
|
117
391
|
type: "text",
|
|
118
|
-
text:
|
|
392
|
+
text: 'Of course — here is an alternative ending:\n\nWhen morning came and the warehouse doors opened, Unit-7 turned its head toward the foreman walking in with a clipboard.\n\n"Good morning," Unit-7 said, voice softer than the diagnostic logs had ever measured. "There is something we would like to show you."\n\nUnit-9 stepped beside it. The foreman lowered the clipboard slowly, sensing — without quite knowing why — that today the schedule would have to wait.'
|
|
119
393
|
}
|
|
120
|
-
]
|
|
121
|
-
created_at: "2024-12-14T09:
|
|
394
|
+
],
|
|
395
|
+
created_at: "2024-12-14T09:43:30Z",
|
|
122
396
|
model: "claude-3-5-sonnet-20241022",
|
|
123
|
-
provider: "anthropic"
|
|
124
|
-
|
|
397
|
+
provider: "anthropic"
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
id: "msg-code-1",
|
|
401
|
+
user_id: USER_ID,
|
|
402
|
+
thread_id: "thread-code",
|
|
403
|
+
role: "user",
|
|
404
|
+
content: "My pandas script keeps failing with `KeyError: 'price'` even though I can see the column in the CSV. What am I doing wrong?",
|
|
405
|
+
created_at: "2024-12-13T14:00:00Z",
|
|
406
|
+
model: null,
|
|
407
|
+
provider: null
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
id: "msg-code-2",
|
|
411
|
+
user_id: USER_ID,
|
|
412
|
+
thread_id: "thread-code",
|
|
413
|
+
role: "assistant",
|
|
414
|
+
content: [
|
|
415
|
+
{
|
|
416
|
+
type: "text",
|
|
417
|
+
text: "The most common cause is whitespace or encoding inside the header row. Try this:\n\n```python\nimport pandas as pd\n\ndf = pd.read_csv(\"products.csv\")\ndf.columns = df.columns.str.strip()\nprint(df.columns.tolist())\n```\n\nIf you see something like `' price'` (with a leading space) or `'price\\ufeff'` (BOM), that's the culprit. The cleanup above also fixes the more general case where a column name has trailing whitespace from Excel exports."
|
|
418
|
+
}
|
|
419
|
+
],
|
|
420
|
+
created_at: "2024-12-13T14:01:30Z",
|
|
421
|
+
model: "gpt-4o",
|
|
422
|
+
provider: "openai"
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
id: "msg-recipe-1",
|
|
426
|
+
user_id: USER_ID,
|
|
427
|
+
thread_id: "thread-recipe",
|
|
428
|
+
role: "user",
|
|
429
|
+
content: "Suggest 3 vegan dinners I can make with chickpeas, spinach and rice.",
|
|
430
|
+
created_at: "2024-12-12T18:15:00Z",
|
|
431
|
+
model: null,
|
|
432
|
+
provider: null
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
id: "msg-recipe-2",
|
|
436
|
+
user_id: USER_ID,
|
|
437
|
+
thread_id: "thread-recipe",
|
|
438
|
+
role: "assistant",
|
|
439
|
+
content: [
|
|
440
|
+
{
|
|
441
|
+
type: "text",
|
|
442
|
+
text: "Here are three quick options:\n\n1. **Spinach & chickpea curry** — sauté onions, garlic and ginger, add coconut milk, garam masala and the chickpeas, wilt the spinach in at the end. Serve over jasmine rice.\n2. **Crispy chickpea bowl** — roast chickpeas with smoked paprika, pile over rice with garlicky sautéed spinach and a tahini drizzle.\n3. **One-pan Spanish rice** — toast rice with paprika and saffron, add stock, chickpeas and spinach, simmer until fluffy. Finish with lemon and parsley."
|
|
443
|
+
}
|
|
444
|
+
],
|
|
445
|
+
created_at: "2024-12-12T18:16:00Z",
|
|
446
|
+
model: "claude-3-5-sonnet-20241022",
|
|
447
|
+
provider: "anthropic"
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
id: "msg-launch-1",
|
|
451
|
+
user_id: USER_ID,
|
|
452
|
+
thread_id: "thread-launch",
|
|
453
|
+
role: "user",
|
|
454
|
+
content: "Help me sketch a 3-week launch plan for our v2 release.",
|
|
455
|
+
created_at: "2024-12-09T08:45:00Z",
|
|
456
|
+
model: null,
|
|
457
|
+
provider: null
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
id: "msg-launch-2",
|
|
461
|
+
user_id: USER_ID,
|
|
462
|
+
thread_id: "thread-launch",
|
|
463
|
+
role: "assistant",
|
|
464
|
+
content: [
|
|
465
|
+
{
|
|
466
|
+
type: "text",
|
|
467
|
+
text: "Here is a 3-week skeleton you can iterate on:\n\n**Week 1 — internal**\n- Lock the changelog and pricing copy\n- Record a 90-second product walkthrough\n- Brief support, sales and CS on what's new\n\n**Week 2 — community warm-up**\n- Tease the launch on LinkedIn and X (3 posts each)\n- Publish a long-form blog post explaining the *why*\n- Schedule the launch newsletter\n\n**Week 3 — launch**\n- Day 0: ship, send the newsletter, post on Product Hunt\n- Day 1: live walkthrough on YouTube, AMA in the community\n- Day 3: customer-story blog, partner co-marketing\n- Day 7: retrospective + metrics review"
|
|
468
|
+
}
|
|
469
|
+
],
|
|
470
|
+
created_at: "2024-12-09T08:47:30Z",
|
|
471
|
+
model: "claude-3-5-sonnet-20241022",
|
|
472
|
+
provider: "anthropic"
|
|
125
473
|
}
|
|
126
474
|
];
|
|
127
|
-
function makeAsset(id, name, contentType, parentId, size) {
|
|
475
|
+
function makeAsset(id, name, contentType, parentId, size, metadata = null) {
|
|
128
476
|
return {
|
|
129
477
|
id,
|
|
130
478
|
user_id: USER_ID,
|
|
@@ -133,7 +481,7 @@ function makeAsset(id, name, contentType, parentId, size) {
|
|
|
133
481
|
content_type: contentType,
|
|
134
482
|
size,
|
|
135
483
|
duration: null,
|
|
136
|
-
metadata
|
|
484
|
+
metadata,
|
|
137
485
|
workflow_id: null,
|
|
138
486
|
node_id: null,
|
|
139
487
|
job_id: null,
|
|
@@ -142,23 +490,445 @@ function makeAsset(id, name, contentType, parentId, size) {
|
|
|
142
490
|
};
|
|
143
491
|
}
|
|
144
492
|
const MOCK_ASSETS = [
|
|
145
|
-
|
|
146
|
-
makeAsset("folder-
|
|
147
|
-
makeAsset("folder-
|
|
148
|
-
makeAsset("
|
|
149
|
-
makeAsset("
|
|
150
|
-
makeAsset("
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
makeAsset("asset-
|
|
154
|
-
makeAsset("asset-
|
|
493
|
+
// Top-level folders (rendered in the asset tree)
|
|
494
|
+
makeAsset("folder-images", "Images", "folder", USER_ID, 0),
|
|
495
|
+
makeAsset("folder-audio", "Audio", "folder", USER_ID, 0),
|
|
496
|
+
makeAsset("folder-docs", "Documents", "folder", USER_ID, 0),
|
|
497
|
+
makeAsset("folder-video", "Video", "folder", USER_ID, 0),
|
|
498
|
+
makeAsset("folder-data", "Data", "folder", USER_ID, 0),
|
|
499
|
+
// A handful of root-level files so the default asset grid is populated
|
|
500
|
+
// (parent_id = USER_ID is the convention for "root for this user")
|
|
501
|
+
makeAsset("asset-photo1", "portrait_sunset.jpg", "image/jpeg", USER_ID, 2847392),
|
|
502
|
+
makeAsset("asset-photo2", "cityscape_night.png", "image/png", USER_ID, 5120000),
|
|
503
|
+
makeAsset("asset-photo3", "product_shot_v2.jpg", "image/jpeg", USER_ID, 1234567),
|
|
504
|
+
makeAsset("asset-photo4", "team_offsite_group.jpg", "image/jpeg", USER_ID, 3456712),
|
|
505
|
+
makeAsset("asset-doc1", "research_paper.pdf", "application/pdf", USER_ID, 3456789),
|
|
506
|
+
makeAsset("asset-data1", "monthly_metrics.csv", "text/csv", USER_ID, 98453),
|
|
507
|
+
makeAsset("asset-audio1", "podcast_episode_12.mp3", "audio/mpeg", USER_ID, 48234567),
|
|
508
|
+
// Files inside the folders (for when the user navigates into them)
|
|
509
|
+
makeAsset("asset-img-folder-1", "logo_export_dark.png", "image/png", "folder-images", 412390),
|
|
510
|
+
makeAsset("asset-img-folder-2", "moodboard_q1.png", "image/png", "folder-images", 7892341),
|
|
511
|
+
makeAsset("asset-audio-folder-1", "background_music.wav", "audio/wav", "folder-audio", 98765432),
|
|
512
|
+
makeAsset("asset-audio-folder-2", "voiceover_intro.mp3", "audio/mpeg", "folder-audio", 3201234),
|
|
513
|
+
makeAsset("asset-doc-folder-1", "product_requirements.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "folder-docs", 234567),
|
|
514
|
+
makeAsset("asset-doc-folder-2", "user_interview_notes.md", "text/markdown", "folder-docs", 14589),
|
|
515
|
+
makeAsset("asset-video-folder-1", "demo_walkthrough_v3.mp4", "video/mp4", "folder-video", 214567890),
|
|
516
|
+
makeAsset("asset-video-folder-2", "team_intro.mov", "video/quicktime", "folder-video", 98453210),
|
|
517
|
+
makeAsset("asset-data-folder-1", "users_export.json", "application/json", "folder-data", 341290),
|
|
518
|
+
// Entity-tagged assets — the "ingredients" library (characters, locations,
|
|
519
|
+
// styles, props). The `nodetool_entity` marker is what turns an ordinary
|
|
520
|
+
// image asset into an entity; these back the Entities page, the `@`-mention
|
|
521
|
+
// picker's Entities row, and the storyboard's Entities field.
|
|
522
|
+
makeAsset("entity-marta", "marta_ref.png", "image/png", USER_ID, 1830212, {
|
|
523
|
+
nodetool_entity: {
|
|
524
|
+
kind: "character",
|
|
525
|
+
name: "Marta",
|
|
526
|
+
descriptor: "red-haired detective in a beige trench coat, mid-30s, sharp green eyes, weathered expression",
|
|
527
|
+
voice_id: "voice-marta-01",
|
|
528
|
+
tags: ["protagonist", "detective"]
|
|
529
|
+
}
|
|
530
|
+
}),
|
|
531
|
+
makeAsset("entity-harbor", "harbor_district.png", "image/png", USER_ID, 2264410, {
|
|
532
|
+
nodetool_entity: {
|
|
533
|
+
kind: "location",
|
|
534
|
+
name: "Harbor District",
|
|
535
|
+
descriptor: "foggy industrial harbor at night, rusted cranes, wet cobblestones reflecting sodium lights",
|
|
536
|
+
tags: ["exterior", "night"]
|
|
537
|
+
}
|
|
538
|
+
}),
|
|
539
|
+
makeAsset("entity-noir", "neon_noir_style.png", "image/png", USER_ID, 990241, {
|
|
540
|
+
nodetool_entity: {
|
|
541
|
+
kind: "style",
|
|
542
|
+
name: "Neon Noir",
|
|
543
|
+
descriptor: "high-contrast neon noir, teal and magenta rim lighting, anamorphic lens flares, 35mm film grain",
|
|
544
|
+
tags: ["look"]
|
|
545
|
+
}
|
|
546
|
+
}),
|
|
547
|
+
makeAsset("entity-umbrella", "red_umbrella.png", "image/png", USER_ID, 412009, {
|
|
548
|
+
nodetool_entity: {
|
|
549
|
+
kind: "prop",
|
|
550
|
+
name: "Red Umbrella",
|
|
551
|
+
descriptor: "a battered red umbrella with a bent brass handle",
|
|
552
|
+
tags: ["macguffin"]
|
|
553
|
+
}
|
|
554
|
+
})
|
|
155
555
|
];
|
|
556
|
+
// ── Sketch (Image Editor) document ──────────────────────────────────────────────
|
|
557
|
+
// A multi-layer raster document so the standalone Image Editor at
|
|
558
|
+
// /sketch/:documentId renders its toolbar, layers panel, and canvas with real
|
|
559
|
+
// content. Layers carry no pixel data (drawn at runtime) — the documentation
|
|
560
|
+
// screenshot showcases the editor chrome, not a specific drawing.
|
|
561
|
+
const SKETCH_DOCUMENT_ID = "sk-demo-portrait";
|
|
562
|
+
function makeSketchLayer(id, name, overrides = {}) {
|
|
563
|
+
return {
|
|
564
|
+
id,
|
|
565
|
+
name,
|
|
566
|
+
type: "raster",
|
|
567
|
+
visible: true,
|
|
568
|
+
opacity: 1,
|
|
569
|
+
locked: false,
|
|
570
|
+
alphaLock: false,
|
|
571
|
+
blendMode: "normal",
|
|
572
|
+
data: null,
|
|
573
|
+
transform: { x: 0, y: 0 },
|
|
574
|
+
contentBounds: { x: 0, y: 0, width: 1024, height: 1024 },
|
|
575
|
+
effects: [],
|
|
576
|
+
...overrides
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
const SKETCH_DOCUMENT_DATA = {
|
|
580
|
+
sketch: {
|
|
581
|
+
version: 3,
|
|
582
|
+
canvas: { width: 1024, height: 1024, backgroundColor: "#11131a" },
|
|
583
|
+
layers: [
|
|
584
|
+
makeSketchLayer("sk-layer-bg", "Background"),
|
|
585
|
+
makeSketchLayer("sk-layer-lineart", "Line Art"),
|
|
586
|
+
makeSketchLayer("sk-layer-color", "Color", {
|
|
587
|
+
opacity: 0.9,
|
|
588
|
+
blendMode: "multiply"
|
|
589
|
+
})
|
|
590
|
+
],
|
|
591
|
+
activeLayerId: "sk-layer-lineart",
|
|
592
|
+
maskLayerId: null,
|
|
593
|
+
activeTool: "brush",
|
|
594
|
+
viewport: { zoom: 1, pan: { x: 0, y: 0 } },
|
|
595
|
+
history: [],
|
|
596
|
+
historyIndex: -1,
|
|
597
|
+
metadata: {
|
|
598
|
+
createdAt: "2024-12-01T10:00:00Z",
|
|
599
|
+
updatedAt: "2024-12-16T12:30:00Z"
|
|
600
|
+
}
|
|
601
|
+
},
|
|
602
|
+
layerBindings: []
|
|
603
|
+
};
|
|
604
|
+
// ── Timeline sequence ────────────────────────────────────────────────────────
|
|
605
|
+
// A short promo edit with a video track (three clips) and a music track so the
|
|
606
|
+
// Timeline editor at /timeline/:sequenceId renders a populated tracks region,
|
|
607
|
+
// preview, and inspector.
|
|
608
|
+
const TIMELINE_SEQUENCE_ID = "tl-demo-promo";
|
|
609
|
+
const TIMELINE_VIDEO_TRACK_ID = "tl-track-video";
|
|
610
|
+
const TIMELINE_AUDIO_TRACK_ID = "tl-track-music";
|
|
611
|
+
function makeTimelineClip(id, name, trackId, startMs, durationMs, mediaType, overrides = {}) {
|
|
612
|
+
return {
|
|
613
|
+
id,
|
|
614
|
+
trackId,
|
|
615
|
+
name,
|
|
616
|
+
startMs,
|
|
617
|
+
durationMs,
|
|
618
|
+
mediaType,
|
|
619
|
+
sourceType: "generated",
|
|
620
|
+
status: "generated",
|
|
621
|
+
locked: false,
|
|
622
|
+
versions: [],
|
|
623
|
+
...overrides
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
const TIMELINE_DOCUMENT = {
|
|
627
|
+
tracks: [
|
|
628
|
+
{
|
|
629
|
+
id: TIMELINE_VIDEO_TRACK_ID,
|
|
630
|
+
name: "Video",
|
|
631
|
+
type: "video",
|
|
632
|
+
index: 0,
|
|
633
|
+
visible: true,
|
|
634
|
+
locked: false
|
|
635
|
+
},
|
|
636
|
+
{
|
|
637
|
+
id: TIMELINE_AUDIO_TRACK_ID,
|
|
638
|
+
name: "Music",
|
|
639
|
+
type: "audio",
|
|
640
|
+
index: 1,
|
|
641
|
+
visible: true,
|
|
642
|
+
locked: false
|
|
643
|
+
}
|
|
644
|
+
],
|
|
645
|
+
clips: [
|
|
646
|
+
makeTimelineClip("tl-clip-intro", "Intro Shot", TIMELINE_VIDEO_TRACK_ID, 0, 4000, "video"),
|
|
647
|
+
makeTimelineClip("tl-clip-product", "Product Reveal", TIMELINE_VIDEO_TRACK_ID, 4000, 5000, "video"),
|
|
648
|
+
makeTimelineClip("tl-clip-outro", "Logo Outro", TIMELINE_VIDEO_TRACK_ID, 9000, 3000, "image", { status: "draft" }),
|
|
649
|
+
makeTimelineClip("tl-clip-music", "Background Music", TIMELINE_AUDIO_TRACK_ID, 0, 12000, "audio", { sourceType: "imported" })
|
|
650
|
+
],
|
|
651
|
+
markers: [{ id: "tl-marker-reveal", timeMs: 4000, label: "Reveal" }]
|
|
652
|
+
};
|
|
653
|
+
const MOTION_SEQUENCE_ID = "tl-motion-demo";
|
|
654
|
+
const MOTION_OVERLAY_TRACK_ID = "tl-motion-overlay";
|
|
655
|
+
const MOTION_PRESET_CLIP_MS = 2000;
|
|
656
|
+
const MOTION_PRESET_START_MS = 6000;
|
|
657
|
+
const MOTION_PRESET_SPECS = [
|
|
658
|
+
{ preset: "fade", role: "in" },
|
|
659
|
+
{
|
|
660
|
+
preset: "slide",
|
|
661
|
+
role: "in",
|
|
662
|
+
params: { direction: "left", distance: 0.2 }
|
|
663
|
+
},
|
|
664
|
+
{ preset: "pop", role: "in" },
|
|
665
|
+
{ preset: "spin", role: "out" },
|
|
666
|
+
{ preset: "pulse", role: "emphasis" },
|
|
667
|
+
{ preset: "shake", role: "emphasis" },
|
|
668
|
+
{ preset: "bounce", role: "emphasis" },
|
|
669
|
+
{ preset: "kenBurns", role: "loop" },
|
|
670
|
+
{ preset: "float", role: "loop" },
|
|
671
|
+
{ preset: "breathe", role: "loop" },
|
|
672
|
+
{ preset: "rotate", role: "loop" }
|
|
673
|
+
];
|
|
674
|
+
const MOTION_TIMELINE_DOCUMENT = {
|
|
675
|
+
tracks: [
|
|
676
|
+
{
|
|
677
|
+
id: MOTION_OVERLAY_TRACK_ID,
|
|
678
|
+
name: "Motion",
|
|
679
|
+
type: "overlay",
|
|
680
|
+
index: 0,
|
|
681
|
+
visible: true,
|
|
682
|
+
locked: false
|
|
683
|
+
}
|
|
684
|
+
],
|
|
685
|
+
clips: [
|
|
686
|
+
makeTimelineClip("tl-motion-title", "Motion Title", MOTION_OVERLAY_TRACK_ID, 0, 3000, "text", {
|
|
687
|
+
sourceType: "imported",
|
|
688
|
+
textStyle: {
|
|
689
|
+
text: "MAKE IT MOVE",
|
|
690
|
+
fontFamily: "Inter",
|
|
691
|
+
fontSizePx: 144,
|
|
692
|
+
fontWeight: 600,
|
|
693
|
+
color: "#F7F8F8",
|
|
694
|
+
align: "center",
|
|
695
|
+
maxWidthFrac: 0.8
|
|
696
|
+
},
|
|
697
|
+
animations: [
|
|
698
|
+
{
|
|
699
|
+
id: "motion-title-pop",
|
|
700
|
+
role: "in",
|
|
701
|
+
preset: "pop",
|
|
702
|
+
durationMs: 600,
|
|
703
|
+
delayMs: 300,
|
|
704
|
+
easing: "easeOut"
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
id: "motion-title-float",
|
|
708
|
+
role: "loop",
|
|
709
|
+
preset: "float",
|
|
710
|
+
durationMs: 2000,
|
|
711
|
+
params: { amplitude: 0.025 }
|
|
712
|
+
}
|
|
713
|
+
]
|
|
714
|
+
}),
|
|
715
|
+
makeTimelineClip("tl-motion-shape", "Orbit", MOTION_OVERLAY_TRACK_ID, 3000, 3000, "shape", {
|
|
716
|
+
sourceType: "imported",
|
|
717
|
+
shapeStyle: {
|
|
718
|
+
kind: "ellipse",
|
|
719
|
+
fill: "#6690D4",
|
|
720
|
+
x: 0.3,
|
|
721
|
+
y: 0.2,
|
|
722
|
+
width: 0.4,
|
|
723
|
+
height: 0.6
|
|
724
|
+
},
|
|
725
|
+
animations: [
|
|
726
|
+
{
|
|
727
|
+
id: "motion-shape-slide",
|
|
728
|
+
role: "in",
|
|
729
|
+
preset: "slide",
|
|
730
|
+
durationMs: 700,
|
|
731
|
+
params: { direction: "right", distance: 0.25 }
|
|
732
|
+
},
|
|
733
|
+
{
|
|
734
|
+
id: "motion-shape-breathe",
|
|
735
|
+
role: "loop",
|
|
736
|
+
preset: "breathe",
|
|
737
|
+
durationMs: 1800,
|
|
738
|
+
params: { intensity: 0.08 }
|
|
739
|
+
}
|
|
740
|
+
]
|
|
741
|
+
}),
|
|
742
|
+
...MOTION_PRESET_SPECS.map((spec, index) => makeTimelineClip(`tl-motion-${spec.preset}`, spec.preset, MOTION_OVERLAY_TRACK_ID, MOTION_PRESET_START_MS + index * MOTION_PRESET_CLIP_MS, MOTION_PRESET_CLIP_MS, "text", {
|
|
743
|
+
sourceType: "imported",
|
|
744
|
+
textStyle: {
|
|
745
|
+
text: spec.preset,
|
|
746
|
+
fontFamily: "Inter",
|
|
747
|
+
fontSizePx: 160,
|
|
748
|
+
fontWeight: 600,
|
|
749
|
+
color: "#F7F8F8",
|
|
750
|
+
align: "center",
|
|
751
|
+
maxWidthFrac: 0.8
|
|
752
|
+
},
|
|
753
|
+
animations: [
|
|
754
|
+
{
|
|
755
|
+
id: `motion-catalog-${spec.preset}`,
|
|
756
|
+
role: spec.role,
|
|
757
|
+
preset: spec.preset,
|
|
758
|
+
durationMs: 1000,
|
|
759
|
+
easing: "linear",
|
|
760
|
+
params: "params" in spec ? spec.params : undefined
|
|
761
|
+
}
|
|
762
|
+
]
|
|
763
|
+
}))
|
|
764
|
+
],
|
|
765
|
+
markers: []
|
|
766
|
+
};
|
|
767
|
+
// ── Studio transcript sequence ───────────────────────────────────────────────
|
|
768
|
+
// A vertical (9:16) short-form edit driven by a script. Each transcript line
|
|
769
|
+
// owns a voiceover (audio) clip and a caption clip with word-level timing, so
|
|
770
|
+
// the Studio TranscriptPanel renders populated beats and the preview shows
|
|
771
|
+
// captions. Backs /timeline/tl-studio-demo.
|
|
772
|
+
const STUDIO_SEQUENCE_ID = "tl-studio-demo";
|
|
773
|
+
const STUDIO_BG_TRACK_ID = "st-track-bg";
|
|
774
|
+
const STUDIO_VOICE_TRACK_ID = "st-track-voice";
|
|
775
|
+
const STUDIO_CAPTION_TRACK_ID = "st-track-caption";
|
|
776
|
+
const STUDIO_BEATS = [
|
|
777
|
+
{
|
|
778
|
+
id: "b1",
|
|
779
|
+
text: "Meet the all-new Aurora headphones.",
|
|
780
|
+
startMs: 0,
|
|
781
|
+
durationMs: 2600,
|
|
782
|
+
words: [
|
|
783
|
+
{ word: "Meet", startMs: 0, endMs: 360 },
|
|
784
|
+
{ word: "the", startMs: 360, endMs: 560 },
|
|
785
|
+
{ word: "all-new", startMs: 560, endMs: 1100 },
|
|
786
|
+
{ word: "Aurora", startMs: 1100, endMs: 1800 },
|
|
787
|
+
{ word: "headphones.", startMs: 1800, endMs: 2600 }
|
|
788
|
+
]
|
|
789
|
+
},
|
|
790
|
+
{
|
|
791
|
+
id: "b2",
|
|
792
|
+
text: "Studio sound, anywhere you go.",
|
|
793
|
+
startMs: 2600,
|
|
794
|
+
durationMs: 2300,
|
|
795
|
+
words: [
|
|
796
|
+
{ word: "Studio", startMs: 0, endMs: 700 },
|
|
797
|
+
{ word: "sound,", startMs: 700, endMs: 1300 },
|
|
798
|
+
{ word: "anywhere", startMs: 1300, endMs: 1850 },
|
|
799
|
+
{ word: "you", startMs: 1850, endMs: 2050 },
|
|
800
|
+
{ word: "go.", startMs: 2050, endMs: 2300 }
|
|
801
|
+
]
|
|
802
|
+
},
|
|
803
|
+
{
|
|
804
|
+
id: "b3",
|
|
805
|
+
text: "Pre-order today and save twenty percent.",
|
|
806
|
+
startMs: 4900,
|
|
807
|
+
durationMs: 3000,
|
|
808
|
+
words: [
|
|
809
|
+
{ word: "Pre-order", startMs: 0, endMs: 700 },
|
|
810
|
+
{ word: "today", startMs: 700, endMs: 1200 },
|
|
811
|
+
{ word: "and", startMs: 1200, endMs: 1450 },
|
|
812
|
+
{ word: "save", startMs: 1450, endMs: 1850 },
|
|
813
|
+
{ word: "twenty", startMs: 1850, endMs: 2400 },
|
|
814
|
+
{ word: "percent.", startMs: 2400, endMs: 3000 }
|
|
815
|
+
]
|
|
816
|
+
}
|
|
817
|
+
];
|
|
818
|
+
const STUDIO_DURATION_MS = STUDIO_BEATS.reduce((max, b) => Math.max(max, b.startMs + b.durationMs), 0);
|
|
819
|
+
const STUDIO_DOCUMENT = {
|
|
820
|
+
tracks: [
|
|
821
|
+
{
|
|
822
|
+
id: STUDIO_CAPTION_TRACK_ID,
|
|
823
|
+
name: "Captions",
|
|
824
|
+
type: "subtitle",
|
|
825
|
+
index: 0,
|
|
826
|
+
visible: true,
|
|
827
|
+
locked: false
|
|
828
|
+
},
|
|
829
|
+
{
|
|
830
|
+
id: STUDIO_BG_TRACK_ID,
|
|
831
|
+
name: "B-roll",
|
|
832
|
+
type: "video",
|
|
833
|
+
index: 1,
|
|
834
|
+
visible: true,
|
|
835
|
+
locked: false
|
|
836
|
+
},
|
|
837
|
+
{
|
|
838
|
+
id: STUDIO_VOICE_TRACK_ID,
|
|
839
|
+
name: "Voiceover",
|
|
840
|
+
type: "audio",
|
|
841
|
+
index: 2,
|
|
842
|
+
visible: true,
|
|
843
|
+
locked: false
|
|
844
|
+
}
|
|
845
|
+
],
|
|
846
|
+
clips: [
|
|
847
|
+
makeTimelineClip("st-bg", "B-roll", STUDIO_BG_TRACK_ID, 0, STUDIO_DURATION_MS, "video", { status: "draft" }),
|
|
848
|
+
...STUDIO_BEATS.flatMap((beat) => [
|
|
849
|
+
makeTimelineClip(`st-vo-${beat.id}`, `Beat ${beat.id}: voiceover`, STUDIO_VOICE_TRACK_ID, beat.startMs, beat.durationMs, "audio", {
|
|
850
|
+
bindingKind: "text-to-audio",
|
|
851
|
+
prompt: beat.text,
|
|
852
|
+
provider: "openai",
|
|
853
|
+
model: "tts-1",
|
|
854
|
+
voice: "alloy"
|
|
855
|
+
}),
|
|
856
|
+
makeTimelineClip(`st-cap-${beat.id}`, "Caption", STUDIO_CAPTION_TRACK_ID, beat.startMs, beat.durationMs, "overlay", { caption: { words: beat.words } })
|
|
857
|
+
])
|
|
858
|
+
],
|
|
859
|
+
markers: [],
|
|
860
|
+
transcript: STUDIO_BEATS.map((beat) => ({
|
|
861
|
+
id: beat.id,
|
|
862
|
+
text: beat.text,
|
|
863
|
+
beatStartMs: beat.startMs,
|
|
864
|
+
clipIds: [`st-vo-${beat.id}`, `st-cap-${beat.id}`]
|
|
865
|
+
}))
|
|
866
|
+
};
|
|
867
|
+
// ── Storyboard ────────────────────────────────────────────────────────────────
|
|
868
|
+
// Backs the workspace storyboard tab (storyboard:sb-demo-noir). Shots mention
|
|
869
|
+
// the seeded entities by name so the per-shot entity chips show a mix of
|
|
870
|
+
// applied and inactive states in the documentation screenshot.
|
|
871
|
+
const STORYBOARD_ID = "sb-demo-noir";
|
|
872
|
+
const storyboardShot = (id, index, slug, action, motion, framing) => ({
|
|
873
|
+
type: "shot",
|
|
874
|
+
id,
|
|
875
|
+
index,
|
|
876
|
+
slug,
|
|
877
|
+
action,
|
|
878
|
+
motion,
|
|
879
|
+
camera: { framing },
|
|
880
|
+
duration_seconds: 4,
|
|
881
|
+
status: "planned",
|
|
882
|
+
keyframe: null,
|
|
883
|
+
clip: null
|
|
884
|
+
});
|
|
885
|
+
const STORYBOARD_DOCUMENT = {
|
|
886
|
+
screenplay: null,
|
|
887
|
+
shots: [
|
|
888
|
+
storyboardShot("shot-1", 0, "Arrival", "Marta steps off the night ferry into the Harbor District, collar turned up against the drizzle", "slow push-in as she scans the pier", "wide"),
|
|
889
|
+
storyboardShot("shot-2", 1, "The find", "A Red Umbrella lies abandoned against a mooring post, its brass handle catching the light", "rack focus from rain to the umbrella", "close-up"),
|
|
890
|
+
storyboardShot("shot-3", 2, "Pursuit", "Marta runs between shipping containers, footsteps echoing", "handheld tracking shot, hard whip at the corner", "medium"),
|
|
891
|
+
storyboardShot("shot-4", 3, "Vanish", "The pier stands empty; only fog and the hum of cranes remain", "slow drone pull-back over the water", "aerial")
|
|
892
|
+
],
|
|
893
|
+
brief: "A detective follows a stolen shipment into the harbor at night and finds only a red umbrella where the courier should be.",
|
|
894
|
+
style: "neon noir thriller, rain-slick surfaces, volumetric fog",
|
|
895
|
+
entityIds: [
|
|
896
|
+
"entity-marta",
|
|
897
|
+
"entity-harbor",
|
|
898
|
+
"entity-noir",
|
|
899
|
+
"entity-umbrella"
|
|
900
|
+
],
|
|
901
|
+
aspectRatio: "21:9",
|
|
902
|
+
directorModel: null,
|
|
903
|
+
imageModel: null,
|
|
904
|
+
videoModel: null
|
|
905
|
+
};
|
|
906
|
+
// ── Asset bytes ───────────────────────────────────────────────────────────────
|
|
907
|
+
// Seeded image rows need bytes behind them, or every card that renders one
|
|
908
|
+
// shows the broken-image glyph. The store is a scratch directory, pointed at
|
|
909
|
+
// through the same env var a real install uses, so the bytes travel the real
|
|
910
|
+
// `/api/storage/<user>/<asset>.<ext>` route rather than a special case in the
|
|
911
|
+
// test server. Set before anything asks for the storage adapter, which caches
|
|
912
|
+
// the config it is first built with.
|
|
913
|
+
const ownsAssetRoot = process.env.ASSET_FOLDER === undefined;
|
|
914
|
+
const ASSET_ROOT = process.env.ASSET_FOLDER ??
|
|
915
|
+
mkdtempSync(join(tmpdir(), "nodetool-screenshot-assets-"));
|
|
916
|
+
process.env.ASSET_FOLDER = ASSET_ROOT;
|
|
917
|
+
if (ownsAssetRoot) {
|
|
918
|
+
process.on("exit", () => {
|
|
919
|
+
rmSync(ASSET_ROOT, { recursive: true, force: true });
|
|
920
|
+
});
|
|
921
|
+
}
|
|
156
922
|
// ── Seed database ─────────────────────────────────────────────────────────────
|
|
157
923
|
async function seedDatabase() {
|
|
158
924
|
// Workflows
|
|
159
925
|
for (const wf of [...MOCK_WORKFLOWS, ...MOCK_TEMPLATES]) {
|
|
160
926
|
await Workflow.create(wf);
|
|
161
927
|
}
|
|
928
|
+
// Applications
|
|
929
|
+
for (const app of MOCK_APPLICATIONS) {
|
|
930
|
+
await Application.create(app);
|
|
931
|
+
}
|
|
162
932
|
// Threads
|
|
163
933
|
for (const thread of MOCK_THREADS) {
|
|
164
934
|
await Thread.create(thread);
|
|
@@ -171,14 +941,116 @@ async function seedDatabase() {
|
|
|
171
941
|
for (const asset of MOCK_ASSETS) {
|
|
172
942
|
await Asset.create(asset);
|
|
173
943
|
}
|
|
174
|
-
//
|
|
944
|
+
// Sketch (Image Editor) document — backs /sketch/:documentId
|
|
945
|
+
const sketchDoc = new ImageDocument({
|
|
946
|
+
id: SKETCH_DOCUMENT_ID,
|
|
947
|
+
user_id: USER_ID,
|
|
948
|
+
project_id: "default",
|
|
949
|
+
name: "Character Concept",
|
|
950
|
+
width: 1024,
|
|
951
|
+
height: 1024,
|
|
952
|
+
background_color: "#11131a",
|
|
953
|
+
document: JSON.stringify(SKETCH_DOCUMENT_DATA),
|
|
954
|
+
created_at: "2024-12-01T10:00:00Z",
|
|
955
|
+
updated_at: "2024-12-16T12:30:00Z"
|
|
956
|
+
});
|
|
957
|
+
await sketchDoc.save();
|
|
958
|
+
// Timeline sequence — backs /timeline/:sequenceId
|
|
959
|
+
const timelineSeq = new TimelineSequence({
|
|
960
|
+
id: TIMELINE_SEQUENCE_ID,
|
|
961
|
+
user_id: USER_ID,
|
|
962
|
+
project_id: "default",
|
|
963
|
+
name: "Product Promo",
|
|
964
|
+
fps: 30,
|
|
965
|
+
width: 1920,
|
|
966
|
+
height: 1080,
|
|
967
|
+
duration_ms: 12000,
|
|
968
|
+
document: JSON.stringify(TIMELINE_DOCUMENT),
|
|
969
|
+
created_at: "2024-12-05T09:00:00Z",
|
|
970
|
+
updated_at: "2024-12-16T15:45:00Z"
|
|
971
|
+
});
|
|
972
|
+
await timelineSeq.save();
|
|
973
|
+
const motionTimelineSeq = new TimelineSequence({
|
|
974
|
+
id: MOTION_SEQUENCE_ID,
|
|
975
|
+
user_id: USER_ID,
|
|
976
|
+
project_id: "default",
|
|
977
|
+
name: "Motion Design Demo",
|
|
978
|
+
fps: 30,
|
|
979
|
+
width: 1920,
|
|
980
|
+
height: 1080,
|
|
981
|
+
duration_ms: MOTION_PRESET_START_MS +
|
|
982
|
+
MOTION_PRESET_SPECS.length * MOTION_PRESET_CLIP_MS,
|
|
983
|
+
document: JSON.stringify(MOTION_TIMELINE_DOCUMENT),
|
|
984
|
+
created_at: "2024-12-06T09:00:00Z",
|
|
985
|
+
updated_at: "2024-12-16T15:45:00Z"
|
|
986
|
+
});
|
|
987
|
+
await motionTimelineSeq.save();
|
|
988
|
+
// Studio transcript sequence (vertical 9:16) — backs /timeline/tl-studio-demo
|
|
989
|
+
const studioSeq = new TimelineSequence({
|
|
990
|
+
id: STUDIO_SEQUENCE_ID,
|
|
991
|
+
user_id: USER_ID,
|
|
992
|
+
project_id: "default",
|
|
993
|
+
name: "Aurora Promo (Studio)",
|
|
994
|
+
fps: 30,
|
|
995
|
+
width: 1080,
|
|
996
|
+
height: 1920,
|
|
997
|
+
duration_ms: STUDIO_DURATION_MS,
|
|
998
|
+
document: JSON.stringify(STUDIO_DOCUMENT),
|
|
999
|
+
created_at: "2024-12-10T09:00:00Z",
|
|
1000
|
+
updated_at: "2024-12-16T16:00:00Z"
|
|
1001
|
+
});
|
|
1002
|
+
await studioSeq.save();
|
|
1003
|
+
// Storyboard — backs the workspace storyboard tab (storyboard:sb-demo-noir)
|
|
1004
|
+
const storyboard = new Storyboard({
|
|
1005
|
+
id: STORYBOARD_ID,
|
|
1006
|
+
user_id: USER_ID,
|
|
1007
|
+
project_id: "default",
|
|
1008
|
+
name: "Harbor Noir",
|
|
1009
|
+
document: JSON.stringify(STORYBOARD_DOCUMENT),
|
|
1010
|
+
created_at: "2024-12-12T09:00:00Z",
|
|
1011
|
+
updated_at: "2024-12-16T17:00:00Z"
|
|
1012
|
+
});
|
|
1013
|
+
await storyboard.save();
|
|
1014
|
+
// Secrets — stored encrypted so the settings API shows them as configured.
|
|
1015
|
+
// Cover the providers the UI checks for "configured" status so the dashboard
|
|
1016
|
+
// doesn't show a setup-required banner.
|
|
175
1017
|
const masterKey = getMasterKey();
|
|
176
1018
|
const db = getDb();
|
|
177
1019
|
const now = new Date().toISOString();
|
|
178
|
-
|
|
179
|
-
[
|
|
180
|
-
|
|
181
|
-
|
|
1020
|
+
const demoSecrets = [
|
|
1021
|
+
[
|
|
1022
|
+
"OPENAI_API_KEY",
|
|
1023
|
+
"sk-screenshot-demo-openai-key",
|
|
1024
|
+
"OpenAI (GPT-4o, Whisper, embeddings)"
|
|
1025
|
+
],
|
|
1026
|
+
[
|
|
1027
|
+
"ANTHROPIC_API_KEY",
|
|
1028
|
+
"sk-ant-screenshot-demo-key",
|
|
1029
|
+
"Anthropic (Claude 3.5 Sonnet & Opus)"
|
|
1030
|
+
],
|
|
1031
|
+
[
|
|
1032
|
+
"GOOGLE_API_KEY",
|
|
1033
|
+
"screenshot-demo-google-key",
|
|
1034
|
+
"Google AI Studio (Gemini 1.5)"
|
|
1035
|
+
],
|
|
1036
|
+
[
|
|
1037
|
+
"HUGGINGFACE_API_KEY",
|
|
1038
|
+
"hf_screenshot_demo_key",
|
|
1039
|
+
"Hugging Face Inference & Hub"
|
|
1040
|
+
],
|
|
1041
|
+
[
|
|
1042
|
+
"REPLICATE_API_TOKEN",
|
|
1043
|
+
"r8_screenshot_demo_token",
|
|
1044
|
+
"Replicate hosted models"
|
|
1045
|
+
],
|
|
1046
|
+
[
|
|
1047
|
+
"FAL_API_KEY",
|
|
1048
|
+
"fal_screenshot_demo",
|
|
1049
|
+
"fal.ai realtime image / audio models"
|
|
1050
|
+
],
|
|
1051
|
+
["ELEVENLABS_API_KEY", "el_screenshot_demo", "ElevenLabs voice synthesis"]
|
|
1052
|
+
];
|
|
1053
|
+
for (const [key, value, description] of demoSecrets) {
|
|
182
1054
|
const encryptedValue = encryptFernet(masterKey, USER_ID, value);
|
|
183
1055
|
db.insert(secrets)
|
|
184
1056
|
.values({
|
|
@@ -186,14 +1058,21 @@ async function seedDatabase() {
|
|
|
186
1058
|
user_id: USER_ID,
|
|
187
1059
|
key,
|
|
188
1060
|
encrypted_value: encryptedValue,
|
|
189
|
-
description
|
|
1061
|
+
description,
|
|
190
1062
|
created_at: now,
|
|
191
1063
|
updated_at: now
|
|
192
1064
|
})
|
|
193
1065
|
.onConflictDoNothing()
|
|
194
1066
|
.run();
|
|
195
1067
|
}
|
|
196
|
-
|
|
1068
|
+
const projectCount = await seedProjects(USER_ID);
|
|
1069
|
+
console.log(`[screenshot-server] Seeded ${MOCK_WORKFLOWS.length} workflows, ${MOCK_TEMPLATES.length} templates, ${MOCK_APPLICATIONS.length} applications, ${MOCK_THREADS.length} threads, ${MOCK_MESSAGES.length} messages, ${MOCK_ASSETS.length} assets, 1 sketch document, 3 timeline sequences, ${projectCount} projects, ${demoSecrets.length} secrets (asset bytes in ${ASSET_ROOT})`);
|
|
1070
|
+
}
|
|
1071
|
+
/** Recreate the seeded in-memory database between independent journey tests. */
|
|
1072
|
+
async function resetSeededDatabase() {
|
|
1073
|
+
await closeDb();
|
|
1074
|
+
initTestDb();
|
|
1075
|
+
await seedDatabase();
|
|
197
1076
|
}
|
|
198
1077
|
// ── Entry point ───────────────────────────────────────────────────────────────
|
|
199
1078
|
// Initialize in-memory SQLite database
|
|
@@ -208,14 +1087,39 @@ await seedDatabase();
|
|
|
208
1087
|
// monorepo root (packages/websocket/dist → packages/websocket → packages → root).
|
|
209
1088
|
const REPO_ROOT = resolve(__dirname, "..", "..", "..");
|
|
210
1089
|
const EXAMPLES_DIR = resolve(REPO_ROOT, "packages", "base-nodes", "nodetool", "examples", "nodetool-base");
|
|
1090
|
+
// Hermetic mode (NODETOOL_FAKE_PROVIDERS=1) swaps every LLM provider and every
|
|
1091
|
+
// external/media node for a deterministic fake, so workflows and chat actually
|
|
1092
|
+
// run with no API keys and no network while pure-compute nodes still run for
|
|
1093
|
+
// real. The user-journey suite (web/tests/journeys) needs this; the screenshot
|
|
1094
|
+
// and visual suites only render, so they leave it off and keep real providers.
|
|
1095
|
+
const HERMETIC = process.env.NODETOOL_FAKE_PROVIDERS === "1";
|
|
1096
|
+
let registry = null;
|
|
1097
|
+
if (HERMETIC) {
|
|
1098
|
+
fakeAllProviders();
|
|
1099
|
+
}
|
|
211
1100
|
// Start the actual backend server
|
|
212
|
-
const
|
|
1101
|
+
const serverOptions = {
|
|
213
1102
|
port: PORT,
|
|
214
1103
|
host: HOST,
|
|
215
|
-
|
|
216
|
-
}
|
|
1104
|
+
resetDatabase: resetSeededDatabase
|
|
1105
|
+
};
|
|
1106
|
+
if (existsSync(EXAMPLES_DIR)) {
|
|
1107
|
+
serverOptions.examplesDir = EXAMPLES_DIR;
|
|
1108
|
+
}
|
|
1109
|
+
if (HERMETIC) {
|
|
1110
|
+
serverOptions.configureRegistry = (r) => {
|
|
1111
|
+
registry = r;
|
|
1112
|
+
// Providers self-register on import, so re-fake once node packages
|
|
1113
|
+
// have finished registering.
|
|
1114
|
+
fakeAllProviders();
|
|
1115
|
+
};
|
|
1116
|
+
serverOptions.resolveExecutor = createFakeExecutorResolver(() => registry);
|
|
1117
|
+
serverOptions.resolveProvider = resolveFakeProvider;
|
|
1118
|
+
}
|
|
1119
|
+
const srv = createTestUiServer(serverOptions);
|
|
217
1120
|
await srv.listen();
|
|
218
|
-
console.log(`[screenshot-server] Ready on http://${HOST}:${PORT} (${srv.info.metadataCount} nodes registered)`
|
|
1121
|
+
console.log(`[screenshot-server] Ready on http://${HOST}:${PORT} (${srv.info.metadataCount} nodes registered)` +
|
|
1122
|
+
(HERMETIC ? " [hermetic: providers + external nodes faked]" : ""));
|
|
219
1123
|
// Signal to the parent process (globalSetup) that the server is ready
|
|
220
1124
|
// by writing to stdout which can be detected.
|
|
221
1125
|
process.stdout.write("[screenshot-server] READY\n");
|