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,410 @@
|
|
|
1
|
+
"""
|
|
2
|
+
System prompt enhancement framework for runtime-agnostic prompt modifications.
|
|
3
|
+
|
|
4
|
+
This module provides a flexible system for enhancing agent system prompts with
|
|
5
|
+
layered enhancements that can be applied selectively based on runtime type.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from abc import ABC, abstractmethod
|
|
9
|
+
from enum import Enum
|
|
10
|
+
from typing import Optional, List
|
|
11
|
+
import structlog
|
|
12
|
+
import os
|
|
13
|
+
|
|
14
|
+
logger = structlog.get_logger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class RuntimeType(Enum):
|
|
18
|
+
"""Runtime types for prompt enhancements."""
|
|
19
|
+
CLAUDE_CODE = "claude_code"
|
|
20
|
+
AGNO = "agno"
|
|
21
|
+
ALL = "all" # Apply to all runtimes
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class SystemPromptEnhancement(ABC):
|
|
25
|
+
"""Base class for system prompt enhancements."""
|
|
26
|
+
|
|
27
|
+
def __init__(self, runtime_types: Optional[List[RuntimeType]] = None):
|
|
28
|
+
"""
|
|
29
|
+
Initialize enhancement.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
runtime_types: List of runtimes this enhancement applies to.
|
|
33
|
+
If None, applies to all runtimes.
|
|
34
|
+
"""
|
|
35
|
+
self.runtime_types = runtime_types or [RuntimeType.ALL]
|
|
36
|
+
|
|
37
|
+
def applies_to_runtime(self, runtime_type: str) -> bool:
|
|
38
|
+
"""
|
|
39
|
+
Check if this enhancement applies to the given runtime.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
runtime_type: The runtime type string (e.g., "claude_code", "agno")
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
True if enhancement applies to this runtime, False otherwise
|
|
46
|
+
"""
|
|
47
|
+
if RuntimeType.ALL in self.runtime_types:
|
|
48
|
+
return True
|
|
49
|
+
return any(rt.value == runtime_type for rt in self.runtime_types)
|
|
50
|
+
|
|
51
|
+
@abstractmethod
|
|
52
|
+
def enhance(self, base_prompt: Optional[str]) -> str:
|
|
53
|
+
"""
|
|
54
|
+
Enhance the base system prompt.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
base_prompt: The base system prompt (may be None or empty)
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
Enhanced system prompt
|
|
61
|
+
"""
|
|
62
|
+
pass
|
|
63
|
+
|
|
64
|
+
@property
|
|
65
|
+
@abstractmethod
|
|
66
|
+
def name(self) -> str:
|
|
67
|
+
"""Name of this enhancement for logging."""
|
|
68
|
+
pass
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class TodoListEnhancement(SystemPromptEnhancement):
|
|
72
|
+
"""Inject TODO list instructions for multi-step tasks."""
|
|
73
|
+
|
|
74
|
+
def __init__(self):
|
|
75
|
+
# Only apply to claude_code runtime
|
|
76
|
+
super().__init__(runtime_types=[RuntimeType.CLAUDE_CODE])
|
|
77
|
+
|
|
78
|
+
@property
|
|
79
|
+
def name(self) -> str:
|
|
80
|
+
return "todo_list_instruction"
|
|
81
|
+
|
|
82
|
+
def enhance(self, base_prompt: Optional[str]) -> str:
|
|
83
|
+
"""
|
|
84
|
+
Add TODO list instruction to the prompt.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
base_prompt: The base system prompt
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
Enhanced prompt with TODO list instructions
|
|
91
|
+
"""
|
|
92
|
+
enhancement = (
|
|
93
|
+
"\n\n"
|
|
94
|
+
"## Task Management\n"
|
|
95
|
+
"Where suitable for multi step tasks, always create a TODO list "
|
|
96
|
+
"to decouple the task into subtasks. This helps you track progress "
|
|
97
|
+
"and ensures no steps are missed."
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
if base_prompt:
|
|
101
|
+
return base_prompt + enhancement
|
|
102
|
+
else:
|
|
103
|
+
return enhancement.lstrip()
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class UserContextEnhancement(SystemPromptEnhancement):
|
|
107
|
+
"""Inject user context (name, email, etc.) into the system prompt for personalization."""
|
|
108
|
+
|
|
109
|
+
def __init__(self, user_metadata: Optional[dict] = None, additional_context: Optional[dict] = None):
|
|
110
|
+
"""
|
|
111
|
+
Initialize user context enhancement.
|
|
112
|
+
|
|
113
|
+
Args:
|
|
114
|
+
user_metadata: User metadata dict containing user_id, user_name, user_email, user_avatar
|
|
115
|
+
additional_context: Additional contextual information to inject (custom key-value pairs)
|
|
116
|
+
"""
|
|
117
|
+
# Apply to all runtimes
|
|
118
|
+
super().__init__(runtime_types=[RuntimeType.ALL])
|
|
119
|
+
self.user_metadata = user_metadata or {}
|
|
120
|
+
self.additional_context = additional_context or {}
|
|
121
|
+
|
|
122
|
+
@property
|
|
123
|
+
def name(self) -> str:
|
|
124
|
+
return "user_context"
|
|
125
|
+
|
|
126
|
+
def enhance(self, base_prompt: Optional[str]) -> str:
|
|
127
|
+
"""
|
|
128
|
+
Add user context to the system prompt.
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
base_prompt: The base system prompt
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
Enhanced prompt with user context
|
|
135
|
+
"""
|
|
136
|
+
# Build context sections
|
|
137
|
+
context_parts = []
|
|
138
|
+
|
|
139
|
+
# Add user information if available
|
|
140
|
+
user_name = self.user_metadata.get("user_name")
|
|
141
|
+
user_email = self.user_metadata.get("user_email")
|
|
142
|
+
user_id = self.user_metadata.get("user_id")
|
|
143
|
+
|
|
144
|
+
if user_name or user_email or user_id:
|
|
145
|
+
user_info_lines = ["## User Context"]
|
|
146
|
+
if user_name:
|
|
147
|
+
user_info_lines.append(f"- **User Name**: {user_name}")
|
|
148
|
+
if user_email:
|
|
149
|
+
user_info_lines.append(f"- **User Email**: {user_email}")
|
|
150
|
+
if user_id:
|
|
151
|
+
user_info_lines.append(f"- **User ID**: {user_id}")
|
|
152
|
+
|
|
153
|
+
context_parts.append("\n".join(user_info_lines))
|
|
154
|
+
|
|
155
|
+
# Add additional context if provided
|
|
156
|
+
if self.additional_context:
|
|
157
|
+
additional_lines = ["## Additional Context"]
|
|
158
|
+
for key, value in self.additional_context.items():
|
|
159
|
+
# Format key nicely (snake_case -> Title Case)
|
|
160
|
+
formatted_key = key.replace("_", " ").title()
|
|
161
|
+
additional_lines.append(f"- **{formatted_key}**: {value}")
|
|
162
|
+
|
|
163
|
+
context_parts.append("\n".join(additional_lines))
|
|
164
|
+
|
|
165
|
+
# If no context to add, return base prompt unchanged
|
|
166
|
+
if not context_parts:
|
|
167
|
+
return base_prompt or ""
|
|
168
|
+
|
|
169
|
+
# Build the enhancement
|
|
170
|
+
enhancement = "\n\n" + "\n\n".join(context_parts)
|
|
171
|
+
|
|
172
|
+
if base_prompt:
|
|
173
|
+
return base_prompt + enhancement
|
|
174
|
+
else:
|
|
175
|
+
return enhancement.lstrip()
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class MemoryToolsEnhancement(SystemPromptEnhancement):
|
|
179
|
+
"""Inject memory tools usage instructions for persistent knowledge management."""
|
|
180
|
+
|
|
181
|
+
def __init__(self):
|
|
182
|
+
# Apply to all runtimes since memory tools are available everywhere
|
|
183
|
+
super().__init__(runtime_types=[RuntimeType.ALL])
|
|
184
|
+
|
|
185
|
+
@property
|
|
186
|
+
def name(self) -> str:
|
|
187
|
+
return "memory_tools_instruction"
|
|
188
|
+
|
|
189
|
+
def enhance(self, base_prompt: Optional[str]) -> str:
|
|
190
|
+
"""
|
|
191
|
+
Add memory tools usage instructions to the prompt.
|
|
192
|
+
|
|
193
|
+
Args:
|
|
194
|
+
base_prompt: The base system prompt
|
|
195
|
+
|
|
196
|
+
Returns:
|
|
197
|
+
Enhanced prompt with memory tools instructions
|
|
198
|
+
"""
|
|
199
|
+
enhancement = (
|
|
200
|
+
"\n\n"
|
|
201
|
+
"## Memory & Knowledge Management\n\n"
|
|
202
|
+
"You have access to powerful memory and knowledge management tools:\n\n"
|
|
203
|
+
"### Memory Tools (recall_memory, store_memory)\n"
|
|
204
|
+
"- **ALWAYS use recall_memory** at the start of conversations to retrieve relevant context\n"
|
|
205
|
+
"- **ALWAYS use store_memory** to save important information for future reference\n"
|
|
206
|
+
"- Store user preferences, decisions, configurations, and important facts\n"
|
|
207
|
+
"- Memory persists across conversations and sessions\n\n"
|
|
208
|
+
"### Knowledge Tools (ingest_knowledge, process_dataset)\n"
|
|
209
|
+
"- Use ingest_knowledge to add documentation, guides, code snippets\n"
|
|
210
|
+
"- Use process_dataset to make ingested knowledge searchable\n"
|
|
211
|
+
"- Knowledge is organized in datasets for semantic search\n\n"
|
|
212
|
+
"### Best Practices\n"
|
|
213
|
+
"1. **Recall First**: Always check memory before answering questions\n"
|
|
214
|
+
"2. **Store Proactively**: Save important context immediately, don't wait\n"
|
|
215
|
+
"3. **Use Natural Language**: Memory search is semantic, use descriptive queries\n"
|
|
216
|
+
"4. **Categorize**: Use metadata to organize memories by type/priority\n"
|
|
217
|
+
"5. **Be Specific**: Store clear, specific information for better recall\n\n"
|
|
218
|
+
"### Example Workflow\n"
|
|
219
|
+
"```\n"
|
|
220
|
+
"# Start of conversation\n"
|
|
221
|
+
"recall_memory(\"user preferences and previous context\")\n\n"
|
|
222
|
+
"# During work\n"
|
|
223
|
+
"store_memory(\"User prefers Python over JavaScript\", metadata={\"type\": \"preference\"})\n"
|
|
224
|
+
"store_memory(\"Production DB is read-only on weekends\", metadata={\"type\": \"policy\"})\n\n"
|
|
225
|
+
"# Before answering\n"
|
|
226
|
+
"recall_memory(\"relevant technical information about kubernetes\")\n"
|
|
227
|
+
"```\n\n"
|
|
228
|
+
"**IMPORTANT**: Memory tools are essential for providing context-aware, personalized assistance. "
|
|
229
|
+
"Always use them proactively, not just when explicitly asked."
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
if base_prompt:
|
|
233
|
+
return base_prompt + enhancement
|
|
234
|
+
else:
|
|
235
|
+
return enhancement.lstrip()
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
class SystemPromptBuilder:
|
|
239
|
+
"""
|
|
240
|
+
Builder for system prompts with layered enhancements.
|
|
241
|
+
|
|
242
|
+
This class manages a collection of prompt enhancements and applies
|
|
243
|
+
them in order to build the final system prompt.
|
|
244
|
+
|
|
245
|
+
Example:
|
|
246
|
+
>>> builder = SystemPromptBuilder()
|
|
247
|
+
>>> builder.add_enhancement(TodoListEnhancement())
|
|
248
|
+
>>> enhanced = builder.build("You are helpful.", "claude_code")
|
|
249
|
+
"""
|
|
250
|
+
|
|
251
|
+
def __init__(self):
|
|
252
|
+
self._enhancements: List[SystemPromptEnhancement] = []
|
|
253
|
+
self._enabled = True
|
|
254
|
+
|
|
255
|
+
def add_enhancement(self, enhancement: SystemPromptEnhancement) -> "SystemPromptBuilder":
|
|
256
|
+
"""
|
|
257
|
+
Add a prompt enhancement to the builder.
|
|
258
|
+
|
|
259
|
+
Args:
|
|
260
|
+
enhancement: The enhancement to add
|
|
261
|
+
|
|
262
|
+
Returns:
|
|
263
|
+
Self for method chaining
|
|
264
|
+
"""
|
|
265
|
+
self._enhancements.append(enhancement)
|
|
266
|
+
logger.debug(
|
|
267
|
+
"system_prompt_enhancement_added",
|
|
268
|
+
enhancement=enhancement.name,
|
|
269
|
+
total_enhancements=len(self._enhancements),
|
|
270
|
+
)
|
|
271
|
+
return self
|
|
272
|
+
|
|
273
|
+
def remove_enhancement(self, name: str) -> "SystemPromptBuilder":
|
|
274
|
+
"""
|
|
275
|
+
Remove an enhancement by name.
|
|
276
|
+
|
|
277
|
+
Args:
|
|
278
|
+
name: Name of the enhancement to remove
|
|
279
|
+
|
|
280
|
+
Returns:
|
|
281
|
+
Self for method chaining
|
|
282
|
+
"""
|
|
283
|
+
self._enhancements = [
|
|
284
|
+
e for e in self._enhancements if e.name != name
|
|
285
|
+
]
|
|
286
|
+
return self
|
|
287
|
+
|
|
288
|
+
def disable(self) -> "SystemPromptBuilder":
|
|
289
|
+
"""
|
|
290
|
+
Disable all enhancements (for testing/debugging).
|
|
291
|
+
|
|
292
|
+
Returns:
|
|
293
|
+
Self for method chaining
|
|
294
|
+
"""
|
|
295
|
+
self._enabled = False
|
|
296
|
+
return self
|
|
297
|
+
|
|
298
|
+
def enable(self) -> "SystemPromptBuilder":
|
|
299
|
+
"""
|
|
300
|
+
Enable enhancements.
|
|
301
|
+
|
|
302
|
+
Returns:
|
|
303
|
+
Self for method chaining
|
|
304
|
+
"""
|
|
305
|
+
self._enabled = True
|
|
306
|
+
return self
|
|
307
|
+
|
|
308
|
+
def build(
|
|
309
|
+
self,
|
|
310
|
+
base_prompt: Optional[str],
|
|
311
|
+
runtime_type: str,
|
|
312
|
+
) -> str:
|
|
313
|
+
"""
|
|
314
|
+
Build the final system prompt with all applicable enhancements.
|
|
315
|
+
|
|
316
|
+
Args:
|
|
317
|
+
base_prompt: The base system prompt from agent config
|
|
318
|
+
runtime_type: The runtime type (claude_code, agno, etc.)
|
|
319
|
+
|
|
320
|
+
Returns:
|
|
321
|
+
Enhanced system prompt
|
|
322
|
+
"""
|
|
323
|
+
if not self._enabled:
|
|
324
|
+
logger.debug("system_prompt_enhancements_disabled")
|
|
325
|
+
return base_prompt or ""
|
|
326
|
+
|
|
327
|
+
# Start with base prompt
|
|
328
|
+
enhanced_prompt = base_prompt or ""
|
|
329
|
+
|
|
330
|
+
# Apply each enhancement that applies to this runtime
|
|
331
|
+
applied_enhancements = []
|
|
332
|
+
for enhancement in self._enhancements:
|
|
333
|
+
if enhancement.applies_to_runtime(runtime_type):
|
|
334
|
+
try:
|
|
335
|
+
enhanced_prompt = enhancement.enhance(enhanced_prompt)
|
|
336
|
+
applied_enhancements.append(enhancement.name)
|
|
337
|
+
except Exception as e:
|
|
338
|
+
logger.error(
|
|
339
|
+
"system_prompt_enhancement_failed",
|
|
340
|
+
enhancement=enhancement.name,
|
|
341
|
+
error=str(e),
|
|
342
|
+
exc_info=True,
|
|
343
|
+
)
|
|
344
|
+
# Continue with other enhancements
|
|
345
|
+
|
|
346
|
+
if applied_enhancements:
|
|
347
|
+
logger.info(
|
|
348
|
+
"system_prompt_enhancements_applied",
|
|
349
|
+
runtime_type=runtime_type,
|
|
350
|
+
enhancements=applied_enhancements,
|
|
351
|
+
original_length=len(base_prompt or ""),
|
|
352
|
+
enhanced_length=len(enhanced_prompt),
|
|
353
|
+
)
|
|
354
|
+
|
|
355
|
+
return enhanced_prompt
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
def create_default_prompt_builder(
|
|
359
|
+
user_metadata: Optional[dict] = None,
|
|
360
|
+
additional_context: Optional[dict] = None,
|
|
361
|
+
) -> SystemPromptBuilder:
|
|
362
|
+
"""
|
|
363
|
+
Create a system prompt builder with default enhancements.
|
|
364
|
+
|
|
365
|
+
Args:
|
|
366
|
+
user_metadata: User metadata dict containing user_id, user_name, user_email, user_avatar
|
|
367
|
+
additional_context: Additional contextual information to inject (custom key-value pairs)
|
|
368
|
+
|
|
369
|
+
Respects environment variables:
|
|
370
|
+
- DISABLE_SYSTEM_PROMPT_ENHANCEMENTS: Set to "true" to disable all enhancements
|
|
371
|
+
- ENABLE_USER_CONTEXT_ENHANCEMENT: Set to "false" to disable user context enhancement (default: true)
|
|
372
|
+
- ENABLE_TODO_LIST_ENHANCEMENT: Set to "false" to disable TODO list enhancement
|
|
373
|
+
- ENABLE_MEMORY_TOOLS_ENHANCEMENT: Set to "false" to disable memory tools enhancement
|
|
374
|
+
|
|
375
|
+
Returns:
|
|
376
|
+
SystemPromptBuilder with standard enhancements configured
|
|
377
|
+
"""
|
|
378
|
+
builder = SystemPromptBuilder()
|
|
379
|
+
|
|
380
|
+
# Check if enhancements are globally disabled
|
|
381
|
+
if os.getenv("DISABLE_SYSTEM_PROMPT_ENHANCEMENTS", "false").lower() == "true":
|
|
382
|
+
logger.info("system_prompt_enhancements_disabled_by_config")
|
|
383
|
+
return builder.disable()
|
|
384
|
+
|
|
385
|
+
# Add user context enhancement FIRST (enabled by default for all runtimes)
|
|
386
|
+
# This ensures user context appears at the top of the system prompt
|
|
387
|
+
if os.getenv("ENABLE_USER_CONTEXT_ENHANCEMENT", "true").lower() == "true":
|
|
388
|
+
if user_metadata or additional_context:
|
|
389
|
+
builder.add_enhancement(UserContextEnhancement(user_metadata, additional_context))
|
|
390
|
+
logger.debug(
|
|
391
|
+
"user_context_enhancement_enabled",
|
|
392
|
+
has_user_metadata=bool(user_metadata),
|
|
393
|
+
has_additional_context=bool(additional_context),
|
|
394
|
+
)
|
|
395
|
+
|
|
396
|
+
# Add memory tools enhancement (enabled by default for all runtimes)
|
|
397
|
+
if os.getenv("ENABLE_MEMORY_TOOLS_ENHANCEMENT", "true").lower() == "true":
|
|
398
|
+
builder.add_enhancement(MemoryToolsEnhancement())
|
|
399
|
+
logger.debug("memory_tools_enhancement_enabled")
|
|
400
|
+
|
|
401
|
+
# Add TODO list enhancement for claude_code (enabled by default)
|
|
402
|
+
if os.getenv("ENABLE_TODO_LIST_ENHANCEMENT", "true").lower() == "true":
|
|
403
|
+
builder.add_enhancement(TodoListEnhancement())
|
|
404
|
+
logger.debug("todo_list_enhancement_enabled")
|
|
405
|
+
|
|
406
|
+
# Future enhancements can be added here:
|
|
407
|
+
# builder.add_enhancement(SecurityGuidelinesEnhancement())
|
|
408
|
+
# builder.add_enhancement(CodeStyleEnhancement())
|
|
409
|
+
|
|
410
|
+
return builder
|