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,173 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Runtime factory using the registry system.
|
|
3
|
+
|
|
4
|
+
This module provides a simplified factory that delegates to RuntimeRegistry.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import TYPE_CHECKING, List
|
|
8
|
+
import structlog
|
|
9
|
+
|
|
10
|
+
from .base import RuntimeType, BaseRuntime, RuntimeRegistry
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from control_plane_client import ControlPlaneClient
|
|
14
|
+
from services.cancellation_manager import CancellationManager
|
|
15
|
+
|
|
16
|
+
logger = structlog.get_logger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class RuntimeFactory:
|
|
20
|
+
"""
|
|
21
|
+
Factory for creating runtime instances.
|
|
22
|
+
|
|
23
|
+
This is a thin wrapper around RuntimeRegistry that provides
|
|
24
|
+
backward compatibility and convenience methods.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
@staticmethod
|
|
28
|
+
def create_runtime(
|
|
29
|
+
runtime_type: RuntimeType,
|
|
30
|
+
control_plane_client: "ControlPlaneClient",
|
|
31
|
+
cancellation_manager: "CancellationManager",
|
|
32
|
+
**kwargs,
|
|
33
|
+
) -> BaseRuntime:
|
|
34
|
+
"""
|
|
35
|
+
Create a runtime instance using the registry.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
runtime_type: Type of runtime to create
|
|
39
|
+
control_plane_client: Client for Control Plane API
|
|
40
|
+
cancellation_manager: Manager for execution cancellation
|
|
41
|
+
**kwargs: Additional runtime-specific configuration
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
BaseRuntime instance
|
|
45
|
+
|
|
46
|
+
Raises:
|
|
47
|
+
ValueError: If runtime_type is not supported
|
|
48
|
+
|
|
49
|
+
Example:
|
|
50
|
+
>>> factory = RuntimeFactory()
|
|
51
|
+
>>> runtime = factory.create_runtime(
|
|
52
|
+
... RuntimeType.CLAUDE_CODE,
|
|
53
|
+
... control_plane_client,
|
|
54
|
+
... cancellation_manager
|
|
55
|
+
... )
|
|
56
|
+
"""
|
|
57
|
+
logger.info(
|
|
58
|
+
"creating_runtime",
|
|
59
|
+
runtime_type=runtime_type.value,
|
|
60
|
+
has_kwargs=bool(kwargs),
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
return RuntimeRegistry.create(
|
|
64
|
+
runtime_type=runtime_type,
|
|
65
|
+
control_plane_client=control_plane_client,
|
|
66
|
+
cancellation_manager=cancellation_manager,
|
|
67
|
+
**kwargs,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
@staticmethod
|
|
71
|
+
def get_default_runtime_type() -> RuntimeType:
|
|
72
|
+
"""
|
|
73
|
+
Get the default runtime type.
|
|
74
|
+
|
|
75
|
+
This is used when no runtime is explicitly specified in agent config.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
Default RuntimeType (RuntimeType.DEFAULT)
|
|
79
|
+
"""
|
|
80
|
+
return RuntimeType.DEFAULT
|
|
81
|
+
|
|
82
|
+
@staticmethod
|
|
83
|
+
def get_supported_runtimes() -> List[RuntimeType]:
|
|
84
|
+
"""
|
|
85
|
+
Get list of supported runtimes from registry.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
List of RuntimeType enum values
|
|
89
|
+
"""
|
|
90
|
+
return RuntimeRegistry.list_available()
|
|
91
|
+
|
|
92
|
+
@staticmethod
|
|
93
|
+
def parse_runtime_type(runtime_str: str) -> RuntimeType:
|
|
94
|
+
"""
|
|
95
|
+
Parse runtime type from string with fallback to default.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
runtime_str: Runtime type as string
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
RuntimeType enum value, defaults to DEFAULT if invalid
|
|
102
|
+
|
|
103
|
+
Example:
|
|
104
|
+
>>> RuntimeFactory.parse_runtime_type("claude_code")
|
|
105
|
+
RuntimeType.CLAUDE_CODE
|
|
106
|
+
>>> RuntimeFactory.parse_runtime_type("invalid")
|
|
107
|
+
RuntimeType.DEFAULT
|
|
108
|
+
"""
|
|
109
|
+
try:
|
|
110
|
+
return RuntimeType(runtime_str)
|
|
111
|
+
except ValueError:
|
|
112
|
+
logger.warning(
|
|
113
|
+
"invalid_runtime_type_fallback",
|
|
114
|
+
runtime_str=runtime_str,
|
|
115
|
+
default=RuntimeType.DEFAULT.value,
|
|
116
|
+
)
|
|
117
|
+
return RuntimeType.DEFAULT
|
|
118
|
+
|
|
119
|
+
@staticmethod
|
|
120
|
+
def get_runtime_info_all() -> dict:
|
|
121
|
+
"""
|
|
122
|
+
Get information about all available runtimes.
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
Dict mapping runtime type to info dict
|
|
126
|
+
"""
|
|
127
|
+
return RuntimeRegistry.get_runtime_info_all()
|
|
128
|
+
|
|
129
|
+
@staticmethod
|
|
130
|
+
def validate_runtime_config(
|
|
131
|
+
runtime_type: RuntimeType, config: dict
|
|
132
|
+
) -> tuple[bool, str]:
|
|
133
|
+
"""
|
|
134
|
+
Validate runtime-specific configuration.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
runtime_type: Type of runtime
|
|
138
|
+
config: Configuration dict to validate
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
Tuple of (is_valid, error_message)
|
|
142
|
+
|
|
143
|
+
Example:
|
|
144
|
+
>>> is_valid, error = RuntimeFactory.validate_runtime_config(
|
|
145
|
+
... RuntimeType.CLAUDE_CODE,
|
|
146
|
+
... {"allowed_tools": ["Bash"]}
|
|
147
|
+
... )
|
|
148
|
+
"""
|
|
149
|
+
# Get runtime class from registry
|
|
150
|
+
try:
|
|
151
|
+
runtime_class = RuntimeRegistry.get(runtime_type)
|
|
152
|
+
|
|
153
|
+
# Create temporary instance to validate (with mocks)
|
|
154
|
+
from unittest.mock import MagicMock
|
|
155
|
+
temp_runtime = runtime_class(
|
|
156
|
+
control_plane_client=MagicMock(),
|
|
157
|
+
cancellation_manager=MagicMock(),
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
# Use runtime's validation if available
|
|
161
|
+
if hasattr(temp_runtime, 'validate_config'):
|
|
162
|
+
try:
|
|
163
|
+
temp_runtime.validate_config(config)
|
|
164
|
+
return True, ""
|
|
165
|
+
except ValueError as e:
|
|
166
|
+
return False, str(e)
|
|
167
|
+
|
|
168
|
+
return True, ""
|
|
169
|
+
|
|
170
|
+
except ValueError as e:
|
|
171
|
+
return False, f"Unknown runtime type: {str(e)}"
|
|
172
|
+
except Exception as e:
|
|
173
|
+
return False, f"Validation error: {str(e)}"
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Model selection utilities for runtime execution.
|
|
3
|
+
|
|
4
|
+
This module provides centralized model selection logic that respects:
|
|
5
|
+
1. KUBIYA_MODEL_OVERRIDE (highest priority - from CLI --model flag)
|
|
6
|
+
2. RuntimeExecutionContext.model_id (from agent/execution configuration)
|
|
7
|
+
3. LITELLM_DEFAULT_MODEL (default fallback)
|
|
8
|
+
|
|
9
|
+
Usage:
|
|
10
|
+
from control_plane_api.worker.runtimes.model_utils import get_effective_model
|
|
11
|
+
|
|
12
|
+
model = get_effective_model(context.model_id)
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import os
|
|
16
|
+
import structlog
|
|
17
|
+
|
|
18
|
+
logger = structlog.get_logger(__name__)
|
|
19
|
+
|
|
20
|
+
# Default model to use if no other configuration is provided
|
|
21
|
+
DEFAULT_MODEL = "kubiya/claude-sonnet-4"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def get_effective_model(
|
|
25
|
+
context_model_id: str = None,
|
|
26
|
+
log_context: dict = None,
|
|
27
|
+
) -> str:
|
|
28
|
+
"""
|
|
29
|
+
Get the effective model ID to use for execution.
|
|
30
|
+
|
|
31
|
+
Priority order (highest to lowest):
|
|
32
|
+
1. KUBIYA_MODEL_OVERRIDE environment variable (from CLI --model flag)
|
|
33
|
+
2. context_model_id (from RuntimeExecutionContext.model_id or agent config)
|
|
34
|
+
3. LITELLM_DEFAULT_MODEL environment variable
|
|
35
|
+
4. DEFAULT_MODEL constant ("kubiya/claude-sonnet-4")
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
context_model_id: Model ID from execution context (optional)
|
|
39
|
+
log_context: Additional context for logging (execution_id, etc.)
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
The effective model ID to use
|
|
43
|
+
"""
|
|
44
|
+
log_ctx = log_context or {}
|
|
45
|
+
|
|
46
|
+
# Priority 1: Environment override (from CLI --model flag)
|
|
47
|
+
model_override = os.environ.get("KUBIYA_MODEL_OVERRIDE")
|
|
48
|
+
if model_override:
|
|
49
|
+
logger.info(
|
|
50
|
+
"model_override_active",
|
|
51
|
+
effective_model=model_override,
|
|
52
|
+
source="KUBIYA_MODEL_OVERRIDE",
|
|
53
|
+
overridden_context_model=context_model_id,
|
|
54
|
+
note="Explicit model override from CLI --model flag or KUBIYA_MODEL env var",
|
|
55
|
+
**log_ctx,
|
|
56
|
+
)
|
|
57
|
+
return model_override
|
|
58
|
+
|
|
59
|
+
# Priority 2: Context model_id (from agent/execution configuration)
|
|
60
|
+
if context_model_id:
|
|
61
|
+
logger.debug(
|
|
62
|
+
"using_context_model",
|
|
63
|
+
effective_model=context_model_id,
|
|
64
|
+
source="context.model_id",
|
|
65
|
+
**log_ctx,
|
|
66
|
+
)
|
|
67
|
+
return context_model_id
|
|
68
|
+
|
|
69
|
+
# Priority 3: Environment default
|
|
70
|
+
env_default = os.environ.get("LITELLM_DEFAULT_MODEL")
|
|
71
|
+
if env_default:
|
|
72
|
+
logger.debug(
|
|
73
|
+
"using_env_default_model",
|
|
74
|
+
effective_model=env_default,
|
|
75
|
+
source="LITELLM_DEFAULT_MODEL",
|
|
76
|
+
**log_ctx,
|
|
77
|
+
)
|
|
78
|
+
return env_default
|
|
79
|
+
|
|
80
|
+
# Priority 4: Hardcoded default
|
|
81
|
+
logger.debug(
|
|
82
|
+
"using_hardcoded_default_model",
|
|
83
|
+
effective_model=DEFAULT_MODEL,
|
|
84
|
+
source="DEFAULT_MODEL",
|
|
85
|
+
**log_ctx,
|
|
86
|
+
)
|
|
87
|
+
return DEFAULT_MODEL
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def is_model_override_active() -> bool:
|
|
91
|
+
"""
|
|
92
|
+
Check if an explicit model override is active.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
True if KUBIYA_MODEL_OVERRIDE is set
|
|
96
|
+
"""
|
|
97
|
+
return bool(os.environ.get("KUBIYA_MODEL_OVERRIDE"))
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def get_model_override() -> str:
|
|
101
|
+
"""
|
|
102
|
+
Get the model override value if set.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
The override model ID or None if not set
|
|
106
|
+
"""
|
|
107
|
+
return os.environ.get("KUBIYA_MODEL_OVERRIDE")
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Runtime validation system with model compatibility and requirements checking.
|
|
3
|
+
|
|
4
|
+
This module re-exports validation functions from the shared validation module
|
|
5
|
+
and provides worker-specific validation helpers for RuntimeExecutionContext.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import List, Optional, Dict, Any
|
|
9
|
+
from control_plane_api.worker.runtimes.base import RuntimeType, RuntimeExecutionContext
|
|
10
|
+
|
|
11
|
+
# Import shared validation logic that both API and worker can use
|
|
12
|
+
from control_plane_api.app.lib.validation import (
|
|
13
|
+
validate_agent_for_runtime as _validate_agent_for_runtime,
|
|
14
|
+
get_runtime_requirements_info as _get_runtime_requirements_info,
|
|
15
|
+
list_all_runtime_requirements as _list_all_runtime_requirements,
|
|
16
|
+
RUNTIME_REQUIREMENTS as _RUNTIME_REQUIREMENTS,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# Re-export for backward compatibility
|
|
21
|
+
validate_agent_for_runtime = _validate_agent_for_runtime
|
|
22
|
+
get_runtime_requirements_info = _get_runtime_requirements_info
|
|
23
|
+
list_all_runtime_requirements = _list_all_runtime_requirements
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ValidationError(Exception):
|
|
27
|
+
"""Raised when validation fails."""
|
|
28
|
+
|
|
29
|
+
def __init__(self, message: str, field: Optional[str] = None, details: Optional[Dict[str, Any]] = None):
|
|
30
|
+
self.message = message
|
|
31
|
+
self.field = field
|
|
32
|
+
self.details = details or {}
|
|
33
|
+
super().__init__(message)
|
|
34
|
+
|
|
35
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
36
|
+
"""Convert to dict for API responses."""
|
|
37
|
+
result = {"error": self.message}
|
|
38
|
+
if self.field:
|
|
39
|
+
result["field"] = self.field
|
|
40
|
+
if self.details:
|
|
41
|
+
result["details"] = self.details
|
|
42
|
+
return result
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def validate_execution_context(context: RuntimeExecutionContext) -> tuple[bool, List[str]]:
|
|
46
|
+
"""
|
|
47
|
+
Validate RuntimeExecutionContext for worker execution.
|
|
48
|
+
|
|
49
|
+
This is a worker-specific helper that validates the full execution context
|
|
50
|
+
including conversation history, skills, and runtime-specific requirements.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
context: Runtime execution context
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Tuple of (is_valid, error_messages)
|
|
57
|
+
"""
|
|
58
|
+
errors = []
|
|
59
|
+
|
|
60
|
+
# Get runtime requirements from shared module
|
|
61
|
+
runtime_type_str = context.runtime_type.value if isinstance(context.runtime_type, RuntimeType) else str(context.runtime_type)
|
|
62
|
+
requirements = _RUNTIME_REQUIREMENTS.get(runtime_type_str)
|
|
63
|
+
|
|
64
|
+
if not requirements:
|
|
65
|
+
# No requirements registered - allow by default
|
|
66
|
+
return True, []
|
|
67
|
+
|
|
68
|
+
# Validate model
|
|
69
|
+
is_valid, error = requirements.validate_model(context.model_id)
|
|
70
|
+
if not is_valid:
|
|
71
|
+
errors.append(error)
|
|
72
|
+
|
|
73
|
+
# Validate config
|
|
74
|
+
config_errors = requirements.validate_config(context.agent_config)
|
|
75
|
+
errors.extend(config_errors)
|
|
76
|
+
|
|
77
|
+
# Validate system prompt if required
|
|
78
|
+
if requirements.requires_system_prompt and not context.system_prompt:
|
|
79
|
+
errors.append("System prompt is required for this runtime")
|
|
80
|
+
|
|
81
|
+
# Validate tools if required
|
|
82
|
+
if requirements.requires_tools and not context.skills:
|
|
83
|
+
errors.append("At least one skill is required for this runtime")
|
|
84
|
+
|
|
85
|
+
# Validate history length
|
|
86
|
+
if requirements.max_history_length and context.conversation_history:
|
|
87
|
+
if len(context.conversation_history) > requirements.max_history_length:
|
|
88
|
+
errors.append(
|
|
89
|
+
f"Conversation history too long ({len(context.conversation_history)} messages). "
|
|
90
|
+
f"Maximum: {requirements.max_history_length}"
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
return len(errors) == 0, errors
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Business logic services for worker operations"""
|