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,218 @@
1
+ """
2
+ Environment Context Tools - Fetch environment and infrastructure information
3
+ """
4
+
5
+ from typing import Optional
6
+ from sqlalchemy.orm import Session
7
+ from control_plane_api.app.lib.planning_tools.base import BasePlanningTools
8
+ from control_plane_api.app.lib.supabase import get_supabase
9
+
10
+
11
+ class EnvironmentsContextTools(BasePlanningTools):
12
+ """
13
+ Tools for fetching environment and infrastructure context
14
+
15
+ Provides methods to:
16
+ - List available execution environments
17
+ - Get worker queue information
18
+ - Check resource availability
19
+ - Query runtime configurations
20
+ """
21
+
22
+ def __init__(self, db: Optional[Session] = None, organization_id: Optional[str] = None):
23
+ super().__init__(db=db, organization_id=organization_id)
24
+ self.name = "environment_context_tools"
25
+
26
+ async def list_environments(self, limit: int = 50) -> str:
27
+ """
28
+ List all available execution environments
29
+
30
+ Args:
31
+ limit: Maximum number of environments to return
32
+
33
+ Returns:
34
+ Formatted string with environment information including:
35
+ - Environment name and ID
36
+ - Status (active/inactive)
37
+ - Available resources
38
+ - Configuration details
39
+ """
40
+ try:
41
+ # Use Supabase for environments
42
+ client = get_supabase()
43
+
44
+ query = client.table("environments").select("*")
45
+ if self.organization_id:
46
+ query = query.eq("organization_id", self.organization_id)
47
+
48
+ result = query.limit(limit).execute()
49
+ environments = result.data or []
50
+
51
+ return self._format_list_response(
52
+ items=environments,
53
+ title="Available Environments",
54
+ key_fields=["status", "type", "region"],
55
+ )
56
+
57
+ except Exception as e:
58
+ return f"Error listing environments: {str(e)}"
59
+
60
+ async def get_environment_details(self, environment_id: str) -> str:
61
+ """
62
+ Get detailed information about a specific environment
63
+
64
+ Args:
65
+ environment_id: ID of the environment to fetch
66
+
67
+ Returns:
68
+ Detailed environment information including:
69
+ - Full configuration
70
+ - Resource limits
71
+ - Network settings
72
+ - Security policies
73
+ """
74
+ try:
75
+ response = await self._make_request("GET", f"/environments/{environment_id}")
76
+
77
+ return self._format_detail_response(
78
+ item=response,
79
+ title=f"Environment Details: {response.get('name', 'Unknown')}",
80
+ )
81
+
82
+ except Exception as e:
83
+ return f"Error fetching environment {environment_id}: {str(e)}"
84
+
85
+ async def list_worker_queues(self, environment_id: Optional[str] = None) -> str:
86
+ """
87
+ List available worker queues for task execution
88
+
89
+ Args:
90
+ environment_id: Optional environment ID to filter queues
91
+
92
+ Returns:
93
+ List of worker queues with:
94
+ - Queue name and ID
95
+ - Active worker count
96
+ - Queue status
97
+ - Processing capacity
98
+ """
99
+ try:
100
+ if environment_id:
101
+ endpoint = f"/environments/{environment_id}/worker-queues"
102
+ else:
103
+ endpoint = "/worker-queues"
104
+
105
+ params = {}
106
+ if self.organization_id:
107
+ params["organization_id"] = self.organization_id
108
+
109
+ response = await self._make_request("GET", endpoint, params=params)
110
+
111
+ queues = response if isinstance(response, list) else response.get("queues", [])
112
+
113
+ return self._format_list_response(
114
+ items=queues,
115
+ title="Available Worker Queues",
116
+ key_fields=["status", "active_workers", "pending_tasks", "environment_id"],
117
+ )
118
+
119
+ except Exception as e:
120
+ return f"Error listing worker queues: {str(e)}"
121
+
122
+ async def get_worker_queue_details(self, queue_id: str) -> str:
123
+ """
124
+ Get detailed information about a specific worker queue
125
+
126
+ Args:
127
+ queue_id: ID of the worker queue
128
+
129
+ Returns:
130
+ Detailed queue information including:
131
+ - Worker capacity and utilization
132
+ - Queue statistics
133
+ - Configuration
134
+ """
135
+ try:
136
+ response = await self._make_request("GET", f"/worker-queues/{queue_id}")
137
+
138
+ return self._format_detail_response(
139
+ item=response,
140
+ title=f"Worker Queue Details: {response.get('name', 'Unknown')}",
141
+ )
142
+
143
+ except Exception as e:
144
+ return f"Error fetching worker queue {queue_id}: {str(e)}"
145
+
146
+ async def check_resource_availability(self, environment_id: str) -> str:
147
+ """
148
+ Check resource availability in a specific environment
149
+
150
+ Args:
151
+ environment_id: ID of the environment to check
152
+
153
+ Returns:
154
+ Resource availability status including:
155
+ - CPU/Memory availability
156
+ - Active workers
157
+ - Queue capacity
158
+ """
159
+ try:
160
+ # Get environment details
161
+ env_response = await self._make_request("GET", f"/environments/{environment_id}")
162
+
163
+ # Get worker queues for this environment
164
+ queues_response = await self._make_request(
165
+ "GET",
166
+ f"/environments/{environment_id}/worker-queues"
167
+ )
168
+
169
+ queues = queues_response if isinstance(queues_response, list) else queues_response.get("queues", [])
170
+
171
+ total_workers = sum(q.get("active_workers", 0) for q in queues)
172
+ total_pending = sum(q.get("pending_tasks", 0) for q in queues)
173
+
174
+ output = [
175
+ f"Resource Availability for Environment: {env_response.get('name', 'Unknown')}",
176
+ f" Status: {env_response.get('status', 'unknown')}",
177
+ f" Worker Queues: {len(queues)}",
178
+ f" Total Active Workers: {total_workers}",
179
+ f" Total Pending Tasks: {total_pending}",
180
+ "",
181
+ "Queue Details:",
182
+ ]
183
+
184
+ for queue in queues:
185
+ output.append(
186
+ f" - {queue.get('name')}: "
187
+ f"{queue.get('active_workers', 0)} workers, "
188
+ f"{queue.get('pending_tasks', 0)} pending"
189
+ )
190
+
191
+ return "\n".join(output)
192
+
193
+ except Exception as e:
194
+ return f"Error checking resource availability: {str(e)}"
195
+
196
+ async def list_runtime_configurations(self) -> str:
197
+ """
198
+ List available runtime configurations
199
+
200
+ Returns:
201
+ Available runtime configurations including:
202
+ - Runtime types (docker, k8s, etc.)
203
+ - Resource templates
204
+ - Default configurations
205
+ """
206
+ try:
207
+ response = await self._make_request("GET", "/runtimes")
208
+
209
+ runtimes = response if isinstance(response, list) else response.get("runtimes", [])
210
+
211
+ return self._format_list_response(
212
+ items=runtimes,
213
+ title="Available Runtime Configurations",
214
+ key_fields=["type", "version", "resource_limits"],
215
+ )
216
+
217
+ except Exception as e:
218
+ return f"Error listing runtime configurations: {str(e)}"
@@ -0,0 +1,204 @@
1
+ """
2
+ Knowledge Context Tools - Fetch organizational knowledge for task planning
3
+ """
4
+
5
+ import os
6
+ from typing import Optional, List
7
+ import structlog
8
+ import httpx
9
+ from control_plane_api.app.lib.planning_tools.base import BasePlanningTools
10
+
11
+ logger = structlog.get_logger()
12
+
13
+ KNOWLEDGE_API_BASE_URL = os.environ.get("KUBIYA_API_BASE", "https://api.kubiya.ai")
14
+ ORCHESTRATOR_API_BASE_URL = os.environ.get("ORCHESTRATOR_API_BASE", "https://orchestrator.kubiya.ai")
15
+
16
+ class KnowledgeContextTools(BasePlanningTools):
17
+ """
18
+ Tools for fetching organizational knowledge and documentation
19
+
20
+ Provides methods to:
21
+ - Search manual knowledge base (user-entered private docs)
22
+ - Query organizational knowledge (Slack, Confluence, GitHub, etc.)
23
+ - Get relevant documentation
24
+ - Query best practices and guidelines
25
+ """
26
+
27
+ def __init__(
28
+ self,
29
+ db=None,
30
+ organization_id: Optional[str] = None,
31
+ api_token: Optional[str] = None,
32
+ api_base_url: str = f"{KNOWLEDGE_API_BASE_URL}/api/v1",
33
+ orchestrator_base_url: str = ORCHESTRATOR_API_BASE_URL
34
+ ):
35
+ super().__init__(db=db, organization_id=organization_id)
36
+ self.name = "knowledge_context_tools"
37
+ self.api_token = api_token
38
+ self.api_base_url = api_base_url.rstrip("/")
39
+ self.orchestrator_base_url = orchestrator_base_url.rstrip("/")
40
+
41
+ async def get_all_knowledge(self) -> List[dict]:
42
+ """
43
+ Get all organizational knowledge and documentation
44
+
45
+ Endpoint: GET /api/v1/knowledge
46
+ Returns all knowledge items for the organization
47
+
48
+ Returns:
49
+ List of all knowledge items with complete data
50
+ """
51
+ if not self.api_token:
52
+ logger.warning("knowledge_api_token_not_provided")
53
+ return []
54
+
55
+ try:
56
+ headers = {
57
+ "Authorization": f"Bearer {self.api_token}",
58
+ "Content-Type": "application/json"
59
+ }
60
+
61
+ async with httpx.AsyncClient(timeout=30.0) as client:
62
+ response = await client.get(
63
+ f"{self.api_base_url}/knowledge",
64
+ headers=headers
65
+ )
66
+
67
+ if response.status_code == 200:
68
+ data = response.json()
69
+ knowledge_items = data if isinstance(data, list) else data.get("data", [])
70
+
71
+ logger.info(
72
+ "knowledge_fetch_success",
73
+ count=len(knowledge_items)
74
+ )
75
+ return knowledge_items
76
+ else:
77
+ logger.error(
78
+ "knowledge_fetch_failed",
79
+ status_code=response.status_code,
80
+ error=response.text
81
+ )
82
+ return []
83
+
84
+ except Exception as e:
85
+ logger.error("knowledge_fetch_error", error=str(e))
86
+ return []
87
+
88
+ async def query_knowledge(self, query: str) -> List[str]:
89
+ """
90
+ Query the knowledge base with a specific question or search term
91
+
92
+ Endpoint: POST /api/v1/knowledge/query
93
+ Searches through organizational knowledge and returns relevant results
94
+
95
+ Args:
96
+ query: Search query or question (e.g., "how to deploy to AWS?", "raz==superman ? omer==?")
97
+
98
+ Returns:
99
+ List of relevant knowledge items/answers as strings
100
+ """
101
+ if not self.api_token:
102
+ logger.warning("knowledge_api_token_not_provided")
103
+ return []
104
+
105
+ try:
106
+ headers = {
107
+ "Authorization": f"Bearer {self.api_token}",
108
+ "Content-Type": "application/json"
109
+ }
110
+
111
+ payload = {"query": query}
112
+
113
+ async with httpx.AsyncClient(timeout=30.0) as client:
114
+ response = await client.post(
115
+ f"{self.api_base_url}/knowledge/query",
116
+ headers=headers,
117
+ json=payload
118
+ )
119
+
120
+ if response.status_code == 200:
121
+ data = response.json()
122
+ # API returns a list of strings
123
+ results = data if isinstance(data, list) else []
124
+
125
+ logger.info(
126
+ "knowledge_query_success",
127
+ query=query,
128
+ results_count=len(results)
129
+ )
130
+ return results
131
+ else:
132
+ logger.error(
133
+ "knowledge_query_failed",
134
+ query=query,
135
+ status_code=response.status_code,
136
+ error=response.text
137
+ )
138
+ return []
139
+
140
+ except Exception as e:
141
+ logger.error("knowledge_query_error", query=query, error=str(e))
142
+ return []
143
+
144
+ async def query_organizational_knowledge(self, query: str, limit: int = 5) -> List[dict]:
145
+ """
146
+ Query organizational knowledge from integrated sources (Slack, Confluence, GitHub, etc.)
147
+
148
+ Endpoint: POST https://orchestrator.kubiya.ai/api/query
149
+ Searches through Slack messages, Confluence pages, GitHub discussions, and other integrated sources
150
+
151
+ Args:
152
+ query: Search query or question (e.g., "I seems that version 0.3.37 is broken")
153
+ limit: Maximum number of results to return (default: 5)
154
+
155
+ Returns:
156
+ List of relevant knowledge items from organizational sources
157
+ """
158
+ if not self.api_token:
159
+ logger.warning("orchestrator_api_token_not_provided")
160
+ return []
161
+
162
+ try:
163
+ headers = {
164
+ "Authorization": f"Bearer {self.api_token}",
165
+ "Content-Type": "application/json",
166
+ "Accept": "application/json"
167
+ }
168
+
169
+ payload = {
170
+ "query": query,
171
+ "limit": limit
172
+ }
173
+
174
+ async with httpx.AsyncClient(timeout=30.0) as client:
175
+ response = await client.post(
176
+ f"{self.orchestrator_base_url}/api/query",
177
+ headers=headers,
178
+ json=payload
179
+ )
180
+
181
+ if response.status_code == 200:
182
+ data = response.json()
183
+ # API returns results as a list or dict with results key
184
+ results = data if isinstance(data, list) else data.get("results", data.get("data", []))
185
+
186
+ logger.info(
187
+ "organizational_knowledge_query_success",
188
+ query=query,
189
+ results_count=len(results) if isinstance(results, list) else 0
190
+ )
191
+ return results if isinstance(results, list) else []
192
+ else:
193
+ logger.error(
194
+ "organizational_knowledge_query_failed",
195
+ query=query,
196
+ status_code=response.status_code,
197
+ error=response.text
198
+ )
199
+ return []
200
+
201
+ except Exception as e:
202
+ logger.error("organizational_knowledge_query_error", query=query, error=str(e))
203
+ return []
204
+
@@ -0,0 +1,93 @@
1
+ """
2
+ Pydantic models for planning tool responses
3
+
4
+ These models ensure type safety and consistent data structures
5
+ when tools return information to the planning agent.
6
+ """
7
+
8
+ from pydantic import BaseModel, Field
9
+ from typing import List, Optional, Dict, Any
10
+ from datetime import datetime
11
+
12
+
13
+ class AgentModel(BaseModel):
14
+ """Agent information model with full context for planning"""
15
+ id: str
16
+ name: str
17
+ model_id: Optional[str] = Field(default="default")
18
+ description: Optional[str] = None
19
+ status: str
20
+ capabilities: Optional[List[str]] = None
21
+ configuration: Dict[str, Any] = Field(default_factory=dict)
22
+ llm_config: Dict[str, Any] = Field(default_factory=dict)
23
+ runtime: Optional[str] = None
24
+ team_id: Optional[str] = None
25
+ skills: List[Dict[str, Any]] = Field(default_factory=list) # Full skill details
26
+ skill_ids: List[str] = Field(default_factory=list)
27
+ projects: List[Dict[str, Any]] = Field(default_factory=list)
28
+ environments: List[Dict[str, Any]] = Field(default_factory=list)
29
+ execution_environment: Optional[Dict[str, Any]] = None # env_vars, secrets, integration_ids
30
+ created_at: Optional[datetime] = None
31
+ updated_at: Optional[datetime] = None
32
+ last_active_at: Optional[datetime] = None
33
+ error_message: Optional[str] = None
34
+
35
+
36
+ class TeamMemberModel(BaseModel):
37
+ """Team member information model"""
38
+ id: str
39
+ name: str
40
+ model_id: str = Field(default="default")
41
+ description: Optional[str] = None
42
+
43
+
44
+ class TeamModel(BaseModel):
45
+ """Team information model"""
46
+ id: str
47
+ name: str
48
+ description: Optional[str] = None
49
+ status: str
50
+ agent_count: int = 0
51
+ agents: Optional[List[TeamMemberModel]] = None
52
+
53
+
54
+ class EnvironmentModel(BaseModel):
55
+ """Environment information model"""
56
+ id: str
57
+ name: str
58
+ display_name: Optional[str] = None
59
+ description: Optional[str] = None
60
+ status: str
61
+ tags: List[str] = Field(default_factory=list)
62
+ settings: Dict[str, Any] = Field(default_factory=dict)
63
+
64
+
65
+ class WorkerQueueModel(BaseModel):
66
+ """Worker queue information model"""
67
+ id: str
68
+ name: str
69
+ display_name: Optional[str] = None
70
+ environment_id: Optional[str] = None
71
+ active_workers: int = 0
72
+ status: str
73
+
74
+
75
+ class ExecutionHistoryModel(BaseModel):
76
+ """Execution history summary model"""
77
+ entity_id: str
78
+ entity_type: str # "agent" or "team"
79
+ total_executions: int
80
+ completed: int
81
+ failed: int
82
+ success_rate: float
83
+ recent_executions: List[Dict[str, Any]] = Field(default_factory=list)
84
+
85
+
86
+ class SkillModel(BaseModel):
87
+ """Skill/tool information model"""
88
+ id: str
89
+ name: str
90
+ skill_type: str
91
+ description: Optional[str] = None
92
+ enabled: bool = True
93
+ configuration: Dict[str, Any] = Field(default_factory=dict)