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.
Files changed (632) hide show
  1. package/dist/cli/index.js +638 -54
  2. package/dist/cli/platform.js +0 -12
  3. package/dist/mcp/server.js +183 -8
  4. package/package.json +4 -4
  5. package/src/__pycache__/__init__.cpython-311.pyc +0 -0
  6. package/src/agents/__pycache__/__init__.cpython-311.pyc +0 -0
  7. package/src/agents/__pycache__/automation_design_agent.cpython-311.pyc +0 -0
  8. package/src/agents/__pycache__/automation_design_agent.cpython-313.pyc +0 -0
  9. package/src/agents/__pycache__/code_intelligence_agent.cpython-311.pyc +0 -0
  10. package/src/agents/__pycache__/code_intelligence_agent.cpython-313.pyc +0 -0
  11. package/src/agents/__pycache__/confidence_agent.cpython-311.pyc +0 -0
  12. package/src/agents/__pycache__/confidence_agent.cpython-313.pyc +0 -0
  13. package/src/agents/__pycache__/execution_validation_agent.cpython-311.pyc +0 -0
  14. package/src/agents/__pycache__/execution_validation_agent.cpython-313.pyc +0 -0
  15. package/src/agents/__pycache__/framework_analyzer_agent.cpython-311.pyc +0 -0
  16. package/src/agents/__pycache__/framework_analyzer_agent.cpython-313.pyc +0 -0
  17. package/src/agents/__pycache__/intent_agent.cpython-313.pyc +0 -0
  18. package/src/agents/__pycache__/regression_agent.cpython-311.pyc +0 -0
  19. package/src/agents/__pycache__/regression_agent.cpython-313.pyc +0 -0
  20. package/src/agents/__pycache__/requirement_agent.cpython-311.pyc +0 -0
  21. package/src/agents/__pycache__/requirement_agent.cpython-313.pyc +0 -0
  22. package/src/agents/__pycache__/scenario_agent.cpython-311.pyc +0 -0
  23. package/{knowledge_base → src}/agents/__pycache__/scenario_agent.cpython-313.pyc +0 -0
  24. package/src/agents/__pycache__/script_generator_agent.cpython-311.pyc +0 -0
  25. package/{knowledge_base → src}/agents/__pycache__/script_generator_agent.cpython-313.pyc +0 -0
  26. package/src/agents/__pycache__/testcase_agent.cpython-311.pyc +0 -0
  27. package/src/agents/__pycache__/testcase_agent.cpython-313.pyc +0 -0
  28. package/src/agents/__pycache__/validation_agent.cpython-311.pyc +0 -0
  29. package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-313.pyc +0 -0
  30. package/src/agents/__pycache__/workflow_engine.cpython-311.pyc +0 -0
  31. package/src/agents/__pycache__/workflow_engine.cpython-313.pyc +0 -0
  32. package/{knowledge_base → src}/agents/automation_design_agent.py +52 -22
  33. package/{knowledge_base → src}/agents/code_intelligence_agent.py +2 -2
  34. package/src/agents/confidence_agent.py +220 -0
  35. package/src/agents/execution_validation_agent.py +247 -0
  36. package/{knowledge_base → src}/agents/feedback_agent.py +36 -7
  37. package/src/agents/framework_analyzer_agent.py +43 -0
  38. package/{knowledge_base → src}/agents/fusion_agent.py +3 -3
  39. package/{knowledge_base → src}/agents/graph.py +10 -10
  40. package/{knowledge_base → src}/agents/healing_agent.py +4 -4
  41. package/src/agents/intent_agent.py +30 -0
  42. package/src/agents/internal/__init__.py +3 -0
  43. package/src/agents/internal/__pycache__/__init__.cpython-313.pyc +0 -0
  44. package/src/agents/internal/__pycache__/approval_manager.cpython-313.pyc +0 -0
  45. package/src/agents/internal/__pycache__/question_engine.cpython-313.pyc +0 -0
  46. package/src/agents/internal/approval_manager.py +111 -0
  47. package/src/agents/internal/question_engine.py +111 -0
  48. package/src/agents/internal/workflow_engine.py +28 -0
  49. package/{knowledge_base → src}/agents/kg_agent.py +3 -3
  50. package/{knowledge_base → src}/agents/memory_agent.py +4 -4
  51. package/src/agents/orchestrator/__init__.py +3 -0
  52. package/src/agents/orchestrator/__pycache__/__init__.cpython-313.pyc +0 -0
  53. package/src/agents/orchestrator/__pycache__/orchestrator.cpython-313.pyc +0 -0
  54. package/src/agents/orchestrator/orchestrator.py +63 -0
  55. package/{knowledge_base → src}/agents/rca_agent.py +4 -4
  56. package/{knowledge_base → src}/agents/reflection_agent.py +1 -1
  57. package/{knowledge_base → src}/agents/regression_agent.py +2 -2
  58. package/src/agents/requirement_agent.py +97 -0
  59. package/{knowledge_base → src}/agents/retrieval_agent.py +2 -2
  60. package/{knowledge_base → src}/agents/scenario_agent.py +11 -17
  61. package/{knowledge_base → src}/agents/script_agent.py +6 -6
  62. package/{knowledge_base → src}/agents/script_generator_agent.py +12 -10
  63. package/{knowledge_base → src}/agents/temporal_agent.py +3 -3
  64. package/src/agents/testcase_agent.py +163 -0
  65. package/{knowledge_base → src}/agents/validation_agent.py +1 -1
  66. package/src/agents/workflow_engine.py +114 -0
  67. package/{knowledge_base → src}/alembic/README.md +4 -4
  68. package/{knowledge_base → src}/alembic/env.py +1 -1
  69. package/{knowledge_base → src}/alembic/script.py.mako +1 -1
  70. package/{knowledge_base → src}/api/middleware.py +3 -3
  71. package/{knowledge_base → src}/api/server.py +28 -28
  72. package/{knowledge_base → src}/chunking/chunker.py +3 -3
  73. package/src/cli/__pycache__/__init__.cpython-311.pyc +0 -0
  74. package/src/cli/__pycache__/workflow_cli.cpython-311.pyc +0 -0
  75. package/src/cli/__pycache__/workflow_cli.cpython-313.pyc +0 -0
  76. package/{knowledge_base → src}/cli/feedback_cli.py +10 -10
  77. package/{knowledge_base → src}/cli/generate.py +11 -11
  78. package/src/cli/index.ts +704 -0
  79. package/src/cli/platform.ts +147 -0
  80. package/src/cli/workflow_cli.py +940 -0
  81. package/{knowledge_base → src}/config/__init__.py +1 -1
  82. package/src/config/__pycache__/__init__.cpython-311.pyc +0 -0
  83. package/src/config/__pycache__/__init__.cpython-313.pyc +0 -0
  84. package/src/config/__pycache__/policy_config.cpython-311.pyc +0 -0
  85. package/src/config/__pycache__/policy_config.cpython-313.pyc +0 -0
  86. package/src/config/__pycache__/settings.cpython-311.pyc +0 -0
  87. package/{knowledge_base → src}/config/__pycache__/settings.cpython-313.pyc +0 -0
  88. package/src/config/policy_config.py +85 -0
  89. package/src/config/policy_rules.yaml +50 -0
  90. package/{knowledge_base → src}/config/settings.py +51 -6
  91. package/{knowledge_base → src}/connectors/__init__.py +1 -1
  92. package/src/connectors/__pycache__/__init__.cpython-311.pyc +0 -0
  93. package/src/connectors/__pycache__/__init__.cpython-313.pyc +0 -0
  94. package/src/connectors/__pycache__/base.cpython-311.pyc +0 -0
  95. package/src/connectors/__pycache__/jira_connector.cpython-311.pyc +0 -0
  96. package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-313.pyc +0 -0
  97. package/src/connectors/__pycache__/query_bridge.cpython-313.pyc +0 -0
  98. package/src/connectors/bitbucket_connector.py +334 -0
  99. package/{knowledge_base → src}/connectors/community_connector.py +6 -6
  100. package/{knowledge_base → src}/connectors/confluence_connector.py +4 -4
  101. package/{knowledge_base → src}/connectors/jira_connector.py +6 -6
  102. package/{knowledge_base → src}/connectors/kb_igel_connector.py +6 -6
  103. package/{knowledge_base → src}/connectors/query_bridge.py +11 -11
  104. package/{knowledge_base → src}/connectors/search_backends.py +1 -1
  105. package/{knowledge_base → src}/connectors/serviceNow_connector.py +2 -2
  106. package/{knowledge_base → src}/connectors/sync_scheduler.py +12 -10
  107. package/{knowledge_base → src}/connectors/teamcity_connector.py +2 -2
  108. package/{knowledge_base → src}/connectors/testRail_connector.py +2 -2
  109. package/{knowledge_base → src}/connectors/web_fetcher.py +1 -1
  110. package/src/connectors/xray_connector.py +337 -0
  111. package/{knowledge_base → src}/core/__init__.py +1 -1
  112. package/src/core/__pycache__/__init__.cpython-311.pyc +0 -0
  113. package/src/core/__pycache__/__init__.cpython-313.pyc +0 -0
  114. package/src/core/__pycache__/circuit_breaker.cpython-313.pyc +0 -0
  115. package/src/core/__pycache__/confidence.cpython-311.pyc +0 -0
  116. package/src/core/__pycache__/confidence.cpython-313.pyc +0 -0
  117. package/src/core/__pycache__/context_engine.cpython-311.pyc +0 -0
  118. package/src/core/__pycache__/context_engine.cpython-313.pyc +0 -0
  119. package/src/core/__pycache__/evidence_resolver.cpython-311.pyc +0 -0
  120. package/src/core/__pycache__/evidence_resolver.cpython-313.pyc +0 -0
  121. package/src/core/__pycache__/guardrails.cpython-311.pyc +0 -0
  122. package/src/core/__pycache__/guardrails.cpython-313.pyc +0 -0
  123. package/src/core/__pycache__/hooks.cpython-311.pyc +0 -0
  124. package/src/core/__pycache__/hooks.cpython-313.pyc +0 -0
  125. package/src/core/__pycache__/intent_service.cpython-313.pyc +0 -0
  126. package/src/core/__pycache__/llm_executor.cpython-311.pyc +0 -0
  127. package/src/core/__pycache__/llm_executor.cpython-313.pyc +0 -0
  128. package/src/core/__pycache__/model_router.cpython-311.pyc +0 -0
  129. package/src/core/__pycache__/model_router.cpython-313.pyc +0 -0
  130. package/src/core/__pycache__/orchestration_contracts.cpython-311.pyc +0 -0
  131. package/src/core/__pycache__/orchestration_contracts.cpython-313.pyc +0 -0
  132. package/src/core/__pycache__/precedence.cpython-311.pyc +0 -0
  133. package/src/core/__pycache__/precedence.cpython-313.pyc +0 -0
  134. package/src/core/__pycache__/prompt_builder.cpython-311.pyc +0 -0
  135. package/src/core/__pycache__/prompt_builder.cpython-313.pyc +0 -0
  136. package/src/core/__pycache__/prompt_policy_engine.cpython-311.pyc +0 -0
  137. package/src/core/__pycache__/prompt_policy_engine.cpython-313.pyc +0 -0
  138. package/{knowledge_base → src}/core/cache.py +2 -2
  139. package/{knowledge_base → src}/core/confidence.py +2 -2
  140. package/src/core/context_engine.py +138 -0
  141. package/src/core/evidence_resolver.py +72 -0
  142. package/src/core/guardrails.py +22 -0
  143. package/src/core/hooks.py +57 -0
  144. package/src/core/intent_service.py +74 -0
  145. package/src/core/llm_executor.py +138 -0
  146. package/{knowledge_base → src}/core/logging_setup.py +1 -1
  147. package/src/core/model_router.py +246 -0
  148. package/src/core/orchestration_contracts.py +66 -0
  149. package/src/core/persistence_engine.py +159 -0
  150. package/src/core/prompt_builder.py +49 -0
  151. package/src/core/prompt_policy_engine.py +35 -0
  152. package/src/core/traceability_engine.py +56 -0
  153. package/src/db/__pycache__/__init__.cpython-311.pyc +0 -0
  154. package/src/db/__pycache__/client.cpython-311.pyc +0 -0
  155. package/{knowledge_base → src}/db/__pycache__/client.cpython-313.pyc +0 -0
  156. package/src/db/__pycache__/igel_schema.cpython-311.pyc +0 -0
  157. package/{knowledge_base → src}/db/__pycache__/igel_schema.cpython-313.pyc +0 -0
  158. package/src/db/__pycache__/kg_introspect.cpython-311.pyc +0 -0
  159. package/src/db/__pycache__/kg_introspect.cpython-313.pyc +0 -0
  160. package/{knowledge_base → src}/db/client.py +1 -1
  161. package/{knowledge_base → src}/db/connector_sync.py +1 -1
  162. package/{knowledge_base → src}/db/feedback_schema.py +2 -2
  163. package/{knowledge_base → src}/db/igel_schema.py +28 -3
  164. package/{knowledge_base → src}/db/kg_introspect.py +1 -1
  165. package/src/db/migrations.py +237 -0
  166. package/{knowledge_base → src}/db/schema.py +6 -6
  167. package/{knowledge_base → src}/deploy/Dockerfile +3 -3
  168. package/{knowledge_base → src}/deploy/feedback_automation.sh +3 -3
  169. package/{knowledge_base → src}/deploy/firecrawl-docker.sh +4 -4
  170. package/{knowledge_base → src}/deploy/igel-testgen.service +2 -2
  171. package/{knowledge_base → src}/deploy/install_reranker.sh +1 -1
  172. package/{knowledge_base → src}/deploy/requirements.txt +1 -2
  173. package/{knowledge_base → src}/deploy/run_server.sh +1 -1
  174. package/{knowledge_base → src}/docs/TEST_GENERATION_GUIDE.md +15 -15
  175. package/src/embeddings/__pycache__/__init__.cpython-311.pyc +0 -0
  176. package/src/embeddings/__pycache__/azure_embedder.cpython-311.pyc +0 -0
  177. package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-313.pyc +0 -0
  178. package/{knowledge_base → src}/embeddings/azure_embedder.py +10 -1
  179. package/{knowledge_base → src}/eval/__init__.py +3 -3
  180. package/{knowledge_base → src}/eval/__main__.py +7 -7
  181. package/src/eval/__pycache__/__init__.cpython-311.pyc +0 -0
  182. package/src/eval/__pycache__/__init__.cpython-313.pyc +0 -0
  183. package/src/eval/__pycache__/baseline.cpython-311.pyc +0 -0
  184. package/src/eval/__pycache__/baseline.cpython-313.pyc +0 -0
  185. package/src/eval/__pycache__/harness.cpython-311.pyc +0 -0
  186. package/src/eval/__pycache__/harness.cpython-313.pyc +0 -0
  187. package/src/eval/__pycache__/scorers.cpython-311.pyc +0 -0
  188. package/src/eval/__pycache__/scorers.cpython-313.pyc +0 -0
  189. package/{knowledge_base → src}/eval/harness.py +6 -6
  190. package/{knowledge_base → src}/feedback/__init__.py +1 -1
  191. package/{knowledge_base → src}/feedback/analytics.py +1 -1
  192. package/{knowledge_base → src}/feedback/applier.py +4 -4
  193. package/{knowledge_base → src}/feedback/curator.py +2 -2
  194. package/{knowledge_base → src}/feedback/handler.py +1 -1
  195. package/src/generation/__pycache__/__init__.cpython-313.pyc +0 -0
  196. package/src/generation/__pycache__/input_classifier.cpython-313.pyc +0 -0
  197. package/src/generation/__pycache__/manual_tc_parser.cpython-313.pyc +0 -0
  198. package/src/generation/__pycache__/prompts.cpython-313.pyc +0 -0
  199. package/src/generation/__pycache__/test_generator.cpython-313.pyc +0 -0
  200. package/{knowledge_base → src}/generation/input_classifier.py +1 -1
  201. package/{knowledge_base → src}/generation/prompts.py +1 -1
  202. package/{knowledge_base → src}/generation/tc_transformer.py +10 -10
  203. package/{knowledge_base → src}/generation/test_generator.py +56 -10
  204. package/{knowledge_base → src}/graph_db/__init__.py +1 -1
  205. package/{knowledge_base → src}/graph_db/graphiti_client.py +2 -2
  206. package/{knowledge_base → src}/graph_db/kg_traversal.py +3 -3
  207. package/{knowledge_base → src}/graph_db/migrate_kg.py +4 -4
  208. package/{knowledge_base → src}/graph_db/neo4j_client.py +1 -1
  209. package/{knowledge_base → src}/graph_db/temporal_ingest.py +1 -1
  210. package/{knowledge_base → src}/ingestion/kg_extractor.py +6 -6
  211. package/{knowledge_base → src}/ingestion/web_ingest.py +6 -6
  212. package/src/intelligence/__pycache__/__init__.cpython-311.pyc +0 -0
  213. package/src/intelligence/__pycache__/__init__.cpython-313.pyc +0 -0
  214. package/src/intelligence/__pycache__/diff_analyzer.cpython-311.pyc +0 -0
  215. package/src/intelligence/__pycache__/diff_analyzer.cpython-313.pyc +0 -0
  216. package/src/intelligence/__pycache__/routing_engine.cpython-311.pyc +0 -0
  217. package/src/intelligence/__pycache__/routing_engine.cpython-313.pyc +0 -0
  218. package/src/intelligence/diff_analyzer.py +109 -0
  219. package/{knowledge_base → src}/intelligence/execution_ingest.py +3 -3
  220. package/src/intelligence/routing_engine.py +74 -0
  221. package/src/mcp/server.ts +384 -0
  222. package/src/memory/__init__.py +6 -0
  223. package/{knowledge_base → src}/memory/cognee_client.py +3 -3
  224. package/src/models/__pycache__/test_requirement.cpython-311.pyc +0 -0
  225. package/{knowledge_base → src}/models/__pycache__/test_requirement.cpython-313.pyc +0 -0
  226. package/{knowledge_base → src}/models/test_requirement.py +19 -7
  227. package/{knowledge_base → src}/parsers/csv_parser.py +1 -1
  228. package/{knowledge_base → src}/parsers/doc_parser.py +1 -1
  229. package/{knowledge_base → src}/parsers/html_parser.py +1 -1
  230. package/{knowledge_base → src}/parsers/pdf_parser.py +1 -1
  231. package/src/project/__pycache__/__init__.cpython-311.pyc +0 -0
  232. package/src/project/__pycache__/__init__.cpython-313.pyc +0 -0
  233. package/src/project/__pycache__/ai_folder.cpython-311.pyc +0 -0
  234. package/src/project/__pycache__/ai_folder.cpython-313.pyc +0 -0
  235. package/src/project/__pycache__/context_enricher.cpython-313.pyc +0 -0
  236. package/src/project/__pycache__/context_projection_builder.cpython-311.pyc +0 -0
  237. package/src/project/__pycache__/context_projection_builder.cpython-313.pyc +0 -0
  238. package/src/project/__pycache__/context_requirement_sync.cpython-311.pyc +0 -0
  239. package/src/project/__pycache__/context_requirement_sync.cpython-313.pyc +0 -0
  240. package/src/project/ai_folder.py +602 -0
  241. package/src/project/context_enricher.py +333 -0
  242. package/src/project/context_projection_builder.py +167 -0
  243. package/src/project/context_requirement_sync.py +205 -0
  244. package/src/project/init_check.py +214 -0
  245. package/src/prompts/__pycache__/prompt_loader.cpython-313.pyc +0 -0
  246. package/src/prompts/automation_design.md +12 -0
  247. package/src/prompts/policies/automation_generation_policy.md +11 -0
  248. package/src/prompts/policies/generation_instructions.md +24 -0
  249. package/src/prompts/policies/guardrails.md +6 -0
  250. package/src/prompts/policies/traceability_policy.md +9 -0
  251. package/src/prompts/prompt_loader.py +56 -0
  252. package/src/prompts/requirement_understanding.md +17 -0
  253. package/src/prompts/scenario_generator.md +17 -0
  254. package/src/prompts/script_generator.md +13 -0
  255. package/src/prompts/test_case_generator.md +23 -0
  256. package/src/retrieval/__pycache__/__init__.cpython-311.pyc +0 -0
  257. package/src/retrieval/__pycache__/__init__.cpython-313.pyc +0 -0
  258. package/src/retrieval/__pycache__/knowledge_graph.cpython-311.pyc +0 -0
  259. package/src/retrieval/__pycache__/knowledge_graph.cpython-313.pyc +0 -0
  260. package/src/retrieval/__pycache__/retriever.cpython-311.pyc +0 -0
  261. package/src/retrieval/__pycache__/retriever.cpython-313.pyc +0 -0
  262. package/src/retrieval/__pycache__/unified_query.cpython-313.pyc +0 -0
  263. package/{knowledge_base → src}/retrieval/context_fusion.py +3 -3
  264. package/{knowledge_base → src}/retrieval/knowledge_graph.py +4 -4
  265. package/{knowledge_base → src}/retrieval/reranker.py +2 -2
  266. package/{knowledge_base → src}/retrieval/retriever.py +11 -11
  267. package/{knowledge_base → src}/retrieval/unified_query.py +7 -7
  268. package/{knowledge_base → src}/retrieval/web_retriever.py +6 -6
  269. package/{knowledge_base → src}/validators/step_fidelity.py +1 -1
  270. package/src/vision/__init__.py +0 -0
  271. package/{knowledge_base → src}/vision/image_describer.py +1 -1
  272. package/knowledge_base/agents/__pycache__/automation_design_agent.cpython-313.pyc +0 -0
  273. package/knowledge_base/agents/__pycache__/confidence_agent.cpython-313.pyc +0 -0
  274. package/knowledge_base/agents/__pycache__/execution_validation_agent.cpython-313.pyc +0 -0
  275. package/knowledge_base/agents/__pycache__/requirement_agent.cpython-313.pyc +0 -0
  276. package/knowledge_base/agents/__pycache__/testcase_agent.cpython-313.pyc +0 -0
  277. package/knowledge_base/agents/__pycache__/workflow_engine.cpython-313.pyc +0 -0
  278. package/knowledge_base/agents/confidence_agent.py +0 -95
  279. package/knowledge_base/agents/execution_validation_agent.py +0 -129
  280. package/knowledge_base/agents/intent_agent.py +0 -76
  281. package/knowledge_base/agents/requirement_agent.py +0 -71
  282. package/knowledge_base/agents/testcase_agent.py +0 -111
  283. package/knowledge_base/agents/workflow_engine.py +0 -87
  284. package/knowledge_base/cli/__pycache__/workflow_cli.cpython-313.pyc +0 -0
  285. package/knowledge_base/cli/generate_qcapps134.py +0 -391
  286. package/knowledge_base/cli/workflow_cli.py +0 -189
  287. package/knowledge_base/config/.env +0 -100
  288. package/knowledge_base/config/.env.example +0 -75
  289. package/knowledge_base/config/__pycache__/__init__.cpython-313.pyc +0 -0
  290. package/knowledge_base/connectors/__pycache__/__init__.cpython-313.pyc +0 -0
  291. package/knowledge_base/connectors/bitbucket_connector.py +0 -25
  292. package/knowledge_base/db/migrations.py +0 -22
  293. package/knowledge_base/ingestion/ingest.py +0 -346
  294. package/knowledge_base/ingestion/ingest_images.py +0 -330
  295. package/knowledge_base/memory/__init__.py +0 -6
  296. package/knowledge_base/memory/ingest_memory.py +0 -60
  297. /package/{knowledge_base → src}/__init__.py +0 -0
  298. /package/{knowledge_base → src}/__pycache__/__init__.cpython-313.pyc +0 -0
  299. /package/{knowledge_base → src}/__pycache__/__init__.cpython-314.pyc +0 -0
  300. /package/{knowledge_base → src}/__pycache__/__init__.cpython-37.pyc +0 -0
  301. /package/{knowledge_base → src}/__pycache__/__init__.cpython-38.pyc +0 -0
  302. /package/{knowledge_base → src}/__pycache__/confidence.cpython-37.pyc +0 -0
  303. /package/{knowledge_base → src}/__pycache__/config.cpython-314.pyc +0 -0
  304. /package/{knowledge_base → src}/__pycache__/config.cpython-37.pyc +0 -0
  305. /package/{knowledge_base → src}/__pycache__/config.cpython-38.pyc +0 -0
  306. /package/{knowledge_base → src}/__pycache__/context_fusion.cpython-314.pyc +0 -0
  307. /package/{knowledge_base → src}/__pycache__/context_fusion.cpython-37.pyc +0 -0
  308. /package/{knowledge_base → src}/__pycache__/feedback_analytics.cpython-37.pyc +0 -0
  309. /package/{knowledge_base → src}/__pycache__/feedback_applier.cpython-37.pyc +0 -0
  310. /package/{knowledge_base → src}/__pycache__/feedback_cli.cpython-37.pyc +0 -0
  311. /package/{knowledge_base → src}/__pycache__/feedback_curator.cpython-37.pyc +0 -0
  312. /package/{knowledge_base → src}/__pycache__/feedback_handler.cpython-37.pyc +0 -0
  313. /package/{knowledge_base → src}/__pycache__/generate.cpython-37.pyc +0 -0
  314. /package/{knowledge_base → src}/__pycache__/generate_qcapps134.cpython-37.pyc +0 -0
  315. /package/{knowledge_base → src}/__pycache__/input_classifier.cpython-314.pyc +0 -0
  316. /package/{knowledge_base → src}/__pycache__/input_classifier.cpython-37.pyc +0 -0
  317. /package/{knowledge_base → src}/__pycache__/kg_extractor.cpython-37.pyc +0 -0
  318. /package/{knowledge_base → src}/__pycache__/knowledge_graph.cpython-314.pyc +0 -0
  319. /package/{knowledge_base → src}/__pycache__/knowledge_graph.cpython-37.pyc +0 -0
  320. /package/{knowledge_base → src}/__pycache__/manual_tc_parser.cpython-314.pyc +0 -0
  321. /package/{knowledge_base → src}/__pycache__/manual_tc_parser.cpython-37.pyc +0 -0
  322. /package/{knowledge_base → src}/__pycache__/precedence.cpython-37.pyc +0 -0
  323. /package/{knowledge_base → src}/__pycache__/prompts.cpython-314.pyc +0 -0
  324. /package/{knowledge_base → src}/__pycache__/prompts.cpython-37.pyc +0 -0
  325. /package/{knowledge_base → src}/__pycache__/reranker.cpython-314.pyc +0 -0
  326. /package/{knowledge_base → src}/__pycache__/reranker.cpython-37.pyc +0 -0
  327. /package/{knowledge_base → src}/__pycache__/retrieval_debug.cpython-314.pyc +0 -0
  328. /package/{knowledge_base → src}/__pycache__/retrieval_debug.cpython-37.pyc +0 -0
  329. /package/{knowledge_base → src}/__pycache__/retriever.cpython-314.pyc +0 -0
  330. /package/{knowledge_base → src}/__pycache__/retriever.cpython-37.pyc +0 -0
  331. /package/{knowledge_base → src}/__pycache__/server.cpython-37.pyc +0 -0
  332. /package/{knowledge_base → src}/__pycache__/tc_transformer.cpython-314.pyc +0 -0
  333. /package/{knowledge_base → src}/__pycache__/tc_transformer.cpython-37.pyc +0 -0
  334. /package/{knowledge_base → src}/__pycache__/test_generator.cpython-314.pyc +0 -0
  335. /package/{knowledge_base → src}/__pycache__/test_generator.cpython-37.pyc +0 -0
  336. /package/{knowledge_base → src}/agents/__init__.py +0 -0
  337. /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-313.pyc +0 -0
  338. /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-314.pyc +0 -0
  339. /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-37.pyc +0 -0
  340. /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-38.pyc +0 -0
  341. /package/{knowledge_base → src}/agents/__pycache__/automation_design_agent.cpython-314.pyc +0 -0
  342. /package/{knowledge_base → src}/agents/__pycache__/confidence_agent.cpython-314.pyc +0 -0
  343. /package/{knowledge_base → src}/agents/__pycache__/execution_validation_agent.cpython-314.pyc +0 -0
  344. /package/{knowledge_base → src}/agents/__pycache__/fusion_agent.cpython-314.pyc +0 -0
  345. /package/{knowledge_base → src}/agents/__pycache__/fusion_agent.cpython-37.pyc +0 -0
  346. /package/{knowledge_base → src}/agents/__pycache__/fusion_agent.cpython-38.pyc +0 -0
  347. /package/{knowledge_base → src}/agents/__pycache__/graph.cpython-314.pyc +0 -0
  348. /package/{knowledge_base → src}/agents/__pycache__/graph.cpython-37.pyc +0 -0
  349. /package/{knowledge_base → src}/agents/__pycache__/graph.cpython-38.pyc +0 -0
  350. /package/{knowledge_base → src}/agents/__pycache__/healing_agent.cpython-37.pyc +0 -0
  351. /package/{knowledge_base → src}/agents/__pycache__/intent_agent.cpython-314.pyc +0 -0
  352. /package/{knowledge_base → src}/agents/__pycache__/intent_agent.cpython-37.pyc +0 -0
  353. /package/{knowledge_base → src}/agents/__pycache__/intent_agent.cpython-38.pyc +0 -0
  354. /package/{knowledge_base → src}/agents/__pycache__/kg_agent.cpython-314.pyc +0 -0
  355. /package/{knowledge_base → src}/agents/__pycache__/kg_agent.cpython-37.pyc +0 -0
  356. /package/{knowledge_base → src}/agents/__pycache__/kg_agent.cpython-38.pyc +0 -0
  357. /package/{knowledge_base → src}/agents/__pycache__/memory_agent.cpython-314.pyc +0 -0
  358. /package/{knowledge_base → src}/agents/__pycache__/memory_agent.cpython-37.pyc +0 -0
  359. /package/{knowledge_base → src}/agents/__pycache__/memory_agent.cpython-38.pyc +0 -0
  360. /package/{knowledge_base → src}/agents/__pycache__/rca_agent.cpython-37.pyc +0 -0
  361. /package/{knowledge_base → src}/agents/__pycache__/reflection_agent.cpython-314.pyc +0 -0
  362. /package/{knowledge_base → src}/agents/__pycache__/reflection_agent.cpython-37.pyc +0 -0
  363. /package/{knowledge_base → src}/agents/__pycache__/reflection_agent.cpython-38.pyc +0 -0
  364. /package/{knowledge_base → src}/agents/__pycache__/regression_agent.cpython-37.pyc +0 -0
  365. /package/{knowledge_base → src}/agents/__pycache__/requirement_agent.cpython-314.pyc +0 -0
  366. /package/{knowledge_base → src}/agents/__pycache__/retrieval_agent.cpython-314.pyc +0 -0
  367. /package/{knowledge_base → src}/agents/__pycache__/retrieval_agent.cpython-37.pyc +0 -0
  368. /package/{knowledge_base → src}/agents/__pycache__/retrieval_agent.cpython-38.pyc +0 -0
  369. /package/{knowledge_base → src}/agents/__pycache__/scenario_agent.cpython-314.pyc +0 -0
  370. /package/{knowledge_base → src}/agents/__pycache__/script_agent.cpython-314.pyc +0 -0
  371. /package/{knowledge_base → src}/agents/__pycache__/script_agent.cpython-37.pyc +0 -0
  372. /package/{knowledge_base → src}/agents/__pycache__/script_agent.cpython-38.pyc +0 -0
  373. /package/{knowledge_base → src}/agents/__pycache__/script_generator_agent.cpython-314.pyc +0 -0
  374. /package/{knowledge_base → src}/agents/__pycache__/state.cpython-314.pyc +0 -0
  375. /package/{knowledge_base → src}/agents/__pycache__/state.cpython-37.pyc +0 -0
  376. /package/{knowledge_base → src}/agents/__pycache__/state.cpython-38.pyc +0 -0
  377. /package/{knowledge_base → src}/agents/__pycache__/temporal_agent.cpython-314.pyc +0 -0
  378. /package/{knowledge_base → src}/agents/__pycache__/temporal_agent.cpython-37.pyc +0 -0
  379. /package/{knowledge_base → src}/agents/__pycache__/temporal_agent.cpython-38.pyc +0 -0
  380. /package/{knowledge_base → src}/agents/__pycache__/testcase_agent.cpython-314.pyc +0 -0
  381. /package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-314.pyc +0 -0
  382. /package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-37.pyc +0 -0
  383. /package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-38.pyc +0 -0
  384. /package/{knowledge_base → src}/agents/__pycache__/workflow_engine.cpython-314.pyc +0 -0
  385. /package/{knowledge_base → src}/agents/state.py +0 -0
  386. /package/{knowledge_base → src}/alembic/__pycache__/env.cpython-37.pyc +0 -0
  387. /package/{knowledge_base → src}/alembic/__pycache__/env.cpython-38.pyc +0 -0
  388. /package/{knowledge_base → src}/alembic/versions/.gitkeep +0 -0
  389. /package/{knowledge_base → src}/alembic/versions/001_phase0_feedback.py +0 -0
  390. /package/{knowledge_base → src}/alembic/versions/002_feedback_promotions.py +0 -0
  391. /package/{knowledge_base → src}/alembic/versions/003_enterprise_hardening.py +0 -0
  392. /package/{knowledge_base → src}/alembic/versions/__pycache__/001_phase0_feedback.cpython-37.pyc +0 -0
  393. /package/{knowledge_base → src}/alembic/versions/__pycache__/001_phase0_feedback.cpython-38.pyc +0 -0
  394. /package/{knowledge_base → src}/alembic/versions/__pycache__/002_feedback_promotions.cpython-37.pyc +0 -0
  395. /package/{knowledge_base → src}/alembic/versions/__pycache__/002_feedback_promotions.cpython-38.pyc +0 -0
  396. /package/{knowledge_base → src}/api/__init__.py +0 -0
  397. /package/{knowledge_base → src}/api/__pycache__/__init__.cpython-37.pyc +0 -0
  398. /package/{knowledge_base → src}/api/__pycache__/__init__.cpython-38.pyc +0 -0
  399. /package/{knowledge_base → src}/api/__pycache__/middleware.cpython-38.pyc +0 -0
  400. /package/{knowledge_base → src}/api/__pycache__/server.cpython-37.pyc +0 -0
  401. /package/{knowledge_base → src}/api/__pycache__/server.cpython-38.pyc +0 -0
  402. /package/{knowledge_base → src}/chunking/__init__.py +0 -0
  403. /package/{knowledge_base → src}/chunking/__pycache__/__init__.cpython-37.pyc +0 -0
  404. /package/{knowledge_base → src}/chunking/__pycache__/__init__.cpython-38.pyc +0 -0
  405. /package/{knowledge_base → src}/chunking/__pycache__/chunker.cpython-37.pyc +0 -0
  406. /package/{knowledge_base → src}/chunking/__pycache__/chunker.cpython-38.pyc +0 -0
  407. /package/{knowledge_base → src}/chunking/__pycache__/validators.cpython-37.pyc +0 -0
  408. /package/{knowledge_base → src}/chunking/__pycache__/validators.cpython-38.pyc +0 -0
  409. /package/{knowledge_base → src}/chunking/validators.py +0 -0
  410. /package/{knowledge_base → src}/cli/__init__.py +0 -0
  411. /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-313.pyc +0 -0
  412. /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-314.pyc +0 -0
  413. /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-37.pyc +0 -0
  414. /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-38.pyc +0 -0
  415. /package/{knowledge_base → src}/cli/__pycache__/feedback_cli.cpython-37.pyc +0 -0
  416. /package/{knowledge_base → src}/cli/__pycache__/feedback_cli.cpython-38.pyc +0 -0
  417. /package/{knowledge_base → src}/cli/__pycache__/generate.cpython-37.pyc +0 -0
  418. /package/{knowledge_base → src}/cli/__pycache__/generate.cpython-38.pyc +0 -0
  419. /package/{knowledge_base → src}/cli/__pycache__/generate_qcapps134.cpython-37.pyc +0 -0
  420. /package/{knowledge_base → src}/cli/__pycache__/workflow_cli.cpython-314.pyc +0 -0
  421. /package/{knowledge_base → src}/config/__pycache__/__init__.cpython-314.pyc +0 -0
  422. /package/{knowledge_base → src}/config/__pycache__/__init__.cpython-37.pyc +0 -0
  423. /package/{knowledge_base → src}/config/__pycache__/__init__.cpython-38.pyc +0 -0
  424. /package/{knowledge_base → src}/config/__pycache__/settings.cpython-314.pyc +0 -0
  425. /package/{knowledge_base → src}/config/__pycache__/settings.cpython-37.pyc +0 -0
  426. /package/{knowledge_base → src}/config/__pycache__/settings.cpython-38.pyc +0 -0
  427. /package/{knowledge_base → src}/connectors/__pycache__/__init__.cpython-314.pyc +0 -0
  428. /package/{knowledge_base → src}/connectors/__pycache__/__init__.cpython-37.pyc +0 -0
  429. /package/{knowledge_base → src}/connectors/__pycache__/__init__.cpython-38.pyc +0 -0
  430. /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-313.pyc +0 -0
  431. /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-314.pyc +0 -0
  432. /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-37.pyc +0 -0
  433. /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-38.pyc +0 -0
  434. /package/{knowledge_base → src}/connectors/__pycache__/bitbucket_connector.cpython-37.pyc +0 -0
  435. /package/{knowledge_base → src}/connectors/__pycache__/bitbucket_connector.cpython-38.pyc +0 -0
  436. /package/{knowledge_base → src}/connectors/__pycache__/community_connector.cpython-38.pyc +0 -0
  437. /package/{knowledge_base → src}/connectors/__pycache__/confluence_connector.cpython-37.pyc +0 -0
  438. /package/{knowledge_base → src}/connectors/__pycache__/confluence_connector.cpython-38.pyc +0 -0
  439. /package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-314.pyc +0 -0
  440. /package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-37.pyc +0 -0
  441. /package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-38.pyc +0 -0
  442. /package/{knowledge_base → src}/connectors/__pycache__/kb_igel_connector.cpython-38.pyc +0 -0
  443. /package/{knowledge_base → src}/connectors/__pycache__/playwright_fetcher.cpython-38.pyc +0 -0
  444. /package/{knowledge_base → src}/connectors/__pycache__/query_bridge.cpython-314.pyc +0 -0
  445. /package/{knowledge_base → src}/connectors/__pycache__/query_bridge.cpython-38.pyc +0 -0
  446. /package/{knowledge_base → src}/connectors/__pycache__/search_backends.cpython-38.pyc +0 -0
  447. /package/{knowledge_base → src}/connectors/__pycache__/serviceNow_connector.cpython-37.pyc +0 -0
  448. /package/{knowledge_base → src}/connectors/__pycache__/serviceNow_connector.cpython-38.pyc +0 -0
  449. /package/{knowledge_base → src}/connectors/__pycache__/sync_scheduler.cpython-37.pyc +0 -0
  450. /package/{knowledge_base → src}/connectors/__pycache__/sync_scheduler.cpython-38.pyc +0 -0
  451. /package/{knowledge_base → src}/connectors/__pycache__/teamcity_connector.cpython-37.pyc +0 -0
  452. /package/{knowledge_base → src}/connectors/__pycache__/teamcity_connector.cpython-38.pyc +0 -0
  453. /package/{knowledge_base → src}/connectors/__pycache__/testRail_connector.cpython-37.pyc +0 -0
  454. /package/{knowledge_base → src}/connectors/__pycache__/testRail_connector.cpython-38.pyc +0 -0
  455. /package/{knowledge_base → src}/connectors/__pycache__/web_fetcher.cpython-38.pyc +0 -0
  456. /package/{knowledge_base → src}/connectors/base.py +0 -0
  457. /package/{knowledge_base → src}/connectors/playwright_fetcher.py +0 -0
  458. /package/{knowledge_base → src}/core/__pycache__/__init__.cpython-314.pyc +0 -0
  459. /package/{knowledge_base → src}/core/__pycache__/__init__.cpython-37.pyc +0 -0
  460. /package/{knowledge_base → src}/core/__pycache__/__init__.cpython-38.pyc +0 -0
  461. /package/{knowledge_base → src}/core/__pycache__/cache.cpython-38.pyc +0 -0
  462. /package/{knowledge_base → src}/core/__pycache__/circuit_breaker.cpython-314.pyc +0 -0
  463. /package/{knowledge_base → src}/core/__pycache__/circuit_breaker.cpython-38.pyc +0 -0
  464. /package/{knowledge_base → src}/core/__pycache__/confidence.cpython-314.pyc +0 -0
  465. /package/{knowledge_base → src}/core/__pycache__/confidence.cpython-37.pyc +0 -0
  466. /package/{knowledge_base → src}/core/__pycache__/confidence.cpython-38.pyc +0 -0
  467. /package/{knowledge_base → src}/core/__pycache__/logging_setup.cpython-38.pyc +0 -0
  468. /package/{knowledge_base → src}/core/__pycache__/metrics.cpython-38.pyc +0 -0
  469. /package/{knowledge_base → src}/core/__pycache__/precedence.cpython-37.pyc +0 -0
  470. /package/{knowledge_base → src}/core/__pycache__/precedence.cpython-38.pyc +0 -0
  471. /package/{knowledge_base → src}/core/__pycache__/request_context.cpython-38.pyc +0 -0
  472. /package/{knowledge_base → src}/core/circuit_breaker.py +0 -0
  473. /package/{knowledge_base → src}/core/metrics.py +0 -0
  474. /package/{knowledge_base → src}/core/precedence.py +0 -0
  475. /package/{knowledge_base → src}/core/request_context.py +0 -0
  476. /package/{knowledge_base → src}/db/__init__.py +0 -0
  477. /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-313.pyc +0 -0
  478. /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-314.pyc +0 -0
  479. /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-37.pyc +0 -0
  480. /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-38.pyc +0 -0
  481. /package/{knowledge_base → src}/db/__pycache__/client.cpython-314.pyc +0 -0
  482. /package/{knowledge_base → src}/db/__pycache__/client.cpython-37.pyc +0 -0
  483. /package/{knowledge_base → src}/db/__pycache__/client.cpython-38.pyc +0 -0
  484. /package/{knowledge_base → src}/db/__pycache__/connector_sync.cpython-38.pyc +0 -0
  485. /package/{knowledge_base → src}/db/__pycache__/feedback_schema.cpython-37.pyc +0 -0
  486. /package/{knowledge_base → src}/db/__pycache__/feedback_schema.cpython-38.pyc +0 -0
  487. /package/{knowledge_base → src}/db/__pycache__/igel_schema.cpython-314.pyc +0 -0
  488. /package/{knowledge_base → src}/db/__pycache__/kg_introspect.cpython-314.pyc +0 -0
  489. /package/{knowledge_base → src}/db/__pycache__/kg_introspect.cpython-37.pyc +0 -0
  490. /package/{knowledge_base → src}/db/__pycache__/kg_introspect.cpython-38.pyc +0 -0
  491. /package/{knowledge_base → src}/db/__pycache__/schema.cpython-37.pyc +0 -0
  492. /package/{knowledge_base → src}/db/__pycache__/schema.cpython-38.pyc +0 -0
  493. /package/{knowledge_base → src}/embeddings/__init__.py +0 -0
  494. /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-313.pyc +0 -0
  495. /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-314.pyc +0 -0
  496. /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-37.pyc +0 -0
  497. /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-38.pyc +0 -0
  498. /package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-314.pyc +0 -0
  499. /package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-37.pyc +0 -0
  500. /package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-38.pyc +0 -0
  501. /package/{knowledge_base → src}/eval/__pycache__/__init__.cpython-314.pyc +0 -0
  502. /package/{knowledge_base → src}/eval/__pycache__/__init__.cpython-37.pyc +0 -0
  503. /package/{knowledge_base → src}/eval/__pycache__/__init__.cpython-38.pyc +0 -0
  504. /package/{knowledge_base → src}/eval/__pycache__/__main__.cpython-37.pyc +0 -0
  505. /package/{knowledge_base → src}/eval/__pycache__/baseline.cpython-314.pyc +0 -0
  506. /package/{knowledge_base → src}/eval/__pycache__/baseline.cpython-37.pyc +0 -0
  507. /package/{knowledge_base → src}/eval/__pycache__/baseline.cpython-38.pyc +0 -0
  508. /package/{knowledge_base → src}/eval/__pycache__/harness.cpython-314.pyc +0 -0
  509. /package/{knowledge_base → src}/eval/__pycache__/harness.cpython-37.pyc +0 -0
  510. /package/{knowledge_base → src}/eval/__pycache__/harness.cpython-38.pyc +0 -0
  511. /package/{knowledge_base → src}/eval/__pycache__/scorers.cpython-314.pyc +0 -0
  512. /package/{knowledge_base → src}/eval/__pycache__/scorers.cpython-37.pyc +0 -0
  513. /package/{knowledge_base → src}/eval/__pycache__/scorers.cpython-38.pyc +0 -0
  514. /package/{knowledge_base → src}/eval/baseline.py +0 -0
  515. /package/{knowledge_base → src}/eval/queries_50.json +0 -0
  516. /package/{knowledge_base → src}/eval/scorers.py +0 -0
  517. /package/{knowledge_base → src}/exemplars/README.md +0 -0
  518. /package/{knowledge_base → src}/exemplars/__pycache__/pytest_reference_snippet.cpython-37.pyc +0 -0
  519. /package/{knowledge_base → src}/exemplars/gold_manual_concise_snippet.md +0 -0
  520. /package/{knowledge_base → src}/exemplars/gold_manual_detailed_snippet.md +0 -0
  521. /package/{knowledge_base → src}/exemplars/pytest_reference_snippet.py +0 -0
  522. /package/{knowledge_base → src}/feedback/__pycache__/__init__.cpython-37.pyc +0 -0
  523. /package/{knowledge_base → src}/feedback/__pycache__/__init__.cpython-38.pyc +0 -0
  524. /package/{knowledge_base → src}/feedback/__pycache__/analytics.cpython-37.pyc +0 -0
  525. /package/{knowledge_base → src}/feedback/__pycache__/analytics.cpython-38.pyc +0 -0
  526. /package/{knowledge_base → src}/feedback/__pycache__/applier.cpython-37.pyc +0 -0
  527. /package/{knowledge_base → src}/feedback/__pycache__/applier.cpython-38.pyc +0 -0
  528. /package/{knowledge_base → src}/feedback/__pycache__/curator.cpython-37.pyc +0 -0
  529. /package/{knowledge_base → src}/feedback/__pycache__/curator.cpython-38.pyc +0 -0
  530. /package/{knowledge_base → src}/feedback/__pycache__/handler.cpython-37.pyc +0 -0
  531. /package/{knowledge_base → src}/feedback/__pycache__/handler.cpython-38.pyc +0 -0
  532. /package/{knowledge_base → src}/generation/__init__.py +0 -0
  533. /package/{knowledge_base → src}/generation/__pycache__/__init__.cpython-314.pyc +0 -0
  534. /package/{knowledge_base → src}/generation/__pycache__/__init__.cpython-37.pyc +0 -0
  535. /package/{knowledge_base → src}/generation/__pycache__/__init__.cpython-38.pyc +0 -0
  536. /package/{knowledge_base → src}/generation/__pycache__/input_classifier.cpython-37.pyc +0 -0
  537. /package/{knowledge_base → src}/generation/__pycache__/input_classifier.cpython-38.pyc +0 -0
  538. /package/{knowledge_base → src}/generation/__pycache__/manual_tc_parser.cpython-37.pyc +0 -0
  539. /package/{knowledge_base → src}/generation/__pycache__/manual_tc_parser.cpython-38.pyc +0 -0
  540. /package/{knowledge_base → src}/generation/__pycache__/prompts.cpython-314.pyc +0 -0
  541. /package/{knowledge_base → src}/generation/__pycache__/prompts.cpython-37.pyc +0 -0
  542. /package/{knowledge_base → src}/generation/__pycache__/prompts.cpython-38.pyc +0 -0
  543. /package/{knowledge_base → src}/generation/__pycache__/tc_transformer.cpython-37.pyc +0 -0
  544. /package/{knowledge_base → src}/generation/__pycache__/test_generator.cpython-314.pyc +0 -0
  545. /package/{knowledge_base → src}/generation/__pycache__/test_generator.cpython-37.pyc +0 -0
  546. /package/{knowledge_base → src}/generation/__pycache__/test_generator.cpython-38.pyc +0 -0
  547. /package/{knowledge_base → src}/generation/manual_tc_parser.py +0 -0
  548. /package/{knowledge_base → src}/graph_db/__pycache__/__init__.cpython-37.pyc +0 -0
  549. /package/{knowledge_base → src}/graph_db/__pycache__/__init__.cpython-38.pyc +0 -0
  550. /package/{knowledge_base → src}/graph_db/__pycache__/graphiti_client.cpython-37.pyc +0 -0
  551. /package/{knowledge_base → src}/graph_db/__pycache__/kg_traversal.cpython-37.pyc +0 -0
  552. /package/{knowledge_base → src}/graph_db/__pycache__/migrate_kg.cpython-37.pyc +0 -0
  553. /package/{knowledge_base → src}/graph_db/__pycache__/neo4j_client.cpython-37.pyc +0 -0
  554. /package/{knowledge_base → src}/graph_db/__pycache__/neo4j_client.cpython-38.pyc +0 -0
  555. /package/{knowledge_base → src}/graph_db/__pycache__/schema.cpython-37.pyc +0 -0
  556. /package/{knowledge_base → src}/graph_db/__pycache__/temporal_ingest.cpython-37.pyc +0 -0
  557. /package/{knowledge_base → src}/graph_db/schema.py +0 -0
  558. /package/{knowledge_base → src}/ingestion/__init__.py +0 -0
  559. /package/{knowledge_base → src}/ingestion/__pycache__/__init__.cpython-37.pyc +0 -0
  560. /package/{knowledge_base → src}/ingestion/__pycache__/__init__.cpython-38.pyc +0 -0
  561. /package/{knowledge_base → src}/ingestion/__pycache__/ingest.cpython-37.pyc +0 -0
  562. /package/{knowledge_base → src}/ingestion/__pycache__/ingest.cpython-38.pyc +0 -0
  563. /package/{knowledge_base → src}/ingestion/__pycache__/ingest_images.cpython-37.pyc +0 -0
  564. /package/{knowledge_base → src}/ingestion/__pycache__/ingest_images.cpython-38.pyc +0 -0
  565. /package/{knowledge_base → src}/ingestion/__pycache__/kg_extractor.cpython-37.pyc +0 -0
  566. /package/{knowledge_base → src}/ingestion/__pycache__/kg_extractor.cpython-38.pyc +0 -0
  567. /package/{knowledge_base → src}/ingestion/__pycache__/web_ingest.cpython-38.pyc +0 -0
  568. /package/{knowledge_base → src}/intelligence/__init__.py +0 -0
  569. /package/{knowledge_base → src}/intelligence/__pycache__/__init__.cpython-37.pyc +0 -0
  570. /package/{knowledge_base → src}/intelligence/__pycache__/execution_ingest.cpython-37.pyc +0 -0
  571. /package/{knowledge_base → src}/intelligence/__pycache__/predictive_engine.cpython-37.pyc +0 -0
  572. /package/{knowledge_base → src}/intelligence/__pycache__/risk_scorer.cpython-37.pyc +0 -0
  573. /package/{knowledge_base → src}/intelligence/predictive_engine.py +0 -0
  574. /package/{knowledge_base → src}/intelligence/risk_scorer.py +0 -0
  575. /package/{knowledge_base → src}/memory/__pycache__/__init__.cpython-314.pyc +0 -0
  576. /package/{knowledge_base → src}/memory/__pycache__/__init__.cpython-37.pyc +0 -0
  577. /package/{knowledge_base → src}/memory/__pycache__/__init__.cpython-38.pyc +0 -0
  578. /package/{knowledge_base → src}/memory/__pycache__/cognee_client.cpython-314.pyc +0 -0
  579. /package/{knowledge_base → src}/memory/__pycache__/cognee_client.cpython-37.pyc +0 -0
  580. /package/{knowledge_base → src}/memory/__pycache__/cognee_client.cpython-38.pyc +0 -0
  581. /package/{knowledge_base → src}/memory/__pycache__/ingest_memory.cpython-37.pyc +0 -0
  582. /package/{knowledge_base → src}/memory/__pycache__/memory_types.cpython-314.pyc +0 -0
  583. /package/{knowledge_base → src}/memory/__pycache__/memory_types.cpython-37.pyc +0 -0
  584. /package/{knowledge_base → src}/memory/__pycache__/memory_types.cpython-38.pyc +0 -0
  585. /package/{knowledge_base → src}/memory/memory_types.py +0 -0
  586. /package/{knowledge_base → src}/models/__pycache__/test_requirement.cpython-314.pyc +0 -0
  587. /package/{knowledge_base → src}/parsers/__init__.py +0 -0
  588. /package/{knowledge_base → src}/parsers/__pycache__/__init__.cpython-37.pyc +0 -0
  589. /package/{knowledge_base → src}/parsers/__pycache__/__init__.cpython-38.pyc +0 -0
  590. /package/{knowledge_base → src}/parsers/__pycache__/csv_parser.cpython-37.pyc +0 -0
  591. /package/{knowledge_base → src}/parsers/__pycache__/csv_parser.cpython-38.pyc +0 -0
  592. /package/{knowledge_base → src}/parsers/__pycache__/doc_parser.cpython-37.pyc +0 -0
  593. /package/{knowledge_base → src}/parsers/__pycache__/doc_parser.cpython-38.pyc +0 -0
  594. /package/{knowledge_base → src}/parsers/__pycache__/html_parser.cpython-38.pyc +0 -0
  595. /package/{knowledge_base → src}/parsers/__pycache__/image_extractor.cpython-37.pyc +0 -0
  596. /package/{knowledge_base → src}/parsers/__pycache__/image_extractor.cpython-38.pyc +0 -0
  597. /package/{knowledge_base → src}/parsers/__pycache__/markdown_parser.cpython-37.pyc +0 -0
  598. /package/{knowledge_base → src}/parsers/__pycache__/markdown_parser.cpython-38.pyc +0 -0
  599. /package/{knowledge_base → src}/parsers/__pycache__/pdf_parser.cpython-37.pyc +0 -0
  600. /package/{knowledge_base → src}/parsers/__pycache__/pdf_parser.cpython-38.pyc +0 -0
  601. /package/{knowledge_base → src}/parsers/image_extractor.py +0 -0
  602. /package/{knowledge_base → src}/parsers/markdown_parser.py +0 -0
  603. /package/{knowledge_base/vision → src/project}/__init__.py +0 -0
  604. /package/{knowledge_base → src}/retrieval/__init__.py +0 -0
  605. /package/{knowledge_base → src}/retrieval/__pycache__/__init__.cpython-314.pyc +0 -0
  606. /package/{knowledge_base → src}/retrieval/__pycache__/__init__.cpython-37.pyc +0 -0
  607. /package/{knowledge_base → src}/retrieval/__pycache__/__init__.cpython-38.pyc +0 -0
  608. /package/{knowledge_base → src}/retrieval/__pycache__/context_fusion.cpython-37.pyc +0 -0
  609. /package/{knowledge_base → src}/retrieval/__pycache__/context_fusion.cpython-38.pyc +0 -0
  610. /package/{knowledge_base → src}/retrieval/__pycache__/knowledge_graph.cpython-314.pyc +0 -0
  611. /package/{knowledge_base → src}/retrieval/__pycache__/knowledge_graph.cpython-37.pyc +0 -0
  612. /package/{knowledge_base → src}/retrieval/__pycache__/knowledge_graph.cpython-38.pyc +0 -0
  613. /package/{knowledge_base → src}/retrieval/__pycache__/reranker.cpython-37.pyc +0 -0
  614. /package/{knowledge_base → src}/retrieval/__pycache__/reranker.cpython-38.pyc +0 -0
  615. /package/{knowledge_base → src}/retrieval/__pycache__/retrieval_debug.cpython-37.pyc +0 -0
  616. /package/{knowledge_base → src}/retrieval/__pycache__/retrieval_debug.cpython-38.pyc +0 -0
  617. /package/{knowledge_base → src}/retrieval/__pycache__/retriever.cpython-314.pyc +0 -0
  618. /package/{knowledge_base → src}/retrieval/__pycache__/retriever.cpython-37.pyc +0 -0
  619. /package/{knowledge_base → src}/retrieval/__pycache__/retriever.cpython-38.pyc +0 -0
  620. /package/{knowledge_base → src}/retrieval/__pycache__/unified_query.cpython-314.pyc +0 -0
  621. /package/{knowledge_base → src}/retrieval/__pycache__/unified_query.cpython-38.pyc +0 -0
  622. /package/{knowledge_base → src}/retrieval/__pycache__/web_retriever.cpython-38.pyc +0 -0
  623. /package/{knowledge_base → src}/retrieval/retrieval_debug.py +0 -0
  624. /package/{knowledge_base → src}/validators/__init__.py +0 -0
  625. /package/{knowledge_base → src}/validators/__pycache__/__init__.cpython-314.pyc +0 -0
  626. /package/{knowledge_base → src}/validators/__pycache__/__init__.cpython-37.pyc +0 -0
  627. /package/{knowledge_base → src}/validators/__pycache__/step_fidelity.cpython-314.pyc +0 -0
  628. /package/{knowledge_base → src}/validators/__pycache__/step_fidelity.cpython-37.pyc +0 -0
  629. /package/{knowledge_base → src}/vision/__pycache__/__init__.cpython-37.pyc +0 -0
  630. /package/{knowledge_base → src}/vision/__pycache__/__init__.cpython-38.pyc +0 -0
  631. /package/{knowledge_base → src}/vision/__pycache__/image_describer.cpython-37.pyc +0 -0
  632. /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."