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,94 @@
1
+ """
2
+ File Generation Skill
3
+
4
+ Provides file generation capabilities for various formats (JSON, CSV, PDF, TXT).
5
+ """
6
+ from typing import Dict, Any, List
7
+ from control_plane_api.app.skills.base import SkillDefinition, SkillType, SkillCategory, SkillVariant
8
+ from control_plane_api.app.skills.registry import register_skill
9
+
10
+
11
+ class FileGenerationSkill(SkillDefinition):
12
+ """File generation skill"""
13
+
14
+ @property
15
+ def type(self) -> SkillType:
16
+ return SkillType.FILE_GENERATION
17
+
18
+ @property
19
+ def name(self) -> str:
20
+ return "File Generator"
21
+
22
+ @property
23
+ def description(self) -> str:
24
+ return "Generate and save files in various formats (JSON, CSV, PDF, TXT)"
25
+
26
+ @property
27
+ def icon(self) -> str:
28
+ return "FileOutput"
29
+
30
+ def get_variants(self) -> List[SkillVariant]:
31
+ return [
32
+ SkillVariant(
33
+ id="file_generator",
34
+ name="File Generator",
35
+ description="Generate and save files locally: JSON, CSV, PDF, and TXT formats",
36
+ category=SkillCategory.COMMON,
37
+ badge="Recommended",
38
+ icon="FileOutput",
39
+ configuration={
40
+ "enable_json_generation": True,
41
+ "enable_csv_generation": True,
42
+ "enable_pdf_generation": True,
43
+ "enable_txt_generation": True,
44
+ },
45
+ is_default=True,
46
+ ),
47
+ SkillVariant(
48
+ id="file_generator_data_only",
49
+ name="File Generator - Data Only",
50
+ description="Generate data files only (JSON, CSV) without document formats",
51
+ category=SkillCategory.COMMON,
52
+ badge="Safe",
53
+ icon="FileText",
54
+ configuration={
55
+ "enable_json_generation": True,
56
+ "enable_csv_generation": True,
57
+ "enable_pdf_generation": False,
58
+ "enable_txt_generation": True,
59
+ },
60
+ is_default=False,
61
+ ),
62
+ ]
63
+
64
+ def validate_configuration(self, config: Dict[str, Any]) -> Dict[str, Any]:
65
+ """Validate file generation configuration"""
66
+ validated = {
67
+ "enable_json_generation": config.get("enable_json_generation", True),
68
+ "enable_csv_generation": config.get("enable_csv_generation", True),
69
+ "enable_pdf_generation": config.get("enable_pdf_generation", True),
70
+ "enable_txt_generation": config.get("enable_txt_generation", True),
71
+ }
72
+
73
+ # Add output_directory if specified
74
+ if "output_directory" in config:
75
+ validated["output_directory"] = str(config["output_directory"])
76
+
77
+ # Add max_file_size if specified (in MB)
78
+ if "max_file_size" in config:
79
+ validated["max_file_size"] = min(config.get("max_file_size", 10), 100) # Max 100MB
80
+
81
+ return validated
82
+
83
+ def get_default_configuration(self) -> Dict[str, Any]:
84
+ """Default: all formats enabled"""
85
+ return {
86
+ "enable_json_generation": True,
87
+ "enable_csv_generation": True,
88
+ "enable_pdf_generation": True,
89
+ "enable_txt_generation": True,
90
+ }
91
+
92
+
93
+ # Auto-register this skill
94
+ register_skill(FileGenerationSkill())
@@ -0,0 +1,4 @@
1
+ """File System Skill - Provides file system access capabilities."""
2
+ from .skill import FileSystemSkill
3
+
4
+ __all__ = ["FileSystemSkill"]
@@ -0,0 +1,110 @@
1
+ """
2
+ File System Skill
3
+
4
+ Provides file system access capabilities (read, write, list, search files).
5
+ """
6
+ from typing import Dict, Any, List
7
+ from control_plane_api.app.skills.base import SkillDefinition, SkillType, SkillCategory, SkillVariant
8
+ from control_plane_api.app.skills.registry import register_skill
9
+
10
+
11
+ class FileSystemSkill(SkillDefinition):
12
+ """File system access skill"""
13
+
14
+ @property
15
+ def type(self) -> SkillType:
16
+ return SkillType.FILE_SYSTEM
17
+
18
+ @property
19
+ def name(self) -> str:
20
+ return "File System"
21
+
22
+ @property
23
+ def description(self) -> str:
24
+ return "Access and manipulate files and directories on the local file system"
25
+
26
+ @property
27
+ def icon(self) -> str:
28
+ return "FolderOpen"
29
+
30
+ def get_variants(self) -> List[SkillVariant]:
31
+ return [
32
+ SkillVariant(
33
+ id="file_system_read_only",
34
+ name="File System - Read Only",
35
+ description="Access local file system for reading, listing, and searching files safely",
36
+ category=SkillCategory.COMMON,
37
+ badge="Safe",
38
+ icon="FolderOpen",
39
+ configuration={
40
+ "enable_save_file": False,
41
+ "enable_read_file": True,
42
+ "enable_list_files": True,
43
+ "enable_search_files": True,
44
+ },
45
+ is_default=False,
46
+ ),
47
+ SkillVariant(
48
+ id="file_system_full_access",
49
+ name="File System - Full Access",
50
+ description="Complete file system access: read, write, create, and modify local files",
51
+ category=SkillCategory.COMMON,
52
+ badge="Recommended",
53
+ icon="HardDrive",
54
+ configuration={
55
+ "enable_save_file": True,
56
+ "enable_read_file": True,
57
+ "enable_list_files": True,
58
+ "enable_search_files": True,
59
+ },
60
+ is_default=True,
61
+ ),
62
+ SkillVariant(
63
+ id="file_system_sandboxed",
64
+ name="File System - Sandboxed",
65
+ description="Isolated file access limited to /sandbox directory only",
66
+ category=SkillCategory.SECURITY,
67
+ badge="Secure",
68
+ icon="Shield",
69
+ configuration={
70
+ "base_dir": "/sandbox",
71
+ "enable_save_file": True,
72
+ "enable_read_file": True,
73
+ "enable_list_files": True,
74
+ "enable_search_files": False,
75
+ },
76
+ is_default=False,
77
+ ),
78
+ ]
79
+
80
+ def validate_configuration(self, config: Dict[str, Any]) -> Dict[str, Any]:
81
+ """Validate file system configuration"""
82
+ validated = {
83
+ "enable_save_file": config.get("enable_save_file", False),
84
+ "enable_read_file": config.get("enable_read_file", True),
85
+ "enable_list_files": config.get("enable_list_files", True),
86
+ "enable_search_files": config.get("enable_search_files", True),
87
+ }
88
+
89
+ # Add base_dir if specified
90
+ if "base_dir" in config:
91
+ validated["base_dir"] = str(config["base_dir"])
92
+
93
+ # Add allowed_extensions if specified
94
+ if "allowed_extensions" in config:
95
+ validated["allowed_extensions"] = list(config["allowed_extensions"])
96
+
97
+ return validated
98
+
99
+ def get_default_configuration(self) -> Dict[str, Any]:
100
+ """Default: full access"""
101
+ return {
102
+ "enable_save_file": True,
103
+ "enable_read_file": True,
104
+ "enable_list_files": True,
105
+ "enable_search_files": True,
106
+ }
107
+
108
+
109
+ # Auto-register this skill
110
+ register_skill(FileSystemSkill())
@@ -0,0 +1,5 @@
1
+ """Knowledge API Skill Definition"""
2
+
3
+ from .skill import KnowledgeAPISkill
4
+
5
+ __all__ = ['KnowledgeAPISkill']
@@ -0,0 +1,124 @@
1
+ """
2
+ Knowledge API Skill
3
+
4
+ Provides semantic search capabilities across the organization's central knowledge base.
5
+ """
6
+ from typing import Dict, Any, List
7
+ from control_plane_api.app.skills.base import SkillDefinition, SkillType, SkillCategory, SkillVariant
8
+ from control_plane_api.app.skills.registry import register_skill
9
+
10
+
11
+ class KnowledgeAPISkill(SkillDefinition):
12
+ """Knowledge API semantic search skill"""
13
+
14
+ @property
15
+ def type(self) -> SkillType:
16
+ return SkillType.KNOWLEDGE_API
17
+
18
+ @property
19
+ def name(self) -> str:
20
+ return "Knowledge API"
21
+
22
+ @property
23
+ def description(self) -> str:
24
+ return "Semantic search across your organization's central knowledge base including documentation, code, conversations, and integration data"
25
+
26
+ @property
27
+ def icon(self) -> str:
28
+ return "Database"
29
+
30
+ def get_variants(self) -> List[SkillVariant]:
31
+ return [
32
+ SkillVariant(
33
+ id="knowledge_api_standard",
34
+ name="Knowledge API - Standard",
35
+ description="Semantic search with automatic user context injection for scoped queries",
36
+ category=SkillCategory.COMMON,
37
+ badge="Recommended",
38
+ icon="Database",
39
+ configuration={
40
+ "stream": True,
41
+ "auto_inject_user_context": True,
42
+ "timeout": 60,
43
+ },
44
+ is_default=True,
45
+ ),
46
+ SkillVariant(
47
+ id="knowledge_api_fast",
48
+ name="Knowledge API - Fast",
49
+ description="Quick semantic search with reduced timeout for faster responses",
50
+ category=SkillCategory.COMMON,
51
+ badge="Fast",
52
+ icon="Zap",
53
+ configuration={
54
+ "stream": False,
55
+ "auto_inject_user_context": True,
56
+ "timeout": 30,
57
+ },
58
+ is_default=False,
59
+ ),
60
+ SkillVariant(
61
+ id="knowledge_api_thorough",
62
+ name="Knowledge API - Thorough",
63
+ description="Extended search timeout for comprehensive knowledge base queries",
64
+ category=SkillCategory.ADVANCED,
65
+ badge="Thorough",
66
+ icon="Search",
67
+ configuration={
68
+ "stream": True,
69
+ "auto_inject_user_context": True,
70
+ "timeout": 120,
71
+ },
72
+ is_default=False,
73
+ ),
74
+ ]
75
+
76
+ def validate_configuration(self, config: Dict[str, Any]) -> Dict[str, Any]:
77
+ """Validate knowledge API configuration"""
78
+ validated = {
79
+ "stream": config.get("stream", True),
80
+ "auto_inject_user_context": config.get("auto_inject_user_context", True),
81
+ "timeout": config.get("timeout", 60),
82
+ }
83
+
84
+ # Validate timeout range
85
+ if not (10 <= validated["timeout"] <= 300):
86
+ raise ValueError("Timeout must be between 10 and 300 seconds")
87
+
88
+ # Add orchestrator_url if specified
89
+ if "orchestrator_url" in config:
90
+ validated["orchestrator_url"] = str(config["orchestrator_url"])
91
+
92
+ return validated
93
+
94
+ def get_default_configuration(self) -> Dict[str, Any]:
95
+ """Default: streaming with auto-context"""
96
+ return {
97
+ "stream": True,
98
+ "auto_inject_user_context": True,
99
+ "timeout": 60,
100
+ }
101
+
102
+ def get_framework_class_name(self) -> str:
103
+ """
104
+ Get the underlying framework tool class name.
105
+
106
+ The implementation should be provided by the kubiya SDK package.
107
+ """
108
+ return "KnowledgeAPITools"
109
+
110
+ def get_requirements(self) -> "SkillRequirements":
111
+ """Get runtime requirements for this skill."""
112
+ from control_plane_api.app.skills.base import SkillRequirements
113
+
114
+ return SkillRequirements(
115
+ python_packages=["kubiya>=2.0.3"],
116
+ external_dependencies=["Kubiya Knowledge API"],
117
+ required_env_vars=["KUBIYA_API_KEY"],
118
+ notes="Knowledge API skill implementation is provided by the kubiya SDK package. "
119
+ "This skill must be explicitly associated with agents/teams - it is not built-in by default."
120
+ )
121
+
122
+
123
+ # Auto-register this skill
124
+ register_skill(KnowledgeAPISkill())
@@ -0,0 +1,4 @@
1
+ """Python Skill - Provides Python code execution capabilities."""
2
+ from .skill import PythonSkill
3
+
4
+ __all__ = ["PythonSkill"]
@@ -0,0 +1,92 @@
1
+ """
2
+ Python Skill
3
+
4
+ Provides Python code execution capabilities with configurable restrictions.
5
+ """
6
+ from typing import Dict, Any, List
7
+ from control_plane_api.app.skills.base import SkillDefinition, SkillType, SkillCategory, SkillVariant
8
+ from control_plane_api.app.skills.registry import register_skill
9
+
10
+
11
+ class PythonSkill(SkillDefinition):
12
+ """Python code execution skill"""
13
+
14
+ @property
15
+ def type(self) -> SkillType:
16
+ return SkillType.PYTHON
17
+
18
+ @property
19
+ def name(self) -> str:
20
+ return "Python"
21
+
22
+ @property
23
+ def description(self) -> str:
24
+ return "Execute Python code locally with configurable import restrictions"
25
+
26
+ @property
27
+ def icon(self) -> str:
28
+ return "FaPython"
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="python_runtime",
38
+ name="Python Runtime",
39
+ description="Execute Python code locally with restricted imports for security",
40
+ category=SkillCategory.COMMON,
41
+ badge="Safe",
42
+ icon="FaPython",
43
+ configuration={
44
+ "enable_code_execution": True,
45
+ "blocked_imports": ["os", "subprocess", "sys", "socket", "shutil"],
46
+ },
47
+ is_default=True,
48
+ ),
49
+ SkillVariant(
50
+ id="python_unrestricted",
51
+ name="Python - Unrestricted",
52
+ description="Execute Python code without import restrictions or sandboxing",
53
+ category=SkillCategory.ADVANCED,
54
+ badge="Advanced",
55
+ icon="FaPython",
56
+ configuration={
57
+ "enable_code_execution": True,
58
+ },
59
+ is_default=False,
60
+ ),
61
+ ]
62
+
63
+ def validate_configuration(self, config: Dict[str, Any]) -> Dict[str, Any]:
64
+ """Validate Python configuration"""
65
+ validated = {
66
+ "enable_code_execution": config.get("enable_code_execution", True),
67
+ }
68
+
69
+ # Add blocked_imports if specified
70
+ if "blocked_imports" in config:
71
+ validated["blocked_imports"] = list(config["blocked_imports"])
72
+
73
+ # Add allowed_imports if specified (whitelist mode)
74
+ if "allowed_imports" in config:
75
+ validated["allowed_imports"] = list(config["allowed_imports"])
76
+
77
+ # Add timeout if specified
78
+ if "timeout" in config:
79
+ validated["timeout"] = min(config.get("timeout", 30), 300) # Max 5 minutes
80
+
81
+ return validated
82
+
83
+ def get_default_configuration(self) -> Dict[str, Any]:
84
+ """Default: restricted imports"""
85
+ return {
86
+ "enable_code_execution": True,
87
+ "blocked_imports": ["os", "subprocess", "sys", "socket", "shutil"],
88
+ }
89
+
90
+
91
+ # Auto-register this skill
92
+ register_skill(PythonSkill())
@@ -0,0 +1,5 @@
1
+ """Remote Filesystem skill for cloud storage operations."""
2
+
3
+ from .skill import RemoteFilesystemSkill
4
+
5
+ __all__ = ["RemoteFilesystemSkill"]
@@ -0,0 +1,170 @@
1
+ """
2
+ Remote Filesystem Skill
3
+
4
+ Provides cloud storage capabilities for uploading, downloading, and managing files
5
+ with multi-provider support (Vercel Blob, S3, Azure Blob, GCS).
6
+ """
7
+
8
+ from typing import Dict, Any, List
9
+ from control_plane_api.app.skills.base import (
10
+ SkillDefinition,
11
+ SkillType,
12
+ SkillCategory,
13
+ SkillVariant,
14
+ SkillRequirements
15
+ )
16
+ from control_plane_api.app.skills.registry import register_skill
17
+
18
+
19
+ class RemoteFilesystemSkill(SkillDefinition):
20
+ """Remote filesystem skill with cloud storage provider support."""
21
+
22
+ @property
23
+ def type(self) -> SkillType:
24
+ return SkillType.REMOTE_FILESYSTEM
25
+
26
+ @property
27
+ def name(self) -> str:
28
+ return "Remote Filesystem"
29
+
30
+ @property
31
+ def description(self) -> str:
32
+ return "Cloud storage for uploading, downloading, and managing files with multi-provider support"
33
+
34
+ @property
35
+ def icon(self) -> str:
36
+ return "Cloud"
37
+
38
+ @property
39
+ def icon_type(self) -> str:
40
+ return "lucide"
41
+
42
+ def get_variants(self) -> List[SkillVariant]:
43
+ return [
44
+ SkillVariant(
45
+ id="remote_filesystem_read_only",
46
+ name="Remote Filesystem - Read Only",
47
+ description="Download and list files from cloud storage safely",
48
+ category=SkillCategory.COMMON,
49
+ badge="Safe",
50
+ icon="CloudDownload",
51
+ configuration={
52
+ "enable_upload": False,
53
+ "enable_download": True,
54
+ "enable_list": True,
55
+ "enable_delete": False,
56
+ "enable_search": True,
57
+ "enable_metadata": True,
58
+ "enable_move": False,
59
+ "enable_copy": False,
60
+ "enable_folders": False,
61
+ "enable_batch_download": False,
62
+ },
63
+ is_default=False,
64
+ ),
65
+ SkillVariant(
66
+ id="remote_filesystem_write_enabled",
67
+ name="Remote Filesystem - Write Enabled",
68
+ description="Upload and download files with read/write access",
69
+ category=SkillCategory.COMMON,
70
+ badge="Recommended",
71
+ icon="Cloud",
72
+ configuration={
73
+ "enable_upload": True,
74
+ "enable_download": True,
75
+ "enable_list": True,
76
+ "enable_delete": False,
77
+ "enable_search": True,
78
+ "enable_metadata": True,
79
+ "enable_move": True,
80
+ "enable_copy": True,
81
+ "enable_folders": False,
82
+ "enable_batch_download": False,
83
+ },
84
+ is_default=True,
85
+ ),
86
+ SkillVariant(
87
+ id="remote_filesystem_full_access",
88
+ name="Remote Filesystem - Full Access",
89
+ description="Complete cloud storage access including file deletion",
90
+ category=SkillCategory.ADVANCED,
91
+ badge="Advanced",
92
+ icon="CloudCog",
93
+ configuration={
94
+ "enable_upload": True,
95
+ "enable_download": True,
96
+ "enable_list": True,
97
+ "enable_delete": True,
98
+ "enable_search": True,
99
+ "enable_metadata": True,
100
+ "enable_move": True,
101
+ "enable_copy": True,
102
+ "enable_folders": True,
103
+ "enable_batch_download": True,
104
+ },
105
+ is_default=False,
106
+ ),
107
+ ]
108
+
109
+ def validate_configuration(self, config: Dict[str, Any]) -> Dict[str, Any]:
110
+ """Validate remote filesystem configuration."""
111
+ validated = {
112
+ "enable_upload": config.get("enable_upload", False),
113
+ "enable_download": config.get("enable_download", True),
114
+ "enable_list": config.get("enable_list", True),
115
+ "enable_delete": config.get("enable_delete", False),
116
+ "enable_search": config.get("enable_search", True),
117
+ "enable_metadata": config.get("enable_metadata", True),
118
+ "enable_move": config.get("enable_move", False),
119
+ "enable_copy": config.get("enable_copy", False),
120
+ "enable_folders": config.get("enable_folders", False),
121
+ "enable_batch_download": config.get("enable_batch_download", False),
122
+ }
123
+
124
+ # Optional: path restrictions
125
+ if "allowed_paths" in config:
126
+ validated["allowed_paths"] = list(config["allowed_paths"])
127
+
128
+ # Optional: file size limit
129
+ if "max_file_size_mb" in config:
130
+ validated["max_file_size_mb"] = int(config["max_file_size_mb"])
131
+
132
+ # Optional: allowed file extensions
133
+ if "allowed_extensions" in config:
134
+ validated["allowed_extensions"] = list(config["allowed_extensions"])
135
+
136
+ return validated
137
+
138
+ def get_default_configuration(self) -> Dict[str, Any]:
139
+ """Default: write-enabled without delete."""
140
+ return {
141
+ "enable_upload": True,
142
+ "enable_download": True,
143
+ "enable_list": True,
144
+ "enable_delete": False,
145
+ "enable_search": True,
146
+ "enable_metadata": True,
147
+ "enable_move": True,
148
+ "enable_copy": True,
149
+ "enable_folders": False,
150
+ "enable_batch_download": False,
151
+ }
152
+
153
+ def get_requirements(self) -> SkillRequirements:
154
+ return SkillRequirements(
155
+ python_packages=["httpx>=0.24.0", "PyYAML>=6.0"],
156
+ required_env_vars=["STORAGE_PROVIDER"],
157
+ external_dependencies=[
158
+ "Storage provider configuration required:",
159
+ " - Vercel Blob: VERCEL_BLOB_TOKEN",
160
+ " - S3: AWS credentials (future)",
161
+ " - Azure Blob: Azure credentials (future)",
162
+ " - GCS: GCP credentials (future)"
163
+ ],
164
+ notes="Requires storage provider to be configured via STORAGE_PROVIDER environment variable. "
165
+ "No default provider - must be explicitly enabled."
166
+ )
167
+
168
+
169
+ # Auto-register this skill
170
+ register_skill(RemoteFilesystemSkill())
@@ -0,0 +1,4 @@
1
+ """Shell Skill - Provides shell command execution capabilities."""
2
+ from .skill import ShellSkill
3
+
4
+ __all__ = ["ShellSkill"]