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,387 @@
1
+ """Contextual Awareness Skill - Access Context Graph API for real-time organizational context."""
2
+ import json
3
+ from typing import Any, Dict, List, Optional
4
+
5
+ from pydantic import BaseModel, Field, validator
6
+
7
+ from control_plane_api.app.skills.base import SkillDefinition, SkillType, SkillCategory, SkillVariant, SkillRequirements
8
+
9
+
10
+ class NodeFilter(BaseModel):
11
+ """Configuration for filtering specific nodes in the context graph."""
12
+ label: Optional[str] = Field(None, description="Node label to filter by (e.g., 'User', 'Team', 'Project')")
13
+ property_name: Optional[str] = Field(None, description="Property name to filter by")
14
+ property_value: Optional[Any] = Field(None, description="Property value to match")
15
+ integration: Optional[str] = Field(None, description="Filter by integration name (e.g., 'Azure', 'Slack')")
16
+
17
+
18
+ class RelationshipFilter(BaseModel):
19
+ """Configuration for filtering specific relationships in the context graph."""
20
+ relationship_type: str = Field(..., description="Relationship type to filter (e.g., 'BELONGS_TO', 'OWNS')")
21
+ direction: str = Field("both", description="Relationship direction: 'incoming', 'outgoing', or 'both'")
22
+ integration: Optional[str] = Field(None, description="Filter by integration name")
23
+
24
+
25
+ class ContextualAwarenessConfiguration(BaseModel):
26
+ """Configuration for the Contextual Awareness skill."""
27
+
28
+ # Specific node/relationship configuration
29
+ predefined_nodes: List[Dict[str, Any]] = Field(
30
+ default_factory=list,
31
+ description="List of predefined node filters that the agent can query"
32
+ )
33
+
34
+ predefined_relationships: List[Dict[str, Any]] = Field(
35
+ default_factory=list,
36
+ description="List of predefined relationship filters that the agent can query"
37
+ )
38
+
39
+ # Dynamic search configuration
40
+ allow_dynamic_search: bool = Field(
41
+ False,
42
+ description="Allow agent to perform dynamic searches and custom Cypher queries on the graph"
43
+ )
44
+
45
+ allow_text_search: bool = Field(
46
+ True,
47
+ description="Allow agent to search nodes by text patterns"
48
+ )
49
+
50
+ allow_subgraph_queries: bool = Field(
51
+ True,
52
+ description="Allow agent to retrieve subgraphs (nodes and their relationships)"
53
+ )
54
+
55
+ # Integration filters
56
+ allowed_integrations: Optional[List[str]] = Field(
57
+ None,
58
+ description="List of integrations the agent can query. If None, all integrations are allowed."
59
+ )
60
+
61
+ # Query limits
62
+ max_results: int = Field(
63
+ 100,
64
+ ge=1,
65
+ le=1000,
66
+ description="Maximum number of results to return per query"
67
+ )
68
+
69
+ default_subgraph_depth: int = Field(
70
+ 1,
71
+ ge=1,
72
+ le=5,
73
+ description="Default depth for subgraph traversal (1-5)"
74
+ )
75
+
76
+ # Cache configuration
77
+ enable_caching: bool = Field(
78
+ True,
79
+ description="Enable caching of graph query results for performance"
80
+ )
81
+
82
+ cache_ttl: int = Field(
83
+ 300,
84
+ ge=0,
85
+ le=3600,
86
+ description="Cache time-to-live in seconds (0 to disable, max 1 hour)"
87
+ )
88
+
89
+ @validator('predefined_nodes')
90
+ def validate_nodes(cls, nodes):
91
+ """Validate that predefined nodes have proper structure."""
92
+ for node in nodes:
93
+ if not isinstance(node, dict):
94
+ raise ValueError("Each predefined node must be a dictionary")
95
+ # Optional validation of fields
96
+ valid_keys = {'label', 'property_name', 'property_value', 'integration', 'description'}
97
+ invalid_keys = set(node.keys()) - valid_keys
98
+ if invalid_keys:
99
+ raise ValueError(f"Invalid keys in node filter: {invalid_keys}")
100
+ return nodes
101
+
102
+ @validator('predefined_relationships')
103
+ def validate_relationships(cls, relationships):
104
+ """Validate that predefined relationships have proper structure."""
105
+ for rel in relationships:
106
+ if not isinstance(rel, dict):
107
+ raise ValueError("Each predefined relationship must be a dictionary")
108
+ if 'relationship_type' not in rel:
109
+ raise ValueError("Each predefined relationship must have a 'relationship_type' field")
110
+ # Validate direction if present
111
+ if 'direction' in rel and rel['direction'] not in ['incoming', 'outgoing', 'both']:
112
+ raise ValueError(f"Invalid direction: {rel['direction']}")
113
+ return relationships
114
+
115
+
116
+ class ContextualAwarenessSkill(SkillDefinition):
117
+ """
118
+ Contextual Awareness Skill Definition.
119
+
120
+ Provides agents with access to organizational context through the Context Graph API.
121
+ Agents can query nodes, relationships, and perform graph traversals to understand
122
+ the organizational context in real-time.
123
+ """
124
+
125
+ @property
126
+ def type(self) -> SkillType:
127
+ return SkillType.CONTEXTUAL_AWARENESS
128
+
129
+ @property
130
+ def name(self) -> str:
131
+ return "Contextual Awareness"
132
+
133
+ @property
134
+ def description(self) -> str:
135
+ return "Access organizational context from the Context Graph (Neo4j) including nodes, relationships, and graph traversals"
136
+
137
+ @property
138
+ def icon(self) -> str:
139
+ return "Network"
140
+
141
+ @property
142
+ def icon_type(self) -> str:
143
+ return "lucide"
144
+
145
+ def get_requirements(self) -> SkillRequirements:
146
+ """Get runtime requirements."""
147
+ return SkillRequirements(
148
+ python_packages=["httpx>=0.27.0", "pydantic>=2.0.0"],
149
+ external_dependencies=["Context Graph API"],
150
+ required_env_vars=[],
151
+ notes="Requires access to Context Graph API endpoint (default: https://graph.kubiya.ai)",
152
+ )
153
+
154
+ def get_variants(self) -> List[SkillVariant]:
155
+ """Get predefined variants for this skill."""
156
+ return [
157
+ SkillVariant(
158
+ id="read_only_basic",
159
+ name="Basic Context Access",
160
+ description="Read-only access to predefined nodes and relationships",
161
+ category=SkillCategory.COMMON,
162
+ configuration={
163
+ "predefined_nodes": [],
164
+ "predefined_relationships": [],
165
+ "allow_dynamic_search": False,
166
+ "allow_text_search": True,
167
+ "allow_subgraph_queries": False,
168
+ "max_results": 50,
169
+ "default_subgraph_depth": 1,
170
+ "enable_caching": True,
171
+ "cache_ttl": 300,
172
+ },
173
+ badge="Safe",
174
+ is_default=True,
175
+ ),
176
+ SkillVariant(
177
+ id="dynamic_search",
178
+ name="Dynamic Context Search",
179
+ description="Full search capabilities including dynamic queries and graph traversals",
180
+ category=SkillCategory.ADVANCED,
181
+ configuration={
182
+ "predefined_nodes": [],
183
+ "predefined_relationships": [],
184
+ "allow_dynamic_search": True,
185
+ "allow_text_search": True,
186
+ "allow_subgraph_queries": True,
187
+ "max_results": 100,
188
+ "default_subgraph_depth": 2,
189
+ "enable_caching": True,
190
+ "cache_ttl": 300,
191
+ },
192
+ badge="Advanced",
193
+ ),
194
+ SkillVariant(
195
+ id="integration_specific",
196
+ name="Integration-Specific Context",
197
+ description="Access context from specific integrations only",
198
+ category=SkillCategory.COMMON,
199
+ configuration={
200
+ "predefined_nodes": [],
201
+ "predefined_relationships": [],
202
+ "allow_dynamic_search": False,
203
+ "allow_text_search": True,
204
+ "allow_subgraph_queries": True,
205
+ "allowed_integrations": [], # To be filled by user
206
+ "max_results": 100,
207
+ "default_subgraph_depth": 2,
208
+ "enable_caching": True,
209
+ "cache_ttl": 300,
210
+ },
211
+ badge="Filtered",
212
+ ),
213
+ ]
214
+
215
+ def validate_configuration(self, config: Dict[str, Any]) -> Dict[str, Any]:
216
+ """
217
+ Validate and normalize configuration.
218
+
219
+ Args:
220
+ config: Raw configuration dict
221
+
222
+ Returns:
223
+ Validated and normalized configuration
224
+
225
+ Raises:
226
+ ValueError: If configuration is invalid
227
+ """
228
+ try:
229
+ # Parse and validate using Pydantic model
230
+ validated = ContextualAwarenessConfiguration(**config)
231
+ return validated.model_dump()
232
+ except Exception as e:
233
+ raise ValueError(f"Invalid Contextual Awareness configuration: {str(e)}")
234
+
235
+ def get_default_configuration(self) -> Dict[str, Any]:
236
+ """Get the default configuration for this skill."""
237
+ return {
238
+ "predefined_nodes": [],
239
+ "predefined_relationships": [],
240
+ "allow_dynamic_search": False,
241
+ "allow_text_search": True,
242
+ "allow_subgraph_queries": False,
243
+ "max_results": 50,
244
+ "default_subgraph_depth": 1,
245
+ "enable_caching": True,
246
+ "cache_ttl": 300,
247
+ }
248
+
249
+ def get_framework_class_name(self) -> str:
250
+ """
251
+ Get the underlying framework tool class name.
252
+
253
+ Returns:
254
+ Class name for the runtime tools implementation
255
+ """
256
+ return "ContextualAwarenessTools"
257
+
258
+ def get_configuration_schema(self) -> Dict[str, Any]:
259
+ """
260
+ Get the JSON schema for configuration validation.
261
+
262
+ Returns:
263
+ JSON schema for the configuration
264
+ """
265
+ return {
266
+ "type": "object",
267
+ "properties": {
268
+ "predefined_nodes": {
269
+ "type": "array",
270
+ "title": "Predefined Nodes",
271
+ "description": "List of predefined node filters that the agent can query",
272
+ "items": {
273
+ "type": "object",
274
+ "properties": {
275
+ "label": {
276
+ "type": "string",
277
+ "description": "Node label to filter by (e.g., 'User', 'Team', 'Project')"
278
+ },
279
+ "property_name": {
280
+ "type": "string",
281
+ "description": "Property name to filter by"
282
+ },
283
+ "property_value": {
284
+ "description": "Property value to match"
285
+ },
286
+ "integration": {
287
+ "type": "string",
288
+ "description": "Filter by integration name (e.g., 'Azure', 'Slack')"
289
+ },
290
+ "description": {
291
+ "type": "string",
292
+ "description": "Human-readable description of this node filter"
293
+ }
294
+ }
295
+ },
296
+ "default": []
297
+ },
298
+ "predefined_relationships": {
299
+ "type": "array",
300
+ "title": "Predefined Relationships",
301
+ "description": "List of predefined relationship filters that the agent can query",
302
+ "items": {
303
+ "type": "object",
304
+ "properties": {
305
+ "relationship_type": {
306
+ "type": "string",
307
+ "description": "Relationship type to filter (e.g., 'BELONGS_TO', 'OWNS')",
308
+ "required": True
309
+ },
310
+ "direction": {
311
+ "type": "string",
312
+ "enum": ["incoming", "outgoing", "both"],
313
+ "default": "both",
314
+ "description": "Relationship direction"
315
+ },
316
+ "integration": {
317
+ "type": "string",
318
+ "description": "Filter by integration name"
319
+ },
320
+ "description": {
321
+ "type": "string",
322
+ "description": "Human-readable description of this relationship filter"
323
+ }
324
+ },
325
+ "required": ["relationship_type"]
326
+ },
327
+ "default": []
328
+ },
329
+ "allow_dynamic_search": {
330
+ "type": "boolean",
331
+ "title": "Allow Dynamic Search",
332
+ "description": "Allow agent to perform dynamic searches and custom Cypher queries",
333
+ "default": False
334
+ },
335
+ "allow_text_search": {
336
+ "type": "boolean",
337
+ "title": "Allow Text Search",
338
+ "description": "Allow agent to search nodes by text patterns",
339
+ "default": True
340
+ },
341
+ "allow_subgraph_queries": {
342
+ "type": "boolean",
343
+ "title": "Allow Subgraph Queries",
344
+ "description": "Allow agent to retrieve subgraphs (nodes and their relationships)",
345
+ "default": False
346
+ },
347
+ "allowed_integrations": {
348
+ "type": "array",
349
+ "title": "Allowed Integrations",
350
+ "description": "List of integrations the agent can query. If empty, all integrations are allowed.",
351
+ "items": {
352
+ "type": "string"
353
+ },
354
+ "default": []
355
+ },
356
+ "max_results": {
357
+ "type": "integer",
358
+ "title": "Maximum Results",
359
+ "description": "Maximum number of results to return per query",
360
+ "minimum": 1,
361
+ "maximum": 1000,
362
+ "default": 50
363
+ },
364
+ "default_subgraph_depth": {
365
+ "type": "integer",
366
+ "title": "Default Subgraph Depth",
367
+ "description": "Default depth for subgraph traversal (1-5)",
368
+ "minimum": 1,
369
+ "maximum": 5,
370
+ "default": 1
371
+ },
372
+ "enable_caching": {
373
+ "type": "boolean",
374
+ "title": "Enable Caching",
375
+ "description": "Enable caching of graph query results for performance",
376
+ "default": True
377
+ },
378
+ "cache_ttl": {
379
+ "type": "integer",
380
+ "title": "Cache TTL (seconds)",
381
+ "description": "Cache time-to-live in seconds (0 to disable, max 1 hour)",
382
+ "minimum": 0,
383
+ "maximum": 3600,
384
+ "default": 300
385
+ }
386
+ }
387
+ }
@@ -0,0 +1,4 @@
1
+ """Data Visualization Skill - Provides data visualization and diagramming capabilities."""
2
+ from .skill import DataVisualizationSkill
3
+
4
+ __all__ = ["DataVisualizationSkill"]
@@ -0,0 +1,154 @@
1
+ """
2
+ Data Visualization Skill
3
+
4
+ Provides data visualization and diagramming capabilities using Mermaid syntax.
5
+ Agents can create flowcharts, sequence diagrams, class diagrams, ER diagrams,
6
+ and other visualizations for data intelligence and business intelligence use cases.
7
+ """
8
+ from typing import Dict, Any, List
9
+ from control_plane_api.app.skills.base import SkillDefinition, SkillType, SkillCategory, SkillVariant
10
+ from control_plane_api.app.skills.registry import register_skill
11
+
12
+
13
+ class DataVisualizationSkill(SkillDefinition):
14
+ """Data visualization and diagramming skill"""
15
+
16
+ @property
17
+ def type(self) -> SkillType:
18
+ return SkillType.DATA_VISUALIZATION
19
+
20
+ @property
21
+ def name(self) -> str:
22
+ return "Data Visualization"
23
+
24
+ @property
25
+ def description(self) -> str:
26
+ return "Create diagrams and visualizations using Mermaid syntax for data analysis and BI intelligence"
27
+
28
+ @property
29
+ def icon(self) -> str:
30
+ return "BarChart3"
31
+
32
+ def get_variants(self) -> List[SkillVariant]:
33
+ return [
34
+ SkillVariant(
35
+ id="diagramming_full",
36
+ name="Full Diagramming Suite",
37
+ description="All diagram types: flowcharts, sequences, class diagrams, ER diagrams, Gantt charts, and more",
38
+ category=SkillCategory.COMMON,
39
+ badge="Recommended",
40
+ icon="BarChart3",
41
+ configuration={
42
+ "enable_flowchart": True,
43
+ "enable_sequence": True,
44
+ "enable_class_diagram": True,
45
+ "enable_er_diagram": True,
46
+ "enable_gantt": True,
47
+ "enable_pie_chart": True,
48
+ "enable_state_diagram": True,
49
+ "enable_git_graph": True,
50
+ "enable_user_journey": True,
51
+ "enable_quadrant_chart": True,
52
+ "max_diagram_size": 50000, # Max characters per diagram
53
+ },
54
+ is_default=True,
55
+ ),
56
+ SkillVariant(
57
+ id="diagramming_data_viz",
58
+ name="Data Visualization",
59
+ description="Focus on data visualization: charts, ER diagrams, and analytics diagrams",
60
+ category=SkillCategory.COMMON,
61
+ badge="Analytics",
62
+ icon="PieChart",
63
+ configuration={
64
+ "enable_flowchart": False,
65
+ "enable_sequence": False,
66
+ "enable_class_diagram": False,
67
+ "enable_er_diagram": True,
68
+ "enable_gantt": True,
69
+ "enable_pie_chart": True,
70
+ "enable_state_diagram": False,
71
+ "enable_git_graph": False,
72
+ "enable_user_journey": False,
73
+ "enable_quadrant_chart": True,
74
+ "max_diagram_size": 30000,
75
+ },
76
+ is_default=False,
77
+ ),
78
+ SkillVariant(
79
+ id="diagramming_technical",
80
+ name="Technical Diagrams",
81
+ description="Technical diagrams: flowcharts, sequences, class diagrams, state machines",
82
+ category=SkillCategory.ADVANCED,
83
+ badge="Engineering",
84
+ icon="GitBranch",
85
+ configuration={
86
+ "enable_flowchart": True,
87
+ "enable_sequence": True,
88
+ "enable_class_diagram": True,
89
+ "enable_er_diagram": True,
90
+ "enable_gantt": False,
91
+ "enable_pie_chart": False,
92
+ "enable_state_diagram": True,
93
+ "enable_git_graph": True,
94
+ "enable_user_journey": False,
95
+ "enable_quadrant_chart": False,
96
+ "max_diagram_size": 50000,
97
+ },
98
+ is_default=False,
99
+ ),
100
+ ]
101
+
102
+ def validate_configuration(self, config: Dict[str, Any]) -> Dict[str, Any]:
103
+ """Validate diagramming configuration"""
104
+ validated = {
105
+ "enable_flowchart": config.get("enable_flowchart", True),
106
+ "enable_sequence": config.get("enable_sequence", True),
107
+ "enable_class_diagram": config.get("enable_class_diagram", True),
108
+ "enable_er_diagram": config.get("enable_er_diagram", True),
109
+ "enable_gantt": config.get("enable_gantt", True),
110
+ "enable_pie_chart": config.get("enable_pie_chart", True),
111
+ "enable_state_diagram": config.get("enable_state_diagram", True),
112
+ "enable_git_graph": config.get("enable_git_graph", True),
113
+ "enable_user_journey": config.get("enable_user_journey", True),
114
+ "enable_quadrant_chart": config.get("enable_quadrant_chart", True),
115
+ }
116
+
117
+ # Add max_diagram_size if specified
118
+ max_size = config.get("max_diagram_size", 50000)
119
+ validated["max_diagram_size"] = min(max_size, 100000) # Cap at 100k characters
120
+
121
+ # Add optional theme settings
122
+ if "theme" in config:
123
+ theme = config["theme"]
124
+ if theme in ["default", "dark", "forest", "neutral"]:
125
+ validated["theme"] = theme
126
+
127
+ return validated
128
+
129
+ def get_default_configuration(self) -> Dict[str, Any]:
130
+ """Default: all diagram types enabled"""
131
+ return {
132
+ "enable_flowchart": True,
133
+ "enable_sequence": True,
134
+ "enable_class_diagram": True,
135
+ "enable_er_diagram": True,
136
+ "enable_gantt": True,
137
+ "enable_pie_chart": True,
138
+ "enable_state_diagram": True,
139
+ "enable_git_graph": True,
140
+ "enable_user_journey": True,
141
+ "enable_quadrant_chart": True,
142
+ "max_diagram_size": 50000,
143
+ }
144
+
145
+ def get_framework_class_name(self) -> str:
146
+ """
147
+ Get the underlying framework tool class name.
148
+ Returns the class name for DiagrammingTools.
149
+ """
150
+ return "DataVisualizationTools"
151
+
152
+
153
+ # Auto-register this skill
154
+ register_skill(DataVisualizationSkill())
@@ -0,0 +1,4 @@
1
+ """Docker Skill - Provides Docker management capabilities."""
2
+ from .skill import DockerSkill
3
+
4
+ __all__ = ["DockerSkill"]
@@ -0,0 +1,104 @@
1
+ """
2
+ Docker Skill
3
+
4
+ Provides Docker management capabilities (containers, images, volumes, networks).
5
+ """
6
+ from typing import Dict, Any, List
7
+ from control_plane_api.app.skills.base import SkillDefinition, SkillType, SkillCategory, SkillVariant, SkillRequirements
8
+ from control_plane_api.app.skills.registry import register_skill
9
+
10
+
11
+ class DockerSkill(SkillDefinition):
12
+ """Docker management skill"""
13
+
14
+ @property
15
+ def type(self) -> SkillType:
16
+ return SkillType.DOCKER
17
+
18
+ @property
19
+ def name(self) -> str:
20
+ return "Docker"
21
+
22
+ @property
23
+ def description(self) -> str:
24
+ return "Manage Docker containers, images, volumes, and networks on the local system"
25
+
26
+ @property
27
+ def icon(self) -> str:
28
+ return "FaDocker"
29
+
30
+ @property
31
+ def icon_type(self) -> str:
32
+ return "react-icon"
33
+
34
+ def get_variants(self) -> List[SkillVariant]:
35
+ return [
36
+ SkillVariant(
37
+ id="docker_containers",
38
+ name="Docker - Containers",
39
+ description="Manage Docker containers on local system (start, stop, inspect)",
40
+ category=SkillCategory.COMMON,
41
+ badge="Safe",
42
+ icon="FaDocker",
43
+ configuration={
44
+ "enable_container_management": True,
45
+ "enable_image_management": False,
46
+ "enable_volume_management": False,
47
+ "enable_network_management": False,
48
+ },
49
+ is_default=True,
50
+ ),
51
+ SkillVariant(
52
+ id="docker_full_control",
53
+ name="Docker - Full Control",
54
+ description="Complete Docker management: containers, images, volumes, and networks",
55
+ category=SkillCategory.ADVANCED,
56
+ badge="Advanced",
57
+ icon="FaDocker",
58
+ configuration={
59
+ "enable_container_management": True,
60
+ "enable_image_management": True,
61
+ "enable_volume_management": True,
62
+ "enable_network_management": True,
63
+ },
64
+ is_default=False,
65
+ ),
66
+ ]
67
+
68
+ def validate_configuration(self, config: Dict[str, Any]) -> Dict[str, Any]:
69
+ """Validate Docker configuration"""
70
+ validated = {
71
+ "enable_container_management": config.get("enable_container_management", True),
72
+ "enable_image_management": config.get("enable_image_management", False),
73
+ "enable_volume_management": config.get("enable_volume_management", False),
74
+ "enable_network_management": config.get("enable_network_management", False),
75
+ }
76
+
77
+ # Add docker_host if specified (e.g., "unix:///var/run/docker.sock")
78
+ if "docker_host" in config:
79
+ validated["docker_host"] = str(config["docker_host"])
80
+
81
+ return validated
82
+
83
+ def get_default_configuration(self) -> Dict[str, Any]:
84
+ """Default: container management only"""
85
+ return {
86
+ "enable_container_management": True,
87
+ "enable_image_management": False,
88
+ "enable_volume_management": False,
89
+ "enable_network_management": False,
90
+ }
91
+
92
+ def get_requirements(self) -> SkillRequirements:
93
+ """Docker skill requires docker package and Docker daemon"""
94
+ return SkillRequirements(
95
+ python_packages=["docker>=6.0.0"],
96
+ system_packages=["docker"],
97
+ supported_os=["linux", "darwin", "windows"],
98
+ external_dependencies=["Docker daemon must be running"],
99
+ notes="Requires Docker to be installed and the Docker daemon to be accessible"
100
+ )
101
+
102
+
103
+ # Auto-register this skill
104
+ register_skill(DockerSkill())
@@ -0,0 +1,4 @@
1
+ """File Generation Skill - Provides file generation capabilities."""
2
+ from .skill import FileGenerationSkill
3
+
4
+ __all__ = ["FileGenerationSkill"]