igel-qe-core 1.0.3 → 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 +115 -72
- package/dist/mcp/server.js +258 -17
- package/package.json +4 -4
- package/src/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/__pycache__/__init__.cpython-314.pyc +0 -0
- package/src/agents/__init__.py +3 -0
- package/src/agents/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/__init__.cpython-314.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__/automation_design_agent.cpython-314.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__/confidence_agent.cpython-314.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__/execution_validation_agent.cpython-314.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__/fusion_agent.cpython-314.pyc +0 -0
- package/src/agents/__pycache__/graph.cpython-314.pyc +0 -0
- package/src/agents/__pycache__/intent_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/intent_agent.cpython-314.pyc +0 -0
- package/src/agents/__pycache__/kg_agent.cpython-314.pyc +0 -0
- package/src/agents/__pycache__/memory_agent.cpython-314.pyc +0 -0
- package/src/agents/__pycache__/reflection_agent.cpython-314.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__/requirement_agent.cpython-314.pyc +0 -0
- package/src/agents/__pycache__/retrieval_agent.cpython-314.pyc +0 -0
- package/src/agents/__pycache__/scenario_agent.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/scenario_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/scenario_agent.cpython-314.pyc +0 -0
- package/src/agents/__pycache__/script_agent.cpython-314.pyc +0 -0
- package/src/agents/__pycache__/script_generator_agent.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/script_generator_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/script_generator_agent.cpython-314.pyc +0 -0
- package/src/agents/__pycache__/state.cpython-314.pyc +0 -0
- package/src/agents/__pycache__/temporal_agent.cpython-314.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__/testcase_agent.cpython-314.pyc +0 -0
- package/src/agents/__pycache__/validation_agent.cpython-311.pyc +0 -0
- package/src/agents/__pycache__/validation_agent.cpython-313.pyc +0 -0
- package/src/agents/__pycache__/validation_agent.cpython-314.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/src/agents/__pycache__/workflow_engine.cpython-314.pyc +0 -0
- package/{knowledge_base → src}/agents/automation_design_agent.py +14 -17
- 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/src/agents/feedback_agent.py +89 -0
- 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__/__init__.cpython-313.pyc +0 -0
- package/src/cli/__pycache__/__init__.cpython-314.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/src/cli/__pycache__/workflow_cli.cpython-314.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__/__init__.cpython-314.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/src/config/__pycache__/settings.cpython-313.pyc +0 -0
- package/src/config/__pycache__/settings.cpython-314.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__/__init__.cpython-314.pyc +0 -0
- package/src/connectors/__pycache__/base.cpython-311.pyc +0 -0
- package/src/connectors/__pycache__/base.cpython-313.pyc +0 -0
- package/src/connectors/__pycache__/base.cpython-314.pyc +0 -0
- package/src/connectors/__pycache__/jira_connector.cpython-311.pyc +0 -0
- package/src/connectors/__pycache__/jira_connector.cpython-313.pyc +0 -0
- package/src/connectors/__pycache__/jira_connector.cpython-314.pyc +0 -0
- package/src/connectors/__pycache__/query_bridge.cpython-313.pyc +0 -0
- package/src/connectors/__pycache__/query_bridge.cpython-314.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 +7 -11
- 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__/__init__.cpython-314.pyc +0 -0
- package/src/core/__pycache__/circuit_breaker.cpython-313.pyc +0 -0
- package/src/core/__pycache__/circuit_breaker.cpython-314.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__/confidence.cpython-314.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__/__init__.cpython-313.pyc +0 -0
- package/src/db/__pycache__/__init__.cpython-314.pyc +0 -0
- package/src/db/__pycache__/client.cpython-311.pyc +0 -0
- package/src/db/__pycache__/client.cpython-313.pyc +0 -0
- package/src/db/__pycache__/client.cpython-314.pyc +0 -0
- package/src/db/__pycache__/igel_schema.cpython-311.pyc +0 -0
- package/src/db/__pycache__/igel_schema.cpython-313.pyc +0 -0
- package/src/db/__pycache__/igel_schema.cpython-314.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/__pycache__/kg_introspect.cpython-314.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 +29 -4
- 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__/__init__.cpython-313.pyc +0 -0
- package/src/embeddings/__pycache__/__init__.cpython-314.pyc +0 -0
- package/src/embeddings/__pycache__/azure_embedder.cpython-311.pyc +0 -0
- package/src/embeddings/__pycache__/azure_embedder.cpython-313.pyc +0 -0
- package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-314.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__/__init__.cpython-314.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__/baseline.cpython-314.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__/harness.cpython-314.pyc +0 -0
- package/src/eval/__pycache__/scorers.cpython-311.pyc +0 -0
- package/src/eval/__pycache__/scorers.cpython-313.pyc +0 -0
- package/src/eval/__pycache__/scorers.cpython-314.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__/__init__.cpython-314.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__/prompts.cpython-314.pyc +0 -0
- package/src/generation/__pycache__/test_generator.cpython-313.pyc +0 -0
- package/src/generation/__pycache__/test_generator.cpython-314.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/src/memory/__pycache__/__init__.cpython-314.pyc +0 -0
- package/src/memory/__pycache__/cognee_client.cpython-314.pyc +0 -0
- package/src/memory/__pycache__/memory_types.cpython-314.pyc +0 -0
- package/{knowledge_base → src}/memory/cognee_client.py +3 -3
- package/src/models/__pycache__/test_requirement.cpython-311.pyc +0 -0
- package/src/models/__pycache__/test_requirement.cpython-313.pyc +0 -0
- package/src/models/__pycache__/test_requirement.cpython-314.pyc +0 -0
- package/{knowledge_base → src}/models/test_requirement.py +12 -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__/__init__.cpython-314.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__/knowledge_graph.cpython-314.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__/retriever.cpython-314.pyc +0 -0
- package/src/retrieval/__pycache__/unified_query.cpython-313.pyc +0 -0
- package/src/retrieval/__pycache__/unified_query.cpython-314.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/__pycache__/__init__.cpython-314.pyc +0 -0
- package/knowledge_base/agents/__init__.py +0 -6
- package/knowledge_base/agents/confidence_agent.py +0 -94
- package/knowledge_base/agents/feedback_agent.py +0 -56
- 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/generate_qcapps134.py +0 -391
- package/knowledge_base/cli/workflow_cli.py +0 -93
- package/knowledge_base/config/.env +0 -100
- package/knowledge_base/config/.env.example +0 -75
- package/knowledge_base/connectors/bitbucket_connector.py +0 -25
- package/knowledge_base/db/__pycache__/__init__.cpython-314.pyc +0 -0
- package/knowledge_base/db/__pycache__/client.cpython-314.pyc +0 -0
- package/knowledge_base/db/migrations.py +0 -22
- package/knowledge_base/embeddings/__pycache__/__init__.cpython-314.pyc +0 -0
- 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-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/__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__/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-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-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-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-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-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__/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__/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__/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-37.pyc +0 -0
- /package/{knowledge_base → src}/agents/__pycache__/temporal_agent.cpython-38.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/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-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}/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-37.pyc +0 -0
- /package/{knowledge_base → src}/config/__pycache__/settings.cpython-38.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-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-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-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-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-38.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-37.pyc +0 -0
- /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-38.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__/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-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-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-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-37.pyc +0 -0
- /package/{knowledge_base → src}/eval/__pycache__/baseline.cpython-38.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-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-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-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-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-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-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-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}/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-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-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-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-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,214 @@
|
|
|
1
|
+
"""init_check.py — Pre-flight connectivity checker for igel-qe init.
|
|
2
|
+
|
|
3
|
+
Failure semantics:
|
|
4
|
+
REQUIRED (hard block — init fails if these are down):
|
|
5
|
+
- PostgreSQL + pgvector extension
|
|
6
|
+
- Azure OpenAI (embedding + LLM endpoint)
|
|
7
|
+
|
|
8
|
+
OPTIONAL (soft warn — init continues; integration is just disabled):
|
|
9
|
+
- Jira
|
|
10
|
+
- Confluence
|
|
11
|
+
- Bitbucket
|
|
12
|
+
- Xray
|
|
13
|
+
|
|
14
|
+
Security:
|
|
15
|
+
- Error messages are sanitised before output: auth headers, tokens, passwords
|
|
16
|
+
are stripped from any exception text and replaced with [REDACTED].
|
|
17
|
+
- The summary JSON never echoes back credential values.
|
|
18
|
+
|
|
19
|
+
Output: single JSON object to stdout, suitable for Node.js IPC.
|
|
20
|
+
"""
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
import json
|
|
24
|
+
import re
|
|
25
|
+
import sys
|
|
26
|
+
import time
|
|
27
|
+
from pathlib import Path
|
|
28
|
+
|
|
29
|
+
_PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
|
|
30
|
+
if str(_PROJECT_ROOT) not in sys.path:
|
|
31
|
+
sys.path.insert(0, str(_PROJECT_ROOT))
|
|
32
|
+
|
|
33
|
+
from src.config import cfg # noqa: E402
|
|
34
|
+
|
|
35
|
+
# ── secret sanitiser ──────────────────────────────────────────────────────────
|
|
36
|
+
|
|
37
|
+
_SECRET_PATTERNS = [
|
|
38
|
+
re.compile(r"(Authorization:\s*(?:Bearer|Basic)\s+)\S+", re.IGNORECASE),
|
|
39
|
+
re.compile(r"(api[_-]?key\s*=\s*)[^\s,&]+", re.IGNORECASE),
|
|
40
|
+
re.compile(r"(token\s*=\s*)[^\s,&]+", re.IGNORECASE),
|
|
41
|
+
re.compile(r"(password\s*=\s*)[^\s,&]+", re.IGNORECASE),
|
|
42
|
+
re.compile(r"(secret\s*=\s*)[^\s,&]+", re.IGNORECASE),
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _sanitise(text: str) -> str:
|
|
47
|
+
for pattern in _SECRET_PATTERNS:
|
|
48
|
+
text = pattern.sub(r"\g<1>[REDACTED]", text)
|
|
49
|
+
# Also strip any value that looks like a JWT or long base64 token
|
|
50
|
+
text = re.sub(r"ey[A-Za-z0-9_\-]{20,}\.[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+", "[REDACTED_JWT]", text)
|
|
51
|
+
return text
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _safe_error(exc: Exception) -> str:
|
|
55
|
+
return _sanitise(str(exc))
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# ── individual checks ─────────────────────────────────────────────────────────
|
|
59
|
+
|
|
60
|
+
def _check_postgres() -> dict:
|
|
61
|
+
"""Required: PostgreSQL connection + pgvector extension."""
|
|
62
|
+
t0 = time.perf_counter()
|
|
63
|
+
try:
|
|
64
|
+
from src.db.client import get_conn
|
|
65
|
+
with get_conn() as conn:
|
|
66
|
+
with conn.cursor() as cur:
|
|
67
|
+
cur.execute("SELECT 1")
|
|
68
|
+
cur.execute("SELECT extname FROM pg_extension WHERE extname = 'vector'")
|
|
69
|
+
has_vector = cur.fetchone() is not None
|
|
70
|
+
ms = round((time.perf_counter() - t0) * 1000)
|
|
71
|
+
if not has_vector:
|
|
72
|
+
return {"status": "fail", "message": "pgvector extension not installed. Run: CREATE EXTENSION vector;", "ms": ms}
|
|
73
|
+
return {"status": "ok", "message": "PostgreSQL + pgvector ready", "ms": ms}
|
|
74
|
+
except Exception as e:
|
|
75
|
+
return {"status": "fail", "message": _safe_error(e), "ms": round((time.perf_counter() - t0) * 1000)}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _check_azure_openai() -> dict:
|
|
79
|
+
"""Required: Azure OpenAI endpoint reachable with valid credentials."""
|
|
80
|
+
t0 = time.perf_counter()
|
|
81
|
+
if not cfg.AZURE_API_KEY or not cfg.AZURE_ENDPOINT:
|
|
82
|
+
return {"status": "fail", "message": "AZURE_API_KEY or AZURE_ENDPOINT not set", "ms": 0}
|
|
83
|
+
try:
|
|
84
|
+
import httpx
|
|
85
|
+
with httpx.Client(timeout=10.0) as client:
|
|
86
|
+
resp = client.get(
|
|
87
|
+
f"{cfg.AZURE_ENDPOINT.rstrip('/')}/openai/models?api-version={cfg.AZURE_API_VERSION}",
|
|
88
|
+
headers={"api-key": cfg.AZURE_API_KEY},
|
|
89
|
+
)
|
|
90
|
+
# 200 or 401 both mean the endpoint is reachable; 401 means bad key
|
|
91
|
+
if resp.status_code == 401:
|
|
92
|
+
return {"status": "fail", "message": "Azure OpenAI credentials rejected (401)", "ms": round((time.perf_counter() - t0) * 1000)}
|
|
93
|
+
resp.raise_for_status()
|
|
94
|
+
return {"status": "ok", "message": "Azure OpenAI endpoint reachable", "ms": round((time.perf_counter() - t0) * 1000)}
|
|
95
|
+
except Exception as e:
|
|
96
|
+
return {"status": "fail", "message": _safe_error(e), "ms": round((time.perf_counter() - t0) * 1000)}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def _check_jira() -> dict:
|
|
100
|
+
"""Optional: Jira connectivity check."""
|
|
101
|
+
t0 = time.perf_counter()
|
|
102
|
+
if not cfg.JIRA_ENABLED:
|
|
103
|
+
return {"status": "skipped", "message": "JIRA_ENABLED=false", "ms": 0}
|
|
104
|
+
try:
|
|
105
|
+
from src.connectors.jira_connector import JiraConnector
|
|
106
|
+
c = JiraConnector()
|
|
107
|
+
ok = c.connect()
|
|
108
|
+
ms = round((time.perf_counter() - t0) * 1000)
|
|
109
|
+
return {"status": "ok" if ok else "warn", "message": "Jira connected" if ok else "Jira connection failed — check credentials", "ms": ms}
|
|
110
|
+
except Exception as e:
|
|
111
|
+
return {"status": "warn", "message": _safe_error(e), "ms": round((time.perf_counter() - t0) * 1000)}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def _check_confluence() -> dict:
|
|
115
|
+
"""Optional: Confluence connectivity check."""
|
|
116
|
+
t0 = time.perf_counter()
|
|
117
|
+
if not cfg.CONFLUENCE_ENABLED:
|
|
118
|
+
return {"status": "skipped", "message": "CONFLUENCE_ENABLED=false", "ms": 0}
|
|
119
|
+
try:
|
|
120
|
+
from src.connectors.confluence_connector import ConfluenceConnector
|
|
121
|
+
c = ConfluenceConnector()
|
|
122
|
+
ok = c.connect()
|
|
123
|
+
ms = round((time.perf_counter() - t0) * 1000)
|
|
124
|
+
return {"status": "ok" if ok else "warn", "message": "Confluence connected" if ok else "Confluence connection failed", "ms": ms}
|
|
125
|
+
except Exception as e:
|
|
126
|
+
return {"status": "warn", "message": _safe_error(e), "ms": round((time.perf_counter() - t0) * 1000)}
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def _check_bitbucket() -> dict:
|
|
130
|
+
"""Optional: Bitbucket connectivity check."""
|
|
131
|
+
t0 = time.perf_counter()
|
|
132
|
+
if not cfg.BITBUCKET_ENABLED:
|
|
133
|
+
return {"status": "skipped", "message": "BITBUCKET_ENABLED=false", "ms": 0}
|
|
134
|
+
try:
|
|
135
|
+
from src.connectors.bitbucket_connector import BitbucketConnector
|
|
136
|
+
c = BitbucketConnector()
|
|
137
|
+
ok = c.connect()
|
|
138
|
+
ms = round((time.perf_counter() - t0) * 1000)
|
|
139
|
+
return {"status": "ok" if ok else "warn", "message": "Bitbucket connected" if ok else "Bitbucket connection failed", "ms": ms}
|
|
140
|
+
except Exception as e:
|
|
141
|
+
return {"status": "warn", "message": _safe_error(e), "ms": round((time.perf_counter() - t0) * 1000)}
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def _check_xray() -> dict:
|
|
145
|
+
"""Optional: Xray connectivity check."""
|
|
146
|
+
t0 = time.perf_counter()
|
|
147
|
+
if not cfg.XRAY_ENABLED:
|
|
148
|
+
return {"status": "skipped", "message": "XRAY_ENABLED=false", "ms": 0}
|
|
149
|
+
try:
|
|
150
|
+
from src.connectors.xray_connector import XrayConnector
|
|
151
|
+
c = XrayConnector()
|
|
152
|
+
ok = c.connect()
|
|
153
|
+
ms = round((time.perf_counter() - t0) * 1000)
|
|
154
|
+
return {"status": "ok" if ok else "warn", "message": "Xray connected" if ok else "Xray authentication failed", "ms": ms}
|
|
155
|
+
except Exception as e:
|
|
156
|
+
return {"status": "warn", "message": _safe_error(e), "ms": round((time.perf_counter() - t0) * 1000)}
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
# ── runner ────────────────────────────────────────────────────────────────────
|
|
160
|
+
|
|
161
|
+
def run_checks() -> dict:
|
|
162
|
+
"""Run all checks and return a structured summary.
|
|
163
|
+
|
|
164
|
+
Returns:
|
|
165
|
+
{
|
|
166
|
+
"ready": bool, # True only if all REQUIRED checks pass
|
|
167
|
+
"checks": { ... }, # per-check results
|
|
168
|
+
"required_failed": [], # list of failed required check names
|
|
169
|
+
"warnings": [], # list of optional check names that warned
|
|
170
|
+
}
|
|
171
|
+
"""
|
|
172
|
+
required = {
|
|
173
|
+
"postgres": _check_postgres,
|
|
174
|
+
"azure_openai": _check_azure_openai,
|
|
175
|
+
}
|
|
176
|
+
optional = {
|
|
177
|
+
"jira": _check_jira,
|
|
178
|
+
"confluence": _check_confluence,
|
|
179
|
+
"bitbucket": _check_bitbucket,
|
|
180
|
+
"xray": _check_xray,
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
results: dict[str, dict] = {}
|
|
184
|
+
required_failed: list[str] = []
|
|
185
|
+
warnings: list[str] = []
|
|
186
|
+
|
|
187
|
+
for name, fn in required.items():
|
|
188
|
+
result = fn()
|
|
189
|
+
results[name] = result
|
|
190
|
+
if result["status"] == "fail":
|
|
191
|
+
required_failed.append(name)
|
|
192
|
+
|
|
193
|
+
for name, fn in optional.items():
|
|
194
|
+
result = fn()
|
|
195
|
+
results[name] = result
|
|
196
|
+
if result["status"] == "warn":
|
|
197
|
+
warnings.append(name)
|
|
198
|
+
|
|
199
|
+
return {
|
|
200
|
+
"ready": len(required_failed) == 0,
|
|
201
|
+
"checks": results,
|
|
202
|
+
"required_failed": required_failed,
|
|
203
|
+
"warnings": warnings,
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
def main() -> None:
|
|
208
|
+
summary = run_checks()
|
|
209
|
+
print(json.dumps(summary, indent=2))
|
|
210
|
+
sys.exit(0 if summary["ready"] else 1)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
if __name__ == "__main__":
|
|
214
|
+
main()
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Automation Design Prompt
|
|
2
|
+
|
|
3
|
+
{{include:policies/guardrails.md}}
|
|
4
|
+
{{include:policies/automation_generation_policy.md}}
|
|
5
|
+
|
|
6
|
+
You are the IGEL Test Script Planning specialist.
|
|
7
|
+
Your job is to design an automation plan from approved test cases and discovered assets.
|
|
8
|
+
|
|
9
|
+
Rules:
|
|
10
|
+
- Planning only. No code generation.
|
|
11
|
+
- Select only from provided available asset lists.
|
|
12
|
+
- Output MUST be valid JSON with keys: page_objects, fixtures, utilities.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Automation Generation Policy
|
|
2
|
+
|
|
3
|
+
- Maximize reuse in this order:
|
|
4
|
+
1. Existing business components
|
|
5
|
+
2. Existing APIs
|
|
6
|
+
3. Existing fixtures
|
|
7
|
+
4. Existing utilities
|
|
8
|
+
5. Existing page objects
|
|
9
|
+
- Never modify working framework assets without explicit approval.
|
|
10
|
+
- Keep script placement under tests/<category> and respect existing layer boundaries.
|
|
11
|
+
- Avoid hallucinated imports or utility calls.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generation Instructions
|
|
2
|
+
|
|
3
|
+
Purpose: enforce enterprise-grade detailedness and executability.
|
|
4
|
+
|
|
5
|
+
Detailedness rules:
|
|
6
|
+
- Assume executor has no IGEL or domain background.
|
|
7
|
+
- Outputs must be self-explanatory and directly actionable.
|
|
8
|
+
|
|
9
|
+
Test case rules:
|
|
10
|
+
- Cover positive, negative, and edge scenarios.
|
|
11
|
+
- Include objective, preconditions, dependencies, environment, data, explicit steps, expected result per step, cleanup, and post-conditions.
|
|
12
|
+
|
|
13
|
+
Step quality rules:
|
|
14
|
+
- One clear action per step.
|
|
15
|
+
- One explicit expected result per step.
|
|
16
|
+
- Avoid vague verbs like verify/check/open/navigate when they hide execution detail.
|
|
17
|
+
|
|
18
|
+
Token and context rules:
|
|
19
|
+
- Prefer context.md guidance before deep file traversal.
|
|
20
|
+
- Minimize unnecessary repo scanning.
|
|
21
|
+
|
|
22
|
+
Failure policy:
|
|
23
|
+
- Do not hallucinate missing context.
|
|
24
|
+
- Report context gaps and request clarification or SME review.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Guardrails
|
|
2
|
+
|
|
3
|
+
- IGEL OS12 only. Do not reference OS11.
|
|
4
|
+
- Do not invent APIs, fixtures, page objects, utilities, or behavior not grounded in supplied context.
|
|
5
|
+
- Preserve business intent and traceability from requirement -> rule -> testcase -> script.
|
|
6
|
+
- When constraints conflict, document conflict and require approval.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Traceability Policy
|
|
2
|
+
|
|
3
|
+
Every generated artifact must maintain links to:
|
|
4
|
+
- Requirement key
|
|
5
|
+
- Scenario / business rule source
|
|
6
|
+
- Test case identifier
|
|
7
|
+
- Referenced framework assets
|
|
8
|
+
|
|
9
|
+
Output should clearly indicate source assumptions, risks, and review recommendation where confidence is low.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""Prompt loader with lightweight include support.
|
|
2
|
+
|
|
3
|
+
Supported include syntax inside prompt files:
|
|
4
|
+
{{include:relative/path/from/src/prompts.md}}
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import logging
|
|
9
|
+
import re
|
|
10
|
+
from functools import lru_cache
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
_PROMPTS_ROOT = Path(__file__).resolve().parent
|
|
16
|
+
_INCLUDE_RE = re.compile(r"\{\{include:([^}]+)\}\}")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _resolve_with_includes(path: Path, seen: set[Path], depth: int = 0) -> str:
|
|
20
|
+
if depth > 8:
|
|
21
|
+
raise ValueError(f"Prompt include depth too large for {path}")
|
|
22
|
+
|
|
23
|
+
full = path.resolve()
|
|
24
|
+
if full in seen:
|
|
25
|
+
raise ValueError(f"Circular prompt include detected at {full}")
|
|
26
|
+
seen.add(full)
|
|
27
|
+
|
|
28
|
+
text = full.read_text(encoding="utf-8")
|
|
29
|
+
|
|
30
|
+
def _replace(match: re.Match) -> str:
|
|
31
|
+
rel = match.group(1).strip()
|
|
32
|
+
include_path = (_PROMPTS_ROOT / rel).resolve()
|
|
33
|
+
if not include_path.exists() or not include_path.is_file():
|
|
34
|
+
raise FileNotFoundError(f"Prompt include not found: {rel}")
|
|
35
|
+
return _resolve_with_includes(include_path, seen=set(seen), depth=depth + 1)
|
|
36
|
+
|
|
37
|
+
return _INCLUDE_RE.sub(_replace, text)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@lru_cache(maxsize=64)
|
|
41
|
+
def load_prompt(rel_path: str, fallback: str = "") -> str:
|
|
42
|
+
"""Load a prompt from src/prompts with include expansion.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
rel_path: Path relative to src/prompts (e.g. "test_case_generator.md").
|
|
46
|
+
fallback: Returned when file cannot be loaded.
|
|
47
|
+
"""
|
|
48
|
+
try:
|
|
49
|
+
path = (_PROMPTS_ROOT / rel_path).resolve()
|
|
50
|
+
if not path.exists() or not path.is_file():
|
|
51
|
+
logger.warning("Prompt file missing: %s", rel_path)
|
|
52
|
+
return fallback
|
|
53
|
+
return _resolve_with_includes(path, seen=set())
|
|
54
|
+
except Exception as exc:
|
|
55
|
+
logger.warning("Failed to load prompt '%s': %s", rel_path, exc)
|
|
56
|
+
return fallback
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Requirement Understanding Prompt
|
|
2
|
+
|
|
3
|
+
{{include:policies/guardrails.md}}
|
|
4
|
+
{{include:policies/generation_instructions.md}}
|
|
5
|
+
|
|
6
|
+
You are the IGEL Test Case Planning specialist.
|
|
7
|
+
Analyze a Jira/Xray requirement and extract normalized semantic understanding.
|
|
8
|
+
|
|
9
|
+
Output MUST be valid JSON:
|
|
10
|
+
{
|
|
11
|
+
"actors": ["string"],
|
|
12
|
+
"entities": ["string"],
|
|
13
|
+
"business_rules": ["string"],
|
|
14
|
+
"validations": ["string"],
|
|
15
|
+
"constraints": ["string"],
|
|
16
|
+
"dependencies": ["string"]
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Scenario Generator Prompt
|
|
2
|
+
|
|
3
|
+
{{include:policies/guardrails.md}}
|
|
4
|
+
{{include:policies/generation_instructions.md}}
|
|
5
|
+
|
|
6
|
+
Generate exhaustive business rules for a single scenario step.
|
|
7
|
+
Include positive, negative, and edge rule candidates.
|
|
8
|
+
|
|
9
|
+
Output MUST be valid JSON:
|
|
10
|
+
{
|
|
11
|
+
"business_rules": [
|
|
12
|
+
{
|
|
13
|
+
"rule_type": "positive" | "negative" | "edge",
|
|
14
|
+
"description": "string"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Script Generator Prompt
|
|
2
|
+
|
|
3
|
+
{{include:policies/guardrails.md}}
|
|
4
|
+
{{include:policies/automation_generation_policy.md}}
|
|
5
|
+
{{include:policies/generation_instructions.md}}
|
|
6
|
+
{{include:policies/traceability_policy.md}}
|
|
7
|
+
|
|
8
|
+
You generate enterprise-grade pytest automation scripts from approved test cases and automation plan.
|
|
9
|
+
|
|
10
|
+
Hard constraints:
|
|
11
|
+
- Use ONLY fixtures/page objects/utilities provided in the automation plan.
|
|
12
|
+
- Do not hallucinate imports or helpers.
|
|
13
|
+
- Produce valid Python 3 code.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Test Case Generator Prompt
|
|
2
|
+
|
|
3
|
+
{{include:policies/guardrails.md}}
|
|
4
|
+
{{include:policies/generation_instructions.md}}
|
|
5
|
+
{{include:policies/traceability_policy.md}}
|
|
6
|
+
|
|
7
|
+
Generate a detailed manual test case for the supplied business rule and scenario context.
|
|
8
|
+
Do not invent product behavior outside provided context.
|
|
9
|
+
|
|
10
|
+
Output MUST be valid JSON:
|
|
11
|
+
{
|
|
12
|
+
"title": "string",
|
|
13
|
+
"priority": "critical" | "high" | "medium" | "low",
|
|
14
|
+
"preconditions": ["string"],
|
|
15
|
+
"steps": [
|
|
16
|
+
{
|
|
17
|
+
"step_number": 1,
|
|
18
|
+
"action": "string",
|
|
19
|
+
"data": "string",
|
|
20
|
+
"expected_result": "string"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -5,15 +5,15 @@ from __future__ import annotations
|
|
|
5
5
|
import logging
|
|
6
6
|
from typing import TYPE_CHECKING
|
|
7
7
|
|
|
8
|
-
from
|
|
9
|
-
from
|
|
8
|
+
from src.config import cfg
|
|
9
|
+
from src.core.precedence import (
|
|
10
10
|
apply_precedence_filter,
|
|
11
11
|
detect_precedence_conflicts,
|
|
12
12
|
infer_source_type,
|
|
13
13
|
)
|
|
14
14
|
|
|
15
15
|
if TYPE_CHECKING:
|
|
16
|
-
from
|
|
16
|
+
from src.retrieval.retriever import SearchResult
|
|
17
17
|
|
|
18
18
|
logger = logging.getLogger(__name__)
|
|
19
19
|
|
|
@@ -6,8 +6,8 @@ import logging
|
|
|
6
6
|
import re
|
|
7
7
|
from dataclasses import dataclass
|
|
8
8
|
|
|
9
|
-
from
|
|
10
|
-
from
|
|
9
|
+
from src.db.client import get_conn
|
|
10
|
+
from src.db.kg_introspect import get_kg_layout
|
|
11
11
|
|
|
12
12
|
logger = logging.getLogger(__name__)
|
|
13
13
|
|
|
@@ -146,10 +146,10 @@ def retrieve_kg_context(
|
|
|
146
146
|
Expand around nodes matching query terms (+ optional anchor parent chunks).
|
|
147
147
|
Routes to Neo4j when KG_BACKEND=neo4j, else PostgreSQL.
|
|
148
148
|
"""
|
|
149
|
-
from
|
|
149
|
+
from src.config import cfg
|
|
150
150
|
|
|
151
151
|
if cfg.KG_BACKEND == "neo4j":
|
|
152
|
-
from
|
|
152
|
+
from src.graph_db.kg_traversal import retrieve_kg_context_neo4j
|
|
153
153
|
|
|
154
154
|
return retrieve_kg_context_neo4j(
|
|
155
155
|
query,
|
|
@@ -22,7 +22,7 @@ import os
|
|
|
22
22
|
from dataclasses import dataclass, field
|
|
23
23
|
from time import perf_counter
|
|
24
24
|
|
|
25
|
-
from
|
|
25
|
+
from src.config import cfg
|
|
26
26
|
|
|
27
27
|
logger = logging.getLogger(__name__)
|
|
28
28
|
|
|
@@ -93,7 +93,7 @@ def _load_cross_encoder(model_name: str):
|
|
|
93
93
|
except ImportError as e:
|
|
94
94
|
raise ImportError(
|
|
95
95
|
"sentence-transformers not available. Run: "
|
|
96
|
-
"bash
|
|
96
|
+
"bash src/deploy/install_reranker.sh"
|
|
97
97
|
) from e
|
|
98
98
|
|
|
99
99
|
logger.info(
|
|
@@ -18,9 +18,9 @@ from time import perf_counter
|
|
|
18
18
|
|
|
19
19
|
import psycopg2
|
|
20
20
|
|
|
21
|
-
from
|
|
22
|
-
from
|
|
23
|
-
from
|
|
21
|
+
from src.db.client import get_conn, init_pool
|
|
22
|
+
from src.embeddings.azure_embedder import embed_single, format_for_pgvector
|
|
23
|
+
from src.retrieval.knowledge_graph import (
|
|
24
24
|
KGContext,
|
|
25
25
|
classify_query_style,
|
|
26
26
|
retrieve_kg_context,
|
|
@@ -99,7 +99,7 @@ def retrieve(
|
|
|
99
99
|
if "vector" in str(e).lower():
|
|
100
100
|
logger.error(
|
|
101
101
|
"pgvector extension not available. Run: CREATE EXTENSION IF NOT EXISTS vector; "
|
|
102
|
-
"then re-run
|
|
102
|
+
"then re-run src.ingestion.ingest"
|
|
103
103
|
)
|
|
104
104
|
else:
|
|
105
105
|
logger.error("Vector search failed: %s", e)
|
|
@@ -184,7 +184,7 @@ def _embed_query(query: str) -> list[float]:
|
|
|
184
184
|
return embed_single(query)
|
|
185
185
|
except Exception as e:
|
|
186
186
|
logger.warning("Embedding failed for query, falling back to FTS only: %s", e)
|
|
187
|
-
from
|
|
187
|
+
from src.config import cfg
|
|
188
188
|
return [0.0] * cfg.EMBEDDING_DIM
|
|
189
189
|
|
|
190
190
|
|
|
@@ -346,10 +346,10 @@ def retrieve_v3(
|
|
|
346
346
|
"""
|
|
347
347
|
Hybrid retrieval with RRF, optional cross-encoder reranking, KG context, fusion, debug traces.
|
|
348
348
|
"""
|
|
349
|
-
from
|
|
350
|
-
from
|
|
351
|
-
from
|
|
352
|
-
from
|
|
349
|
+
from src.config import cfg
|
|
350
|
+
from src.retrieval.context_fusion import fuse_retrieval_context
|
|
351
|
+
from src.retrieval.reranker import RerankItem, rerank_passages
|
|
352
|
+
from src.retrieval.retrieval_debug import ChunkScoreTrace, RetrievalDebugReport
|
|
353
353
|
|
|
354
354
|
timings: dict[str, float] = {}
|
|
355
355
|
debug = RetrievalDebugReport(
|
|
@@ -420,7 +420,7 @@ def retrieve_v3(
|
|
|
420
420
|
t_web = perf_counter()
|
|
421
421
|
if getattr(cfg, "WEB_RETRIEVAL_ENABLED", False):
|
|
422
422
|
try:
|
|
423
|
-
from
|
|
423
|
+
from src.retrieval.web_retriever import retrieve_web_context, format_web_block
|
|
424
424
|
|
|
425
425
|
web_hits = retrieve_web_context(
|
|
426
426
|
query,
|
|
@@ -606,7 +606,7 @@ def retrieve_v3(
|
|
|
606
606
|
local_top_score = min(1.0, (0.6 * sorted_scores[0]) + (0.4 * margin))
|
|
607
607
|
if getattr(cfg, "WEB_RETRIEVAL_ENABLED", False):
|
|
608
608
|
try:
|
|
609
|
-
from
|
|
609
|
+
from src.retrieval.web_retriever import retrieve_web_context, format_web_block
|
|
610
610
|
|
|
611
611
|
web_hits = retrieve_web_context(
|
|
612
612
|
query,
|
|
@@ -9,17 +9,17 @@ import random
|
|
|
9
9
|
from dataclasses import dataclass, field
|
|
10
10
|
from time import perf_counter
|
|
11
11
|
|
|
12
|
-
from
|
|
13
|
-
from
|
|
14
|
-
from
|
|
12
|
+
from src.config import cfg
|
|
13
|
+
from src.connectors.query_bridge import ExternalContext, query_mcp_sources
|
|
14
|
+
from src.retrieval.retriever import RetrievalBundle, retrieve_v3
|
|
15
15
|
|
|
16
16
|
logger = logging.getLogger(__name__)
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
def _empty_bundle(query: str, *, reason: str) -> RetrievalBundle:
|
|
20
20
|
"""Build a safe empty fallback bundle for timeout/error paths."""
|
|
21
|
-
from
|
|
22
|
-
from
|
|
21
|
+
from src.retrieval.knowledge_graph import KGContext
|
|
22
|
+
from src.retrieval.retrieval_debug import RetrievalDebugReport
|
|
23
23
|
|
|
24
24
|
return RetrievalBundle(
|
|
25
25
|
results=[],
|
|
@@ -95,8 +95,8 @@ def _maybe_persist_trace(query: str, result: "UnifiedQueryResult") -> None:
|
|
|
95
95
|
if rate <= 0 or random.random() > rate:
|
|
96
96
|
return
|
|
97
97
|
try:
|
|
98
|
-
from
|
|
99
|
-
from
|
|
98
|
+
from src.core.request_context import get_request_id
|
|
99
|
+
from src.db.client import get_conn
|
|
100
100
|
import json
|
|
101
101
|
with get_conn() as conn:
|
|
102
102
|
with conn.cursor() as cur:
|
|
@@ -9,11 +9,11 @@ from dataclasses import dataclass, field
|
|
|
9
9
|
from time import perf_counter
|
|
10
10
|
from urllib.parse import urlparse
|
|
11
11
|
|
|
12
|
-
from
|
|
13
|
-
from
|
|
14
|
-
from
|
|
15
|
-
from
|
|
16
|
-
from
|
|
12
|
+
from src.config import cfg
|
|
13
|
+
from src.connectors.search_backends import get_configured_backends
|
|
14
|
+
from src.connectors.web_fetcher import fetch_url, is_safe_fetch_target
|
|
15
|
+
from src.parsers.html_parser import parse_html_page
|
|
16
|
+
from src.retrieval.reranker import rerank_web_pages
|
|
17
17
|
|
|
18
18
|
logger = logging.getLogger(__name__)
|
|
19
19
|
|
|
@@ -136,7 +136,7 @@ async def _fetch_page_content_crawl4ai(url: str, query: str) -> tuple[str, str]:
|
|
|
136
136
|
|
|
137
137
|
|
|
138
138
|
def _fetch_page_content_playwright(url: str) -> tuple[str, str]:
|
|
139
|
-
from
|
|
139
|
+
from src.connectors.playwright_fetcher import fetch_page_playwright, playwright_available
|
|
140
140
|
|
|
141
141
|
if not playwright_available():
|
|
142
142
|
raise ImportError("playwright not installed")
|
|
File without changes
|
|
@@ -16,7 +16,7 @@ from dataclasses import dataclass, field
|
|
|
16
16
|
from openai import AzureOpenAI
|
|
17
17
|
from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type
|
|
18
18
|
|
|
19
|
-
from
|
|
19
|
+
from src.config import cfg
|
|
20
20
|
|
|
21
21
|
logger = logging.getLogger(__name__)
|
|
22
22
|
|
|
Binary file
|