model-compose 0.4.47__tar.gz → 0.4.49__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. {model_compose-0.4.47/src/model_compose.egg-info → model_compose-0.4.49}/PKG-INFO +1 -1
  2. {model_compose-0.4.47 → model_compose-0.4.49}/pyproject.toml +1 -1
  3. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/cli/compose.py +9 -2
  4. model_compose-0.4.49/src/mindor/core/component/services/web_browser/__init__.py +1 -0
  5. model_compose-0.4.49/src/mindor/core/component/services/web_browser/base.py +117 -0
  6. model_compose-0.4.49/src/mindor/core/component/services/web_browser/drivers/__init__.py +2 -0
  7. model_compose-0.4.49/src/mindor/core/component/services/web_browser/drivers/chrome.py +323 -0
  8. model_compose-0.4.49/src/mindor/core/component/services/web_browser/drivers/playwright.py +178 -0
  9. model_compose-0.4.49/src/mindor/core/component/services/web_browser/web_browser.py +172 -0
  10. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/websocket_client.py +1 -3
  11. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/websocket_server.py +1 -3
  12. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/compose/manager.py +3 -2
  13. model_compose-0.4.49/src/mindor/core/controller/__init__.py +2 -0
  14. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/adapters/services/http_server.py +12 -4
  15. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/adapters/services/queue_subscriber/drivers/redis.py +4 -1
  16. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/base.py +18 -14
  17. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/queue/base.py +1 -1
  18. model_compose-0.4.49/src/mindor/core/system/__init__.py +2 -0
  19. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/streaming.py +2 -1
  20. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/web_browser.py +1 -4
  21. model_compose-0.4.49/src/mindor/dsl/schema/component/impl/web_browser/__init__.py +1 -0
  22. model_compose-0.4.49/src/mindor/dsl/schema/component/impl/web_browser/impl/__init__.py +3 -0
  23. model_compose-0.4.49/src/mindor/dsl/schema/component/impl/web_browser/impl/chrome.py +12 -0
  24. model_compose-0.4.49/src/mindor/dsl/schema/component/impl/web_browser/impl/common.py +14 -0
  25. model_compose-0.4.49/src/mindor/dsl/schema/component/impl/web_browser/impl/playwright.py +11 -0
  26. model_compose-0.4.49/src/mindor/dsl/schema/component/impl/web_browser/web_browser.py +11 -0
  27. model_compose-0.4.49/src/mindor/dsl/schema/controller/__init__.py +3 -0
  28. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +1 -1
  29. {model_compose-0.4.47 → model_compose-0.4.49/src/model_compose.egg-info}/PKG-INFO +1 -1
  30. {model_compose-0.4.47 → model_compose-0.4.49}/src/model_compose.egg-info/SOURCES.txt +12 -2
  31. model_compose-0.4.47/src/mindor/core/component/services/web_browser.py +0 -428
  32. model_compose-0.4.47/src/mindor/core/controller/__init__.py +0 -2
  33. model_compose-0.4.47/src/mindor/core/system/__init__.py +0 -2
  34. model_compose-0.4.47/src/mindor/dsl/schema/component/impl/web_browser.py +0 -39
  35. model_compose-0.4.47/src/mindor/dsl/schema/controller/__init__.py +0 -3
  36. {model_compose-0.4.47 → model_compose-0.4.49}/LICENSE +0 -0
  37. {model_compose-0.4.47 → model_compose-0.4.49}/README.md +0 -0
  38. {model_compose-0.4.47 → model_compose-0.4.49}/setup.cfg +0 -0
  39. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/__init__.py +0 -0
  40. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/cli/__init__.py +0 -0
  41. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/cli/interrupt.py +0 -0
  42. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/__init__.py +0 -0
  43. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/__init__.py +0 -0
  44. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/base.py +0 -0
  45. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/component.py +0 -0
  46. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/context.py +0 -0
  47. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/runtime/__init__.py +0 -0
  48. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/runtime/process_manager.py +0 -0
  49. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/runtime/process_worker.py +0 -0
  50. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/__init__.py +0 -0
  51. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/agent.py +0 -0
  52. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/audio_converter/__init__.py +0 -0
  53. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/audio_converter/audio_converter.py +0 -0
  54. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/audio_converter/base.py +0 -0
  55. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/audio_converter/drivers/__init__.py +0 -0
  56. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/audio_converter/drivers/common.py +0 -0
  57. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/audio_converter/drivers/ffmpeg.py +0 -0
  58. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/audio_extractor/__init__.py +0 -0
  59. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/audio_extractor/audio_extractor.py +0 -0
  60. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/audio_extractor/base.py +0 -0
  61. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/audio_extractor/drivers/__init__.py +0 -0
  62. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/audio_extractor/drivers/ffmpeg.py +0 -0
  63. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/datasets/__init__.py +0 -0
  64. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/datasets/datasets.py +0 -0
  65. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/datasets/providers/__init__.py +0 -0
  66. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/datasets/providers/common.py +0 -0
  67. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/datasets/providers/huggingface.py +0 -0
  68. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/datasets/providers/local.py +0 -0
  69. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/datasets/utils.py +0 -0
  70. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/http_client.py +0 -0
  71. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/http_server.py +0 -0
  72. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/image_processor.py +0 -0
  73. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/key_value_store/__init__.py +0 -0
  74. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/key_value_store/base.py +0 -0
  75. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/key_value_store/drivers/__init__.py +0 -0
  76. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/key_value_store/drivers/redis.py +0 -0
  77. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/key_value_store/key_value_store.py +0 -0
  78. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/mcp_client.py +0 -0
  79. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/mcp_server.py +0 -0
  80. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/__init__.py +0 -0
  81. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/base/__init__.py +0 -0
  82. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/base/common.py +0 -0
  83. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/base/huggingface.py +0 -0
  84. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/base/huggingface_hub.py +0 -0
  85. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/base/llamacpp.py +0 -0
  86. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/base/unsloth.py +0 -0
  87. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/model.py +0 -0
  88. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/__init__.py +0 -0
  89. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/chat_completion/__init__.py +0 -0
  90. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/chat_completion/huggingface.py +0 -0
  91. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/chat_completion/llamacpp.py +0 -0
  92. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/face_embedding/__init__.py +0 -0
  93. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/face_embedding/common.py +0 -0
  94. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/face_embedding/custom.py +0 -0
  95. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/face_embedding/insightface.py +0 -0
  96. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_generation/__init__.py +0 -0
  97. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_generation/common.py +0 -0
  98. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_generation/custom.py +0 -0
  99. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_generation/flux.py +0 -0
  100. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_generation/hunyuan_image.py +0 -0
  101. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_generation/sdxl.py +0 -0
  102. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_to_text/__init__.py +0 -0
  103. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_to_text/huggingface.py +0 -0
  104. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_upscale/__init__.py +0 -0
  105. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_upscale/common.py +0 -0
  106. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_upscale/custom.py +0 -0
  107. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_upscale/esrgan.py +0 -0
  108. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_upscale/ldsr.py +0 -0
  109. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_upscale/real_esrgan.py +0 -0
  110. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/image_upscale/swinir.py +0 -0
  111. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/speech_to_text/__init__.py +0 -0
  112. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/speech_to_text/huggingface.py +0 -0
  113. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/text_classification/__init__.py +0 -0
  114. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/text_classification/huggingface.py +0 -0
  115. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/text_embedding/__init__.py +0 -0
  116. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/text_embedding/huggingface.py +0 -0
  117. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/text_embedding/llamacpp.py +0 -0
  118. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/text_generation/__init__.py +0 -0
  119. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/text_generation/huggingface.py +0 -0
  120. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/text_generation/llamacpp.py +0 -0
  121. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/text_to_speech/__init__.py +0 -0
  122. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/text_to_speech/common.py +0 -0
  123. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/text_to_speech/custom.py +0 -0
  124. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/model/tasks/text_to_speech/qwen.py +0 -0
  125. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/shell.py +0 -0
  126. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/text_splitter.py +0 -0
  127. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/vector_store/__init__.py +0 -0
  128. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/vector_store/base.py +0 -0
  129. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/vector_store/drivers/__init__.py +0 -0
  130. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/vector_store/drivers/chroma.py +0 -0
  131. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/vector_store/drivers/milvus.py +0 -0
  132. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/vector_store/vector_store.py +0 -0
  133. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_converter/__init__.py +0 -0
  134. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_converter/base.py +0 -0
  135. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_converter/drivers/__init__.py +0 -0
  136. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_converter/drivers/common.py +0 -0
  137. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_converter/drivers/ffmpeg.py +0 -0
  138. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_converter/video_converter.py +0 -0
  139. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_scene_detector/__init__.py +0 -0
  140. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_scene_detector/base.py +0 -0
  141. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_scene_detector/drivers/__init__.py +0 -0
  142. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_scene_detector/drivers/ffmpeg.py +0 -0
  143. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_scene_detector/drivers/pyscenedetect.py +0 -0
  144. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_scene_detector/drivers/transnetv2.py +0 -0
  145. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/video_scene_detector/video_scene_detector.py +0 -0
  146. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/web_scraper.py +0 -0
  147. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/component/services/workflow.py +0 -0
  148. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/compose/__init__.py +0 -0
  149. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/compose/compose.py +0 -0
  150. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/compose/validator.py +0 -0
  151. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/adapters/__init__.py +0 -0
  152. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/adapters/adapter.py +0 -0
  153. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/adapters/base.py +0 -0
  154. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/adapters/services/__init__.py +0 -0
  155. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/adapters/services/mcp_server.py +0 -0
  156. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/adapters/services/queue_subscriber/__init__.py +0 -0
  157. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/adapters/services/queue_subscriber/base.py +0 -0
  158. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/adapters/services/queue_subscriber/drivers/__init__.py +0 -0
  159. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/adapters/services/queue_subscriber/queue_subscriber.py +0 -0
  160. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/controller.py +0 -0
  161. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/queue/__init__.py +0 -0
  162. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/queue/drivers/__init__.py +0 -0
  163. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/queue/drivers/redis.py +0 -0
  164. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/queue/queue.py +0 -0
  165. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runner/__init__.py +0 -0
  166. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runner/client.py +0 -0
  167. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runner/http_client.py +0 -0
  168. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runner/mcp_client.py +0 -0
  169. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runner/runner.py +0 -0
  170. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runtime/__init__.py +0 -0
  171. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runtime/apple_container/__init__.py +0 -0
  172. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runtime/apple_container/apple_container.py +0 -0
  173. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runtime/docker/__init__.py +0 -0
  174. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runtime/docker/context/Dockerfile +0 -0
  175. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runtime/docker/docker.py +0 -0
  176. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runtime/native/__init__.py +0 -0
  177. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runtime/native/native.py +0 -0
  178. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/runtime/specs.py +0 -0
  179. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/webui/__init__.py +0 -0
  180. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/webui/driver.py +0 -0
  181. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/webui/gradio/__init__.py +0 -0
  182. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/webui/gradio/builder.py +0 -0
  183. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/webui/gradio/driver.py +0 -0
  184. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/webui/static/__init__.py +0 -0
  185. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/webui/static/driver.py +0 -0
  186. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/controller/webui/webui.py +0 -0
  187. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/errors.py +0 -0
  188. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/evaluator/__init__.py +0 -0
  189. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/evaluator/condition.py +0 -0
  190. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/foundation/__init__.py +0 -0
  191. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/foundation/async_service.py +0 -0
  192. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/foundation/compat/__init__.py +0 -0
  193. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/foundation/compat/asyncio.py +0 -0
  194. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/foundation/ipc_messages.py +0 -0
  195. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/foundation/package.py +0 -0
  196. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/foundation/process_manager.py +0 -0
  197. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/foundation/process_worker.py +0 -0
  198. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/gateway/__init__.py +0 -0
  199. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/gateway/base.py +0 -0
  200. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/gateway/gateway.py +0 -0
  201. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/gateway/services/__init__.py +0 -0
  202. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/gateway/services/http_tunnel/__init__.py +0 -0
  203. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/gateway/services/http_tunnel/base.py +0 -0
  204. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/gateway/services/http_tunnel/drivers/__init__.py +0 -0
  205. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/gateway/services/http_tunnel/drivers/cloudflare.py +0 -0
  206. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/gateway/services/http_tunnel/drivers/ngrok.py +0 -0
  207. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/gateway/services/http_tunnel/http_tunnel.py +0 -0
  208. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/gateway/services/ssh_tunnel.py +0 -0
  209. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/listener/__init__.py +0 -0
  210. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/listener/base.py +0 -0
  211. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/listener/listener.py +0 -0
  212. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/listener/services/__init__.py +0 -0
  213. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/listener/services/http_callback.py +0 -0
  214. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/listener/services/http_trigger.py +0 -0
  215. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/logger/__init__.py +0 -0
  216. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/logger/base.py +0 -0
  217. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/logger/logger.py +0 -0
  218. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/logger/logging.py +0 -0
  219. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/logger/services/__init__.py +0 -0
  220. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/logger/services/console.py +0 -0
  221. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/logger/services/file.py +0 -0
  222. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/runtime/__init__.py +0 -0
  223. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/runtime/apple_container/__init__.py +0 -0
  224. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/runtime/apple_container/apple_container.py +0 -0
  225. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/runtime/docker/__init__.py +0 -0
  226. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/runtime/docker/docker.py +0 -0
  227. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/runtime/env.py +0 -0
  228. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/system/base.py +0 -0
  229. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/system/services/__init__.py +0 -0
  230. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/system/services/docker_compose.py +0 -0
  231. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/system/system.py +0 -0
  232. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/__init__.py +0 -0
  233. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/active_counter.py +0 -0
  234. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/audio.py +14 -14
  235. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/caching.py +0 -0
  236. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/cdp_client.py +0 -0
  237. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/http_client.py +0 -0
  238. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/http_request.py +0 -0
  239. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/http_response.py +0 -0
  240. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/http_status.py +0 -0
  241. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/image.py +0 -0
  242. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/mcp_client.py +0 -0
  243. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/renderers.py +0 -0
  244. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/resolvers.py +0 -0
  245. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/shell.py +0 -0
  246. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/ssh_client.py +0 -0
  247. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/streamer.py +0 -0
  248. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/time.py +0 -0
  249. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/url.py +0 -0
  250. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/websocket_client.py +0 -0
  251. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/utils/work_queue.py +0 -0
  252. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/__init__.py +0 -0
  253. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/context.py +0 -0
  254. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/interrupt.py +0 -0
  255. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/job/__init__.py +0 -0
  256. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/job/base.py +0 -0
  257. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  258. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/job/impl/component.py +0 -0
  259. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  260. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/job/impl/filter.py +0 -0
  261. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/job/impl/if_.py +0 -0
  262. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/job/impl/random_router.py +0 -0
  263. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/job/impl/switch.py +0 -0
  264. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/job/job.py +0 -0
  265. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/schema.py +0 -0
  266. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/tool.py +0 -0
  267. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/core/workflow/workflow.py +0 -0
  268. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/__init__.py +0 -0
  269. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/loader.py +0 -0
  270. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/__init__.py +0 -0
  271. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/__init__.py +0 -0
  272. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/action.py +0 -0
  273. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
  274. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/agent.py +0 -0
  275. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/audio_converter.py +0 -0
  276. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/audio_extractor.py +0 -0
  277. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  278. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/datasets/__init__.py +0 -0
  279. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/datasets/common.py +0 -0
  280. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/datasets/datasets.py +0 -0
  281. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/datasets/providers/__init__.py +0 -0
  282. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/datasets/providers/common.py +0 -0
  283. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/datasets/providers/huggingface.py +0 -0
  284. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/datasets/providers/local.py +0 -0
  285. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  286. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  287. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/image_processor.py +0 -0
  288. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/key_value_store/__init__.py +0 -0
  289. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/key_value_store/impl/__init__.py +0 -0
  290. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/key_value_store/impl/common.py +0 -0
  291. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/key_value_store/impl/redis.py +0 -0
  292. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/key_value_store/key_value_store.py +0 -0
  293. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  294. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  295. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/__init__.py +0 -0
  296. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/__init__.py +0 -0
  297. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/chat_completion.py +0 -0
  298. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/common.py +0 -0
  299. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/__init__.py +0 -0
  300. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/face_embedding.py +0 -0
  301. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  302. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/common.py +0 -0
  303. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  304. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  305. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  306. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/__init__.py +0 -0
  307. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/image_generation.py +0 -0
  308. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/__init__.py +0 -0
  309. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/common.py +0 -0
  310. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/flux.py +0 -0
  311. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  312. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  313. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_to_text.py +0 -0
  314. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/__init__.py +0 -0
  315. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/image_upscale.py +0 -0
  316. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  317. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/common.py +0 -0
  318. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  319. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  320. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  321. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  322. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/speech_to_text.py +0 -0
  323. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/text_classification.py +0 -0
  324. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/text_embedding.py +0 -0
  325. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/text_generation.py +0 -0
  326. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/__init__.py +0 -0
  327. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/impl/__init__.py +0 -0
  328. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/impl/common.py +0 -0
  329. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/impl/qwen.py +0 -0
  330. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/impl/text_to_speech/text_to_speech.py +0 -0
  331. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model/model.py +0 -0
  332. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model_trainer/__init__.py +0 -0
  333. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model_trainer/impl/__init__.py +0 -0
  334. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model_trainer/impl/classification.py +0 -0
  335. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model_trainer/impl/common.py +0 -0
  336. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model_trainer/impl/sft.py +0 -0
  337. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/model_trainer/model_trainer.py +0 -0
  338. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  339. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/text_splitter.py +0 -0
  340. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/vector_store/__init__.py +0 -0
  341. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/vector_store/impl/__init__.py +0 -0
  342. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/vector_store/impl/chroma.py +0 -0
  343. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/vector_store/impl/common.py +0 -0
  344. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/vector_store/impl/faiss.py +0 -0
  345. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/vector_store/impl/milvus.py +0 -0
  346. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/vector_store/impl/qdrant.py +0 -0
  347. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/vector_store/vector_store.py +0 -0
  348. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/video_converter.py +0 -0
  349. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/video_scene_detector.py +0 -0
  350. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/web_scraper.py +0 -0
  351. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/websocket_client.py +0 -0
  352. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/websocket_server.py +0 -0
  353. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  354. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/__init__.py +0 -0
  355. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/component.py +0 -0
  356. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
  357. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/agent.py +0 -0
  358. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/audio_converter.py +0 -0
  359. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/audio_extractor.py +0 -0
  360. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/common.py +0 -0
  361. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/datasets/__init__.py +0 -0
  362. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/datasets/datasets.py +0 -0
  363. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  364. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  365. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/image_processor.py +0 -0
  366. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/key_value_store/__init__.py +0 -0
  367. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/key_value_store/impl/__init__.py +0 -0
  368. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/key_value_store/impl/common.py +0 -0
  369. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/key_value_store/impl/redis.py +0 -0
  370. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/key_value_store/key_value_store.py +0 -0
  371. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  372. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  373. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/__init__.py +0 -0
  374. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/__init__.py +0 -0
  375. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/chat_completion.py +0 -0
  376. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/common.py +0 -0
  377. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/__init__.py +0 -0
  378. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/face_embedding.py +0 -0
  379. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/__init__.py +0 -0
  380. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/common.py +0 -0
  381. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/dlib.py +0 -0
  382. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/facenet.py +0 -0
  383. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/face_embedding/impl/insightface.py +0 -0
  384. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/__init__.py +0 -0
  385. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/image_generation.py +0 -0
  386. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/__init__.py +0 -0
  387. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/common.py +0 -0
  388. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/flux.py +0 -0
  389. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/hunyuan_image.py +0 -0
  390. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_generation/impl/sdxl.py +0 -0
  391. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_to_text.py +0 -0
  392. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/__init__.py +0 -0
  393. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/image_upscale.py +0 -0
  394. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/__init__.py +0 -0
  395. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/common.py +0 -0
  396. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/esrgan.py +0 -0
  397. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/ldsr.py +0 -0
  398. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/real_esrgan.py +0 -0
  399. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/image_upscale/impl/swinir.py +0 -0
  400. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/speech_to_text.py +0 -0
  401. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/text_classification.py +0 -0
  402. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/text_embedding.py +0 -0
  403. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/text_generation.py +0 -0
  404. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/__init__.py +0 -0
  405. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/impl/__init__.py +0 -0
  406. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/impl/common.py +0 -0
  407. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/impl/qwen.py +0 -0
  408. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/impl/text_to_speech/text_to_speech.py +0 -0
  409. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model/model.py +0 -0
  410. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model_trainer/__init__.py +0 -0
  411. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model_trainer/impl/__init__.py +0 -0
  412. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model_trainer/impl/classification.py +0 -0
  413. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model_trainer/impl/common.py +0 -0
  414. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model_trainer/impl/sft.py +0 -0
  415. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/model_trainer/model_trainer.py +0 -0
  416. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  417. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/text_splitter.py +0 -0
  418. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/types.py +0 -0
  419. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/vector_store/__init__.py +0 -0
  420. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/vector_store/impl/__init__.py +0 -0
  421. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/vector_store/impl/chroma.py +0 -0
  422. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/vector_store/impl/common.py +0 -0
  423. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/vector_store/impl/faiss.py +0 -0
  424. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/vector_store/impl/milvus.py +0 -0
  425. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/vector_store/impl/qdrant.py +0 -0
  426. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/vector_store/vector_store.py +0 -0
  427. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/video_converter.py +0 -0
  428. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/video_scene_detector.py +0 -0
  429. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/web_scraper.py +0 -0
  430. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/websocket_client.py +0 -0
  431. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/websocket_server.py +0 -0
  432. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  433. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/compose.py +0 -0
  434. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/adapter/__init__.py +0 -0
  435. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/adapter/adapter.py +0 -0
  436. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/adapter/common.py +0 -0
  437. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/adapter/impl/__init__.py +0 -0
  438. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/adapter/impl/http_server.py +0 -0
  439. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/adapter/impl/mcp_server.py +0 -0
  440. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/__init__.py +0 -0
  441. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/impl/__init__.py +0 -0
  442. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/impl/common.py +0 -0
  443. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/impl/redis.py +0 -0
  444. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/adapter/impl/queue_subscriber/queue_subscriber.py +0 -0
  445. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/adapter/impl/types.py +0 -0
  446. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/controller.py +0 -0
  447. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  448. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/queue/__init__.py +0 -0
  449. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/queue/impl/__init__.py +0 -0
  450. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/queue/impl/common.py +0 -0
  451. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/queue/impl/redis.py +0 -0
  452. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/queue/queue.py +0 -0
  453. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/webui/__init__.py +0 -0
  454. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/webui/impl/__init__.py +0 -0
  455. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/webui/impl/common.py +0 -0
  456. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/webui/impl/dynamic.py +0 -0
  457. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/webui/impl/gradio.py +0 -0
  458. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/webui/impl/static.py +0 -0
  459. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/controller/webui/webui.py +0 -0
  460. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/gateway/__init__.py +0 -0
  461. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  462. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  463. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
  464. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/gateway/impl/http_tunnel/__init__.py +0 -0
  465. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/gateway/impl/http_tunnel/http_tunnel.py +0 -0
  466. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/__init__.py +0 -0
  467. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/cloudflare.py +0 -0
  468. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/common.py +0 -0
  469. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/gateway/impl/http_tunnel/impl/ngrok.py +0 -0
  470. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  471. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/job/__init__.py +0 -0
  472. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  473. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  474. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/job/impl/component.py +0 -0
  475. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  476. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/job/impl/filter.py +0 -0
  477. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/job/impl/if_.py +0 -0
  478. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/job/impl/random_router.py +0 -0
  479. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/job/impl/switch.py +0 -0
  480. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  481. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/job/job.py +0 -0
  482. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  483. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  484. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  485. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
  486. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/listener/impl/http_trigger.py +0 -0
  487. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  488. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/listener/listener.py +0 -0
  489. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/logger/__init__.py +0 -0
  490. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/logger/impl/__init__.py +0 -0
  491. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/logger/impl/common.py +0 -0
  492. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/logger/impl/console.py +0 -0
  493. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/logger/impl/file.py +0 -0
  494. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/logger/impl/types.py +0 -0
  495. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/logger/logger.py +0 -0
  496. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/operator/__init__.py +0 -0
  497. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/operator/condition.py +0 -0
  498. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  499. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  500. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/runtime/impl/apple_container.py +0 -0
  501. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  502. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  503. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/runtime/impl/embedded.py +0 -0
  504. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/runtime/impl/native.py +0 -0
  505. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/runtime/impl/process.py +0 -0
  506. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  507. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  508. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/system/__init__.py +0 -0
  509. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/system/impl/__init__.py +0 -0
  510. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/system/impl/common.py +0 -0
  511. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/system/impl/docker_compose.py +0 -0
  512. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/system/impl/types.py +0 -0
  513. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/system/system.py +0 -0
  514. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/transport/__init__.py +0 -0
  515. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/transport/http.py +0 -0
  516. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/transport/ssh.py +0 -0
  517. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/schema/workflow.py +0 -0
  518. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/utils/__init__.py +0 -0
  519. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/utils/enum.py +0 -0
  520. {model_compose-0.4.47 → model_compose-0.4.49}/src/mindor/dsl/utils/path.py +0 -0
  521. {model_compose-0.4.47 → model_compose-0.4.49}/src/model_compose.egg-info/dependency_links.txt +0 -0
  522. {model_compose-0.4.47 → model_compose-0.4.49}/src/model_compose.egg-info/entry_points.txt +0 -0
  523. {model_compose-0.4.47 → model_compose-0.4.49}/src/model_compose.egg-info/requires.txt +0 -0
  524. {model_compose-0.4.47 → model_compose-0.4.49}/src/model_compose.egg-info/top_level.txt +0 -0
  525. {model_compose-0.4.47 → model_compose-0.4.49}/tests/test_cli.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: model-compose
3
- Version: 0.4.47
3
+ Version: 0.4.49
4
4
  Summary: model-compose: Declarative AI Workflow Orchestrator
5
5
  Author-email: Hanyeol Cho <hanyeol.cho@gmail.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "model-compose"
3
- version = "0.4.47"
3
+ version = "0.4.49"
4
4
  description = "model-compose: Declarative AI Workflow Orchestrator"
5
5
  authors = [
6
6
  { name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
@@ -203,6 +203,12 @@ def stop_command(
203
203
  required=False,
204
204
  help="Path to save the output result as a file."
205
205
  )
206
+ @click.option(
207
+ "--metadata", "-m", "metadata_json",
208
+ type=str,
209
+ required=False,
210
+ help="JSON metadata string to pass through the workflow and echo back in the response.",
211
+ )
206
212
  @click.option("--auto-resume", is_flag=True, help="Automatically resume interrupts without prompting.")
207
213
  @click.option("--verbose", "-v", is_flag=True, help="Enable verbose output.")
208
214
  @click.pass_context
@@ -213,6 +219,7 @@ def run_command(
213
219
  env_files: List[Path],
214
220
  env_data: List[str],
215
221
  output_path: Optional[Path],
222
+ metadata_json: Optional[str],
216
223
  auto_resume: bool,
217
224
  verbose: bool
218
225
  ) -> None:
@@ -224,10 +231,11 @@ def run_command(
224
231
  try:
225
232
  config = _load_compose_config(config_files, env_files, env_data)
226
233
  input = json.loads(input_json) if input_json else {}
234
+ metadata = json.loads(metadata_json) if metadata_json else None
227
235
  is_tty = sys.stdin.isatty()
228
236
 
229
237
  manager = ComposeManager(config, daemon=False)
230
- state = await manager.run_workflow(workflow_id or "__default__", input, output_path, verbose)
238
+ state = await manager.run_workflow(workflow_id or "__default__", input, output_path, verbose, metadata=metadata)
231
239
 
232
240
  while state.status == TaskStatus.INTERRUPTED:
233
241
  if not auto_resume and not is_tty:
@@ -280,7 +288,6 @@ def validate_command(
280
288
  env_data: List[str],
281
289
  verbose: bool
282
290
  ) -> None:
283
- """Validate the compose configuration without starting any services."""
284
291
  from mindor.core.compose import validate_compose_config
285
292
  config_files = ctx.obj.get("config_files", [])
286
293
  try:
@@ -0,0 +1 @@
1
+ from .web_browser import *
@@ -0,0 +1,117 @@
1
+ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Callable, Any
2
+ from abc import ABC, abstractmethod
3
+ from mindor.dsl.schema.component import WebBrowserComponentConfig, WebBrowserDriver
4
+ from mindor.dsl.schema.action import WebBrowserActionConfig
5
+ from mindor.core.foundation import AsyncService
6
+ from ...context import ComponentActionContext
7
+
8
+ class WebBrowserSession(ABC):
9
+ """Abstract browser session exposing high-level browser actions."""
10
+
11
+ # ---- Navigation ----
12
+
13
+ @abstractmethod
14
+ async def navigate(self, url: str, wait_until: str, timeout: float) -> Dict[str, Any]:
15
+ pass
16
+
17
+ # ---- Interaction ----
18
+
19
+ @abstractmethod
20
+ async def click(
21
+ self,
22
+ selector: Optional[str],
23
+ xpath: Optional[str],
24
+ x: Optional[int],
25
+ y: Optional[int],
26
+ timeout: float
27
+ ) -> Dict[str, Any]:
28
+ pass
29
+
30
+ @abstractmethod
31
+ async def input(
32
+ self,
33
+ selector: Optional[str],
34
+ xpath: Optional[str],
35
+ text: str,
36
+ clear_first: bool,
37
+ timeout: float
38
+ ) -> Dict[str, Any]:
39
+ pass
40
+
41
+ @abstractmethod
42
+ async def scroll(self, selector: Optional[str], x: int, y: int) -> Dict[str, Any]:
43
+ pass
44
+
45
+ # ---- Query ----
46
+
47
+ @abstractmethod
48
+ async def wait_for(
49
+ self,
50
+ selector: Optional[str],
51
+ xpath: Optional[str],
52
+ condition: str,
53
+ timeout: float
54
+ ) -> Dict[str, Any]:
55
+ pass
56
+
57
+ @abstractmethod
58
+ async def extract(
59
+ self,
60
+ selector: Optional[str],
61
+ xpath: Optional[str],
62
+ extract_mode: str,
63
+ attribute: Optional[str],
64
+ multiple: bool
65
+ ) -> Any:
66
+ pass
67
+
68
+ @abstractmethod
69
+ async def evaluate(self, expression: str) -> Any:
70
+ pass
71
+
72
+ # ---- Capture ----
73
+
74
+ @abstractmethod
75
+ async def screenshot(
76
+ self,
77
+ full_page: bool,
78
+ selector: Optional[str],
79
+ format: str,
80
+ quality: Optional[int]
81
+ ) -> str:
82
+ pass
83
+
84
+ # ---- State ----
85
+
86
+ @abstractmethod
87
+ async def get_cookies(self, urls: Optional[List[str]]) -> List[Dict[str, Any]]:
88
+ pass
89
+
90
+ @abstractmethod
91
+ async def set_cookies(self, cookies: List[Dict[str, Any]]) -> Dict[str, Any]:
92
+ pass
93
+
94
+ # ---- Lifecycle ----
95
+
96
+ @abstractmethod
97
+ async def close(self) -> None:
98
+ pass
99
+
100
+ class WebBrowserService(AsyncService):
101
+ def __init__(self, id: str, config: WebBrowserComponentConfig, daemon: bool):
102
+ super().__init__(daemon)
103
+
104
+ self.id: str = id
105
+ self.config: WebBrowserComponentConfig = config
106
+
107
+ @abstractmethod
108
+ async def create_session(self) -> WebBrowserSession:
109
+ pass
110
+
111
+ def register_web_browser_service(driver: WebBrowserDriver):
112
+ def decorator(cls: Type[WebBrowserService]) -> Type[WebBrowserService]:
113
+ WebBrowserServiceRegistry[driver] = cls
114
+ return cls
115
+ return decorator
116
+
117
+ WebBrowserServiceRegistry: Dict[WebBrowserDriver, Type[WebBrowserService]] = {}
@@ -0,0 +1,2 @@
1
+ from .chrome import *
2
+ from .playwright import *
@@ -0,0 +1,323 @@
1
+ from typing import Optional, Dict, List, Any
2
+ from mindor.dsl.schema.component import ChromeWebBrowserComponentConfig, WebBrowserDriver
3
+ from mindor.core.utils.cdp_client import CdpClient
4
+ from ..base import WebBrowserService, WebBrowserSession, register_web_browser_service
5
+ import asyncio
6
+
7
+
8
+ class ChromeBrowserSession(WebBrowserSession):
9
+ """Browser session backed by a persistent CDP connection."""
10
+
11
+ def __init__(self, client: CdpClient):
12
+ self.client = client
13
+ self._lifecycle_enabled = False
14
+
15
+ # ---- Navigation ----
16
+
17
+ async def navigate(self, url: str, wait_until: str, timeout: float) -> Dict[str, Any]:
18
+ await self._ensure_page_enabled()
19
+
20
+ loop = asyncio.get_running_loop()
21
+ nav_done: asyncio.Future = loop.create_future()
22
+
23
+ event_map = {
24
+ "load": "Page.loadEventFired",
25
+ "domcontentloaded": "Page.domContentEventFired",
26
+ "networkidle": "Page.lifecycleEvent",
27
+ }
28
+ event_method = event_map.get(wait_until, "Page.loadEventFired")
29
+
30
+ async def _on_event(params):
31
+ if not nav_done.done():
32
+ if wait_until == "networkidle":
33
+ if params.get("name") == "networkIdle":
34
+ nav_done.set_result(True)
35
+ else:
36
+ nav_done.set_result(True)
37
+
38
+ self.client.on_event(event_method, _on_event)
39
+ try:
40
+ result = await self.client.send_command("Page.navigate", {"url": url})
41
+ await asyncio.wait_for(nav_done, timeout=timeout)
42
+ except asyncio.TimeoutError:
43
+ raise TimeoutError(f"Navigation to '{url}' did not complete within {timeout}s")
44
+ finally:
45
+ self.client.remove_event_listener(event_method, _on_event)
46
+
47
+ return {"url": url, "frameId": result.get("frameId")}
48
+
49
+ # ---- Interaction ----
50
+
51
+ async def click(
52
+ self,
53
+ selector: Optional[str],
54
+ xpath: Optional[str],
55
+ x: Optional[int],
56
+ y: Optional[int],
57
+ timeout: float
58
+ ) -> Dict[str, Any]:
59
+ if x is not None and y is not None:
60
+ cx, cy = int(x), int(y)
61
+ else:
62
+ cx, cy = await self._get_element_center(selector, xpath, timeout)
63
+
64
+ for event in ("mousePressed", "mouseReleased"):
65
+ await self.client.send_command("Input.dispatchMouseEvent", {
66
+ "type": event, "x": cx, "y": cy, "button": "left", "clickCount": 1
67
+ })
68
+
69
+ return { "x": cx, "y": cy }
70
+
71
+ async def input(
72
+ self,
73
+ selector: Optional[str],
74
+ xpath: Optional[str],
75
+ text: str,
76
+ clear_first: bool,
77
+ timeout: float
78
+ ) -> Dict[str, Any]:
79
+ cx, cy = await self._get_element_center(selector, xpath, timeout)
80
+
81
+ # Focus element by clicking
82
+ for event_type in ("mousePressed", "mouseReleased"):
83
+ await self.client.send_command("Input.dispatchMouseEvent", {
84
+ "type": event_type, "x": cx, "y": cy, "button": "left", "clickCount": 1
85
+ })
86
+
87
+ if clear_first:
88
+ # Select all and delete
89
+ await self.client.send_command("Input.dispatchKeyEvent", {
90
+ "type": "keyDown", "key": "a", "modifiers": 2 # Ctrl+A
91
+ })
92
+ await self.client.send_command("Input.dispatchKeyEvent", {
93
+ "type": "keyUp", "key": "a", "modifiers": 2
94
+ })
95
+ await self.client.send_command("Input.dispatchKeyEvent", {
96
+ "type": "keyDown", "key": "Backspace"
97
+ })
98
+ await self.client.send_command("Input.dispatchKeyEvent", {
99
+ "type": "keyUp", "key": "Backspace"
100
+ })
101
+
102
+ for char in text:
103
+ await self.client.send_command("Input.dispatchKeyEvent", {
104
+ "type": "char", "text": char
105
+ })
106
+
107
+ return { "typed": text }
108
+
109
+ async def scroll(self, selector: Optional[str], x: int, y: int) -> Dict[str, Any]:
110
+ if selector:
111
+ js = f"""(function() {{
112
+ const el = document.querySelector({repr(selector)});
113
+ if (el) el.scrollBy({x}, {y});
114
+ }})()"""
115
+ else:
116
+ js = f"window.scrollBy({x}, {y})"
117
+
118
+ await self.client.send_command("Runtime.evaluate", { "expression": js, "returnByValue": True })
119
+ return { "scrolled_x": x, "scrolled_y": y }
120
+
121
+ # ---- Query ----
122
+
123
+ async def wait_for(
124
+ self,
125
+ selector: Optional[str],
126
+ xpath: Optional[str],
127
+ condition: str,
128
+ timeout: float
129
+ ) -> Dict[str, Any]:
130
+ js = self._build_wait_condition_js(selector, xpath, condition)
131
+ deadline = asyncio.get_event_loop().time() + timeout
132
+
133
+ while asyncio.get_event_loop().time() < deadline:
134
+ result = await self.client.send_command("Runtime.evaluate", {
135
+ "expression": js, "returnByValue": True
136
+ })
137
+ value = result.get("result", {}).get("value")
138
+ if value:
139
+ return {"found": True}
140
+ await asyncio.sleep(0.3)
141
+
142
+ target = selector or xpath
143
+ raise TimeoutError(f"wait_for '{target}' ({condition}) timed out after {timeout}s")
144
+
145
+ async def extract(
146
+ self,
147
+ selector: Optional[str],
148
+ xpath: Optional[str],
149
+ extract_mode: str,
150
+ attribute: Optional[str],
151
+ multiple: bool
152
+ ) -> Any:
153
+ js = self._build_extract_js(selector, xpath, extract_mode, attribute, multiple)
154
+ result = await self.client.send_command("Runtime.evaluate", {
155
+ "expression": js, "returnByValue": True
156
+ })
157
+ if "exceptionDetails" in result:
158
+ raise RuntimeError(f"Extract JavaScript error: { result['exceptionDetails'] }")
159
+ return result.get("result", {}).get("value")
160
+
161
+ async def evaluate(self, expression: str) -> Any:
162
+ result = await self.client.send_command("Runtime.evaluate", {
163
+ "expression": expression,
164
+ "returnByValue": True,
165
+ "awaitPromise": True,
166
+ })
167
+
168
+ if "exceptionDetails" in result:
169
+ raise RuntimeError(f"JavaScript error: { result['exceptionDetails'] }")
170
+
171
+ return result.get("result", {}).get("value")
172
+
173
+ # ---- Capture ----
174
+
175
+ async def screenshot(
176
+ self,
177
+ full_page: bool,
178
+ selector: Optional[str],
179
+ format: str,
180
+ quality: Optional[int]
181
+ ) -> str:
182
+ params: Dict[str, Any] = {"format": format}
183
+ if format == "jpeg" and quality is not None:
184
+ params["quality"] = int(quality)
185
+ if full_page:
186
+ params["captureBeyondViewport"] = True
187
+ if selector:
188
+ box = await self._find_element_bounding_box(selector, None)
189
+ if box:
190
+ params["clip"] = {**box, "scale": 1}
191
+
192
+ result = await self.client.send_command("Page.captureScreenshot", params)
193
+ return result["data"] # base64-encoded
194
+
195
+ # ---- State ----
196
+
197
+ async def get_cookies(self, urls: Optional[List[str]]) -> List[Dict[str, Any]]:
198
+ params = {}
199
+ if urls:
200
+ params["urls"] = urls
201
+ result = await self.client.send_command("Network.getCookies", params)
202
+ return result.get("cookies", [])
203
+
204
+ async def set_cookies(self, cookies: List[Dict[str, Any]]) -> Dict[str, Any]:
205
+ await self.client.send_command("Network.setCookies", {"cookies": cookies})
206
+ return {"set": len(cookies)}
207
+
208
+ # ---- Lifecycle ----
209
+
210
+ async def close(self) -> None:
211
+ await self.client.close()
212
+
213
+ # ---- Internal helpers ----
214
+
215
+ async def _ensure_page_enabled(self) -> None:
216
+ await self.client.send_command("Page.enable")
217
+ if not self._lifecycle_enabled:
218
+ await self.client.send_command("Page.setLifecycleEventsEnabled", {"enabled": True})
219
+ self._lifecycle_enabled = True
220
+
221
+ async def _get_element_center(self, selector: Optional[str], xpath: Optional[str], timeout: float) -> tuple:
222
+ deadline = asyncio.get_event_loop().time() + timeout
223
+ while asyncio.get_event_loop().time() < deadline:
224
+ box = await self._find_element_bounding_box(selector, xpath)
225
+ if box:
226
+ cx = int(box["x"] + box["width"] / 2)
227
+ cy = int(box["y"] + box["height"] / 2)
228
+ return cx, cy
229
+ await asyncio.sleep(0.3)
230
+
231
+ target = selector or xpath
232
+ raise TimeoutError(f"Element '{target}' not found within {timeout}s")
233
+
234
+ async def _find_element_bounding_box(self, selector: Optional[str], xpath: Optional[str]) -> Optional[Dict]:
235
+ if selector:
236
+ js = f"""(function() {{
237
+ const el = document.querySelector({repr(selector)});
238
+ if (!el) return null;
239
+ const r = el.getBoundingClientRect();
240
+ return {{x: r.left, y: r.top, width: r.width, height: r.height}};
241
+ }})()"""
242
+ else:
243
+ js = f"""(function() {{
244
+ const result = document.evaluate({repr(xpath)}, document, null,
245
+ XPathResult.FIRST_ORDERED_NODE_TYPE, null);
246
+ const el = result.singleNodeValue;
247
+ if (!el) return null;
248
+ const r = el.getBoundingClientRect();
249
+ return {{x: r.left, y: r.top, width: r.width, height: r.height}};
250
+ }})()"""
251
+
252
+ result = await self.client.send_command("Runtime.evaluate", {
253
+ "expression": js, "returnByValue": True
254
+ })
255
+ return result.get("result", {}).get("value")
256
+
257
+ def _build_wait_condition_js(self, selector: Optional[str], xpath: Optional[str], condition: str) -> str:
258
+ if selector:
259
+ target_js = f"document.querySelector({repr(selector)})"
260
+ else:
261
+ target_js = (f"document.evaluate({repr(xpath)}, document, null, "
262
+ f"XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue")
263
+
264
+ if condition == "present":
265
+ return f"!!({target_js})"
266
+ if condition == "visible":
267
+ return f"""(function() {{
268
+ const el = {target_js};
269
+ if (!el) return false;
270
+ const s = window.getComputedStyle(el);
271
+ return s.display !== 'none' && s.visibility !== 'hidden' && s.opacity !== '0';
272
+ }})()"""
273
+ if condition == "hidden":
274
+ return f"""(function() {{
275
+ const el = {target_js};
276
+ if (!el) return true;
277
+ const s = window.getComputedStyle(el);
278
+ return s.display === 'none' || s.visibility === 'hidden' || s.opacity === '0';
279
+ }})()"""
280
+ return "true"
281
+
282
+ def _build_extract_js(self, selector: Optional[str], xpath: Optional[str],
283
+ extract_mode: str, attribute: Optional[str], multiple: bool) -> str:
284
+ if selector:
285
+ if multiple:
286
+ get_els = f"Array.from(document.querySelectorAll({repr(selector)}))"
287
+ else:
288
+ get_els = f"[document.querySelector({repr(selector)})].filter(Boolean)"
289
+ else:
290
+ if multiple:
291
+ get_els = f"""(function() {{
292
+ const r = document.evaluate({repr(xpath)}, document, null,
293
+ XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
294
+ return Array.from({{length: r.snapshotLength}}, (_, i) => r.snapshotItem(i));
295
+ }})()"""
296
+ else:
297
+ get_els = (f"[document.evaluate({repr(xpath)}, document, null, "
298
+ f"XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue].filter(Boolean)")
299
+
300
+ if extract_mode == "text":
301
+ map_fn = "el => el.innerText || el.textContent || ''"
302
+ elif extract_mode == "html":
303
+ map_fn = "el => el.outerHTML"
304
+ else: # attribute
305
+ map_fn = f"el => el.getAttribute({repr(attribute)})"
306
+
307
+ if multiple:
308
+ return f"({get_els}).map({map_fn})"
309
+ else:
310
+ return f"""(function() {{ const els = {get_els}; return els.length ? ({get_els}).map({map_fn})[0] : null; }})()"""
311
+
312
+
313
+ @register_web_browser_service(WebBrowserDriver.CHROME)
314
+ class ChromeWebBrowserService(WebBrowserService):
315
+ async def create_session(self) -> ChromeBrowserSession:
316
+ if self.config.endpoint:
317
+ client = CdpClient(self.config.endpoint)
318
+ await client.connect()
319
+ else:
320
+ client = await CdpClient.from_host_port(
321
+ self.config.host, self.config.port, self.config.target_index
322
+ )
323
+ return ChromeBrowserSession(client)
@@ -0,0 +1,178 @@
1
+ from typing import Optional, Dict, List, Any
2
+ from mindor.dsl.schema.component import PlaywrightWebBrowserComponentConfig, WebBrowserDriver
3
+ from ..base import WebBrowserService, WebBrowserSession, register_web_browser_service
4
+
5
+
6
+ class PlaywrightBrowserSession(WebBrowserSession):
7
+ """Browser session backed by a Playwright page."""
8
+
9
+ def __init__(self, browser: Any, page: Any):
10
+ self._browser = browser
11
+ self._page = page
12
+
13
+ # ---- Navigation ----
14
+
15
+ async def navigate(self, url: str, wait_until: str, timeout: float) -> Dict[str, Any]:
16
+ response = await self._page.goto(url, wait_until=wait_until, timeout=timeout * 1000)
17
+ return { "url": url, "status": response.status if response else None }
18
+
19
+ # ---- Interaction ----
20
+
21
+ async def click(
22
+ self,
23
+ selector: Optional[str],
24
+ xpath: Optional[str],
25
+ x: Optional[int],
26
+ y: Optional[int],
27
+ timeout: float
28
+ ) -> Dict[str, Any]:
29
+ if x is not None and y is not None:
30
+ await self._page.mouse.click(x, y)
31
+ return {"x": x, "y": y}
32
+
33
+ locator = self._resolve_locator(selector, xpath)
34
+ box = await locator.bounding_box(timeout=timeout * 1000)
35
+ if not box:
36
+ target = selector or xpath
37
+ raise TimeoutError(f"Element '{target}' not found within {timeout}s")
38
+ cx = int(box["x"] + box["width"] / 2)
39
+ cy = int(box["y"] + box["height"] / 2)
40
+ await self._page.mouse.click(cx, cy)
41
+ return {"x": cx, "y": cy}
42
+
43
+ async def input(
44
+ self,
45
+ selector: Optional[str],
46
+ xpath: Optional[str],
47
+ text: str,
48
+ clear_first: bool,
49
+ timeout: float
50
+ ) -> Dict[str, Any]:
51
+ locator = self._resolve_locator(selector, xpath)
52
+ if clear_first:
53
+ await locator.fill(text, timeout=timeout * 1000)
54
+ else:
55
+ await locator.press_sequentially(text, timeout=timeout * 1000)
56
+ return {"typed": text}
57
+
58
+ async def scroll(self, selector: Optional[str], x: int, y: int) -> Dict[str, Any]:
59
+ if selector:
60
+ await self._page.evaluate(
61
+ f"""(function() {{
62
+ const el = document.querySelector({repr(selector)});
63
+ if (el) el.scrollBy({x}, {y});
64
+ }})()"""
65
+ )
66
+ else:
67
+ await self._page.evaluate(f"window.scrollBy({x}, {y})")
68
+ return {"scrolled_x": x, "scrolled_y": y}
69
+
70
+ # ---- Query ----
71
+
72
+ async def wait_for(
73
+ self,
74
+ selector: Optional[str],
75
+ xpath: Optional[str],
76
+ condition: str,
77
+ timeout: float
78
+ ) -> Dict[str, Any]:
79
+ locator = self._resolve_locator(selector, xpath)
80
+ state_map = {
81
+ "present": "attached",
82
+ "visible": "visible",
83
+ "hidden": "hidden",
84
+ }
85
+ state = state_map.get(condition, "visible")
86
+ await locator.wait_for(state=state, timeout=timeout * 1000)
87
+ return {"found": True}
88
+
89
+ async def extract(
90
+ self,
91
+ selector: Optional[str],
92
+ xpath: Optional[str],
93
+ extract_mode: str,
94
+ attribute: Optional[str],
95
+ multiple: bool
96
+ ) -> Any:
97
+ locator = self._resolve_locator(selector, xpath)
98
+
99
+ if multiple:
100
+ elements = await locator.all()
101
+ results = []
102
+ for el in elements:
103
+ results.append(await self._extract_from_element(el, extract_mode, attribute))
104
+ return results
105
+ else:
106
+ return await self._extract_from_element(locator.first, extract_mode, attribute)
107
+
108
+ async def evaluate(self, expression: str) -> Any:
109
+ return await self._page.evaluate(expression)
110
+
111
+ # ---- Capture ----
112
+
113
+ async def screenshot(
114
+ self,
115
+ full_page: bool,
116
+ selector: Optional[str],
117
+ format: str,
118
+ quality: Optional[int]
119
+ ) -> str:
120
+ import base64
121
+
122
+ params: Dict[str, Any] = {"type": format, "full_page": full_page}
123
+ if format == "jpeg" and quality is not None:
124
+ params["quality"] = int(quality)
125
+
126
+ if selector:
127
+ locator = self._page.locator(selector)
128
+ data = await locator.screenshot(**params)
129
+ else:
130
+ data = await self._page.screenshot(**params)
131
+
132
+ return base64.b64encode(data).decode("ascii")
133
+
134
+ # ---- State ----
135
+
136
+ async def get_cookies(self, urls: Optional[List[str]]) -> List[Dict[str, Any]]:
137
+ context = self._page.context
138
+ cookies = await context.cookies(urls or [])
139
+ return cookies
140
+
141
+ async def set_cookies(self, cookies: List[Dict[str, Any]]) -> Dict[str, Any]:
142
+ context = self._page.context
143
+ await context.add_cookies(cookies)
144
+ return { "set": len(cookies) }
145
+
146
+ # ---- Lifecycle ----
147
+
148
+ async def close(self) -> None:
149
+ await self._browser.close()
150
+
151
+ # ---- Internal helpers ----
152
+
153
+ def _resolve_locator(self, selector: Optional[str], xpath: Optional[str]) -> Any:
154
+ if selector:
155
+ return self._page.locator(selector)
156
+ return self._page.locator(f"xpath={xpath}")
157
+
158
+ async def _extract_from_element(self, el: Any, extract_mode: str, attribute: Optional[str]) -> Any:
159
+ if extract_mode == "text":
160
+ return await el.inner_text()
161
+ if extract_mode == "html":
162
+ return await el.evaluate("el => el.outerHTML")
163
+ # attribute
164
+ return await el.get_attribute(attribute)
165
+
166
+
167
+ @register_web_browser_service(WebBrowserDriver.PLAYWRIGHT)
168
+ class PlaywrightWebBrowserService(WebBrowserService):
169
+ async def create_session(self) -> PlaywrightBrowserSession:
170
+ from playwright.async_api import async_playwright
171
+
172
+ pw = await async_playwright().start()
173
+
174
+ launcher = getattr(pw, self.config.browser)
175
+ browser = await launcher.launch(headless=self.config.headless, args=self.config.args or None)
176
+ page = await browser.new_page()
177
+
178
+ return PlaywrightBrowserSession(browser, page)