igel-qe-core 1.0.5 → 1.0.7
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.
- package/dist/cli/index.js +638 -54
- package/dist/cli/platform.js +0 -12
- package/dist/mcp/server.js +183 -8
- package/package.json +4 -4
- package/src/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/automation_design_agent.cpython-311.pyc +0 -0
- package/{knowledge_base → src}/agents/__pycache__/automation_design_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/code_intelligence_agent.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/code_intelligence_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/confidence_agent.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/confidence_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/execution_validation_agent.cpython-311.pyc +0 -0
- package/{knowledge_base → src}/agents/__pycache__/execution_validation_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/framework_analyzer_agent.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/framework_analyzer_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/intent_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/regression_agent.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/regression_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/requirement_agent.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/requirement_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/scenario_agent.cpython-311.pyc +0 -0
- package/{knowledge_base → src}/agents/__pycache__/scenario_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/script_generator_agent.cpython-311.pyc +0 -0
- package/{knowledge_base → src}/agents/__pycache__/script_generator_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/testcase_agent.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/testcase_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/validation_agent.cpython-311.pyc +0 -0
- package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/workflow_engine.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/workflow_engine.cpython-313.pyc +0 -0
- package/{knowledge_base → src}/agents/automation_design_agent.py +13 -16
- package/{knowledge_base → src}/agents/code_intelligence_agent.py +2 -2
- package/src/agents/confidence_agent.py +114 -0
- package/{knowledge_base → src}/agents/execution_validation_agent.py +1 -1
- package/{knowledge_base → src}/agents/feedback_agent.py +36 -7
- package/src/agents/framework_analyzer_agent.py +43 -0
- package/{knowledge_base → src}/agents/fusion_agent.py +3 -3
- package/{knowledge_base → src}/agents/graph.py +10 -10
- package/{knowledge_base → src}/agents/healing_agent.py +4 -4
- package/src/agents/intent_agent.py +30 -0
- package/src/agents/internal/__init__.py +3 -0
- package/src/agents/internal/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/agents/internal/__pycache__/approval_manager.cpython-313.pyc +0 -0
- package/src/agents/internal/__pycache__/question_engine.cpython-313.pyc +0 -0
- package/src/agents/internal/approval_manager.py +111 -0
- package/src/agents/internal/question_engine.py +111 -0
- package/src/agents/internal/workflow_engine.py +28 -0
- package/{knowledge_base → src}/agents/kg_agent.py +3 -3
- package/{knowledge_base → src}/agents/memory_agent.py +4 -4
- package/src/agents/orchestrator/__init__.py +3 -0
- package/src/agents/orchestrator/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/agents/orchestrator/__pycache__/orchestrator.cpython-313.pyc +0 -0
- package/src/agents/orchestrator/orchestrator.py +63 -0
- package/{knowledge_base → src}/agents/rca_agent.py +4 -4
- package/{knowledge_base → src}/agents/reflection_agent.py +1 -1
- package/{knowledge_base → src}/agents/regression_agent.py +2 -2
- package/src/agents/requirement_agent.py +97 -0
- package/{knowledge_base → src}/agents/retrieval_agent.py +2 -2
- package/{knowledge_base → src}/agents/scenario_agent.py +11 -17
- package/{knowledge_base → src}/agents/script_agent.py +6 -6
- package/{knowledge_base → src}/agents/script_generator_agent.py +12 -10
- package/{knowledge_base → src}/agents/temporal_agent.py +3 -3
- package/src/agents/testcase_agent.py +163 -0
- package/{knowledge_base → src}/agents/validation_agent.py +1 -1
- package/src/agents/workflow_engine.py +109 -0
- package/{knowledge_base → src}/alembic/README.md +4 -4
- package/{knowledge_base → src}/alembic/env.py +1 -1
- package/{knowledge_base → src}/alembic/script.py.mako +1 -1
- package/{knowledge_base → src}/api/middleware.py +3 -3
- package/{knowledge_base → src}/api/server.py +28 -28
- package/{knowledge_base → src}/chunking/chunker.py +3 -3
- package/src/cli/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/cli/__pycache__/workflow_cli.cpython-311.pyc +0 -0
- package/src/cli/__pycache__/workflow_cli.cpython-313.pyc +0 -0
- package/{knowledge_base → src}/cli/feedback_cli.py +10 -10
- package/{knowledge_base → src}/cli/generate.py +11 -11
- package/src/cli/index.ts +704 -0
- package/src/cli/platform.ts +147 -0
- package/src/cli/workflow_cli.py +930 -0
- package/{knowledge_base → src}/config/__init__.py +1 -1
- package/src/config/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/config/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/config/__pycache__/policy_config.cpython-311.pyc +0 -0
- package/src/config/__pycache__/policy_config.cpython-313.pyc +0 -0
- package/src/config/__pycache__/settings.cpython-311.pyc +0 -0
- package/{knowledge_base → src}/config/__pycache__/settings.cpython-313.pyc +0 -0
- package/src/config/policy_config.py +85 -0
- package/src/config/policy_rules.yaml +50 -0
- package/{knowledge_base → src}/config/settings.py +51 -6
- package/{knowledge_base → src}/connectors/__init__.py +1 -1
- package/src/connectors/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/connectors/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/connectors/__pycache__/base.cpython-311.pyc +0 -0
- package/src/connectors/__pycache__/jira_connector.cpython-311.pyc +0 -0
- package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-313.pyc +0 -0
- package/src/connectors/__pycache__/query_bridge.cpython-313.pyc +0 -0
- package/src/connectors/bitbucket_connector.py +334 -0
- package/{knowledge_base → src}/connectors/community_connector.py +6 -6
- package/{knowledge_base → src}/connectors/confluence_connector.py +4 -4
- package/{knowledge_base → src}/connectors/jira_connector.py +6 -6
- package/{knowledge_base → src}/connectors/kb_igel_connector.py +6 -6
- package/{knowledge_base → src}/connectors/query_bridge.py +11 -11
- package/{knowledge_base → src}/connectors/search_backends.py +1 -1
- package/{knowledge_base → src}/connectors/serviceNow_connector.py +2 -2
- package/{knowledge_base → src}/connectors/sync_scheduler.py +12 -10
- package/{knowledge_base → src}/connectors/teamcity_connector.py +2 -2
- package/{knowledge_base → src}/connectors/testRail_connector.py +2 -2
- package/{knowledge_base → src}/connectors/web_fetcher.py +1 -1
- package/src/connectors/xray_connector.py +337 -0
- package/{knowledge_base → src}/core/__init__.py +1 -1
- package/src/core/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/core/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/core/__pycache__/circuit_breaker.cpython-313.pyc +0 -0
- package/src/core/__pycache__/confidence.cpython-311.pyc +0 -0
- package/src/core/__pycache__/confidence.cpython-313.pyc +0 -0
- package/src/core/__pycache__/context_engine.cpython-311.pyc +0 -0
- package/src/core/__pycache__/context_engine.cpython-313.pyc +0 -0
- package/src/core/__pycache__/evidence_resolver.cpython-311.pyc +0 -0
- package/src/core/__pycache__/evidence_resolver.cpython-313.pyc +0 -0
- package/src/core/__pycache__/guardrails.cpython-311.pyc +0 -0
- package/src/core/__pycache__/guardrails.cpython-313.pyc +0 -0
- package/src/core/__pycache__/hooks.cpython-311.pyc +0 -0
- package/src/core/__pycache__/hooks.cpython-313.pyc +0 -0
- package/src/core/__pycache__/intent_service.cpython-313.pyc +0 -0
- package/src/core/__pycache__/llm_executor.cpython-311.pyc +0 -0
- package/src/core/__pycache__/llm_executor.cpython-313.pyc +0 -0
- package/src/core/__pycache__/model_router.cpython-311.pyc +0 -0
- package/src/core/__pycache__/model_router.cpython-313.pyc +0 -0
- package/src/core/__pycache__/orchestration_contracts.cpython-311.pyc +0 -0
- package/src/core/__pycache__/orchestration_contracts.cpython-313.pyc +0 -0
- package/src/core/__pycache__/precedence.cpython-311.pyc +0 -0
- package/src/core/__pycache__/precedence.cpython-313.pyc +0 -0
- package/src/core/__pycache__/prompt_builder.cpython-311.pyc +0 -0
- package/src/core/__pycache__/prompt_builder.cpython-313.pyc +0 -0
- package/src/core/__pycache__/prompt_policy_engine.cpython-311.pyc +0 -0
- package/src/core/__pycache__/prompt_policy_engine.cpython-313.pyc +0 -0
- package/{knowledge_base → src}/core/cache.py +2 -2
- package/{knowledge_base → src}/core/confidence.py +2 -2
- package/src/core/context_engine.py +138 -0
- package/src/core/evidence_resolver.py +72 -0
- package/src/core/guardrails.py +22 -0
- package/src/core/hooks.py +57 -0
- package/src/core/intent_service.py +74 -0
- package/src/core/llm_executor.py +138 -0
- package/{knowledge_base → src}/core/logging_setup.py +1 -1
- package/src/core/model_router.py +246 -0
- package/src/core/orchestration_contracts.py +66 -0
- package/src/core/persistence_engine.py +159 -0
- package/src/core/prompt_builder.py +49 -0
- package/src/core/prompt_policy_engine.py +35 -0
- package/src/core/traceability_engine.py +56 -0
- package/src/db/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/db/__pycache__/client.cpython-311.pyc +0 -0
- package/{knowledge_base → src}/db/__pycache__/client.cpython-313.pyc +0 -0
- package/src/db/__pycache__/igel_schema.cpython-311.pyc +0 -0
- package/{knowledge_base → src}/db/__pycache__/igel_schema.cpython-313.pyc +0 -0
- package/src/db/__pycache__/kg_introspect.cpython-311.pyc +0 -0
- package/src/db/__pycache__/kg_introspect.cpython-313.pyc +0 -0
- package/{knowledge_base → src}/db/client.py +1 -1
- package/{knowledge_base → src}/db/connector_sync.py +1 -1
- package/{knowledge_base → src}/db/feedback_schema.py +2 -2
- package/{knowledge_base → src}/db/igel_schema.py +28 -3
- package/{knowledge_base → src}/db/kg_introspect.py +1 -1
- package/src/db/migrations.py +237 -0
- package/{knowledge_base → src}/db/schema.py +6 -6
- package/{knowledge_base → src}/deploy/Dockerfile +3 -3
- package/{knowledge_base → src}/deploy/feedback_automation.sh +3 -3
- package/{knowledge_base → src}/deploy/firecrawl-docker.sh +4 -4
- package/{knowledge_base → src}/deploy/igel-testgen.service +2 -2
- package/{knowledge_base → src}/deploy/install_reranker.sh +1 -1
- package/{knowledge_base → src}/deploy/requirements.txt +1 -2
- package/{knowledge_base → src}/deploy/run_server.sh +1 -1
- package/{knowledge_base → src}/docs/TEST_GENERATION_GUIDE.md +15 -15
- package/src/embeddings/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/embeddings/__pycache__/azure_embedder.cpython-311.pyc +0 -0
- package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-313.pyc +0 -0
- package/{knowledge_base → src}/embeddings/azure_embedder.py +10 -1
- package/{knowledge_base → src}/eval/__init__.py +3 -3
- package/{knowledge_base → src}/eval/__main__.py +7 -7
- package/src/eval/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/eval/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/eval/__pycache__/baseline.cpython-311.pyc +0 -0
- package/src/eval/__pycache__/baseline.cpython-313.pyc +0 -0
- package/src/eval/__pycache__/harness.cpython-311.pyc +0 -0
- package/src/eval/__pycache__/harness.cpython-313.pyc +0 -0
- package/src/eval/__pycache__/scorers.cpython-311.pyc +0 -0
- package/src/eval/__pycache__/scorers.cpython-313.pyc +0 -0
- package/{knowledge_base → src}/eval/harness.py +6 -6
- package/{knowledge_base → src}/feedback/__init__.py +1 -1
- package/{knowledge_base → src}/feedback/analytics.py +1 -1
- package/{knowledge_base → src}/feedback/applier.py +4 -4
- package/{knowledge_base → src}/feedback/curator.py +2 -2
- package/{knowledge_base → src}/feedback/handler.py +1 -1
- package/src/generation/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/generation/__pycache__/input_classifier.cpython-313.pyc +0 -0
- package/src/generation/__pycache__/manual_tc_parser.cpython-313.pyc +0 -0
- package/src/generation/__pycache__/prompts.cpython-313.pyc +0 -0
- package/src/generation/__pycache__/test_generator.cpython-313.pyc +0 -0
- package/{knowledge_base → src}/generation/input_classifier.py +1 -1
- package/{knowledge_base → src}/generation/prompts.py +1 -1
- package/{knowledge_base → src}/generation/tc_transformer.py +10 -10
- package/{knowledge_base → src}/generation/test_generator.py +56 -10
- package/{knowledge_base → src}/graph_db/__init__.py +1 -1
- package/{knowledge_base → src}/graph_db/graphiti_client.py +2 -2
- package/{knowledge_base → src}/graph_db/kg_traversal.py +3 -3
- package/{knowledge_base → src}/graph_db/migrate_kg.py +4 -4
- package/{knowledge_base → src}/graph_db/neo4j_client.py +1 -1
- package/{knowledge_base → src}/graph_db/temporal_ingest.py +1 -1
- package/{knowledge_base → src}/ingestion/kg_extractor.py +6 -6
- package/{knowledge_base → src}/ingestion/web_ingest.py +6 -6
- package/src/intelligence/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/intelligence/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/intelligence/__pycache__/diff_analyzer.cpython-311.pyc +0 -0
- package/src/intelligence/__pycache__/diff_analyzer.cpython-313.pyc +0 -0
- package/src/intelligence/__pycache__/routing_engine.cpython-311.pyc +0 -0
- package/src/intelligence/__pycache__/routing_engine.cpython-313.pyc +0 -0
- package/src/intelligence/diff_analyzer.py +109 -0
- package/{knowledge_base → src}/intelligence/execution_ingest.py +3 -3
- package/src/intelligence/routing_engine.py +74 -0
- package/src/mcp/server.ts +384 -0
- package/src/memory/__init__.py +6 -0
- package/{knowledge_base → src}/memory/cognee_client.py +3 -3
- package/src/models/__pycache__/test_requirement.cpython-311.pyc +0 -0
- package/{knowledge_base → src}/models/__pycache__/test_requirement.cpython-313.pyc +0 -0
- package/{knowledge_base → src}/models/test_requirement.py +9 -7
- package/{knowledge_base → src}/parsers/csv_parser.py +1 -1
- package/{knowledge_base → src}/parsers/doc_parser.py +1 -1
- package/{knowledge_base → src}/parsers/html_parser.py +1 -1
- package/{knowledge_base → src}/parsers/pdf_parser.py +1 -1
- package/src/project/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/project/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/project/__pycache__/ai_folder.cpython-311.pyc +0 -0
- package/src/project/__pycache__/ai_folder.cpython-313.pyc +0 -0
- package/src/project/__pycache__/context_enricher.cpython-313.pyc +0 -0
- package/src/project/__pycache__/context_projection_builder.cpython-311.pyc +0 -0
- package/src/project/__pycache__/context_projection_builder.cpython-313.pyc +0 -0
- package/src/project/__pycache__/context_requirement_sync.cpython-311.pyc +0 -0
- package/src/project/__pycache__/context_requirement_sync.cpython-313.pyc +0 -0
- package/src/project/ai_folder.py +602 -0
- package/src/project/context_enricher.py +333 -0
- package/src/project/context_projection_builder.py +167 -0
- package/src/project/context_requirement_sync.py +205 -0
- package/src/project/init_check.py +214 -0
- package/src/prompts/__pycache__/prompt_loader.cpython-313.pyc +0 -0
- package/src/prompts/automation_design.md +12 -0
- package/src/prompts/policies/automation_generation_policy.md +11 -0
- package/src/prompts/policies/generation_instructions.md +24 -0
- package/src/prompts/policies/guardrails.md +6 -0
- package/src/prompts/policies/traceability_policy.md +9 -0
- package/src/prompts/prompt_loader.py +56 -0
- package/src/prompts/requirement_understanding.md +17 -0
- package/src/prompts/scenario_generator.md +17 -0
- package/src/prompts/script_generator.md +13 -0
- package/src/prompts/test_case_generator.md +23 -0
- package/src/retrieval/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/retrieval/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/retrieval/__pycache__/knowledge_graph.cpython-311.pyc +0 -0
- package/src/retrieval/__pycache__/knowledge_graph.cpython-313.pyc +0 -0
- package/src/retrieval/__pycache__/retriever.cpython-311.pyc +0 -0
- package/src/retrieval/__pycache__/retriever.cpython-313.pyc +0 -0
- package/src/retrieval/__pycache__/unified_query.cpython-313.pyc +0 -0
- package/{knowledge_base → src}/retrieval/context_fusion.py +3 -3
- package/{knowledge_base → src}/retrieval/knowledge_graph.py +4 -4
- package/{knowledge_base → src}/retrieval/reranker.py +2 -2
- package/{knowledge_base → src}/retrieval/retriever.py +11 -11
- package/{knowledge_base → src}/retrieval/unified_query.py +7 -7
- package/{knowledge_base → src}/retrieval/web_retriever.py +6 -6
- package/{knowledge_base → src}/validators/step_fidelity.py +1 -1
- package/src/vision/__init__.py +0 -0
- package/{knowledge_base → src}/vision/image_describer.py +1 -1
- package/knowledge_base/agents/__pycache__/confidence_agent.cpython-313.pyc +0 -0
- package/knowledge_base/agents/__pycache__/requirement_agent.cpython-313.pyc +0 -0
- package/knowledge_base/agents/__pycache__/testcase_agent.cpython-313.pyc +0 -0
- package/knowledge_base/agents/__pycache__/workflow_engine.cpython-313.pyc +0 -0
- package/knowledge_base/agents/confidence_agent.py +0 -95
- package/knowledge_base/agents/intent_agent.py +0 -76
- package/knowledge_base/agents/requirement_agent.py +0 -71
- package/knowledge_base/agents/testcase_agent.py +0 -111
- package/knowledge_base/agents/workflow_engine.py +0 -87
- package/knowledge_base/cli/__pycache__/workflow_cli.cpython-313.pyc +0 -0
- package/knowledge_base/cli/generate_qcapps134.py +0 -391
- package/knowledge_base/cli/workflow_cli.py +0 -189
- package/knowledge_base/config/.env +0 -100
- package/knowledge_base/config/.env.example +0 -75
- package/knowledge_base/config/__pycache__/__init__.cpython-313.pyc +0 -0
- package/knowledge_base/connectors/__pycache__/__init__.cpython-313.pyc +0 -0
- package/knowledge_base/connectors/bitbucket_connector.py +0 -25
- package/knowledge_base/db/migrations.py +0 -22
- package/knowledge_base/ingestion/ingest.py +0 -346
- package/knowledge_base/ingestion/ingest_images.py +0 -330
- package/knowledge_base/memory/__init__.py +0 -6
- package/knowledge_base/memory/ingest_memory.py +0 -60
- /package/{knowledge_base → src}/__init__.py +0 -0
- /package/{knowledge_base → src}/__pycache__/__init__.cpython-313.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/confidence.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/config.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/config.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/config.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/context_fusion.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/context_fusion.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/feedback_analytics.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/feedback_applier.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/feedback_cli.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/feedback_curator.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/feedback_handler.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/generate.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/generate_qcapps134.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/input_classifier.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/input_classifier.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/kg_extractor.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/knowledge_graph.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/knowledge_graph.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/manual_tc_parser.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/manual_tc_parser.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/precedence.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/prompts.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/prompts.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/reranker.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/reranker.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/retrieval_debug.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/retrieval_debug.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/retriever.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/retriever.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/server.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/tc_transformer.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/tc_transformer.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/test_generator.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/__pycache__/test_generator.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__init__.py +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-313.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/automation_design_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/confidence_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/execution_validation_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/fusion_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/fusion_agent.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/fusion_agent.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/graph.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/graph.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/graph.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/healing_agent.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/intent_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/intent_agent.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/intent_agent.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/kg_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/kg_agent.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/kg_agent.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/memory_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/memory_agent.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/memory_agent.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/rca_agent.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/reflection_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/reflection_agent.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/reflection_agent.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/regression_agent.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/requirement_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/retrieval_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/retrieval_agent.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/retrieval_agent.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/scenario_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/script_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/script_agent.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/script_agent.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/script_generator_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/state.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/state.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/state.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/temporal_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/temporal_agent.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/temporal_agent.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/testcase_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/workflow_engine.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/agents/state.py +0 -0
- /package/{knowledge_base → src}/alembic/__pycache__/env.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/alembic/__pycache__/env.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/alembic/versions/.gitkeep +0 -0
- /package/{knowledge_base → src}/alembic/versions/001_phase0_feedback.py +0 -0
- /package/{knowledge_base → src}/alembic/versions/002_feedback_promotions.py +0 -0
- /package/{knowledge_base → src}/alembic/versions/003_enterprise_hardening.py +0 -0
- /package/{knowledge_base → src}/alembic/versions/__pycache__/001_phase0_feedback.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/alembic/versions/__pycache__/001_phase0_feedback.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/alembic/versions/__pycache__/002_feedback_promotions.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/alembic/versions/__pycache__/002_feedback_promotions.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/api/__init__.py +0 -0
- /package/{knowledge_base → src}/api/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/api/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/api/__pycache__/middleware.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/api/__pycache__/server.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/api/__pycache__/server.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/chunking/__init__.py +0 -0
- /package/{knowledge_base → src}/chunking/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/chunking/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/chunking/__pycache__/chunker.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/chunking/__pycache__/chunker.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/chunking/__pycache__/validators.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/chunking/__pycache__/validators.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/chunking/validators.py +0 -0
- /package/{knowledge_base → src}/cli/__init__.py +0 -0
- /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-313.pyc +0 -0
- /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/cli/__pycache__/feedback_cli.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/cli/__pycache__/feedback_cli.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/cli/__pycache__/generate.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/cli/__pycache__/generate.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/cli/__pycache__/generate_qcapps134.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/cli/__pycache__/workflow_cli.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/config/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/config/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/config/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/config/__pycache__/settings.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/config/__pycache__/settings.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/config/__pycache__/settings.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-313.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/bitbucket_connector.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/bitbucket_connector.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/community_connector.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/confluence_connector.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/confluence_connector.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/kb_igel_connector.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/playwright_fetcher.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/query_bridge.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/query_bridge.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/search_backends.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/serviceNow_connector.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/serviceNow_connector.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/sync_scheduler.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/sync_scheduler.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/teamcity_connector.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/teamcity_connector.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/testRail_connector.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/testRail_connector.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/__pycache__/web_fetcher.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/connectors/base.py +0 -0
- /package/{knowledge_base → src}/connectors/playwright_fetcher.py +0 -0
- /package/{knowledge_base → src}/core/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/cache.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/circuit_breaker.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/circuit_breaker.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/confidence.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/confidence.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/confidence.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/logging_setup.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/metrics.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/precedence.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/precedence.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/core/__pycache__/request_context.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/core/circuit_breaker.py +0 -0
- /package/{knowledge_base → src}/core/metrics.py +0 -0
- /package/{knowledge_base → src}/core/precedence.py +0 -0
- /package/{knowledge_base → src}/core/request_context.py +0 -0
- /package/{knowledge_base → src}/db/__init__.py +0 -0
- /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-313.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/client.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/client.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/client.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/connector_sync.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/feedback_schema.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/feedback_schema.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/igel_schema.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/kg_introspect.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/kg_introspect.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/kg_introspect.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/schema.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/schema.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/embeddings/__init__.py +0 -0
- /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-313.pyc +0 -0
- /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/__main__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/baseline.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/baseline.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/baseline.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/harness.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/harness.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/harness.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/scorers.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/scorers.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/scorers.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/eval/baseline.py +0 -0
- /package/{knowledge_base → src}/eval/queries_50.json +0 -0
- /package/{knowledge_base → src}/eval/scorers.py +0 -0
- /package/{knowledge_base → src}/exemplars/README.md +0 -0
- /package/{knowledge_base → src}/exemplars/__pycache__/pytest_reference_snippet.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/exemplars/gold_manual_concise_snippet.md +0 -0
- /package/{knowledge_base → src}/exemplars/gold_manual_detailed_snippet.md +0 -0
- /package/{knowledge_base → src}/exemplars/pytest_reference_snippet.py +0 -0
- /package/{knowledge_base → src}/feedback/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/feedback/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/feedback/__pycache__/analytics.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/feedback/__pycache__/analytics.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/feedback/__pycache__/applier.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/feedback/__pycache__/applier.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/feedback/__pycache__/curator.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/feedback/__pycache__/curator.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/feedback/__pycache__/handler.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/feedback/__pycache__/handler.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/generation/__init__.py +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/input_classifier.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/input_classifier.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/manual_tc_parser.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/manual_tc_parser.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/prompts.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/prompts.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/prompts.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/tc_transformer.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/test_generator.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/test_generator.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/generation/__pycache__/test_generator.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/generation/manual_tc_parser.py +0 -0
- /package/{knowledge_base → src}/graph_db/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/graph_db/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/graph_db/__pycache__/graphiti_client.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/graph_db/__pycache__/kg_traversal.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/graph_db/__pycache__/migrate_kg.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/graph_db/__pycache__/neo4j_client.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/graph_db/__pycache__/neo4j_client.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/graph_db/__pycache__/schema.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/graph_db/__pycache__/temporal_ingest.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/graph_db/schema.py +0 -0
- /package/{knowledge_base → src}/ingestion/__init__.py +0 -0
- /package/{knowledge_base → src}/ingestion/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/ingestion/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/ingestion/__pycache__/ingest.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/ingestion/__pycache__/ingest.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/ingestion/__pycache__/ingest_images.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/ingestion/__pycache__/ingest_images.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/ingestion/__pycache__/kg_extractor.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/ingestion/__pycache__/kg_extractor.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/ingestion/__pycache__/web_ingest.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/intelligence/__init__.py +0 -0
- /package/{knowledge_base → src}/intelligence/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/intelligence/__pycache__/execution_ingest.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/intelligence/__pycache__/predictive_engine.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/intelligence/__pycache__/risk_scorer.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/intelligence/predictive_engine.py +0 -0
- /package/{knowledge_base → src}/intelligence/risk_scorer.py +0 -0
- /package/{knowledge_base → src}/memory/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/memory/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/memory/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/memory/__pycache__/cognee_client.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/memory/__pycache__/cognee_client.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/memory/__pycache__/cognee_client.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/memory/__pycache__/ingest_memory.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/memory/__pycache__/memory_types.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/memory/__pycache__/memory_types.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/memory/__pycache__/memory_types.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/memory/memory_types.py +0 -0
- /package/{knowledge_base → src}/models/__pycache__/test_requirement.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__init__.py +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/csv_parser.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/csv_parser.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/doc_parser.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/doc_parser.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/html_parser.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/image_extractor.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/image_extractor.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/markdown_parser.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/markdown_parser.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/pdf_parser.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/parsers/__pycache__/pdf_parser.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/parsers/image_extractor.py +0 -0
- /package/{knowledge_base → src}/parsers/markdown_parser.py +0 -0
- /package/{knowledge_base/vision → src/project}/__init__.py +0 -0
- /package/{knowledge_base → src}/retrieval/__init__.py +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/context_fusion.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/context_fusion.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/knowledge_graph.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/knowledge_graph.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/knowledge_graph.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/reranker.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/reranker.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/retrieval_debug.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/retrieval_debug.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/retriever.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/retriever.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/retriever.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/unified_query.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/unified_query.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/__pycache__/web_retriever.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/retrieval/retrieval_debug.py +0 -0
- /package/{knowledge_base → src}/validators/__init__.py +0 -0
- /package/{knowledge_base → src}/validators/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/validators/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/validators/__pycache__/step_fidelity.cpython-314.pyc +0 -0
- /package/{knowledge_base → src}/validators/__pycache__/step_fidelity.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/vision/__pycache__/__init__.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/vision/__pycache__/__init__.cpython-38.pyc +0 -0
- /package/{knowledge_base → src}/vision/__pycache__/image_describer.cpython-37.pyc +0 -0
- /package/{knowledge_base → src}/vision/__pycache__/image_describer.cpython-38.pyc +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""Framework Analyzer Agent.
|
|
2
|
+
|
|
3
|
+
Consumes a diff/impact scope package and performs scoped framework analysis.
|
|
4
|
+
This is intentionally scope-limited to avoid full repository rescans.
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import logging
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Iterable
|
|
11
|
+
|
|
12
|
+
from src.agents.regression_agent import BitbucketSyncAgent
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class FrameworkAnalyzerAgent:
|
|
18
|
+
"""Analyze only impacted files and update framework registries."""
|
|
19
|
+
|
|
20
|
+
def __init__(self, repo_path: Path):
|
|
21
|
+
self.repo_path = repo_path
|
|
22
|
+
self._sync = BitbucketSyncAgent(repo_path)
|
|
23
|
+
|
|
24
|
+
def analyze_scope(self, analysis_targets: Iterable[Path]) -> dict:
|
|
25
|
+
targets = []
|
|
26
|
+
for t in analysis_targets:
|
|
27
|
+
p = Path(t)
|
|
28
|
+
full = p if p.is_absolute() else (self.repo_path / p)
|
|
29
|
+
if full.exists():
|
|
30
|
+
targets.append(full)
|
|
31
|
+
|
|
32
|
+
indexed_assets = self._sync.sync_changed_files(targets)
|
|
33
|
+
logger.info(
|
|
34
|
+
"FrameworkAnalyzer: targets=%d indexed_assets=%d",
|
|
35
|
+
len(targets),
|
|
36
|
+
indexed_assets,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
"analysis_targets_count": len(targets),
|
|
41
|
+
"indexed_assets": indexed_assets,
|
|
42
|
+
"analysis_targets": [str(p.relative_to(self.repo_path)) for p in targets],
|
|
43
|
+
}
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
import re
|
|
5
5
|
|
|
6
|
-
from
|
|
6
|
+
from src.agents.state import AgenticState
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def fusion_agent(state: AgenticState) -> AgenticState:
|
|
@@ -29,7 +29,7 @@ def fusion_agent(state: AgenticState) -> AgenticState:
|
|
|
29
29
|
conflicts: list[dict] = list(kg.get("conflicts") or [])
|
|
30
30
|
if not conflicts and rag:
|
|
31
31
|
try:
|
|
32
|
-
from
|
|
32
|
+
from src.core.precedence import detect_precedence_conflicts
|
|
33
33
|
pseudo = []
|
|
34
34
|
for i, chunk in enumerate(rag[:8]):
|
|
35
35
|
pseudo.append(type("R", (), {
|
|
@@ -71,7 +71,7 @@ def fusion_agent(state: AgenticState) -> AgenticState:
|
|
|
71
71
|
# LLM-assisted context quality when heuristic score is low
|
|
72
72
|
if quality < 0.5 and rag:
|
|
73
73
|
try:
|
|
74
|
-
from
|
|
74
|
+
from src.generation.test_generator import _call_gpt
|
|
75
75
|
sample = "\n".join(c.get("content", "")[:200] for c in rag[:3])
|
|
76
76
|
verdict = _call_gpt(
|
|
77
77
|
"Rate context relevance 0-1 for IGEL test generation. Reply with number only.",
|
|
@@ -5,16 +5,16 @@ import logging
|
|
|
5
5
|
import time
|
|
6
6
|
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
7
7
|
|
|
8
|
-
from
|
|
9
|
-
from
|
|
10
|
-
from
|
|
11
|
-
from
|
|
12
|
-
from
|
|
13
|
-
from
|
|
14
|
-
from
|
|
15
|
-
from
|
|
16
|
-
from
|
|
17
|
-
from
|
|
8
|
+
from src.agents.fusion_agent import fusion_agent
|
|
9
|
+
from src.agents.intent_agent import intent_agent
|
|
10
|
+
from src.agents.kg_agent import kg_agent
|
|
11
|
+
from src.agents.memory_agent import memory_agent
|
|
12
|
+
from src.agents.reflection_agent import reflection_agent, should_loop_back
|
|
13
|
+
from src.agents.retrieval_agent import retrieval_agent
|
|
14
|
+
from src.agents.script_agent import script_agent
|
|
15
|
+
from src.agents.state import AgenticState, initial_state
|
|
16
|
+
from src.agents.temporal_agent import temporal_agent
|
|
17
|
+
from src.agents.validation_agent import validation_agent
|
|
18
18
|
|
|
19
19
|
logger = logging.getLogger(__name__)
|
|
20
20
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"""Healing agent — Phase 7."""
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
|
-
from
|
|
5
|
-
from
|
|
6
|
-
from
|
|
7
|
-
from
|
|
4
|
+
from src.config import cfg
|
|
5
|
+
from src.memory.cognee_client import get_cognee_client
|
|
6
|
+
from src.memory.memory_types import MemoryType
|
|
7
|
+
from src.generation.test_generator import _call_gpt
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def propose_fix(test_id: str, flaky_history: list[dict] | None = None) -> dict:
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""Intent classification agent — unified via IntentService."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from src.agents.state import AgenticState
|
|
5
|
+
from src.core.intent_service import IntentService
|
|
6
|
+
|
|
7
|
+
_intent_service = IntentService()
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def intent_agent(state: AgenticState) -> AgenticState:
|
|
11
|
+
query = state.get("query", "")
|
|
12
|
+
classified = _intent_service.classify(query)
|
|
13
|
+
intent = classified.intent
|
|
14
|
+
feature = classified.feature_area
|
|
15
|
+
version_scope = classified.version_scope
|
|
16
|
+
categories = classified.query_categories
|
|
17
|
+
|
|
18
|
+
state["intent"] = intent
|
|
19
|
+
state["feature_area"] = feature
|
|
20
|
+
state["version_scope"] = version_scope
|
|
21
|
+
state["query_categories"] = categories
|
|
22
|
+
state.setdefault("agent_trace", []).append({
|
|
23
|
+
"agent": "IntentAgent",
|
|
24
|
+
"status": "complete",
|
|
25
|
+
"intent": intent,
|
|
26
|
+
"feature_area": feature,
|
|
27
|
+
"version_scope": version_scope,
|
|
28
|
+
"query_categories": categories,
|
|
29
|
+
})
|
|
30
|
+
return state
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""Approval manager for V2 orchestration governance."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import uuid
|
|
5
|
+
from datetime import datetime, timezone
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
from src.project.ai_folder import read_approval_artifact, write_approval_artifact
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ApprovalError(RuntimeError):
|
|
12
|
+
"""Raised when a workflow stage is blocked by missing/invalid approval."""
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ApprovalManager:
|
|
16
|
+
"""Persist and validate approval checkpoints for guarded workflows."""
|
|
17
|
+
|
|
18
|
+
def __init__(self, repo_root: Path):
|
|
19
|
+
self.repo_root = repo_root
|
|
20
|
+
|
|
21
|
+
def create_pending(
|
|
22
|
+
self,
|
|
23
|
+
*,
|
|
24
|
+
jira_key: str,
|
|
25
|
+
stage: str,
|
|
26
|
+
test_reqid: str | None = None,
|
|
27
|
+
questions: list[dict] | None = None,
|
|
28
|
+
confidence: float | None = None,
|
|
29
|
+
) -> dict:
|
|
30
|
+
approval_id = str(uuid.uuid4())
|
|
31
|
+
now = datetime.now(timezone.utc).isoformat()
|
|
32
|
+
payload = {
|
|
33
|
+
"approval_id": approval_id,
|
|
34
|
+
"jira_key": jira_key,
|
|
35
|
+
"test_reqid": test_reqid or jira_key,
|
|
36
|
+
"stage": stage,
|
|
37
|
+
"status": "PENDING_QUESTIONS" if questions else "PENDING_APPROVAL",
|
|
38
|
+
"questions": questions or [],
|
|
39
|
+
"confidence": confidence,
|
|
40
|
+
"created_at": now,
|
|
41
|
+
"updated_at": now,
|
|
42
|
+
"decision": None,
|
|
43
|
+
"actor": None,
|
|
44
|
+
"reason": None,
|
|
45
|
+
}
|
|
46
|
+
write_approval_artifact(
|
|
47
|
+
repo_root=self.repo_root,
|
|
48
|
+
jira_key=jira_key,
|
|
49
|
+
stage=stage,
|
|
50
|
+
payload=payload,
|
|
51
|
+
test_reqid=test_reqid,
|
|
52
|
+
)
|
|
53
|
+
return payload
|
|
54
|
+
|
|
55
|
+
def record_decision(
|
|
56
|
+
self,
|
|
57
|
+
*,
|
|
58
|
+
jira_key: str,
|
|
59
|
+
stage: str,
|
|
60
|
+
decision: str,
|
|
61
|
+
actor: str,
|
|
62
|
+
reason: str | None = None,
|
|
63
|
+
test_reqid: str | None = None,
|
|
64
|
+
) -> dict:
|
|
65
|
+
current = read_approval_artifact(
|
|
66
|
+
repo_root=self.repo_root,
|
|
67
|
+
jira_key=jira_key,
|
|
68
|
+
stage=stage,
|
|
69
|
+
test_reqid=test_reqid,
|
|
70
|
+
)
|
|
71
|
+
if not current:
|
|
72
|
+
raise ApprovalError(f"No approval checkpoint found for stage '{stage}'")
|
|
73
|
+
|
|
74
|
+
norm = (decision or "").strip().lower()
|
|
75
|
+
if norm not in ("approve", "approved", "reject", "rejected"):
|
|
76
|
+
raise ApprovalError("decision must be one of: approve, approved, reject, rejected")
|
|
77
|
+
|
|
78
|
+
status = "APPROVED" if norm.startswith("approve") else "REJECTED"
|
|
79
|
+
current["status"] = status
|
|
80
|
+
current["decision"] = status
|
|
81
|
+
current["actor"] = actor
|
|
82
|
+
current["reason"] = reason
|
|
83
|
+
current["updated_at"] = datetime.now(timezone.utc).isoformat()
|
|
84
|
+
|
|
85
|
+
write_approval_artifact(
|
|
86
|
+
repo_root=self.repo_root,
|
|
87
|
+
jira_key=jira_key,
|
|
88
|
+
stage=stage,
|
|
89
|
+
payload=current,
|
|
90
|
+
test_reqid=test_reqid,
|
|
91
|
+
)
|
|
92
|
+
return current
|
|
93
|
+
|
|
94
|
+
def assert_approved(self, *, jira_key: str, stage: str, test_reqid: str | None = None) -> dict:
|
|
95
|
+
record = read_approval_artifact(
|
|
96
|
+
repo_root=self.repo_root,
|
|
97
|
+
jira_key=jira_key,
|
|
98
|
+
stage=stage,
|
|
99
|
+
test_reqid=test_reqid,
|
|
100
|
+
)
|
|
101
|
+
if not record:
|
|
102
|
+
raise ApprovalError(
|
|
103
|
+
f"Blocked by governance: missing approval checkpoint for stage '{stage}'. "
|
|
104
|
+
f"Run planning first and submit approval."
|
|
105
|
+
)
|
|
106
|
+
if record.get("status") != "APPROVED":
|
|
107
|
+
raise ApprovalError(
|
|
108
|
+
f"Blocked by governance: stage '{stage}' requires APPROVED status, "
|
|
109
|
+
f"current={record.get('status')}."
|
|
110
|
+
)
|
|
111
|
+
return record
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""Question engine for governance-significant clarifications.
|
|
2
|
+
|
|
3
|
+
This engine filters out low-value style/naming questions and only emits
|
|
4
|
+
questions that can change coverage, risk profile, environment scope, or
|
|
5
|
+
business behavior.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
|
|
11
|
+
_ALLOWED_CATEGORIES = {
|
|
12
|
+
"business_rule",
|
|
13
|
+
"coverage_scope",
|
|
14
|
+
"risk_acceptance",
|
|
15
|
+
"environment_decision",
|
|
16
|
+
"architecture_decision",
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
_BLOCKED_HINTS = (
|
|
20
|
+
"name",
|
|
21
|
+
"naming",
|
|
22
|
+
"format",
|
|
23
|
+
"style",
|
|
24
|
+
"folder",
|
|
25
|
+
"documentation",
|
|
26
|
+
"comment",
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class GovernanceQuestion:
|
|
32
|
+
category: str
|
|
33
|
+
question: str
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class QuestionEngine:
|
|
37
|
+
"""Generates and filters governance-relevant questions."""
|
|
38
|
+
|
|
39
|
+
def __init__(self, max_questions: int = 5):
|
|
40
|
+
self.max_questions = max_questions
|
|
41
|
+
|
|
42
|
+
def build_questions(self, *, summary: str, description: str) -> list[dict]:
|
|
43
|
+
summary_low = (summary or "").lower()
|
|
44
|
+
desc_low = (description or "").lower()
|
|
45
|
+
text = f"{summary_low}\n{desc_low}".strip()
|
|
46
|
+
|
|
47
|
+
candidates: list[GovernanceQuestion] = []
|
|
48
|
+
|
|
49
|
+
if any(k in text for k in ("downgrade", "rollback", "migration")):
|
|
50
|
+
candidates.append(
|
|
51
|
+
GovernanceQuestion(
|
|
52
|
+
category="coverage_scope",
|
|
53
|
+
question="Should downgrade and rollback paths be included in scope?",
|
|
54
|
+
)
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
if any(k in text for k in ("os", "version", "compatibility")):
|
|
58
|
+
candidates.append(
|
|
59
|
+
GovernanceQuestion(
|
|
60
|
+
category="environment_decision",
|
|
61
|
+
question="Which OS versions and deployment variants are in scope?",
|
|
62
|
+
)
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
if any(k in text for k in ("authentication", "sso", "mfa", "security")):
|
|
66
|
+
candidates.append(
|
|
67
|
+
GovernanceQuestion(
|
|
68
|
+
category="risk_acceptance",
|
|
69
|
+
question="What risk posture should be used for authentication and failure handling scenarios?",
|
|
70
|
+
)
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
if "or" in text and any(k in text for k in ("workflow", "path", "option")):
|
|
74
|
+
candidates.append(
|
|
75
|
+
GovernanceQuestion(
|
|
76
|
+
category="architecture_decision",
|
|
77
|
+
question="Which workflow path is authoritative when multiple behavior options are possible?",
|
|
78
|
+
)
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
if any(k in text for k in ("must", "shall", "cannot", "prohibited", "not allowed")):
|
|
82
|
+
candidates.append(
|
|
83
|
+
GovernanceQuestion(
|
|
84
|
+
category="business_rule",
|
|
85
|
+
question="Please confirm the non-negotiable business rules that must be enforced.",
|
|
86
|
+
)
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
return self._filter(candidates)
|
|
90
|
+
|
|
91
|
+
def _filter(self, questions: list[GovernanceQuestion]) -> list[dict]:
|
|
92
|
+
out: list[dict] = []
|
|
93
|
+
seen: set[str] = set()
|
|
94
|
+
|
|
95
|
+
for q in questions:
|
|
96
|
+
text = q.question.strip()
|
|
97
|
+
if not text:
|
|
98
|
+
continue
|
|
99
|
+
if q.category not in _ALLOWED_CATEGORIES:
|
|
100
|
+
continue
|
|
101
|
+
low = text.lower()
|
|
102
|
+
if any(h in low for h in _BLOCKED_HINTS):
|
|
103
|
+
continue
|
|
104
|
+
if text in seen:
|
|
105
|
+
continue
|
|
106
|
+
seen.add(text)
|
|
107
|
+
out.append({"category": q.category, "question": text})
|
|
108
|
+
if len(out) >= self.max_questions:
|
|
109
|
+
break
|
|
110
|
+
|
|
111
|
+
return out
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""Internal workflow wrapper for V2 stage-gated execution.
|
|
2
|
+
|
|
3
|
+
This wrapper is intentionally thin in Wave 1 and delegates execution to the
|
|
4
|
+
existing deterministic WorkflowEngine while keeping a stable location for
|
|
5
|
+
future governance interception.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from src.agents.workflow_engine import WorkflowEngine
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class InternalWorkflowEngine:
|
|
16
|
+
"""Adapter layer used by the V2 orchestrator to call existing specialists."""
|
|
17
|
+
|
|
18
|
+
def __init__(self, repo_root: Path):
|
|
19
|
+
self._engine = WorkflowEngine(repo_root)
|
|
20
|
+
|
|
21
|
+
def run_requirement_flow(self, req: Any):
|
|
22
|
+
return self._engine.run_requirement_flow(req)
|
|
23
|
+
|
|
24
|
+
def run_testcase_flow(self, req: Any, scenarios_with_rules: list, resolved_context: Any, source_report: Any):
|
|
25
|
+
return self._engine.run_testcase_flow(req, scenarios_with_rules, resolved_context, source_report)
|
|
26
|
+
|
|
27
|
+
def run_script_flow(self, req: Any, test_cases: list, output_path: Path, plan: Any = None):
|
|
28
|
+
return self._engine.run_script_flow(req, test_cases, output_path, plan=plan)
|
|
@@ -4,9 +4,9 @@ from __future__ import annotations
|
|
|
4
4
|
import re
|
|
5
5
|
import time
|
|
6
6
|
|
|
7
|
-
from
|
|
8
|
-
from
|
|
9
|
-
from
|
|
7
|
+
from src.agents.state import AgenticState
|
|
8
|
+
from src.config import cfg
|
|
9
|
+
from src.db.client import get_conn
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def kg_agent(state: AgenticState) -> AgenticState:
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"""Memory agent — Phase 4/5 Cognee search."""
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
|
-
from
|
|
5
|
-
from
|
|
6
|
-
from
|
|
7
|
-
from
|
|
4
|
+
from src.agents.state import AgenticState
|
|
5
|
+
from src.config import cfg
|
|
6
|
+
from src.memory.cognee_client import get_cognee_client
|
|
7
|
+
from src.memory.memory_types import MemoryType
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def memory_agent(state: AgenticState) -> AgenticState:
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""Single user-facing orchestrator façade.
|
|
2
|
+
|
|
3
|
+
This module introduces a stable entrypoint for workflow selection and
|
|
4
|
+
governance decisions while reusing existing specialist implementations.
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
from src.agents.internal.approval_manager import ApprovalManager
|
|
12
|
+
from src.agents.internal.question_engine import QuestionEngine
|
|
13
|
+
from src.config import cfg
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class OrchestrationDecision:
|
|
18
|
+
workflow: str
|
|
19
|
+
approval_required: bool
|
|
20
|
+
questions: list[dict]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class Orchestrator:
|
|
24
|
+
"""Single front door for all user workflow requests."""
|
|
25
|
+
|
|
26
|
+
def __init__(self, repo_root: Path):
|
|
27
|
+
self.repo_root = repo_root
|
|
28
|
+
self.approvals = ApprovalManager(repo_root)
|
|
29
|
+
self.questions = QuestionEngine(max_questions=5)
|
|
30
|
+
|
|
31
|
+
def select_workflow(self, action: str) -> str:
|
|
32
|
+
mapping = {
|
|
33
|
+
"plan_test_cases": "test_case_planning",
|
|
34
|
+
"generate_test_cases": "test_case_generation",
|
|
35
|
+
"plan_automation": "automation_planning",
|
|
36
|
+
"generate_automation": "automation_generation",
|
|
37
|
+
}
|
|
38
|
+
return mapping.get(action, "generic")
|
|
39
|
+
|
|
40
|
+
def plan_gate(self, *, jira_key: str, test_reqid: str | None, summary: str, description: str, stage: str) -> OrchestrationDecision:
|
|
41
|
+
generated_questions: list[dict] = []
|
|
42
|
+
if cfg.V2_QUESTION_ENGINE_ENABLED:
|
|
43
|
+
generated_questions = self.questions.build_questions(summary=summary, description=description)
|
|
44
|
+
|
|
45
|
+
approval_required = cfg.V2_APPROVAL_MANAGER_ENABLED or cfg.V2_GOVERNANCE_ENFORCED
|
|
46
|
+
if approval_required:
|
|
47
|
+
self.approvals.create_pending(
|
|
48
|
+
jira_key=jira_key,
|
|
49
|
+
stage=stage,
|
|
50
|
+
test_reqid=test_reqid,
|
|
51
|
+
questions=generated_questions,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
return OrchestrationDecision(
|
|
55
|
+
workflow=stage,
|
|
56
|
+
approval_required=approval_required,
|
|
57
|
+
questions=generated_questions,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
def assert_generation_gate(self, *, jira_key: str, test_reqid: str | None, stage: str) -> dict | None:
|
|
61
|
+
if not (cfg.V2_APPROVAL_MANAGER_ENABLED or cfg.V2_GOVERNANCE_ENFORCED):
|
|
62
|
+
return None
|
|
63
|
+
return self.approvals.assert_approved(jira_key=jira_key, stage=stage, test_reqid=test_reqid)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"""RCA agent — Phase 7."""
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
|
-
from
|
|
5
|
-
from
|
|
6
|
-
from
|
|
7
|
-
from
|
|
4
|
+
from src.config import cfg
|
|
5
|
+
from src.graph_db.kg_traversal import traverse_failure_path
|
|
6
|
+
from src.memory.cognee_client import get_cognee_client
|
|
7
|
+
from src.memory.memory_types import MemoryType
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def analyze_failure(test_id: str, failure_log: str) -> dict:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from typing import List, Dict, Any, Set
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from
|
|
5
|
-
from
|
|
4
|
+
from src.db.client import get_conn
|
|
5
|
+
from src.agents.code_intelligence_agent import CodeIntelligenceAgent
|
|
6
6
|
|
|
7
7
|
logger = logging.getLogger(__name__)
|
|
8
8
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import logging
|
|
3
|
+
from typing import Dict, Any
|
|
4
|
+
from openai import AzureOpenAI
|
|
5
|
+
from src.config import cfg
|
|
6
|
+
from src.core.llm_executor import get_executor, executor_enabled_for
|
|
7
|
+
from src.core.orchestration_contracts import GenerationContext, LLMRequest
|
|
8
|
+
from src.models.test_requirement import RequirementUnderstanding, TestRequirement
|
|
9
|
+
from src.prompts.prompt_loader import load_prompt
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
_SYSTEM_PROMPT = load_prompt(
|
|
14
|
+
"requirement_understanding.md",
|
|
15
|
+
fallback=(
|
|
16
|
+
"You are an expert IGEL Quality Engineering Architect. "
|
|
17
|
+
"Analyze the requirement and return actors, entities, business_rules, validations, constraints, dependencies as JSON."
|
|
18
|
+
),
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
_llm_client: AzureOpenAI | None = None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _get_llm_client() -> AzureOpenAI:
|
|
25
|
+
"""Backward-compatible direct client accessor for agents not yet migrated."""
|
|
26
|
+
global _llm_client
|
|
27
|
+
if _llm_client is None:
|
|
28
|
+
_llm_client = AzureOpenAI(
|
|
29
|
+
api_key=cfg.AZURE_API_KEY,
|
|
30
|
+
azure_endpoint=cfg.AZURE_ENDPOINT,
|
|
31
|
+
api_version=cfg.AZURE_API_VERSION,
|
|
32
|
+
)
|
|
33
|
+
return _llm_client
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _get_llm_executor():
|
|
37
|
+
return get_executor()
|
|
38
|
+
|
|
39
|
+
def extract_understanding(requirement: TestRequirement) -> RequirementUnderstanding:
|
|
40
|
+
"""Analyze a requirement and extract its core semantic understanding."""
|
|
41
|
+
executor = _get_llm_executor()
|
|
42
|
+
use_executor = executor_enabled_for("RequirementAgent")
|
|
43
|
+
client = None if use_executor else _get_llm_client()
|
|
44
|
+
|
|
45
|
+
user_prompt = f"Requirement Key: {requirement.jira_key}\nSummary: {requirement.summary}\nDescription: {requirement.description or 'None'}\n"
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
if use_executor:
|
|
49
|
+
result = executor.execute(
|
|
50
|
+
LLMRequest(
|
|
51
|
+
system_prompt=_SYSTEM_PROMPT,
|
|
52
|
+
user_prompt=user_prompt,
|
|
53
|
+
task_type="requirement_understanding",
|
|
54
|
+
agent_name="RequirementAgent",
|
|
55
|
+
temperature=0.1,
|
|
56
|
+
max_tokens=1500,
|
|
57
|
+
response_format={"type": "json_object"},
|
|
58
|
+
context=GenerationContext(
|
|
59
|
+
jira_key=requirement.jira_key,
|
|
60
|
+
task_type="requirement_understanding",
|
|
61
|
+
agent_name="RequirementAgent",
|
|
62
|
+
query=requirement.summary,
|
|
63
|
+
metadata={"description_present": bool(requirement.description)},
|
|
64
|
+
),
|
|
65
|
+
)
|
|
66
|
+
)
|
|
67
|
+
content = result.content or "{}"
|
|
68
|
+
else:
|
|
69
|
+
response = client.chat.completions.create(
|
|
70
|
+
model=cfg.AZURE_DEPLOYMENT,
|
|
71
|
+
messages=[
|
|
72
|
+
{"role": "system", "content": _SYSTEM_PROMPT},
|
|
73
|
+
{"role": "user", "content": user_prompt},
|
|
74
|
+
],
|
|
75
|
+
response_format={"type": "json_object"},
|
|
76
|
+
temperature=0.1,
|
|
77
|
+
max_tokens=1500,
|
|
78
|
+
)
|
|
79
|
+
content = response.choices[0].message.content or "{}"
|
|
80
|
+
|
|
81
|
+
data = json.loads(content)
|
|
82
|
+
|
|
83
|
+
understanding = RequirementUnderstanding(
|
|
84
|
+
actors=data.get("actors", []),
|
|
85
|
+
entities=data.get("entities", []),
|
|
86
|
+
business_rules=data.get("business_rules", []),
|
|
87
|
+
validations=data.get("validations", []),
|
|
88
|
+
constraints=data.get("constraints", []),
|
|
89
|
+
dependencies=data.get("dependencies", [])
|
|
90
|
+
)
|
|
91
|
+
logger.info(f"Successfully extracted understanding for {requirement.jira_key}")
|
|
92
|
+
return understanding
|
|
93
|
+
|
|
94
|
+
except Exception as e:
|
|
95
|
+
logger.error(f"Failed to extract understanding for {requirement.jira_key}: {e}")
|
|
96
|
+
# Return empty understanding on failure to not block the pipeline
|
|
97
|
+
return RequirementUnderstanding()
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""Retrieval agent — Phase 5 (RAG + EKG + Web + MCP)."""
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
|
-
from
|
|
5
|
-
from
|
|
4
|
+
from src.agents.state import AgenticState
|
|
5
|
+
from src.retrieval.unified_query import unified_query
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
def retrieval_agent(state: AgenticState) -> AgenticState:
|