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.
- control_plane_api/LICENSE +676 -0
- control_plane_api/README.md +350 -0
- control_plane_api/__init__.py +4 -0
- control_plane_api/__version__.py +8 -0
- control_plane_api/alembic/README +1 -0
- control_plane_api/alembic/env.py +121 -0
- control_plane_api/alembic/script.py.mako +28 -0
- control_plane_api/alembic/versions/2613c65c3dbe_initial_database_setup.py +32 -0
- control_plane_api/alembic/versions/2df520d4927d_merge_heads.py +28 -0
- control_plane_api/alembic/versions/43abf98d6a01_add_paused_status_to_executions.py +73 -0
- control_plane_api/alembic/versions/6289854264cb_merge_multiple_heads.py +28 -0
- control_plane_api/alembic/versions/6a4d4dc3d8dc_generate_execution_transitions.py +50 -0
- control_plane_api/alembic/versions/87d11cf0a783_add_disconnected_status_to_worker_.py +44 -0
- control_plane_api/alembic/versions/add_ephemeral_queue_support.py +85 -0
- control_plane_api/alembic/versions/add_model_type_to_llm_models.py +31 -0
- control_plane_api/alembic/versions/add_plan_executions_table.py +114 -0
- control_plane_api/alembic/versions/add_trace_span_tables.py +154 -0
- control_plane_api/alembic/versions/add_user_info_to_traces.py +36 -0
- control_plane_api/alembic/versions/adjusting_foreign_keys.py +32 -0
- control_plane_api/alembic/versions/b4983d976db2_initial_tables.py +1128 -0
- control_plane_api/alembic/versions/d181a3b40e71_rename_custom_metadata_to_metadata_in_.py +50 -0
- control_plane_api/alembic/versions/df9117888e82_add_missing_columns.py +82 -0
- control_plane_api/alembic/versions/f25de6ad895a_missing_migrations.py +34 -0
- control_plane_api/alembic/versions/f71305fb69b9_fix_ephemeral_queue_deletion_foreign_key.py +54 -0
- control_plane_api/alembic/versions/mark_local_exec_queues_as_ephemeral.py +68 -0
- control_plane_api/alembic.ini +148 -0
- control_plane_api/api/index.py +12 -0
- control_plane_api/app/__init__.py +11 -0
- control_plane_api/app/activities/__init__.py +20 -0
- control_plane_api/app/activities/agent_activities.py +384 -0
- control_plane_api/app/activities/plan_generation_activities.py +499 -0
- control_plane_api/app/activities/team_activities.py +424 -0
- control_plane_api/app/activities/temporal_cloud_activities.py +588 -0
- control_plane_api/app/config/__init__.py +35 -0
- control_plane_api/app/config/api_config.py +469 -0
- control_plane_api/app/config/config_loader.py +224 -0
- control_plane_api/app/config/model_pricing.py +323 -0
- control_plane_api/app/config/storage_config.py +159 -0
- control_plane_api/app/config.py +115 -0
- control_plane_api/app/controllers/__init__.py +0 -0
- control_plane_api/app/controllers/execution_environment_controller.py +1315 -0
- control_plane_api/app/database.py +135 -0
- control_plane_api/app/exceptions.py +408 -0
- control_plane_api/app/lib/__init__.py +11 -0
- control_plane_api/app/lib/environment.py +65 -0
- control_plane_api/app/lib/event_bus/__init__.py +17 -0
- control_plane_api/app/lib/event_bus/base.py +136 -0
- control_plane_api/app/lib/event_bus/manager.py +335 -0
- control_plane_api/app/lib/event_bus/providers/__init__.py +6 -0
- control_plane_api/app/lib/event_bus/providers/http_provider.py +166 -0
- control_plane_api/app/lib/event_bus/providers/nats_provider.py +324 -0
- control_plane_api/app/lib/event_bus/providers/redis_provider.py +233 -0
- control_plane_api/app/lib/event_bus/providers/websocket_provider.py +497 -0
- control_plane_api/app/lib/job_executor.py +330 -0
- control_plane_api/app/lib/kubiya_client.py +293 -0
- control_plane_api/app/lib/litellm_pricing.py +166 -0
- control_plane_api/app/lib/mcp_validation.py +163 -0
- control_plane_api/app/lib/nats/__init__.py +13 -0
- control_plane_api/app/lib/nats/credentials_manager.py +288 -0
- control_plane_api/app/lib/nats/listener.py +374 -0
- control_plane_api/app/lib/planning_prompt_builder.py +153 -0
- control_plane_api/app/lib/planning_tools/__init__.py +41 -0
- control_plane_api/app/lib/planning_tools/agents.py +409 -0
- control_plane_api/app/lib/planning_tools/agno_toolkit.py +836 -0
- control_plane_api/app/lib/planning_tools/base.py +119 -0
- control_plane_api/app/lib/planning_tools/cognitive_memory_tools.py +403 -0
- control_plane_api/app/lib/planning_tools/context_graph_tools.py +545 -0
- control_plane_api/app/lib/planning_tools/environments.py +218 -0
- control_plane_api/app/lib/planning_tools/knowledge.py +204 -0
- control_plane_api/app/lib/planning_tools/models.py +93 -0
- control_plane_api/app/lib/planning_tools/planning_service.py +646 -0
- control_plane_api/app/lib/planning_tools/resources.py +242 -0
- control_plane_api/app/lib/planning_tools/teams.py +334 -0
- control_plane_api/app/lib/policy_enforcer_client.py +1016 -0
- control_plane_api/app/lib/redis_client.py +803 -0
- control_plane_api/app/lib/sqlalchemy_utils.py +486 -0
- control_plane_api/app/lib/state_transition_tools/__init__.py +7 -0
- control_plane_api/app/lib/state_transition_tools/execution_context.py +388 -0
- control_plane_api/app/lib/storage/__init__.py +20 -0
- control_plane_api/app/lib/storage/base_provider.py +274 -0
- control_plane_api/app/lib/storage/provider_factory.py +157 -0
- control_plane_api/app/lib/storage/vercel_blob_provider.py +468 -0
- control_plane_api/app/lib/supabase.py +71 -0
- control_plane_api/app/lib/supabase_utils.py +138 -0
- control_plane_api/app/lib/task_planning/__init__.py +138 -0
- control_plane_api/app/lib/task_planning/agent_factory.py +308 -0
- control_plane_api/app/lib/task_planning/agents.py +389 -0
- control_plane_api/app/lib/task_planning/cache.py +218 -0
- control_plane_api/app/lib/task_planning/entity_resolver.py +273 -0
- control_plane_api/app/lib/task_planning/helpers.py +293 -0
- control_plane_api/app/lib/task_planning/hooks.py +474 -0
- control_plane_api/app/lib/task_planning/models.py +503 -0
- control_plane_api/app/lib/task_planning/plan_validator.py +166 -0
- control_plane_api/app/lib/task_planning/planning_workflow.py +2911 -0
- control_plane_api/app/lib/task_planning/runner.py +656 -0
- control_plane_api/app/lib/task_planning/streaming_hook.py +213 -0
- control_plane_api/app/lib/task_planning/workflow.py +424 -0
- control_plane_api/app/lib/templating/__init__.py +88 -0
- control_plane_api/app/lib/templating/compiler.py +278 -0
- control_plane_api/app/lib/templating/engine.py +178 -0
- control_plane_api/app/lib/templating/parsers/__init__.py +29 -0
- control_plane_api/app/lib/templating/parsers/base.py +96 -0
- control_plane_api/app/lib/templating/parsers/env.py +85 -0
- control_plane_api/app/lib/templating/parsers/graph.py +112 -0
- control_plane_api/app/lib/templating/parsers/secret.py +87 -0
- control_plane_api/app/lib/templating/parsers/simple.py +81 -0
- control_plane_api/app/lib/templating/resolver.py +366 -0
- control_plane_api/app/lib/templating/types.py +214 -0
- control_plane_api/app/lib/templating/validator.py +201 -0
- control_plane_api/app/lib/temporal_client.py +232 -0
- control_plane_api/app/lib/temporal_credentials_cache.py +178 -0
- control_plane_api/app/lib/temporal_credentials_service.py +203 -0
- control_plane_api/app/lib/validation/__init__.py +24 -0
- control_plane_api/app/lib/validation/runtime_validation.py +388 -0
- control_plane_api/app/main.py +531 -0
- control_plane_api/app/middleware/__init__.py +10 -0
- control_plane_api/app/middleware/auth.py +645 -0
- control_plane_api/app/middleware/exception_handler.py +267 -0
- control_plane_api/app/middleware/prometheus_middleware.py +173 -0
- control_plane_api/app/middleware/rate_limiting.py +384 -0
- control_plane_api/app/middleware/request_id.py +202 -0
- control_plane_api/app/models/__init__.py +40 -0
- control_plane_api/app/models/agent.py +90 -0
- control_plane_api/app/models/analytics.py +206 -0
- control_plane_api/app/models/associations.py +107 -0
- control_plane_api/app/models/auth_user.py +73 -0
- control_plane_api/app/models/context.py +161 -0
- control_plane_api/app/models/custom_integration.py +99 -0
- control_plane_api/app/models/environment.py +64 -0
- control_plane_api/app/models/execution.py +125 -0
- control_plane_api/app/models/execution_transition.py +50 -0
- control_plane_api/app/models/job.py +159 -0
- control_plane_api/app/models/llm_model.py +78 -0
- control_plane_api/app/models/orchestration.py +66 -0
- control_plane_api/app/models/plan_execution.py +102 -0
- control_plane_api/app/models/presence.py +49 -0
- control_plane_api/app/models/project.py +61 -0
- control_plane_api/app/models/project_management.py +85 -0
- control_plane_api/app/models/session.py +29 -0
- control_plane_api/app/models/skill.py +155 -0
- control_plane_api/app/models/system_tables.py +43 -0
- control_plane_api/app/models/task_planning.py +372 -0
- control_plane_api/app/models/team.py +86 -0
- control_plane_api/app/models/trace.py +257 -0
- control_plane_api/app/models/user_profile.py +54 -0
- control_plane_api/app/models/worker.py +221 -0
- control_plane_api/app/models/workflow.py +161 -0
- control_plane_api/app/models/workspace.py +50 -0
- control_plane_api/app/observability/__init__.py +177 -0
- control_plane_api/app/observability/context_logging.py +475 -0
- control_plane_api/app/observability/decorators.py +337 -0
- control_plane_api/app/observability/local_span_processor.py +702 -0
- control_plane_api/app/observability/metrics.py +303 -0
- control_plane_api/app/observability/middleware.py +246 -0
- control_plane_api/app/observability/optional.py +115 -0
- control_plane_api/app/observability/tracing.py +382 -0
- control_plane_api/app/policies/README.md +149 -0
- control_plane_api/app/policies/approved_users.rego +62 -0
- control_plane_api/app/policies/business_hours.rego +51 -0
- control_plane_api/app/policies/rate_limiting.rego +100 -0
- control_plane_api/app/policies/tool_enforcement/README.md +336 -0
- control_plane_api/app/policies/tool_enforcement/bash_command_validation.rego +71 -0
- control_plane_api/app/policies/tool_enforcement/business_hours_enforcement.rego +82 -0
- control_plane_api/app/policies/tool_enforcement/mcp_tool_allowlist.rego +58 -0
- control_plane_api/app/policies/tool_enforcement/production_safeguards.rego +80 -0
- control_plane_api/app/policies/tool_enforcement/role_based_tool_access.rego +44 -0
- control_plane_api/app/policies/tool_restrictions.rego +86 -0
- control_plane_api/app/routers/__init__.py +4 -0
- control_plane_api/app/routers/agents.py +382 -0
- control_plane_api/app/routers/agents_v2.py +1598 -0
- control_plane_api/app/routers/analytics.py +1310 -0
- control_plane_api/app/routers/auth.py +59 -0
- control_plane_api/app/routers/client_config.py +57 -0
- control_plane_api/app/routers/context_graph.py +561 -0
- control_plane_api/app/routers/context_manager.py +577 -0
- control_plane_api/app/routers/custom_integrations.py +490 -0
- control_plane_api/app/routers/enforcer.py +132 -0
- control_plane_api/app/routers/environment_context.py +252 -0
- control_plane_api/app/routers/environments.py +761 -0
- control_plane_api/app/routers/execution_environment.py +847 -0
- control_plane_api/app/routers/executions/__init__.py +28 -0
- control_plane_api/app/routers/executions/router.py +286 -0
- control_plane_api/app/routers/executions/services/__init__.py +22 -0
- control_plane_api/app/routers/executions/services/demo_worker_health.py +156 -0
- control_plane_api/app/routers/executions/services/status_service.py +420 -0
- control_plane_api/app/routers/executions/services/test_worker_health.py +480 -0
- control_plane_api/app/routers/executions/services/worker_health.py +514 -0
- control_plane_api/app/routers/executions/streaming/__init__.py +22 -0
- control_plane_api/app/routers/executions/streaming/deduplication.py +352 -0
- control_plane_api/app/routers/executions/streaming/event_buffer.py +353 -0
- control_plane_api/app/routers/executions/streaming/event_formatter.py +964 -0
- control_plane_api/app/routers/executions/streaming/history_loader.py +588 -0
- control_plane_api/app/routers/executions/streaming/live_source.py +693 -0
- control_plane_api/app/routers/executions/streaming/streamer.py +849 -0
- control_plane_api/app/routers/executions.py +4888 -0
- control_plane_api/app/routers/health.py +165 -0
- control_plane_api/app/routers/health_v2.py +394 -0
- control_plane_api/app/routers/integration_templates.py +496 -0
- control_plane_api/app/routers/integrations.py +287 -0
- control_plane_api/app/routers/jobs.py +1809 -0
- control_plane_api/app/routers/metrics.py +517 -0
- control_plane_api/app/routers/models.py +82 -0
- control_plane_api/app/routers/models_v2.py +628 -0
- control_plane_api/app/routers/plan_executions.py +1481 -0
- control_plane_api/app/routers/plan_generation_async.py +304 -0
- control_plane_api/app/routers/policies.py +669 -0
- control_plane_api/app/routers/presence.py +234 -0
- control_plane_api/app/routers/projects.py +987 -0
- control_plane_api/app/routers/runners.py +379 -0
- control_plane_api/app/routers/runtimes.py +172 -0
- control_plane_api/app/routers/secrets.py +171 -0
- control_plane_api/app/routers/skills.py +1010 -0
- control_plane_api/app/routers/skills_definitions.py +140 -0
- control_plane_api/app/routers/storage.py +456 -0
- control_plane_api/app/routers/task_planning.py +611 -0
- control_plane_api/app/routers/task_queues.py +650 -0
- control_plane_api/app/routers/team_context.py +274 -0
- control_plane_api/app/routers/teams.py +1747 -0
- control_plane_api/app/routers/templates.py +248 -0
- control_plane_api/app/routers/traces.py +571 -0
- control_plane_api/app/routers/websocket_client.py +479 -0
- control_plane_api/app/routers/websocket_executions_status.py +437 -0
- control_plane_api/app/routers/websocket_gateway.py +323 -0
- control_plane_api/app/routers/websocket_traces.py +576 -0
- control_plane_api/app/routers/worker_queues.py +2555 -0
- control_plane_api/app/routers/worker_websocket.py +419 -0
- control_plane_api/app/routers/workers.py +1004 -0
- control_plane_api/app/routers/workflows.py +204 -0
- control_plane_api/app/runtimes/__init__.py +6 -0
- control_plane_api/app/runtimes/validation.py +344 -0
- control_plane_api/app/schemas/__init__.py +1 -0
- control_plane_api/app/schemas/job_schemas.py +302 -0
- control_plane_api/app/schemas/mcp_schemas.py +311 -0
- control_plane_api/app/schemas/template_schemas.py +133 -0
- control_plane_api/app/schemas/trace_schemas.py +168 -0
- control_plane_api/app/schemas/worker_queue_observability_schemas.py +165 -0
- control_plane_api/app/services/__init__.py +1 -0
- control_plane_api/app/services/agno_planning_strategy.py +233 -0
- control_plane_api/app/services/agno_service.py +838 -0
- control_plane_api/app/services/claude_code_planning_service.py +203 -0
- control_plane_api/app/services/context_graph_client.py +224 -0
- control_plane_api/app/services/custom_integration_service.py +415 -0
- control_plane_api/app/services/integration_resolution_service.py +345 -0
- control_plane_api/app/services/litellm_service.py +394 -0
- control_plane_api/app/services/plan_generator.py +79 -0
- control_plane_api/app/services/planning_strategy.py +66 -0
- control_plane_api/app/services/planning_strategy_factory.py +118 -0
- control_plane_api/app/services/policy_service.py +615 -0
- control_plane_api/app/services/state_transition_service.py +755 -0
- control_plane_api/app/services/storage_service.py +593 -0
- control_plane_api/app/services/temporal_cloud_provisioning.py +150 -0
- control_plane_api/app/services/toolsets/context_graph_skill.py +432 -0
- control_plane_api/app/services/trace_retention.py +354 -0
- control_plane_api/app/services/worker_queue_metrics_service.py +190 -0
- control_plane_api/app/services/workflow_cancellation_manager.py +135 -0
- control_plane_api/app/services/workflow_operations_service.py +611 -0
- control_plane_api/app/skills/__init__.py +100 -0
- control_plane_api/app/skills/base.py +239 -0
- control_plane_api/app/skills/builtin/__init__.py +37 -0
- control_plane_api/app/skills/builtin/agent_communication/__init__.py +8 -0
- control_plane_api/app/skills/builtin/agent_communication/skill.py +246 -0
- control_plane_api/app/skills/builtin/code_ingestion/__init__.py +4 -0
- control_plane_api/app/skills/builtin/code_ingestion/skill.py +267 -0
- control_plane_api/app/skills/builtin/cognitive_memory/__init__.py +4 -0
- control_plane_api/app/skills/builtin/cognitive_memory/skill.py +174 -0
- control_plane_api/app/skills/builtin/contextual_awareness/__init__.py +4 -0
- control_plane_api/app/skills/builtin/contextual_awareness/skill.py +387 -0
- control_plane_api/app/skills/builtin/data_visualization/__init__.py +4 -0
- control_plane_api/app/skills/builtin/data_visualization/skill.py +154 -0
- control_plane_api/app/skills/builtin/docker/__init__.py +4 -0
- control_plane_api/app/skills/builtin/docker/skill.py +104 -0
- control_plane_api/app/skills/builtin/file_generation/__init__.py +4 -0
- control_plane_api/app/skills/builtin/file_generation/skill.py +94 -0
- control_plane_api/app/skills/builtin/file_system/__init__.py +4 -0
- control_plane_api/app/skills/builtin/file_system/skill.py +110 -0
- control_plane_api/app/skills/builtin/knowledge_api/__init__.py +5 -0
- control_plane_api/app/skills/builtin/knowledge_api/skill.py +124 -0
- control_plane_api/app/skills/builtin/python/__init__.py +4 -0
- control_plane_api/app/skills/builtin/python/skill.py +92 -0
- control_plane_api/app/skills/builtin/remote_filesystem/__init__.py +5 -0
- control_plane_api/app/skills/builtin/remote_filesystem/skill.py +170 -0
- control_plane_api/app/skills/builtin/shell/__init__.py +4 -0
- control_plane_api/app/skills/builtin/shell/skill.py +161 -0
- control_plane_api/app/skills/builtin/slack/__init__.py +3 -0
- control_plane_api/app/skills/builtin/slack/skill.py +302 -0
- control_plane_api/app/skills/builtin/workflow_executor/__init__.py +4 -0
- control_plane_api/app/skills/builtin/workflow_executor/skill.py +469 -0
- control_plane_api/app/skills/business_intelligence.py +189 -0
- control_plane_api/app/skills/config.py +63 -0
- control_plane_api/app/skills/loaders/__init__.py +14 -0
- control_plane_api/app/skills/loaders/base.py +73 -0
- control_plane_api/app/skills/loaders/filesystem_loader.py +199 -0
- control_plane_api/app/skills/registry.py +125 -0
- control_plane_api/app/utils/helpers.py +12 -0
- control_plane_api/app/utils/workflow_executor.py +354 -0
- control_plane_api/app/workflows/__init__.py +11 -0
- control_plane_api/app/workflows/agent_execution.py +520 -0
- control_plane_api/app/workflows/agent_execution_with_skills.py +223 -0
- control_plane_api/app/workflows/namespace_provisioning.py +326 -0
- control_plane_api/app/workflows/plan_generation.py +254 -0
- control_plane_api/app/workflows/team_execution.py +442 -0
- control_plane_api/scripts/seed_models.py +240 -0
- control_plane_api/scripts/validate_existing_tool_names.py +492 -0
- control_plane_api/shared/__init__.py +8 -0
- control_plane_api/shared/version.py +17 -0
- control_plane_api/test_deduplication.py +274 -0
- control_plane_api/test_executor_deduplication_e2e.py +309 -0
- control_plane_api/test_job_execution_e2e.py +283 -0
- control_plane_api/test_real_integration.py +193 -0
- control_plane_api/version.py +38 -0
- control_plane_api/worker/__init__.py +0 -0
- control_plane_api/worker/activities/__init__.py +0 -0
- control_plane_api/worker/activities/agent_activities.py +1585 -0
- control_plane_api/worker/activities/approval_activities.py +234 -0
- control_plane_api/worker/activities/job_activities.py +199 -0
- control_plane_api/worker/activities/runtime_activities.py +1167 -0
- control_plane_api/worker/activities/skill_activities.py +282 -0
- control_plane_api/worker/activities/team_activities.py +479 -0
- control_plane_api/worker/agent_runtime_server.py +370 -0
- control_plane_api/worker/binary_manager.py +333 -0
- control_plane_api/worker/config/__init__.py +31 -0
- control_plane_api/worker/config/worker_config.py +273 -0
- control_plane_api/worker/control_plane_client.py +1491 -0
- control_plane_api/worker/examples/analytics_integration_example.py +362 -0
- control_plane_api/worker/health_monitor.py +159 -0
- control_plane_api/worker/metrics.py +237 -0
- control_plane_api/worker/models/__init__.py +1 -0
- control_plane_api/worker/models/error_events.py +105 -0
- control_plane_api/worker/models/inputs.py +89 -0
- control_plane_api/worker/runtimes/__init__.py +35 -0
- control_plane_api/worker/runtimes/agent_runtime/runtime.py +485 -0
- control_plane_api/worker/runtimes/agno/__init__.py +34 -0
- control_plane_api/worker/runtimes/agno/config.py +248 -0
- control_plane_api/worker/runtimes/agno/hooks.py +385 -0
- control_plane_api/worker/runtimes/agno/mcp_builder.py +195 -0
- control_plane_api/worker/runtimes/agno/runtime.py +1063 -0
- control_plane_api/worker/runtimes/agno/utils.py +163 -0
- control_plane_api/worker/runtimes/base.py +979 -0
- control_plane_api/worker/runtimes/claude_code/__init__.py +38 -0
- control_plane_api/worker/runtimes/claude_code/cleanup.py +184 -0
- control_plane_api/worker/runtimes/claude_code/client_pool.py +529 -0
- control_plane_api/worker/runtimes/claude_code/config.py +829 -0
- control_plane_api/worker/runtimes/claude_code/hooks.py +482 -0
- control_plane_api/worker/runtimes/claude_code/litellm_proxy.py +1702 -0
- control_plane_api/worker/runtimes/claude_code/mcp_builder.py +467 -0
- control_plane_api/worker/runtimes/claude_code/mcp_discovery.py +558 -0
- control_plane_api/worker/runtimes/claude_code/runtime.py +1546 -0
- control_plane_api/worker/runtimes/claude_code/tool_mapper.py +403 -0
- control_plane_api/worker/runtimes/claude_code/utils.py +149 -0
- control_plane_api/worker/runtimes/factory.py +173 -0
- control_plane_api/worker/runtimes/model_utils.py +107 -0
- control_plane_api/worker/runtimes/validation.py +93 -0
- control_plane_api/worker/services/__init__.py +1 -0
- control_plane_api/worker/services/agent_communication_tools.py +908 -0
- control_plane_api/worker/services/agent_executor.py +485 -0
- control_plane_api/worker/services/agent_executor_v2.py +793 -0
- control_plane_api/worker/services/analytics_collector.py +457 -0
- control_plane_api/worker/services/analytics_service.py +464 -0
- control_plane_api/worker/services/approval_tools.py +310 -0
- control_plane_api/worker/services/approval_tools_agno.py +207 -0
- control_plane_api/worker/services/cancellation_manager.py +177 -0
- control_plane_api/worker/services/code_ingestion_tools.py +465 -0
- control_plane_api/worker/services/contextual_awareness_tools.py +405 -0
- control_plane_api/worker/services/data_visualization.py +834 -0
- control_plane_api/worker/services/event_publisher.py +531 -0
- control_plane_api/worker/services/jira_tools.py +257 -0
- control_plane_api/worker/services/remote_filesystem_tools.py +498 -0
- control_plane_api/worker/services/runtime_analytics.py +328 -0
- control_plane_api/worker/services/session_service.py +365 -0
- control_plane_api/worker/services/skill_context_enhancement.py +181 -0
- control_plane_api/worker/services/skill_factory.py +471 -0
- control_plane_api/worker/services/system_prompt_enhancement.py +410 -0
- control_plane_api/worker/services/team_executor.py +715 -0
- control_plane_api/worker/services/team_executor_v2.py +1866 -0
- control_plane_api/worker/services/tool_enforcement.py +254 -0
- control_plane_api/worker/services/workflow_executor/__init__.py +52 -0
- control_plane_api/worker/services/workflow_executor/event_processor.py +287 -0
- control_plane_api/worker/services/workflow_executor/event_publisher.py +210 -0
- control_plane_api/worker/services/workflow_executor/executors/__init__.py +15 -0
- control_plane_api/worker/services/workflow_executor/executors/base.py +270 -0
- control_plane_api/worker/services/workflow_executor/executors/json_executor.py +50 -0
- control_plane_api/worker/services/workflow_executor/executors/python_executor.py +50 -0
- control_plane_api/worker/services/workflow_executor/models.py +142 -0
- control_plane_api/worker/services/workflow_executor_tools.py +1748 -0
- control_plane_api/worker/skills/__init__.py +12 -0
- control_plane_api/worker/skills/builtin/context_graph_search/README.md +213 -0
- control_plane_api/worker/skills/builtin/context_graph_search/__init__.py +5 -0
- control_plane_api/worker/skills/builtin/context_graph_search/agno_impl.py +808 -0
- control_plane_api/worker/skills/builtin/context_graph_search/skill.yaml +67 -0
- control_plane_api/worker/skills/builtin/contextual_awareness/__init__.py +4 -0
- control_plane_api/worker/skills/builtin/contextual_awareness/agno_impl.py +62 -0
- control_plane_api/worker/skills/builtin/data_visualization/agno_impl.py +18 -0
- control_plane_api/worker/skills/builtin/data_visualization/skill.yaml +84 -0
- control_plane_api/worker/skills/builtin/docker/agno_impl.py +65 -0
- control_plane_api/worker/skills/builtin/docker/skill.yaml +60 -0
- control_plane_api/worker/skills/builtin/file_generation/agno_impl.py +47 -0
- control_plane_api/worker/skills/builtin/file_generation/skill.yaml +64 -0
- control_plane_api/worker/skills/builtin/file_system/agno_impl.py +32 -0
- control_plane_api/worker/skills/builtin/file_system/skill.yaml +54 -0
- control_plane_api/worker/skills/builtin/knowledge_api/__init__.py +4 -0
- control_plane_api/worker/skills/builtin/knowledge_api/agno_impl.py +50 -0
- control_plane_api/worker/skills/builtin/knowledge_api/skill.yaml +66 -0
- control_plane_api/worker/skills/builtin/python/agno_impl.py +25 -0
- control_plane_api/worker/skills/builtin/python/skill.yaml +60 -0
- control_plane_api/worker/skills/builtin/schema_fix_mixin.py +260 -0
- control_plane_api/worker/skills/builtin/shell/agno_impl.py +31 -0
- control_plane_api/worker/skills/builtin/shell/skill.yaml +60 -0
- control_plane_api/worker/skills/builtin/slack/__init__.py +3 -0
- control_plane_api/worker/skills/builtin/slack/agno_impl.py +1282 -0
- control_plane_api/worker/skills/builtin/slack/skill.yaml +276 -0
- control_plane_api/worker/skills/builtin/workflow_executor/agno_impl.py +62 -0
- control_plane_api/worker/skills/builtin/workflow_executor/skill.yaml +79 -0
- control_plane_api/worker/skills/loaders/__init__.py +5 -0
- control_plane_api/worker/skills/loaders/base.py +23 -0
- control_plane_api/worker/skills/loaders/filesystem_loader.py +357 -0
- control_plane_api/worker/skills/registry.py +208 -0
- control_plane_api/worker/tests/__init__.py +1 -0
- control_plane_api/worker/tests/conftest.py +12 -0
- control_plane_api/worker/tests/e2e/__init__.py +0 -0
- control_plane_api/worker/tests/e2e/test_context_graph_real_api.py +338 -0
- control_plane_api/worker/tests/e2e/test_context_graph_templates_e2e.py +523 -0
- control_plane_api/worker/tests/e2e/test_enforcement_e2e.py +344 -0
- control_plane_api/worker/tests/e2e/test_execution_flow.py +571 -0
- control_plane_api/worker/tests/e2e/test_single_execution_mode.py +656 -0
- control_plane_api/worker/tests/integration/__init__.py +0 -0
- control_plane_api/worker/tests/integration/test_builtin_skills_fixes.py +245 -0
- control_plane_api/worker/tests/integration/test_context_graph_search_integration.py +365 -0
- control_plane_api/worker/tests/integration/test_control_plane_integration.py +308 -0
- control_plane_api/worker/tests/integration/test_hook_enforcement_integration.py +579 -0
- control_plane_api/worker/tests/integration/test_scheduled_job_workflow.py +237 -0
- control_plane_api/worker/tests/integration/test_system_prompt_enhancement_integration.py +343 -0
- control_plane_api/worker/tests/unit/__init__.py +0 -0
- control_plane_api/worker/tests/unit/test_builtin_skill_autoload.py +396 -0
- control_plane_api/worker/tests/unit/test_context_graph_search.py +450 -0
- control_plane_api/worker/tests/unit/test_context_graph_templates.py +403 -0
- control_plane_api/worker/tests/unit/test_control_plane_client.py +401 -0
- control_plane_api/worker/tests/unit/test_control_plane_client_jobs.py +345 -0
- control_plane_api/worker/tests/unit/test_job_activities.py +353 -0
- control_plane_api/worker/tests/unit/test_skill_context_enhancement.py +321 -0
- control_plane_api/worker/tests/unit/test_system_prompt_enhancement.py +415 -0
- control_plane_api/worker/tests/unit/test_tool_enforcement.py +324 -0
- control_plane_api/worker/utils/__init__.py +1 -0
- control_plane_api/worker/utils/chunk_batcher.py +330 -0
- control_plane_api/worker/utils/environment.py +65 -0
- control_plane_api/worker/utils/error_publisher.py +260 -0
- control_plane_api/worker/utils/event_batcher.py +256 -0
- control_plane_api/worker/utils/logging_config.py +335 -0
- control_plane_api/worker/utils/logging_helper.py +326 -0
- control_plane_api/worker/utils/parameter_validator.py +120 -0
- control_plane_api/worker/utils/retry_utils.py +60 -0
- control_plane_api/worker/utils/streaming_utils.py +665 -0
- control_plane_api/worker/utils/tool_validation.py +332 -0
- control_plane_api/worker/utils/workspace_manager.py +163 -0
- control_plane_api/worker/websocket_client.py +393 -0
- control_plane_api/worker/worker.py +1297 -0
- control_plane_api/worker/workflows/__init__.py +0 -0
- control_plane_api/worker/workflows/agent_execution.py +909 -0
- control_plane_api/worker/workflows/scheduled_job_wrapper.py +332 -0
- control_plane_api/worker/workflows/team_execution.py +611 -0
- kubiya_control_plane_api-0.9.15.dist-info/METADATA +354 -0
- kubiya_control_plane_api-0.9.15.dist-info/RECORD +479 -0
- kubiya_control_plane_api-0.9.15.dist-info/WHEEL +5 -0
- kubiya_control_plane_api-0.9.15.dist-info/entry_points.txt +5 -0
- kubiya_control_plane_api-0.9.15.dist-info/licenses/LICENSE +676 -0
- kubiya_control_plane_api-0.9.15.dist-info/top_level.txt +3 -0
- scripts/__init__.py +1 -0
- scripts/migrations.py +39 -0
- scripts/seed_worker_queues.py +128 -0
- scripts/setup_agent_runtime.py +142 -0
- worker_internal/__init__.py +1 -0
- worker_internal/planner/__init__.py +1 -0
- worker_internal/planner/activities.py +1499 -0
- worker_internal/planner/agent_tools.py +197 -0
- worker_internal/planner/event_models.py +148 -0
- worker_internal/planner/event_publisher.py +67 -0
- worker_internal/planner/models.py +199 -0
- worker_internal/planner/retry_logic.py +134 -0
- worker_internal/planner/worker.py +300 -0
- 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,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,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,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,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())
|