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
@@ -12,7 +12,7 @@ from datetime import datetime
12
12
  from pathlib import Path
13
13
  from typing import Any
14
14
 
15
- from knowledge_base.eval.scorers import (
15
+ from src.eval.scorers import (
16
16
  DomainScorer,
17
17
  EvaluationResult,
18
18
  ExecutabilityScorer,
@@ -293,8 +293,8 @@ class EvaluationHarness:
293
293
  def _persist_run_to_db(self, run: HarnessRun, query_file: Path | str) -> None:
294
294
  """Persist evaluation run to PostgreSQL when EVAL_ENABLED."""
295
295
  try:
296
- from knowledge_base.config import cfg
297
- from knowledge_base.db.feedback_schema import insert_eval_run, insert_eval_results_batch
296
+ from src.config import cfg
297
+ from src.db.feedback_schema import insert_eval_run, insert_eval_results_batch
298
298
 
299
299
  eval_uuid = insert_eval_run(
300
300
  run_id=run.run_id,
@@ -344,14 +344,14 @@ class EvaluationHarness:
344
344
  backends: tuple[str, ...] = ("postgres", "neo4j"),
345
345
  ) -> dict:
346
346
  """Compare KG backend quality across queries (Phase 3)."""
347
- from knowledge_base.config import cfg
347
+ from src.config import cfg
348
348
 
349
349
  queries = self.load_queries(query_file)
350
350
  comparison = {"backends": backends, "results": {}}
351
351
 
352
352
  original_backend = cfg.KG_BACKEND
353
353
  for backend in backends:
354
- import knowledge_base.config as config_module
354
+ import src.config as config_module
355
355
  config_module.cfg.KG_BACKEND = backend
356
356
  run_id = f"backend_{backend}_{Path(query_file).stem}"
357
357
  try:
@@ -363,7 +363,7 @@ class EvaluationHarness:
363
363
  except Exception as e:
364
364
  comparison["results"][backend] = {"error": str(e)}
365
365
 
366
- import knowledge_base.config as config_module
366
+ import src.config as config_module
367
367
  config_module.cfg.KG_BACKEND = original_backend
368
368
  return comparison
369
369
 
@@ -1,6 +1,6 @@
1
1
  """Human feedback capture, curation, and application."""
2
2
 
3
- from knowledge_base.feedback.handler import apply_feedback, apply_promotion, capture_feedback, curate_feedback
3
+ from src.feedback.handler import apply_feedback, apply_promotion, capture_feedback, curate_feedback
4
4
 
5
5
  __all__ = [
6
6
  "apply_feedback",
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
 
4
4
  from datetime import datetime, timedelta
5
5
 
6
- from knowledge_base.db.client import get_conn
6
+ from src.db.client import get_conn
7
7
 
8
8
 
9
9
  def generate_weekly_report(days: int = 7) -> dict:
@@ -5,10 +5,10 @@ import logging
5
5
  import re
6
6
  from typing import Any
7
7
 
8
- from knowledge_base.db.client import get_conn
9
- from knowledge_base.db.feedback_schema import get_feedback_event, list_promotions
10
- from knowledge_base.db.schema import ensure_knowledge_graph_tables
11
- from knowledge_base.feedback.handler import apply_feedback, apply_promotion
8
+ from src.db.client import get_conn
9
+ from src.db.feedback_schema import get_feedback_event, list_promotions
10
+ from src.db.schema import ensure_knowledge_graph_tables
11
+ from src.feedback.handler import apply_feedback, apply_promotion
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
@@ -3,8 +3,8 @@ from __future__ import annotations
3
3
 
4
4
  import logging
5
5
 
6
- from knowledge_base.db.feedback_schema import get_feedback_event, list_feedback_events, list_promotions
7
- from knowledge_base.feedback.handler import apply_feedback, apply_promotion, curate_feedback
6
+ from src.db.feedback_schema import get_feedback_event, list_feedback_events, list_promotions
7
+ from src.feedback.handler import apply_feedback, apply_promotion, curate_feedback
8
8
 
9
9
  logger = logging.getLogger(__name__)
10
10
 
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
  import logging
9
9
  from typing import Any
10
10
 
11
- from knowledge_base.db.feedback_schema import (
11
+ from src.db.feedback_schema import (
12
12
  insert_feedback_audit,
13
13
  insert_feedback_event,
14
14
  insert_feedback_promotion,
@@ -9,7 +9,7 @@ import re
9
9
  from dataclasses import dataclass
10
10
  from enum import Enum
11
11
 
12
- from knowledge_base.generation.manual_tc_parser import parse_manual_tc, count_parsed_steps
12
+ from src.generation.manual_tc_parser import parse_manual_tc, count_parsed_steps
13
13
 
14
14
 
15
15
  class InputMode(str, Enum):
@@ -12,7 +12,7 @@ from __future__ import annotations
12
12
  import logging
13
13
  from dataclasses import dataclass
14
14
 
15
- from knowledge_base.config import cfg
15
+ from src.config import cfg
16
16
 
17
17
  logger = logging.getLogger(__name__)
18
18
 
@@ -10,14 +10,14 @@ import re
10
10
  import time
11
11
  from dataclasses import dataclass, field
12
12
 
13
- from knowledge_base.generation.input_classifier import (
13
+ from src.generation.input_classifier import (
14
14
  Classification,
15
15
  DetailLevel,
16
16
  InputMode,
17
17
  classify_input,
18
18
  )
19
- from knowledge_base.generation.manual_tc_parser import parse_manual_tc
20
- from knowledge_base.generation.prompts import (
19
+ from src.generation.manual_tc_parser import parse_manual_tc
20
+ from src.generation.prompts import (
21
21
  EXPAND_SYSTEM_ADDON,
22
22
  TRANSFORM_SYSTEM_ADDON,
23
23
  build_expand_markdown_user_prompt,
@@ -30,8 +30,8 @@ from knowledge_base.generation.prompts import (
30
30
  kb_trace_lines,
31
31
  load_pytest_exemplar,
32
32
  )
33
- from knowledge_base.retrieval.unified_query import unified_query
34
- from knowledge_base.validators.step_fidelity import (
33
+ from src.retrieval.unified_query import unified_query
34
+ from src.validators.step_fidelity import (
35
35
  validate_expand_preservation,
36
36
  validate_transform_fidelity,
37
37
  )
@@ -61,31 +61,31 @@ def _bundle_kg_entities(bundle) -> dict | None:
61
61
 
62
62
 
63
63
  def _tg_call_gpt(system: str, user: str, **kwargs):
64
- from knowledge_base.generation import test_generator as tg
64
+ from src.generation import test_generator as tg
65
65
 
66
66
  return tg._call_gpt(system, user, **kwargs)
67
67
 
68
68
 
69
69
  def _tg_strip(code: str) -> str:
70
- from knowledge_base.generation import test_generator as tg
70
+ from src.generation import test_generator as tg
71
71
 
72
72
  return tg._strip_code_fences(code)
73
73
 
74
74
 
75
75
  def _tg_validate_py(code: str):
76
- from knowledge_base.generation import test_generator as tg
76
+ from src.generation import test_generator as tg
77
77
 
78
78
  return tg._validate_python_syntax(code)
79
79
 
80
80
 
81
81
  def _tg_import_warnings(code: str):
82
- from knowledge_base.generation import test_generator as tg
82
+ from src.generation import test_generator as tg
83
83
 
84
84
  return tg._check_required_imports(code)
85
85
 
86
86
 
87
87
  def _infer_feature(topic: str) -> str:
88
- from knowledge_base.generation import test_generator as tg
88
+ from src.generation import test_generator as tg
89
89
 
90
90
  return tg._infer_feature_area(topic)
91
91
 
@@ -19,9 +19,13 @@ from pathlib import Path
19
19
  from openai import AzureOpenAI, RateLimitError, APIConnectionError, APITimeoutError
20
20
  from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type
21
21
 
22
- from knowledge_base.config import cfg
23
- from knowledge_base.retrieval.unified_query import unified_query
24
- from knowledge_base.generation.prompts import (
22
+ from src.config import cfg
23
+ from src.core.model_router import ModelRouter
24
+ from src.retrieval.unified_query import unified_query
25
+
26
+ # Module-level router instance shared across all calls in this process
27
+ _model_router = ModelRouter()
28
+ from src.generation.prompts import (
25
29
  PromptContext,
26
30
  build_system_prompt,
27
31
  build_markdown_user_prompt,
@@ -135,7 +139,7 @@ def generate_test_cases(
135
139
  output_dir = output_dir or DEFAULT_OUTPUT_DIR
136
140
  output_dir.mkdir(parents=True, exist_ok=True)
137
141
 
138
- from knowledge_base.generation.input_classifier import DetailLevel, InputMode, classify_input
142
+ from src.generation.input_classifier import DetailLevel, InputMode, classify_input
139
143
 
140
144
  try:
141
145
  dl = DetailLevel((detail_level or "auto").lower())
@@ -144,7 +148,7 @@ def generate_test_cases(
144
148
  cls = classify_input(topic, source_tc, detail_level=dl)
145
149
 
146
150
  if cls.mode in (InputMode.TRANSFORM, InputMode.EXPAND):
147
- from knowledge_base.generation.tc_transformer import run_faithful_generation
151
+ from src.generation.tc_transformer import run_faithful_generation
148
152
 
149
153
  resolved_test_id = test_id or _resolve_test_id(output_dir)
150
154
  resolved_feature = feature_area or _infer_feature_area(topic)
@@ -209,7 +213,7 @@ def generate_test_cases(
209
213
  if not bundle.results:
210
214
  raise ValueError(
211
215
  f"No KB content found for topic '{topic}'. "
212
- "Ensure documents are ingested: python -m knowledge_base.ingestion.ingest"
216
+ "Ensure documents are ingested: python -m src.ingestion.ingest"
213
217
  )
214
218
 
215
219
  retrieval_debug_json: str | None = bundle.debug.to_json() if debug_retrieval else None
@@ -223,6 +227,9 @@ def generate_test_cases(
223
227
 
224
228
  tokens_used = bundle.debug.total_tokens_used
225
229
 
230
+ # Step 2b: Load capped feedback for the topic/test_id to inject into context
231
+ feedback_block = _build_feedback_block(resolved_test_id)
232
+
226
233
  ctx = PromptContext(
227
234
  topic=topic,
228
235
  test_id=resolved_test_id,
@@ -238,6 +245,9 @@ def generate_test_cases(
238
245
  )
239
246
 
240
247
  system_prompt = build_system_prompt()
248
+ # Append capped feedback to system prompt if available
249
+ if feedback_block:
250
+ system_prompt = system_prompt + "\n\n" + feedback_block
241
251
  warnings: list[str] = []
242
252
  md_path: Path | None = None
243
253
  py_path: Path | None = None
@@ -247,7 +257,18 @@ def generate_test_cases(
247
257
  if output_format in ("md", "both"):
248
258
  logger.info("Generating markdown for '%s'...", topic)
249
259
  markdown_user_prompt = build_markdown_user_prompt(ctx)
250
- markdown_content = _call_gpt(system_prompt, markdown_user_prompt, max_tokens=4096, temperature=0.2)
260
+ # Canary: use model router for testcase_generation; other steps use default
261
+ _tc_model = _model_router.route(
262
+ "testcase_generation",
263
+ context_size=len(markdown_user_prompt),
264
+ )
265
+ logger.debug("ModelRouter: testcase_generation → %s", _tc_model.deployment)
266
+ markdown_content = _call_gpt(
267
+ system_prompt, markdown_user_prompt,
268
+ max_tokens=_tc_model.max_tokens,
269
+ temperature=_tc_model.temperature,
270
+ deployment=_tc_model.deployment,
271
+ )
251
272
  md_filename = f"{resolved_test_id}_{_slugify(topic)}.md"
252
273
  md_path = _safe_write_path(output_dir / md_filename)
253
274
  md_ref = format_kb_retrieval_references_markdown(bundle.results)
@@ -404,10 +425,12 @@ def _call_gpt(
404
425
  user_prompt: str,
405
426
  max_tokens: int = 4096,
406
427
  temperature: float = 0.2,
428
+ deployment: str | None = None,
407
429
  ) -> str:
430
+ """Call Azure OpenAI. deployment overrides cfg.AZURE_DEPLOYMENT when provided."""
408
431
  client = _get_llm_client()
409
432
  response = client.chat.completions.create(
410
- model=cfg.AZURE_DEPLOYMENT,
433
+ model=deployment or cfg.AZURE_DEPLOYMENT,
411
434
  messages=[
412
435
  {"role": "system", "content": system_prompt},
413
436
  {"role": "user", "content": user_prompt},
@@ -422,6 +445,29 @@ def _call_gpt(
422
445
 
423
446
  # ── Post-Processing ───────────────────────────────────────────────────────────
424
447
 
448
+ def _build_feedback_block(test_id: str) -> str:
449
+ """Retrieve capped feedback for test_id and format as a system prompt appendix.
450
+
451
+ Returns an empty string if no feedback is found or on any error.
452
+ Cap: 5 items / 800 chars total (enforced by FeedbackAgent.get_feedback_for_target).
453
+ """
454
+ try:
455
+ from src.agents.feedback_agent import FeedbackAgent
456
+ items = FeedbackAgent().get_feedback_for_target(test_id, limit=5, max_chars=800)
457
+ if not items:
458
+ return ""
459
+ lines = ["## Historical Feedback (apply these corrections)"]
460
+ for i, fb in enumerate(items, 1):
461
+ fb_type = fb.get("type", "correction")
462
+ comment = fb.get("comment", "").strip()
463
+ if comment:
464
+ lines.append(f"{i}. [{fb_type}] {comment}")
465
+ return "\n".join(lines) if len(lines) > 1 else ""
466
+ except Exception as e:
467
+ logger.debug("_build_feedback_block: non-fatal error for %s: %s", test_id, e)
468
+ return ""
469
+
470
+
425
471
  def _strip_code_fences(code: str) -> str:
426
472
  code = re.sub(r"^```python\s*\n?", "", code, flags=re.MULTILINE)
427
473
  code = re.sub(r"^```\s*\n?", "", code, flags=re.MULTILINE)
@@ -499,7 +545,7 @@ def _build_minimal_spec(ctx: PromptContext) -> str:
499
545
  f"Product: {ctx.product or 'IGEL OS 12'}\n\n"
500
546
  "Generate full executable test steps from the KNOWLEDGE BASE CONTEXT in the same prompt:\n"
501
547
  "- Match exact paths, commands, and UI strings from the KB; do not generalize.\n"
502
- "- See repository guide: knowledge_base/TEST_GENERATION_GUIDE.md\n"
548
+ "- See repository guide: src/TEST_GENERATION_GUIDE.md\n"
503
549
  )
504
550
 
505
551
 
@@ -540,7 +586,7 @@ def _score_output(
540
586
  """Compute confidence scores when evaluation is enabled."""
541
587
  if not cfg.EVAL_ENABLED:
542
588
  return None
543
- from knowledge_base.core.confidence import flatten_confidence_for_api, score_generation
589
+ from src.core.confidence import flatten_confidence_for_api, score_generation
544
590
 
545
591
  raw = score_generation(
546
592
  query=topic,
@@ -1,5 +1,5 @@
1
1
  """Neo4j graph database layer (Phase 3 shadow deployment)."""
2
2
 
3
- from knowledge_base.graph_db.neo4j_client import Neo4jClient, get_neo4j_client
3
+ from src.graph_db.neo4j_client import Neo4jClient, get_neo4j_client
4
4
 
5
5
  __all__ = ["Neo4jClient", "get_neo4j_client"]
@@ -5,8 +5,8 @@ import json
5
5
  import logging
6
6
  from typing import Any
7
7
 
8
- from knowledge_base.config import cfg
9
- from knowledge_base.db.client import get_conn
8
+ from src.config import cfg
9
+ from src.db.client import get_conn
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -5,9 +5,9 @@ import logging
5
5
  import re
6
6
  from typing import Any
7
7
 
8
- from knowledge_base.config import cfg
9
- from knowledge_base.graph_db.neo4j_client import get_neo4j_client
10
- from knowledge_base.retrieval.knowledge_graph import KGContext
8
+ from src.config import cfg
9
+ from src.graph_db.neo4j_client import get_neo4j_client
10
+ from src.retrieval.knowledge_graph import KGContext
11
11
 
12
12
  logger = logging.getLogger(__name__)
13
13
 
@@ -2,16 +2,16 @@
2
2
  Migrate PostgreSQL knowledge graph to Neo4j (Phase 3).
3
3
 
4
4
  Usage:
5
- python -m knowledge_base.graph_db.migrate_kg [--dry-run]
5
+ python -m src.graph_db.migrate_kg [--dry-run]
6
6
  """
7
7
  from __future__ import annotations
8
8
 
9
9
  import argparse
10
10
  import logging
11
11
 
12
- from knowledge_base.db.client import get_conn, init_pool
13
- from knowledge_base.graph_db.neo4j_client import get_neo4j_client, should_write_neo4j
14
- from knowledge_base.graph_db.schema import apply_schema
12
+ from src.db.client import get_conn, init_pool
13
+ from src.graph_db.neo4j_client import get_neo4j_client, should_write_neo4j
14
+ from src.graph_db.schema import apply_schema
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
  import logging
5
5
  from typing import Any
6
6
 
7
- from knowledge_base.config import cfg
7
+ from src.config import cfg
8
8
 
9
9
  logger = logging.getLogger(__name__)
10
10
 
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
  import logging
5
5
  import re
6
6
 
7
- from knowledge_base.graph_db.graphiti_client import get_graphiti_client
7
+ from src.graph_db.graphiti_client import get_graphiti_client
8
8
 
9
9
  logger = logging.getLogger(__name__)
10
10
 
@@ -11,10 +11,10 @@ import argparse
11
11
  import logging
12
12
  import re
13
13
 
14
- from knowledge_base.config import cfg
15
- from knowledge_base.db.client import close_pool, get_conn, init_pool
16
- from knowledge_base.db.kg_introspect import clear_kg_layout_cache
17
- from knowledge_base.db.schema import ensure_knowledge_graph_tables
14
+ from src.config import cfg
15
+ from src.db.client import close_pool, get_conn, init_pool
16
+ from src.db.kg_introspect import clear_kg_layout_cache
17
+ from src.db.schema import ensure_knowledge_graph_tables
18
18
 
19
19
  logger = logging.getLogger(__name__)
20
20
 
@@ -141,7 +141,7 @@ _CROSS_REF_RE = re.compile(r"(?:see|refer to|documented in|depends on)\s+([^\n.]
141
141
  def _llm_extract_entities(content: str, title: str | None) -> dict:
142
142
  """LLM-assisted entity extraction for orphan parent chunks."""
143
143
  try:
144
- from knowledge_base.generation.test_generator import _call_gpt
144
+ from src.generation.test_generator import _call_gpt
145
145
  prompt = f"""Extract structured entities from this IGEL documentation section.
146
146
  Return JSON only with keys: registry_keys (list), ui_paths (list), products (list),
147
147
  versions (list), error_codes (list), cli_commands (list), related_features (list).
@@ -307,7 +307,7 @@ def _extract_single_parent(cur, pid: str, content: str, title: str | None) -> tu
307
307
  def _shadow_write_neo4j(feature_name: str, blob: str) -> None:
308
308
  """Dual-write extracted entities to Neo4j when shadow mode is enabled (Phase 3)."""
309
309
  try:
310
- from knowledge_base.graph_db.neo4j_client import get_neo4j_client, should_write_neo4j
310
+ from src.graph_db.neo4j_client import get_neo4j_client, should_write_neo4j
311
311
 
312
312
  if not should_write_neo4j():
313
313
  return
@@ -5,10 +5,10 @@ from __future__ import annotations
5
5
  import hashlib
6
6
  import logging
7
7
 
8
- from knowledge_base.chunking.chunker import chunk_sections
9
- from knowledge_base.config import cfg
10
- from knowledge_base.db.client import init_pool
11
- from knowledge_base.db.schema import (
8
+ from src.chunking.chunker import chunk_sections
9
+ from src.config import cfg
10
+ from src.db.client import init_pool
11
+ from src.db.schema import (
12
12
  clear_document_chunks,
13
13
  document_exists,
14
14
  document_has_chunks,
@@ -34,7 +34,7 @@ def ingest_web_items(items: list[dict], *, source_label: str = "web") -> int:
34
34
  product = item.get("product", "IGEL")
35
35
 
36
36
  if not sections and item.get("raw_text"):
37
- from knowledge_base.parsers.markdown_parser import Section
37
+ from src.parsers.markdown_parser import Section
38
38
 
39
39
  sections = [
40
40
  Section(
@@ -57,7 +57,7 @@ def ingest_web_items(items: list[dict], *, source_label: str = "web") -> int:
57
57
  for w in warnings[:5]:
58
58
  logger.debug("web_ingest warning: %s", w)
59
59
 
60
- from knowledge_base.embeddings.azure_embedder import embed_texts, format_for_pgvector
60
+ from src.embeddings.azure_embedder import embed_texts, format_for_pgvector
61
61
 
62
62
  _, _, doc_children, _ = ingest_document_atomic(
63
63
  file_name=file_name,
@@ -0,0 +1,109 @@
1
+ """Diff Analyzer for scope-limited framework analysis.
2
+
3
+ Purpose:
4
+ - Compute impacted scope from changed files before heavy analysis/indexing.
5
+ - Prevent full-repo processing on pull/merge when only a subset changed.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ import ast
10
+ from pathlib import Path
11
+ from typing import Iterable
12
+
13
+
14
+ def _to_repo_relative(path: Path, repo_root: Path) -> Path:
15
+ try:
16
+ return path.resolve().relative_to(repo_root.resolve())
17
+ except Exception:
18
+ return path
19
+
20
+
21
+ def _module_name(py_file: Path, repo_root: Path) -> str:
22
+ rel = _to_repo_relative(py_file, repo_root)
23
+ no_suffix = rel.with_suffix("")
24
+ return ".".join(no_suffix.parts)
25
+
26
+
27
+ def _extract_imported_modules(py_file: Path) -> set[str]:
28
+ try:
29
+ tree = ast.parse(py_file.read_text(encoding="utf-8"))
30
+ except Exception:
31
+ return set()
32
+
33
+ modules: set[str] = set()
34
+ for node in ast.walk(tree):
35
+ if isinstance(node, ast.Import):
36
+ for alias in node.names:
37
+ modules.add(alias.name)
38
+ elif isinstance(node, ast.ImportFrom):
39
+ if node.module:
40
+ modules.add(node.module)
41
+ return modules
42
+
43
+
44
+ def _is_script_path(path: Path) -> bool:
45
+ p = str(path).lower()
46
+ return (
47
+ p.startswith("tests/")
48
+ or p.startswith("test/")
49
+ or "script" in p
50
+ or p.endswith(".feature")
51
+ )
52
+
53
+
54
+ def analyze_diff_scope(repo_root: Path, changed_files: Iterable[Path]) -> dict:
55
+ """Return impacted scope package for downstream analyzers.
56
+
57
+ Args:
58
+ repo_root: Repository root path.
59
+ changed_files: Changed paths (relative or absolute).
60
+
61
+ Returns:
62
+ dict containing changed modules/files and impacted dependency hints.
63
+ """
64
+ repo_root = repo_root.resolve()
65
+ normalized: list[Path] = []
66
+ for p in changed_files:
67
+ p = Path(p)
68
+ full = p if p.is_absolute() else (repo_root / p)
69
+ if full.exists():
70
+ normalized.append(full.resolve())
71
+
72
+ changed_rel = [_to_repo_relative(p, repo_root) for p in normalized]
73
+ changed_modules = {
74
+ _module_name(p, repo_root)
75
+ for p in normalized
76
+ if p.suffix == ".py"
77
+ }
78
+
79
+ dependent_files: set[Path] = set()
80
+ dependent_scripts: set[Path] = set()
81
+
82
+ # Reverse-import approximation for Python files in repo.
83
+ for py_file in repo_root.rglob("*.py"):
84
+ if "/.venv/" in str(py_file) or "/node_modules/" in str(py_file):
85
+ continue
86
+ imports = _extract_imported_modules(py_file)
87
+ if any(any(m == imp or imp.startswith(m + ".") for imp in imports) for m in changed_modules):
88
+ rel = _to_repo_relative(py_file, repo_root)
89
+ dependent_files.add(rel)
90
+ if _is_script_path(rel):
91
+ dependent_scripts.add(rel)
92
+
93
+ impacted_assets = {
94
+ p for p in changed_rel
95
+ if str(p).startswith(("core/", "ui/", "bussiness/", "src/"))
96
+ }
97
+
98
+ analysis_targets = sorted({*changed_rel, *dependent_files}, key=lambda x: str(x))
99
+
100
+ return {
101
+ "changed_files": [str(p) for p in sorted(changed_rel, key=lambda x: str(x))],
102
+ "changed_modules": sorted(changed_modules),
103
+ "dependent_files": [str(p) for p in sorted(dependent_files, key=lambda x: str(x))],
104
+ "dependent_scripts": [str(p) for p in sorted(dependent_scripts, key=lambda x: str(x))],
105
+ "impacted_assets": [str(p) for p in sorted(impacted_assets, key=lambda x: str(x))],
106
+ # Placeholder until business rule registry links are fully wired.
107
+ "impacted_business_rules": [],
108
+ "analysis_targets": [str(p) for p in analysis_targets],
109
+ }
@@ -3,9 +3,9 @@ from __future__ import annotations
3
3
 
4
4
  import logging
5
5
 
6
- from knowledge_base.config import cfg
7
- from knowledge_base.memory.cognee_client import get_cognee_client
8
- from knowledge_base.memory.memory_types import MemoryType
6
+ from src.config import cfg
7
+ from src.memory.cognee_client import get_cognee_client
8
+ from src.memory.memory_types import MemoryType
9
9
 
10
10
  logger = logging.getLogger(__name__)
11
11