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.
Files changed (628) hide show
  1. package/dist/cli/index.js +638 -54
  2. package/dist/cli/platform.js +115 -72
  3. package/dist/mcp/server.js +258 -17
  4. package/package.json +4 -4
  5. package/src/__pycache__/__init__.cpython-311.pyc +0 -0
  6. package/src/__pycache__/__init__.cpython-313.pyc +0 -0
  7. package/src/__pycache__/__init__.cpython-314.pyc +0 -0
  8. package/src/agents/__init__.py +3 -0
  9. package/src/agents/__pycache__/__init__.cpython-311.pyc +0 -0
  10. package/src/agents/__pycache__/__init__.cpython-313.pyc +0 -0
  11. package/src/agents/__pycache__/__init__.cpython-314.pyc +0 -0
  12. package/src/agents/__pycache__/automation_design_agent.cpython-311.pyc +0 -0
  13. package/src/agents/__pycache__/automation_design_agent.cpython-313.pyc +0 -0
  14. package/src/agents/__pycache__/automation_design_agent.cpython-314.pyc +0 -0
  15. package/src/agents/__pycache__/code_intelligence_agent.cpython-311.pyc +0 -0
  16. package/src/agents/__pycache__/code_intelligence_agent.cpython-313.pyc +0 -0
  17. package/src/agents/__pycache__/confidence_agent.cpython-311.pyc +0 -0
  18. package/src/agents/__pycache__/confidence_agent.cpython-313.pyc +0 -0
  19. package/src/agents/__pycache__/confidence_agent.cpython-314.pyc +0 -0
  20. package/src/agents/__pycache__/execution_validation_agent.cpython-311.pyc +0 -0
  21. package/src/agents/__pycache__/execution_validation_agent.cpython-313.pyc +0 -0
  22. package/src/agents/__pycache__/execution_validation_agent.cpython-314.pyc +0 -0
  23. package/src/agents/__pycache__/framework_analyzer_agent.cpython-311.pyc +0 -0
  24. package/src/agents/__pycache__/framework_analyzer_agent.cpython-313.pyc +0 -0
  25. package/src/agents/__pycache__/fusion_agent.cpython-314.pyc +0 -0
  26. package/src/agents/__pycache__/graph.cpython-314.pyc +0 -0
  27. package/src/agents/__pycache__/intent_agent.cpython-313.pyc +0 -0
  28. package/src/agents/__pycache__/intent_agent.cpython-314.pyc +0 -0
  29. package/src/agents/__pycache__/kg_agent.cpython-314.pyc +0 -0
  30. package/src/agents/__pycache__/memory_agent.cpython-314.pyc +0 -0
  31. package/src/agents/__pycache__/reflection_agent.cpython-314.pyc +0 -0
  32. package/src/agents/__pycache__/regression_agent.cpython-311.pyc +0 -0
  33. package/src/agents/__pycache__/regression_agent.cpython-313.pyc +0 -0
  34. package/src/agents/__pycache__/requirement_agent.cpython-311.pyc +0 -0
  35. package/src/agents/__pycache__/requirement_agent.cpython-313.pyc +0 -0
  36. package/src/agents/__pycache__/requirement_agent.cpython-314.pyc +0 -0
  37. package/src/agents/__pycache__/retrieval_agent.cpython-314.pyc +0 -0
  38. package/src/agents/__pycache__/scenario_agent.cpython-311.pyc +0 -0
  39. package/src/agents/__pycache__/scenario_agent.cpython-313.pyc +0 -0
  40. package/src/agents/__pycache__/scenario_agent.cpython-314.pyc +0 -0
  41. package/src/agents/__pycache__/script_agent.cpython-314.pyc +0 -0
  42. package/src/agents/__pycache__/script_generator_agent.cpython-311.pyc +0 -0
  43. package/src/agents/__pycache__/script_generator_agent.cpython-313.pyc +0 -0
  44. package/src/agents/__pycache__/script_generator_agent.cpython-314.pyc +0 -0
  45. package/src/agents/__pycache__/state.cpython-314.pyc +0 -0
  46. package/src/agents/__pycache__/temporal_agent.cpython-314.pyc +0 -0
  47. package/src/agents/__pycache__/testcase_agent.cpython-311.pyc +0 -0
  48. package/src/agents/__pycache__/testcase_agent.cpython-313.pyc +0 -0
  49. package/src/agents/__pycache__/testcase_agent.cpython-314.pyc +0 -0
  50. package/src/agents/__pycache__/validation_agent.cpython-311.pyc +0 -0
  51. package/src/agents/__pycache__/validation_agent.cpython-313.pyc +0 -0
  52. package/src/agents/__pycache__/validation_agent.cpython-314.pyc +0 -0
  53. package/src/agents/__pycache__/workflow_engine.cpython-311.pyc +0 -0
  54. package/src/agents/__pycache__/workflow_engine.cpython-313.pyc +0 -0
  55. package/src/agents/__pycache__/workflow_engine.cpython-314.pyc +0 -0
  56. package/{knowledge_base → src}/agents/automation_design_agent.py +14 -17
  57. package/{knowledge_base → src}/agents/code_intelligence_agent.py +2 -2
  58. package/src/agents/confidence_agent.py +114 -0
  59. package/{knowledge_base → src}/agents/execution_validation_agent.py +1 -1
  60. package/src/agents/feedback_agent.py +89 -0
  61. package/src/agents/framework_analyzer_agent.py +43 -0
  62. package/{knowledge_base → src}/agents/fusion_agent.py +3 -3
  63. package/{knowledge_base → src}/agents/graph.py +10 -10
  64. package/{knowledge_base → src}/agents/healing_agent.py +4 -4
  65. package/src/agents/intent_agent.py +30 -0
  66. package/src/agents/internal/__init__.py +3 -0
  67. package/src/agents/internal/__pycache__/__init__.cpython-313.pyc +0 -0
  68. package/src/agents/internal/__pycache__/approval_manager.cpython-313.pyc +0 -0
  69. package/src/agents/internal/__pycache__/question_engine.cpython-313.pyc +0 -0
  70. package/src/agents/internal/approval_manager.py +111 -0
  71. package/src/agents/internal/question_engine.py +111 -0
  72. package/src/agents/internal/workflow_engine.py +28 -0
  73. package/{knowledge_base → src}/agents/kg_agent.py +3 -3
  74. package/{knowledge_base → src}/agents/memory_agent.py +4 -4
  75. package/src/agents/orchestrator/__init__.py +3 -0
  76. package/src/agents/orchestrator/__pycache__/__init__.cpython-313.pyc +0 -0
  77. package/src/agents/orchestrator/__pycache__/orchestrator.cpython-313.pyc +0 -0
  78. package/src/agents/orchestrator/orchestrator.py +63 -0
  79. package/{knowledge_base → src}/agents/rca_agent.py +4 -4
  80. package/{knowledge_base → src}/agents/reflection_agent.py +1 -1
  81. package/{knowledge_base → src}/agents/regression_agent.py +2 -2
  82. package/src/agents/requirement_agent.py +97 -0
  83. package/{knowledge_base → src}/agents/retrieval_agent.py +2 -2
  84. package/{knowledge_base → src}/agents/scenario_agent.py +11 -17
  85. package/{knowledge_base → src}/agents/script_agent.py +6 -6
  86. package/{knowledge_base → src}/agents/script_generator_agent.py +12 -10
  87. package/{knowledge_base → src}/agents/temporal_agent.py +3 -3
  88. package/src/agents/testcase_agent.py +163 -0
  89. package/{knowledge_base → src}/agents/validation_agent.py +1 -1
  90. package/src/agents/workflow_engine.py +109 -0
  91. package/{knowledge_base → src}/alembic/README.md +4 -4
  92. package/{knowledge_base → src}/alembic/env.py +1 -1
  93. package/{knowledge_base → src}/alembic/script.py.mako +1 -1
  94. package/{knowledge_base → src}/api/middleware.py +3 -3
  95. package/{knowledge_base → src}/api/server.py +28 -28
  96. package/{knowledge_base → src}/chunking/chunker.py +3 -3
  97. package/src/cli/__pycache__/__init__.cpython-311.pyc +0 -0
  98. package/src/cli/__pycache__/__init__.cpython-313.pyc +0 -0
  99. package/src/cli/__pycache__/__init__.cpython-314.pyc +0 -0
  100. package/src/cli/__pycache__/workflow_cli.cpython-311.pyc +0 -0
  101. package/src/cli/__pycache__/workflow_cli.cpython-313.pyc +0 -0
  102. package/src/cli/__pycache__/workflow_cli.cpython-314.pyc +0 -0
  103. package/{knowledge_base → src}/cli/feedback_cli.py +10 -10
  104. package/{knowledge_base → src}/cli/generate.py +11 -11
  105. package/src/cli/index.ts +704 -0
  106. package/src/cli/platform.ts +147 -0
  107. package/src/cli/workflow_cli.py +930 -0
  108. package/{knowledge_base → src}/config/__init__.py +1 -1
  109. package/src/config/__pycache__/__init__.cpython-311.pyc +0 -0
  110. package/src/config/__pycache__/__init__.cpython-313.pyc +0 -0
  111. package/src/config/__pycache__/__init__.cpython-314.pyc +0 -0
  112. package/src/config/__pycache__/policy_config.cpython-311.pyc +0 -0
  113. package/src/config/__pycache__/policy_config.cpython-313.pyc +0 -0
  114. package/src/config/__pycache__/settings.cpython-311.pyc +0 -0
  115. package/src/config/__pycache__/settings.cpython-313.pyc +0 -0
  116. package/src/config/__pycache__/settings.cpython-314.pyc +0 -0
  117. package/src/config/policy_config.py +85 -0
  118. package/src/config/policy_rules.yaml +50 -0
  119. package/{knowledge_base → src}/config/settings.py +51 -6
  120. package/{knowledge_base → src}/connectors/__init__.py +1 -1
  121. package/src/connectors/__pycache__/__init__.cpython-311.pyc +0 -0
  122. package/src/connectors/__pycache__/__init__.cpython-313.pyc +0 -0
  123. package/src/connectors/__pycache__/__init__.cpython-314.pyc +0 -0
  124. package/src/connectors/__pycache__/base.cpython-311.pyc +0 -0
  125. package/src/connectors/__pycache__/base.cpython-313.pyc +0 -0
  126. package/src/connectors/__pycache__/base.cpython-314.pyc +0 -0
  127. package/src/connectors/__pycache__/jira_connector.cpython-311.pyc +0 -0
  128. package/src/connectors/__pycache__/jira_connector.cpython-313.pyc +0 -0
  129. package/src/connectors/__pycache__/jira_connector.cpython-314.pyc +0 -0
  130. package/src/connectors/__pycache__/query_bridge.cpython-313.pyc +0 -0
  131. package/src/connectors/__pycache__/query_bridge.cpython-314.pyc +0 -0
  132. package/src/connectors/bitbucket_connector.py +334 -0
  133. package/{knowledge_base → src}/connectors/community_connector.py +6 -6
  134. package/{knowledge_base → src}/connectors/confluence_connector.py +4 -4
  135. package/{knowledge_base → src}/connectors/jira_connector.py +7 -11
  136. package/{knowledge_base → src}/connectors/kb_igel_connector.py +6 -6
  137. package/{knowledge_base → src}/connectors/query_bridge.py +11 -11
  138. package/{knowledge_base → src}/connectors/search_backends.py +1 -1
  139. package/{knowledge_base → src}/connectors/serviceNow_connector.py +2 -2
  140. package/{knowledge_base → src}/connectors/sync_scheduler.py +12 -10
  141. package/{knowledge_base → src}/connectors/teamcity_connector.py +2 -2
  142. package/{knowledge_base → src}/connectors/testRail_connector.py +2 -2
  143. package/{knowledge_base → src}/connectors/web_fetcher.py +1 -1
  144. package/src/connectors/xray_connector.py +337 -0
  145. package/{knowledge_base → src}/core/__init__.py +1 -1
  146. package/src/core/__pycache__/__init__.cpython-311.pyc +0 -0
  147. package/src/core/__pycache__/__init__.cpython-313.pyc +0 -0
  148. package/src/core/__pycache__/__init__.cpython-314.pyc +0 -0
  149. package/src/core/__pycache__/circuit_breaker.cpython-313.pyc +0 -0
  150. package/src/core/__pycache__/circuit_breaker.cpython-314.pyc +0 -0
  151. package/src/core/__pycache__/confidence.cpython-311.pyc +0 -0
  152. package/src/core/__pycache__/confidence.cpython-313.pyc +0 -0
  153. package/src/core/__pycache__/confidence.cpython-314.pyc +0 -0
  154. package/src/core/__pycache__/context_engine.cpython-311.pyc +0 -0
  155. package/src/core/__pycache__/context_engine.cpython-313.pyc +0 -0
  156. package/src/core/__pycache__/evidence_resolver.cpython-311.pyc +0 -0
  157. package/src/core/__pycache__/evidence_resolver.cpython-313.pyc +0 -0
  158. package/src/core/__pycache__/guardrails.cpython-311.pyc +0 -0
  159. package/src/core/__pycache__/guardrails.cpython-313.pyc +0 -0
  160. package/src/core/__pycache__/hooks.cpython-311.pyc +0 -0
  161. package/src/core/__pycache__/hooks.cpython-313.pyc +0 -0
  162. package/src/core/__pycache__/intent_service.cpython-313.pyc +0 -0
  163. package/src/core/__pycache__/llm_executor.cpython-311.pyc +0 -0
  164. package/src/core/__pycache__/llm_executor.cpython-313.pyc +0 -0
  165. package/src/core/__pycache__/model_router.cpython-311.pyc +0 -0
  166. package/src/core/__pycache__/model_router.cpython-313.pyc +0 -0
  167. package/src/core/__pycache__/orchestration_contracts.cpython-311.pyc +0 -0
  168. package/src/core/__pycache__/orchestration_contracts.cpython-313.pyc +0 -0
  169. package/src/core/__pycache__/precedence.cpython-311.pyc +0 -0
  170. package/src/core/__pycache__/precedence.cpython-313.pyc +0 -0
  171. package/src/core/__pycache__/prompt_builder.cpython-311.pyc +0 -0
  172. package/src/core/__pycache__/prompt_builder.cpython-313.pyc +0 -0
  173. package/src/core/__pycache__/prompt_policy_engine.cpython-311.pyc +0 -0
  174. package/src/core/__pycache__/prompt_policy_engine.cpython-313.pyc +0 -0
  175. package/{knowledge_base → src}/core/cache.py +2 -2
  176. package/{knowledge_base → src}/core/confidence.py +2 -2
  177. package/src/core/context_engine.py +138 -0
  178. package/src/core/evidence_resolver.py +72 -0
  179. package/src/core/guardrails.py +22 -0
  180. package/src/core/hooks.py +57 -0
  181. package/src/core/intent_service.py +74 -0
  182. package/src/core/llm_executor.py +138 -0
  183. package/{knowledge_base → src}/core/logging_setup.py +1 -1
  184. package/src/core/model_router.py +246 -0
  185. package/src/core/orchestration_contracts.py +66 -0
  186. package/src/core/persistence_engine.py +159 -0
  187. package/src/core/prompt_builder.py +49 -0
  188. package/src/core/prompt_policy_engine.py +35 -0
  189. package/src/core/traceability_engine.py +56 -0
  190. package/src/db/__pycache__/__init__.cpython-311.pyc +0 -0
  191. package/src/db/__pycache__/__init__.cpython-313.pyc +0 -0
  192. package/src/db/__pycache__/__init__.cpython-314.pyc +0 -0
  193. package/src/db/__pycache__/client.cpython-311.pyc +0 -0
  194. package/src/db/__pycache__/client.cpython-313.pyc +0 -0
  195. package/src/db/__pycache__/client.cpython-314.pyc +0 -0
  196. package/src/db/__pycache__/igel_schema.cpython-311.pyc +0 -0
  197. package/src/db/__pycache__/igel_schema.cpython-313.pyc +0 -0
  198. package/src/db/__pycache__/igel_schema.cpython-314.pyc +0 -0
  199. package/src/db/__pycache__/kg_introspect.cpython-311.pyc +0 -0
  200. package/src/db/__pycache__/kg_introspect.cpython-313.pyc +0 -0
  201. package/{knowledge_base → src}/db/__pycache__/kg_introspect.cpython-314.pyc +0 -0
  202. package/{knowledge_base → src}/db/client.py +1 -1
  203. package/{knowledge_base → src}/db/connector_sync.py +1 -1
  204. package/{knowledge_base → src}/db/feedback_schema.py +2 -2
  205. package/{knowledge_base → src}/db/igel_schema.py +29 -4
  206. package/{knowledge_base → src}/db/kg_introspect.py +1 -1
  207. package/src/db/migrations.py +237 -0
  208. package/{knowledge_base → src}/db/schema.py +6 -6
  209. package/{knowledge_base → src}/deploy/Dockerfile +3 -3
  210. package/{knowledge_base → src}/deploy/feedback_automation.sh +3 -3
  211. package/{knowledge_base → src}/deploy/firecrawl-docker.sh +4 -4
  212. package/{knowledge_base → src}/deploy/igel-testgen.service +2 -2
  213. package/{knowledge_base → src}/deploy/install_reranker.sh +1 -1
  214. package/{knowledge_base → src}/deploy/requirements.txt +1 -2
  215. package/{knowledge_base → src}/deploy/run_server.sh +1 -1
  216. package/{knowledge_base → src}/docs/TEST_GENERATION_GUIDE.md +15 -15
  217. package/src/embeddings/__pycache__/__init__.cpython-311.pyc +0 -0
  218. package/src/embeddings/__pycache__/__init__.cpython-313.pyc +0 -0
  219. package/src/embeddings/__pycache__/__init__.cpython-314.pyc +0 -0
  220. package/src/embeddings/__pycache__/azure_embedder.cpython-311.pyc +0 -0
  221. package/src/embeddings/__pycache__/azure_embedder.cpython-313.pyc +0 -0
  222. package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-314.pyc +0 -0
  223. package/{knowledge_base → src}/embeddings/azure_embedder.py +10 -1
  224. package/{knowledge_base → src}/eval/__init__.py +3 -3
  225. package/{knowledge_base → src}/eval/__main__.py +7 -7
  226. package/src/eval/__pycache__/__init__.cpython-311.pyc +0 -0
  227. package/src/eval/__pycache__/__init__.cpython-313.pyc +0 -0
  228. package/src/eval/__pycache__/__init__.cpython-314.pyc +0 -0
  229. package/src/eval/__pycache__/baseline.cpython-311.pyc +0 -0
  230. package/src/eval/__pycache__/baseline.cpython-313.pyc +0 -0
  231. package/src/eval/__pycache__/baseline.cpython-314.pyc +0 -0
  232. package/src/eval/__pycache__/harness.cpython-311.pyc +0 -0
  233. package/src/eval/__pycache__/harness.cpython-313.pyc +0 -0
  234. package/src/eval/__pycache__/harness.cpython-314.pyc +0 -0
  235. package/src/eval/__pycache__/scorers.cpython-311.pyc +0 -0
  236. package/src/eval/__pycache__/scorers.cpython-313.pyc +0 -0
  237. package/src/eval/__pycache__/scorers.cpython-314.pyc +0 -0
  238. package/{knowledge_base → src}/eval/harness.py +6 -6
  239. package/{knowledge_base → src}/feedback/__init__.py +1 -1
  240. package/{knowledge_base → src}/feedback/analytics.py +1 -1
  241. package/{knowledge_base → src}/feedback/applier.py +4 -4
  242. package/{knowledge_base → src}/feedback/curator.py +2 -2
  243. package/{knowledge_base → src}/feedback/handler.py +1 -1
  244. package/src/generation/__pycache__/__init__.cpython-313.pyc +0 -0
  245. package/src/generation/__pycache__/__init__.cpython-314.pyc +0 -0
  246. package/src/generation/__pycache__/input_classifier.cpython-313.pyc +0 -0
  247. package/src/generation/__pycache__/manual_tc_parser.cpython-313.pyc +0 -0
  248. package/src/generation/__pycache__/prompts.cpython-313.pyc +0 -0
  249. package/src/generation/__pycache__/prompts.cpython-314.pyc +0 -0
  250. package/src/generation/__pycache__/test_generator.cpython-313.pyc +0 -0
  251. package/src/generation/__pycache__/test_generator.cpython-314.pyc +0 -0
  252. package/{knowledge_base → src}/generation/input_classifier.py +1 -1
  253. package/{knowledge_base → src}/generation/prompts.py +1 -1
  254. package/{knowledge_base → src}/generation/tc_transformer.py +10 -10
  255. package/{knowledge_base → src}/generation/test_generator.py +56 -10
  256. package/{knowledge_base → src}/graph_db/__init__.py +1 -1
  257. package/{knowledge_base → src}/graph_db/graphiti_client.py +2 -2
  258. package/{knowledge_base → src}/graph_db/kg_traversal.py +3 -3
  259. package/{knowledge_base → src}/graph_db/migrate_kg.py +4 -4
  260. package/{knowledge_base → src}/graph_db/neo4j_client.py +1 -1
  261. package/{knowledge_base → src}/graph_db/temporal_ingest.py +1 -1
  262. package/{knowledge_base → src}/ingestion/kg_extractor.py +6 -6
  263. package/{knowledge_base → src}/ingestion/web_ingest.py +6 -6
  264. package/src/intelligence/__pycache__/__init__.cpython-311.pyc +0 -0
  265. package/src/intelligence/__pycache__/__init__.cpython-313.pyc +0 -0
  266. package/src/intelligence/__pycache__/diff_analyzer.cpython-311.pyc +0 -0
  267. package/src/intelligence/__pycache__/diff_analyzer.cpython-313.pyc +0 -0
  268. package/src/intelligence/__pycache__/routing_engine.cpython-311.pyc +0 -0
  269. package/src/intelligence/__pycache__/routing_engine.cpython-313.pyc +0 -0
  270. package/src/intelligence/diff_analyzer.py +109 -0
  271. package/{knowledge_base → src}/intelligence/execution_ingest.py +3 -3
  272. package/src/intelligence/routing_engine.py +74 -0
  273. package/src/mcp/server.ts +384 -0
  274. package/src/memory/__init__.py +6 -0
  275. package/src/memory/__pycache__/__init__.cpython-314.pyc +0 -0
  276. package/src/memory/__pycache__/cognee_client.cpython-314.pyc +0 -0
  277. package/src/memory/__pycache__/memory_types.cpython-314.pyc +0 -0
  278. package/{knowledge_base → src}/memory/cognee_client.py +3 -3
  279. package/src/models/__pycache__/test_requirement.cpython-311.pyc +0 -0
  280. package/src/models/__pycache__/test_requirement.cpython-313.pyc +0 -0
  281. package/src/models/__pycache__/test_requirement.cpython-314.pyc +0 -0
  282. package/{knowledge_base → src}/models/test_requirement.py +12 -7
  283. package/{knowledge_base → src}/parsers/csv_parser.py +1 -1
  284. package/{knowledge_base → src}/parsers/doc_parser.py +1 -1
  285. package/{knowledge_base → src}/parsers/html_parser.py +1 -1
  286. package/{knowledge_base → src}/parsers/pdf_parser.py +1 -1
  287. package/src/project/__pycache__/__init__.cpython-311.pyc +0 -0
  288. package/src/project/__pycache__/__init__.cpython-313.pyc +0 -0
  289. package/src/project/__pycache__/ai_folder.cpython-311.pyc +0 -0
  290. package/src/project/__pycache__/ai_folder.cpython-313.pyc +0 -0
  291. package/src/project/__pycache__/context_enricher.cpython-313.pyc +0 -0
  292. package/src/project/__pycache__/context_projection_builder.cpython-311.pyc +0 -0
  293. package/src/project/__pycache__/context_projection_builder.cpython-313.pyc +0 -0
  294. package/src/project/__pycache__/context_requirement_sync.cpython-311.pyc +0 -0
  295. package/src/project/__pycache__/context_requirement_sync.cpython-313.pyc +0 -0
  296. package/src/project/ai_folder.py +602 -0
  297. package/src/project/context_enricher.py +333 -0
  298. package/src/project/context_projection_builder.py +167 -0
  299. package/src/project/context_requirement_sync.py +205 -0
  300. package/src/project/init_check.py +214 -0
  301. package/src/prompts/__pycache__/prompt_loader.cpython-313.pyc +0 -0
  302. package/src/prompts/automation_design.md +12 -0
  303. package/src/prompts/policies/automation_generation_policy.md +11 -0
  304. package/src/prompts/policies/generation_instructions.md +24 -0
  305. package/src/prompts/policies/guardrails.md +6 -0
  306. package/src/prompts/policies/traceability_policy.md +9 -0
  307. package/src/prompts/prompt_loader.py +56 -0
  308. package/src/prompts/requirement_understanding.md +17 -0
  309. package/src/prompts/scenario_generator.md +17 -0
  310. package/src/prompts/script_generator.md +13 -0
  311. package/src/prompts/test_case_generator.md +23 -0
  312. package/src/retrieval/__pycache__/__init__.cpython-311.pyc +0 -0
  313. package/src/retrieval/__pycache__/__init__.cpython-313.pyc +0 -0
  314. package/src/retrieval/__pycache__/__init__.cpython-314.pyc +0 -0
  315. package/src/retrieval/__pycache__/knowledge_graph.cpython-311.pyc +0 -0
  316. package/src/retrieval/__pycache__/knowledge_graph.cpython-313.pyc +0 -0
  317. package/src/retrieval/__pycache__/knowledge_graph.cpython-314.pyc +0 -0
  318. package/src/retrieval/__pycache__/retriever.cpython-311.pyc +0 -0
  319. package/src/retrieval/__pycache__/retriever.cpython-313.pyc +0 -0
  320. package/src/retrieval/__pycache__/retriever.cpython-314.pyc +0 -0
  321. package/src/retrieval/__pycache__/unified_query.cpython-313.pyc +0 -0
  322. package/src/retrieval/__pycache__/unified_query.cpython-314.pyc +0 -0
  323. package/{knowledge_base → src}/retrieval/context_fusion.py +3 -3
  324. package/{knowledge_base → src}/retrieval/knowledge_graph.py +4 -4
  325. package/{knowledge_base → src}/retrieval/reranker.py +2 -2
  326. package/{knowledge_base → src}/retrieval/retriever.py +11 -11
  327. package/{knowledge_base → src}/retrieval/unified_query.py +7 -7
  328. package/{knowledge_base → src}/retrieval/web_retriever.py +6 -6
  329. package/{knowledge_base → src}/validators/step_fidelity.py +1 -1
  330. package/src/vision/__init__.py +0 -0
  331. package/{knowledge_base → src}/vision/image_describer.py +1 -1
  332. package/knowledge_base/__pycache__/__init__.cpython-314.pyc +0 -0
  333. package/knowledge_base/agents/__init__.py +0 -6
  334. package/knowledge_base/agents/confidence_agent.py +0 -94
  335. package/knowledge_base/agents/feedback_agent.py +0 -56
  336. package/knowledge_base/agents/intent_agent.py +0 -76
  337. package/knowledge_base/agents/requirement_agent.py +0 -71
  338. package/knowledge_base/agents/testcase_agent.py +0 -111
  339. package/knowledge_base/agents/workflow_engine.py +0 -87
  340. package/knowledge_base/cli/generate_qcapps134.py +0 -391
  341. package/knowledge_base/cli/workflow_cli.py +0 -93
  342. package/knowledge_base/config/.env +0 -100
  343. package/knowledge_base/config/.env.example +0 -75
  344. package/knowledge_base/connectors/bitbucket_connector.py +0 -25
  345. package/knowledge_base/db/__pycache__/__init__.cpython-314.pyc +0 -0
  346. package/knowledge_base/db/__pycache__/client.cpython-314.pyc +0 -0
  347. package/knowledge_base/db/migrations.py +0 -22
  348. package/knowledge_base/embeddings/__pycache__/__init__.cpython-314.pyc +0 -0
  349. package/knowledge_base/ingestion/ingest.py +0 -346
  350. package/knowledge_base/ingestion/ingest_images.py +0 -330
  351. package/knowledge_base/memory/__init__.py +0 -6
  352. package/knowledge_base/memory/ingest_memory.py +0 -60
  353. /package/{knowledge_base → src}/__init__.py +0 -0
  354. /package/{knowledge_base → src}/__pycache__/__init__.cpython-37.pyc +0 -0
  355. /package/{knowledge_base → src}/__pycache__/__init__.cpython-38.pyc +0 -0
  356. /package/{knowledge_base → src}/__pycache__/confidence.cpython-37.pyc +0 -0
  357. /package/{knowledge_base → src}/__pycache__/config.cpython-314.pyc +0 -0
  358. /package/{knowledge_base → src}/__pycache__/config.cpython-37.pyc +0 -0
  359. /package/{knowledge_base → src}/__pycache__/config.cpython-38.pyc +0 -0
  360. /package/{knowledge_base → src}/__pycache__/context_fusion.cpython-314.pyc +0 -0
  361. /package/{knowledge_base → src}/__pycache__/context_fusion.cpython-37.pyc +0 -0
  362. /package/{knowledge_base → src}/__pycache__/feedback_analytics.cpython-37.pyc +0 -0
  363. /package/{knowledge_base → src}/__pycache__/feedback_applier.cpython-37.pyc +0 -0
  364. /package/{knowledge_base → src}/__pycache__/feedback_cli.cpython-37.pyc +0 -0
  365. /package/{knowledge_base → src}/__pycache__/feedback_curator.cpython-37.pyc +0 -0
  366. /package/{knowledge_base → src}/__pycache__/feedback_handler.cpython-37.pyc +0 -0
  367. /package/{knowledge_base → src}/__pycache__/generate.cpython-37.pyc +0 -0
  368. /package/{knowledge_base → src}/__pycache__/generate_qcapps134.cpython-37.pyc +0 -0
  369. /package/{knowledge_base → src}/__pycache__/input_classifier.cpython-314.pyc +0 -0
  370. /package/{knowledge_base → src}/__pycache__/input_classifier.cpython-37.pyc +0 -0
  371. /package/{knowledge_base → src}/__pycache__/kg_extractor.cpython-37.pyc +0 -0
  372. /package/{knowledge_base → src}/__pycache__/knowledge_graph.cpython-314.pyc +0 -0
  373. /package/{knowledge_base → src}/__pycache__/knowledge_graph.cpython-37.pyc +0 -0
  374. /package/{knowledge_base → src}/__pycache__/manual_tc_parser.cpython-314.pyc +0 -0
  375. /package/{knowledge_base → src}/__pycache__/manual_tc_parser.cpython-37.pyc +0 -0
  376. /package/{knowledge_base → src}/__pycache__/precedence.cpython-37.pyc +0 -0
  377. /package/{knowledge_base → src}/__pycache__/prompts.cpython-314.pyc +0 -0
  378. /package/{knowledge_base → src}/__pycache__/prompts.cpython-37.pyc +0 -0
  379. /package/{knowledge_base → src}/__pycache__/reranker.cpython-314.pyc +0 -0
  380. /package/{knowledge_base → src}/__pycache__/reranker.cpython-37.pyc +0 -0
  381. /package/{knowledge_base → src}/__pycache__/retrieval_debug.cpython-314.pyc +0 -0
  382. /package/{knowledge_base → src}/__pycache__/retrieval_debug.cpython-37.pyc +0 -0
  383. /package/{knowledge_base → src}/__pycache__/retriever.cpython-314.pyc +0 -0
  384. /package/{knowledge_base → src}/__pycache__/retriever.cpython-37.pyc +0 -0
  385. /package/{knowledge_base → src}/__pycache__/server.cpython-37.pyc +0 -0
  386. /package/{knowledge_base → src}/__pycache__/tc_transformer.cpython-314.pyc +0 -0
  387. /package/{knowledge_base → src}/__pycache__/tc_transformer.cpython-37.pyc +0 -0
  388. /package/{knowledge_base → src}/__pycache__/test_generator.cpython-314.pyc +0 -0
  389. /package/{knowledge_base → src}/__pycache__/test_generator.cpython-37.pyc +0 -0
  390. /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-37.pyc +0 -0
  391. /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-38.pyc +0 -0
  392. /package/{knowledge_base → src}/agents/__pycache__/fusion_agent.cpython-37.pyc +0 -0
  393. /package/{knowledge_base → src}/agents/__pycache__/fusion_agent.cpython-38.pyc +0 -0
  394. /package/{knowledge_base → src}/agents/__pycache__/graph.cpython-37.pyc +0 -0
  395. /package/{knowledge_base → src}/agents/__pycache__/graph.cpython-38.pyc +0 -0
  396. /package/{knowledge_base → src}/agents/__pycache__/healing_agent.cpython-37.pyc +0 -0
  397. /package/{knowledge_base → src}/agents/__pycache__/intent_agent.cpython-37.pyc +0 -0
  398. /package/{knowledge_base → src}/agents/__pycache__/intent_agent.cpython-38.pyc +0 -0
  399. /package/{knowledge_base → src}/agents/__pycache__/kg_agent.cpython-37.pyc +0 -0
  400. /package/{knowledge_base → src}/agents/__pycache__/kg_agent.cpython-38.pyc +0 -0
  401. /package/{knowledge_base → src}/agents/__pycache__/memory_agent.cpython-37.pyc +0 -0
  402. /package/{knowledge_base → src}/agents/__pycache__/memory_agent.cpython-38.pyc +0 -0
  403. /package/{knowledge_base → src}/agents/__pycache__/rca_agent.cpython-37.pyc +0 -0
  404. /package/{knowledge_base → src}/agents/__pycache__/reflection_agent.cpython-37.pyc +0 -0
  405. /package/{knowledge_base → src}/agents/__pycache__/reflection_agent.cpython-38.pyc +0 -0
  406. /package/{knowledge_base → src}/agents/__pycache__/regression_agent.cpython-37.pyc +0 -0
  407. /package/{knowledge_base → src}/agents/__pycache__/retrieval_agent.cpython-37.pyc +0 -0
  408. /package/{knowledge_base → src}/agents/__pycache__/retrieval_agent.cpython-38.pyc +0 -0
  409. /package/{knowledge_base → src}/agents/__pycache__/script_agent.cpython-37.pyc +0 -0
  410. /package/{knowledge_base → src}/agents/__pycache__/script_agent.cpython-38.pyc +0 -0
  411. /package/{knowledge_base → src}/agents/__pycache__/state.cpython-37.pyc +0 -0
  412. /package/{knowledge_base → src}/agents/__pycache__/state.cpython-38.pyc +0 -0
  413. /package/{knowledge_base → src}/agents/__pycache__/temporal_agent.cpython-37.pyc +0 -0
  414. /package/{knowledge_base → src}/agents/__pycache__/temporal_agent.cpython-38.pyc +0 -0
  415. /package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-37.pyc +0 -0
  416. /package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-38.pyc +0 -0
  417. /package/{knowledge_base → src}/agents/state.py +0 -0
  418. /package/{knowledge_base → src}/alembic/__pycache__/env.cpython-37.pyc +0 -0
  419. /package/{knowledge_base → src}/alembic/__pycache__/env.cpython-38.pyc +0 -0
  420. /package/{knowledge_base → src}/alembic/versions/.gitkeep +0 -0
  421. /package/{knowledge_base → src}/alembic/versions/001_phase0_feedback.py +0 -0
  422. /package/{knowledge_base → src}/alembic/versions/002_feedback_promotions.py +0 -0
  423. /package/{knowledge_base → src}/alembic/versions/003_enterprise_hardening.py +0 -0
  424. /package/{knowledge_base → src}/alembic/versions/__pycache__/001_phase0_feedback.cpython-37.pyc +0 -0
  425. /package/{knowledge_base → src}/alembic/versions/__pycache__/001_phase0_feedback.cpython-38.pyc +0 -0
  426. /package/{knowledge_base → src}/alembic/versions/__pycache__/002_feedback_promotions.cpython-37.pyc +0 -0
  427. /package/{knowledge_base → src}/alembic/versions/__pycache__/002_feedback_promotions.cpython-38.pyc +0 -0
  428. /package/{knowledge_base → src}/api/__init__.py +0 -0
  429. /package/{knowledge_base → src}/api/__pycache__/__init__.cpython-37.pyc +0 -0
  430. /package/{knowledge_base → src}/api/__pycache__/__init__.cpython-38.pyc +0 -0
  431. /package/{knowledge_base → src}/api/__pycache__/middleware.cpython-38.pyc +0 -0
  432. /package/{knowledge_base → src}/api/__pycache__/server.cpython-37.pyc +0 -0
  433. /package/{knowledge_base → src}/api/__pycache__/server.cpython-38.pyc +0 -0
  434. /package/{knowledge_base → src}/chunking/__init__.py +0 -0
  435. /package/{knowledge_base → src}/chunking/__pycache__/__init__.cpython-37.pyc +0 -0
  436. /package/{knowledge_base → src}/chunking/__pycache__/__init__.cpython-38.pyc +0 -0
  437. /package/{knowledge_base → src}/chunking/__pycache__/chunker.cpython-37.pyc +0 -0
  438. /package/{knowledge_base → src}/chunking/__pycache__/chunker.cpython-38.pyc +0 -0
  439. /package/{knowledge_base → src}/chunking/__pycache__/validators.cpython-37.pyc +0 -0
  440. /package/{knowledge_base → src}/chunking/__pycache__/validators.cpython-38.pyc +0 -0
  441. /package/{knowledge_base → src}/chunking/validators.py +0 -0
  442. /package/{knowledge_base → src}/cli/__init__.py +0 -0
  443. /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-37.pyc +0 -0
  444. /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-38.pyc +0 -0
  445. /package/{knowledge_base → src}/cli/__pycache__/feedback_cli.cpython-37.pyc +0 -0
  446. /package/{knowledge_base → src}/cli/__pycache__/feedback_cli.cpython-38.pyc +0 -0
  447. /package/{knowledge_base → src}/cli/__pycache__/generate.cpython-37.pyc +0 -0
  448. /package/{knowledge_base → src}/cli/__pycache__/generate.cpython-38.pyc +0 -0
  449. /package/{knowledge_base → src}/cli/__pycache__/generate_qcapps134.cpython-37.pyc +0 -0
  450. /package/{knowledge_base → src}/config/__pycache__/__init__.cpython-37.pyc +0 -0
  451. /package/{knowledge_base → src}/config/__pycache__/__init__.cpython-38.pyc +0 -0
  452. /package/{knowledge_base → src}/config/__pycache__/settings.cpython-37.pyc +0 -0
  453. /package/{knowledge_base → src}/config/__pycache__/settings.cpython-38.pyc +0 -0
  454. /package/{knowledge_base → src}/connectors/__pycache__/__init__.cpython-37.pyc +0 -0
  455. /package/{knowledge_base → src}/connectors/__pycache__/__init__.cpython-38.pyc +0 -0
  456. /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-37.pyc +0 -0
  457. /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-38.pyc +0 -0
  458. /package/{knowledge_base → src}/connectors/__pycache__/bitbucket_connector.cpython-37.pyc +0 -0
  459. /package/{knowledge_base → src}/connectors/__pycache__/bitbucket_connector.cpython-38.pyc +0 -0
  460. /package/{knowledge_base → src}/connectors/__pycache__/community_connector.cpython-38.pyc +0 -0
  461. /package/{knowledge_base → src}/connectors/__pycache__/confluence_connector.cpython-37.pyc +0 -0
  462. /package/{knowledge_base → src}/connectors/__pycache__/confluence_connector.cpython-38.pyc +0 -0
  463. /package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-37.pyc +0 -0
  464. /package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-38.pyc +0 -0
  465. /package/{knowledge_base → src}/connectors/__pycache__/kb_igel_connector.cpython-38.pyc +0 -0
  466. /package/{knowledge_base → src}/connectors/__pycache__/playwright_fetcher.cpython-38.pyc +0 -0
  467. /package/{knowledge_base → src}/connectors/__pycache__/query_bridge.cpython-38.pyc +0 -0
  468. /package/{knowledge_base → src}/connectors/__pycache__/search_backends.cpython-38.pyc +0 -0
  469. /package/{knowledge_base → src}/connectors/__pycache__/serviceNow_connector.cpython-37.pyc +0 -0
  470. /package/{knowledge_base → src}/connectors/__pycache__/serviceNow_connector.cpython-38.pyc +0 -0
  471. /package/{knowledge_base → src}/connectors/__pycache__/sync_scheduler.cpython-37.pyc +0 -0
  472. /package/{knowledge_base → src}/connectors/__pycache__/sync_scheduler.cpython-38.pyc +0 -0
  473. /package/{knowledge_base → src}/connectors/__pycache__/teamcity_connector.cpython-37.pyc +0 -0
  474. /package/{knowledge_base → src}/connectors/__pycache__/teamcity_connector.cpython-38.pyc +0 -0
  475. /package/{knowledge_base → src}/connectors/__pycache__/testRail_connector.cpython-37.pyc +0 -0
  476. /package/{knowledge_base → src}/connectors/__pycache__/testRail_connector.cpython-38.pyc +0 -0
  477. /package/{knowledge_base → src}/connectors/__pycache__/web_fetcher.cpython-38.pyc +0 -0
  478. /package/{knowledge_base → src}/connectors/base.py +0 -0
  479. /package/{knowledge_base → src}/connectors/playwright_fetcher.py +0 -0
  480. /package/{knowledge_base → src}/core/__pycache__/__init__.cpython-37.pyc +0 -0
  481. /package/{knowledge_base → src}/core/__pycache__/__init__.cpython-38.pyc +0 -0
  482. /package/{knowledge_base → src}/core/__pycache__/cache.cpython-38.pyc +0 -0
  483. /package/{knowledge_base → src}/core/__pycache__/circuit_breaker.cpython-38.pyc +0 -0
  484. /package/{knowledge_base → src}/core/__pycache__/confidence.cpython-37.pyc +0 -0
  485. /package/{knowledge_base → src}/core/__pycache__/confidence.cpython-38.pyc +0 -0
  486. /package/{knowledge_base → src}/core/__pycache__/logging_setup.cpython-38.pyc +0 -0
  487. /package/{knowledge_base → src}/core/__pycache__/metrics.cpython-38.pyc +0 -0
  488. /package/{knowledge_base → src}/core/__pycache__/precedence.cpython-37.pyc +0 -0
  489. /package/{knowledge_base → src}/core/__pycache__/precedence.cpython-38.pyc +0 -0
  490. /package/{knowledge_base → src}/core/__pycache__/request_context.cpython-38.pyc +0 -0
  491. /package/{knowledge_base → src}/core/circuit_breaker.py +0 -0
  492. /package/{knowledge_base → src}/core/metrics.py +0 -0
  493. /package/{knowledge_base → src}/core/precedence.py +0 -0
  494. /package/{knowledge_base → src}/core/request_context.py +0 -0
  495. /package/{knowledge_base → src}/db/__init__.py +0 -0
  496. /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-37.pyc +0 -0
  497. /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-38.pyc +0 -0
  498. /package/{knowledge_base → src}/db/__pycache__/client.cpython-37.pyc +0 -0
  499. /package/{knowledge_base → src}/db/__pycache__/client.cpython-38.pyc +0 -0
  500. /package/{knowledge_base → src}/db/__pycache__/connector_sync.cpython-38.pyc +0 -0
  501. /package/{knowledge_base → src}/db/__pycache__/feedback_schema.cpython-37.pyc +0 -0
  502. /package/{knowledge_base → src}/db/__pycache__/feedback_schema.cpython-38.pyc +0 -0
  503. /package/{knowledge_base → src}/db/__pycache__/kg_introspect.cpython-37.pyc +0 -0
  504. /package/{knowledge_base → src}/db/__pycache__/kg_introspect.cpython-38.pyc +0 -0
  505. /package/{knowledge_base → src}/db/__pycache__/schema.cpython-37.pyc +0 -0
  506. /package/{knowledge_base → src}/db/__pycache__/schema.cpython-38.pyc +0 -0
  507. /package/{knowledge_base → src}/embeddings/__init__.py +0 -0
  508. /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-37.pyc +0 -0
  509. /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-38.pyc +0 -0
  510. /package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-37.pyc +0 -0
  511. /package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-38.pyc +0 -0
  512. /package/{knowledge_base → src}/eval/__pycache__/__init__.cpython-37.pyc +0 -0
  513. /package/{knowledge_base → src}/eval/__pycache__/__init__.cpython-38.pyc +0 -0
  514. /package/{knowledge_base → src}/eval/__pycache__/__main__.cpython-37.pyc +0 -0
  515. /package/{knowledge_base → src}/eval/__pycache__/baseline.cpython-37.pyc +0 -0
  516. /package/{knowledge_base → src}/eval/__pycache__/baseline.cpython-38.pyc +0 -0
  517. /package/{knowledge_base → src}/eval/__pycache__/harness.cpython-37.pyc +0 -0
  518. /package/{knowledge_base → src}/eval/__pycache__/harness.cpython-38.pyc +0 -0
  519. /package/{knowledge_base → src}/eval/__pycache__/scorers.cpython-37.pyc +0 -0
  520. /package/{knowledge_base → src}/eval/__pycache__/scorers.cpython-38.pyc +0 -0
  521. /package/{knowledge_base → src}/eval/baseline.py +0 -0
  522. /package/{knowledge_base → src}/eval/queries_50.json +0 -0
  523. /package/{knowledge_base → src}/eval/scorers.py +0 -0
  524. /package/{knowledge_base → src}/exemplars/README.md +0 -0
  525. /package/{knowledge_base → src}/exemplars/__pycache__/pytest_reference_snippet.cpython-37.pyc +0 -0
  526. /package/{knowledge_base → src}/exemplars/gold_manual_concise_snippet.md +0 -0
  527. /package/{knowledge_base → src}/exemplars/gold_manual_detailed_snippet.md +0 -0
  528. /package/{knowledge_base → src}/exemplars/pytest_reference_snippet.py +0 -0
  529. /package/{knowledge_base → src}/feedback/__pycache__/__init__.cpython-37.pyc +0 -0
  530. /package/{knowledge_base → src}/feedback/__pycache__/__init__.cpython-38.pyc +0 -0
  531. /package/{knowledge_base → src}/feedback/__pycache__/analytics.cpython-37.pyc +0 -0
  532. /package/{knowledge_base → src}/feedback/__pycache__/analytics.cpython-38.pyc +0 -0
  533. /package/{knowledge_base → src}/feedback/__pycache__/applier.cpython-37.pyc +0 -0
  534. /package/{knowledge_base → src}/feedback/__pycache__/applier.cpython-38.pyc +0 -0
  535. /package/{knowledge_base → src}/feedback/__pycache__/curator.cpython-37.pyc +0 -0
  536. /package/{knowledge_base → src}/feedback/__pycache__/curator.cpython-38.pyc +0 -0
  537. /package/{knowledge_base → src}/feedback/__pycache__/handler.cpython-37.pyc +0 -0
  538. /package/{knowledge_base → src}/feedback/__pycache__/handler.cpython-38.pyc +0 -0
  539. /package/{knowledge_base → src}/generation/__init__.py +0 -0
  540. /package/{knowledge_base → src}/generation/__pycache__/__init__.cpython-37.pyc +0 -0
  541. /package/{knowledge_base → src}/generation/__pycache__/__init__.cpython-38.pyc +0 -0
  542. /package/{knowledge_base → src}/generation/__pycache__/input_classifier.cpython-37.pyc +0 -0
  543. /package/{knowledge_base → src}/generation/__pycache__/input_classifier.cpython-38.pyc +0 -0
  544. /package/{knowledge_base → src}/generation/__pycache__/manual_tc_parser.cpython-37.pyc +0 -0
  545. /package/{knowledge_base → src}/generation/__pycache__/manual_tc_parser.cpython-38.pyc +0 -0
  546. /package/{knowledge_base → src}/generation/__pycache__/prompts.cpython-37.pyc +0 -0
  547. /package/{knowledge_base → src}/generation/__pycache__/prompts.cpython-38.pyc +0 -0
  548. /package/{knowledge_base → src}/generation/__pycache__/tc_transformer.cpython-37.pyc +0 -0
  549. /package/{knowledge_base → src}/generation/__pycache__/test_generator.cpython-37.pyc +0 -0
  550. /package/{knowledge_base → src}/generation/__pycache__/test_generator.cpython-38.pyc +0 -0
  551. /package/{knowledge_base → src}/generation/manual_tc_parser.py +0 -0
  552. /package/{knowledge_base → src}/graph_db/__pycache__/__init__.cpython-37.pyc +0 -0
  553. /package/{knowledge_base → src}/graph_db/__pycache__/__init__.cpython-38.pyc +0 -0
  554. /package/{knowledge_base → src}/graph_db/__pycache__/graphiti_client.cpython-37.pyc +0 -0
  555. /package/{knowledge_base → src}/graph_db/__pycache__/kg_traversal.cpython-37.pyc +0 -0
  556. /package/{knowledge_base → src}/graph_db/__pycache__/migrate_kg.cpython-37.pyc +0 -0
  557. /package/{knowledge_base → src}/graph_db/__pycache__/neo4j_client.cpython-37.pyc +0 -0
  558. /package/{knowledge_base → src}/graph_db/__pycache__/neo4j_client.cpython-38.pyc +0 -0
  559. /package/{knowledge_base → src}/graph_db/__pycache__/schema.cpython-37.pyc +0 -0
  560. /package/{knowledge_base → src}/graph_db/__pycache__/temporal_ingest.cpython-37.pyc +0 -0
  561. /package/{knowledge_base → src}/graph_db/schema.py +0 -0
  562. /package/{knowledge_base → src}/ingestion/__init__.py +0 -0
  563. /package/{knowledge_base → src}/ingestion/__pycache__/__init__.cpython-37.pyc +0 -0
  564. /package/{knowledge_base → src}/ingestion/__pycache__/__init__.cpython-38.pyc +0 -0
  565. /package/{knowledge_base → src}/ingestion/__pycache__/ingest.cpython-37.pyc +0 -0
  566. /package/{knowledge_base → src}/ingestion/__pycache__/ingest.cpython-38.pyc +0 -0
  567. /package/{knowledge_base → src}/ingestion/__pycache__/ingest_images.cpython-37.pyc +0 -0
  568. /package/{knowledge_base → src}/ingestion/__pycache__/ingest_images.cpython-38.pyc +0 -0
  569. /package/{knowledge_base → src}/ingestion/__pycache__/kg_extractor.cpython-37.pyc +0 -0
  570. /package/{knowledge_base → src}/ingestion/__pycache__/kg_extractor.cpython-38.pyc +0 -0
  571. /package/{knowledge_base → src}/ingestion/__pycache__/web_ingest.cpython-38.pyc +0 -0
  572. /package/{knowledge_base → src}/intelligence/__init__.py +0 -0
  573. /package/{knowledge_base → src}/intelligence/__pycache__/__init__.cpython-37.pyc +0 -0
  574. /package/{knowledge_base → src}/intelligence/__pycache__/execution_ingest.cpython-37.pyc +0 -0
  575. /package/{knowledge_base → src}/intelligence/__pycache__/predictive_engine.cpython-37.pyc +0 -0
  576. /package/{knowledge_base → src}/intelligence/__pycache__/risk_scorer.cpython-37.pyc +0 -0
  577. /package/{knowledge_base → src}/intelligence/predictive_engine.py +0 -0
  578. /package/{knowledge_base → src}/intelligence/risk_scorer.py +0 -0
  579. /package/{knowledge_base → src}/memory/__pycache__/__init__.cpython-37.pyc +0 -0
  580. /package/{knowledge_base → src}/memory/__pycache__/__init__.cpython-38.pyc +0 -0
  581. /package/{knowledge_base → src}/memory/__pycache__/cognee_client.cpython-37.pyc +0 -0
  582. /package/{knowledge_base → src}/memory/__pycache__/cognee_client.cpython-38.pyc +0 -0
  583. /package/{knowledge_base → src}/memory/__pycache__/ingest_memory.cpython-37.pyc +0 -0
  584. /package/{knowledge_base → src}/memory/__pycache__/memory_types.cpython-37.pyc +0 -0
  585. /package/{knowledge_base → src}/memory/__pycache__/memory_types.cpython-38.pyc +0 -0
  586. /package/{knowledge_base → src}/memory/memory_types.py +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-37.pyc +0 -0
  606. /package/{knowledge_base → src}/retrieval/__pycache__/__init__.cpython-38.pyc +0 -0
  607. /package/{knowledge_base → src}/retrieval/__pycache__/context_fusion.cpython-37.pyc +0 -0
  608. /package/{knowledge_base → src}/retrieval/__pycache__/context_fusion.cpython-38.pyc +0 -0
  609. /package/{knowledge_base → src}/retrieval/__pycache__/knowledge_graph.cpython-37.pyc +0 -0
  610. /package/{knowledge_base → src}/retrieval/__pycache__/knowledge_graph.cpython-38.pyc +0 -0
  611. /package/{knowledge_base → src}/retrieval/__pycache__/reranker.cpython-37.pyc +0 -0
  612. /package/{knowledge_base → src}/retrieval/__pycache__/reranker.cpython-38.pyc +0 -0
  613. /package/{knowledge_base → src}/retrieval/__pycache__/retrieval_debug.cpython-37.pyc +0 -0
  614. /package/{knowledge_base → src}/retrieval/__pycache__/retrieval_debug.cpython-38.pyc +0 -0
  615. /package/{knowledge_base → src}/retrieval/__pycache__/retriever.cpython-37.pyc +0 -0
  616. /package/{knowledge_base → src}/retrieval/__pycache__/retriever.cpython-38.pyc +0 -0
  617. /package/{knowledge_base → src}/retrieval/__pycache__/unified_query.cpython-38.pyc +0 -0
  618. /package/{knowledge_base → src}/retrieval/__pycache__/web_retriever.cpython-38.pyc +0 -0
  619. /package/{knowledge_base → src}/retrieval/retrieval_debug.py +0 -0
  620. /package/{knowledge_base → src}/validators/__init__.py +0 -0
  621. /package/{knowledge_base → src}/validators/__pycache__/__init__.cpython-314.pyc +0 -0
  622. /package/{knowledge_base → src}/validators/__pycache__/__init__.cpython-37.pyc +0 -0
  623. /package/{knowledge_base → src}/validators/__pycache__/step_fidelity.cpython-314.pyc +0 -0
  624. /package/{knowledge_base → src}/validators/__pycache__/step_fidelity.cpython-37.pyc +0 -0
  625. /package/{knowledge_base → src}/vision/__pycache__/__init__.cpython-37.pyc +0 -0
  626. /package/{knowledge_base → src}/vision/__pycache__/__init__.cpython-38.pyc +0 -0
  627. /package/{knowledge_base → src}/vision/__pycache__/image_describer.cpython-37.pyc +0 -0
  628. /package/{knowledge_base → src}/vision/__pycache__/image_describer.cpython-38.pyc +0 -0
@@ -2,11 +2,12 @@ import json
2
2
  import logging
3
3
  from typing import List, Dict, Any
4
4
  from pydantic import BaseModel, Field
5
- from knowledge_base.config import cfg
6
- from knowledge_base.agents.requirement_agent import _get_llm_client
7
- from knowledge_base.db.client import get_conn
8
- from knowledge_base.embeddings.azure_embedder import get_embedding
9
- from knowledge_base.models.test_requirement import TestCaseWithConfidence
5
+ from src.config import cfg
6
+ from src.agents.requirement_agent import _get_llm_client
7
+ from src.db.client import get_conn
8
+ from src.embeddings.azure_embedder import embed_single
9
+ from src.models.test_requirement import TestCaseWithConfidence
10
+ from src.prompts.prompt_loader import load_prompt
10
11
 
11
12
  logger = logging.getLogger(__name__)
12
13
 
@@ -15,22 +16,18 @@ class AutomationPlan(BaseModel):
15
16
  fixtures: List[str] = Field(default_factory=list)
16
17
  utilities: List[str] = Field(default_factory=list)
17
18
 
18
- _SYSTEM_PROMPT = """You are an expert IGEL Quality Engineering Automation Architect.
19
- Your task is to design an Automation Plan for a given set of approved test cases.
20
- You will be provided with a list of available Page Objects, Fixtures, and Utilities from the Asset Registry.
21
- You must ONLY select items from the provided available lists. Do NOT invent new page objects or fixtures.
22
- Output MUST be valid JSON matching this schema:
23
- {
24
- "page_objects": ["string"],
25
- "fixtures": ["string"],
26
- "utilities": ["string"]
27
- }
28
- """
19
+ _SYSTEM_PROMPT = load_prompt(
20
+ "automation_design.md",
21
+ fallback=(
22
+ "Design automation plan from approved test cases and available assets. "
23
+ "Select only from provided lists and return JSON with page_objects, fixtures, utilities."
24
+ ),
25
+ )
29
26
 
30
27
  def _semantic_search_assets(query: str, limit: int = 20) -> Dict[str, List[str]]:
31
28
  """Retrieve relevant assets from the Asset Registry based on semantic similarity to the query."""
32
29
  try:
33
- embedding = get_embedding(query)
30
+ embedding = embed_single(query)
34
31
  assets = {"page_object": [], "fixture": [], "utility": [], "base_class": [], "api_client": []}
35
32
 
36
33
  with get_conn() as conn:
@@ -4,8 +4,8 @@ import logging
4
4
  from pathlib import Path
5
5
  from typing import List, Dict, Any, Optional
6
6
 
7
- from knowledge_base.db.client import get_conn
8
- from knowledge_base.embeddings.azure_embedder import get_embedding
7
+ from src.db.client import get_conn
8
+ from src.embeddings.azure_embedder import get_embedding
9
9
 
10
10
  logger = logging.getLogger(__name__)
11
11
 
@@ -0,0 +1,114 @@
1
+ import logging
2
+ from src.models.test_requirement import (
3
+ GeneratedTestCase,
4
+ ScenarioWithRules,
5
+ ConfidenceMetrics,
6
+ TestCaseWithConfidence
7
+ )
8
+ from src.core.context_engine import SourceReport
9
+ from src.core.evidence_resolver import ResolvedContext
10
+ from src.config.policy_config import PolicyConfig
11
+ from src.agents.validation_agent import validate_structural
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+ def evaluate_completeness(tc: GeneratedTestCase) -> float:
16
+ """Evaluate completeness of steps, data, and expected results."""
17
+ if not tc.steps:
18
+ return 0.0
19
+
20
+ score = 0.0
21
+ for step in tc.steps:
22
+ step_score = 0.0
23
+ if step.action: step_score += 0.4
24
+ if step.data: step_score += 0.2
25
+ if step.expected_result: step_score += 0.4
26
+ score += step_score
27
+
28
+ return score / len(tc.steps)
29
+
30
+ def compute_two_level_confidence(
31
+ tc: GeneratedTestCase,
32
+ scenario: ScenarioWithRules,
33
+ resolved_context: ResolvedContext,
34
+ source_report: SourceReport,
35
+ policy: PolicyConfig,
36
+ ) -> TestCaseWithConfidence:
37
+ """
38
+ Computes two levels of confidence using purely deterministic structural checks.
39
+ """
40
+ dims = policy.confidence_dimensions
41
+
42
+ # 1. Context Strength (Informational)
43
+ sources_found = sum([
44
+ source_report.jira_found, source_report.confluence_found,
45
+ source_report.postgres_kb_found, source_report.igel_os12_docs_found,
46
+ ])
47
+ context_strength = min(1.0, sources_found / 4.0)
48
+
49
+ # 2. Generation Confidence: Requirement Clarity (25%)
50
+ # Deterministic check: Are ACs, Business Rules, Dependencies, Environment present in the structured scenario?
51
+ # Since our schema for ScenarioWithRules just has scenario and business_rules,
52
+ # we check for presence of multiple business_rules as a proxy for clarity.
53
+ requirement_clarity = 1.0 if scenario.business_rules else 0.5
54
+
55
+ # 3. Generation Confidence: Evidence Quality (20%)
56
+ # Deterministic: Based on resolved conflicts
57
+ conflict_count = len(resolved_context.conflicting_sources)
58
+ evidence_quality = 1.0 if conflict_count == 0 else max(0.0, 1.0 - (0.3 * conflict_count))
59
+
60
+ # 4. Generation Confidence: Business Rule Coverage (15%)
61
+ # Deterministic: Number of extracted rule objects vs mapped steps
62
+ rule_coverage = 1.0 if len(tc.steps) >= len(scenario.business_rules) else 0.5
63
+
64
+ # 5. Generation Confidence: Traceability Coverage (15%)
65
+ # Deterministic: Do steps have mapped requirement IDs? (Proxy using tc_reference mapped)
66
+ traceability = 1.0 if "S" in tc.tc_reference and tc.business_rule else 0.0
67
+
68
+ # 6. Generation Confidence: Scenario Coverage (15%)
69
+ # Deterministic: Does the generated suite contain Positive + Negative + Edge tags?
70
+ # Checking the single TC test_type
71
+ scenario_score = 1.0 if tc.test_type in ["positive", "negative", "edge"] else 0.5
72
+
73
+ # 7. Generation Confidence: Structural Quality (10%)
74
+ # Deterministic: Preconditions, steps, expected results (existing validation_agent.py)
75
+ struct_ok, struct_errs = validate_structural(tc, scenario)
76
+ structural_quality = evaluate_completeness(tc) if struct_ok else 0.0
77
+
78
+ # Weighted total (Final Confidence)
79
+ total = (
80
+ requirement_clarity * dims.requirement_clarity +
81
+ evidence_quality * dims.evidence_quality +
82
+ rule_coverage * dims.business_rule_coverage +
83
+ traceability * dims.traceability_coverage +
84
+ scenario_score * dims.scenario_coverage +
85
+ structural_quality * dims.structural_quality
86
+ )
87
+
88
+ metrics = ConfidenceMetrics(
89
+ context_strength=context_strength,
90
+ requirement_clarity=requirement_clarity,
91
+ evidence_quality=evidence_quality,
92
+ business_rule_coverage=rule_coverage,
93
+ traceability_coverage=traceability,
94
+ scenario_coverage=scenario_score,
95
+ structural_quality=structural_quality,
96
+ final_confidence=total,
97
+ )
98
+
99
+ tc.confidence_score = total
100
+ tc.confidence_metrics = metrics.model_dump() if hasattr(metrics, 'model_dump') else metrics.dict()
101
+
102
+ bands = policy.confidence_bands
103
+ is_approved = total >= bands.auto_approved
104
+
105
+ if not is_approved:
106
+ logger.info(f"Test case {tc.tc_reference} needs review (score: {total:.2f})")
107
+ else:
108
+ logger.info(f"Test case {tc.tc_reference} auto-approved (score: {total:.2f})")
109
+
110
+ return TestCaseWithConfidence(
111
+ test_case=tc,
112
+ confidence=metrics,
113
+ is_approved=is_approved
114
+ )
@@ -4,7 +4,7 @@ import subprocess
4
4
  from pathlib import Path
5
5
  from typing import Tuple, List, Set
6
6
 
7
- from knowledge_base.db.client import get_conn
7
+ from src.db.client import get_conn
8
8
 
9
9
  logger = logging.getLogger(__name__)
10
10
 
@@ -0,0 +1,89 @@
1
+ import json
2
+ import logging
3
+ from typing import Dict, Any, Optional
4
+ from src.db.client import get_conn
5
+
6
+ logger = logging.getLogger(__name__)
7
+
8
+ class FeedbackAgent:
9
+ """Agent responsible for capturing and applying 4-level granular feedback."""
10
+
11
+ def capture_feedback(self, level: str, target_id: str, feedback_type: str, user_comment: str, corrected_data: Optional[Dict] = None) -> bool:
12
+ """
13
+ Store granular feedback.
14
+ Level must be one of: 'requirement', 'scenario', 'testcase', 'teststep'.
15
+ """
16
+ if level not in ["requirement", "scenario", "testcase", "teststep"]:
17
+ logger.error(f"Invalid feedback level: {level}")
18
+ return False
19
+
20
+ try:
21
+ with get_conn() as conn:
22
+ with conn.cursor() as cur:
23
+ cur.execute(
24
+ """
25
+ INSERT INTO igel_granular_feedback
26
+ (level, target_id, feedback_type, user_comment, corrected_data)
27
+ VALUES (%s, %s, %s, %s, %s::jsonb)
28
+ """,
29
+ (level, target_id, feedback_type, user_comment, json.dumps(corrected_data) if corrected_data else None)
30
+ )
31
+ conn.commit()
32
+ logger.info(f"Captured {level} feedback for {target_id}")
33
+ return True
34
+ except Exception as e:
35
+ logger.error(f"Failed to capture feedback: {e}")
36
+ return False
37
+
38
+ def submit(self, level: str, target_id: str, feedback_type: str, user_comment: str, corrected_data: Optional[Dict] = None) -> bool:
39
+ """Alias for capture_feedback for CLI compatibility."""
40
+ return self.capture_feedback(level, target_id, feedback_type, user_comment, corrected_data)
41
+
42
+ def get_feedback_for_target(self, target_id: str, limit: int = 5, max_chars: int = 800) -> list:
43
+ """Retrieve historical feedback for a specific target to use as generation context.
44
+
45
+ Args:
46
+ target_id: The target entity ID (requirement key, test case ID, etc.)
47
+ limit: Maximum number of feedback items to return (default 5).
48
+ max_chars: Hard cap on total combined character length of all returned
49
+ user_comment fields (default 800). Items are included in
50
+ descending ID order and truncated once the cap is reached.
51
+
52
+ Returns:
53
+ List of feedback dicts, each with keys: type, comment, corrected_data.
54
+ Total len(item["comment"]) across all items ≤ max_chars.
55
+ """
56
+ feedback = []
57
+ try:
58
+ with get_conn() as conn:
59
+ with conn.cursor() as cur:
60
+ cur.execute(
61
+ """
62
+ SELECT feedback_type, user_comment, corrected_data
63
+ FROM igel_granular_feedback
64
+ WHERE target_id = %s
65
+ ORDER BY id DESC
66
+ LIMIT %s
67
+ """,
68
+ (target_id, limit),
69
+ )
70
+ total_chars = 0
71
+ for row in cur.fetchall():
72
+ comment = row[1] or ""
73
+ if total_chars + len(comment) > max_chars:
74
+ # Truncate comment to fit within the budget
75
+ remaining = max_chars - total_chars
76
+ if remaining <= 0:
77
+ break
78
+ comment = comment[:remaining]
79
+ feedback.append({
80
+ "type": row[0],
81
+ "comment": comment,
82
+ "corrected_data": row[2],
83
+ })
84
+ total_chars += len(comment)
85
+ if total_chars >= max_chars:
86
+ break
87
+ except Exception as e:
88
+ logger.error(f"Failed to get feedback: {e}")
89
+ return feedback
@@ -0,0 +1,43 @@
1
+ """Framework Analyzer Agent.
2
+
3
+ Consumes a diff/impact scope package and performs scoped framework analysis.
4
+ This is intentionally scope-limited to avoid full repository rescans.
5
+ """
6
+ from __future__ import annotations
7
+
8
+ import logging
9
+ from pathlib import Path
10
+ from typing import Iterable
11
+
12
+ from src.agents.regression_agent import BitbucketSyncAgent
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class FrameworkAnalyzerAgent:
18
+ """Analyze only impacted files and update framework registries."""
19
+
20
+ def __init__(self, repo_path: Path):
21
+ self.repo_path = repo_path
22
+ self._sync = BitbucketSyncAgent(repo_path)
23
+
24
+ def analyze_scope(self, analysis_targets: Iterable[Path]) -> dict:
25
+ targets = []
26
+ for t in analysis_targets:
27
+ p = Path(t)
28
+ full = p if p.is_absolute() else (self.repo_path / p)
29
+ if full.exists():
30
+ targets.append(full)
31
+
32
+ indexed_assets = self._sync.sync_changed_files(targets)
33
+ logger.info(
34
+ "FrameworkAnalyzer: targets=%d indexed_assets=%d",
35
+ len(targets),
36
+ indexed_assets,
37
+ )
38
+
39
+ return {
40
+ "analysis_targets_count": len(targets),
41
+ "indexed_assets": indexed_assets,
42
+ "analysis_targets": [str(p.relative_to(self.repo_path)) for p in targets],
43
+ }
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
 
4
4
  import re
5
5
 
6
- from knowledge_base.agents.state import AgenticState
6
+ from src.agents.state import AgenticState
7
7
 
8
8
 
9
9
  def fusion_agent(state: AgenticState) -> AgenticState:
@@ -29,7 +29,7 @@ def fusion_agent(state: AgenticState) -> AgenticState:
29
29
  conflicts: list[dict] = list(kg.get("conflicts") or [])
30
30
  if not conflicts and rag:
31
31
  try:
32
- from knowledge_base.core.precedence import detect_precedence_conflicts
32
+ from src.core.precedence import detect_precedence_conflicts
33
33
  pseudo = []
34
34
  for i, chunk in enumerate(rag[:8]):
35
35
  pseudo.append(type("R", (), {
@@ -71,7 +71,7 @@ def fusion_agent(state: AgenticState) -> AgenticState:
71
71
  # LLM-assisted context quality when heuristic score is low
72
72
  if quality < 0.5 and rag:
73
73
  try:
74
- from knowledge_base.generation.test_generator import _call_gpt
74
+ from src.generation.test_generator import _call_gpt
75
75
  sample = "\n".join(c.get("content", "")[:200] for c in rag[:3])
76
76
  verdict = _call_gpt(
77
77
  "Rate context relevance 0-1 for IGEL test generation. Reply with number only.",
@@ -5,16 +5,16 @@ import logging
5
5
  import time
6
6
  from concurrent.futures import ThreadPoolExecutor, as_completed
7
7
 
8
- from knowledge_base.agents.fusion_agent import fusion_agent
9
- from knowledge_base.agents.intent_agent import intent_agent
10
- from knowledge_base.agents.kg_agent import kg_agent
11
- from knowledge_base.agents.memory_agent import memory_agent
12
- from knowledge_base.agents.reflection_agent import reflection_agent, should_loop_back
13
- from knowledge_base.agents.retrieval_agent import retrieval_agent
14
- from knowledge_base.agents.script_agent import script_agent
15
- from knowledge_base.agents.state import AgenticState, initial_state
16
- from knowledge_base.agents.temporal_agent import temporal_agent
17
- from knowledge_base.agents.validation_agent import validation_agent
8
+ from src.agents.fusion_agent import fusion_agent
9
+ from src.agents.intent_agent import intent_agent
10
+ from src.agents.kg_agent import kg_agent
11
+ from src.agents.memory_agent import memory_agent
12
+ from src.agents.reflection_agent import reflection_agent, should_loop_back
13
+ from src.agents.retrieval_agent import retrieval_agent
14
+ from src.agents.script_agent import script_agent
15
+ from src.agents.state import AgenticState, initial_state
16
+ from src.agents.temporal_agent import temporal_agent
17
+ from src.agents.validation_agent import validation_agent
18
18
 
19
19
  logger = logging.getLogger(__name__)
20
20
 
@@ -1,10 +1,10 @@
1
1
  """Healing agent — Phase 7."""
2
2
  from __future__ import annotations
3
3
 
4
- from knowledge_base.config import cfg
5
- from knowledge_base.memory.cognee_client import get_cognee_client
6
- from knowledge_base.memory.memory_types import MemoryType
7
- from knowledge_base.generation.test_generator import _call_gpt
4
+ from src.config import cfg
5
+ from src.memory.cognee_client import get_cognee_client
6
+ from src.memory.memory_types import MemoryType
7
+ from src.generation.test_generator import _call_gpt
8
8
 
9
9
 
10
10
  def propose_fix(test_id: str, flaky_history: list[dict] | None = None) -> dict:
@@ -0,0 +1,30 @@
1
+ """Intent classification agent — unified via IntentService."""
2
+ from __future__ import annotations
3
+
4
+ from src.agents.state import AgenticState
5
+ from src.core.intent_service import IntentService
6
+
7
+ _intent_service = IntentService()
8
+
9
+
10
+ def intent_agent(state: AgenticState) -> AgenticState:
11
+ query = state.get("query", "")
12
+ classified = _intent_service.classify(query)
13
+ intent = classified.intent
14
+ feature = classified.feature_area
15
+ version_scope = classified.version_scope
16
+ categories = classified.query_categories
17
+
18
+ state["intent"] = intent
19
+ state["feature_area"] = feature
20
+ state["version_scope"] = version_scope
21
+ state["query_categories"] = categories
22
+ state.setdefault("agent_trace", []).append({
23
+ "agent": "IntentAgent",
24
+ "status": "complete",
25
+ "intent": intent,
26
+ "feature_area": feature,
27
+ "version_scope": version_scope,
28
+ "query_categories": categories,
29
+ })
30
+ return state
@@ -0,0 +1,3 @@
1
+ """Internal orchestration and governance components for V2."""
2
+
3
+ __all__ = []
@@ -0,0 +1,111 @@
1
+ """Approval manager for V2 orchestration governance."""
2
+ from __future__ import annotations
3
+
4
+ import uuid
5
+ from datetime import datetime, timezone
6
+ from pathlib import Path
7
+
8
+ from src.project.ai_folder import read_approval_artifact, write_approval_artifact
9
+
10
+
11
+ class ApprovalError(RuntimeError):
12
+ """Raised when a workflow stage is blocked by missing/invalid approval."""
13
+
14
+
15
+ class ApprovalManager:
16
+ """Persist and validate approval checkpoints for guarded workflows."""
17
+
18
+ def __init__(self, repo_root: Path):
19
+ self.repo_root = repo_root
20
+
21
+ def create_pending(
22
+ self,
23
+ *,
24
+ jira_key: str,
25
+ stage: str,
26
+ test_reqid: str | None = None,
27
+ questions: list[dict] | None = None,
28
+ confidence: float | None = None,
29
+ ) -> dict:
30
+ approval_id = str(uuid.uuid4())
31
+ now = datetime.now(timezone.utc).isoformat()
32
+ payload = {
33
+ "approval_id": approval_id,
34
+ "jira_key": jira_key,
35
+ "test_reqid": test_reqid or jira_key,
36
+ "stage": stage,
37
+ "status": "PENDING_QUESTIONS" if questions else "PENDING_APPROVAL",
38
+ "questions": questions or [],
39
+ "confidence": confidence,
40
+ "created_at": now,
41
+ "updated_at": now,
42
+ "decision": None,
43
+ "actor": None,
44
+ "reason": None,
45
+ }
46
+ write_approval_artifact(
47
+ repo_root=self.repo_root,
48
+ jira_key=jira_key,
49
+ stage=stage,
50
+ payload=payload,
51
+ test_reqid=test_reqid,
52
+ )
53
+ return payload
54
+
55
+ def record_decision(
56
+ self,
57
+ *,
58
+ jira_key: str,
59
+ stage: str,
60
+ decision: str,
61
+ actor: str,
62
+ reason: str | None = None,
63
+ test_reqid: str | None = None,
64
+ ) -> dict:
65
+ current = read_approval_artifact(
66
+ repo_root=self.repo_root,
67
+ jira_key=jira_key,
68
+ stage=stage,
69
+ test_reqid=test_reqid,
70
+ )
71
+ if not current:
72
+ raise ApprovalError(f"No approval checkpoint found for stage '{stage}'")
73
+
74
+ norm = (decision or "").strip().lower()
75
+ if norm not in ("approve", "approved", "reject", "rejected"):
76
+ raise ApprovalError("decision must be one of: approve, approved, reject, rejected")
77
+
78
+ status = "APPROVED" if norm.startswith("approve") else "REJECTED"
79
+ current["status"] = status
80
+ current["decision"] = status
81
+ current["actor"] = actor
82
+ current["reason"] = reason
83
+ current["updated_at"] = datetime.now(timezone.utc).isoformat()
84
+
85
+ write_approval_artifact(
86
+ repo_root=self.repo_root,
87
+ jira_key=jira_key,
88
+ stage=stage,
89
+ payload=current,
90
+ test_reqid=test_reqid,
91
+ )
92
+ return current
93
+
94
+ def assert_approved(self, *, jira_key: str, stage: str, test_reqid: str | None = None) -> dict:
95
+ record = read_approval_artifact(
96
+ repo_root=self.repo_root,
97
+ jira_key=jira_key,
98
+ stage=stage,
99
+ test_reqid=test_reqid,
100
+ )
101
+ if not record:
102
+ raise ApprovalError(
103
+ f"Blocked by governance: missing approval checkpoint for stage '{stage}'. "
104
+ f"Run planning first and submit approval."
105
+ )
106
+ if record.get("status") != "APPROVED":
107
+ raise ApprovalError(
108
+ f"Blocked by governance: stage '{stage}' requires APPROVED status, "
109
+ f"current={record.get('status')}."
110
+ )
111
+ return record