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,350 @@
1
+ # Kubiya Control Plane API
2
+
3
+ A multi-tenant AI agent orchestration and management platform built with FastAPI, Temporal, and PostgreSQL.
4
+
5
+ ## Features
6
+
7
+ - **Multi-tenant Architecture**: Manage multiple projects, teams, and agents
8
+ - **Workflow Orchestration**: Temporal-based workflow execution
9
+ - **Flexible Agent Runtime**: Support for multiple agent types and skills
10
+ - **Policy Enforcement**: OPA-based policy engine for agent governance
11
+ - **Tool Call Enforcement**: Non-blocking validation of tool executions against policies
12
+ - **Event Bus System**: Pluggable multi-provider event streaming (HTTP, Redis, WebSocket, NATS)
13
+ - **Scalable Workers**: Distributed worker architecture for agent execution
14
+ - **Context Management**: Environment and team-specific context handling
15
+ - **LLM Integration**: Support for multiple LLM providers via LiteLLM
16
+ - **Comprehensive APIs**: RESTful APIs for all platform features
17
+
18
+ ### Tool Call Enforcement
19
+
20
+ The platform includes **end-to-end tool call enforcement** that validates agent tool executions against OPA policies:
21
+
22
+ - **Non-blocking enforcement**: Policy violations are injected into tool outputs without failing workflows
23
+ - **Fail-open strategy**: Graceful degradation on timeout or error prevents blocking workflows
24
+ - **Automatic risk assessment**: Tools classified as critical/high/medium/low risk
25
+ - **Full context enrichment**: User, organization, team, and environment data included in policy evaluation
26
+ - **5 example policies**: Role-based access, production safeguards, bash validation, business hours, MCP allowlist
27
+
28
+ See the [Tool Enforcement Guide](../docs/TOOL_ENFORCEMENT.md) for detailed documentation.
29
+
30
+ ### Event Bus System
31
+
32
+ The platform includes a **production-grade event bus abstraction** for real-time event streaming:
33
+
34
+ - **Multi-provider support**: HTTP, Redis, WebSocket, NATS
35
+ - **Parallel publishing**: Events sent to all providers simultaneously
36
+ - **Graceful degradation**: Continues if one provider fails
37
+ - **Optional dependencies**: Lightweight base package with optional providers
38
+ - **Comprehensive logging**: Structured JSON logs at every step
39
+ - **Health monitoring**: Per-provider and overall system health checks
40
+ - **Backwards compatible**: Falls back to direct Redis if not configured
41
+
42
+ **Quick Start:**
43
+
44
+ ```bash
45
+ # Base package (HTTP, Redis, WebSocket)
46
+ pip install kubiya-control-plane-api
47
+
48
+ # With YAML config support
49
+ pip install kubiya-control-plane-api[yaml]
50
+
51
+ # With NATS provider
52
+ pip install kubiya-control-plane-api[nats]
53
+
54
+ # All event bus features
55
+ pip install kubiya-control-plane-api[event-bus]
56
+ ```
57
+
58
+ **Configuration Example:**
59
+
60
+ ```yaml
61
+ # config.yaml
62
+ event_bus:
63
+ http:
64
+ enabled: true
65
+ base_url: http://localhost:8000
66
+ redis:
67
+ enabled: true
68
+ redis_url: redis://localhost:6379
69
+ ```
70
+
71
+ See the [Event Bus README](app/lib/event_bus/README.md) for detailed documentation.
72
+
73
+ ## Installation
74
+
75
+ ### Using pip
76
+
77
+ ```bash
78
+ pip install kubiya-control_plane_api
79
+ ```
80
+
81
+ ### From source
82
+
83
+ ```bash
84
+ git clone https://github.com/kubiyabot/agent-control-plane.git
85
+ cd agent-control-plane/control_plane_api
86
+ pip install -e .
87
+ ```
88
+
89
+ ### With development dependencies
90
+
91
+ ```bash
92
+ pip install kubiya-control_plane_api[dev]
93
+ ```
94
+
95
+ ## Quick Start
96
+
97
+ ### 1. Set up environment variables
98
+
99
+ Create a `.env` file or set the following environment variables:
100
+
101
+ ```bash
102
+ # Database Configuration
103
+ DATABASE_URL=postgresql://user:password@localhost:5432/control_plane
104
+
105
+ # Supabase (for serverless deployments)
106
+ SUPABASE_URL=your-supabase-url
107
+ SUPABASE_KEY=your-supabase-key
108
+
109
+ # Temporal Configuration
110
+ TEMPORAL_HOST=localhost:7233
111
+ TEMPORAL_NAMESPACE=default
112
+
113
+ # API Configuration
114
+ API_TITLE="Agent Control Plane"
115
+ API_VERSION="1.0.0"
116
+ ENVIRONMENT=development
117
+ LOG_LEVEL=info
118
+
119
+ # Security
120
+ SECRET_KEY=your-secret-key-here
121
+
122
+ # Optional: Kubiya Integration
123
+ KUBIYA_API_KEY=your-kubiya-api-key
124
+ KUBIYA_API_URL=https://api.kubiya.ai
125
+
126
+ # Optional: Event Bus Configuration (or use YAML config)
127
+ EVENT_BUS_HTTP_ENABLED=true
128
+ EVENT_BUS_HTTP_BASE_URL=http://localhost:8000
129
+ EVENT_BUS_REDIS_ENABLED=true
130
+ ```
131
+
132
+ **Alternatively, use YAML configuration** (recommended):
133
+
134
+ Create `config.yaml` or set `KUBIYA_CONFIG_FILE=/path/to/config.yaml`:
135
+
136
+ ```yaml
137
+ event_bus:
138
+ http:
139
+ enabled: true
140
+ base_url: http://localhost:8000
141
+ batching_enabled: true
142
+ redis:
143
+ enabled: true
144
+ redis_url: redis://localhost:6379
145
+ ```
146
+
147
+ ### 2. Run database migrations
148
+
149
+ ```bash
150
+ alembic upgrade head
151
+ ```
152
+
153
+ ### 3. Start the API server
154
+
155
+ ```bash
156
+ uvicorn app.main:app --host 0.0.0.0 --port 7777 --reload
157
+ ```
158
+
159
+ The API will be available at `http://localhost:7777`
160
+
161
+ ### 4. Access the API documentation
162
+
163
+ Open your browser and navigate to:
164
+ - Swagger UI: `http://localhost:7777/api/docs`
165
+ - ReDoc: `http://localhost:7777/api/redoc`
166
+
167
+ ### 5. Start a worker (optional)
168
+
169
+ To process agent execution workflows:
170
+
171
+ ```bash
172
+ python worker.py
173
+ ```
174
+
175
+ ## Package Structure
176
+
177
+ ```
178
+ app/
179
+ ├── activities/ # Temporal activities
180
+ ├── lib/ # Client libraries and utilities
181
+ │ ├── event_bus/ # Event bus abstraction (multi-provider)
182
+ │ │ ├── base.py # Provider interface
183
+ │ │ ├── manager.py # Manager orchestrator
184
+ │ │ └── providers/ # HTTP, Redis, WebSocket, NATS providers
185
+ │ ├── redis_client.py # Redis connection
186
+ │ └── temporal_client.py # Temporal connection
187
+ ├── middleware/ # FastAPI middleware (auth, etc.)
188
+ ├── models/ # SQLAlchemy models
189
+ ├── policies/ # OPA policy files (.rego)
190
+ ├── routers/ # FastAPI route handlers
191
+ ├── services/ # Business logic services
192
+ ├── skills/ # Agent skills
193
+ ├── workflows/ # Temporal workflows
194
+ ├── config.py # Configuration management
195
+ ├── database.py # Database connection
196
+ └── main.py # FastAPI application entry point
197
+ ```
198
+
199
+ ## API Endpoints
200
+
201
+ ### Core Resources
202
+
203
+ - **Projects**: `/api/v1/projects` - Multi-project management
204
+ - **Environments**: `/api/v1/environments` - Environment configuration
205
+ - **Agents**: `/api/v1/agents` - Agent management
206
+ - **Teams**: `/api/v1/teams` - Team management
207
+ - **Workflows**: `/api/v1/workflows` - Workflow definitions
208
+ - **Executions**: `/api/v1/executions` - Execution tracking
209
+ - **Workers**: `/api/v1/workers` - Worker registration and management
210
+
211
+ ### Skills and Policies
212
+
213
+ - **Skills**: `/api/v1/skills` - Tool sets and definitions
214
+ - **Policies**: `/api/v1/policies` - Policy management and enforcement
215
+
216
+ ### Integration
217
+
218
+ - **Secrets**: `/api/v1/secrets` - Secrets management (proxies to Kubiya)
219
+ - **Integrations**: `/api/v1/integrations` - Third-party integrations
220
+ - **Models**: `/api/v1/models` - LLM model configuration
221
+
222
+ ### Utilities
223
+
224
+ - **Health**: `/api/health` - Health check endpoint
225
+ - **Event Bus Health**: `/api/health/event-bus` - Event bus provider health
226
+ - **Task Planning**: `/api/v1/task-planning` - AI-powered task planning
227
+
228
+ ## Configuration
229
+
230
+ The application uses Pydantic Settings for configuration management. All settings can be configured via environment variables or a `.env` file.
231
+
232
+ ### Key Configuration Options
233
+
234
+ - `DATABASE_URL`: PostgreSQL connection string
235
+ - `SUPABASE_URL`, `SUPABASE_KEY`: Supabase configuration for serverless
236
+ - `TEMPORAL_HOST`: Temporal server address
237
+ - `KUBIYA_API_KEY`: Kubiya platform API key
238
+ - `SECRET_KEY`: Secret key for JWT token signing
239
+ - `LOG_LEVEL`: Logging level (debug, info, warning, error)
240
+ - `ENVIRONMENT`: Deployment environment (development, staging, production)
241
+
242
+ ## Development
243
+
244
+ ### Install development dependencies
245
+
246
+ ```bash
247
+ pip install -e ".[dev]"
248
+ ```
249
+
250
+ ### Run tests
251
+
252
+ ```bash
253
+ # All tests
254
+ pytest
255
+
256
+ # Unit tests only
257
+ pytest -m unit
258
+
259
+ # Integration tests
260
+ pytest -m integration
261
+
262
+ # With coverage
263
+ pytest --cov=app --cov-report=html
264
+ ```
265
+
266
+ ### Code formatting
267
+
268
+ ```bash
269
+ # Format code with black
270
+ black .
271
+
272
+ # Lint with ruff
273
+ ruff check .
274
+ ```
275
+
276
+ ### Database migrations
277
+
278
+ ```bash
279
+ # Create a new migration
280
+ alembic revision --autogenerate -m "Description of changes"
281
+
282
+ # Apply migrations
283
+ alembic upgrade head
284
+
285
+ # Rollback migration
286
+ alembic downgrade -1
287
+ ```
288
+
289
+ ## Deployment
290
+
291
+ ### Docker
292
+
293
+ ```bash
294
+ docker build -t control_plane_api .
295
+ docker run -p 7777:7777 --env-file .env control_plane_api
296
+ ```
297
+
298
+ ### Vercel (Serverless)
299
+
300
+ The API is configured for Vercel deployment with `vercel.json` and the Mangum adapter.
301
+
302
+ ```bash
303
+ vercel deploy
304
+ ```
305
+
306
+ ## Architecture
307
+
308
+ ### Workflow Orchestration
309
+
310
+ The platform uses Temporal for reliable workflow execution:
311
+ - Durable execution with automatic retries
312
+ - Activity-based task decomposition
313
+ - Support for long-running workflows
314
+ - Built-in observability and monitoring
315
+
316
+ ### Multi-tenancy
317
+
318
+ - **Projects**: Top-level isolation boundary
319
+ - **Environments**: Isolated execution contexts within projects
320
+ - **Teams**: Collaborative agent groups
321
+ - **Agents**: Individual agent instances
322
+
323
+ ### Worker Architecture
324
+
325
+ Workers pull tasks from environment-specific queues and execute agent workflows using Temporal.
326
+
327
+ ## Contributing
328
+
329
+ 1. Fork the repository
330
+ 2. Create a feature branch
331
+ 3. Make your changes
332
+ 4. Run tests and linting
333
+ 5. Submit a pull request
334
+
335
+ ## License
336
+
337
+ GNU Affero General Public License v3.0 (AGPL-3.0) - see LICENSE file for details
338
+
339
+ ## Support
340
+
341
+ For issues and questions:
342
+ - GitHub Issues: https://github.com/kubiyabot/agent-control-plane/issues
343
+ - Email: support@kubiya.ai
344
+
345
+ ## Links
346
+
347
+ - [Documentation](https://github.com/kubiyabot/agent-control-plane/blob/main/README.md)
348
+ - [GitHub Repository](https://github.com/kubiyabot/agent-control-plane)
349
+ - [Kubiya Platform](https://kubiya.ai)
350
+
@@ -0,0 +1,4 @@
1
+ """Kubiya Control Plane API"""
2
+ from control_plane_api.version import __version__, get_sdk_version
3
+
4
+ __all__ = ["__version__", "get_sdk_version"]
@@ -0,0 +1,8 @@
1
+ """DEPRECATED: Use control_plane_api.version instead
2
+
3
+ This file is kept for backward compatibility only.
4
+ All new code should import from control_plane_api.version
5
+ """
6
+ from control_plane_api.version import get_sdk_version, __version__
7
+
8
+ __all__ = ["__version__", "get_sdk_version"]
@@ -0,0 +1 @@
1
+ Generic single-database configuration.
@@ -0,0 +1,121 @@
1
+ from logging.config import fileConfig
2
+
3
+ from sqlalchemy import engine_from_config
4
+ from sqlalchemy import pool
5
+
6
+ from alembic import context
7
+
8
+ # Import application settings and models
9
+ import sys
10
+ from pathlib import Path
11
+
12
+ # Add parent directory to path so control_plane_api is importable
13
+ # env.py location: /app/control_plane_api/alembic/env.py
14
+ # We need: /app (which is parent.parent.parent)
15
+ sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent))
16
+
17
+ from control_plane_api.app.config import settings
18
+ from control_plane_api.app.database import Base
19
+
20
+ from control_plane_api.app.models.project import Project, ProjectStatus
21
+ from control_plane_api.app.models.agent import Agent, AgentStatus, RuntimeType as AgentRuntimeType
22
+ from control_plane_api.app.models.team import Team, TeamStatus, RuntimeType as TeamRuntimeType
23
+ from control_plane_api.app.models.session import Session
24
+ from control_plane_api.app.models.execution import Execution, ExecutionStatus, ExecutionType, ExecutionTriggerSource
25
+ from control_plane_api.app.models.execution_transition import ExecutionTransition
26
+ from control_plane_api.app.models.environment import Environment, EnvironmentStatus
27
+ from control_plane_api.app.models.associations import AgentEnvironment, TeamEnvironment, ExecutionParticipant, ParticipantRole
28
+ from control_plane_api.app.models.job import Job, JobExecution, JobStatus, JobTriggerType, ExecutorType, PlanningMode
29
+ from control_plane_api.app.models.skill import Skill, SkillAssociation, SlashCommand, SlashCommandExecution, SkillType, SkillEntityType, SlashCommandStatus
30
+ from control_plane_api.app.models.worker import Worker, WorkerHeartbeat, WorkerQueue, OrchestrationServer, OrchestrationServerHealth, WorkerStatus, WorkerRegistrationStatus, QueueStatus, ServerHealthStatus
31
+ from control_plane_api.app.models.orchestration import Namespace
32
+ from control_plane_api.app.models.context import AgentContext, EnvironmentContext, ProjectContext, TeamContext, ContextResource
33
+ from control_plane_api.app.models.analytics import ExecutionTurn, ExecutionToolCall, ExecutionTask
34
+ from control_plane_api.app.models.project_management import Profile, ProjectAgent, ProjectTeam
35
+ from control_plane_api.app.models.llm_model import LLMModel
36
+ from control_plane_api.app.models.presence import UserPresence
37
+ from control_plane_api.app.models.workflow import Workflow
38
+ from control_plane_api.app.models.system_tables import (PolicyAssociation)
39
+ # NOTE: auth_user is NOT imported because auth.users is an external table managed by Supabase
40
+ # The foreign key from profiles uses use_alter=True to handle the reference
41
+ from control_plane_api.app.models.workspace import Workspace
42
+ from control_plane_api.app.models.user_profile import UserProfile
43
+ from control_plane_api.app.models.plan_execution import PlanExecution, PlanExecutionStatus
44
+ from control_plane_api.app.models.trace import Trace, Span, TraceStatus, SpanKind, SpanStatusCode
45
+ from control_plane_api.app.models.custom_integration import CustomIntegration, CustomIntegrationStatus
46
+
47
+ # this is the Alembic Config object, which provides
48
+ # access to the values within the .ini file in use.
49
+ config = context.config
50
+
51
+ # Override sqlalchemy.url with our DATABASE_URL from settings
52
+ if settings.database_url:
53
+ # Escape % characters for ConfigParser (% -> %%)
54
+ escaped_url = settings.database_url.replace("%", "%%")
55
+ config.set_main_option("sqlalchemy.url", escaped_url)
56
+
57
+ # Interpret the config file for Python logging.
58
+ # This line sets up loggers basically.
59
+ if config.config_file_name is not None:
60
+ fileConfig(config.config_file_name)
61
+
62
+ # add your model's MetaData object here
63
+ # for 'autogenerate' support
64
+ target_metadata = Base.metadata
65
+
66
+ # other values from the config, defined by the needs of env.py,
67
+ # can be acquired:
68
+ # my_important_option = config.get_main_option("my_important_option")
69
+ # ... etc.
70
+
71
+
72
+ def run_migrations_offline() -> None:
73
+ """Run migrations in 'offline' mode.
74
+
75
+ This configures the context with just a URL
76
+ and not an Engine, though an Engine is acceptable
77
+ here as well. By skipping the Engine creation
78
+ we don't even need a DBAPI to be available.
79
+
80
+ Calls to context.execute() here emit the given string to the
81
+ script output.
82
+
83
+ """
84
+ url = config.get_main_option("sqlalchemy.url")
85
+ context.configure(
86
+ url=url,
87
+ target_metadata=target_metadata,
88
+ literal_binds=True,
89
+ dialect_opts={"paramstyle": "named"},
90
+ )
91
+
92
+ with context.begin_transaction():
93
+ context.run_migrations()
94
+
95
+
96
+ def run_migrations_online() -> None:
97
+ """Run migrations in 'online' mode.
98
+
99
+ In this scenario we need to create an Engine
100
+ and associate a connection with the context.
101
+
102
+ """
103
+ connectable = engine_from_config(
104
+ config.get_section(config.config_ini_section, {}),
105
+ prefix="sqlalchemy.",
106
+ poolclass=pool.NullPool,
107
+ )
108
+
109
+ with connectable.connect() as connection:
110
+ context.configure(
111
+ connection=connection, target_metadata=target_metadata
112
+ )
113
+
114
+ with context.begin_transaction():
115
+ context.run_migrations()
116
+
117
+
118
+ if context.is_offline_mode():
119
+ run_migrations_offline()
120
+ else:
121
+ run_migrations_online()
@@ -0,0 +1,28 @@
1
+ """${message}
2
+
3
+ Revision ID: ${up_revision}
4
+ Revises: ${down_revision | comma,n}
5
+ Create Date: ${create_date}
6
+
7
+ """
8
+ from typing import Sequence, Union
9
+
10
+ from alembic import op
11
+ import sqlalchemy as sa
12
+ ${imports if imports else ""}
13
+
14
+ # revision identifiers, used by Alembic.
15
+ revision: str = ${repr(up_revision)}
16
+ down_revision: Union[str, Sequence[str], None] = ${repr(down_revision)}
17
+ branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)}
18
+ depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)}
19
+
20
+
21
+ def upgrade() -> None:
22
+ """Upgrade schema."""
23
+ ${upgrades if upgrades else "pass"}
24
+
25
+
26
+ def downgrade() -> None:
27
+ """Downgrade schema."""
28
+ ${downgrades if downgrades else "pass"}
@@ -0,0 +1,32 @@
1
+ """initial_database_setup
2
+
3
+ Revision ID: 2613c65c3dbe
4
+ Revises:
5
+ Create Date: 2025-11-18 15:17:49.174839
6
+
7
+ """
8
+ from typing import Sequence, Union
9
+
10
+ from alembic import op
11
+ import sqlalchemy as sa
12
+
13
+
14
+ # revision identifiers, used by Alembic.
15
+ revision: str = '2613c65c3dbe'
16
+ down_revision: Union[str, Sequence[str], None] = None
17
+ branch_labels: Union[str, Sequence[str], None] = None
18
+ depends_on: Union[str, Sequence[str], None] = None
19
+
20
+
21
+ def upgrade() -> None:
22
+ """Upgrade schema."""
23
+ # Create PostgreSQL extensions required for the application
24
+ op.execute('CREATE EXTENSION IF NOT EXISTS "uuid-ossp"')
25
+ op.execute('CREATE EXTENSION IF NOT EXISTS "pg_trgm"')
26
+
27
+
28
+ def downgrade() -> None:
29
+ """Downgrade schema."""
30
+ # Drop PostgreSQL extensions
31
+ op.execute('DROP EXTENSION IF EXISTS "pg_trgm"')
32
+ op.execute('DROP EXTENSION IF EXISTS "uuid-ossp"')
@@ -0,0 +1,28 @@
1
+ """merge_heads
2
+
3
+ Revision ID: 2df520d4927d
4
+ Revises: add_model_type_to_llm_models, 91520433aafc
5
+ Create Date: 2025-12-08 14:55:51.006126
6
+
7
+ """
8
+ from typing import Sequence, Union
9
+
10
+ from alembic import op
11
+ import sqlalchemy as sa
12
+
13
+
14
+ # revision identifiers, used by Alembic.
15
+ revision: str = '2df520d4927d'
16
+ down_revision: Union[str, Sequence[str], None] = ('add_model_type_to_llm_models', '91520433aafc')
17
+ branch_labels: Union[str, Sequence[str], None] = None
18
+ depends_on: Union[str, Sequence[str], None] = None
19
+
20
+
21
+ def upgrade() -> None:
22
+ """Upgrade schema."""
23
+ pass
24
+
25
+
26
+ def downgrade() -> None:
27
+ """Downgrade schema."""
28
+ pass
@@ -0,0 +1,73 @@
1
+ """add_paused_status_to_executions
2
+
3
+ Adds PAUSED status to the executionstatus enum type,
4
+ enabling pause/resume functionality for executions.
5
+
6
+ Revision ID: 43abf98d6a01
7
+ Revises: 2df520d4927d
8
+ Create Date: 2025-12-08 14:55:54.974711
9
+
10
+ """
11
+ from typing import Sequence, Union
12
+
13
+ from alembic import op
14
+ import sqlalchemy as sa
15
+
16
+
17
+ # revision identifiers, used by Alembic.
18
+ revision: str = '43abf98d6a01'
19
+ down_revision: Union[str, Sequence[str], None] = '2df520d4927d'
20
+ branch_labels: Union[str, Sequence[str], None] = None
21
+ depends_on: Union[str, Sequence[str], None] = None
22
+
23
+
24
+ def upgrade() -> None:
25
+ """
26
+ Add 'paused' value to executionstatus enum.
27
+
28
+ Note: The status column in the executions table is actually String(50) in the ORM,
29
+ but we add this to the enum type for database-level validation if it exists.
30
+ """
31
+
32
+ op.execute("""
33
+ DO $$
34
+ BEGIN
35
+ -- Check if executionstatus enum type exists
36
+ IF EXISTS (SELECT 1 FROM pg_type WHERE typname = 'executionstatus') THEN
37
+ -- Check if 'paused' value doesn't already exist
38
+ IF NOT EXISTS (
39
+ SELECT 1 FROM pg_enum
40
+ WHERE enumlabel = 'paused'
41
+ AND enumtypid = (SELECT oid FROM pg_type WHERE typname = 'executionstatus')
42
+ ) THEN
43
+ ALTER TYPE executionstatus ADD VALUE 'paused';
44
+ RAISE NOTICE 'Added "paused" value to executionstatus enum';
45
+ ELSE
46
+ RAISE NOTICE '"paused" value already exists in executionstatus enum';
47
+ END IF;
48
+ ELSE
49
+ RAISE NOTICE 'executionstatus enum does not exist (column is String type) - no action needed';
50
+ END IF;
51
+ END $$;
52
+ """)
53
+
54
+ # Update type comment
55
+ op.execute("""
56
+ DO $$
57
+ BEGIN
58
+ IF EXISTS (SELECT 1 FROM pg_type WHERE typname = 'executionstatus') THEN
59
+ COMMENT ON TYPE executionstatus IS
60
+ 'Execution status: pending, running, waiting_for_input, paused, completed, failed, cancelled';
61
+ END IF;
62
+ END $$;
63
+ """)
64
+
65
+
66
+ def downgrade() -> None:
67
+ """
68
+ Downgrade is not supported for enum value additions.
69
+
70
+ PostgreSQL does not support removing enum values without recreating
71
+ the type, which would require table recreation and downtime.
72
+ """
73
+ pass
@@ -0,0 +1,28 @@
1
+ """merge_multiple_heads
2
+
3
+ Revision ID: 6289854264cb
4
+ Revises: 6a4d4dc3d8dc, add_plan_executions, add_user_info_to_traces
5
+ Create Date: 2026-01-15 09:03:43.072711
6
+
7
+ """
8
+ from typing import Sequence, Union
9
+
10
+ from alembic import op
11
+ import sqlalchemy as sa
12
+
13
+
14
+ # revision identifiers, used by Alembic.
15
+ revision: str = '6289854264cb'
16
+ down_revision: Union[str, Sequence[str], None] = ('6a4d4dc3d8dc', 'add_plan_executions', 'add_user_info_to_traces')
17
+ branch_labels: Union[str, Sequence[str], None] = None
18
+ depends_on: Union[str, Sequence[str], None] = None
19
+
20
+
21
+ def upgrade() -> None:
22
+ """Upgrade schema."""
23
+ pass
24
+
25
+
26
+ def downgrade() -> None:
27
+ """Downgrade schema."""
28
+ pass