igel-qe-core 1.0.5 → 1.0.8
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/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/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 +52 -22
- package/{knowledge_base → src}/agents/code_intelligence_agent.py +2 -2
- package/src/agents/confidence_agent.py +220 -0
- package/src/agents/execution_validation_agent.py +247 -0
- 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 +114 -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 +940 -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 +19 -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__/automation_design_agent.cpython-313.pyc +0 -0
- package/knowledge_base/agents/__pycache__/confidence_agent.cpython-313.pyc +0 -0
- package/knowledge_base/agents/__pycache__/execution_validation_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/execution_validation_agent.py +0 -129
- 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
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from knowledge_base.models.test_requirement import (
|
|
3
|
-
GeneratedTestCase,
|
|
4
|
-
ScenarioWithRules,
|
|
5
|
-
ConfidenceMetrics,
|
|
6
|
-
TestCaseWithConfidence
|
|
7
|
-
)
|
|
8
|
-
|
|
9
|
-
logger = logging.getLogger(__name__)
|
|
10
|
-
|
|
11
|
-
def evaluate_coverage(tc: GeneratedTestCase, scenario: ScenarioWithRules) -> float:
|
|
12
|
-
"""Calculate if the test cases cover the business rules.
|
|
13
|
-
If we are evaluating a single TC, we see if it represents its rule properly.
|
|
14
|
-
Here we return 1.0 if it maps to a rule, 0.0 otherwise.
|
|
15
|
-
"""
|
|
16
|
-
if any(r.description == tc.business_rule.description for r in scenario.business_rules):
|
|
17
|
-
return 1.0
|
|
18
|
-
return 0.0
|
|
19
|
-
|
|
20
|
-
def evaluate_traceability(tc: GeneratedTestCase) -> float:
|
|
21
|
-
"""Check if the test case is traceable to a specific step."""
|
|
22
|
-
return 1.0 if "S" in tc.tc_reference and tc.business_rule else 0.0
|
|
23
|
-
|
|
24
|
-
def evaluate_completeness(tc: GeneratedTestCase) -> float:
|
|
25
|
-
"""Evaluate completeness of steps, data, and expected results."""
|
|
26
|
-
if not tc.steps:
|
|
27
|
-
return 0.0
|
|
28
|
-
|
|
29
|
-
score = 0.0
|
|
30
|
-
for step in tc.steps:
|
|
31
|
-
step_score = 0.0
|
|
32
|
-
if step.action: step_score += 0.4
|
|
33
|
-
if step.data: step_score += 0.2
|
|
34
|
-
if step.expected_result: step_score += 0.4
|
|
35
|
-
score += step_score
|
|
36
|
-
|
|
37
|
-
return score / len(tc.steps)
|
|
38
|
-
|
|
39
|
-
def evaluate_automation_feasibility(tc: GeneratedTestCase) -> float:
|
|
40
|
-
"""
|
|
41
|
-
Evaluate if this test case can be automated based on the Asset Registry.
|
|
42
|
-
For now, return a placeholder high score unless we have specific constraints.
|
|
43
|
-
(This will be enhanced when the Code Intelligence Agent is fully integrated).
|
|
44
|
-
"""
|
|
45
|
-
return 0.9
|
|
46
|
-
|
|
47
|
-
def compute_hybrid_confidence(tc: GeneratedTestCase, scenario: ScenarioWithRules) -> TestCaseWithConfidence:
|
|
48
|
-
"""
|
|
49
|
-
Compute the deterministic hybrid confidence score.
|
|
50
|
-
Weights:
|
|
51
|
-
- Coverage: 25%
|
|
52
|
-
- Traceability: 20%
|
|
53
|
-
- Completeness: 20%
|
|
54
|
-
- Historical Similarity: 15% (Stubbed to 0.8 for now)
|
|
55
|
-
- Automation Feasibility: 20%
|
|
56
|
-
"""
|
|
57
|
-
coverage = evaluate_coverage(tc, scenario)
|
|
58
|
-
traceability = evaluate_traceability(tc)
|
|
59
|
-
completeness = evaluate_completeness(tc)
|
|
60
|
-
historical_similarity = 0.8 # Placeholder for vector DB search against approved tests
|
|
61
|
-
automation_feasibility = evaluate_automation_feasibility(tc)
|
|
62
|
-
|
|
63
|
-
total = (
|
|
64
|
-
coverage * 0.25 +
|
|
65
|
-
traceability * 0.20 +
|
|
66
|
-
completeness * 0.20 +
|
|
67
|
-
historical_similarity * 0.15 +
|
|
68
|
-
automation_feasibility * 0.20
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
metrics = ConfidenceMetrics(
|
|
72
|
-
coverage_score=coverage,
|
|
73
|
-
traceability_score=traceability,
|
|
74
|
-
completeness_score=completeness,
|
|
75
|
-
historical_similarity_score=historical_similarity,
|
|
76
|
-
automation_feasibility_score=automation_feasibility,
|
|
77
|
-
total_score=total
|
|
78
|
-
)
|
|
79
|
-
|
|
80
|
-
tc.confidence_score = total
|
|
81
|
-
# Support both Pydantic v1 (.dict()) and v2 (.model_dump())
|
|
82
|
-
tc.confidence_metrics = metrics.model_dump() if hasattr(metrics, 'model_dump') else metrics.dict()
|
|
83
|
-
|
|
84
|
-
is_approved = total >= 0.80
|
|
85
|
-
|
|
86
|
-
if not is_approved:
|
|
87
|
-
logger.info(f"Test case {tc.tc_reference} needs review (score: {total:.2f})")
|
|
88
|
-
else:
|
|
89
|
-
logger.info(f"Test case {tc.tc_reference} auto-approved (score: {total:.2f})")
|
|
90
|
-
|
|
91
|
-
return TestCaseWithConfidence(
|
|
92
|
-
test_case=tc,
|
|
93
|
-
confidence=metrics,
|
|
94
|
-
is_approved=is_approved
|
|
95
|
-
)
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import ast
|
|
2
|
-
import logging
|
|
3
|
-
import subprocess
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
from typing import Tuple, List, Set
|
|
6
|
-
|
|
7
|
-
from knowledge_base.db.client import get_conn
|
|
8
|
-
|
|
9
|
-
logger = logging.getLogger(__name__)
|
|
10
|
-
|
|
11
|
-
class ExecutionValidationAgent:
|
|
12
|
-
"""Multi-stage validation pipeline for generated automation scripts."""
|
|
13
|
-
|
|
14
|
-
def __init__(self, repo_path: Path):
|
|
15
|
-
self.repo_path = repo_path
|
|
16
|
-
|
|
17
|
-
def validate_syntax(self, code: str) -> Tuple[bool, str]:
|
|
18
|
-
"""Stage 1: Check Python syntax."""
|
|
19
|
-
try:
|
|
20
|
-
ast.parse(code)
|
|
21
|
-
return True, ""
|
|
22
|
-
except SyntaxError as e:
|
|
23
|
-
return False, f"SyntaxError at line {e.lineno}: {e.msg}"
|
|
24
|
-
|
|
25
|
-
def _get_known_assets(self, asset_type: str) -> Set[str]:
|
|
26
|
-
"""Fetch all known assets of a specific type from the Asset Registry."""
|
|
27
|
-
assets = set()
|
|
28
|
-
try:
|
|
29
|
-
with get_conn() as conn:
|
|
30
|
-
with conn.cursor() as cur:
|
|
31
|
-
cur.execute("SELECT name FROM igel_asset_registry WHERE asset_type = %s", (asset_type,))
|
|
32
|
-
for row in cur.fetchall():
|
|
33
|
-
assets.add(row[0])
|
|
34
|
-
except Exception as e:
|
|
35
|
-
logger.error(f"Failed to query registry for {asset_type}: {e}")
|
|
36
|
-
return assets
|
|
37
|
-
|
|
38
|
-
def validate_imports(self, code: str) -> Tuple[bool, str]:
|
|
39
|
-
"""Stage 2: Check if imported modules exist in the registry."""
|
|
40
|
-
try:
|
|
41
|
-
tree = ast.parse(code)
|
|
42
|
-
except SyntaxError:
|
|
43
|
-
return False, "Syntax invalid, cannot check imports."
|
|
44
|
-
|
|
45
|
-
# For simplicity, we just extract 'from module import X' and check X
|
|
46
|
-
# A more robust check would analyze the actual repo path.
|
|
47
|
-
missing_imports = []
|
|
48
|
-
known_pos = self._get_known_assets("page_object")
|
|
49
|
-
known_utils = self._get_known_assets("utility")
|
|
50
|
-
known_clients = self._get_known_assets("api_client")
|
|
51
|
-
|
|
52
|
-
all_known = known_pos | known_utils | known_clients
|
|
53
|
-
|
|
54
|
-
for node in ast.walk(tree):
|
|
55
|
-
if isinstance(node, ast.ImportFrom):
|
|
56
|
-
for name in node.names:
|
|
57
|
-
# Ignore standard library and common 3rd party (pytest, allure, typing, etc.)
|
|
58
|
-
if node.module and not any(node.module.startswith(p) for p in ["pytest", "allure", "typing", "selenium", "playwright", "os", "json", "time"]):
|
|
59
|
-
# This is a naive check; in a real enterprise system, you'd match the import path to `file_path`
|
|
60
|
-
pass
|
|
61
|
-
return True, ""
|
|
62
|
-
|
|
63
|
-
def validate_fixtures(self, code: str) -> Tuple[bool, str]:
|
|
64
|
-
"""Stage 3: Check if requested pytest fixtures exist."""
|
|
65
|
-
try:
|
|
66
|
-
tree = ast.parse(code)
|
|
67
|
-
except SyntaxError:
|
|
68
|
-
return False, "Syntax invalid, cannot check fixtures."
|
|
69
|
-
|
|
70
|
-
known_fixtures = self._get_known_assets("fixture")
|
|
71
|
-
|
|
72
|
-
missing = []
|
|
73
|
-
for node in ast.walk(tree):
|
|
74
|
-
if isinstance(node, ast.FunctionDef) and node.name.startswith("test_"):
|
|
75
|
-
# pytest uses argument names to request fixtures
|
|
76
|
-
for arg in node.args.args:
|
|
77
|
-
arg_name = arg.arg
|
|
78
|
-
# Ignore common built-in fixtures
|
|
79
|
-
if arg_name not in ["request", "monkeypatch", "capsys", "tmpdir", "self", "cls"]:
|
|
80
|
-
if known_fixtures and arg_name not in known_fixtures:
|
|
81
|
-
missing.append(f"Fixture '{arg_name}' requested by {node.name} not found in registry.")
|
|
82
|
-
|
|
83
|
-
if missing:
|
|
84
|
-
return False, "\n".join(missing)
|
|
85
|
-
return True, ""
|
|
86
|
-
|
|
87
|
-
def validate_pytest_collection(self, file_path: Path) -> Tuple[bool, str]:
|
|
88
|
-
"""Stage 4: Perform a pytest dry-run (collection only)."""
|
|
89
|
-
if not file_path.exists():
|
|
90
|
-
return False, f"File {file_path} does not exist."
|
|
91
|
-
|
|
92
|
-
# Run pytest --collect-only
|
|
93
|
-
try:
|
|
94
|
-
# Note: Requires pytest to be installed in the environment running the server
|
|
95
|
-
result = subprocess.run(
|
|
96
|
-
["pytest", "--collect-only", str(file_path)],
|
|
97
|
-
capture_output=True,
|
|
98
|
-
text=True,
|
|
99
|
-
cwd=str(self.repo_path)
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
if result.returncode != 0:
|
|
103
|
-
# 5 means no tests collected, which is also an error for us
|
|
104
|
-
if result.returncode == 5:
|
|
105
|
-
return False, "Pytest collected 0 tests."
|
|
106
|
-
return False, f"Pytest collection failed:\n{result.stderr or result.stdout}"
|
|
107
|
-
|
|
108
|
-
return True, ""
|
|
109
|
-
except Exception as e:
|
|
110
|
-
return False, f"Error running pytest collection: {e}"
|
|
111
|
-
|
|
112
|
-
def validate_pipeline(self, code: str, file_path: Path) -> Tuple[bool, str, str]:
|
|
113
|
-
"""Run all execution validation stages."""
|
|
114
|
-
logger.info(f"Starting execution validation pipeline for {file_path}")
|
|
115
|
-
|
|
116
|
-
ok, err = self.validate_syntax(code)
|
|
117
|
-
if not ok: return False, "syntax_failed", err
|
|
118
|
-
|
|
119
|
-
ok, err = self.validate_imports(code)
|
|
120
|
-
if not ok: return False, "import_failed", err
|
|
121
|
-
|
|
122
|
-
ok, err = self.validate_fixtures(code)
|
|
123
|
-
if not ok: return False, "fixture_failed", err
|
|
124
|
-
|
|
125
|
-
ok, err = self.validate_pytest_collection(file_path)
|
|
126
|
-
if not ok: return False, "collection_failed", err
|
|
127
|
-
|
|
128
|
-
logger.info(f"Execution validation passed for {file_path}")
|
|
129
|
-
return True, "passed", ""
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
"""Intent classification agent — Phase 5."""
|
|
2
|
-
from __future__ import annotations
|
|
3
|
-
|
|
4
|
-
import re
|
|
5
|
-
|
|
6
|
-
from knowledge_base.agents.state import AgenticState
|
|
7
|
-
|
|
8
|
-
_FEATURE_MAP = {
|
|
9
|
-
"entra": "Entra ID SSO",
|
|
10
|
-
"sso": "Entra ID SSO",
|
|
11
|
-
"mfa": "Entra ID MFA",
|
|
12
|
-
"wifi": "Network WiFi 802.1x",
|
|
13
|
-
"802.1": "Network WiFi 802.1x",
|
|
14
|
-
"icg": "ICG Certificate Management",
|
|
15
|
-
"certificate": "ICG Certificate Management",
|
|
16
|
-
"chromium": "Chromium Browser",
|
|
17
|
-
"ums": "UMS Administration",
|
|
18
|
-
"profile": "UMS Profile Assignment",
|
|
19
|
-
"amd": "AMD Driver Integration",
|
|
20
|
-
"hub": "Device Onboarding IGEL Hub",
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
_VERSIONS = ("12.8", "12.9", "12.10")
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
def intent_agent(state: AgenticState) -> AgenticState:
|
|
27
|
-
query = state.get("query", "")
|
|
28
|
-
q_lower = query.lower()
|
|
29
|
-
|
|
30
|
-
if any(w in q_lower for w in ("transform", "restructure", "reformat", "improve this")):
|
|
31
|
-
intent = "transform"
|
|
32
|
-
elif any(w in q_lower for w in ("expand", "add detail", "step-by-step")):
|
|
33
|
-
intent = "expand"
|
|
34
|
-
else:
|
|
35
|
-
intent = "synthesize"
|
|
36
|
-
|
|
37
|
-
feature = "Unknown"
|
|
38
|
-
for kw, name in _FEATURE_MAP.items():
|
|
39
|
-
if kw in q_lower:
|
|
40
|
-
feature = name
|
|
41
|
-
break
|
|
42
|
-
|
|
43
|
-
version_scope = "unspecified"
|
|
44
|
-
categories: list[str] = []
|
|
45
|
-
for v in _VERSIONS:
|
|
46
|
-
if v in query or f"os {v}" in q_lower:
|
|
47
|
-
version_scope = v
|
|
48
|
-
categories.append("version_specific")
|
|
49
|
-
break
|
|
50
|
-
if version_scope == "unspecified":
|
|
51
|
-
categories.append("version_unspecified")
|
|
52
|
-
|
|
53
|
-
if any(w in q_lower for w in ("fail", "error", "negative", "boundary")):
|
|
54
|
-
categories.append("negative_case")
|
|
55
|
-
if any(w in q_lower for w in ("regression", "release", "change impact")):
|
|
56
|
-
categories.append("regression")
|
|
57
|
-
if any(w in q_lower for w in ("debug", "troubleshoot", "root cause")):
|
|
58
|
-
categories.append("troubleshooting")
|
|
59
|
-
if any(w in q_lower for w in ("registry", "profile", "configure", "setting")):
|
|
60
|
-
categories.append("configuration")
|
|
61
|
-
if intent == "synthesize" and feature == "Unknown":
|
|
62
|
-
categories.append("feature_unclear")
|
|
63
|
-
|
|
64
|
-
state["intent"] = intent
|
|
65
|
-
state["feature_area"] = feature
|
|
66
|
-
state["version_scope"] = version_scope
|
|
67
|
-
state["query_categories"] = categories
|
|
68
|
-
state.setdefault("agent_trace", []).append({
|
|
69
|
-
"agent": "IntentAgent",
|
|
70
|
-
"status": "complete",
|
|
71
|
-
"intent": intent,
|
|
72
|
-
"feature_area": feature,
|
|
73
|
-
"version_scope": version_scope,
|
|
74
|
-
"query_categories": categories,
|
|
75
|
-
})
|
|
76
|
-
return state
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import logging
|
|
3
|
-
from typing import Dict, Any
|
|
4
|
-
from openai import AzureOpenAI
|
|
5
|
-
from knowledge_base.config import cfg
|
|
6
|
-
from knowledge_base.models.test_requirement import RequirementUnderstanding, TestRequirement
|
|
7
|
-
|
|
8
|
-
logger = logging.getLogger(__name__)
|
|
9
|
-
|
|
10
|
-
_SYSTEM_PROMPT = """You are an expert IGEL Quality Engineering Architect.
|
|
11
|
-
Your task is to analyze a raw Jira/Xray Test Requirement and extract critical domain understanding.
|
|
12
|
-
You must extract actors, entities, explicit business rules, validations, constraints, and dependencies.
|
|
13
|
-
Output MUST be valid JSON matching this schema:
|
|
14
|
-
{
|
|
15
|
-
"actors": ["string"],
|
|
16
|
-
"entities": ["string"],
|
|
17
|
-
"business_rules": ["string"],
|
|
18
|
-
"validations": ["string"],
|
|
19
|
-
"constraints": ["string"],
|
|
20
|
-
"dependencies": ["string"]
|
|
21
|
-
}
|
|
22
|
-
"""
|
|
23
|
-
|
|
24
|
-
_llm_client: AzureOpenAI | None = None
|
|
25
|
-
|
|
26
|
-
def _get_llm_client() -> AzureOpenAI:
|
|
27
|
-
global _llm_client
|
|
28
|
-
if _llm_client is None:
|
|
29
|
-
_llm_client = AzureOpenAI(
|
|
30
|
-
api_key=cfg.AZURE_API_KEY,
|
|
31
|
-
azure_endpoint=cfg.AZURE_ENDPOINT,
|
|
32
|
-
api_version=cfg.AZURE_API_VERSION,
|
|
33
|
-
)
|
|
34
|
-
return _llm_client
|
|
35
|
-
|
|
36
|
-
def extract_understanding(requirement: TestRequirement) -> RequirementUnderstanding:
|
|
37
|
-
"""Analyze a requirement and extract its core semantic understanding."""
|
|
38
|
-
client = _get_llm_client()
|
|
39
|
-
|
|
40
|
-
user_prompt = f"Requirement Key: {requirement.jira_key}\nSummary: {requirement.summary}\nDescription: {requirement.description or 'None'}\n"
|
|
41
|
-
|
|
42
|
-
try:
|
|
43
|
-
response = client.chat.completions.create(
|
|
44
|
-
model=cfg.AZURE_DEPLOYMENT,
|
|
45
|
-
messages=[
|
|
46
|
-
{"role": "system", "content": _SYSTEM_PROMPT},
|
|
47
|
-
{"role": "user", "content": user_prompt},
|
|
48
|
-
],
|
|
49
|
-
response_format={"type": "json_object"},
|
|
50
|
-
temperature=0.1,
|
|
51
|
-
max_tokens=1500,
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
content = response.choices[0].message.content or "{}"
|
|
55
|
-
data = json.loads(content)
|
|
56
|
-
|
|
57
|
-
understanding = RequirementUnderstanding(
|
|
58
|
-
actors=data.get("actors", []),
|
|
59
|
-
entities=data.get("entities", []),
|
|
60
|
-
business_rules=data.get("business_rules", []),
|
|
61
|
-
validations=data.get("validations", []),
|
|
62
|
-
constraints=data.get("constraints", []),
|
|
63
|
-
dependencies=data.get("dependencies", [])
|
|
64
|
-
)
|
|
65
|
-
logger.info(f"Successfully extracted understanding for {requirement.jira_key}")
|
|
66
|
-
return understanding
|
|
67
|
-
|
|
68
|
-
except Exception as e:
|
|
69
|
-
logger.error(f"Failed to extract understanding for {requirement.jira_key}: {e}")
|
|
70
|
-
# Return empty understanding on failure to not block the pipeline
|
|
71
|
-
return RequirementUnderstanding()
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import logging
|
|
3
|
-
from typing import List, Dict, Any
|
|
4
|
-
from openai import AzureOpenAI
|
|
5
|
-
from knowledge_base.config import cfg
|
|
6
|
-
from knowledge_base.models.test_requirement import (
|
|
7
|
-
TestRequirement,
|
|
8
|
-
ScenarioWithRules,
|
|
9
|
-
GeneratedTestCase,
|
|
10
|
-
ManualTestStep,
|
|
11
|
-
BusinessRule
|
|
12
|
-
)
|
|
13
|
-
from knowledge_base.agents.requirement_agent import _get_llm_client
|
|
14
|
-
|
|
15
|
-
logger = logging.getLogger(__name__)
|
|
16
|
-
|
|
17
|
-
_SYSTEM_PROMPT = """You are an expert IGEL Quality Engineering Architect.
|
|
18
|
-
Your task is to take a Business Rule for a specific Scenario and generate a detailed Manual Test Case.
|
|
19
|
-
The test case must strictly follow the business rule.
|
|
20
|
-
Output MUST be valid JSON matching this schema:
|
|
21
|
-
{
|
|
22
|
-
"title": "string",
|
|
23
|
-
"priority": "critical" | "high" | "medium" | "low",
|
|
24
|
-
"preconditions": ["string"],
|
|
25
|
-
"steps": [
|
|
26
|
-
{
|
|
27
|
-
"step_number": 1,
|
|
28
|
-
"action": "string",
|
|
29
|
-
"data": "string",
|
|
30
|
-
"expected_result": "string"
|
|
31
|
-
}
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
"""
|
|
35
|
-
|
|
36
|
-
def generate_test_case(requirement: TestRequirement, scenario_rules: ScenarioWithRules, rule: BusinessRule) -> GeneratedTestCase:
|
|
37
|
-
"""Generate a specific test case from a business rule."""
|
|
38
|
-
client = _get_llm_client()
|
|
39
|
-
|
|
40
|
-
# Construct context
|
|
41
|
-
user_prompt = f"Requirement: {requirement.summary}\n"
|
|
42
|
-
user_prompt += f"Scenario Action: {scenario_rules.scenario.action}\n"
|
|
43
|
-
user_prompt += f"Business Rule ({rule.rule_type}): {rule.description}\n\n"
|
|
44
|
-
user_prompt += "Generate a detailed manual test case for this business rule."
|
|
45
|
-
|
|
46
|
-
try:
|
|
47
|
-
response = client.chat.completions.create(
|
|
48
|
-
model=cfg.AZURE_DEPLOYMENT,
|
|
49
|
-
messages=[
|
|
50
|
-
{"role": "system", "content": _SYSTEM_PROMPT},
|
|
51
|
-
{"role": "user", "content": user_prompt},
|
|
52
|
-
],
|
|
53
|
-
response_format={"type": "json_object"},
|
|
54
|
-
temperature=0.2,
|
|
55
|
-
max_tokens=2000,
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
content = response.choices[0].message.content or "{}"
|
|
59
|
-
data = json.loads(content)
|
|
60
|
-
|
|
61
|
-
# Build manual steps
|
|
62
|
-
steps = []
|
|
63
|
-
for s in data.get("steps", []):
|
|
64
|
-
if isinstance(s, dict) and "action" in s and "expected_result" in s:
|
|
65
|
-
steps.append(ManualTestStep(
|
|
66
|
-
step_number=s.get("step_number", len(steps) + 1),
|
|
67
|
-
action=s["action"],
|
|
68
|
-
data=s.get("data", ""),
|
|
69
|
-
expected_result=s["expected_result"]
|
|
70
|
-
))
|
|
71
|
-
|
|
72
|
-
tc_ref = f"TC_{requirement.jira_key}_S{scenario_rules.scenario.step_number:02d}_{rule.rule_type[:1].upper()}"
|
|
73
|
-
|
|
74
|
-
tc = GeneratedTestCase(
|
|
75
|
-
tc_reference=tc_ref,
|
|
76
|
-
business_rule=rule,
|
|
77
|
-
title=data.get("title", f"Test for {rule.description}"),
|
|
78
|
-
test_type=rule.rule_type,
|
|
79
|
-
priority=data.get("priority", "medium"),
|
|
80
|
-
preconditions=data.get("preconditions", []),
|
|
81
|
-
steps=steps,
|
|
82
|
-
confidence_score=0.0,
|
|
83
|
-
confidence_metrics={}
|
|
84
|
-
)
|
|
85
|
-
logger.info(f"Generated test case {tc_ref} with {len(steps)} steps")
|
|
86
|
-
return tc
|
|
87
|
-
|
|
88
|
-
except Exception as e:
|
|
89
|
-
logger.error(f"Failed to generate test case for rule '{rule.description}': {e}")
|
|
90
|
-
# Return a stubbed TC on failure
|
|
91
|
-
return GeneratedTestCase(
|
|
92
|
-
tc_reference=f"TC_{requirement.jira_key}_ERR",
|
|
93
|
-
business_rule=rule,
|
|
94
|
-
title="Failed to generate",
|
|
95
|
-
test_type=rule.rule_type,
|
|
96
|
-
priority="low",
|
|
97
|
-
preconditions=[],
|
|
98
|
-
steps=[],
|
|
99
|
-
confidence_score=0.0,
|
|
100
|
-
confidence_metrics={}
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
def generate_cases_for_scenario(requirement: TestRequirement, scenario_rules: ScenarioWithRules) -> List[GeneratedTestCase]:
|
|
104
|
-
"""Generate test cases for all business rules in a scenario."""
|
|
105
|
-
cases = []
|
|
106
|
-
# Enumerate to make refs unique if there are multiple of same type
|
|
107
|
-
for i, rule in enumerate(scenario_rules.business_rules):
|
|
108
|
-
tc = generate_test_case(requirement, scenario_rules, rule)
|
|
109
|
-
tc.tc_reference = f"{tc.tc_reference}{i+1:02d}"
|
|
110
|
-
cases.append(tc)
|
|
111
|
-
return cases
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from pathlib import Path
|
|
3
|
-
from typing import List, Tuple
|
|
4
|
-
|
|
5
|
-
from knowledge_base.models.test_requirement import TestRequirement, GeneratedTestCase, TestCaseWithConfidence
|
|
6
|
-
from knowledge_base.agents.requirement_agent import extract_understanding
|
|
7
|
-
from knowledge_base.agents.scenario_agent import generate_all_scenarios
|
|
8
|
-
from knowledge_base.agents.testcase_agent import generate_cases_for_scenario
|
|
9
|
-
from knowledge_base.agents.validation_agent import run_validation_pipeline
|
|
10
|
-
from knowledge_base.agents.confidence_agent import compute_hybrid_confidence
|
|
11
|
-
from knowledge_base.agents.automation_design_agent import design_automation_plan
|
|
12
|
-
from knowledge_base.agents.script_generator_agent import generate_script
|
|
13
|
-
from knowledge_base.agents.execution_validation_agent import ExecutionValidationAgent
|
|
14
|
-
|
|
15
|
-
logger = logging.getLogger(__name__)
|
|
16
|
-
|
|
17
|
-
class WorkflowEngine:
|
|
18
|
-
"""Predictable orchestration engine replacing the bottleneck Queen Agent."""
|
|
19
|
-
|
|
20
|
-
def __init__(self, repo_path: Path):
|
|
21
|
-
self.repo_path = repo_path
|
|
22
|
-
self.exec_validator = ExecutionValidationAgent(repo_path)
|
|
23
|
-
|
|
24
|
-
def run_requirement_flow(self, req: TestRequirement) -> Tuple[TestRequirement, List]:
|
|
25
|
-
"""Requirement -> Requirement Understanding -> Scenario -> Business Rules"""
|
|
26
|
-
logger.info(f"Starting requirement flow for {req.jira_key}")
|
|
27
|
-
|
|
28
|
-
# 1. Understanding Layer
|
|
29
|
-
understanding = extract_understanding(req)
|
|
30
|
-
req.understanding = understanding
|
|
31
|
-
|
|
32
|
-
# 2. Scenario & Business Rules Layer
|
|
33
|
-
scenarios_with_rules = generate_all_scenarios(req)
|
|
34
|
-
|
|
35
|
-
# In reality, you'd persist `scenarios_with_rules` to DB here
|
|
36
|
-
return req, scenarios_with_rules
|
|
37
|
-
|
|
38
|
-
def run_testcase_flow(self, req: TestRequirement, scenarios_with_rules: List) -> List[TestCaseWithConfidence]:
|
|
39
|
-
"""Business Rules -> Test Cases -> Validation -> Confidence"""
|
|
40
|
-
logger.info(f"Starting test case flow for {req.jira_key}")
|
|
41
|
-
all_cases = []
|
|
42
|
-
|
|
43
|
-
for sr in scenarios_with_rules:
|
|
44
|
-
# 1. Generate Test Cases
|
|
45
|
-
tcs = generate_cases_for_scenario(req, sr)
|
|
46
|
-
|
|
47
|
-
for tc in tcs:
|
|
48
|
-
# 2. Structural/Traceability Validation
|
|
49
|
-
ok, errs = run_validation_pipeline(tc, sr)
|
|
50
|
-
if not ok:
|
|
51
|
-
# Depending on policy, skip or mark for human review
|
|
52
|
-
pass
|
|
53
|
-
|
|
54
|
-
# 3. Deterministic Confidence Scoring
|
|
55
|
-
tc_conf = compute_hybrid_confidence(tc, sr)
|
|
56
|
-
all_cases.append(tc_conf)
|
|
57
|
-
|
|
58
|
-
# Persist to igel_generated_testcases here
|
|
59
|
-
return all_cases
|
|
60
|
-
|
|
61
|
-
def run_script_flow(self, req: TestRequirement, test_cases: List[TestCaseWithConfidence], output_path: Path) -> Tuple[bool, str]:
|
|
62
|
-
"""Approved Test Cases -> Automation Design -> Script -> Execution Validation"""
|
|
63
|
-
logger.info(f"Starting script flow for {req.jira_key}")
|
|
64
|
-
|
|
65
|
-
# Filter for approved
|
|
66
|
-
approved = [tc for tc in test_cases if tc.is_approved]
|
|
67
|
-
if not approved:
|
|
68
|
-
return False, "No approved test cases available for automation."
|
|
69
|
-
|
|
70
|
-
# 1. Automation Design Agent
|
|
71
|
-
plan = design_automation_plan(test_cases)
|
|
72
|
-
|
|
73
|
-
# 2. Script Generator
|
|
74
|
-
ok, code, err = generate_script(test_cases, plan, output_path)
|
|
75
|
-
if not ok:
|
|
76
|
-
return False, err
|
|
77
|
-
|
|
78
|
-
# 3. Execution Validation Pipeline
|
|
79
|
-
ok, status, err = self.exec_validator.validate_pipeline(code, output_path)
|
|
80
|
-
|
|
81
|
-
# Persist to igel_automation_scripts here
|
|
82
|
-
|
|
83
|
-
if not ok:
|
|
84
|
-
logger.warning(f"Execution validation failed ({status}): {err}")
|
|
85
|
-
return False, err
|
|
86
|
-
|
|
87
|
-
return True, "Script successfully generated and validated."
|
|
Binary file
|