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