flow-frame-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -0
- package/dist/Dockerfile +86 -0
- package/dist/GPU_DEPLOYMENT_README.md +324 -0
- package/dist/OPS_AGENT_README.md +174 -0
- package/dist/README-H100-VM.md +192 -0
- package/dist/README-worker-pools.md +231 -0
- package/dist/README.md +8 -0
- package/dist/WEB-ELEMENT-REQUESTS-README.md +302 -0
- package/dist/append.d.ts +3 -0
- package/dist/append.d.ts.map +1 -0
- package/dist/append.js +42 -0
- package/dist/append.js.map +1 -0
- package/dist/audioRoutes.d.ts +2 -0
- package/dist/audioRoutes.d.ts.map +1 -0
- package/dist/audioRoutes.js +97 -0
- package/dist/audioRoutes.js.map +1 -0
- package/dist/augment-parallel.d.ts +6 -0
- package/dist/augment-parallel.d.ts.map +1 -0
- package/dist/augment-parallel.js +128 -0
- package/dist/augment-parallel.js.map +1 -0
- package/dist/augment-worker.d.ts +2 -0
- package/dist/augment-worker.d.ts.map +1 -0
- package/dist/augment-worker.js +100 -0
- package/dist/augment-worker.js.map +1 -0
- package/dist/browerRoutes.d.ts +2 -0
- package/dist/browerRoutes.d.ts.map +1 -0
- package/dist/browerRoutes.js +323 -0
- package/dist/browerRoutes.js.map +1 -0
- package/dist/browser-utils/utils.d.ts +6 -0
- package/dist/browser-utils/utils.d.ts.map +1 -0
- package/dist/browser-utils/utils.js +133 -0
- package/dist/browser-utils/utils.js.map +1 -0
- package/dist/capture_training_data_endpoints.d.ts +158 -0
- package/dist/capture_training_data_endpoints.d.ts.map +1 -0
- package/dist/capture_training_data_endpoints.js +1812 -0
- package/dist/capture_training_data_endpoints.js.map +1 -0
- package/dist/config.json +28 -0
- package/dist/configEndpoints.d.ts +2 -0
- package/dist/configEndpoints.d.ts.map +1 -0
- package/dist/configEndpoints.js +459 -0
- package/dist/configEndpoints.js.map +1 -0
- package/dist/constants.d.ts +109 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +110 -0
- package/dist/constants.js.map +1 -0
- package/dist/docs/workflow_nodes.md +257 -0
- package/dist/download.d.ts +11 -0
- package/dist/download.d.ts.map +1 -0
- package/dist/download.js +31 -0
- package/dist/download.js.map +1 -0
- package/dist/download.py +61 -0
- package/dist/ecosystem.config.json +63 -0
- package/dist/email-body-extractor.d.ts +20 -0
- package/dist/email-body-extractor.d.ts.map +1 -0
- package/dist/email-body-extractor.js +103 -0
- package/dist/email-body-extractor.js.map +1 -0
- package/dist/express_util.d.ts +2 -0
- package/dist/express_util.d.ts.map +1 -0
- package/dist/express_util.js +30 -0
- package/dist/express_util.js.map +1 -0
- package/dist/extension/background.d.ts +2 -0
- package/dist/extension/background.d.ts.map +1 -0
- package/dist/extension/background.js +268 -0
- package/dist/extension/background.js.map +1 -0
- package/dist/extension/manifest.json +19 -0
- package/dist/extensionUtils.d.ts +2 -0
- package/dist/extensionUtils.d.ts.map +1 -0
- package/dist/extensionUtils.js +48 -0
- package/dist/extensionUtils.js.map +1 -0
- package/dist/filter-gmail-poller/README.md +320 -0
- package/dist/filter-gmail-poller/demo.d.ts +2 -0
- package/dist/filter-gmail-poller/demo.d.ts.map +1 -0
- package/dist/filter-gmail-poller/demo.js +79 -0
- package/dist/filter-gmail-poller/demo.js.map +1 -0
- package/dist/filter-gmail-poller/example-existing-app.d.ts +2 -0
- package/dist/filter-gmail-poller/example-existing-app.d.ts.map +1 -0
- package/dist/filter-gmail-poller/example-existing-app.js +72 -0
- package/dist/filter-gmail-poller/example-existing-app.js.map +1 -0
- package/dist/filter-gmail-poller/filter-gmail-poller.d.ts +160 -0
- package/dist/filter-gmail-poller/filter-gmail-poller.d.ts.map +1 -0
- package/dist/filter-gmail-poller/filter-gmail-poller.js +1048 -0
- package/dist/filter-gmail-poller/filter-gmail-poller.js.map +1 -0
- package/dist/filter-gmail-poller/index.d.ts +3 -0
- package/dist/filter-gmail-poller/index.d.ts.map +1 -0
- package/dist/filter-gmail-poller/index.js +18 -0
- package/dist/filter-gmail-poller/index.js.map +1 -0
- package/dist/filter-gmail-poller/manual-test.d.ts +2 -0
- package/dist/filter-gmail-poller/manual-test.d.ts.map +1 -0
- package/dist/filter-gmail-poller/manual-test.js +70 -0
- package/dist/filter-gmail-poller/manual-test.js.map +1 -0
- package/dist/filter-gmail-poller/poller-prompts.d.ts +12 -0
- package/dist/filter-gmail-poller/poller-prompts.d.ts.map +1 -0
- package/dist/filter-gmail-poller/poller-prompts.js +330 -0
- package/dist/filter-gmail-poller/poller-prompts.js.map +1 -0
- package/dist/filter-gmail-poller/test.js +69 -0
- package/dist/flowframe-auto-firebase-adminsdk.json +13 -0
- package/dist/gmail-poller/README-microsoft-email-poller.md +203 -0
- package/dist/gmail-poller/README.md +129 -0
- package/dist/gmail-poller/example.d.ts +5 -0
- package/dist/gmail-poller/example.d.ts.map +1 -0
- package/dist/gmail-poller/example.js +83 -0
- package/dist/gmail-poller/example.js.map +1 -0
- package/dist/gmail-poller/gmail-poller.d.ts +82 -0
- package/dist/gmail-poller/gmail-poller.d.ts.map +1 -0
- package/dist/gmail-poller/gmail-poller.js +455 -0
- package/dist/gmail-poller/gmail-poller.js.map +1 -0
- package/dist/gmail-poller/manual-test.d.ts +2 -0
- package/dist/gmail-poller/manual-test.d.ts.map +1 -0
- package/dist/gmail-poller/manual-test.js +37 -0
- package/dist/gmail-poller/manual-test.js.map +1 -0
- package/dist/gmail-poller/microsoft-email-example.d.ts +8 -0
- package/dist/gmail-poller/microsoft-email-example.d.ts.map +1 -0
- package/dist/gmail-poller/microsoft-email-example.js +58 -0
- package/dist/gmail-poller/microsoft-email-example.js.map +1 -0
- package/dist/gmail-poller/microsoft-email-poller.d.ts +73 -0
- package/dist/gmail-poller/microsoft-email-poller.d.ts.map +1 -0
- package/dist/gmail-poller/microsoft-email-poller.js +346 -0
- package/dist/gmail-poller/microsoft-email-poller.js.map +1 -0
- package/dist/gmail-poller/setup-auth.d.ts +3 -0
- package/dist/gmail-poller/setup-auth.d.ts.map +1 -0
- package/dist/gmail-poller/setup-auth.js +36 -0
- package/dist/gmail-poller/setup-auth.js.map +1 -0
- package/dist/gmail-poller/test.js +36 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/inference/augment_levels.d.ts +2 -0
- package/dist/inference/augment_levels.d.ts.map +1 -0
- package/dist/inference/augment_levels.js +1 -0
- package/dist/inference/augment_levels.js.map +1 -0
- package/dist/inference/capture-overlay.d.ts +13 -0
- package/dist/inference/capture-overlay.d.ts.map +1 -0
- package/dist/inference/capture-overlay.js +355 -0
- package/dist/inference/capture-overlay.js.map +1 -0
- package/dist/inference/capturescreenshot.d.ts +12 -0
- package/dist/inference/capturescreenshot.d.ts.map +1 -0
- package/dist/inference/capturescreenshot.js +157 -0
- package/dist/inference/capturescreenshot.js.map +1 -0
- package/dist/jsonHandler.d.ts +37 -0
- package/dist/jsonHandler.d.ts.map +1 -0
- package/dist/jsonHandler.js +191 -0
- package/dist/jsonHandler.js.map +1 -0
- package/dist/localStorage.json +11 -0
- package/dist/media_data_endpoints.d.ts +2 -0
- package/dist/media_data_endpoints.d.ts.map +1 -0
- package/dist/media_data_endpoints.js +102 -0
- package/dist/media_data_endpoints.js.map +1 -0
- package/dist/operations/blender-ops.d.ts +4 -0
- package/dist/operations/blender-ops.d.ts.map +1 -0
- package/dist/operations/blender-ops.js +55 -0
- package/dist/operations/blender-ops.js.map +1 -0
- package/dist/operations.d.ts +34 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +1514 -0
- package/dist/operations.js.map +1 -0
- package/dist/pdfRoutes.d.ts +2 -0
- package/dist/pdfRoutes.d.ts.map +1 -0
- package/dist/pdfRoutes.js +56 -0
- package/dist/pdfRoutes.js.map +1 -0
- package/dist/peers.d.ts +9 -0
- package/dist/peers.d.ts.map +1 -0
- package/dist/peers.js +70 -0
- package/dist/peers.js.map +1 -0
- package/dist/playparser.d.ts +2 -0
- package/dist/playparser.d.ts.map +1 -0
- package/dist/playparser.js +281 -0
- package/dist/playparser.js.map +1 -0
- package/dist/process.d.ts +4 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +375 -0
- package/dist/process.js.map +1 -0
- package/dist/promptRoutes.d.ts +7 -0
- package/dist/promptRoutes.d.ts.map +1 -0
- package/dist/promptRoutes.js +68 -0
- package/dist/promptRoutes.js.map +1 -0
- package/dist/queueManager.d.ts +23 -0
- package/dist/queueManager.d.ts.map +1 -0
- package/dist/queueManager.js +96 -0
- package/dist/queueManager.js.map +1 -0
- package/dist/run-flow.d.ts +8 -0
- package/dist/run-flow.d.ts.map +1 -0
- package/dist/run-flow.js +220 -0
- package/dist/run-flow.js.map +1 -0
- package/dist/scraper.d.ts +2 -0
- package/dist/scraper.d.ts.map +1 -0
- package/dist/scraper.js +75 -0
- package/dist/scraper.js.map +1 -0
- package/dist/scraper_endpoints.d.ts +2 -0
- package/dist/scraper_endpoints.d.ts.map +1 -0
- package/dist/scraper_endpoints.js +40 -0
- package/dist/scraper_endpoints.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +528 -0
- package/dist/server.js.map +1 -0
- package/dist/services/ModelContext.d.ts +7 -0
- package/dist/services/ModelContext.d.ts.map +1 -0
- package/dist/services/ModelContext.js +7 -0
- package/dist/services/ModelContext.js.map +1 -0
- package/dist/services/agenticUiPlanner.d.ts +27 -0
- package/dist/services/agenticUiPlanner.d.ts.map +1 -0
- package/dist/services/agenticUiPlanner.js +161 -0
- package/dist/services/agenticUiPlanner.js.map +1 -0
- package/dist/services/apiKeyService.d.ts +3 -0
- package/dist/services/apiKeyService.d.ts.map +1 -0
- package/dist/services/apiKeyService.js +7 -0
- package/dist/services/apiKeyService.js.map +1 -0
- package/dist/services/audioService.d.ts +10 -0
- package/dist/services/audioService.d.ts.map +1 -0
- package/dist/services/audioService.js +140 -0
- package/dist/services/audioService.js.map +1 -0
- package/dist/services/autoPromptOptimizer.d.ts +44 -0
- package/dist/services/autoPromptOptimizer.d.ts.map +1 -0
- package/dist/services/autoPromptOptimizer.js +344 -0
- package/dist/services/autoPromptOptimizer.js.map +1 -0
- package/dist/services/autoPromptOptimizer.manual-test.d.ts +2 -0
- package/dist/services/autoPromptOptimizer.manual-test.d.ts.map +1 -0
- package/dist/services/autoPromptOptimizer.manual-test.js +27 -0
- package/dist/services/autoPromptOptimizer.manual-test.js.map +1 -0
- package/dist/services/chainExecutor.d.ts +26 -0
- package/dist/services/chainExecutor.d.ts.map +1 -0
- package/dist/services/chainExecutor.js +399 -0
- package/dist/services/chainExecutor.js.map +1 -0
- package/dist/services/classifyImageQuestion.d.ts +55 -0
- package/dist/services/classifyImageQuestion.d.ts.map +1 -0
- package/dist/services/classifyImageQuestion.js +428 -0
- package/dist/services/classifyImageQuestion.js.map +1 -0
- package/dist/services/configuration/executor.d.ts +3 -0
- package/dist/services/configuration/executor.d.ts.map +1 -0
- package/dist/services/configuration/executor.js +795 -0
- package/dist/services/configuration/executor.js.map +1 -0
- package/dist/services/error.d.ts +13 -0
- package/dist/services/error.d.ts.map +1 -0
- package/dist/services/error.js +34 -0
- package/dist/services/error.js.map +1 -0
- package/dist/services/executor.d.ts +11 -0
- package/dist/services/executor.d.ts.map +1 -0
- package/dist/services/executor.js +1587 -0
- package/dist/services/executor.js.map +1 -0
- package/dist/services/extractPdf.d.ts +26 -0
- package/dist/services/extractPdf.d.ts.map +1 -0
- package/dist/services/extractPdf.js +256 -0
- package/dist/services/extractPdf.js.map +1 -0
- package/dist/services/generateJsTransformFromPrompt.d.ts +11 -0
- package/dist/services/generateJsTransformFromPrompt.d.ts.map +1 -0
- package/dist/services/generateJsTransformFromPrompt.js +328 -0
- package/dist/services/generateJsTransformFromPrompt.js.map +1 -0
- package/dist/services/localizeFirebaseMedia.d.ts +20 -0
- package/dist/services/localizeFirebaseMedia.d.ts.map +1 -0
- package/dist/services/localizeFirebaseMedia.js +135 -0
- package/dist/services/localizeFirebaseMedia.js.map +1 -0
- package/dist/services/polyfill_canvas.d.ts +2 -0
- package/dist/services/polyfill_canvas.d.ts.map +1 -0
- package/dist/services/polyfill_canvas.js +19 -0
- package/dist/services/polyfill_canvas.js.map +1 -0
- package/dist/services/promptRoutes.d.ts +7 -0
- package/dist/services/promptRoutes.d.ts.map +1 -0
- package/dist/services/promptRoutes.js +70 -0
- package/dist/services/promptRoutes.js.map +1 -0
- package/dist/services/runPrompt.d.ts +29 -0
- package/dist/services/runPrompt.d.ts.map +1 -0
- package/dist/services/runPrompt.js +232 -0
- package/dist/services/runPrompt.js.map +1 -0
- package/dist/services/schemaInference.d.ts +2 -0
- package/dist/services/schemaInference.d.ts.map +1 -0
- package/dist/services/schemaInference.js +17 -0
- package/dist/services/schemaInference.js.map +1 -0
- package/dist/services/self-learning/api.d.ts +2 -0
- package/dist/services/self-learning/api.d.ts.map +1 -0
- package/dist/services/self-learning/api.js +84 -0
- package/dist/services/self-learning/api.js.map +1 -0
- package/dist/services/self-learning/autolearn.d.ts +23 -0
- package/dist/services/self-learning/autolearn.d.ts.map +1 -0
- package/dist/services/self-learning/autolearn.js +308 -0
- package/dist/services/self-learning/autolearn.js.map +1 -0
- package/dist/services/self-learning/discover.d.ts +11 -0
- package/dist/services/self-learning/discover.d.ts.map +1 -0
- package/dist/services/self-learning/discover.js +446 -0
- package/dist/services/self-learning/discover.js.map +1 -0
- package/dist/services/self-learning/image.d.ts +10 -0
- package/dist/services/self-learning/image.d.ts.map +1 -0
- package/dist/services/self-learning/image.js +38 -0
- package/dist/services/self-learning/image.js.map +1 -0
- package/dist/services/self-learning/injest.d.ts +25 -0
- package/dist/services/self-learning/injest.d.ts.map +1 -0
- package/dist/services/self-learning/injest.js +110 -0
- package/dist/services/self-learning/injest.js.map +1 -0
- package/dist/services/self-learning/learn.d.ts +2 -0
- package/dist/services/self-learning/learn.d.ts.map +1 -0
- package/dist/services/self-learning/learn.js +145 -0
- package/dist/services/self-learning/learn.js.map +1 -0
- package/dist/services/self-learning/matcher.d.ts +2 -0
- package/dist/services/self-learning/matcher.d.ts.map +1 -0
- package/dist/services/self-learning/matcher.js +38 -0
- package/dist/services/self-learning/matcher.js.map +1 -0
- package/dist/services/self-learning/openai.d.ts +8 -0
- package/dist/services/self-learning/openai.d.ts.map +1 -0
- package/dist/services/self-learning/openai.js +97 -0
- package/dist/services/self-learning/openai.js.map +1 -0
- package/dist/services/self-learning/phash.d.ts +5 -0
- package/dist/services/self-learning/phash.d.ts.map +1 -0
- package/dist/services/self-learning/phash.js +68 -0
- package/dist/services/self-learning/phash.js.map +1 -0
- package/dist/services/self-learning/recognize.d.ts +17 -0
- package/dist/services/self-learning/recognize.d.ts.map +1 -0
- package/dist/services/self-learning/recognize.js +116 -0
- package/dist/services/self-learning/recognize.js.map +1 -0
- package/dist/services/self-learning/record_transition.d.ts +8 -0
- package/dist/services/self-learning/record_transition.d.ts.map +1 -0
- package/dist/services/self-learning/record_transition.js +20 -0
- package/dist/services/self-learning/record_transition.js.map +1 -0
- package/dist/services/self-learning/registry.d.ts +4 -0
- package/dist/services/self-learning/registry.d.ts.map +1 -0
- package/dist/services/self-learning/registry.js +19 -0
- package/dist/services/self-learning/registry.js.map +1 -0
- package/dist/services/self-learning/schema.d.ts +114 -0
- package/dist/services/self-learning/schema.d.ts.map +1 -0
- package/dist/services/self-learning/schema.js +70 -0
- package/dist/services/self-learning/schema.js.map +1 -0
- package/dist/services/self-learning/schemaStrictify.d.ts +2 -0
- package/dist/services/self-learning/schemaStrictify.d.ts.map +1 -0
- package/dist/services/self-learning/schemaStrictify.js +34 -0
- package/dist/services/self-learning/schemaStrictify.js.map +1 -0
- package/dist/services/self-learning/transition_graph.d.ts +6 -0
- package/dist/services/self-learning/transition_graph.d.ts.map +1 -0
- package/dist/services/self-learning/transition_graph.js +83 -0
- package/dist/services/self-learning/transition_graph.js.map +1 -0
- package/dist/services/self-learning/transition_log.d.ts +3 -0
- package/dist/services/self-learning/transition_log.d.ts.map +1 -0
- package/dist/services/self-learning/transition_log.js +42 -0
- package/dist/services/self-learning/transition_log.js.map +1 -0
- package/dist/services/self-learning/util.d.ts +3 -0
- package/dist/services/self-learning/util.d.ts.map +1 -0
- package/dist/services/self-learning/util.js +11 -0
- package/dist/services/self-learning/util.js.map +1 -0
- package/dist/services/stepByStepAiPlanner.d.ts +39 -0
- package/dist/services/stepByStepAiPlanner.d.ts.map +1 -0
- package/dist/services/stepByStepAiPlanner.js +379 -0
- package/dist/services/stepByStepAiPlanner.js.map +1 -0
- package/dist/services/test-genjs.js +39 -0
- package/dist/services/test-genjs.manual-test.d.ts +2 -0
- package/dist/services/test-genjs.manual-test.d.ts.map +1 -0
- package/dist/services/test-genjs.manual-test.js +40 -0
- package/dist/services/test-genjs.manual-test.js.map +1 -0
- package/dist/services/uiMapPathFinder.d.ts +13 -0
- package/dist/services/uiMapPathFinder.d.ts.map +1 -0
- package/dist/services/uiMapPathFinder.js +79 -0
- package/dist/services/uiMapPathFinder.js.map +1 -0
- package/dist/services/uiMapService.d.ts +26 -0
- package/dist/services/uiMapService.d.ts.map +1 -0
- package/dist/services/uiMapService.js +275 -0
- package/dist/services/uiMapService.js.map +1 -0
- package/dist/services/uiPlanner.d.ts +54 -0
- package/dist/services/uiPlanner.d.ts.map +1 -0
- package/dist/services/uiPlanner.js +558 -0
- package/dist/services/uiPlanner.js.map +1 -0
- package/dist/services/utilityFunctions.d.ts +80 -0
- package/dist/services/utilityFunctions.d.ts.map +1 -0
- package/dist/services/utilityFunctions.js +352 -0
- package/dist/services/utilityFunctions.js.map +1 -0
- package/dist/services/variableGenerator.d.ts +39 -0
- package/dist/services/variableGenerator.d.ts.map +1 -0
- package/dist/services/variableGenerator.js +157 -0
- package/dist/services/variableGenerator.js.map +1 -0
- package/dist/services/workflow/build-workflow.d.ts +49 -0
- package/dist/services/workflow/build-workflow.d.ts.map +1 -0
- package/dist/services/workflow/build-workflow.js +119 -0
- package/dist/services/workflow/build-workflow.js.map +1 -0
- package/dist/standardRoutes.d.ts +2 -0
- package/dist/standardRoutes.d.ts.map +1 -0
- package/dist/standardRoutes.js +1495 -0
- package/dist/standardRoutes.js.map +1 -0
- package/dist/stepWorkflowRoutes.d.ts +2 -0
- package/dist/stepWorkflowRoutes.d.ts.map +1 -0
- package/dist/stepWorkflowRoutes.js +1007 -0
- package/dist/stepWorkflowRoutes.js.map +1 -0
- package/dist/storage.d.ts +19 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.docker.json +61 -0
- package/dist/storage.js +131 -0
- package/dist/storage.js.map +1 -0
- package/dist/storage.json +78 -0
- package/dist/storage_cache/boxes.json +48 -0
- package/dist/storage_cache/suno_state.json +3 -0
- package/dist/suno_download.d.ts +11 -0
- package/dist/suno_download.d.ts.map +1 -0
- package/dist/suno_download.js +33 -0
- package/dist/suno_download.js.map +1 -0
- package/dist/suno_download.py +119 -0
- package/dist/test-web-element-requests.d.ts +6 -0
- package/dist/test-web-element-requests.d.ts.map +1 -0
- package/dist/test-web-element-requests.js +114 -0
- package/dist/test-web-element-requests.js.map +1 -0
- package/dist/test_pdf_render.d.ts +2 -0
- package/dist/test_pdf_render.d.ts.map +1 -0
- package/dist/test_pdf_render.js +50 -0
- package/dist/test_pdf_render.js.map +1 -0
- package/dist/training_data_viewer_endpoints.d.ts +2 -0
- package/dist/training_data_viewer_endpoints.d.ts.map +1 -0
- package/dist/training_data_viewer_endpoints.js +141 -0
- package/dist/training_data_viewer_endpoints.js.map +1 -0
- package/dist/utils.d.ts +353 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +1517 -0
- package/dist/utils.js.map +1 -0
- package/dist/vm-h100.env.template +55 -0
- package/dist/web-element-requests.d.ts +102 -0
- package/dist/web-element-requests.d.ts.map +1 -0
- package/dist/web-element-requests.js +278 -0
- package/dist/web-element-requests.js.map +1 -0
- package/dist/workflowRoutes.d.ts +2 -0
- package/dist/workflowRoutes.d.ts.map +1 -0
- package/dist/workflowRoutes.js +441 -0
- package/dist/workflowRoutes.js.map +1 -0
- package/package.json +109 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
// generateJsTransformFromPrompt.js
|
|
2
|
+
import Groq from "groq-sdk";
|
|
3
|
+
import vm from "node:vm";
|
|
4
|
+
import Ajv from "ajv";
|
|
5
|
+
import * as nodeAssert from "node:assert";
|
|
6
|
+
import dotenv from "dotenv";
|
|
7
|
+
// Load environment variables from .env file
|
|
8
|
+
dotenv.config();
|
|
9
|
+
/** ---------- JSON schema for LLM response (all objects closed) ---------- */
|
|
10
|
+
const CodePlanSchemaForGroq = {
|
|
11
|
+
type: "object",
|
|
12
|
+
additionalProperties: false,
|
|
13
|
+
required: ["file"],
|
|
14
|
+
properties: {
|
|
15
|
+
file: {
|
|
16
|
+
type: "object",
|
|
17
|
+
additionalProperties: false,
|
|
18
|
+
required: ["path", "content"],
|
|
19
|
+
properties: {
|
|
20
|
+
path: { type: "string" },
|
|
21
|
+
content: { type: "string" }
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
tests: {
|
|
25
|
+
type: "object",
|
|
26
|
+
additionalProperties: false,
|
|
27
|
+
required: ["path", "content"],
|
|
28
|
+
properties: {
|
|
29
|
+
path: { type: "string" },
|
|
30
|
+
content: { type: "string" }
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
notes: { type: "string" }
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
/** ---------- Public API types (JSDoc only) ----------
|
|
37
|
+
* @typedef {{ input: any, output?: any }} ExamplePair
|
|
38
|
+
* @typedef {{
|
|
39
|
+
* prompt: string,
|
|
40
|
+
* inputSchema?: object|string,
|
|
41
|
+
* outputSchema?: object|string,
|
|
42
|
+
* examples?: ExamplePair[],
|
|
43
|
+
* allowNet?: boolean,
|
|
44
|
+
* maxExecMs?: number,
|
|
45
|
+
* model?: string,
|
|
46
|
+
* retries?: number,
|
|
47
|
+
* verbose?: boolean
|
|
48
|
+
* }} GenOptions
|
|
49
|
+
*/
|
|
50
|
+
/** ---------- Groq call (structured outputs with fallback) ---------- */
|
|
51
|
+
async function groqStructuredCall(basePrompt, schema, model = "meta-llama/llama-4-maverick-17b-128e-instruct") {
|
|
52
|
+
const client = new Groq({ apiKey: process.env.GROK_API_KEY });
|
|
53
|
+
try {
|
|
54
|
+
const res = await client.chat.completions.create({
|
|
55
|
+
model,
|
|
56
|
+
temperature: 0.1,
|
|
57
|
+
response_format: { type: "json_schema", json_schema: { name: "JsCodePlan", schema, strict: true } },
|
|
58
|
+
messages: [
|
|
59
|
+
{ role: "system", content: "Return ONLY a JSON object that satisfies the provided schema." },
|
|
60
|
+
{ role: "user", content: basePrompt }
|
|
61
|
+
]
|
|
62
|
+
});
|
|
63
|
+
return res.choices?.[0]?.message?.content ?? "";
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Fallback: plain JSON mode
|
|
67
|
+
const res = await client.chat.completions.create({
|
|
68
|
+
model,
|
|
69
|
+
temperature: 0.1,
|
|
70
|
+
response_format: { type: "json_object" },
|
|
71
|
+
messages: [
|
|
72
|
+
{ role: "system", content: "Return ONLY valid JSON. No code fences, no prose." },
|
|
73
|
+
{ role: "user", content: basePrompt }
|
|
74
|
+
]
|
|
75
|
+
});
|
|
76
|
+
return res.choices?.[0]?.message?.content ?? "";
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** ---------- Prompt builder ---------- */
|
|
80
|
+
function buildCodeGenPrompt(opts, repairContext) {
|
|
81
|
+
const inputSchema = typeof opts.inputSchema === "string"
|
|
82
|
+
? opts.inputSchema
|
|
83
|
+
: (opts.inputSchema ? JSON.stringify(opts.inputSchema) : "null");
|
|
84
|
+
const outputSchema = typeof opts.outputSchema === "string"
|
|
85
|
+
? opts.outputSchema
|
|
86
|
+
: (opts.outputSchema ? JSON.stringify(opts.outputSchema) : "null");
|
|
87
|
+
const examples = JSON.stringify(opts.examples ?? []);
|
|
88
|
+
return `
|
|
89
|
+
You are a senior JavaScript engineer.
|
|
90
|
+
|
|
91
|
+
GOAL
|
|
92
|
+
Write a single-file JS module that exports a CommonJS transform function to satisfy the user request,
|
|
93
|
+
constrained by the input/output schemas when provided.
|
|
94
|
+
|
|
95
|
+
CONTRACT
|
|
96
|
+
- Export exactly: module.exports = async function transform(input, ctx) { /* ... */ }
|
|
97
|
+
- No external imports. Only JS built-ins and ctx.* helpers.
|
|
98
|
+
- Must be deterministic and fast (<50ms typical). Avoid randomness and heavy loops.
|
|
99
|
+
- If outputSchema is provided, the returned value must conform to it.
|
|
100
|
+
- Use only data from "input" and "ctx"; no process/env/fs.
|
|
101
|
+
|
|
102
|
+
ENV
|
|
103
|
+
- ctx: { log: (...args) => void, now: () => string, helpers?: Record<string, any> }
|
|
104
|
+
- ${opts.allowNet ? "ctx.fetch is available for limited network calls." : "No network available (ctx.fetch not provided)."}
|
|
105
|
+
|
|
106
|
+
SCHEMAS
|
|
107
|
+
inputSchema:
|
|
108
|
+
\`\`\`json
|
|
109
|
+
${inputSchema}
|
|
110
|
+
\`\`\`
|
|
111
|
+
|
|
112
|
+
outputSchema:
|
|
113
|
+
\`\`\`json
|
|
114
|
+
${outputSchema}
|
|
115
|
+
\`\`\`
|
|
116
|
+
|
|
117
|
+
EXAMPLES (may be empty):
|
|
118
|
+
\`\`\`json
|
|
119
|
+
${examples}
|
|
120
|
+
\`\`\`
|
|
121
|
+
|
|
122
|
+
USER PROMPT
|
|
123
|
+
"""
|
|
124
|
+
${opts.prompt}
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
RETURN FORMAT (STRICT JSON):
|
|
128
|
+
{
|
|
129
|
+
"file": { "path": "transform.js", "content": "<JS code string>" },
|
|
130
|
+
"tests": { "path": "selftest.js", "content": "<optional test code using ONLY the 'transform' function and built-in assert>" },
|
|
131
|
+
"notes": "<brief rationale/assumptions>"
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
IMPORTANT
|
|
135
|
+
- Do NOT return TypeScript. Only plain JavaScript.
|
|
136
|
+
- Do NOT use ESM exports. Use: module.exports = async function transform(input, ctx) { ... }.
|
|
137
|
+
- Test code MUST use the 'transform' function that is available in global scope - do NOT try to require() or import any files.
|
|
138
|
+
- Test code can use assert.deepEqual() or similar built-in assertion methods.
|
|
139
|
+
- Example test: (async () => { const result = await transform(input, {}); assert.deepEqual(result, expected); console.log('Tests passed'); })();
|
|
140
|
+
${repairContext ? `
|
|
141
|
+
|
|
142
|
+
REPAIR CONTEXT
|
|
143
|
+
The last attempt failed. Fix the problems listed below and return a corrected JSON object:
|
|
144
|
+
${repairContext}
|
|
145
|
+
` : ""}
|
|
146
|
+
`;
|
|
147
|
+
}
|
|
148
|
+
/** ---------- Sandbox compiler ---------- */
|
|
149
|
+
function compileTransform(code, timeoutMs) {
|
|
150
|
+
// guardrails
|
|
151
|
+
if (/require\s*\(/.test(code) || /import\s*\(/.test(code)) {
|
|
152
|
+
throw new Error("Imports are not allowed in generated code.");
|
|
153
|
+
}
|
|
154
|
+
if (/\bprocess\./.test(code) || /\bfs\./.test(code)) {
|
|
155
|
+
throw new Error("Access to process/fs is not allowed.");
|
|
156
|
+
}
|
|
157
|
+
const sandbox = {
|
|
158
|
+
module: { exports: {} },
|
|
159
|
+
exports: {},
|
|
160
|
+
console,
|
|
161
|
+
setTimeout,
|
|
162
|
+
clearTimeout
|
|
163
|
+
};
|
|
164
|
+
const context = vm.createContext(sandbox, { codeGeneration: { strings: true, wasm: false } });
|
|
165
|
+
const script = new vm.Script(code, { filename: "transform.js" });
|
|
166
|
+
script.runInContext(context, { timeout: Math.max(50, timeoutMs) });
|
|
167
|
+
const fn = sandbox.module?.exports;
|
|
168
|
+
if (typeof fn !== "function") {
|
|
169
|
+
throw new Error("Module must export a function via module.exports = async function transform(input, ctx) { ... }");
|
|
170
|
+
}
|
|
171
|
+
return fn;
|
|
172
|
+
}
|
|
173
|
+
/** ---------- Self-tests runner ---------- */
|
|
174
|
+
async function runSelfTests(testsCode, transformFn, timeoutMs) {
|
|
175
|
+
const sandbox = {
|
|
176
|
+
console,
|
|
177
|
+
assert: nodeAssert,
|
|
178
|
+
// Provide a minimal require that supports 'assert'
|
|
179
|
+
require: (m) => {
|
|
180
|
+
if (m === "assert" || m === "node:assert")
|
|
181
|
+
return nodeAssert;
|
|
182
|
+
throw new Error(`Disallowed require: ${m}`);
|
|
183
|
+
},
|
|
184
|
+
module: { exports: transformFn },
|
|
185
|
+
exports: {},
|
|
186
|
+
transform: transformFn
|
|
187
|
+
};
|
|
188
|
+
const context = vm.createContext(sandbox);
|
|
189
|
+
const script = new vm.Script(testsCode, { filename: "selftest.js" });
|
|
190
|
+
script.runInContext(context, { timeout: Math.max(200, timeoutMs * 5) });
|
|
191
|
+
}
|
|
192
|
+
/** ---------- Helpers ---------- */
|
|
193
|
+
const ajvLoose = new Ajv({ strict: false, allErrors: true });
|
|
194
|
+
const validatePlan = ajvLoose.compile(CodePlanSchemaForGroq);
|
|
195
|
+
function extractJson(s) {
|
|
196
|
+
const m = s.match(/```json([\s\S]*?)```/i);
|
|
197
|
+
if (m)
|
|
198
|
+
return m[1].trim();
|
|
199
|
+
const i = s.indexOf("{");
|
|
200
|
+
const j = s.lastIndexOf("}");
|
|
201
|
+
return i >= 0 && j > i ? s.slice(i, j + 1) : s;
|
|
202
|
+
}
|
|
203
|
+
function truncate(s, n) { return s && s.length > n ? s.slice(0, n) + " …(truncated)" : s; }
|
|
204
|
+
function trimForPrompt(s) { return truncate(s, 4000); }
|
|
205
|
+
function safeStr(v) { try {
|
|
206
|
+
return JSON.stringify(v);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return String(v);
|
|
210
|
+
} }
|
|
211
|
+
function jsonDeepEqual(a, b) { return safeStr(a) === safeStr(b); }
|
|
212
|
+
function logVerbose(opts, msg) { if (opts && opts.verbose)
|
|
213
|
+
console.log(msg); }
|
|
214
|
+
function makeCtx(opts, extra = {}) {
|
|
215
|
+
return {
|
|
216
|
+
log: (...a) => console.log("[autogen]", ...a),
|
|
217
|
+
now: () => new Date().toISOString(),
|
|
218
|
+
...(opts.allowNet ? { fetch } : {}),
|
|
219
|
+
...extra
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
function callWithTimeout(fn, ms) {
|
|
223
|
+
return new Promise((resolve, reject) => {
|
|
224
|
+
let done = false;
|
|
225
|
+
const t = setTimeout(() => { if (!done)
|
|
226
|
+
reject(new Error("Transform timeout")); }, ms);
|
|
227
|
+
Promise.resolve()
|
|
228
|
+
.then(fn)
|
|
229
|
+
.then(v => { done = true; clearTimeout(t); resolve(v); })
|
|
230
|
+
.catch(e => { done = true; clearTimeout(t); reject(e); });
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
/** ---------- Main: generate + compile with repair loop ---------- */
|
|
234
|
+
/** @param {GenOptions} opts */
|
|
235
|
+
export async function generateJsTransformFromPrompt(opts) {
|
|
236
|
+
const model = opts.model ?? "meta-llama/llama-4-maverick-17b-128e-instruct";
|
|
237
|
+
const maxExecMs = opts.maxExecMs ?? 200;
|
|
238
|
+
const retries = Math.max(0, opts.retries ?? 2);
|
|
239
|
+
let repairNotes = [];
|
|
240
|
+
let attempt = 0;
|
|
241
|
+
let lastCode = "";
|
|
242
|
+
let lastTests = "";
|
|
243
|
+
for (attempt = 0; attempt <= retries; attempt++) {
|
|
244
|
+
const repairContext = repairNotes.length ? trimForPrompt(repairNotes.join("\n")) : undefined;
|
|
245
|
+
const prompt = buildCodeGenPrompt(opts, repairContext);
|
|
246
|
+
let raw = await groqStructuredCall(prompt, CodePlanSchemaForGroq, model);
|
|
247
|
+
// Parse + validate plan JSON
|
|
248
|
+
let plan;
|
|
249
|
+
try {
|
|
250
|
+
raw = extractJson(raw);
|
|
251
|
+
plan = JSON.parse(raw);
|
|
252
|
+
if (!validatePlan(plan)) {
|
|
253
|
+
throw new Error("Plan JSON failed schema validation: " + ajvLoose.errorsText(validatePlan.errors));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch (e) {
|
|
257
|
+
repairNotes.push(`PLAN_VALIDATION_ERROR: ${truncate(String(e.message || e), 800)}`);
|
|
258
|
+
logVerbose(opts, `⛑️ Repairing (plan invalid): ${String(e.message || e)}`);
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
lastPlan = plan;
|
|
262
|
+
const code = String(plan.file?.content || "");
|
|
263
|
+
const tests = plan.tests?.content ? String(plan.tests.content) : "";
|
|
264
|
+
// Try to compile
|
|
265
|
+
let transformFn;
|
|
266
|
+
try {
|
|
267
|
+
transformFn = compileTransform(code, maxExecMs);
|
|
268
|
+
}
|
|
269
|
+
catch (e) {
|
|
270
|
+
repairNotes.push(`COMPILE_ERROR: ${truncate(String(e.message || e), 800)}\n--- CODE START ---\n${truncate(code, 1200)}\n--- CODE END ---`);
|
|
271
|
+
logVerbose(opts, `⛑️ Repairing (compile): ${String(e.message || e)}`);
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
// Run self-tests if present
|
|
275
|
+
if (tests) {
|
|
276
|
+
try {
|
|
277
|
+
await runSelfTests(tests, transformFn, maxExecMs);
|
|
278
|
+
}
|
|
279
|
+
catch (e) {
|
|
280
|
+
repairNotes.push(`TEST_ERROR: ${truncate(String(e), 800)}\n--- TESTS START ---\n${truncate(tests, 800)}\n--- TESTS END ---`);
|
|
281
|
+
logVerbose(opts, `⛑️ Repairing (tests): ${String(e)}`);
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// Validate examples if provided
|
|
286
|
+
if (opts.examples?.length) {
|
|
287
|
+
const mismatches = [];
|
|
288
|
+
for (let i = 0; i < opts.examples.length; i++) {
|
|
289
|
+
const ex = opts.examples[i];
|
|
290
|
+
if (typeof ex.output === "undefined")
|
|
291
|
+
continue;
|
|
292
|
+
try {
|
|
293
|
+
const got = await callWithTimeout(() => transformFn(ex.input, makeCtx(opts)), maxExecMs);
|
|
294
|
+
if (!jsonDeepEqual(ex.output, got)) {
|
|
295
|
+
mismatches.push(`Example #${i}: expected ${safeStr(ex.output)} but got ${safeStr(got)}`);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
catch (e) {
|
|
299
|
+
mismatches.push(`Example #${i}: execution error: ${truncate(String(e.message || e), 400)}`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (mismatches.length) {
|
|
303
|
+
repairNotes.push(`EXAMPLE_MISMATCH:\n${mismatches.map(m => "- " + m).join("\n")}`);
|
|
304
|
+
logVerbose(opts, `⛑️ Repairing (examples):\n${mismatches.join("\n")}`);
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// SUCCESS
|
|
309
|
+
lastCode = code;
|
|
310
|
+
lastTests = tests || undefined;
|
|
311
|
+
return {
|
|
312
|
+
code: lastCode,
|
|
313
|
+
tests: lastTests,
|
|
314
|
+
notes: plan.notes,
|
|
315
|
+
plan,
|
|
316
|
+
attempts: attempt + 1,
|
|
317
|
+
transform: async (input, ctx = {}) => {
|
|
318
|
+
const tf = compileTransform(lastCode, maxExecMs); // recompile fresh
|
|
319
|
+
const out = await callWithTimeout(() => tf(input, makeCtx(opts, ctx)), maxExecMs);
|
|
320
|
+
return out;
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
// All attempts failed
|
|
325
|
+
const errMsg = `Failed after ${attempt} attempt(s).\nReasons:\n${repairNotes.join("\n")}`;
|
|
326
|
+
throw new Error(errMsg);
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=generateJsTransformFromPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateJsTransformFromPrompt.js","sourceRoot":"","sources":["../../src/services/generateJsTransformFromPrompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads JSON from inputJsonPath, downloads Firebase Storage URLs, rewrites values, and writes JSON.
|
|
3
|
+
*
|
|
4
|
+
* @param {object} opts
|
|
5
|
+
* @param {string} [opts.inputJsonPath] - Path to the input JSON file
|
|
6
|
+
* @param {object} [opts.inputJson] - Input JSON object (alternative to inputJsonPath)
|
|
7
|
+
* @param {string} [opts.outputJsonPath] - Path to write updated JSON (defaults to inputJsonPath)
|
|
8
|
+
* @param {string} opts.baseFolder - Base folder to store downloads
|
|
9
|
+
* @param {string} opts.targetFolder - Folder under baseFolder, also used as the relative path in JSON
|
|
10
|
+
* @param {string} [opts.urlPrefix] - URL prefix to match
|
|
11
|
+
* @param {string} [opts.extension] - File extension to use (default "png")
|
|
12
|
+
* @param {number} [opts.concurrency] - Parallel downloads (default 6)
|
|
13
|
+
* @returns {Promise<{updated: any, replacedCount: number, downloads: Array<{url: string, relativePath: string}>}>}
|
|
14
|
+
*/
|
|
15
|
+
export declare function localizeFirebaseStorageUrls(opts: any): Promise<{
|
|
16
|
+
updated: any;
|
|
17
|
+
replacedCount: number;
|
|
18
|
+
downloads: any[];
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=localizeFirebaseMedia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localizeFirebaseMedia.d.ts","sourceRoot":"","sources":["../../src/services/localizeFirebaseMedia.ts"],"names":[],"mappings":"AAqCA;;;;;;;;;;;;;GAaG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,KAAA;;;;GAkGrD"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// localizeFirebaseMedia.js
|
|
2
|
+
// Node 18+ (global fetch). If you're on older Node, install undici and set globalThis.fetch.
|
|
3
|
+
import { promises as fs } from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import crypto from "node:crypto";
|
|
6
|
+
function toPosixPath(p) {
|
|
7
|
+
return p.split(path.sep).join("/");
|
|
8
|
+
}
|
|
9
|
+
async function ensureDir(dirPath) {
|
|
10
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
11
|
+
}
|
|
12
|
+
async function downloadToFile(url, destPath) {
|
|
13
|
+
const res = await fetch(url);
|
|
14
|
+
if (!res.ok) {
|
|
15
|
+
throw new Error(`Download failed(${res.status}) for URL: ${url} `);
|
|
16
|
+
}
|
|
17
|
+
const buf = Buffer.from(await res.arrayBuffer());
|
|
18
|
+
await fs.writeFile(destPath, buf);
|
|
19
|
+
}
|
|
20
|
+
async function runWithConcurrency(items, limit, worker) {
|
|
21
|
+
const executing = new Set();
|
|
22
|
+
for (const item of items) {
|
|
23
|
+
const p = Promise.resolve().then(() => worker(item));
|
|
24
|
+
executing.add(p);
|
|
25
|
+
p.finally(() => executing.delete(p));
|
|
26
|
+
if (executing.size >= limit) {
|
|
27
|
+
await Promise.race(executing);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
await Promise.all(executing);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Reads JSON from inputJsonPath, downloads Firebase Storage URLs, rewrites values, and writes JSON.
|
|
34
|
+
*
|
|
35
|
+
* @param {object} opts
|
|
36
|
+
* @param {string} [opts.inputJsonPath] - Path to the input JSON file
|
|
37
|
+
* @param {object} [opts.inputJson] - Input JSON object (alternative to inputJsonPath)
|
|
38
|
+
* @param {string} [opts.outputJsonPath] - Path to write updated JSON (defaults to inputJsonPath)
|
|
39
|
+
* @param {string} opts.baseFolder - Base folder to store downloads
|
|
40
|
+
* @param {string} opts.targetFolder - Folder under baseFolder, also used as the relative path in JSON
|
|
41
|
+
* @param {string} [opts.urlPrefix] - URL prefix to match
|
|
42
|
+
* @param {string} [opts.extension] - File extension to use (default "png")
|
|
43
|
+
* @param {number} [opts.concurrency] - Parallel downloads (default 6)
|
|
44
|
+
* @returns {Promise<{updated: any, replacedCount: number, downloads: Array<{url: string, relativePath: string}>}>}
|
|
45
|
+
*/
|
|
46
|
+
export async function localizeFirebaseStorageUrls(opts) {
|
|
47
|
+
const { inputJsonPath, inputJson, outputJsonPath = inputJsonPath, baseFolder, targetFolder, urlPrefix = "https://firebasestorage.googleapis.com/v0", extension = "png", concurrency = 6, apiPrefix = null } = opts ?? {};
|
|
48
|
+
if ((!inputJsonPath && !inputJson) || !baseFolder || !targetFolder) {
|
|
49
|
+
throw new Error("Missing required args: inputJsonPath or inputJson, baseFolder, targetFolder");
|
|
50
|
+
}
|
|
51
|
+
let json;
|
|
52
|
+
if (inputJson) {
|
|
53
|
+
json = JSON.parse(JSON.stringify(inputJson));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const raw = await fs.readFile(inputJsonPath, "utf8");
|
|
57
|
+
json = JSON.parse(raw);
|
|
58
|
+
}
|
|
59
|
+
const absBase = path.resolve(baseFolder);
|
|
60
|
+
const absTargetDir = path.join(absBase, targetFolder);
|
|
61
|
+
await ensureDir(absTargetDir);
|
|
62
|
+
/** @type {Array<{url: string, set: (v: string) => void}>} */
|
|
63
|
+
const tasks = [];
|
|
64
|
+
// Collect tasks by walking the object tree
|
|
65
|
+
(function walk(node) {
|
|
66
|
+
if (!node)
|
|
67
|
+
return;
|
|
68
|
+
if (Array.isArray(node)) {
|
|
69
|
+
for (let i = 0; i < node.length; i++) {
|
|
70
|
+
const v = node[i];
|
|
71
|
+
if (typeof v === "string" && v.startsWith(urlPrefix)) {
|
|
72
|
+
tasks.push({ url: v, set: (newVal) => (node[i] = newVal) });
|
|
73
|
+
}
|
|
74
|
+
else if (typeof v === "object" && v !== null) {
|
|
75
|
+
walk(v);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (typeof node === "object") {
|
|
81
|
+
for (const k of Object.keys(node)) {
|
|
82
|
+
const v = node[k];
|
|
83
|
+
if (typeof v === "string" && v.startsWith(urlPrefix)) {
|
|
84
|
+
tasks.push({ url: v, set: (newVal) => (node[k] = newVal) });
|
|
85
|
+
}
|
|
86
|
+
else if (typeof v === "object" && v !== null) {
|
|
87
|
+
walk(v);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
})(json);
|
|
92
|
+
// Deduplicate downloads for repeated URLs
|
|
93
|
+
const urlToRelative = new Map();
|
|
94
|
+
const downloads = [];
|
|
95
|
+
await runWithConcurrency(tasks, concurrency, async ({ url, set }) => {
|
|
96
|
+
if (urlToRelative.has(url)) {
|
|
97
|
+
set(urlToRelative.get(url));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const guid = crypto.randomUUID();
|
|
101
|
+
const filename = `${guid}.${extension}`;
|
|
102
|
+
// relative path stored in JSON (posix style)
|
|
103
|
+
const relativePath = toPosixPath(path.join(targetFolder, filename));
|
|
104
|
+
// actual file path on disk
|
|
105
|
+
const absPath = path.join(absBase, targetFolder, filename);
|
|
106
|
+
await downloadToFile(url, absPath);
|
|
107
|
+
let finalPath = relativePath;
|
|
108
|
+
if (apiPrefix) {
|
|
109
|
+
finalPath = apiPrefix.endsWith('/')
|
|
110
|
+
? `${apiPrefix}${relativePath}`
|
|
111
|
+
: `${apiPrefix}/${relativePath}`;
|
|
112
|
+
}
|
|
113
|
+
urlToRelative.set(url, finalPath);
|
|
114
|
+
downloads.push({ url, relativePath });
|
|
115
|
+
set(finalPath);
|
|
116
|
+
});
|
|
117
|
+
if (outputJsonPath) {
|
|
118
|
+
await fs.writeFile(outputJsonPath, JSON.stringify(json, null, 2), "utf8");
|
|
119
|
+
}
|
|
120
|
+
return { updated: json, replacedCount: tasks.length, downloads };
|
|
121
|
+
}
|
|
122
|
+
/* Example usage:
|
|
123
|
+
import { localizeFirebaseStorageUrls } from "./localizeFirebaseMedia.js";
|
|
124
|
+
|
|
125
|
+
const result = await localizeFirebaseStorageUrls({
|
|
126
|
+
inputJsonPath: "./workflow.json",
|
|
127
|
+
outputJsonPath: "./workflow.local.json",
|
|
128
|
+
baseFolder: "./base_folder",
|
|
129
|
+
targetFolder: "target_folder",
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
console.log("Replaced:", result.replacedCount);
|
|
133
|
+
console.log("Downloaded:", result.downloads.length);
|
|
134
|
+
*/
|
|
135
|
+
//# sourceMappingURL=localizeFirebaseMedia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localizeFirebaseMedia.js","sourceRoot":"","sources":["../../src/services/localizeFirebaseMedia.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,6FAA6F;AAE7F,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,SAAS,WAAW,CAAC,CAAC;IAClB,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAO;IAC5B,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,GAAG,EAAE,QAAQ;IACvC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM;IAClD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,SAAS,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,IAAI;IAClD,MAAM,EACF,aAAa,EACb,SAAS,EACT,cAAc,GAAG,aAAa,EAC9B,UAAU,EACV,YAAY,EACZ,SAAS,GAAG,2CAA2C,EACvD,SAAS,GAAG,KAAK,EACjB,WAAW,GAAG,CAAC,EACf,SAAS,GAAG,IAAI,EACnB,GAAG,IAAI,IAAI,EAAE,CAAC;IAEf,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACnG,CAAC;IAED,IAAI,IAAI,CAAC;IACT,IAAI,SAAS,EAAE,CAAC;QACZ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,YAAY,CAAC,CAAC;IAE9B,6DAA6D;IAC7D,MAAM,KAAK,GAAG,EAAE,CAAC;IAEjB,2CAA2C;IAC3C,CAAC,SAAS,IAAI,CAAC,IAAI;QACf,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACnD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChE,CAAC;qBAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC7C,IAAI,CAAC,CAAC,CAAC,CAAC;gBACZ,CAAC;YACL,CAAC;YACD,OAAO;QACX,CAAC;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACnD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChE,CAAC;qBAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC7C,IAAI,CAAC,CAAC,CAAC,CAAC;gBACZ,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAET,0CAA0C;IAC1C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,EAAE,CAAC;IAErB,MAAM,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;QAChE,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,SAAS,EAAE,CAAC;QAExC,6CAA6C;QAC7C,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;QAEpE,2BAA2B;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QAE3D,MAAM,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEnC,IAAI,SAAS,GAAG,YAAY,CAAC;QAC7B,IAAI,SAAS,EAAE,CAAC;YACZ,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC/B,CAAC,CAAC,GAAG,SAAS,GAAG,YAAY,EAAE;gBAC/B,CAAC,CAAC,GAAG,SAAS,IAAI,YAAY,EAAE,CAAC;QACzC,CAAC;QAED,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAClC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;QACtC,GAAG,CAAC,SAAS,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,IAAI,cAAc,EAAE,CAAC;QACjB,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;EAYE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfill_canvas.d.ts","sourceRoot":"","sources":["../../src/services/polyfill_canvas.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createCanvas, Image } from "canvas";
|
|
2
|
+
if (!global.Canvas) {
|
|
3
|
+
global.Canvas = createCanvas(1, 1).constructor;
|
|
4
|
+
}
|
|
5
|
+
if (!global.Image) {
|
|
6
|
+
global.Image = Image;
|
|
7
|
+
}
|
|
8
|
+
// Force pdfjs to use Image, not createImageBitmap (which might be incompatible with node-canvas)
|
|
9
|
+
// Node 21+ has createImageBitmap but it produces objects that node-canvas doesn't accept in drawImage
|
|
10
|
+
if (global.createImageBitmap) {
|
|
11
|
+
global.createImageBitmap = undefined;
|
|
12
|
+
}
|
|
13
|
+
if (global.OffscreenCanvas) {
|
|
14
|
+
global.OffscreenCanvas = undefined;
|
|
15
|
+
}
|
|
16
|
+
if (global.URL && global.URL.createObjectURL) {
|
|
17
|
+
global.URL.createObjectURL = undefined;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=polyfill_canvas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfill_canvas.js","sourceRoot":"","sources":["../../src/services/polyfill_canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAA4B,MAAM,QAAQ,CAAC;AAEvE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;AACnD,CAAC;AACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,CAAC;AAED,iGAAiG;AACjG,sGAAsG;AACtG,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAC3B,MAAM,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACzC,CAAC;AACD,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;IACzB,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC;AACvC,CAAC;AACD,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;IAC3C,MAAM,CAAC,GAAG,CAAC,eAAe,GAAG,SAAS,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function promptRoutes(app: any): Promise<void>;
|
|
2
|
+
export function analyzeImageForTextAndIcons(base64Image: any, model: any): Promise<{
|
|
3
|
+
rawResponse: any;
|
|
4
|
+
parsed: any;
|
|
5
|
+
}>;
|
|
6
|
+
export const IMAGE_TEXT_ICON_DETECTOR_PROMPT: "Prompt: Image Text & Icon Detector\n\nYou are a precise visual-analysis model.\n\nYou are given one image.\nYour task is to inspect the image and determine:\n\nWhether any text is present.\n\nIf so, extract the exact text (OCR-style, as accurately as possible).\n\nWhether the image contains any icon-like graphics (symbols, UI icons, logos, small vector shapes, emojis, etc.).\n\nOutput Format\n\nRespond only with valid JSON using this schema:\n\n{\n \"hasText\": boolean,\n \"text\": \"string of detected text, or empty string if none\",\n \"hasIcon\": boolean\n}\n\nRules\n\nhasText is true if any legible text appears in the image.\n\ntext must contain the text exactly as visible.\n\nhasIcon is true if the image contains any graphic element that is not a photo of a real object (e.g., UI icons, logos, stylized symbols, arrows, emoji-style graphics).\n\nIf values are unknown or not visible, treat them as false or empty string.\n\nNo explanations. No commentary. JSON only.";
|
|
7
|
+
//# sourceMappingURL=promptRoutes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptRoutes.d.ts","sourceRoot":"","sources":["../../src/services/promptRoutes.js"],"names":[],"mappings":"AAEA,sDA0BC;AAED;;;GAIC;AAED,ygCAiC4C"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { processLLMResponse, runImagePromptGrok, runPromptGrok, runPrompt } from "./services/runPrompt.js";
|
|
2
|
+
|
|
3
|
+
export async function promptRoutes(app) {
|
|
4
|
+
|
|
5
|
+
app.post('/api/prompts/chat', async (req, res) => {
|
|
6
|
+
try {
|
|
7
|
+
const { messages, model, max_tokens, jsonMode, timeout } = req.body;
|
|
8
|
+
const response = await runPrompt(messages, model, [], jsonMode, timeout);
|
|
9
|
+
res.json({ success: true, result: response });
|
|
10
|
+
} catch (error) {
|
|
11
|
+
console.error('Error in /api/prompts/chat:', error);
|
|
12
|
+
res.status(500).json({ success: false, error: error.message });
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
app.post('/api/prompts/image-check', async (req, res) => {
|
|
17
|
+
let result = null;
|
|
18
|
+
try {
|
|
19
|
+
const { base64_image, model } = req.body;
|
|
20
|
+
const analysis = await analyzeImageForTextAndIcons(base64_image, model);
|
|
21
|
+
result = analysis.rawResponse;
|
|
22
|
+
let parsed = analysis.parsed;
|
|
23
|
+
res.json({ success: true, result: parsed });
|
|
24
|
+
} catch (error) {
|
|
25
|
+
console.error('Error in /api/midjourney/run-image-prompt-grok:', error);
|
|
26
|
+
res.status(500).json({ success: false, error: error.message, result });
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export async function analyzeImageForTextAndIcons(base64Image, model) {
|
|
32
|
+
const rawResponse = await runImagePromptGrok(IMAGE_TEXT_ICON_DETECTOR_PROMPT, base64Image, model);
|
|
33
|
+
const parsed = await processLLMResponse(rawResponse, model);
|
|
34
|
+
return { rawResponse, parsed };
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const IMAGE_TEXT_ICON_DETECTOR_PROMPT = `Prompt: Image Text & Icon Detector
|
|
38
|
+
|
|
39
|
+
You are a precise visual-analysis model.
|
|
40
|
+
|
|
41
|
+
You are given one image.
|
|
42
|
+
Your task is to inspect the image and determine:
|
|
43
|
+
|
|
44
|
+
Whether any text is present.
|
|
45
|
+
|
|
46
|
+
If so, extract the exact text (OCR-style, as accurately as possible).
|
|
47
|
+
|
|
48
|
+
Whether the image contains any icon-like graphics (symbols, UI icons, logos, small vector shapes, emojis, etc.).
|
|
49
|
+
|
|
50
|
+
Output Format
|
|
51
|
+
|
|
52
|
+
Respond only with valid JSON using this schema:
|
|
53
|
+
|
|
54
|
+
{
|
|
55
|
+
"hasText": boolean,
|
|
56
|
+
"text": "string of detected text, or empty string if none",
|
|
57
|
+
"hasIcon": boolean
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
Rules
|
|
61
|
+
|
|
62
|
+
hasText is true if any legible text appears in the image.
|
|
63
|
+
|
|
64
|
+
text must contain the text exactly as visible.
|
|
65
|
+
|
|
66
|
+
hasIcon is true if the image contains any graphic element that is not a photo of a real object (e.g., UI icons, logos, stylized symbols, arrows, emoji-style graphics).
|
|
67
|
+
|
|
68
|
+
If values are unknown or not visible, treat them as false or empty string.
|
|
69
|
+
|
|
70
|
+
No explanations. No commentary. JSON only.`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptRoutes.js","sourceRoot":"","sources":["../../src/services/promptRoutes.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAE3G,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAG;IAEpC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YACpE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACpD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtD,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACxE,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC;YAC9B,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;YACxE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,WAAW,EAAE,KAAK;IAClE,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,+BAA+B,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAClG,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAiCJ,CAAC"}
|