model-compose 0.2.6__tar.gz → 0.2.7__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 (160) hide show
  1. {model_compose-0.2.6/src/model_compose.egg-info → model_compose-0.2.7}/PKG-INFO +1 -1
  2. {model_compose-0.2.6 → model_compose-0.2.7}/pyproject.toml +1 -1
  3. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/cli/compose.py +10 -4
  4. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/component/base.py +3 -3
  5. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/component/component.py +4 -4
  6. {model_compose-0.2.6/src/mindor/core/component/engine → model_compose-0.2.7/src/mindor/core/component/services}/http_client.py +2 -2
  7. {model_compose-0.2.6/src/mindor/core/component/engine → model_compose-0.2.7/src/mindor/core/component/services}/http_server.py +2 -2
  8. {model_compose-0.2.6/src/mindor/core/component/engine → model_compose-0.2.7/src/mindor/core/component/services}/mcp_client.py +2 -2
  9. {model_compose-0.2.6/src/mindor/core/component/engine → model_compose-0.2.7/src/mindor/core/component/services}/mcp_server.py +2 -2
  10. {model_compose-0.2.6/src/mindor/core/component/engine → model_compose-0.2.7/src/mindor/core/component/services}/shell.py +2 -2
  11. {model_compose-0.2.6/src/mindor/core/component/engine → model_compose-0.2.7/src/mindor/core/component/services}/workflow.py +2 -2
  12. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/compose/compose.py +6 -6
  13. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/compose/manager.py +10 -9
  14. model_compose-0.2.7/src/mindor/core/controller/__init__.py +2 -0
  15. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/controller/base.py +39 -24
  16. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/controller/controller.py +8 -6
  17. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/controller/runner/client.py +5 -1
  18. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/controller/runner/http_client.py +1 -1
  19. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/controller/runner/mcp_client.py +1 -1
  20. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/controller/runner/runner.py +0 -12
  21. {model_compose-0.2.6/src/mindor/core/controller/engine → model_compose-0.2.7/src/mindor/core/controller/services}/http_server.py +5 -3
  22. {model_compose-0.2.6/src/mindor/core/controller/engine → model_compose-0.2.7/src/mindor/core/controller/services}/mcp_server.py +6 -4
  23. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/gateway/base.py +3 -3
  24. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/gateway/gateway.py +5 -5
  25. {model_compose-0.2.6/src/mindor/core/gateway/engine → model_compose-0.2.7/src/mindor/core/gateway/services}/http_tunnel.py +2 -2
  26. {model_compose-0.2.6/src/mindor/core/gateway/engine → model_compose-0.2.7/src/mindor/core/gateway/services}/ssh_tunnel.py +2 -2
  27. model_compose-0.2.7/src/mindor/core/listener/__init__.py +2 -0
  28. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/listener/base.py +3 -3
  29. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/listener/listener.py +5 -5
  30. {model_compose-0.2.6/src/mindor/core/listener/engine → model_compose-0.2.7/src/mindor/core/listener/services}/http_callback.py +2 -2
  31. model_compose-0.2.7/src/mindor/core/logger/__init__.py +1 -0
  32. model_compose-0.2.7/src/mindor/core/logger/base.py +23 -0
  33. model_compose-0.2.7/src/mindor/core/logger/logger.py +19 -0
  34. model_compose-0.2.7/src/mindor/core/logger/logging.py +22 -0
  35. model_compose-0.2.7/src/mindor/core/logger/services/__init__.py +2 -0
  36. model_compose-0.2.7/src/mindor/core/logger/services/console.py +39 -0
  37. model_compose-0.2.7/src/mindor/core/logger/services/file.py +41 -0
  38. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/workflow/job/impl/action.py +3 -3
  39. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/workflow/schema.py +36 -21
  40. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/workflow/workflow.py +11 -2
  41. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/compose.py +10 -0
  42. model_compose-0.2.7/src/mindor/dsl/schema/gateway/__init__.py +1 -0
  43. model_compose-0.2.7/src/mindor/dsl/schema/logger/__init__.py +1 -0
  44. model_compose-0.2.7/src/mindor/dsl/schema/logger/impl/__init__.py +3 -0
  45. model_compose-0.2.7/src/mindor/dsl/schema/logger/impl/common.py +15 -0
  46. model_compose-0.2.7/src/mindor/dsl/schema/logger/impl/console.py +7 -0
  47. model_compose-0.2.7/src/mindor/dsl/schema/logger/impl/file.py +8 -0
  48. model_compose-0.2.7/src/mindor/dsl/schema/logger/impl/types.py +5 -0
  49. model_compose-0.2.7/src/mindor/dsl/schema/logger/logger.py +11 -0
  50. {model_compose-0.2.6 → model_compose-0.2.7/src/model_compose.egg-info}/PKG-INFO +1 -1
  51. {model_compose-0.2.6 → model_compose-0.2.7}/src/model_compose.egg-info/SOURCES.txt +29 -15
  52. model_compose-0.2.6/src/mindor/core/controller/__init__.py +0 -2
  53. model_compose-0.2.6/src/mindor/core/gateway/__init__.py +0 -2
  54. model_compose-0.2.6/src/mindor/core/listener/__init__.py +0 -2
  55. {model_compose-0.2.6 → model_compose-0.2.7}/LICENSE +0 -0
  56. {model_compose-0.2.6 → model_compose-0.2.7}/README.md +0 -0
  57. {model_compose-0.2.6 → model_compose-0.2.7}/setup.cfg +0 -0
  58. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/__init__.py +0 -0
  59. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/cli/__init__.py +0 -0
  60. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/__init__.py +0 -0
  61. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/component/__init__.py +0 -0
  62. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/component/context.py +0 -0
  63. {model_compose-0.2.6/src/mindor/core/component/engine → model_compose-0.2.7/src/mindor/core/component/services}/__init__.py +0 -0
  64. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/compose/__init__.py +0 -0
  65. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/controller/runner/__init__.py +0 -0
  66. {model_compose-0.2.6/src/mindor/core/controller/engine → model_compose-0.2.7/src/mindor/core/controller/services}/__init__.py +0 -0
  67. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/controller/webui/__init__.py +0 -0
  68. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/controller/webui/gradio.py +0 -0
  69. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/controller/webui/webui.py +0 -0
  70. {model_compose-0.2.6/src/mindor/dsl/schema → model_compose-0.2.7/src/mindor/core}/gateway/__init__.py +0 -0
  71. {model_compose-0.2.6/src/mindor/core/gateway/engine → model_compose-0.2.7/src/mindor/core/gateway/services}/__init__.py +0 -0
  72. {model_compose-0.2.6/src/mindor/core/listener/engine → model_compose-0.2.7/src/mindor/core/listener/services}/__init__.py +0 -0
  73. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/runtime/__init__.py +0 -0
  74. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/runtime/env.py +0 -0
  75. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/services/__init__.py +0 -0
  76. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/services/async_service.py +0 -0
  77. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/utils/__init__.py +0 -0
  78. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/utils/expiring.py +0 -0
  79. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/utils/http_client.py +0 -0
  80. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/utils/http_request.py +0 -0
  81. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/utils/http_status.py +0 -0
  82. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/utils/image.py +0 -0
  83. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/utils/mcp_client.py +0 -0
  84. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/utils/renderer.py +0 -0
  85. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/utils/ssh_client.py +0 -0
  86. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/utils/streaming.py +0 -0
  87. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/utils/time.py +0 -0
  88. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/utils/workqueue.py +0 -0
  89. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/workflow/__init__.py +0 -0
  90. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/workflow/context.py +0 -0
  91. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/workflow/job/__init__.py +0 -0
  92. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/workflow/job/base.py +0 -0
  93. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/workflow/job/impl/__init__.py +0 -0
  94. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/workflow/job/impl/delay.py +0 -0
  95. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/core/workflow/job/job.py +0 -0
  96. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/__init__.py +0 -0
  97. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/loader.py +0 -0
  98. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/__init__.py +0 -0
  99. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/action/__init__.py +0 -0
  100. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/action/action.py +0 -0
  101. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/action/impl/__init__.py +0 -0
  102. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/action/impl/common.py +0 -0
  103. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/action/impl/http_client.py +0 -0
  104. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/action/impl/http_server.py +0 -0
  105. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/action/impl/mcp_client.py +0 -0
  106. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/action/impl/mcp_server.py +0 -0
  107. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/action/impl/shell.py +0 -0
  108. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/action/impl/workflow.py +0 -0
  109. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/component/__init__.py +0 -0
  110. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/component/component.py +0 -0
  111. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/component/impl/__init__.py +0 -0
  112. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/component/impl/common.py +0 -0
  113. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/component/impl/http_client.py +0 -0
  114. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/component/impl/http_server.py +0 -0
  115. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/component/impl/mcp_client.py +0 -0
  116. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/component/impl/mcp_server.py +0 -0
  117. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/component/impl/shell.py +0 -0
  118. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/component/impl/types.py +0 -0
  119. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/component/impl/workflow.py +0 -0
  120. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/controller/__init__.py +0 -0
  121. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/controller/controller.py +0 -0
  122. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/controller/impl/__init__.py +0 -0
  123. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/controller/impl/common.py +0 -0
  124. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/controller/impl/http_server.py +0 -0
  125. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/controller/impl/mcp_server.py +0 -0
  126. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/controller/impl/types.py +0 -0
  127. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/controller/impl/webui.py +0 -0
  128. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/gateway/gateway.py +0 -0
  129. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/gateway/impl/__init__.py +0 -0
  130. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/gateway/impl/common.py +0 -0
  131. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/gateway/impl/http_tunnel.py +0 -0
  132. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/gateway/impl/ssh_tunnel.py +0 -0
  133. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/gateway/impl/types.py +0 -0
  134. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/job/__init__.py +0 -0
  135. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/job/impl/__init__.py +0 -0
  136. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/job/impl/action.py +0 -0
  137. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/job/impl/common.py +0 -0
  138. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/job/impl/delay.py +0 -0
  139. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/job/impl/types.py +0 -0
  140. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/job/job.py +0 -0
  141. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/listener/__init__.py +0 -0
  142. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/listener/impl/__init__.py +0 -0
  143. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/listener/impl/common.py +0 -0
  144. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/listener/impl/http_callback.py +0 -0
  145. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/listener/impl/types.py +0 -0
  146. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/listener/listener.py +0 -0
  147. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/runtime/__init__.py +0 -0
  148. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/runtime/impl/__init__.py +0 -0
  149. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/runtime/impl/common.py +0 -0
  150. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/runtime/impl/docker.py +0 -0
  151. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/runtime/impl/types.py +0 -0
  152. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/runtime/runtime.py +0 -0
  153. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/utils/__init__.py +0 -0
  154. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/utils/annotation.py +0 -0
  155. {model_compose-0.2.6 → model_compose-0.2.7}/src/mindor/dsl/schema/workflow.py +0 -0
  156. {model_compose-0.2.6 → model_compose-0.2.7}/src/model_compose.egg-info/dependency_links.txt +0 -0
  157. {model_compose-0.2.6 → model_compose-0.2.7}/src/model_compose.egg-info/entry_points.txt +0 -0
  158. {model_compose-0.2.6 → model_compose-0.2.7}/src/model_compose.egg-info/requires.txt +0 -0
  159. {model_compose-0.2.6 → model_compose-0.2.7}/src/model_compose.egg-info/top_level.txt +0 -0
  160. {model_compose-0.2.6 → model_compose-0.2.7}/tests/test_cli.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: model-compose
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: model-compose: Declarative AI Model and 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.2.6"
3
+ version = "0.2.7"
4
4
  description = "model-compose: Declarative AI Model and Workflow Orchestrator"
5
5
  authors = [
6
6
  { name = "Hanyeol Cho", email = "hanyeol.cho@gmail.com" }
@@ -31,19 +31,21 @@ def compose_command(ctx: click.Context, config_files: List[Path]) -> None:
31
31
  "--env", "-e", "env_data", multiple=True,
32
32
  help="Environment variable in the form KEY=VALUE. Repeatable.",
33
33
  )
34
+ @click.option("--verbose", "-v", is_flag=True, help="Enable verbose output.")
34
35
  @click.pass_context
35
36
  def up_command(
36
37
  ctx: click.Context,
37
38
  detach: bool,
38
39
  env_files: List[Path],
39
- env_data: List[str]
40
+ env_data: List[str],
41
+ verbose: bool
40
42
  ) -> None:
41
43
  config_files = ctx.obj.get("config_files", [])
42
44
  async def _async_command():
43
45
  try:
44
46
  env = load_env_files(".", env_files or [])
45
47
  config = load_compose_config(".", config_files, env)
46
- await launch_services(config, detach)
48
+ await launch_services(config, detach, verbose)
47
49
  except Exception as e:
48
50
  click.echo(f"❌ {e}", err=True)
49
51
  asyncio.run(_async_command())
@@ -86,18 +88,20 @@ def down_command(
86
88
  "--env", "-e", "env_data", multiple=True,
87
89
  help="Environment variable in the form KEY=VALUE. Repeatable.",
88
90
  )
91
+ @click.option("--verbose", "-v", is_flag=True, help="Enable verbose output.")
89
92
  @click.pass_context
90
93
  def start_command(
91
94
  ctx: click.Context,
92
95
  env_files: List[Path],
93
96
  env_data: List[str],
97
+ verbose: bool
94
98
  ) -> None:
95
99
  config_files = ctx.obj.get("config_files", [])
96
100
  async def _async_command():
97
101
  try:
98
102
  env = load_env_files(".", env_files or [])
99
103
  config = load_compose_config(".", config_files, env)
100
- await start_services(config)
104
+ await start_services(config, verbose)
101
105
  except Exception as e:
102
106
  click.echo(f"❌ {e}", err=True)
103
107
  asyncio.run(_async_command())
@@ -147,6 +151,7 @@ def stop_command(
147
151
  "--env", "-e", "env_data", multiple=True,
148
152
  help="Environment variable in the form KEY=VALUE. Repeatable.",
149
153
  )
154
+ @click.option("--verbose", "-v", is_flag=True, help="Enable verbose output.")
150
155
  @click.pass_context
151
156
  def run_command(
152
157
  ctx: click.Context,
@@ -154,6 +159,7 @@ def run_command(
154
159
  input_json: Optional[str],
155
160
  env_files: List[Path],
156
161
  env_data: List[str],
162
+ verbose: bool
157
163
  ) -> None:
158
164
  config_files = ctx.obj.get("config_files", [])
159
165
  async def _async_command():
@@ -161,7 +167,7 @@ def run_command(
161
167
  env = load_env_files(".", env_files or [])
162
168
  config = load_compose_config(".", config_files, env)
163
169
  input = json.loads(input_json) if input_json else {}
164
- state = await run_workflow(config, workflow, input)
170
+ state = await run_workflow(config, workflow, input, verbose)
165
171
  click.echo(json.dumps(
166
172
  state.error if state.error else state.output,
167
173
  indent=2,
@@ -45,7 +45,7 @@ class ComponentGlobalConfigs:
45
45
  self.gateways: List[GatewayConfig] = gateways
46
46
  self.workflows: Dict[str, WorkflowConfig] = workflows
47
47
 
48
- class ComponentEngine(AsyncService):
48
+ class ComponentService(AsyncService):
49
49
  def __init__(self, id: str, config: ComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
50
50
  super().__init__(daemon)
51
51
 
@@ -83,9 +83,9 @@ class ComponentEngine(AsyncService):
83
83
  pass
84
84
 
85
85
  def register_component(type: ComponentType):
86
- def decorator(cls: Type[ComponentEngine]) -> Type[ComponentEngine]:
86
+ def decorator(cls: Type[ComponentService]) -> Type[ComponentService]:
87
87
  ComponentRegistry[type] = cls
88
88
  return cls
89
89
  return decorator
90
90
 
91
- ComponentRegistry: Dict[ComponentType, Type[ComponentEngine]] = {}
91
+ ComponentRegistry: Dict[ComponentType, Type[ComponentService]] = {}
@@ -1,8 +1,8 @@
1
1
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
2
  from mindor.dsl.schema.component import ComponentConfig
3
- from .base import ComponentEngine, ComponentGlobalConfigs, ComponentRegistry
3
+ from .base import ComponentService, ComponentGlobalConfigs, ComponentRegistry
4
4
 
5
- ComponentInstances: Dict[str, ComponentEngine] = {}
5
+ ComponentInstances: Dict[str, ComponentService] = {}
6
6
 
7
7
  class ComponentResolver:
8
8
  def __init__(self, components: Dict[str, ComponentConfig]):
@@ -27,13 +27,13 @@ class ComponentResolver:
27
27
 
28
28
  return default_ids[0] if default_ids else "__default__"
29
29
 
30
- def create_component(id: str, config: ComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool) -> ComponentEngine:
30
+ def create_component(id: str, config: ComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool) -> ComponentService:
31
31
  try:
32
32
  component = ComponentInstances[id] if id in ComponentInstances else None
33
33
 
34
34
  if not component:
35
35
  if not ComponentRegistry:
36
- from . import engine
36
+ from . import services
37
37
  component = ComponentRegistry[config.type](id, config, global_configs, daemon)
38
38
  ComponentInstances[id] = component
39
39
 
@@ -6,7 +6,7 @@ from mindor.core.listener import HttpCallbackListener
6
6
  from mindor.core.utils.http_client import HttpClient
7
7
  from mindor.core.utils.http_status import is_status_code_matched
8
8
  from mindor.core.utils.time import parse_duration
9
- from ..base import ComponentEngine, ComponentType, ComponentGlobalConfigs, register_component
9
+ from ..base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
10
10
  from ..context import ComponentActionContext
11
11
  from datetime import datetime, timezone
12
12
  import asyncio
@@ -109,7 +109,7 @@ class HttpClientAction:
109
109
  return await context.render_variable(self.config.endpoint)
110
110
 
111
111
  @register_component(ComponentType.HTTP_CLIENT)
112
- class HttpClientComponent(ComponentEngine):
112
+ class HttpClientComponent(ComponentService):
113
113
  def __init__(self, id: str, config: HttpClientComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
114
114
  super().__init__(id, config, global_configs, daemon)
115
115
 
@@ -1,11 +1,11 @@
1
1
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
2
  from mindor.dsl.schema.component import HttpServerComponentConfig
3
3
  from mindor.dsl.schema.action import ActionConfig, HttpServerActionConfig
4
- from ..base import ComponentEngine, ComponentType, ComponentGlobalConfigs, register_component
4
+ from ..base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
5
5
  from ..context import ComponentActionContext
6
6
 
7
7
  @register_component(ComponentType.HTTP_SERVER)
8
- class HttpServerComponent(ComponentEngine):
8
+ class HttpServerComponent(ComponentService):
9
9
  def __init__(self, id: str, config: HttpServerComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
10
10
  super().__init__(id, config, global_configs, daemon)
11
11
 
@@ -2,7 +2,7 @@ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annot
2
2
  from mindor.dsl.schema.component import McpClientComponentConfig
3
3
  from mindor.dsl.schema.action import ActionConfig, McpClientActionConfig
4
4
  from mindor.core.utils.mcp_client import McpClient, ContentBlock, TextContent, ImageContent, AudioContent
5
- from ..base import ComponentEngine, ComponentType, ComponentGlobalConfigs, register_component
5
+ from ..base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
6
6
  from ..context import ComponentActionContext
7
7
 
8
8
  class McpClientAction():
@@ -28,7 +28,7 @@ class McpClientAction():
28
28
  return None
29
29
 
30
30
  @register_component(ComponentType.MCP_CLIENT)
31
- class McpClientComponent(ComponentEngine):
31
+ class McpClientComponent(ComponentService):
32
32
  def __init__(self, id: str, config: McpClientComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
33
33
  super().__init__(id, config, global_configs, daemon)
34
34
 
@@ -1,11 +1,11 @@
1
1
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
2
  from mindor.dsl.schema.component import McpServerComponentConfig
3
3
  from mindor.dsl.schema.action import ActionConfig, McpServerActionConfig
4
- from ..base import ComponentEngine, ComponentType, ComponentGlobalConfigs, register_component
4
+ from ..base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
5
5
  from ..context import ComponentActionContext
6
6
 
7
7
  @register_component(ComponentType.MCP_SERVER)
8
- class McpServerComponent(ComponentEngine):
8
+ class McpServerComponent(ComponentService):
9
9
  def __init__(self, id: str, config: McpServerComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
10
10
  super().__init__(id, config, global_configs, daemon)
11
11
 
@@ -1,7 +1,7 @@
1
1
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
2
  from mindor.dsl.schema.component import ShellComponentConfig
3
3
  from mindor.dsl.schema.action import ActionConfig, ShellActionConfig
4
- from ..base import ComponentEngine, ComponentType, ComponentGlobalConfigs, register_component
4
+ from ..base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
5
5
  from ..context import ComponentActionContext
6
6
  from asyncio.subprocess import Process
7
7
  import asyncio, os
@@ -65,7 +65,7 @@ class ShellAction:
65
65
  return working_dir
66
66
 
67
67
  @register_component(ComponentType.SHELL)
68
- class ShellComponent(ComponentEngine):
68
+ class ShellComponent(ComponentService):
69
69
  def __init__(self, id: str, config: ShellComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
70
70
  super().__init__(id, config, global_configs, daemon)
71
71
 
@@ -3,7 +3,7 @@ from mindor.dsl.schema.component import ComponentConfig, WorkflowComponentConfig
3
3
  from mindor.dsl.schema.action import ActionConfig, WorkflowActionConfig
4
4
  from mindor.dsl.schema.workflow import WorkflowConfig
5
5
  from mindor.core.workflow import Workflow, WorkflowResolver, create_workflow
6
- from ..base import ComponentEngine, ComponentType, ComponentGlobalConfigs, register_component
6
+ from ..base import ComponentService, ComponentType, ComponentGlobalConfigs, register_component
7
7
  from ..context import ComponentActionContext
8
8
  import asyncio, os
9
9
 
@@ -26,7 +26,7 @@ class WorkflowAction:
26
26
  return create_workflow(*WorkflowResolver(self.global_configs.workflows).resolve(workflow_id), self.global_configs)
27
27
 
28
28
  @register_component(ComponentType.WORKFLOW)
29
- class WorkflowComponent(ComponentEngine):
29
+ class WorkflowComponent(ComponentService):
30
30
  def __init__(self, id: str, config: WorkflowComponentConfig, global_configs: ComponentGlobalConfigs, daemon: bool):
31
31
  super().__init__(id, config, global_configs, daemon)
32
32
 
@@ -2,17 +2,17 @@ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annot
2
2
  from mindor.dsl.schema.compose import ComposeConfig
3
3
  from .manager import ComposeManager, TaskState
4
4
 
5
- async def launch_services(config: ComposeConfig, detach: bool):
6
- await ComposeManager(config, daemon=True).launch_services(detach=detach)
5
+ async def launch_services(config: ComposeConfig, detach: bool, verbose: bool):
6
+ await ComposeManager(config, daemon=True).launch_services(detach, verbose)
7
7
 
8
8
  async def shutdown_services(config: ComposeConfig):
9
9
  await ComposeManager(config, daemon=False).shutdown_services()
10
10
 
11
- async def start_services(config: ComposeConfig, detach: bool):
12
- await ComposeManager(config, daemon=False).start_services()
11
+ async def start_services(config: ComposeConfig, verbose: bool):
12
+ await ComposeManager(config, daemon=False).start_services(verbose)
13
13
 
14
14
  async def stop_services(config: ComposeConfig):
15
15
  await ComposeManager(config, daemon=False).stop_services()
16
16
 
17
- async def run_workflow(config: ComposeConfig, workflow_id: Optional[str], input: Dict[str, Any]) -> TaskState:
18
- return await ComposeManager(config, daemon=False).run_workflow(workflow_id, input)
17
+ async def run_workflow(config: ComposeConfig, workflow_id: Optional[str], input: Dict[str, Any], verbose: bool) -> TaskState:
18
+ return await ComposeManager(config, daemon=False).run_workflow(workflow_id, input, verbose)
@@ -1,34 +1,35 @@
1
1
  from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annotated, Any
2
2
  from mindor.dsl.schema.compose import ComposeConfig
3
- from mindor.core.controller import ControllerEngine, TaskState, create_controller
3
+ from mindor.core.controller import ControllerService, TaskState, create_controller
4
4
 
5
5
  class ComposeManager:
6
- def __init__(self, config: ComposeConfig, daemon: bool = True):
6
+ def __init__(self, config: ComposeConfig, daemon: bool):
7
7
  self.config: ComposeConfig = config
8
- self.controller: ControllerEngine = create_controller(
8
+ self.controller: ControllerService = create_controller(
9
9
  self.config.controller,
10
+ self.config.workflows,
10
11
  self.config.components,
11
12
  self.config.listeners,
12
13
  self.config.gateways,
13
- self.config.workflows,
14
+ self.config.loggers,
14
15
  daemon
15
16
  )
16
17
 
17
- async def launch_services(self, detach: bool, background: bool = False):
18
- await self.controller.start(background=background)
18
+ async def launch_services(self, detach: bool, verbose: bool):
19
+ await self.controller.start()
19
20
  await self.controller.wait_until_stopped()
20
21
 
21
22
  async def shutdown_services(self):
22
23
  await self.controller.stop()
23
24
 
24
- async def start_services(self, background: bool = False):
25
- await self.controller.start(background=background)
25
+ async def start_services(self, verbose: bool):
26
+ await self.controller.start()
26
27
  await self.controller.wait_until_stopped()
27
28
 
28
29
  async def stop_services(self):
29
30
  await self.controller.stop()
30
31
 
31
- async def run_workflow(self, workflow_id: Optional[str], input: Dict[str, Any]) -> TaskState:
32
+ async def run_workflow(self, workflow_id: Optional[str], input: Dict[str, Any], verbose: bool) -> TaskState:
32
33
  if not self.controller.started:
33
34
  await self.controller.start()
34
35
 
@@ -0,0 +1,2 @@
1
+ from .controller import *
2
+ from .base import TaskState
@@ -5,12 +5,14 @@ from mindor.dsl.schema.controller import ControllerConfig, ControllerType
5
5
  from mindor.dsl.schema.component import ComponentConfig
6
6
  from mindor.dsl.schema.listener import ListenerConfig
7
7
  from mindor.dsl.schema.gateway import GatewayConfig
8
+ from mindor.dsl.schema.logger import LoggerConfig
8
9
  from mindor.dsl.schema.workflow import WorkflowConfig
9
10
  from mindor.core.services import AsyncService
10
- from mindor.core.component import ComponentEngine, ComponentGlobalConfigs, create_component
11
- from mindor.core.listener import ListenerEngine, create_listener
12
- from mindor.core.gateway import GatewayEngine, create_gateway
11
+ from mindor.core.component import ComponentService, ComponentGlobalConfigs, create_component
12
+ from mindor.core.listener import ListenerService, create_listener
13
+ from mindor.core.gateway import GatewayService, create_gateway
13
14
  from mindor.core.workflow import Workflow, WorkflowResolver, create_workflow
15
+ from mindor.core.logger import LoggerService, create_logger
14
16
  from mindor.core.controller.webui import ControllerWebUI
15
17
  from mindor.core.utils.workqueue import WorkQueue
16
18
  from mindor.core.utils.expiring import ExpiringDict
@@ -30,23 +32,25 @@ class TaskState:
30
32
  output: Optional[Any] = None
31
33
  error: Optional[Any] = None
32
34
 
33
- class ControllerEngine(AsyncService):
35
+ class ControllerService(AsyncService):
34
36
  def __init__(
35
37
  self,
36
38
  config: ControllerConfig,
39
+ workflows: Dict[str, WorkflowConfig],
37
40
  components: Dict[str, ComponentConfig],
38
41
  listeners: List[ListenerConfig],
39
42
  gateways: List[GatewayConfig],
40
- workflows: Dict[str, WorkflowConfig],
43
+ loggers: List[LoggerConfig],
41
44
  daemon: bool
42
45
  ):
43
46
  super().__init__(daemon)
44
47
 
45
48
  self.config: ControllerConfig = config
49
+ self.workflows: Dict[str, WorkflowConfig] = workflows
46
50
  self.components: Dict[str, ComponentConfig] = components
47
51
  self.listeners: List[ListenerConfig] = listeners
48
52
  self.gateways: List[GatewayConfig] = gateways
49
- self.workflows: Dict[str, WorkflowConfig] = workflows
53
+ self.loggers: List[LoggerConfig] = loggers
50
54
  self.queue: Optional[WorkQueue] = None
51
55
  self.task_states: ExpiringDict[TaskState] = ExpiringDict()
52
56
  self.task_states_lock: Lock = Lock()
@@ -79,9 +83,10 @@ class ControllerEngine(AsyncService):
79
83
  await self.queue.start()
80
84
 
81
85
  if self.daemon:
82
- await self._start_components()
83
- await self._start_listeners()
86
+ await self._start_loggers()
84
87
  await self._start_gateways()
88
+ await self._start_listeners()
89
+ await self._start_components()
85
90
 
86
91
  if self.config.webui:
87
92
  await self._start_webui()
@@ -93,21 +98,16 @@ class ControllerEngine(AsyncService):
93
98
  await self.queue.stop()
94
99
 
95
100
  if self.daemon:
96
- await self._stop_gateways()
97
- await self._stop_listeners()
98
101
  await self._stop_components()
102
+ await self._stop_listeners()
103
+ await self._stop_gateways()
104
+ await self._stop_loggers()
99
105
 
100
106
  if self.config.webui:
101
107
  await self._stop_webui()
102
108
 
103
109
  await super()._stop()
104
110
 
105
- async def _start_components(self) -> None:
106
- await asyncio.gather(*[ component.start() for component in self._create_components() ])
107
-
108
- async def _stop_components(self) -> None:
109
- await asyncio.gather(*[ component.stop() for component in self._create_components() ])
110
-
111
111
  async def _start_listeners(self) -> None:
112
112
  await asyncio.gather(*[ listener.start() for listener in self._create_listeners() ])
113
113
 
@@ -120,6 +120,18 @@ class ControllerEngine(AsyncService):
120
120
  async def _stop_gateways(self) -> None:
121
121
  await asyncio.gather(*[ gateway.stop() for gateway in self._create_gateways() ])
122
122
 
123
+ async def _start_components(self) -> None:
124
+ await asyncio.gather(*[ component.start() for component in self._create_components() ])
125
+
126
+ async def _stop_components(self) -> None:
127
+ await asyncio.gather(*[ component.stop() for component in self._create_components() ])
128
+
129
+ async def _start_loggers(self) -> None:
130
+ await asyncio.gather(*[ logger.start() for logger in self._create_loggers() ])
131
+
132
+ async def _stop_loggers(self) -> None:
133
+ await asyncio.gather(*[ logger.stop() for logger in self._create_loggers() ])
134
+
123
135
  async def _start_webui(self) -> None:
124
136
  await asyncio.gather(*[ self._create_webui().start() ])
125
137
 
@@ -143,16 +155,19 @@ class ControllerEngine(AsyncService):
143
155
 
144
156
  return state
145
157
 
146
- def _create_components(self) -> List[ComponentEngine]:
147
- global_configs = self._get_component_global_configs()
148
- return [ create_component(component_id, config, global_configs, self.daemon) for component_id, config in self.components.items() ]
149
-
150
- def _create_listeners(self) -> List[ListenerEngine]:
158
+ def _create_listeners(self) -> List[ListenerService]:
151
159
  return [ create_listener(f"listener-{index}", config, self.daemon) for index, config in enumerate(self.listeners) ]
152
160
 
153
- def _create_gateways(self) -> List[GatewayEngine]:
161
+ def _create_gateways(self) -> List[GatewayService]:
154
162
  return [ create_gateway(f"gateway-{index}", config, self.daemon) for index, config in enumerate(self.gateways) ]
163
+
164
+ def _create_components(self) -> List[ComponentService]:
165
+ global_configs = self._get_component_global_configs()
166
+ return [ create_component(component_id, config, global_configs, self.daemon) for component_id, config in self.components.items() ]
155
167
 
168
+ def _create_loggers(self) -> List[LoggerService]:
169
+ return [ create_logger(f"logger-{index}", config, self.daemon) for index, config in enumerate(self.loggers) ]
170
+
156
171
  def _create_webui(self) -> ControllerWebUI:
157
172
  return ControllerWebUI(self.config.webui, self.config, self.components, self.workflows, self.daemon)
158
173
 
@@ -164,9 +179,9 @@ class ControllerEngine(AsyncService):
164
179
  return ComponentGlobalConfigs(self.components, self.listeners, self.gateways, self.workflows)
165
180
 
166
181
  def register_controller(type: ControllerType):
167
- def decorator(cls: Type[ControllerEngine]) -> Type[ControllerEngine]:
182
+ def decorator(cls: Type[ControllerService]) -> Type[ControllerService]:
168
183
  ControllerRegistry[type] = cls
169
184
  return cls
170
185
  return decorator
171
186
 
172
- ControllerRegistry: Dict[ControllerType, Type[ControllerEngine]] = {}
187
+ ControllerRegistry: Dict[ControllerType, Type[ControllerService]] = {}
@@ -4,19 +4,21 @@ from mindor.dsl.schema.component import ComponentConfig
4
4
  from mindor.dsl.schema.listener import ListenerConfig
5
5
  from mindor.dsl.schema.gateway import GatewayConfig
6
6
  from mindor.dsl.schema.workflow import WorkflowConfig
7
- from .base import ControllerEngine, ControllerRegistry
7
+ from mindor.dsl.schema.logger import LoggerConfig
8
+ from .base import ControllerService, ControllerRegistry
8
9
 
9
10
  def create_controller(
10
- config: ControllerConfig,
11
+ config: ControllerConfig,
12
+ workflows: Dict[str, WorkflowConfig],
11
13
  components: Dict[str, ComponentConfig],
12
14
  listeners: List[ListenerConfig],
13
15
  gateways: List[GatewayConfig],
14
- workflows: Dict[str, WorkflowConfig],
16
+ loggers: List[LoggerConfig],
15
17
  daemon: bool
16
- ) -> ControllerEngine:
18
+ ) -> ControllerService:
17
19
  try:
18
20
  if not ControllerRegistry:
19
- from . import engine
20
- return ControllerRegistry[config.type](config, components, listeners, gateways, workflows, daemon)
21
+ from . import services
22
+ return ControllerRegistry[config.type](config, workflows, components, listeners, gateways, loggers, daemon)
21
23
  except KeyError:
22
24
  raise ValueError(f"Unsupported controller type: {config.type}")
@@ -8,5 +8,9 @@ class ControllerClient(ABC):
8
8
  self.config: ControllerConfig = config
9
9
 
10
10
  @abstractmethod
11
- async def run_workflow(self, workflow_id: Optional[str], input: Any, workflow: WorkflowSchema) -> Any:
11
+ async def run_workflow(self, workflow_id: Optional[str], input: Any) -> Any:
12
+ pass
13
+
14
+ @abstractmethod
15
+ async def close(self) -> None:
12
16
  pass
@@ -2,7 +2,7 @@ from typing import Type, Union, Literal, Optional, Dict, List, Tuple, Set, Annot
2
2
  from mindor.dsl.schema.controller import ControllerConfig
3
3
  from mindor.core.workflow.schema import WorkflowSchema
4
4
  from mindor.core.utils.http_client import HttpClient
5
- from .runner import ControllerClient
5
+ from .client import ControllerClient
6
6
  from starlette.datastructures import UploadFile
7
7
 
8
8
  class HttpControllerClient(ControllerClient):
@@ -7,7 +7,7 @@ from mindor.core.utils.streaming import StreamResource, FileStreamResource, Base
7
7
  from mindor.core.utils.streaming import encode_stream_to_base64
8
8
  from mindor.core.utils.http_client import create_stream_with_url
9
9
  from mindor.core.utils.image import load_image_from_stream
10
- from .runner import ControllerClient
10
+ from .client import ControllerClient
11
11
  import json, os
12
12
 
13
13
  class McpControllerClient(ControllerClient):
@@ -6,18 +6,6 @@ from .client import ControllerClient
6
6
  from .http_client import HttpControllerClient
7
7
  from .mcp_client import McpControllerClient
8
8
 
9
- class ControllerClient(ABC):
10
- def __init__(self, config: ControllerConfig):
11
- self.config: ControllerConfig = config
12
-
13
- @abstractmethod
14
- async def run_workflow(self, workflow_id: Optional[str], input: Any) -> Any:
15
- pass
16
-
17
- @abstractmethod
18
- async def close(self) -> None:
19
- pass
20
-
21
9
  class ControllerRunner:
22
10
  def __init__(self, config: ControllerConfig):
23
11
  self.config: ControllerConfig = config
@@ -5,10 +5,11 @@ from mindor.dsl.schema.controller import HttpServerControllerConfig
5
5
  from mindor.dsl.schema.component import ComponentConfig
6
6
  from mindor.dsl.schema.listener import ListenerConfig
7
7
  from mindor.dsl.schema.gateway import GatewayConfig
8
+ from mindor.dsl.schema.logger import LoggerConfig
8
9
  from mindor.dsl.schema.workflow import WorkflowConfig
9
10
  from mindor.core.utils.http_request import parse_request_body, parse_options_header
10
11
  from mindor.core.utils.streaming import StreamResource
11
- from ..base import ControllerEngine, ControllerType, TaskState, TaskStatus, register_controller
12
+ from ..base import ControllerService, ControllerType, TaskState, TaskStatus, register_controller
12
13
  from fastapi import FastAPI, APIRouter, Request, Body, HTTPException
13
14
  from fastapi.middleware.cors import CORSMiddleware
14
15
  from fastapi.responses import Response, JSONResponse, StreamingResponse
@@ -37,7 +38,7 @@ class TaskResult(BaseModel):
37
38
  )
38
39
 
39
40
  @register_controller(ControllerType.HTTP_SERVER)
40
- class HttpServerController(ControllerEngine):
41
+ class HttpServerController(ControllerService):
41
42
  def __init__(
42
43
  self,
43
44
  config: HttpServerControllerConfig,
@@ -45,9 +46,10 @@ class HttpServerController(ControllerEngine):
45
46
  listeners: List[ListenerConfig],
46
47
  gateways: List[GatewayConfig],
47
48
  workflows: Dict[str, WorkflowConfig],
49
+ loggers: List[LoggerConfig],
48
50
  daemon: bool
49
51
  ):
50
- super().__init__(config, components, listeners, gateways, workflows, daemon)
52
+ super().__init__(config, components, listeners, gateways, workflows, loggers, daemon)
51
53
 
52
54
  self.server: Optional[uvicorn.Server] = None
53
55
  self.app: FastAPI = FastAPI(openapi_url=None, docs_url=None, redoc_url=None)
@@ -3,12 +3,13 @@ from mindor.dsl.schema.controller import McpServerControllerConfig
3
3
  from mindor.dsl.schema.component import ComponentConfig
4
4
  from mindor.dsl.schema.listener import ListenerConfig
5
5
  from mindor.dsl.schema.gateway import GatewayConfig
6
+ from mindor.dsl.schema.logger import LoggerConfig
6
7
  from mindor.dsl.schema.workflow import WorkflowConfig, WorkflowVariableConfig, WorkflowVariableType, WorkflowVariableFormat
7
8
  from mindor.core.workflow.schema import WorkflowSchema, create_workflow_schema
8
9
  from mindor.core.utils.streaming import StreamResource, Base64StreamResource
9
10
  from mindor.core.utils.streaming import save_stream_to_temporary_file
10
11
  from mindor.core.utils.http_client import create_stream_with_url
11
- from ..base import ControllerEngine, ControllerType, TaskState, register_controller
12
+ from ..base import ControllerService, ControllerType, TaskState, register_controller
12
13
  from mcp.server.fastmcp.server import FastMCP
13
14
  from mcp.types import TextContent, ImageContent, AudioContent
14
15
  import uvicorn, re, json
@@ -128,17 +129,18 @@ class WorkflowToolGenerator():
128
129
  return "str"
129
130
 
130
131
  @register_controller(ControllerType.MCP_SERVER)
131
- class McpServerController(ControllerEngine):
132
+ class McpServerController(ControllerService):
132
133
  def __init__(
133
134
  self,
134
135
  config: McpServerControllerConfig,
136
+ workflows: Dict[str, WorkflowConfig],
135
137
  components: Dict[str, ComponentConfig],
136
138
  listeners: List[ListenerConfig],
137
139
  gateways: List[GatewayConfig],
138
- workflows: Dict[str, WorkflowConfig],
140
+ loggers: List[LoggerConfig],
139
141
  daemon: bool
140
142
  ):
141
- super().__init__(config, components, listeners, gateways, workflows, daemon)
143
+ super().__init__(config, workflows, components, listeners, gateways, loggers, daemon)
142
144
 
143
145
  self.server: Optional[uvicorn.Server] = None
144
146
  self.app: FastMCP = FastMCP(self.config.name, **{
@@ -3,7 +3,7 @@ from abc import abstractmethod
3
3
  from mindor.dsl.schema.gateway import GatewayConfig, GatewayType
4
4
  from mindor.core.services import AsyncService
5
5
 
6
- class GatewayEngine(AsyncService):
6
+ class GatewayService(AsyncService):
7
7
  def __init__(self, id: str, config: GatewayConfig, daemon: bool):
8
8
  super().__init__(daemon)
9
9
 
@@ -15,9 +15,9 @@ class GatewayEngine(AsyncService):
15
15
  pass
16
16
 
17
17
  def register_gateway(type: GatewayType):
18
- def decorator(cls: Type[GatewayEngine]) -> Type[GatewayEngine]:
18
+ def decorator(cls: Type[GatewayService]) -> Type[GatewayService]:
19
19
  GatewayRegistry[type] = cls
20
20
  return cls
21
21
  return decorator
22
22
 
23
- GatewayRegistry: Dict[GatewayType, Type[GatewayEngine]] = {}
23
+ GatewayRegistry: Dict[GatewayType, Type[GatewayService]] = {}