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,218 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Environment Context Tools - Fetch environment and infrastructure information
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import Optional
|
|
6
|
+
from sqlalchemy.orm import Session
|
|
7
|
+
from control_plane_api.app.lib.planning_tools.base import BasePlanningTools
|
|
8
|
+
from control_plane_api.app.lib.supabase import get_supabase
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class EnvironmentsContextTools(BasePlanningTools):
|
|
12
|
+
"""
|
|
13
|
+
Tools for fetching environment and infrastructure context
|
|
14
|
+
|
|
15
|
+
Provides methods to:
|
|
16
|
+
- List available execution environments
|
|
17
|
+
- Get worker queue information
|
|
18
|
+
- Check resource availability
|
|
19
|
+
- Query runtime configurations
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def __init__(self, db: Optional[Session] = None, organization_id: Optional[str] = None):
|
|
23
|
+
super().__init__(db=db, organization_id=organization_id)
|
|
24
|
+
self.name = "environment_context_tools"
|
|
25
|
+
|
|
26
|
+
async def list_environments(self, limit: int = 50) -> str:
|
|
27
|
+
"""
|
|
28
|
+
List all available execution environments
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
limit: Maximum number of environments to return
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
Formatted string with environment information including:
|
|
35
|
+
- Environment name and ID
|
|
36
|
+
- Status (active/inactive)
|
|
37
|
+
- Available resources
|
|
38
|
+
- Configuration details
|
|
39
|
+
"""
|
|
40
|
+
try:
|
|
41
|
+
# Use Supabase for environments
|
|
42
|
+
client = get_supabase()
|
|
43
|
+
|
|
44
|
+
query = client.table("environments").select("*")
|
|
45
|
+
if self.organization_id:
|
|
46
|
+
query = query.eq("organization_id", self.organization_id)
|
|
47
|
+
|
|
48
|
+
result = query.limit(limit).execute()
|
|
49
|
+
environments = result.data or []
|
|
50
|
+
|
|
51
|
+
return self._format_list_response(
|
|
52
|
+
items=environments,
|
|
53
|
+
title="Available Environments",
|
|
54
|
+
key_fields=["status", "type", "region"],
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
except Exception as e:
|
|
58
|
+
return f"Error listing environments: {str(e)}"
|
|
59
|
+
|
|
60
|
+
async def get_environment_details(self, environment_id: str) -> str:
|
|
61
|
+
"""
|
|
62
|
+
Get detailed information about a specific environment
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
environment_id: ID of the environment to fetch
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
Detailed environment information including:
|
|
69
|
+
- Full configuration
|
|
70
|
+
- Resource limits
|
|
71
|
+
- Network settings
|
|
72
|
+
- Security policies
|
|
73
|
+
"""
|
|
74
|
+
try:
|
|
75
|
+
response = await self._make_request("GET", f"/environments/{environment_id}")
|
|
76
|
+
|
|
77
|
+
return self._format_detail_response(
|
|
78
|
+
item=response,
|
|
79
|
+
title=f"Environment Details: {response.get('name', 'Unknown')}",
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
except Exception as e:
|
|
83
|
+
return f"Error fetching environment {environment_id}: {str(e)}"
|
|
84
|
+
|
|
85
|
+
async def list_worker_queues(self, environment_id: Optional[str] = None) -> str:
|
|
86
|
+
"""
|
|
87
|
+
List available worker queues for task execution
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
environment_id: Optional environment ID to filter queues
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
List of worker queues with:
|
|
94
|
+
- Queue name and ID
|
|
95
|
+
- Active worker count
|
|
96
|
+
- Queue status
|
|
97
|
+
- Processing capacity
|
|
98
|
+
"""
|
|
99
|
+
try:
|
|
100
|
+
if environment_id:
|
|
101
|
+
endpoint = f"/environments/{environment_id}/worker-queues"
|
|
102
|
+
else:
|
|
103
|
+
endpoint = "/worker-queues"
|
|
104
|
+
|
|
105
|
+
params = {}
|
|
106
|
+
if self.organization_id:
|
|
107
|
+
params["organization_id"] = self.organization_id
|
|
108
|
+
|
|
109
|
+
response = await self._make_request("GET", endpoint, params=params)
|
|
110
|
+
|
|
111
|
+
queues = response if isinstance(response, list) else response.get("queues", [])
|
|
112
|
+
|
|
113
|
+
return self._format_list_response(
|
|
114
|
+
items=queues,
|
|
115
|
+
title="Available Worker Queues",
|
|
116
|
+
key_fields=["status", "active_workers", "pending_tasks", "environment_id"],
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
except Exception as e:
|
|
120
|
+
return f"Error listing worker queues: {str(e)}"
|
|
121
|
+
|
|
122
|
+
async def get_worker_queue_details(self, queue_id: str) -> str:
|
|
123
|
+
"""
|
|
124
|
+
Get detailed information about a specific worker queue
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
queue_id: ID of the worker queue
|
|
128
|
+
|
|
129
|
+
Returns:
|
|
130
|
+
Detailed queue information including:
|
|
131
|
+
- Worker capacity and utilization
|
|
132
|
+
- Queue statistics
|
|
133
|
+
- Configuration
|
|
134
|
+
"""
|
|
135
|
+
try:
|
|
136
|
+
response = await self._make_request("GET", f"/worker-queues/{queue_id}")
|
|
137
|
+
|
|
138
|
+
return self._format_detail_response(
|
|
139
|
+
item=response,
|
|
140
|
+
title=f"Worker Queue Details: {response.get('name', 'Unknown')}",
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
except Exception as e:
|
|
144
|
+
return f"Error fetching worker queue {queue_id}: {str(e)}"
|
|
145
|
+
|
|
146
|
+
async def check_resource_availability(self, environment_id: str) -> str:
|
|
147
|
+
"""
|
|
148
|
+
Check resource availability in a specific environment
|
|
149
|
+
|
|
150
|
+
Args:
|
|
151
|
+
environment_id: ID of the environment to check
|
|
152
|
+
|
|
153
|
+
Returns:
|
|
154
|
+
Resource availability status including:
|
|
155
|
+
- CPU/Memory availability
|
|
156
|
+
- Active workers
|
|
157
|
+
- Queue capacity
|
|
158
|
+
"""
|
|
159
|
+
try:
|
|
160
|
+
# Get environment details
|
|
161
|
+
env_response = await self._make_request("GET", f"/environments/{environment_id}")
|
|
162
|
+
|
|
163
|
+
# Get worker queues for this environment
|
|
164
|
+
queues_response = await self._make_request(
|
|
165
|
+
"GET",
|
|
166
|
+
f"/environments/{environment_id}/worker-queues"
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
queues = queues_response if isinstance(queues_response, list) else queues_response.get("queues", [])
|
|
170
|
+
|
|
171
|
+
total_workers = sum(q.get("active_workers", 0) for q in queues)
|
|
172
|
+
total_pending = sum(q.get("pending_tasks", 0) for q in queues)
|
|
173
|
+
|
|
174
|
+
output = [
|
|
175
|
+
f"Resource Availability for Environment: {env_response.get('name', 'Unknown')}",
|
|
176
|
+
f" Status: {env_response.get('status', 'unknown')}",
|
|
177
|
+
f" Worker Queues: {len(queues)}",
|
|
178
|
+
f" Total Active Workers: {total_workers}",
|
|
179
|
+
f" Total Pending Tasks: {total_pending}",
|
|
180
|
+
"",
|
|
181
|
+
"Queue Details:",
|
|
182
|
+
]
|
|
183
|
+
|
|
184
|
+
for queue in queues:
|
|
185
|
+
output.append(
|
|
186
|
+
f" - {queue.get('name')}: "
|
|
187
|
+
f"{queue.get('active_workers', 0)} workers, "
|
|
188
|
+
f"{queue.get('pending_tasks', 0)} pending"
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
return "\n".join(output)
|
|
192
|
+
|
|
193
|
+
except Exception as e:
|
|
194
|
+
return f"Error checking resource availability: {str(e)}"
|
|
195
|
+
|
|
196
|
+
async def list_runtime_configurations(self) -> str:
|
|
197
|
+
"""
|
|
198
|
+
List available runtime configurations
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
Available runtime configurations including:
|
|
202
|
+
- Runtime types (docker, k8s, etc.)
|
|
203
|
+
- Resource templates
|
|
204
|
+
- Default configurations
|
|
205
|
+
"""
|
|
206
|
+
try:
|
|
207
|
+
response = await self._make_request("GET", "/runtimes")
|
|
208
|
+
|
|
209
|
+
runtimes = response if isinstance(response, list) else response.get("runtimes", [])
|
|
210
|
+
|
|
211
|
+
return self._format_list_response(
|
|
212
|
+
items=runtimes,
|
|
213
|
+
title="Available Runtime Configurations",
|
|
214
|
+
key_fields=["type", "version", "resource_limits"],
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
except Exception as e:
|
|
218
|
+
return f"Error listing runtime configurations: {str(e)}"
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Knowledge Context Tools - Fetch organizational knowledge for task planning
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
from typing import Optional, List
|
|
7
|
+
import structlog
|
|
8
|
+
import httpx
|
|
9
|
+
from control_plane_api.app.lib.planning_tools.base import BasePlanningTools
|
|
10
|
+
|
|
11
|
+
logger = structlog.get_logger()
|
|
12
|
+
|
|
13
|
+
KNOWLEDGE_API_BASE_URL = os.environ.get("KUBIYA_API_BASE", "https://api.kubiya.ai")
|
|
14
|
+
ORCHESTRATOR_API_BASE_URL = os.environ.get("ORCHESTRATOR_API_BASE", "https://orchestrator.kubiya.ai")
|
|
15
|
+
|
|
16
|
+
class KnowledgeContextTools(BasePlanningTools):
|
|
17
|
+
"""
|
|
18
|
+
Tools for fetching organizational knowledge and documentation
|
|
19
|
+
|
|
20
|
+
Provides methods to:
|
|
21
|
+
- Search manual knowledge base (user-entered private docs)
|
|
22
|
+
- Query organizational knowledge (Slack, Confluence, GitHub, etc.)
|
|
23
|
+
- Get relevant documentation
|
|
24
|
+
- Query best practices and guidelines
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(
|
|
28
|
+
self,
|
|
29
|
+
db=None,
|
|
30
|
+
organization_id: Optional[str] = None,
|
|
31
|
+
api_token: Optional[str] = None,
|
|
32
|
+
api_base_url: str = f"{KNOWLEDGE_API_BASE_URL}/api/v1",
|
|
33
|
+
orchestrator_base_url: str = ORCHESTRATOR_API_BASE_URL
|
|
34
|
+
):
|
|
35
|
+
super().__init__(db=db, organization_id=organization_id)
|
|
36
|
+
self.name = "knowledge_context_tools"
|
|
37
|
+
self.api_token = api_token
|
|
38
|
+
self.api_base_url = api_base_url.rstrip("/")
|
|
39
|
+
self.orchestrator_base_url = orchestrator_base_url.rstrip("/")
|
|
40
|
+
|
|
41
|
+
async def get_all_knowledge(self) -> List[dict]:
|
|
42
|
+
"""
|
|
43
|
+
Get all organizational knowledge and documentation
|
|
44
|
+
|
|
45
|
+
Endpoint: GET /api/v1/knowledge
|
|
46
|
+
Returns all knowledge items for the organization
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
List of all knowledge items with complete data
|
|
50
|
+
"""
|
|
51
|
+
if not self.api_token:
|
|
52
|
+
logger.warning("knowledge_api_token_not_provided")
|
|
53
|
+
return []
|
|
54
|
+
|
|
55
|
+
try:
|
|
56
|
+
headers = {
|
|
57
|
+
"Authorization": f"Bearer {self.api_token}",
|
|
58
|
+
"Content-Type": "application/json"
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async with httpx.AsyncClient(timeout=30.0) as client:
|
|
62
|
+
response = await client.get(
|
|
63
|
+
f"{self.api_base_url}/knowledge",
|
|
64
|
+
headers=headers
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
if response.status_code == 200:
|
|
68
|
+
data = response.json()
|
|
69
|
+
knowledge_items = data if isinstance(data, list) else data.get("data", [])
|
|
70
|
+
|
|
71
|
+
logger.info(
|
|
72
|
+
"knowledge_fetch_success",
|
|
73
|
+
count=len(knowledge_items)
|
|
74
|
+
)
|
|
75
|
+
return knowledge_items
|
|
76
|
+
else:
|
|
77
|
+
logger.error(
|
|
78
|
+
"knowledge_fetch_failed",
|
|
79
|
+
status_code=response.status_code,
|
|
80
|
+
error=response.text
|
|
81
|
+
)
|
|
82
|
+
return []
|
|
83
|
+
|
|
84
|
+
except Exception as e:
|
|
85
|
+
logger.error("knowledge_fetch_error", error=str(e))
|
|
86
|
+
return []
|
|
87
|
+
|
|
88
|
+
async def query_knowledge(self, query: str) -> List[str]:
|
|
89
|
+
"""
|
|
90
|
+
Query the knowledge base with a specific question or search term
|
|
91
|
+
|
|
92
|
+
Endpoint: POST /api/v1/knowledge/query
|
|
93
|
+
Searches through organizational knowledge and returns relevant results
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
query: Search query or question (e.g., "how to deploy to AWS?", "raz==superman ? omer==?")
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
List of relevant knowledge items/answers as strings
|
|
100
|
+
"""
|
|
101
|
+
if not self.api_token:
|
|
102
|
+
logger.warning("knowledge_api_token_not_provided")
|
|
103
|
+
return []
|
|
104
|
+
|
|
105
|
+
try:
|
|
106
|
+
headers = {
|
|
107
|
+
"Authorization": f"Bearer {self.api_token}",
|
|
108
|
+
"Content-Type": "application/json"
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
payload = {"query": query}
|
|
112
|
+
|
|
113
|
+
async with httpx.AsyncClient(timeout=30.0) as client:
|
|
114
|
+
response = await client.post(
|
|
115
|
+
f"{self.api_base_url}/knowledge/query",
|
|
116
|
+
headers=headers,
|
|
117
|
+
json=payload
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
if response.status_code == 200:
|
|
121
|
+
data = response.json()
|
|
122
|
+
# API returns a list of strings
|
|
123
|
+
results = data if isinstance(data, list) else []
|
|
124
|
+
|
|
125
|
+
logger.info(
|
|
126
|
+
"knowledge_query_success",
|
|
127
|
+
query=query,
|
|
128
|
+
results_count=len(results)
|
|
129
|
+
)
|
|
130
|
+
return results
|
|
131
|
+
else:
|
|
132
|
+
logger.error(
|
|
133
|
+
"knowledge_query_failed",
|
|
134
|
+
query=query,
|
|
135
|
+
status_code=response.status_code,
|
|
136
|
+
error=response.text
|
|
137
|
+
)
|
|
138
|
+
return []
|
|
139
|
+
|
|
140
|
+
except Exception as e:
|
|
141
|
+
logger.error("knowledge_query_error", query=query, error=str(e))
|
|
142
|
+
return []
|
|
143
|
+
|
|
144
|
+
async def query_organizational_knowledge(self, query: str, limit: int = 5) -> List[dict]:
|
|
145
|
+
"""
|
|
146
|
+
Query organizational knowledge from integrated sources (Slack, Confluence, GitHub, etc.)
|
|
147
|
+
|
|
148
|
+
Endpoint: POST https://orchestrator.kubiya.ai/api/query
|
|
149
|
+
Searches through Slack messages, Confluence pages, GitHub discussions, and other integrated sources
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
query: Search query or question (e.g., "I seems that version 0.3.37 is broken")
|
|
153
|
+
limit: Maximum number of results to return (default: 5)
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
List of relevant knowledge items from organizational sources
|
|
157
|
+
"""
|
|
158
|
+
if not self.api_token:
|
|
159
|
+
logger.warning("orchestrator_api_token_not_provided")
|
|
160
|
+
return []
|
|
161
|
+
|
|
162
|
+
try:
|
|
163
|
+
headers = {
|
|
164
|
+
"Authorization": f"Bearer {self.api_token}",
|
|
165
|
+
"Content-Type": "application/json",
|
|
166
|
+
"Accept": "application/json"
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
payload = {
|
|
170
|
+
"query": query,
|
|
171
|
+
"limit": limit
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
async with httpx.AsyncClient(timeout=30.0) as client:
|
|
175
|
+
response = await client.post(
|
|
176
|
+
f"{self.orchestrator_base_url}/api/query",
|
|
177
|
+
headers=headers,
|
|
178
|
+
json=payload
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
if response.status_code == 200:
|
|
182
|
+
data = response.json()
|
|
183
|
+
# API returns results as a list or dict with results key
|
|
184
|
+
results = data if isinstance(data, list) else data.get("results", data.get("data", []))
|
|
185
|
+
|
|
186
|
+
logger.info(
|
|
187
|
+
"organizational_knowledge_query_success",
|
|
188
|
+
query=query,
|
|
189
|
+
results_count=len(results) if isinstance(results, list) else 0
|
|
190
|
+
)
|
|
191
|
+
return results if isinstance(results, list) else []
|
|
192
|
+
else:
|
|
193
|
+
logger.error(
|
|
194
|
+
"organizational_knowledge_query_failed",
|
|
195
|
+
query=query,
|
|
196
|
+
status_code=response.status_code,
|
|
197
|
+
error=response.text
|
|
198
|
+
)
|
|
199
|
+
return []
|
|
200
|
+
|
|
201
|
+
except Exception as e:
|
|
202
|
+
logger.error("organizational_knowledge_query_error", query=query, error=str(e))
|
|
203
|
+
return []
|
|
204
|
+
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pydantic models for planning tool responses
|
|
3
|
+
|
|
4
|
+
These models ensure type safety and consistent data structures
|
|
5
|
+
when tools return information to the planning agent.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from pydantic import BaseModel, Field
|
|
9
|
+
from typing import List, Optional, Dict, Any
|
|
10
|
+
from datetime import datetime
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class AgentModel(BaseModel):
|
|
14
|
+
"""Agent information model with full context for planning"""
|
|
15
|
+
id: str
|
|
16
|
+
name: str
|
|
17
|
+
model_id: Optional[str] = Field(default="default")
|
|
18
|
+
description: Optional[str] = None
|
|
19
|
+
status: str
|
|
20
|
+
capabilities: Optional[List[str]] = None
|
|
21
|
+
configuration: Dict[str, Any] = Field(default_factory=dict)
|
|
22
|
+
llm_config: Dict[str, Any] = Field(default_factory=dict)
|
|
23
|
+
runtime: Optional[str] = None
|
|
24
|
+
team_id: Optional[str] = None
|
|
25
|
+
skills: List[Dict[str, Any]] = Field(default_factory=list) # Full skill details
|
|
26
|
+
skill_ids: List[str] = Field(default_factory=list)
|
|
27
|
+
projects: List[Dict[str, Any]] = Field(default_factory=list)
|
|
28
|
+
environments: List[Dict[str, Any]] = Field(default_factory=list)
|
|
29
|
+
execution_environment: Optional[Dict[str, Any]] = None # env_vars, secrets, integration_ids
|
|
30
|
+
created_at: Optional[datetime] = None
|
|
31
|
+
updated_at: Optional[datetime] = None
|
|
32
|
+
last_active_at: Optional[datetime] = None
|
|
33
|
+
error_message: Optional[str] = None
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class TeamMemberModel(BaseModel):
|
|
37
|
+
"""Team member information model"""
|
|
38
|
+
id: str
|
|
39
|
+
name: str
|
|
40
|
+
model_id: str = Field(default="default")
|
|
41
|
+
description: Optional[str] = None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class TeamModel(BaseModel):
|
|
45
|
+
"""Team information model"""
|
|
46
|
+
id: str
|
|
47
|
+
name: str
|
|
48
|
+
description: Optional[str] = None
|
|
49
|
+
status: str
|
|
50
|
+
agent_count: int = 0
|
|
51
|
+
agents: Optional[List[TeamMemberModel]] = None
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class EnvironmentModel(BaseModel):
|
|
55
|
+
"""Environment information model"""
|
|
56
|
+
id: str
|
|
57
|
+
name: str
|
|
58
|
+
display_name: Optional[str] = None
|
|
59
|
+
description: Optional[str] = None
|
|
60
|
+
status: str
|
|
61
|
+
tags: List[str] = Field(default_factory=list)
|
|
62
|
+
settings: Dict[str, Any] = Field(default_factory=dict)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class WorkerQueueModel(BaseModel):
|
|
66
|
+
"""Worker queue information model"""
|
|
67
|
+
id: str
|
|
68
|
+
name: str
|
|
69
|
+
display_name: Optional[str] = None
|
|
70
|
+
environment_id: Optional[str] = None
|
|
71
|
+
active_workers: int = 0
|
|
72
|
+
status: str
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class ExecutionHistoryModel(BaseModel):
|
|
76
|
+
"""Execution history summary model"""
|
|
77
|
+
entity_id: str
|
|
78
|
+
entity_type: str # "agent" or "team"
|
|
79
|
+
total_executions: int
|
|
80
|
+
completed: int
|
|
81
|
+
failed: int
|
|
82
|
+
success_rate: float
|
|
83
|
+
recent_executions: List[Dict[str, Any]] = Field(default_factory=list)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class SkillModel(BaseModel):
|
|
87
|
+
"""Skill/tool information model"""
|
|
88
|
+
id: str
|
|
89
|
+
name: str
|
|
90
|
+
skill_type: str
|
|
91
|
+
description: Optional[str] = None
|
|
92
|
+
enabled: bool = True
|
|
93
|
+
configuration: Dict[str, Any] = Field(default_factory=dict)
|