kubiya-control-plane-api 0.9.15__py3-none-any.whl

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 (479) hide show
  1. control_plane_api/LICENSE +676 -0
  2. control_plane_api/README.md +350 -0
  3. control_plane_api/__init__.py +4 -0
  4. control_plane_api/__version__.py +8 -0
  5. control_plane_api/alembic/README +1 -0
  6. control_plane_api/alembic/env.py +121 -0
  7. control_plane_api/alembic/script.py.mako +28 -0
  8. control_plane_api/alembic/versions/2613c65c3dbe_initial_database_setup.py +32 -0
  9. control_plane_api/alembic/versions/2df520d4927d_merge_heads.py +28 -0
  10. control_plane_api/alembic/versions/43abf98d6a01_add_paused_status_to_executions.py +73 -0
  11. control_plane_api/alembic/versions/6289854264cb_merge_multiple_heads.py +28 -0
  12. control_plane_api/alembic/versions/6a4d4dc3d8dc_generate_execution_transitions.py +50 -0
  13. control_plane_api/alembic/versions/87d11cf0a783_add_disconnected_status_to_worker_.py +44 -0
  14. control_plane_api/alembic/versions/add_ephemeral_queue_support.py +85 -0
  15. control_plane_api/alembic/versions/add_model_type_to_llm_models.py +31 -0
  16. control_plane_api/alembic/versions/add_plan_executions_table.py +114 -0
  17. control_plane_api/alembic/versions/add_trace_span_tables.py +154 -0
  18. control_plane_api/alembic/versions/add_user_info_to_traces.py +36 -0
  19. control_plane_api/alembic/versions/adjusting_foreign_keys.py +32 -0
  20. control_plane_api/alembic/versions/b4983d976db2_initial_tables.py +1128 -0
  21. control_plane_api/alembic/versions/d181a3b40e71_rename_custom_metadata_to_metadata_in_.py +50 -0
  22. control_plane_api/alembic/versions/df9117888e82_add_missing_columns.py +82 -0
  23. control_plane_api/alembic/versions/f25de6ad895a_missing_migrations.py +34 -0
  24. control_plane_api/alembic/versions/f71305fb69b9_fix_ephemeral_queue_deletion_foreign_key.py +54 -0
  25. control_plane_api/alembic/versions/mark_local_exec_queues_as_ephemeral.py +68 -0
  26. control_plane_api/alembic.ini +148 -0
  27. control_plane_api/api/index.py +12 -0
  28. control_plane_api/app/__init__.py +11 -0
  29. control_plane_api/app/activities/__init__.py +20 -0
  30. control_plane_api/app/activities/agent_activities.py +384 -0
  31. control_plane_api/app/activities/plan_generation_activities.py +499 -0
  32. control_plane_api/app/activities/team_activities.py +424 -0
  33. control_plane_api/app/activities/temporal_cloud_activities.py +588 -0
  34. control_plane_api/app/config/__init__.py +35 -0
  35. control_plane_api/app/config/api_config.py +469 -0
  36. control_plane_api/app/config/config_loader.py +224 -0
  37. control_plane_api/app/config/model_pricing.py +323 -0
  38. control_plane_api/app/config/storage_config.py +159 -0
  39. control_plane_api/app/config.py +115 -0
  40. control_plane_api/app/controllers/__init__.py +0 -0
  41. control_plane_api/app/controllers/execution_environment_controller.py +1315 -0
  42. control_plane_api/app/database.py +135 -0
  43. control_plane_api/app/exceptions.py +408 -0
  44. control_plane_api/app/lib/__init__.py +11 -0
  45. control_plane_api/app/lib/environment.py +65 -0
  46. control_plane_api/app/lib/event_bus/__init__.py +17 -0
  47. control_plane_api/app/lib/event_bus/base.py +136 -0
  48. control_plane_api/app/lib/event_bus/manager.py +335 -0
  49. control_plane_api/app/lib/event_bus/providers/__init__.py +6 -0
  50. control_plane_api/app/lib/event_bus/providers/http_provider.py +166 -0
  51. control_plane_api/app/lib/event_bus/providers/nats_provider.py +324 -0
  52. control_plane_api/app/lib/event_bus/providers/redis_provider.py +233 -0
  53. control_plane_api/app/lib/event_bus/providers/websocket_provider.py +497 -0
  54. control_plane_api/app/lib/job_executor.py +330 -0
  55. control_plane_api/app/lib/kubiya_client.py +293 -0
  56. control_plane_api/app/lib/litellm_pricing.py +166 -0
  57. control_plane_api/app/lib/mcp_validation.py +163 -0
  58. control_plane_api/app/lib/nats/__init__.py +13 -0
  59. control_plane_api/app/lib/nats/credentials_manager.py +288 -0
  60. control_plane_api/app/lib/nats/listener.py +374 -0
  61. control_plane_api/app/lib/planning_prompt_builder.py +153 -0
  62. control_plane_api/app/lib/planning_tools/__init__.py +41 -0
  63. control_plane_api/app/lib/planning_tools/agents.py +409 -0
  64. control_plane_api/app/lib/planning_tools/agno_toolkit.py +836 -0
  65. control_plane_api/app/lib/planning_tools/base.py +119 -0
  66. control_plane_api/app/lib/planning_tools/cognitive_memory_tools.py +403 -0
  67. control_plane_api/app/lib/planning_tools/context_graph_tools.py +545 -0
  68. control_plane_api/app/lib/planning_tools/environments.py +218 -0
  69. control_plane_api/app/lib/planning_tools/knowledge.py +204 -0
  70. control_plane_api/app/lib/planning_tools/models.py +93 -0
  71. control_plane_api/app/lib/planning_tools/planning_service.py +646 -0
  72. control_plane_api/app/lib/planning_tools/resources.py +242 -0
  73. control_plane_api/app/lib/planning_tools/teams.py +334 -0
  74. control_plane_api/app/lib/policy_enforcer_client.py +1016 -0
  75. control_plane_api/app/lib/redis_client.py +803 -0
  76. control_plane_api/app/lib/sqlalchemy_utils.py +486 -0
  77. control_plane_api/app/lib/state_transition_tools/__init__.py +7 -0
  78. control_plane_api/app/lib/state_transition_tools/execution_context.py +388 -0
  79. control_plane_api/app/lib/storage/__init__.py +20 -0
  80. control_plane_api/app/lib/storage/base_provider.py +274 -0
  81. control_plane_api/app/lib/storage/provider_factory.py +157 -0
  82. control_plane_api/app/lib/storage/vercel_blob_provider.py +468 -0
  83. control_plane_api/app/lib/supabase.py +71 -0
  84. control_plane_api/app/lib/supabase_utils.py +138 -0
  85. control_plane_api/app/lib/task_planning/__init__.py +138 -0
  86. control_plane_api/app/lib/task_planning/agent_factory.py +308 -0
  87. control_plane_api/app/lib/task_planning/agents.py +389 -0
  88. control_plane_api/app/lib/task_planning/cache.py +218 -0
  89. control_plane_api/app/lib/task_planning/entity_resolver.py +273 -0
  90. control_plane_api/app/lib/task_planning/helpers.py +293 -0
  91. control_plane_api/app/lib/task_planning/hooks.py +474 -0
  92. control_plane_api/app/lib/task_planning/models.py +503 -0
  93. control_plane_api/app/lib/task_planning/plan_validator.py +166 -0
  94. control_plane_api/app/lib/task_planning/planning_workflow.py +2911 -0
  95. control_plane_api/app/lib/task_planning/runner.py +656 -0
  96. control_plane_api/app/lib/task_planning/streaming_hook.py +213 -0
  97. control_plane_api/app/lib/task_planning/workflow.py +424 -0
  98. control_plane_api/app/lib/templating/__init__.py +88 -0
  99. control_plane_api/app/lib/templating/compiler.py +278 -0
  100. control_plane_api/app/lib/templating/engine.py +178 -0
  101. control_plane_api/app/lib/templating/parsers/__init__.py +29 -0
  102. control_plane_api/app/lib/templating/parsers/base.py +96 -0
  103. control_plane_api/app/lib/templating/parsers/env.py +85 -0
  104. control_plane_api/app/lib/templating/parsers/graph.py +112 -0
  105. control_plane_api/app/lib/templating/parsers/secret.py +87 -0
  106. control_plane_api/app/lib/templating/parsers/simple.py +81 -0
  107. control_plane_api/app/lib/templating/resolver.py +366 -0
  108. control_plane_api/app/lib/templating/types.py +214 -0
  109. control_plane_api/app/lib/templating/validator.py +201 -0
  110. control_plane_api/app/lib/temporal_client.py +232 -0
  111. control_plane_api/app/lib/temporal_credentials_cache.py +178 -0
  112. control_plane_api/app/lib/temporal_credentials_service.py +203 -0
  113. control_plane_api/app/lib/validation/__init__.py +24 -0
  114. control_plane_api/app/lib/validation/runtime_validation.py +388 -0
  115. control_plane_api/app/main.py +531 -0
  116. control_plane_api/app/middleware/__init__.py +10 -0
  117. control_plane_api/app/middleware/auth.py +645 -0
  118. control_plane_api/app/middleware/exception_handler.py +267 -0
  119. control_plane_api/app/middleware/prometheus_middleware.py +173 -0
  120. control_plane_api/app/middleware/rate_limiting.py +384 -0
  121. control_plane_api/app/middleware/request_id.py +202 -0
  122. control_plane_api/app/models/__init__.py +40 -0
  123. control_plane_api/app/models/agent.py +90 -0
  124. control_plane_api/app/models/analytics.py +206 -0
  125. control_plane_api/app/models/associations.py +107 -0
  126. control_plane_api/app/models/auth_user.py +73 -0
  127. control_plane_api/app/models/context.py +161 -0
  128. control_plane_api/app/models/custom_integration.py +99 -0
  129. control_plane_api/app/models/environment.py +64 -0
  130. control_plane_api/app/models/execution.py +125 -0
  131. control_plane_api/app/models/execution_transition.py +50 -0
  132. control_plane_api/app/models/job.py +159 -0
  133. control_plane_api/app/models/llm_model.py +78 -0
  134. control_plane_api/app/models/orchestration.py +66 -0
  135. control_plane_api/app/models/plan_execution.py +102 -0
  136. control_plane_api/app/models/presence.py +49 -0
  137. control_plane_api/app/models/project.py +61 -0
  138. control_plane_api/app/models/project_management.py +85 -0
  139. control_plane_api/app/models/session.py +29 -0
  140. control_plane_api/app/models/skill.py +155 -0
  141. control_plane_api/app/models/system_tables.py +43 -0
  142. control_plane_api/app/models/task_planning.py +372 -0
  143. control_plane_api/app/models/team.py +86 -0
  144. control_plane_api/app/models/trace.py +257 -0
  145. control_plane_api/app/models/user_profile.py +54 -0
  146. control_plane_api/app/models/worker.py +221 -0
  147. control_plane_api/app/models/workflow.py +161 -0
  148. control_plane_api/app/models/workspace.py +50 -0
  149. control_plane_api/app/observability/__init__.py +177 -0
  150. control_plane_api/app/observability/context_logging.py +475 -0
  151. control_plane_api/app/observability/decorators.py +337 -0
  152. control_plane_api/app/observability/local_span_processor.py +702 -0
  153. control_plane_api/app/observability/metrics.py +303 -0
  154. control_plane_api/app/observability/middleware.py +246 -0
  155. control_plane_api/app/observability/optional.py +115 -0
  156. control_plane_api/app/observability/tracing.py +382 -0
  157. control_plane_api/app/policies/README.md +149 -0
  158. control_plane_api/app/policies/approved_users.rego +62 -0
  159. control_plane_api/app/policies/business_hours.rego +51 -0
  160. control_plane_api/app/policies/rate_limiting.rego +100 -0
  161. control_plane_api/app/policies/tool_enforcement/README.md +336 -0
  162. control_plane_api/app/policies/tool_enforcement/bash_command_validation.rego +71 -0
  163. control_plane_api/app/policies/tool_enforcement/business_hours_enforcement.rego +82 -0
  164. control_plane_api/app/policies/tool_enforcement/mcp_tool_allowlist.rego +58 -0
  165. control_plane_api/app/policies/tool_enforcement/production_safeguards.rego +80 -0
  166. control_plane_api/app/policies/tool_enforcement/role_based_tool_access.rego +44 -0
  167. control_plane_api/app/policies/tool_restrictions.rego +86 -0
  168. control_plane_api/app/routers/__init__.py +4 -0
  169. control_plane_api/app/routers/agents.py +382 -0
  170. control_plane_api/app/routers/agents_v2.py +1598 -0
  171. control_plane_api/app/routers/analytics.py +1310 -0
  172. control_plane_api/app/routers/auth.py +59 -0
  173. control_plane_api/app/routers/client_config.py +57 -0
  174. control_plane_api/app/routers/context_graph.py +561 -0
  175. control_plane_api/app/routers/context_manager.py +577 -0
  176. control_plane_api/app/routers/custom_integrations.py +490 -0
  177. control_plane_api/app/routers/enforcer.py +132 -0
  178. control_plane_api/app/routers/environment_context.py +252 -0
  179. control_plane_api/app/routers/environments.py +761 -0
  180. control_plane_api/app/routers/execution_environment.py +847 -0
  181. control_plane_api/app/routers/executions/__init__.py +28 -0
  182. control_plane_api/app/routers/executions/router.py +286 -0
  183. control_plane_api/app/routers/executions/services/__init__.py +22 -0
  184. control_plane_api/app/routers/executions/services/demo_worker_health.py +156 -0
  185. control_plane_api/app/routers/executions/services/status_service.py +420 -0
  186. control_plane_api/app/routers/executions/services/test_worker_health.py +480 -0
  187. control_plane_api/app/routers/executions/services/worker_health.py +514 -0
  188. control_plane_api/app/routers/executions/streaming/__init__.py +22 -0
  189. control_plane_api/app/routers/executions/streaming/deduplication.py +352 -0
  190. control_plane_api/app/routers/executions/streaming/event_buffer.py +353 -0
  191. control_plane_api/app/routers/executions/streaming/event_formatter.py +964 -0
  192. control_plane_api/app/routers/executions/streaming/history_loader.py +588 -0
  193. control_plane_api/app/routers/executions/streaming/live_source.py +693 -0
  194. control_plane_api/app/routers/executions/streaming/streamer.py +849 -0
  195. control_plane_api/app/routers/executions.py +4888 -0
  196. control_plane_api/app/routers/health.py +165 -0
  197. control_plane_api/app/routers/health_v2.py +394 -0
  198. control_plane_api/app/routers/integration_templates.py +496 -0
  199. control_plane_api/app/routers/integrations.py +287 -0
  200. control_plane_api/app/routers/jobs.py +1809 -0
  201. control_plane_api/app/routers/metrics.py +517 -0
  202. control_plane_api/app/routers/models.py +82 -0
  203. control_plane_api/app/routers/models_v2.py +628 -0
  204. control_plane_api/app/routers/plan_executions.py +1481 -0
  205. control_plane_api/app/routers/plan_generation_async.py +304 -0
  206. control_plane_api/app/routers/policies.py +669 -0
  207. control_plane_api/app/routers/presence.py +234 -0
  208. control_plane_api/app/routers/projects.py +987 -0
  209. control_plane_api/app/routers/runners.py +379 -0
  210. control_plane_api/app/routers/runtimes.py +172 -0
  211. control_plane_api/app/routers/secrets.py +171 -0
  212. control_plane_api/app/routers/skills.py +1010 -0
  213. control_plane_api/app/routers/skills_definitions.py +140 -0
  214. control_plane_api/app/routers/storage.py +456 -0
  215. control_plane_api/app/routers/task_planning.py +611 -0
  216. control_plane_api/app/routers/task_queues.py +650 -0
  217. control_plane_api/app/routers/team_context.py +274 -0
  218. control_plane_api/app/routers/teams.py +1747 -0
  219. control_plane_api/app/routers/templates.py +248 -0
  220. control_plane_api/app/routers/traces.py +571 -0
  221. control_plane_api/app/routers/websocket_client.py +479 -0
  222. control_plane_api/app/routers/websocket_executions_status.py +437 -0
  223. control_plane_api/app/routers/websocket_gateway.py +323 -0
  224. control_plane_api/app/routers/websocket_traces.py +576 -0
  225. control_plane_api/app/routers/worker_queues.py +2555 -0
  226. control_plane_api/app/routers/worker_websocket.py +419 -0
  227. control_plane_api/app/routers/workers.py +1004 -0
  228. control_plane_api/app/routers/workflows.py +204 -0
  229. control_plane_api/app/runtimes/__init__.py +6 -0
  230. control_plane_api/app/runtimes/validation.py +344 -0
  231. control_plane_api/app/schemas/__init__.py +1 -0
  232. control_plane_api/app/schemas/job_schemas.py +302 -0
  233. control_plane_api/app/schemas/mcp_schemas.py +311 -0
  234. control_plane_api/app/schemas/template_schemas.py +133 -0
  235. control_plane_api/app/schemas/trace_schemas.py +168 -0
  236. control_plane_api/app/schemas/worker_queue_observability_schemas.py +165 -0
  237. control_plane_api/app/services/__init__.py +1 -0
  238. control_plane_api/app/services/agno_planning_strategy.py +233 -0
  239. control_plane_api/app/services/agno_service.py +838 -0
  240. control_plane_api/app/services/claude_code_planning_service.py +203 -0
  241. control_plane_api/app/services/context_graph_client.py +224 -0
  242. control_plane_api/app/services/custom_integration_service.py +415 -0
  243. control_plane_api/app/services/integration_resolution_service.py +345 -0
  244. control_plane_api/app/services/litellm_service.py +394 -0
  245. control_plane_api/app/services/plan_generator.py +79 -0
  246. control_plane_api/app/services/planning_strategy.py +66 -0
  247. control_plane_api/app/services/planning_strategy_factory.py +118 -0
  248. control_plane_api/app/services/policy_service.py +615 -0
  249. control_plane_api/app/services/state_transition_service.py +755 -0
  250. control_plane_api/app/services/storage_service.py +593 -0
  251. control_plane_api/app/services/temporal_cloud_provisioning.py +150 -0
  252. control_plane_api/app/services/toolsets/context_graph_skill.py +432 -0
  253. control_plane_api/app/services/trace_retention.py +354 -0
  254. control_plane_api/app/services/worker_queue_metrics_service.py +190 -0
  255. control_plane_api/app/services/workflow_cancellation_manager.py +135 -0
  256. control_plane_api/app/services/workflow_operations_service.py +611 -0
  257. control_plane_api/app/skills/__init__.py +100 -0
  258. control_plane_api/app/skills/base.py +239 -0
  259. control_plane_api/app/skills/builtin/__init__.py +37 -0
  260. control_plane_api/app/skills/builtin/agent_communication/__init__.py +8 -0
  261. control_plane_api/app/skills/builtin/agent_communication/skill.py +246 -0
  262. control_plane_api/app/skills/builtin/code_ingestion/__init__.py +4 -0
  263. control_plane_api/app/skills/builtin/code_ingestion/skill.py +267 -0
  264. control_plane_api/app/skills/builtin/cognitive_memory/__init__.py +4 -0
  265. control_plane_api/app/skills/builtin/cognitive_memory/skill.py +174 -0
  266. control_plane_api/app/skills/builtin/contextual_awareness/__init__.py +4 -0
  267. control_plane_api/app/skills/builtin/contextual_awareness/skill.py +387 -0
  268. control_plane_api/app/skills/builtin/data_visualization/__init__.py +4 -0
  269. control_plane_api/app/skills/builtin/data_visualization/skill.py +154 -0
  270. control_plane_api/app/skills/builtin/docker/__init__.py +4 -0
  271. control_plane_api/app/skills/builtin/docker/skill.py +104 -0
  272. control_plane_api/app/skills/builtin/file_generation/__init__.py +4 -0
  273. control_plane_api/app/skills/builtin/file_generation/skill.py +94 -0
  274. control_plane_api/app/skills/builtin/file_system/__init__.py +4 -0
  275. control_plane_api/app/skills/builtin/file_system/skill.py +110 -0
  276. control_plane_api/app/skills/builtin/knowledge_api/__init__.py +5 -0
  277. control_plane_api/app/skills/builtin/knowledge_api/skill.py +124 -0
  278. control_plane_api/app/skills/builtin/python/__init__.py +4 -0
  279. control_plane_api/app/skills/builtin/python/skill.py +92 -0
  280. control_plane_api/app/skills/builtin/remote_filesystem/__init__.py +5 -0
  281. control_plane_api/app/skills/builtin/remote_filesystem/skill.py +170 -0
  282. control_plane_api/app/skills/builtin/shell/__init__.py +4 -0
  283. control_plane_api/app/skills/builtin/shell/skill.py +161 -0
  284. control_plane_api/app/skills/builtin/slack/__init__.py +3 -0
  285. control_plane_api/app/skills/builtin/slack/skill.py +302 -0
  286. control_plane_api/app/skills/builtin/workflow_executor/__init__.py +4 -0
  287. control_plane_api/app/skills/builtin/workflow_executor/skill.py +469 -0
  288. control_plane_api/app/skills/business_intelligence.py +189 -0
  289. control_plane_api/app/skills/config.py +63 -0
  290. control_plane_api/app/skills/loaders/__init__.py +14 -0
  291. control_plane_api/app/skills/loaders/base.py +73 -0
  292. control_plane_api/app/skills/loaders/filesystem_loader.py +199 -0
  293. control_plane_api/app/skills/registry.py +125 -0
  294. control_plane_api/app/utils/helpers.py +12 -0
  295. control_plane_api/app/utils/workflow_executor.py +354 -0
  296. control_plane_api/app/workflows/__init__.py +11 -0
  297. control_plane_api/app/workflows/agent_execution.py +520 -0
  298. control_plane_api/app/workflows/agent_execution_with_skills.py +223 -0
  299. control_plane_api/app/workflows/namespace_provisioning.py +326 -0
  300. control_plane_api/app/workflows/plan_generation.py +254 -0
  301. control_plane_api/app/workflows/team_execution.py +442 -0
  302. control_plane_api/scripts/seed_models.py +240 -0
  303. control_plane_api/scripts/validate_existing_tool_names.py +492 -0
  304. control_plane_api/shared/__init__.py +8 -0
  305. control_plane_api/shared/version.py +17 -0
  306. control_plane_api/test_deduplication.py +274 -0
  307. control_plane_api/test_executor_deduplication_e2e.py +309 -0
  308. control_plane_api/test_job_execution_e2e.py +283 -0
  309. control_plane_api/test_real_integration.py +193 -0
  310. control_plane_api/version.py +38 -0
  311. control_plane_api/worker/__init__.py +0 -0
  312. control_plane_api/worker/activities/__init__.py +0 -0
  313. control_plane_api/worker/activities/agent_activities.py +1585 -0
  314. control_plane_api/worker/activities/approval_activities.py +234 -0
  315. control_plane_api/worker/activities/job_activities.py +199 -0
  316. control_plane_api/worker/activities/runtime_activities.py +1167 -0
  317. control_plane_api/worker/activities/skill_activities.py +282 -0
  318. control_plane_api/worker/activities/team_activities.py +479 -0
  319. control_plane_api/worker/agent_runtime_server.py +370 -0
  320. control_plane_api/worker/binary_manager.py +333 -0
  321. control_plane_api/worker/config/__init__.py +31 -0
  322. control_plane_api/worker/config/worker_config.py +273 -0
  323. control_plane_api/worker/control_plane_client.py +1491 -0
  324. control_plane_api/worker/examples/analytics_integration_example.py +362 -0
  325. control_plane_api/worker/health_monitor.py +159 -0
  326. control_plane_api/worker/metrics.py +237 -0
  327. control_plane_api/worker/models/__init__.py +1 -0
  328. control_plane_api/worker/models/error_events.py +105 -0
  329. control_plane_api/worker/models/inputs.py +89 -0
  330. control_plane_api/worker/runtimes/__init__.py +35 -0
  331. control_plane_api/worker/runtimes/agent_runtime/runtime.py +485 -0
  332. control_plane_api/worker/runtimes/agno/__init__.py +34 -0
  333. control_plane_api/worker/runtimes/agno/config.py +248 -0
  334. control_plane_api/worker/runtimes/agno/hooks.py +385 -0
  335. control_plane_api/worker/runtimes/agno/mcp_builder.py +195 -0
  336. control_plane_api/worker/runtimes/agno/runtime.py +1063 -0
  337. control_plane_api/worker/runtimes/agno/utils.py +163 -0
  338. control_plane_api/worker/runtimes/base.py +979 -0
  339. control_plane_api/worker/runtimes/claude_code/__init__.py +38 -0
  340. control_plane_api/worker/runtimes/claude_code/cleanup.py +184 -0
  341. control_plane_api/worker/runtimes/claude_code/client_pool.py +529 -0
  342. control_plane_api/worker/runtimes/claude_code/config.py +829 -0
  343. control_plane_api/worker/runtimes/claude_code/hooks.py +482 -0
  344. control_plane_api/worker/runtimes/claude_code/litellm_proxy.py +1702 -0
  345. control_plane_api/worker/runtimes/claude_code/mcp_builder.py +467 -0
  346. control_plane_api/worker/runtimes/claude_code/mcp_discovery.py +558 -0
  347. control_plane_api/worker/runtimes/claude_code/runtime.py +1546 -0
  348. control_plane_api/worker/runtimes/claude_code/tool_mapper.py +403 -0
  349. control_plane_api/worker/runtimes/claude_code/utils.py +149 -0
  350. control_plane_api/worker/runtimes/factory.py +173 -0
  351. control_plane_api/worker/runtimes/model_utils.py +107 -0
  352. control_plane_api/worker/runtimes/validation.py +93 -0
  353. control_plane_api/worker/services/__init__.py +1 -0
  354. control_plane_api/worker/services/agent_communication_tools.py +908 -0
  355. control_plane_api/worker/services/agent_executor.py +485 -0
  356. control_plane_api/worker/services/agent_executor_v2.py +793 -0
  357. control_plane_api/worker/services/analytics_collector.py +457 -0
  358. control_plane_api/worker/services/analytics_service.py +464 -0
  359. control_plane_api/worker/services/approval_tools.py +310 -0
  360. control_plane_api/worker/services/approval_tools_agno.py +207 -0
  361. control_plane_api/worker/services/cancellation_manager.py +177 -0
  362. control_plane_api/worker/services/code_ingestion_tools.py +465 -0
  363. control_plane_api/worker/services/contextual_awareness_tools.py +405 -0
  364. control_plane_api/worker/services/data_visualization.py +834 -0
  365. control_plane_api/worker/services/event_publisher.py +531 -0
  366. control_plane_api/worker/services/jira_tools.py +257 -0
  367. control_plane_api/worker/services/remote_filesystem_tools.py +498 -0
  368. control_plane_api/worker/services/runtime_analytics.py +328 -0
  369. control_plane_api/worker/services/session_service.py +365 -0
  370. control_plane_api/worker/services/skill_context_enhancement.py +181 -0
  371. control_plane_api/worker/services/skill_factory.py +471 -0
  372. control_plane_api/worker/services/system_prompt_enhancement.py +410 -0
  373. control_plane_api/worker/services/team_executor.py +715 -0
  374. control_plane_api/worker/services/team_executor_v2.py +1866 -0
  375. control_plane_api/worker/services/tool_enforcement.py +254 -0
  376. control_plane_api/worker/services/workflow_executor/__init__.py +52 -0
  377. control_plane_api/worker/services/workflow_executor/event_processor.py +287 -0
  378. control_plane_api/worker/services/workflow_executor/event_publisher.py +210 -0
  379. control_plane_api/worker/services/workflow_executor/executors/__init__.py +15 -0
  380. control_plane_api/worker/services/workflow_executor/executors/base.py +270 -0
  381. control_plane_api/worker/services/workflow_executor/executors/json_executor.py +50 -0
  382. control_plane_api/worker/services/workflow_executor/executors/python_executor.py +50 -0
  383. control_plane_api/worker/services/workflow_executor/models.py +142 -0
  384. control_plane_api/worker/services/workflow_executor_tools.py +1748 -0
  385. control_plane_api/worker/skills/__init__.py +12 -0
  386. control_plane_api/worker/skills/builtin/context_graph_search/README.md +213 -0
  387. control_plane_api/worker/skills/builtin/context_graph_search/__init__.py +5 -0
  388. control_plane_api/worker/skills/builtin/context_graph_search/agno_impl.py +808 -0
  389. control_plane_api/worker/skills/builtin/context_graph_search/skill.yaml +67 -0
  390. control_plane_api/worker/skills/builtin/contextual_awareness/__init__.py +4 -0
  391. control_plane_api/worker/skills/builtin/contextual_awareness/agno_impl.py +62 -0
  392. control_plane_api/worker/skills/builtin/data_visualization/agno_impl.py +18 -0
  393. control_plane_api/worker/skills/builtin/data_visualization/skill.yaml +84 -0
  394. control_plane_api/worker/skills/builtin/docker/agno_impl.py +65 -0
  395. control_plane_api/worker/skills/builtin/docker/skill.yaml +60 -0
  396. control_plane_api/worker/skills/builtin/file_generation/agno_impl.py +47 -0
  397. control_plane_api/worker/skills/builtin/file_generation/skill.yaml +64 -0
  398. control_plane_api/worker/skills/builtin/file_system/agno_impl.py +32 -0
  399. control_plane_api/worker/skills/builtin/file_system/skill.yaml +54 -0
  400. control_plane_api/worker/skills/builtin/knowledge_api/__init__.py +4 -0
  401. control_plane_api/worker/skills/builtin/knowledge_api/agno_impl.py +50 -0
  402. control_plane_api/worker/skills/builtin/knowledge_api/skill.yaml +66 -0
  403. control_plane_api/worker/skills/builtin/python/agno_impl.py +25 -0
  404. control_plane_api/worker/skills/builtin/python/skill.yaml +60 -0
  405. control_plane_api/worker/skills/builtin/schema_fix_mixin.py +260 -0
  406. control_plane_api/worker/skills/builtin/shell/agno_impl.py +31 -0
  407. control_plane_api/worker/skills/builtin/shell/skill.yaml +60 -0
  408. control_plane_api/worker/skills/builtin/slack/__init__.py +3 -0
  409. control_plane_api/worker/skills/builtin/slack/agno_impl.py +1282 -0
  410. control_plane_api/worker/skills/builtin/slack/skill.yaml +276 -0
  411. control_plane_api/worker/skills/builtin/workflow_executor/agno_impl.py +62 -0
  412. control_plane_api/worker/skills/builtin/workflow_executor/skill.yaml +79 -0
  413. control_plane_api/worker/skills/loaders/__init__.py +5 -0
  414. control_plane_api/worker/skills/loaders/base.py +23 -0
  415. control_plane_api/worker/skills/loaders/filesystem_loader.py +357 -0
  416. control_plane_api/worker/skills/registry.py +208 -0
  417. control_plane_api/worker/tests/__init__.py +1 -0
  418. control_plane_api/worker/tests/conftest.py +12 -0
  419. control_plane_api/worker/tests/e2e/__init__.py +0 -0
  420. control_plane_api/worker/tests/e2e/test_context_graph_real_api.py +338 -0
  421. control_plane_api/worker/tests/e2e/test_context_graph_templates_e2e.py +523 -0
  422. control_plane_api/worker/tests/e2e/test_enforcement_e2e.py +344 -0
  423. control_plane_api/worker/tests/e2e/test_execution_flow.py +571 -0
  424. control_plane_api/worker/tests/e2e/test_single_execution_mode.py +656 -0
  425. control_plane_api/worker/tests/integration/__init__.py +0 -0
  426. control_plane_api/worker/tests/integration/test_builtin_skills_fixes.py +245 -0
  427. control_plane_api/worker/tests/integration/test_context_graph_search_integration.py +365 -0
  428. control_plane_api/worker/tests/integration/test_control_plane_integration.py +308 -0
  429. control_plane_api/worker/tests/integration/test_hook_enforcement_integration.py +579 -0
  430. control_plane_api/worker/tests/integration/test_scheduled_job_workflow.py +237 -0
  431. control_plane_api/worker/tests/integration/test_system_prompt_enhancement_integration.py +343 -0
  432. control_plane_api/worker/tests/unit/__init__.py +0 -0
  433. control_plane_api/worker/tests/unit/test_builtin_skill_autoload.py +396 -0
  434. control_plane_api/worker/tests/unit/test_context_graph_search.py +450 -0
  435. control_plane_api/worker/tests/unit/test_context_graph_templates.py +403 -0
  436. control_plane_api/worker/tests/unit/test_control_plane_client.py +401 -0
  437. control_plane_api/worker/tests/unit/test_control_plane_client_jobs.py +345 -0
  438. control_plane_api/worker/tests/unit/test_job_activities.py +353 -0
  439. control_plane_api/worker/tests/unit/test_skill_context_enhancement.py +321 -0
  440. control_plane_api/worker/tests/unit/test_system_prompt_enhancement.py +415 -0
  441. control_plane_api/worker/tests/unit/test_tool_enforcement.py +324 -0
  442. control_plane_api/worker/utils/__init__.py +1 -0
  443. control_plane_api/worker/utils/chunk_batcher.py +330 -0
  444. control_plane_api/worker/utils/environment.py +65 -0
  445. control_plane_api/worker/utils/error_publisher.py +260 -0
  446. control_plane_api/worker/utils/event_batcher.py +256 -0
  447. control_plane_api/worker/utils/logging_config.py +335 -0
  448. control_plane_api/worker/utils/logging_helper.py +326 -0
  449. control_plane_api/worker/utils/parameter_validator.py +120 -0
  450. control_plane_api/worker/utils/retry_utils.py +60 -0
  451. control_plane_api/worker/utils/streaming_utils.py +665 -0
  452. control_plane_api/worker/utils/tool_validation.py +332 -0
  453. control_plane_api/worker/utils/workspace_manager.py +163 -0
  454. control_plane_api/worker/websocket_client.py +393 -0
  455. control_plane_api/worker/worker.py +1297 -0
  456. control_plane_api/worker/workflows/__init__.py +0 -0
  457. control_plane_api/worker/workflows/agent_execution.py +909 -0
  458. control_plane_api/worker/workflows/scheduled_job_wrapper.py +332 -0
  459. control_plane_api/worker/workflows/team_execution.py +611 -0
  460. kubiya_control_plane_api-0.9.15.dist-info/METADATA +354 -0
  461. kubiya_control_plane_api-0.9.15.dist-info/RECORD +479 -0
  462. kubiya_control_plane_api-0.9.15.dist-info/WHEEL +5 -0
  463. kubiya_control_plane_api-0.9.15.dist-info/entry_points.txt +5 -0
  464. kubiya_control_plane_api-0.9.15.dist-info/licenses/LICENSE +676 -0
  465. kubiya_control_plane_api-0.9.15.dist-info/top_level.txt +3 -0
  466. scripts/__init__.py +1 -0
  467. scripts/migrations.py +39 -0
  468. scripts/seed_worker_queues.py +128 -0
  469. scripts/setup_agent_runtime.py +142 -0
  470. worker_internal/__init__.py +1 -0
  471. worker_internal/planner/__init__.py +1 -0
  472. worker_internal/planner/activities.py +1499 -0
  473. worker_internal/planner/agent_tools.py +197 -0
  474. worker_internal/planner/event_models.py +148 -0
  475. worker_internal/planner/event_publisher.py +67 -0
  476. worker_internal/planner/models.py +199 -0
  477. worker_internal/planner/retry_logic.py +134 -0
  478. worker_internal/planner/worker.py +300 -0
  479. worker_internal/planner/workflows.py +970 -0
@@ -0,0 +1,133 @@
1
+ """
2
+ Pydantic schemas for template API endpoints.
3
+
4
+ Defines request and response models for template compilation and validation.
5
+ """
6
+
7
+ from pydantic import BaseModel, Field
8
+ from typing import Dict, List, Any, Optional
9
+
10
+
11
+ class TemplateVariableSchema(BaseModel):
12
+ """Schema for a template variable."""
13
+ name: str = Field(..., description="Variable name (e.g., 'api_key' or 'secret.github_token')")
14
+ type: str = Field(..., description="Variable type: 'simple', 'secret', or 'env'")
15
+ raw: str = Field(..., description="Raw template string (e.g., '{{.secret.api_key}}')")
16
+ start: int = Field(..., description="Start position in template")
17
+ end: int = Field(..., description="End position in template")
18
+ display_name: str = Field(..., description="Display name without type prefix")
19
+
20
+
21
+ class ValidationErrorSchema(BaseModel):
22
+ """Schema for a validation error."""
23
+ message: str = Field(..., description="Human-readable error message")
24
+ variable: Optional[TemplateVariableSchema] = Field(None, description="Variable that caused the error")
25
+ position: Optional[int] = Field(None, description="Character position in template")
26
+ code: Optional[str] = Field(None, description="Machine-readable error code")
27
+
28
+
29
+ class TemplateCompileRequest(BaseModel):
30
+ """Request schema for template compilation endpoint."""
31
+ template: str = Field(..., description="Template string with {{variable}} syntax", min_length=1)
32
+ context: Optional[Dict[str, Any]] = Field(
33
+ default_factory=dict,
34
+ description="Context for compilation (variables, secrets, env_vars)"
35
+ )
36
+ validate_only: bool = Field(
37
+ False,
38
+ description="Only validate syntax without compiling"
39
+ )
40
+ environment_id: Optional[str] = Field(
41
+ None,
42
+ description="Environment ID for secret validation"
43
+ )
44
+
45
+ class Config:
46
+ json_schema_extra = {
47
+ "example": {
48
+ "template": "http://api.example.com:{{.env.PORT}}/auth?key={{.secret.api_key}}",
49
+ "context": {
50
+ "variables": {},
51
+ "secrets": {"api_key": "secret-value"},
52
+ "env_vars": {"PORT": "8080"}
53
+ },
54
+ "validate_only": False,
55
+ "environment_id": "env-123"
56
+ }
57
+ }
58
+
59
+
60
+ class TemplateCompileResponse(BaseModel):
61
+ """Response schema for template compilation endpoint."""
62
+ valid: bool = Field(..., description="Whether the template is valid")
63
+ compiled: Optional[str] = Field(None, description="Compiled template (if valid and context provided)")
64
+ variables: List[TemplateVariableSchema] = Field(default_factory=list, description="Variables found in template")
65
+ errors: List[ValidationErrorSchema] = Field(default_factory=list, description="Validation/compilation errors")
66
+ warnings: List[str] = Field(default_factory=list, description="Non-fatal warnings")
67
+
68
+ class Config:
69
+ json_schema_extra = {
70
+ "example": {
71
+ "valid": True,
72
+ "compiled": "http://api.example.com:8080/auth?key=secret-value",
73
+ "variables": [
74
+ {
75
+ "name": "env.PORT",
76
+ "type": "env",
77
+ "raw": "{{.env.PORT}}",
78
+ "start": 25,
79
+ "end": 38,
80
+ "display_name": "PORT"
81
+ },
82
+ {
83
+ "name": "secret.api_key",
84
+ "type": "secret",
85
+ "raw": "{{.secret.api_key}}",
86
+ "start": 48,
87
+ "end": 68,
88
+ "display_name": "api_key"
89
+ }
90
+ ],
91
+ "errors": [],
92
+ "warnings": []
93
+ }
94
+ }
95
+
96
+
97
+ class TemplateExtractVariablesRequest(BaseModel):
98
+ """Request schema for extracting variables from a template."""
99
+ template: str = Field(..., description="Template string to analyze", min_length=1)
100
+
101
+ class Config:
102
+ json_schema_extra = {
103
+ "example": {
104
+ "template": "User {{user}} accessing {{.secret.database}} on {{.env.HOST}}"
105
+ }
106
+ }
107
+
108
+
109
+ class TemplateExtractVariablesResponse(BaseModel):
110
+ """Response schema for variable extraction endpoint."""
111
+ variables: List[TemplateVariableSchema] = Field(..., description="All variables found in template")
112
+ secrets: List[str] = Field(default_factory=list, description="Secret names required")
113
+ env_vars: List[str] = Field(default_factory=list, description="Environment variable names required")
114
+ simple_vars: List[str] = Field(default_factory=list, description="Simple variable names required")
115
+
116
+ class Config:
117
+ json_schema_extra = {
118
+ "example": {
119
+ "variables": [
120
+ {
121
+ "name": "user",
122
+ "type": "simple",
123
+ "raw": "{{user}}",
124
+ "start": 5,
125
+ "end": 13,
126
+ "display_name": "user"
127
+ }
128
+ ],
129
+ "secrets": ["database"],
130
+ "env_vars": ["HOST"],
131
+ "simple_vars": ["user"]
132
+ }
133
+ }
@@ -0,0 +1,168 @@
1
+ """
2
+ Pydantic schemas for trace API endpoints.
3
+
4
+ These schemas define the request/response models for the traces REST API.
5
+ """
6
+
7
+ from pydantic import BaseModel, Field
8
+ from typing import Optional, List, Dict, Any
9
+ from datetime import datetime
10
+ from enum import Enum
11
+
12
+
13
+ class TraceStatus(str, Enum):
14
+ """Trace status enum"""
15
+ SUCCESS = "success"
16
+ ERROR = "error"
17
+ RUNNING = "running"
18
+
19
+
20
+ class SpanKind(str, Enum):
21
+ """OTEL span kind enum"""
22
+ INTERNAL = "INTERNAL"
23
+ SERVER = "SERVER"
24
+ CLIENT = "CLIENT"
25
+ PRODUCER = "PRODUCER"
26
+ CONSUMER = "CONSUMER"
27
+
28
+
29
+ class SpanStatusCode(str, Enum):
30
+ """OTEL span status code enum"""
31
+ UNSET = "UNSET"
32
+ OK = "OK"
33
+ ERROR = "ERROR"
34
+
35
+
36
+ # Response schemas
37
+
38
+ class SpanResponse(BaseModel):
39
+ """Span response schema"""
40
+ id: str
41
+ trace_id: str
42
+ span_id: str
43
+ parent_span_id: Optional[str] = None
44
+ organization_id: str
45
+ name: str
46
+ kind: SpanKind
47
+ status_code: SpanStatusCode
48
+ status_message: Optional[str] = None
49
+ start_time_unix_nano: int
50
+ end_time_unix_nano: Optional[int] = None
51
+ duration_ns: Optional[int] = None
52
+ duration_ms: Optional[float] = None
53
+ attributes: Dict[str, Any] = Field(default_factory=dict)
54
+ resource_attributes: Dict[str, Any] = Field(default_factory=dict)
55
+ events: List[Dict[str, Any]] = Field(default_factory=list)
56
+ links: List[Dict[str, Any]] = Field(default_factory=list)
57
+ created_at: datetime
58
+
59
+ # Nested children for tree structure
60
+ children: List["SpanResponse"] = Field(default_factory=list)
61
+
62
+ class Config:
63
+ from_attributes = True
64
+
65
+
66
+ class TraceListItem(BaseModel):
67
+ """Trace list item for list view"""
68
+ id: str
69
+ trace_id: str
70
+ organization_id: str
71
+ name: str
72
+ service_name: Optional[str] = None
73
+ status: TraceStatus
74
+ execution_id: Optional[str] = None
75
+ execution_type: Optional[str] = None
76
+ user_id: Optional[str] = None
77
+ user_email: Optional[str] = None
78
+ user_name: Optional[str] = None
79
+ user_avatar: Optional[str] = None
80
+ started_at: datetime
81
+ ended_at: Optional[datetime] = None
82
+ duration_ms: Optional[int] = None
83
+ span_count: int = 0
84
+ error_count: int = 0
85
+ created_at: datetime
86
+ updated_at: Optional[datetime] = None
87
+
88
+ class Config:
89
+ from_attributes = True
90
+
91
+
92
+ class TraceDetailResponse(BaseModel):
93
+ """Detailed trace response with spans"""
94
+ id: str
95
+ trace_id: str
96
+ organization_id: str
97
+ name: str
98
+ service_name: Optional[str] = None
99
+ status: TraceStatus
100
+ execution_id: Optional[str] = None
101
+ execution_type: Optional[str] = None
102
+ user_id: Optional[str] = None
103
+ user_email: Optional[str] = None
104
+ user_name: Optional[str] = None
105
+ user_avatar: Optional[str] = None
106
+ started_at: datetime
107
+ ended_at: Optional[datetime] = None
108
+ duration_ms: Optional[int] = None
109
+ span_count: int = 0
110
+ error_count: int = 0
111
+ created_at: datetime
112
+ updated_at: Optional[datetime] = None
113
+
114
+ # Spans as tree structure (root spans with nested children)
115
+ spans: List[SpanResponse] = Field(default_factory=list)
116
+
117
+ class Config:
118
+ from_attributes = True
119
+
120
+
121
+ class TraceListResponse(BaseModel):
122
+ """Paginated trace list response"""
123
+ items: List[TraceListItem]
124
+ total: int
125
+ page: int
126
+ page_size: int
127
+ total_pages: int
128
+ has_next: bool
129
+ has_previous: bool
130
+
131
+
132
+ class TraceStatsResponse(BaseModel):
133
+ """Trace statistics response"""
134
+ total_traces: int
135
+ success_count: int
136
+ error_count: int
137
+ running_count: int
138
+ error_rate: float
139
+ avg_duration_ms: Optional[float] = None
140
+ total_spans: int
141
+ # Stats by time period
142
+ period_start: Optional[datetime] = None
143
+ period_end: Optional[datetime] = None
144
+
145
+
146
+ class DeleteTraceResponse(BaseModel):
147
+ """Delete trace response"""
148
+ trace_id: str
149
+ deleted: bool
150
+ message: str
151
+
152
+
153
+ # Request/Query schemas
154
+
155
+ class TraceFilters(BaseModel):
156
+ """Query filters for trace list"""
157
+ status: Optional[TraceStatus] = None
158
+ time_from: Optional[datetime] = None
159
+ time_to: Optional[datetime] = None
160
+ search: Optional[str] = None
161
+ execution_id: Optional[str] = None
162
+ service_name: Optional[str] = None
163
+ user_id: Optional[str] = None
164
+ has_errors: Optional[bool] = None
165
+
166
+
167
+ # Allow forward references for self-referencing SpanResponse
168
+ SpanResponse.model_rebuild()
@@ -0,0 +1,165 @@
1
+ """
2
+ Pydantic schemas for Worker Queue Observability API.
3
+
4
+ This module defines request/response schemas for worker queue metrics,
5
+ workflow tracking, and activity tracing.
6
+ """
7
+
8
+ from pydantic import BaseModel, Field
9
+ from typing import Optional, List, Dict, Any
10
+ from datetime import datetime
11
+
12
+
13
+ class WorkerQueueMetricsResponse(BaseModel):
14
+ """Comprehensive metrics for a worker queue"""
15
+ queue_id: str = Field(..., description="Worker queue UUID")
16
+
17
+ # Worker Health
18
+ active_workers: int = Field(..., description="Number of active workers")
19
+ idle_workers: int = Field(..., description="Number of idle workers")
20
+ busy_workers: int = Field(..., description="Number of busy workers")
21
+ total_workers: int = Field(..., description="Total number of workers")
22
+
23
+ # Task Metrics (24h window)
24
+ tasks_processed_24h: int = Field(..., description="Tasks completed in last 24 hours")
25
+ tasks_failed_24h: int = Field(..., description="Tasks failed in last 24 hours")
26
+ tasks_pending: int = Field(..., description="Tasks currently pending")
27
+ avg_task_duration_ms: float = Field(..., description="Average task duration in milliseconds")
28
+
29
+ # Error Tracking
30
+ error_rate_percent: float = Field(..., description="Error rate percentage")
31
+ last_error_at: Optional[datetime] = Field(None, description="Timestamp of last error")
32
+
33
+ # Temporal Queue Metrics
34
+ task_queue_backlog: int = Field(0, description="Number of tasks in backlog")
35
+ task_queue_pollers: int = Field(0, description="Number of active pollers")
36
+
37
+ # Timing
38
+ last_activity_at: Optional[datetime] = Field(None, description="Last activity timestamp")
39
+ updated_at: datetime = Field(..., description="Metrics update timestamp")
40
+
41
+
42
+ class WorkflowListItem(BaseModel):
43
+ """Workflow list item for queue workflows"""
44
+ workflow_id: str = Field(..., description="Temporal workflow ID")
45
+ run_id: str = Field(..., description="Temporal run ID")
46
+ task_queue: str = Field(..., description="Task queue name")
47
+ worker_id: Optional[str] = Field(None, description="Worker ID processing this workflow")
48
+ status: str = Field(..., description="Workflow status")
49
+ execution_id: str = Field(..., description="Execution entity ID")
50
+ started_at: Optional[datetime] = Field(None, description="Workflow start time")
51
+ close_time: Optional[datetime] = Field(None, description="Workflow completion time")
52
+ workflow_type: str = Field(..., description="Workflow type")
53
+ attempt: int = Field(1, description="Execution attempt number")
54
+ history_length: int = Field(0, description="Workflow history event count")
55
+
56
+
57
+ class WorkflowsListResponse(BaseModel):
58
+ """Response for list queue workflows"""
59
+ workflows: List[WorkflowListItem] = Field(..., description="List of workflows")
60
+ total: int = Field(..., description="Total number of workflows")
61
+ pending_count: int = Field(0, description="Number of pending workflows")
62
+ running_count: int = Field(0, description="Number of running workflows")
63
+ completed_count: int = Field(0, description="Number of completed workflows")
64
+ failed_count: int = Field(0, description="Number of failed workflows")
65
+
66
+
67
+ class WorkflowEvent(BaseModel):
68
+ """Individual workflow history event"""
69
+ event_id: int = Field(..., description="Event ID")
70
+ event_type: str = Field(..., description="Event type")
71
+ event_time: datetime = Field(..., description="Event timestamp")
72
+ details: Dict[str, Any] = Field(default_factory=dict, description="Event details")
73
+
74
+
75
+ class ActivityExecution(BaseModel):
76
+ """Individual activity execution within a workflow"""
77
+ activity_id: str = Field(..., description="Activity ID")
78
+ activity_type: str = Field(..., description="Activity type/name")
79
+ status: str = Field(..., description="Activity status: scheduled, started, completed, failed, timed_out")
80
+ scheduled_time: datetime = Field(..., description="Activity scheduled timestamp")
81
+ started_time: Optional[datetime] = Field(None, description="Activity start timestamp")
82
+ completed_time: Optional[datetime] = Field(None, description="Activity completion timestamp")
83
+ duration_ms: Optional[float] = Field(None, description="Activity duration in milliseconds")
84
+ attempt: int = Field(1, description="Attempt number")
85
+ worker_identity: Optional[str] = Field(None, description="Worker that executed this activity")
86
+ failure_message: Optional[str] = Field(None, description="Failure message if activity failed")
87
+ input: Optional[Dict[str, Any]] = Field(None, description="Activity input data")
88
+ result: Optional[Dict[str, Any]] = Field(None, description="Activity result data")
89
+
90
+
91
+ class WorkflowTrace(BaseModel):
92
+ """Execution trace with activities and timeline"""
93
+ activities: List[ActivityExecution] = Field(..., description="List of activity executions")
94
+ timeline: List[Dict[str, Any]] = Field(..., description="Timeline events for visualization")
95
+ total_activities: int = Field(..., description="Total number of activities")
96
+ completed_activities: int = Field(0, description="Number of completed activities")
97
+ failed_activities: int = Field(0, description="Number of failed activities")
98
+
99
+
100
+ class WorkflowDetailsResponse(BaseModel):
101
+ """Detailed workflow information"""
102
+ workflow_id: str = Field(..., description="Temporal workflow ID")
103
+ run_id: str = Field(..., description="Temporal run ID")
104
+ status: str = Field(..., description="Workflow status")
105
+
106
+ # Execution Info
107
+ execution_id: str = Field(..., description="Execution entity ID")
108
+ execution_status: str = Field(..., description="Execution status from DB")
109
+
110
+ # Timing
111
+ start_time: Optional[datetime] = Field(None, description="Workflow start time")
112
+ close_time: Optional[datetime] = Field(None, description="Workflow close time")
113
+ execution_duration_ms: float = Field(0, description="Execution duration in milliseconds")
114
+
115
+ # Temporal Details
116
+ task_queue: str = Field(..., description="Task queue name")
117
+ workflow_type: str = Field(..., description="Workflow type")
118
+ attempt: int = Field(1, description="Execution attempt number")
119
+ history_length: int = Field(0, description="History event count")
120
+ history_size_bytes: int = Field(0, description="History size in bytes")
121
+
122
+ # Input
123
+ input: Optional[Dict[str, Any]] = Field(None, description="Workflow input data")
124
+
125
+ # Links
126
+ temporal_web_url: str = Field(..., description="Temporal Web UI URL")
127
+
128
+ # Events and Trace
129
+ recent_events: List[WorkflowEvent] = Field(default_factory=list, description="Recent workflow events")
130
+ trace: WorkflowTrace = Field(..., description="Workflow execution trace")
131
+
132
+
133
+ class TerminateWorkflowRequest(BaseModel):
134
+ """Request to terminate a running workflow"""
135
+ reason: str = Field(..., min_length=1, max_length=500, description="Termination reason")
136
+
137
+
138
+ class TerminateWorkflowResponse(BaseModel):
139
+ """Response after terminating a workflow"""
140
+ success: bool = Field(..., description="Whether termination was successful")
141
+ workflow_id: str = Field(..., description="Workflow ID that was terminated")
142
+ terminated_at: datetime = Field(..., description="Termination timestamp")
143
+
144
+
145
+ class BatchTerminateRequest(BaseModel):
146
+ """Request to terminate multiple executions"""
147
+ execution_ids: List[str] = Field(..., min_length=1, max_length=100, description="List of execution IDs to terminate")
148
+ reason: str = Field(..., min_length=1, max_length=500, description="Termination reason")
149
+
150
+
151
+ class BatchTerminateResult(BaseModel):
152
+ """Result for a single execution in batch termination"""
153
+ execution_id: str = Field(..., description="Execution ID")
154
+ success: bool = Field(..., description="Whether termination was successful")
155
+ workflow_id: Optional[str] = Field(None, description="Workflow ID if successful")
156
+ error: Optional[str] = Field(None, description="Error message if failed")
157
+ terminated_at: Optional[datetime] = Field(None, description="Termination timestamp if successful")
158
+
159
+
160
+ class BatchTerminateResponse(BaseModel):
161
+ """Response after batch terminating executions"""
162
+ total_requested: int = Field(..., description="Total number of executions requested for termination")
163
+ total_succeeded: int = Field(..., description="Number of successfully terminated executions")
164
+ total_failed: int = Field(..., description="Number of failed terminations")
165
+ results: List[BatchTerminateResult] = Field(..., description="Results for each execution")
@@ -0,0 +1 @@
1
+ # Services