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,39 @@
|
|
|
1
|
+
import { UiPlanner } from './uiPlanner.js';
|
|
2
|
+
export declare class StepByStepAiPlanner extends UiPlanner {
|
|
3
|
+
/**
|
|
4
|
+
* @param {Object} uiMap
|
|
5
|
+
* @param {Object} pathFinder
|
|
6
|
+
* @param {Object} [macroRegistry]
|
|
7
|
+
* @param {Array} [automationFiles]
|
|
8
|
+
*/
|
|
9
|
+
constructor(uiMap: any, pathFinder: any, macroRegistry?: {}, automationFiles?: any[]);
|
|
10
|
+
/**
|
|
11
|
+
* Iteratively builds a plan one step at a time, validating each step before proceeding.
|
|
12
|
+
* Uses the dependencyGraph (if provided in context) to guide the planning.
|
|
13
|
+
*
|
|
14
|
+
* @param {string} request
|
|
15
|
+
* @param {string} startStateId
|
|
16
|
+
* @param {Object} context - Must include 'dependencyGraph' if available.
|
|
17
|
+
* @param {string} model
|
|
18
|
+
* @returns {Promise<Object>} The compiled plan.
|
|
19
|
+
*/
|
|
20
|
+
plan(request: any, startStateId?: string, context?: {}, model?: string): Promise<{
|
|
21
|
+
steps: any[];
|
|
22
|
+
}>;
|
|
23
|
+
_identifyKeySteps(request: any, actionsSummary: any, model: any): Promise<any>;
|
|
24
|
+
_buildStepLookup(files: any): Map<any, any>;
|
|
25
|
+
_predictNextStep(request: any, currentPlan: any, currentState: any, uiMapSummary: any, graphSummary: any, errors: any, context: any, model: any): Promise<any>;
|
|
26
|
+
_validateSingleStep(step: any, currentState: any, dependencyGraph: any): {
|
|
27
|
+
valid: boolean;
|
|
28
|
+
error: string;
|
|
29
|
+
inferredState?: undefined;
|
|
30
|
+
} | {
|
|
31
|
+
valid: boolean;
|
|
32
|
+
inferredState: any;
|
|
33
|
+
error?: undefined;
|
|
34
|
+
};
|
|
35
|
+
_getUiMapSummary(): string;
|
|
36
|
+
_getDependencyGraphSummary(graph: any, stepIndex: any): string;
|
|
37
|
+
_getActionsSummary(): string;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=stepByStepAiPlanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepByStepAiPlanner.d.ts","sourceRoot":"","sources":["../../src/services/stepByStepAiPlanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,qBAAa,mBAAoB,SAAQ,SAAS;IAC9C;;;;;OAKG;gBACS,KAAK,KAAA,EAAE,UAAU,KAAA,EAAE,aAAa,KAAK,EAAE,eAAe,QAAK;IAIvE;;;;;;;;;OASG;IACG,IAAI,CAAC,OAAO,KAAA,EAAE,YAAY,SAAS,EAAE,OAAO,KAAK,EAAE,KAAK,SAAuB;;;IAiF/E,iBAAiB,CAAC,OAAO,KAAA,EAAE,cAAc,KAAA,EAAE,KAAK,KAAA;IAgFtD,gBAAgB,CAAC,KAAK,KAAA;IAqBhB,gBAAgB,CAAC,OAAO,KAAA,EAAE,WAAW,KAAA,EAAE,YAAY,KAAA,EAAE,YAAY,KAAA,EAAE,YAAY,KAAA,EAAE,MAAM,KAAA,EAAE,OAAO,KAAA,EAAE,KAAK,KAAA;IAoD7G,mBAAmB,CAAC,IAAI,KAAA,EAAE,YAAY,KAAA,EAAE,eAAe,KAAA;;;;;;;;;IAqEvD,gBAAgB;IAkBhB,0BAA0B,CAAC,KAAK,KAAA,EAAE,SAAS,KAAA;IA0C3C,kBAAkB;CA2BrB"}
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import { UiPlanner } from './uiPlanner.js';
|
|
2
|
+
import { runPrompt, processLLMResponse } from './runPrompt.js';
|
|
3
|
+
export class StepByStepAiPlanner extends UiPlanner {
|
|
4
|
+
/**
|
|
5
|
+
* @param {Object} uiMap
|
|
6
|
+
* @param {Object} pathFinder
|
|
7
|
+
* @param {Object} [macroRegistry]
|
|
8
|
+
* @param {Array} [automationFiles]
|
|
9
|
+
*/
|
|
10
|
+
constructor(uiMap, pathFinder, macroRegistry = {}, automationFiles = []) {
|
|
11
|
+
super(uiMap, pathFinder, macroRegistry, automationFiles);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Iteratively builds a plan one step at a time, validating each step before proceeding.
|
|
15
|
+
* Uses the dependencyGraph (if provided in context) to guide the planning.
|
|
16
|
+
*
|
|
17
|
+
* @param {string} request
|
|
18
|
+
* @param {string} startStateId
|
|
19
|
+
* @param {Object} context - Must include 'dependencyGraph' if available.
|
|
20
|
+
* @param {string} model
|
|
21
|
+
* @returns {Promise<Object>} The compiled plan.
|
|
22
|
+
*/
|
|
23
|
+
async plan(request, startStateId = 'home', context = {}, model = 'gpt-5.2-2025-12-11') {
|
|
24
|
+
const dependencyGraph = context.dependencyGraph || { nodes: [], edges: [] };
|
|
25
|
+
// Index all steps from automation files for lookup by ID or Field Name
|
|
26
|
+
const stepLookup = this._buildStepLookup(this.automationFiles);
|
|
27
|
+
if (stepLookup.has(startStateId)) {
|
|
28
|
+
const startStep = stepLookup.get(startStateId);
|
|
29
|
+
const meta = startStep.selfLearningMetadata || startStep.params?.selfLearningMetadata || startStep.param?.selfLearningMetadata;
|
|
30
|
+
const resolvedLocation = meta?.location_2 || meta?.location || startStep.location || startStep.params?.location;
|
|
31
|
+
if (resolvedLocation) {
|
|
32
|
+
console.log(`Resolved startStateId "${startStateId}" to location "${resolvedLocation}" from step definition.`);
|
|
33
|
+
startStateId = resolvedLocation;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
await new Promise(r => setTimeout(r, 10000)); // slight delay for logging clarity
|
|
37
|
+
console.log('StepByStepAiPlanner: Starting Key Step Identification');
|
|
38
|
+
console.log('Dependency Graph Nodes:', dependencyGraph.nodes?.length);
|
|
39
|
+
// 1. Prepare static context (UI Map fields, Dependency Graph summary)
|
|
40
|
+
// const uiMapSummary = this._getUiMapSummary();
|
|
41
|
+
// const graphSummary = this._getDependencyGraphSummary(dependencyGraph, stepLookup);
|
|
42
|
+
const actionsSummary = this._getActionsSummary();
|
|
43
|
+
// 2. Identify the Key Steps (High-Level Plan)
|
|
44
|
+
const rawKeySteps = await this._identifyKeySteps(request, actionsSummary, model);
|
|
45
|
+
console.log(`StepByStepAiPlanner: Identified ${rawKeySteps.length} raw key steps.`);
|
|
46
|
+
// Hydrate ID-based key steps from Automation Files
|
|
47
|
+
const keySteps = [];
|
|
48
|
+
for (const stepIdRaw of rawKeySteps) {
|
|
49
|
+
// Handle both string ID and legacy object format
|
|
50
|
+
const stepId = typeof stepIdRaw === 'string' ? stepIdRaw : (stepIdRaw.field || stepIdRaw.id);
|
|
51
|
+
if (stepLookup.has(stepId)) {
|
|
52
|
+
keySteps.push(stepLookup.get(stepId));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
console.warn(`Skipping key step ID "${stepId}" because it was not found in automation files.`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
console.log(`StepByStepAiPlanner: Validated ${keySteps.length} key steps.`);
|
|
59
|
+
// 3. Resolve Target States for Key Steps (Preparation for Routing)
|
|
60
|
+
// We need to hint to the pathfinder where these fields live.
|
|
61
|
+
const planOps = [];
|
|
62
|
+
for (const step of keySteps) {
|
|
63
|
+
// Basic structure needed for compile()
|
|
64
|
+
const op = { ...step };
|
|
65
|
+
// Ensure 'field' is present if hidden in metadata (needed for state lookup below)
|
|
66
|
+
const meta = op.selfLearningMetadata || op.params?.selfLearningMetadata || op.param?.selfLearningMetadata;
|
|
67
|
+
if (!op.field && meta && meta.field) {
|
|
68
|
+
op.field = meta.field;
|
|
69
|
+
}
|
|
70
|
+
// Try to resolve targetStateId via index
|
|
71
|
+
if (op.field) {
|
|
72
|
+
const states = this.indexes.fieldToStateIds.get(op.field);
|
|
73
|
+
if (states && states.length > 0) {
|
|
74
|
+
op.targetStateId = states[0]; // Heuristic: Pick first occurrence
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
planOps.push(op);
|
|
78
|
+
}
|
|
79
|
+
// 4. Compile the Route (Pathfinding)
|
|
80
|
+
// This traverses the Key Steps and uses pathFinder to inject navigation steps between them.
|
|
81
|
+
const compiled = this.compile(planOps, startStateId);
|
|
82
|
+
// 5. Describe the Final Plan
|
|
83
|
+
compiled.description = await this._generatePlanDescription(compiled.steps, request, model);
|
|
84
|
+
return compiled;
|
|
85
|
+
}
|
|
86
|
+
async _identifyKeySteps(request, actionsSummary, model) {
|
|
87
|
+
// Build a prompt that focuses on ORDER and SELECTION of critical nodes
|
|
88
|
+
console.log(`actionsSummary length: ${actionsSummary.length}`);
|
|
89
|
+
console.log(actionsSummary);
|
|
90
|
+
const systemPrompt = `
|
|
91
|
+
You are an expert Automation Strategist.
|
|
92
|
+
Your goal is to identify the "Key Steps" required to satisfy the User Request.
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
OUTPUT SCHEMA (JSON):
|
|
96
|
+
{
|
|
97
|
+
"keySteps": [
|
|
98
|
+
"ID_OF_STEP_1",
|
|
99
|
+
"ID_OF_STEP_2"
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
AVAILABLE ACTIONS (Detailed Descriptions):
|
|
104
|
+
${actionsSummary}
|
|
105
|
+
|
|
106
|
+
`;
|
|
107
|
+
console.log("Identifying key steps with prompt context length:", systemPrompt.length);
|
|
108
|
+
const response = await runPrompt([{ role: 'system', content: systemPrompt }, { role: 'user', content: typeof request === 'object' ? JSON.stringify(request) : request }], model);
|
|
109
|
+
let result = {};
|
|
110
|
+
// 1. Try standard processing
|
|
111
|
+
try {
|
|
112
|
+
console.log('--- Raw LLM Response for Key Steps ---');
|
|
113
|
+
console.log(response);
|
|
114
|
+
console.log('--- End of Raw LLM Response ---');
|
|
115
|
+
const standardResult = await processLLMResponse(response, model, 'openai');
|
|
116
|
+
console.log(standardResult);
|
|
117
|
+
console.log("********** processLLMResponse returned **************", JSON.stringify(standardResult));
|
|
118
|
+
if (standardResult && typeof standardResult === 'object' && Array.isArray(standardResult.keySteps)) {
|
|
119
|
+
result = standardResult;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
console.log("processLLMResponse returned invalid structure:", JSON.stringify(standardResult));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
console.warn("processLLMResponse threw error:", e);
|
|
127
|
+
}
|
|
128
|
+
// 2. Fallback: Aggressive manual parse if keySteps missing
|
|
129
|
+
if (!result.keySteps) {
|
|
130
|
+
console.log("Attempting aggressive manual JSON extraction from response...");
|
|
131
|
+
try {
|
|
132
|
+
// Find the first outer brace pair
|
|
133
|
+
const match = response.match(/\{[\s\S]*\}/);
|
|
134
|
+
if (match) {
|
|
135
|
+
const candidate = match[0];
|
|
136
|
+
// Try parsing
|
|
137
|
+
const parsed = JSON.parse(candidate);
|
|
138
|
+
if (parsed && Array.isArray(parsed.keySteps)) {
|
|
139
|
+
result = parsed;
|
|
140
|
+
console.log("Manual extraction successful.");
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
console.warn("Manual parsing failed:", e);
|
|
146
|
+
// Last ditch: try to clean markdown if it exists but regex missed it
|
|
147
|
+
try {
|
|
148
|
+
const clean = response.replace(/```json/g, '').replace(/```/g, '').trim();
|
|
149
|
+
if (clean.startsWith('{')) {
|
|
150
|
+
const parsed = JSON.parse(clean);
|
|
151
|
+
if (parsed.keySteps)
|
|
152
|
+
result = parsed;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (z) { }
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const steps = result.keySteps || [];
|
|
159
|
+
console.log(`Identified ${steps.length} key steps from raw response.`);
|
|
160
|
+
if (steps.length === 0) {
|
|
161
|
+
console.log("Raw Response was:", response);
|
|
162
|
+
}
|
|
163
|
+
return steps;
|
|
164
|
+
}
|
|
165
|
+
_buildStepLookup(files) {
|
|
166
|
+
const lookup = new Map();
|
|
167
|
+
if (!files)
|
|
168
|
+
return lookup;
|
|
169
|
+
for (const file of files) {
|
|
170
|
+
const steps = file.content?.steps || [];
|
|
171
|
+
for (const step of steps) {
|
|
172
|
+
// Index by ID
|
|
173
|
+
if (step.id)
|
|
174
|
+
lookup.set(step.id, step);
|
|
175
|
+
// Index by Metadata Field/Name
|
|
176
|
+
const meta = step.selfLearningMetadata || step.params?.selfLearningMetadata || step.param?.selfLearningMetadata;
|
|
177
|
+
if (meta) {
|
|
178
|
+
const name = meta.field || meta.name;
|
|
179
|
+
if (name)
|
|
180
|
+
lookup.set(name, step);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return lookup;
|
|
185
|
+
}
|
|
186
|
+
async _predictNextStep(request, currentPlan, currentState, uiMapSummary, graphSummary, errors, context, model) {
|
|
187
|
+
const planSummary = currentPlan.map((s, i) => `${i + 1}. [${s.kind}] ${s.field || s.target || s.label} ${s.value ? `(${s.value})` : ''}`).join('\n');
|
|
188
|
+
const systemPrompt = `
|
|
189
|
+
You are an expert UI Automation Planner building a plan STEP BY STEP.
|
|
190
|
+
Your goal is to satisfy the USER REQUEST by adding one valid step at a time.
|
|
191
|
+
|
|
192
|
+
USER REQUEST: "${typeof request === 'object' ? JSON.stringify(request) : request}"
|
|
193
|
+
|
|
194
|
+
CONTEXT:
|
|
195
|
+
- Current Screen State: "${currentState}"
|
|
196
|
+
- UI Map Fields:
|
|
197
|
+
${uiMapSummary}
|
|
198
|
+
|
|
199
|
+
- Dependency Graph (Business Logic / Flow):
|
|
200
|
+
${graphSummary}
|
|
201
|
+
|
|
202
|
+
CURRENT PLAN SO FAR:
|
|
203
|
+
${planSummary || "(No steps yet)"}
|
|
204
|
+
|
|
205
|
+
RECENT ERRORS (Avoid repeating these):
|
|
206
|
+
${errors.join('\n')}
|
|
207
|
+
|
|
208
|
+
INSTRUCTIONS:
|
|
209
|
+
1. Analyze the User Request to identify the starting point in the Dependency Graph.
|
|
210
|
+
2. If a node in the Dependency Graph matches the intent, YOU MUST FOLLOW THE EDGES defined in the graph.
|
|
211
|
+
- Root nodes (nodes with no incoming dependencies for a task) often start a sequence.
|
|
212
|
+
- If Node A connects to Node B, you MUST typically add Node A's step, then Node B's step.
|
|
213
|
+
3. Determine the SINGLE next logical step.
|
|
214
|
+
4. If the plan is already complete and satisfies the request, return "FINISH".
|
|
215
|
+
5. If a step is needed, return "ADD_STEP" with the step details.
|
|
216
|
+
|
|
217
|
+
STEP SCHEMA:
|
|
218
|
+
{
|
|
219
|
+
"action": "ADD_STEP" | "FINISH",
|
|
220
|
+
"step": { // Only required if action is ADD_STEP
|
|
221
|
+
"kind": "setField" | "select" | "navigate" | "commit" | "wait",
|
|
222
|
+
"field": "string (Exact match from UI Map OR Dependency Graph Step Name)",
|
|
223
|
+
"value": "any (if needed)",
|
|
224
|
+
"target": "string (for navigate)",
|
|
225
|
+
"label": "string (for commit)",
|
|
226
|
+
"description": "Short reasoning"
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
Respond ONLY with valid JSON.
|
|
231
|
+
`;
|
|
232
|
+
const response = await runPrompt([{ role: 'system', content: systemPrompt }], model);
|
|
233
|
+
return processLLMResponse(response, model, 'openai');
|
|
234
|
+
}
|
|
235
|
+
_validateSingleStep(step, currentState, dependencyGraph) {
|
|
236
|
+
// 1. Basic Schema Validation
|
|
237
|
+
if (!step.kind)
|
|
238
|
+
return { valid: false, error: "Missing 'kind' in step" };
|
|
239
|
+
let inferredState = currentState;
|
|
240
|
+
// 2. Logic Validation based on UI Map
|
|
241
|
+
if (step.kind === 'setField' || step.kind === 'select' || step.kind === 'wait') {
|
|
242
|
+
const fieldName = step.field;
|
|
243
|
+
const candidateStates = this.indexes.fieldToStateIds.get(fieldName);
|
|
244
|
+
if (!candidateStates || candidateStates.length === 0) {
|
|
245
|
+
// Check automation files fallback
|
|
246
|
+
const inFiles = this.automationFieldIndex ? this.automationFieldIndex.has(fieldName) : false;
|
|
247
|
+
if (inFiles) {
|
|
248
|
+
// We accept it but warn we don't know the exact state
|
|
249
|
+
// We assume the current state or a transition will happen
|
|
250
|
+
// For heuristic, we say valid.
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
return { valid: false, error: `Field "${fieldName}" not found in UI Map or automation files.` };
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
// Check if we are reachable or in the correct state
|
|
258
|
+
// If the field exists in the current state, great.
|
|
259
|
+
if (candidateStates.includes(currentState)) {
|
|
260
|
+
inferredState = currentState;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
// Requires navigation?
|
|
264
|
+
// The planner should ideally output a navigate step first, OR we implicit allow it
|
|
265
|
+
// and let the compiler handle the path finding.
|
|
266
|
+
// However, if we want strict step-by-step, we might enforce navigation.
|
|
267
|
+
// Let's be lenient: if a path exists, we allow it, and the compiler adds the edges.
|
|
268
|
+
// But we update inferredState to where the field is.
|
|
269
|
+
inferredState = candidateStates[0];
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (step.kind === 'navigate') {
|
|
274
|
+
if (!this.uiMap.states[step.target]) {
|
|
275
|
+
return { valid: false, error: `Target state "${step.target}" does not exist.` };
|
|
276
|
+
}
|
|
277
|
+
inferredState = step.target;
|
|
278
|
+
}
|
|
279
|
+
// 3. Dependency Graph Validation
|
|
280
|
+
// If the dependency graph has rules like "Node A must be visited before Node B"
|
|
281
|
+
// We can check if 'step.field' corresponds to a node in the graph, and check its incoming edges.
|
|
282
|
+
if (dependencyGraph && Array.isArray(dependencyGraph.edges)) {
|
|
283
|
+
// Find node corresponding to this step
|
|
284
|
+
const graphNode = dependencyGraph.nodes?.find(n => n.data?.label === step.field || n.data?.step?.name === step.field);
|
|
285
|
+
if (graphNode) {
|
|
286
|
+
// Check prerequisites
|
|
287
|
+
const incomingEdges = dependencyGraph.edges.filter(e => e.target === graphNode.id);
|
|
288
|
+
/*
|
|
289
|
+
for (const edge of incomingEdges) {
|
|
290
|
+
const sourceNode = dependencyGraph.nodes.find(n => n.id === edge.source);
|
|
291
|
+
// Check if sourceNode's acton has been performed in currentPlan
|
|
292
|
+
// This is a complex check requiring mapping plan steps to graph nodes.
|
|
293
|
+
// For now, we'll skip deep graph validation unless explicitly requested,
|
|
294
|
+
// as mapping string steps to graph IDs is non-trivial without more shared IDs.
|
|
295
|
+
}
|
|
296
|
+
*/
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return { valid: true, inferredState };
|
|
300
|
+
}
|
|
301
|
+
_getUiMapSummary() {
|
|
302
|
+
const fields = [];
|
|
303
|
+
for (const [stateId, state] of Object.entries(this.uiMap.states)) {
|
|
304
|
+
if (state.fields) {
|
|
305
|
+
state.fields.forEach(f => {
|
|
306
|
+
fields.push(`- [${stateId}] ${f.name || f.field} (${f.type})`);
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// If empty, fallback to index
|
|
311
|
+
if (fields.length === 0) {
|
|
312
|
+
for (const [field, states] of this.indexes.fieldToStateIds.entries()) {
|
|
313
|
+
fields.push(`- [${states.join(', ')}] ${field}`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return fields.slice(0, 200).join('\n') + (fields.length > 200 ? '\n... (more fields truncated)' : '');
|
|
317
|
+
}
|
|
318
|
+
_getDependencyGraphSummary(graph, stepIndex) {
|
|
319
|
+
if (!graph || !graph.nodes)
|
|
320
|
+
return "No dependency graph available.";
|
|
321
|
+
// Summarize nodes and connections
|
|
322
|
+
const lines = [];
|
|
323
|
+
const nodeMap = new Map(graph.nodes.map(n => [n.id, n]));
|
|
324
|
+
// Collect detailed info for each node using stepIndex
|
|
325
|
+
const nodeDescriptions = graph.nodes.map(n => {
|
|
326
|
+
const stepId = n.data?.stepId; // The ID linking to automation files
|
|
327
|
+
const step = stepIndex ? stepIndex.get(stepId) : null;
|
|
328
|
+
const meta = step?.selfLearningMetadata || n.data?.selfLearningMetadata || {};
|
|
329
|
+
const description = meta.description || meta.desc || "No description";
|
|
330
|
+
const fieldName = meta.field || n.data?.label || n.data?.step?.name || n.id;
|
|
331
|
+
return `Node "${n.id}" matches Step "${fieldName}": ${description}`;
|
|
332
|
+
});
|
|
333
|
+
// List connections
|
|
334
|
+
for (const edge of graph.edges || []) {
|
|
335
|
+
const src = nodeMap.get(edge.source);
|
|
336
|
+
const tgt = nodeMap.get(edge.target);
|
|
337
|
+
if (src && tgt) {
|
|
338
|
+
// Resolve friendly names
|
|
339
|
+
const getFriendlyName = (n) => {
|
|
340
|
+
const sId = n.data?.id;
|
|
341
|
+
const s = stepIndex ? stepIndex.get(sId) : null;
|
|
342
|
+
const m = s?.selfLearningMetadata || n.data?.selfLearningMetadata || {};
|
|
343
|
+
return m.field || n.data?.label || n.id;
|
|
344
|
+
};
|
|
345
|
+
const srcName = getFriendlyName(src);
|
|
346
|
+
const tgtName = getFriendlyName(tgt);
|
|
347
|
+
lines.push(`- Step "${srcName}" (Node ${src.id}) leads to Step "${tgtName}" (Node ${tgt.id})`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return `Graph Nodes Detail:\n${nodeDescriptions.join('\n')}\n\nRequired Flow Sequence:\n${lines.length > 0 ? lines.join('\n') : "No specific sequence defined."}`;
|
|
351
|
+
}
|
|
352
|
+
_getActionsSummary() {
|
|
353
|
+
if (!this.automationFiles)
|
|
354
|
+
return "No automation actions available.";
|
|
355
|
+
const actions = [];
|
|
356
|
+
const seen = new Set();
|
|
357
|
+
for (const file of this.automationFiles) {
|
|
358
|
+
const steps = file.content?.steps || [];
|
|
359
|
+
for (const step of steps) {
|
|
360
|
+
const meta = step.selfLearningMetadata || step.params?.selfLearningMetadata || step.param?.selfLearningMetadata; // Consistent check
|
|
361
|
+
if (meta) {
|
|
362
|
+
// Start of Selection - user requested to use 'action' property if available
|
|
363
|
+
if (meta.action) {
|
|
364
|
+
const id = step.annotation?.stepId || step.id;
|
|
365
|
+
if (!seen.has(id)) {
|
|
366
|
+
seen.add(id);
|
|
367
|
+
// actions.push({ id: step.annotation.stepId, action: meta.action });
|
|
368
|
+
actions.push(`ID: ${id} | Action: ${meta.action} | Description: ${meta.description || 'No description'}`);
|
|
369
|
+
}
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
// End of Selection
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
return actions.slice(0, 300).join('\n') + (actions.length > 300 ? '\n... (more actions truncated)' : '');
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=stepByStepAiPlanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepByStepAiPlanner.js","sourceRoot":"","sources":["../../src/services/stepByStepAiPlanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { generateJsTransformFromPrompt } from "./generateJsTransformFromPrompt.js";
|
|
2
|
+
const { code, transform, attempts } = await generateJsTransformFromPrompt({
|
|
3
|
+
model: 'meta-llama/llama-4-maverick-17b-128e-instruct',
|
|
4
|
+
prompt: "Given an array of {name,sizeKB}, return { top3: largest by sizeKB desc, totalKB }",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "array",
|
|
7
|
+
items: {
|
|
8
|
+
type: "object",
|
|
9
|
+
additionalProperties: false,
|
|
10
|
+
required: ["name", "sizeKB"],
|
|
11
|
+
properties: { name: { type: "string" }, sizeKB: { type: "number" } }
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
outputSchema: {
|
|
15
|
+
type: "object", additionalProperties: false,
|
|
16
|
+
required: ["top3", "totalKB"],
|
|
17
|
+
properties: {
|
|
18
|
+
top3: {
|
|
19
|
+
type: "array", items: {
|
|
20
|
+
type: "object", additionalProperties: false,
|
|
21
|
+
required: ["name", "sizeKB"],
|
|
22
|
+
properties: { name: { type: "string" }, sizeKB: { type: "number" } }
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
totalKB: { type: "number" }
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
examples: [
|
|
29
|
+
{
|
|
30
|
+
input: [{ name: "a", sizeKB: 2 }, { name: "b", sizeKB: 5 }, { name: "c", sizeKB: 1 }],
|
|
31
|
+
output: { top3: [{ name: "b", sizeKB: 5 }, { name: "a", sizeKB: 2 }, { name: "c", sizeKB: 1 }], totalKB: 8 }
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
retries: 2,
|
|
35
|
+
verbose: true
|
|
36
|
+
});
|
|
37
|
+
console.log(`Generated in ${attempts} attempt(s)`);
|
|
38
|
+
console.log(code);
|
|
39
|
+
console.log(await transform([{ name: "x", sizeKB: 4 }, { name: "y", sizeKB: 9 }, { name: "z", sizeKB: 1 }]));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-genjs.manual-test.d.ts","sourceRoot":"","sources":["../../src/services/test-genjs.manual-test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { generateJsTransformFromPrompt } from "./generateJsTransformFromPrompt.js";
|
|
2
|
+
const { code, transform, attempts } = await generateJsTransformFromPrompt({
|
|
3
|
+
model: 'meta-llama/llama-4-maverick-17b-128e-instruct',
|
|
4
|
+
prompt: "Given an array of {name,sizeKB}, return { top3: largest by sizeKB desc, totalKB }",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "array",
|
|
7
|
+
items: {
|
|
8
|
+
type: "object",
|
|
9
|
+
additionalProperties: false,
|
|
10
|
+
required: ["name", "sizeKB"],
|
|
11
|
+
properties: { name: { type: "string" }, sizeKB: { type: "number" } }
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
outputSchema: {
|
|
15
|
+
type: "object", additionalProperties: false,
|
|
16
|
+
required: ["top3", "totalKB"],
|
|
17
|
+
properties: {
|
|
18
|
+
top3: {
|
|
19
|
+
type: "array", items: {
|
|
20
|
+
type: "object", additionalProperties: false,
|
|
21
|
+
required: ["name", "sizeKB"],
|
|
22
|
+
properties: { name: { type: "string" }, sizeKB: { type: "number" } }
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
totalKB: { type: "number" }
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
examples: [
|
|
29
|
+
{
|
|
30
|
+
input: [{ name: "a", sizeKB: 2 }, { name: "b", sizeKB: 5 }, { name: "c", sizeKB: 1 }],
|
|
31
|
+
output: { top3: [{ name: "b", sizeKB: 5 }, { name: "a", sizeKB: 2 }, { name: "c", sizeKB: 1 }], totalKB: 8 }
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
retries: 2,
|
|
35
|
+
verbose: true
|
|
36
|
+
});
|
|
37
|
+
console.log(`Generated in ${attempts} attempt(s)`);
|
|
38
|
+
console.log(code);
|
|
39
|
+
console.log(await transform([{ name: "x", sizeKB: 4 }, { name: "y", sizeKB: 9 }, { name: "z", sizeKB: 1 }]));
|
|
40
|
+
//# sourceMappingURL=test-genjs.manual-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-genjs.manual-test.js","sourceRoot":"","sources":["../../src/services/test-genjs.manual-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,6BAA6B,CAAC;IACtE,KAAK,EAAE,+CAA+C;IACtD,MAAM,EAAE,mFAAmF;IAC3F,WAAW,EAAE;QACT,IAAI,EAAE,OAAO;QACb,KAAK,EAAE;YACH,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC5B,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;SACvE;KACJ;IACD,YAAY,EAAE;QACV,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK;QAC3C,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;QAC7B,UAAU,EAAE;YACR,IAAI,EAAE;gBACF,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;oBAClB,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK;oBAC3C,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;oBAC5B,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;iBACvE;aACJ;YACD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC9B;KACJ;IACD,QAAQ,EAAE;QACN;YACI,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACrF,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;SAC/G;KACJ;IACD,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,IAAI;CAChB,CAAC,CAAC;AAEH,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,aAAa,CAAC,CAAC;AACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,OAAO,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class UiMapPathFinder {
|
|
2
|
+
constructor(uiMap: any);
|
|
3
|
+
_buildAdjacencyList(): void;
|
|
4
|
+
/**
|
|
5
|
+
* Finds the shortest path from startStateId to a destination (state ID or field name).
|
|
6
|
+
* @param {string} startStateId
|
|
7
|
+
* @param {string} destination
|
|
8
|
+
* @param {string} [targetStateId] - Optional: Specific state ID if destination is a field
|
|
9
|
+
* @returns {Array<any>|null} Array of edges representing the path, or null if not found.
|
|
10
|
+
*/
|
|
11
|
+
findPath(startStateId: any, destination: any, targetStateId?: any): any[];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=uiMapPathFinder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiMapPathFinder.d.ts","sourceRoot":"","sources":["../../src/services/uiMapPathFinder.ts"],"names":[],"mappings":"AACA,qBAAa,eAAe;gBACd,KAAK,KAAA;IAMjB,mBAAmB;IAUnB;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,KAAA,EAAE,WAAW,KAAA,EAAE,aAAa,MAAO;CA+DzD"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export class UiMapPathFinder {
|
|
2
|
+
constructor(uiMap) {
|
|
3
|
+
this.uiMap = uiMap;
|
|
4
|
+
this.adjacencyList = {};
|
|
5
|
+
this._buildAdjacencyList();
|
|
6
|
+
}
|
|
7
|
+
_buildAdjacencyList() {
|
|
8
|
+
for (const edgeId in this.uiMap.edges) {
|
|
9
|
+
const edge = this.uiMap.edges[edgeId];
|
|
10
|
+
if (!this.adjacencyList[edge.from]) {
|
|
11
|
+
this.adjacencyList[edge.from] = [];
|
|
12
|
+
}
|
|
13
|
+
this.adjacencyList[edge.from].push(edge);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Finds the shortest path from startStateId to a destination (state ID or field name).
|
|
18
|
+
* @param {string} startStateId
|
|
19
|
+
* @param {string} destination
|
|
20
|
+
* @param {string} [targetStateId] - Optional: Specific state ID if destination is a field
|
|
21
|
+
* @returns {Array<any>|null} Array of edges representing the path, or null if not found.
|
|
22
|
+
*/
|
|
23
|
+
findPath(startStateId, destination, targetStateId = null) {
|
|
24
|
+
const targetStateIds = new Set();
|
|
25
|
+
if (targetStateId) {
|
|
26
|
+
const state = this.uiMap.states[targetStateId];
|
|
27
|
+
if (state) {
|
|
28
|
+
// If destination matches the state ID, or if the state contains the destination as a field
|
|
29
|
+
const hasField = Array.isArray(state.fields)
|
|
30
|
+
? state.fields.some(f => (f.name === destination || f.field === destination))
|
|
31
|
+
: (state.fields && state.fields[destination]);
|
|
32
|
+
if (destination === targetStateId || hasField) {
|
|
33
|
+
targetStateIds.add(targetStateId);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Is destination a state?
|
|
39
|
+
if (this.uiMap.states[destination]) {
|
|
40
|
+
targetStateIds.add(destination);
|
|
41
|
+
}
|
|
42
|
+
// Is destination a field? (Search all states)
|
|
43
|
+
for (const stateId in this.uiMap.states) {
|
|
44
|
+
const state = this.uiMap.states[stateId];
|
|
45
|
+
const hasField = Array.isArray(state.fields)
|
|
46
|
+
? state.fields.some(f => (f.name === destination || f.field === destination))
|
|
47
|
+
: (state.fields && state.fields[destination]);
|
|
48
|
+
if (hasField) {
|
|
49
|
+
targetStateIds.add(stateId);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (targetStateIds.size === 0)
|
|
54
|
+
return null;
|
|
55
|
+
// BFS
|
|
56
|
+
const queue = [{ stateId: startStateId, path: [] }];
|
|
57
|
+
const visited = new Set();
|
|
58
|
+
visited.add(startStateId);
|
|
59
|
+
while (queue.length > 0) {
|
|
60
|
+
const { stateId, path } = queue.shift();
|
|
61
|
+
// Check if we reached a target state
|
|
62
|
+
if (targetStateIds.has(stateId)) {
|
|
63
|
+
return path;
|
|
64
|
+
}
|
|
65
|
+
const neighbors = this.adjacencyList[stateId] || [];
|
|
66
|
+
for (const edge of neighbors) {
|
|
67
|
+
if (!visited.has(edge.to)) {
|
|
68
|
+
visited.add(edge.to);
|
|
69
|
+
queue.push({
|
|
70
|
+
stateId: edge.to,
|
|
71
|
+
path: [...path, edge]
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=uiMapPathFinder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiMapPathFinder.js","sourceRoot":"","sources":["../../src/services/uiMapPathFinder.ts"],"names":[],"mappings":"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"}
|