igel-qe-core 1.0.5 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (632) hide show
  1. package/dist/cli/index.js +638 -54
  2. package/dist/cli/platform.js +0 -12
  3. package/dist/mcp/server.js +183 -8
  4. package/package.json +4 -4
  5. package/src/__pycache__/__init__.cpython-311.pyc +0 -0
  6. package/src/agents/__pycache__/__init__.cpython-311.pyc +0 -0
  7. package/src/agents/__pycache__/automation_design_agent.cpython-311.pyc +0 -0
  8. package/src/agents/__pycache__/automation_design_agent.cpython-313.pyc +0 -0
  9. package/src/agents/__pycache__/code_intelligence_agent.cpython-311.pyc +0 -0
  10. package/src/agents/__pycache__/code_intelligence_agent.cpython-313.pyc +0 -0
  11. package/src/agents/__pycache__/confidence_agent.cpython-311.pyc +0 -0
  12. package/src/agents/__pycache__/confidence_agent.cpython-313.pyc +0 -0
  13. package/src/agents/__pycache__/execution_validation_agent.cpython-311.pyc +0 -0
  14. package/src/agents/__pycache__/execution_validation_agent.cpython-313.pyc +0 -0
  15. package/src/agents/__pycache__/framework_analyzer_agent.cpython-311.pyc +0 -0
  16. package/src/agents/__pycache__/framework_analyzer_agent.cpython-313.pyc +0 -0
  17. package/src/agents/__pycache__/intent_agent.cpython-313.pyc +0 -0
  18. package/src/agents/__pycache__/regression_agent.cpython-311.pyc +0 -0
  19. package/src/agents/__pycache__/regression_agent.cpython-313.pyc +0 -0
  20. package/src/agents/__pycache__/requirement_agent.cpython-311.pyc +0 -0
  21. package/src/agents/__pycache__/requirement_agent.cpython-313.pyc +0 -0
  22. package/src/agents/__pycache__/scenario_agent.cpython-311.pyc +0 -0
  23. package/{knowledge_base → src}/agents/__pycache__/scenario_agent.cpython-313.pyc +0 -0
  24. package/src/agents/__pycache__/script_generator_agent.cpython-311.pyc +0 -0
  25. package/{knowledge_base → src}/agents/__pycache__/script_generator_agent.cpython-313.pyc +0 -0
  26. package/src/agents/__pycache__/testcase_agent.cpython-311.pyc +0 -0
  27. package/src/agents/__pycache__/testcase_agent.cpython-313.pyc +0 -0
  28. package/src/agents/__pycache__/validation_agent.cpython-311.pyc +0 -0
  29. package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-313.pyc +0 -0
  30. package/src/agents/__pycache__/workflow_engine.cpython-311.pyc +0 -0
  31. package/src/agents/__pycache__/workflow_engine.cpython-313.pyc +0 -0
  32. package/{knowledge_base → src}/agents/automation_design_agent.py +52 -22
  33. package/{knowledge_base → src}/agents/code_intelligence_agent.py +2 -2
  34. package/src/agents/confidence_agent.py +220 -0
  35. package/src/agents/execution_validation_agent.py +247 -0
  36. package/{knowledge_base → src}/agents/feedback_agent.py +36 -7
  37. package/src/agents/framework_analyzer_agent.py +43 -0
  38. package/{knowledge_base → src}/agents/fusion_agent.py +3 -3
  39. package/{knowledge_base → src}/agents/graph.py +10 -10
  40. package/{knowledge_base → src}/agents/healing_agent.py +4 -4
  41. package/src/agents/intent_agent.py +30 -0
  42. package/src/agents/internal/__init__.py +3 -0
  43. package/src/agents/internal/__pycache__/__init__.cpython-313.pyc +0 -0
  44. package/src/agents/internal/__pycache__/approval_manager.cpython-313.pyc +0 -0
  45. package/src/agents/internal/__pycache__/question_engine.cpython-313.pyc +0 -0
  46. package/src/agents/internal/approval_manager.py +111 -0
  47. package/src/agents/internal/question_engine.py +111 -0
  48. package/src/agents/internal/workflow_engine.py +28 -0
  49. package/{knowledge_base → src}/agents/kg_agent.py +3 -3
  50. package/{knowledge_base → src}/agents/memory_agent.py +4 -4
  51. package/src/agents/orchestrator/__init__.py +3 -0
  52. package/src/agents/orchestrator/__pycache__/__init__.cpython-313.pyc +0 -0
  53. package/src/agents/orchestrator/__pycache__/orchestrator.cpython-313.pyc +0 -0
  54. package/src/agents/orchestrator/orchestrator.py +63 -0
  55. package/{knowledge_base → src}/agents/rca_agent.py +4 -4
  56. package/{knowledge_base → src}/agents/reflection_agent.py +1 -1
  57. package/{knowledge_base → src}/agents/regression_agent.py +2 -2
  58. package/src/agents/requirement_agent.py +97 -0
  59. package/{knowledge_base → src}/agents/retrieval_agent.py +2 -2
  60. package/{knowledge_base → src}/agents/scenario_agent.py +11 -17
  61. package/{knowledge_base → src}/agents/script_agent.py +6 -6
  62. package/{knowledge_base → src}/agents/script_generator_agent.py +12 -10
  63. package/{knowledge_base → src}/agents/temporal_agent.py +3 -3
  64. package/src/agents/testcase_agent.py +163 -0
  65. package/{knowledge_base → src}/agents/validation_agent.py +1 -1
  66. package/src/agents/workflow_engine.py +114 -0
  67. package/{knowledge_base → src}/alembic/README.md +4 -4
  68. package/{knowledge_base → src}/alembic/env.py +1 -1
  69. package/{knowledge_base → src}/alembic/script.py.mako +1 -1
  70. package/{knowledge_base → src}/api/middleware.py +3 -3
  71. package/{knowledge_base → src}/api/server.py +28 -28
  72. package/{knowledge_base → src}/chunking/chunker.py +3 -3
  73. package/src/cli/__pycache__/__init__.cpython-311.pyc +0 -0
  74. package/src/cli/__pycache__/workflow_cli.cpython-311.pyc +0 -0
  75. package/src/cli/__pycache__/workflow_cli.cpython-313.pyc +0 -0
  76. package/{knowledge_base → src}/cli/feedback_cli.py +10 -10
  77. package/{knowledge_base → src}/cli/generate.py +11 -11
  78. package/src/cli/index.ts +704 -0
  79. package/src/cli/platform.ts +147 -0
  80. package/src/cli/workflow_cli.py +940 -0
  81. package/{knowledge_base → src}/config/__init__.py +1 -1
  82. package/src/config/__pycache__/__init__.cpython-311.pyc +0 -0
  83. package/src/config/__pycache__/__init__.cpython-313.pyc +0 -0
  84. package/src/config/__pycache__/policy_config.cpython-311.pyc +0 -0
  85. package/src/config/__pycache__/policy_config.cpython-313.pyc +0 -0
  86. package/src/config/__pycache__/settings.cpython-311.pyc +0 -0
  87. package/{knowledge_base → src}/config/__pycache__/settings.cpython-313.pyc +0 -0
  88. package/src/config/policy_config.py +85 -0
  89. package/src/config/policy_rules.yaml +50 -0
  90. package/{knowledge_base → src}/config/settings.py +51 -6
  91. package/{knowledge_base → src}/connectors/__init__.py +1 -1
  92. package/src/connectors/__pycache__/__init__.cpython-311.pyc +0 -0
  93. package/src/connectors/__pycache__/__init__.cpython-313.pyc +0 -0
  94. package/src/connectors/__pycache__/base.cpython-311.pyc +0 -0
  95. package/src/connectors/__pycache__/jira_connector.cpython-311.pyc +0 -0
  96. package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-313.pyc +0 -0
  97. package/src/connectors/__pycache__/query_bridge.cpython-313.pyc +0 -0
  98. package/src/connectors/bitbucket_connector.py +334 -0
  99. package/{knowledge_base → src}/connectors/community_connector.py +6 -6
  100. package/{knowledge_base → src}/connectors/confluence_connector.py +4 -4
  101. package/{knowledge_base → src}/connectors/jira_connector.py +6 -6
  102. package/{knowledge_base → src}/connectors/kb_igel_connector.py +6 -6
  103. package/{knowledge_base → src}/connectors/query_bridge.py +11 -11
  104. package/{knowledge_base → src}/connectors/search_backends.py +1 -1
  105. package/{knowledge_base → src}/connectors/serviceNow_connector.py +2 -2
  106. package/{knowledge_base → src}/connectors/sync_scheduler.py +12 -10
  107. package/{knowledge_base → src}/connectors/teamcity_connector.py +2 -2
  108. package/{knowledge_base → src}/connectors/testRail_connector.py +2 -2
  109. package/{knowledge_base → src}/connectors/web_fetcher.py +1 -1
  110. package/src/connectors/xray_connector.py +337 -0
  111. package/{knowledge_base → src}/core/__init__.py +1 -1
  112. package/src/core/__pycache__/__init__.cpython-311.pyc +0 -0
  113. package/src/core/__pycache__/__init__.cpython-313.pyc +0 -0
  114. package/src/core/__pycache__/circuit_breaker.cpython-313.pyc +0 -0
  115. package/src/core/__pycache__/confidence.cpython-311.pyc +0 -0
  116. package/src/core/__pycache__/confidence.cpython-313.pyc +0 -0
  117. package/src/core/__pycache__/context_engine.cpython-311.pyc +0 -0
  118. package/src/core/__pycache__/context_engine.cpython-313.pyc +0 -0
  119. package/src/core/__pycache__/evidence_resolver.cpython-311.pyc +0 -0
  120. package/src/core/__pycache__/evidence_resolver.cpython-313.pyc +0 -0
  121. package/src/core/__pycache__/guardrails.cpython-311.pyc +0 -0
  122. package/src/core/__pycache__/guardrails.cpython-313.pyc +0 -0
  123. package/src/core/__pycache__/hooks.cpython-311.pyc +0 -0
  124. package/src/core/__pycache__/hooks.cpython-313.pyc +0 -0
  125. package/src/core/__pycache__/intent_service.cpython-313.pyc +0 -0
  126. package/src/core/__pycache__/llm_executor.cpython-311.pyc +0 -0
  127. package/src/core/__pycache__/llm_executor.cpython-313.pyc +0 -0
  128. package/src/core/__pycache__/model_router.cpython-311.pyc +0 -0
  129. package/src/core/__pycache__/model_router.cpython-313.pyc +0 -0
  130. package/src/core/__pycache__/orchestration_contracts.cpython-311.pyc +0 -0
  131. package/src/core/__pycache__/orchestration_contracts.cpython-313.pyc +0 -0
  132. package/src/core/__pycache__/precedence.cpython-311.pyc +0 -0
  133. package/src/core/__pycache__/precedence.cpython-313.pyc +0 -0
  134. package/src/core/__pycache__/prompt_builder.cpython-311.pyc +0 -0
  135. package/src/core/__pycache__/prompt_builder.cpython-313.pyc +0 -0
  136. package/src/core/__pycache__/prompt_policy_engine.cpython-311.pyc +0 -0
  137. package/src/core/__pycache__/prompt_policy_engine.cpython-313.pyc +0 -0
  138. package/{knowledge_base → src}/core/cache.py +2 -2
  139. package/{knowledge_base → src}/core/confidence.py +2 -2
  140. package/src/core/context_engine.py +138 -0
  141. package/src/core/evidence_resolver.py +72 -0
  142. package/src/core/guardrails.py +22 -0
  143. package/src/core/hooks.py +57 -0
  144. package/src/core/intent_service.py +74 -0
  145. package/src/core/llm_executor.py +138 -0
  146. package/{knowledge_base → src}/core/logging_setup.py +1 -1
  147. package/src/core/model_router.py +246 -0
  148. package/src/core/orchestration_contracts.py +66 -0
  149. package/src/core/persistence_engine.py +159 -0
  150. package/src/core/prompt_builder.py +49 -0
  151. package/src/core/prompt_policy_engine.py +35 -0
  152. package/src/core/traceability_engine.py +56 -0
  153. package/src/db/__pycache__/__init__.cpython-311.pyc +0 -0
  154. package/src/db/__pycache__/client.cpython-311.pyc +0 -0
  155. package/{knowledge_base → src}/db/__pycache__/client.cpython-313.pyc +0 -0
  156. package/src/db/__pycache__/igel_schema.cpython-311.pyc +0 -0
  157. package/{knowledge_base → src}/db/__pycache__/igel_schema.cpython-313.pyc +0 -0
  158. package/src/db/__pycache__/kg_introspect.cpython-311.pyc +0 -0
  159. package/src/db/__pycache__/kg_introspect.cpython-313.pyc +0 -0
  160. package/{knowledge_base → src}/db/client.py +1 -1
  161. package/{knowledge_base → src}/db/connector_sync.py +1 -1
  162. package/{knowledge_base → src}/db/feedback_schema.py +2 -2
  163. package/{knowledge_base → src}/db/igel_schema.py +28 -3
  164. package/{knowledge_base → src}/db/kg_introspect.py +1 -1
  165. package/src/db/migrations.py +237 -0
  166. package/{knowledge_base → src}/db/schema.py +6 -6
  167. package/{knowledge_base → src}/deploy/Dockerfile +3 -3
  168. package/{knowledge_base → src}/deploy/feedback_automation.sh +3 -3
  169. package/{knowledge_base → src}/deploy/firecrawl-docker.sh +4 -4
  170. package/{knowledge_base → src}/deploy/igel-testgen.service +2 -2
  171. package/{knowledge_base → src}/deploy/install_reranker.sh +1 -1
  172. package/{knowledge_base → src}/deploy/requirements.txt +1 -2
  173. package/{knowledge_base → src}/deploy/run_server.sh +1 -1
  174. package/{knowledge_base → src}/docs/TEST_GENERATION_GUIDE.md +15 -15
  175. package/src/embeddings/__pycache__/__init__.cpython-311.pyc +0 -0
  176. package/src/embeddings/__pycache__/azure_embedder.cpython-311.pyc +0 -0
  177. package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-313.pyc +0 -0
  178. package/{knowledge_base → src}/embeddings/azure_embedder.py +10 -1
  179. package/{knowledge_base → src}/eval/__init__.py +3 -3
  180. package/{knowledge_base → src}/eval/__main__.py +7 -7
  181. package/src/eval/__pycache__/__init__.cpython-311.pyc +0 -0
  182. package/src/eval/__pycache__/__init__.cpython-313.pyc +0 -0
  183. package/src/eval/__pycache__/baseline.cpython-311.pyc +0 -0
  184. package/src/eval/__pycache__/baseline.cpython-313.pyc +0 -0
  185. package/src/eval/__pycache__/harness.cpython-311.pyc +0 -0
  186. package/src/eval/__pycache__/harness.cpython-313.pyc +0 -0
  187. package/src/eval/__pycache__/scorers.cpython-311.pyc +0 -0
  188. package/src/eval/__pycache__/scorers.cpython-313.pyc +0 -0
  189. package/{knowledge_base → src}/eval/harness.py +6 -6
  190. package/{knowledge_base → src}/feedback/__init__.py +1 -1
  191. package/{knowledge_base → src}/feedback/analytics.py +1 -1
  192. package/{knowledge_base → src}/feedback/applier.py +4 -4
  193. package/{knowledge_base → src}/feedback/curator.py +2 -2
  194. package/{knowledge_base → src}/feedback/handler.py +1 -1
  195. package/src/generation/__pycache__/__init__.cpython-313.pyc +0 -0
  196. package/src/generation/__pycache__/input_classifier.cpython-313.pyc +0 -0
  197. package/src/generation/__pycache__/manual_tc_parser.cpython-313.pyc +0 -0
  198. package/src/generation/__pycache__/prompts.cpython-313.pyc +0 -0
  199. package/src/generation/__pycache__/test_generator.cpython-313.pyc +0 -0
  200. package/{knowledge_base → src}/generation/input_classifier.py +1 -1
  201. package/{knowledge_base → src}/generation/prompts.py +1 -1
  202. package/{knowledge_base → src}/generation/tc_transformer.py +10 -10
  203. package/{knowledge_base → src}/generation/test_generator.py +56 -10
  204. package/{knowledge_base → src}/graph_db/__init__.py +1 -1
  205. package/{knowledge_base → src}/graph_db/graphiti_client.py +2 -2
  206. package/{knowledge_base → src}/graph_db/kg_traversal.py +3 -3
  207. package/{knowledge_base → src}/graph_db/migrate_kg.py +4 -4
  208. package/{knowledge_base → src}/graph_db/neo4j_client.py +1 -1
  209. package/{knowledge_base → src}/graph_db/temporal_ingest.py +1 -1
  210. package/{knowledge_base → src}/ingestion/kg_extractor.py +6 -6
  211. package/{knowledge_base → src}/ingestion/web_ingest.py +6 -6
  212. package/src/intelligence/__pycache__/__init__.cpython-311.pyc +0 -0
  213. package/src/intelligence/__pycache__/__init__.cpython-313.pyc +0 -0
  214. package/src/intelligence/__pycache__/diff_analyzer.cpython-311.pyc +0 -0
  215. package/src/intelligence/__pycache__/diff_analyzer.cpython-313.pyc +0 -0
  216. package/src/intelligence/__pycache__/routing_engine.cpython-311.pyc +0 -0
  217. package/src/intelligence/__pycache__/routing_engine.cpython-313.pyc +0 -0
  218. package/src/intelligence/diff_analyzer.py +109 -0
  219. package/{knowledge_base → src}/intelligence/execution_ingest.py +3 -3
  220. package/src/intelligence/routing_engine.py +74 -0
  221. package/src/mcp/server.ts +384 -0
  222. package/src/memory/__init__.py +6 -0
  223. package/{knowledge_base → src}/memory/cognee_client.py +3 -3
  224. package/src/models/__pycache__/test_requirement.cpython-311.pyc +0 -0
  225. package/{knowledge_base → src}/models/__pycache__/test_requirement.cpython-313.pyc +0 -0
  226. package/{knowledge_base → src}/models/test_requirement.py +19 -7
  227. package/{knowledge_base → src}/parsers/csv_parser.py +1 -1
  228. package/{knowledge_base → src}/parsers/doc_parser.py +1 -1
  229. package/{knowledge_base → src}/parsers/html_parser.py +1 -1
  230. package/{knowledge_base → src}/parsers/pdf_parser.py +1 -1
  231. package/src/project/__pycache__/__init__.cpython-311.pyc +0 -0
  232. package/src/project/__pycache__/__init__.cpython-313.pyc +0 -0
  233. package/src/project/__pycache__/ai_folder.cpython-311.pyc +0 -0
  234. package/src/project/__pycache__/ai_folder.cpython-313.pyc +0 -0
  235. package/src/project/__pycache__/context_enricher.cpython-313.pyc +0 -0
  236. package/src/project/__pycache__/context_projection_builder.cpython-311.pyc +0 -0
  237. package/src/project/__pycache__/context_projection_builder.cpython-313.pyc +0 -0
  238. package/src/project/__pycache__/context_requirement_sync.cpython-311.pyc +0 -0
  239. package/src/project/__pycache__/context_requirement_sync.cpython-313.pyc +0 -0
  240. package/src/project/ai_folder.py +602 -0
  241. package/src/project/context_enricher.py +333 -0
  242. package/src/project/context_projection_builder.py +167 -0
  243. package/src/project/context_requirement_sync.py +205 -0
  244. package/src/project/init_check.py +214 -0
  245. package/src/prompts/__pycache__/prompt_loader.cpython-313.pyc +0 -0
  246. package/src/prompts/automation_design.md +12 -0
  247. package/src/prompts/policies/automation_generation_policy.md +11 -0
  248. package/src/prompts/policies/generation_instructions.md +24 -0
  249. package/src/prompts/policies/guardrails.md +6 -0
  250. package/src/prompts/policies/traceability_policy.md +9 -0
  251. package/src/prompts/prompt_loader.py +56 -0
  252. package/src/prompts/requirement_understanding.md +17 -0
  253. package/src/prompts/scenario_generator.md +17 -0
  254. package/src/prompts/script_generator.md +13 -0
  255. package/src/prompts/test_case_generator.md +23 -0
  256. package/src/retrieval/__pycache__/__init__.cpython-311.pyc +0 -0
  257. package/src/retrieval/__pycache__/__init__.cpython-313.pyc +0 -0
  258. package/src/retrieval/__pycache__/knowledge_graph.cpython-311.pyc +0 -0
  259. package/src/retrieval/__pycache__/knowledge_graph.cpython-313.pyc +0 -0
  260. package/src/retrieval/__pycache__/retriever.cpython-311.pyc +0 -0
  261. package/src/retrieval/__pycache__/retriever.cpython-313.pyc +0 -0
  262. package/src/retrieval/__pycache__/unified_query.cpython-313.pyc +0 -0
  263. package/{knowledge_base → src}/retrieval/context_fusion.py +3 -3
  264. package/{knowledge_base → src}/retrieval/knowledge_graph.py +4 -4
  265. package/{knowledge_base → src}/retrieval/reranker.py +2 -2
  266. package/{knowledge_base → src}/retrieval/retriever.py +11 -11
  267. package/{knowledge_base → src}/retrieval/unified_query.py +7 -7
  268. package/{knowledge_base → src}/retrieval/web_retriever.py +6 -6
  269. package/{knowledge_base → src}/validators/step_fidelity.py +1 -1
  270. package/src/vision/__init__.py +0 -0
  271. package/{knowledge_base → src}/vision/image_describer.py +1 -1
  272. package/knowledge_base/agents/__pycache__/automation_design_agent.cpython-313.pyc +0 -0
  273. package/knowledge_base/agents/__pycache__/confidence_agent.cpython-313.pyc +0 -0
  274. package/knowledge_base/agents/__pycache__/execution_validation_agent.cpython-313.pyc +0 -0
  275. package/knowledge_base/agents/__pycache__/requirement_agent.cpython-313.pyc +0 -0
  276. package/knowledge_base/agents/__pycache__/testcase_agent.cpython-313.pyc +0 -0
  277. package/knowledge_base/agents/__pycache__/workflow_engine.cpython-313.pyc +0 -0
  278. package/knowledge_base/agents/confidence_agent.py +0 -95
  279. package/knowledge_base/agents/execution_validation_agent.py +0 -129
  280. package/knowledge_base/agents/intent_agent.py +0 -76
  281. package/knowledge_base/agents/requirement_agent.py +0 -71
  282. package/knowledge_base/agents/testcase_agent.py +0 -111
  283. package/knowledge_base/agents/workflow_engine.py +0 -87
  284. package/knowledge_base/cli/__pycache__/workflow_cli.cpython-313.pyc +0 -0
  285. package/knowledge_base/cli/generate_qcapps134.py +0 -391
  286. package/knowledge_base/cli/workflow_cli.py +0 -189
  287. package/knowledge_base/config/.env +0 -100
  288. package/knowledge_base/config/.env.example +0 -75
  289. package/knowledge_base/config/__pycache__/__init__.cpython-313.pyc +0 -0
  290. package/knowledge_base/connectors/__pycache__/__init__.cpython-313.pyc +0 -0
  291. package/knowledge_base/connectors/bitbucket_connector.py +0 -25
  292. package/knowledge_base/db/migrations.py +0 -22
  293. package/knowledge_base/ingestion/ingest.py +0 -346
  294. package/knowledge_base/ingestion/ingest_images.py +0 -330
  295. package/knowledge_base/memory/__init__.py +0 -6
  296. package/knowledge_base/memory/ingest_memory.py +0 -60
  297. /package/{knowledge_base → src}/__init__.py +0 -0
  298. /package/{knowledge_base → src}/__pycache__/__init__.cpython-313.pyc +0 -0
  299. /package/{knowledge_base → src}/__pycache__/__init__.cpython-314.pyc +0 -0
  300. /package/{knowledge_base → src}/__pycache__/__init__.cpython-37.pyc +0 -0
  301. /package/{knowledge_base → src}/__pycache__/__init__.cpython-38.pyc +0 -0
  302. /package/{knowledge_base → src}/__pycache__/confidence.cpython-37.pyc +0 -0
  303. /package/{knowledge_base → src}/__pycache__/config.cpython-314.pyc +0 -0
  304. /package/{knowledge_base → src}/__pycache__/config.cpython-37.pyc +0 -0
  305. /package/{knowledge_base → src}/__pycache__/config.cpython-38.pyc +0 -0
  306. /package/{knowledge_base → src}/__pycache__/context_fusion.cpython-314.pyc +0 -0
  307. /package/{knowledge_base → src}/__pycache__/context_fusion.cpython-37.pyc +0 -0
  308. /package/{knowledge_base → src}/__pycache__/feedback_analytics.cpython-37.pyc +0 -0
  309. /package/{knowledge_base → src}/__pycache__/feedback_applier.cpython-37.pyc +0 -0
  310. /package/{knowledge_base → src}/__pycache__/feedback_cli.cpython-37.pyc +0 -0
  311. /package/{knowledge_base → src}/__pycache__/feedback_curator.cpython-37.pyc +0 -0
  312. /package/{knowledge_base → src}/__pycache__/feedback_handler.cpython-37.pyc +0 -0
  313. /package/{knowledge_base → src}/__pycache__/generate.cpython-37.pyc +0 -0
  314. /package/{knowledge_base → src}/__pycache__/generate_qcapps134.cpython-37.pyc +0 -0
  315. /package/{knowledge_base → src}/__pycache__/input_classifier.cpython-314.pyc +0 -0
  316. /package/{knowledge_base → src}/__pycache__/input_classifier.cpython-37.pyc +0 -0
  317. /package/{knowledge_base → src}/__pycache__/kg_extractor.cpython-37.pyc +0 -0
  318. /package/{knowledge_base → src}/__pycache__/knowledge_graph.cpython-314.pyc +0 -0
  319. /package/{knowledge_base → src}/__pycache__/knowledge_graph.cpython-37.pyc +0 -0
  320. /package/{knowledge_base → src}/__pycache__/manual_tc_parser.cpython-314.pyc +0 -0
  321. /package/{knowledge_base → src}/__pycache__/manual_tc_parser.cpython-37.pyc +0 -0
  322. /package/{knowledge_base → src}/__pycache__/precedence.cpython-37.pyc +0 -0
  323. /package/{knowledge_base → src}/__pycache__/prompts.cpython-314.pyc +0 -0
  324. /package/{knowledge_base → src}/__pycache__/prompts.cpython-37.pyc +0 -0
  325. /package/{knowledge_base → src}/__pycache__/reranker.cpython-314.pyc +0 -0
  326. /package/{knowledge_base → src}/__pycache__/reranker.cpython-37.pyc +0 -0
  327. /package/{knowledge_base → src}/__pycache__/retrieval_debug.cpython-314.pyc +0 -0
  328. /package/{knowledge_base → src}/__pycache__/retrieval_debug.cpython-37.pyc +0 -0
  329. /package/{knowledge_base → src}/__pycache__/retriever.cpython-314.pyc +0 -0
  330. /package/{knowledge_base → src}/__pycache__/retriever.cpython-37.pyc +0 -0
  331. /package/{knowledge_base → src}/__pycache__/server.cpython-37.pyc +0 -0
  332. /package/{knowledge_base → src}/__pycache__/tc_transformer.cpython-314.pyc +0 -0
  333. /package/{knowledge_base → src}/__pycache__/tc_transformer.cpython-37.pyc +0 -0
  334. /package/{knowledge_base → src}/__pycache__/test_generator.cpython-314.pyc +0 -0
  335. /package/{knowledge_base → src}/__pycache__/test_generator.cpython-37.pyc +0 -0
  336. /package/{knowledge_base → src}/agents/__init__.py +0 -0
  337. /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-313.pyc +0 -0
  338. /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-314.pyc +0 -0
  339. /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-37.pyc +0 -0
  340. /package/{knowledge_base → src}/agents/__pycache__/__init__.cpython-38.pyc +0 -0
  341. /package/{knowledge_base → src}/agents/__pycache__/automation_design_agent.cpython-314.pyc +0 -0
  342. /package/{knowledge_base → src}/agents/__pycache__/confidence_agent.cpython-314.pyc +0 -0
  343. /package/{knowledge_base → src}/agents/__pycache__/execution_validation_agent.cpython-314.pyc +0 -0
  344. /package/{knowledge_base → src}/agents/__pycache__/fusion_agent.cpython-314.pyc +0 -0
  345. /package/{knowledge_base → src}/agents/__pycache__/fusion_agent.cpython-37.pyc +0 -0
  346. /package/{knowledge_base → src}/agents/__pycache__/fusion_agent.cpython-38.pyc +0 -0
  347. /package/{knowledge_base → src}/agents/__pycache__/graph.cpython-314.pyc +0 -0
  348. /package/{knowledge_base → src}/agents/__pycache__/graph.cpython-37.pyc +0 -0
  349. /package/{knowledge_base → src}/agents/__pycache__/graph.cpython-38.pyc +0 -0
  350. /package/{knowledge_base → src}/agents/__pycache__/healing_agent.cpython-37.pyc +0 -0
  351. /package/{knowledge_base → src}/agents/__pycache__/intent_agent.cpython-314.pyc +0 -0
  352. /package/{knowledge_base → src}/agents/__pycache__/intent_agent.cpython-37.pyc +0 -0
  353. /package/{knowledge_base → src}/agents/__pycache__/intent_agent.cpython-38.pyc +0 -0
  354. /package/{knowledge_base → src}/agents/__pycache__/kg_agent.cpython-314.pyc +0 -0
  355. /package/{knowledge_base → src}/agents/__pycache__/kg_agent.cpython-37.pyc +0 -0
  356. /package/{knowledge_base → src}/agents/__pycache__/kg_agent.cpython-38.pyc +0 -0
  357. /package/{knowledge_base → src}/agents/__pycache__/memory_agent.cpython-314.pyc +0 -0
  358. /package/{knowledge_base → src}/agents/__pycache__/memory_agent.cpython-37.pyc +0 -0
  359. /package/{knowledge_base → src}/agents/__pycache__/memory_agent.cpython-38.pyc +0 -0
  360. /package/{knowledge_base → src}/agents/__pycache__/rca_agent.cpython-37.pyc +0 -0
  361. /package/{knowledge_base → src}/agents/__pycache__/reflection_agent.cpython-314.pyc +0 -0
  362. /package/{knowledge_base → src}/agents/__pycache__/reflection_agent.cpython-37.pyc +0 -0
  363. /package/{knowledge_base → src}/agents/__pycache__/reflection_agent.cpython-38.pyc +0 -0
  364. /package/{knowledge_base → src}/agents/__pycache__/regression_agent.cpython-37.pyc +0 -0
  365. /package/{knowledge_base → src}/agents/__pycache__/requirement_agent.cpython-314.pyc +0 -0
  366. /package/{knowledge_base → src}/agents/__pycache__/retrieval_agent.cpython-314.pyc +0 -0
  367. /package/{knowledge_base → src}/agents/__pycache__/retrieval_agent.cpython-37.pyc +0 -0
  368. /package/{knowledge_base → src}/agents/__pycache__/retrieval_agent.cpython-38.pyc +0 -0
  369. /package/{knowledge_base → src}/agents/__pycache__/scenario_agent.cpython-314.pyc +0 -0
  370. /package/{knowledge_base → src}/agents/__pycache__/script_agent.cpython-314.pyc +0 -0
  371. /package/{knowledge_base → src}/agents/__pycache__/script_agent.cpython-37.pyc +0 -0
  372. /package/{knowledge_base → src}/agents/__pycache__/script_agent.cpython-38.pyc +0 -0
  373. /package/{knowledge_base → src}/agents/__pycache__/script_generator_agent.cpython-314.pyc +0 -0
  374. /package/{knowledge_base → src}/agents/__pycache__/state.cpython-314.pyc +0 -0
  375. /package/{knowledge_base → src}/agents/__pycache__/state.cpython-37.pyc +0 -0
  376. /package/{knowledge_base → src}/agents/__pycache__/state.cpython-38.pyc +0 -0
  377. /package/{knowledge_base → src}/agents/__pycache__/temporal_agent.cpython-314.pyc +0 -0
  378. /package/{knowledge_base → src}/agents/__pycache__/temporal_agent.cpython-37.pyc +0 -0
  379. /package/{knowledge_base → src}/agents/__pycache__/temporal_agent.cpython-38.pyc +0 -0
  380. /package/{knowledge_base → src}/agents/__pycache__/testcase_agent.cpython-314.pyc +0 -0
  381. /package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-314.pyc +0 -0
  382. /package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-37.pyc +0 -0
  383. /package/{knowledge_base → src}/agents/__pycache__/validation_agent.cpython-38.pyc +0 -0
  384. /package/{knowledge_base → src}/agents/__pycache__/workflow_engine.cpython-314.pyc +0 -0
  385. /package/{knowledge_base → src}/agents/state.py +0 -0
  386. /package/{knowledge_base → src}/alembic/__pycache__/env.cpython-37.pyc +0 -0
  387. /package/{knowledge_base → src}/alembic/__pycache__/env.cpython-38.pyc +0 -0
  388. /package/{knowledge_base → src}/alembic/versions/.gitkeep +0 -0
  389. /package/{knowledge_base → src}/alembic/versions/001_phase0_feedback.py +0 -0
  390. /package/{knowledge_base → src}/alembic/versions/002_feedback_promotions.py +0 -0
  391. /package/{knowledge_base → src}/alembic/versions/003_enterprise_hardening.py +0 -0
  392. /package/{knowledge_base → src}/alembic/versions/__pycache__/001_phase0_feedback.cpython-37.pyc +0 -0
  393. /package/{knowledge_base → src}/alembic/versions/__pycache__/001_phase0_feedback.cpython-38.pyc +0 -0
  394. /package/{knowledge_base → src}/alembic/versions/__pycache__/002_feedback_promotions.cpython-37.pyc +0 -0
  395. /package/{knowledge_base → src}/alembic/versions/__pycache__/002_feedback_promotions.cpython-38.pyc +0 -0
  396. /package/{knowledge_base → src}/api/__init__.py +0 -0
  397. /package/{knowledge_base → src}/api/__pycache__/__init__.cpython-37.pyc +0 -0
  398. /package/{knowledge_base → src}/api/__pycache__/__init__.cpython-38.pyc +0 -0
  399. /package/{knowledge_base → src}/api/__pycache__/middleware.cpython-38.pyc +0 -0
  400. /package/{knowledge_base → src}/api/__pycache__/server.cpython-37.pyc +0 -0
  401. /package/{knowledge_base → src}/api/__pycache__/server.cpython-38.pyc +0 -0
  402. /package/{knowledge_base → src}/chunking/__init__.py +0 -0
  403. /package/{knowledge_base → src}/chunking/__pycache__/__init__.cpython-37.pyc +0 -0
  404. /package/{knowledge_base → src}/chunking/__pycache__/__init__.cpython-38.pyc +0 -0
  405. /package/{knowledge_base → src}/chunking/__pycache__/chunker.cpython-37.pyc +0 -0
  406. /package/{knowledge_base → src}/chunking/__pycache__/chunker.cpython-38.pyc +0 -0
  407. /package/{knowledge_base → src}/chunking/__pycache__/validators.cpython-37.pyc +0 -0
  408. /package/{knowledge_base → src}/chunking/__pycache__/validators.cpython-38.pyc +0 -0
  409. /package/{knowledge_base → src}/chunking/validators.py +0 -0
  410. /package/{knowledge_base → src}/cli/__init__.py +0 -0
  411. /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-313.pyc +0 -0
  412. /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-314.pyc +0 -0
  413. /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-37.pyc +0 -0
  414. /package/{knowledge_base → src}/cli/__pycache__/__init__.cpython-38.pyc +0 -0
  415. /package/{knowledge_base → src}/cli/__pycache__/feedback_cli.cpython-37.pyc +0 -0
  416. /package/{knowledge_base → src}/cli/__pycache__/feedback_cli.cpython-38.pyc +0 -0
  417. /package/{knowledge_base → src}/cli/__pycache__/generate.cpython-37.pyc +0 -0
  418. /package/{knowledge_base → src}/cli/__pycache__/generate.cpython-38.pyc +0 -0
  419. /package/{knowledge_base → src}/cli/__pycache__/generate_qcapps134.cpython-37.pyc +0 -0
  420. /package/{knowledge_base → src}/cli/__pycache__/workflow_cli.cpython-314.pyc +0 -0
  421. /package/{knowledge_base → src}/config/__pycache__/__init__.cpython-314.pyc +0 -0
  422. /package/{knowledge_base → src}/config/__pycache__/__init__.cpython-37.pyc +0 -0
  423. /package/{knowledge_base → src}/config/__pycache__/__init__.cpython-38.pyc +0 -0
  424. /package/{knowledge_base → src}/config/__pycache__/settings.cpython-314.pyc +0 -0
  425. /package/{knowledge_base → src}/config/__pycache__/settings.cpython-37.pyc +0 -0
  426. /package/{knowledge_base → src}/config/__pycache__/settings.cpython-38.pyc +0 -0
  427. /package/{knowledge_base → src}/connectors/__pycache__/__init__.cpython-314.pyc +0 -0
  428. /package/{knowledge_base → src}/connectors/__pycache__/__init__.cpython-37.pyc +0 -0
  429. /package/{knowledge_base → src}/connectors/__pycache__/__init__.cpython-38.pyc +0 -0
  430. /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-313.pyc +0 -0
  431. /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-314.pyc +0 -0
  432. /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-37.pyc +0 -0
  433. /package/{knowledge_base → src}/connectors/__pycache__/base.cpython-38.pyc +0 -0
  434. /package/{knowledge_base → src}/connectors/__pycache__/bitbucket_connector.cpython-37.pyc +0 -0
  435. /package/{knowledge_base → src}/connectors/__pycache__/bitbucket_connector.cpython-38.pyc +0 -0
  436. /package/{knowledge_base → src}/connectors/__pycache__/community_connector.cpython-38.pyc +0 -0
  437. /package/{knowledge_base → src}/connectors/__pycache__/confluence_connector.cpython-37.pyc +0 -0
  438. /package/{knowledge_base → src}/connectors/__pycache__/confluence_connector.cpython-38.pyc +0 -0
  439. /package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-314.pyc +0 -0
  440. /package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-37.pyc +0 -0
  441. /package/{knowledge_base → src}/connectors/__pycache__/jira_connector.cpython-38.pyc +0 -0
  442. /package/{knowledge_base → src}/connectors/__pycache__/kb_igel_connector.cpython-38.pyc +0 -0
  443. /package/{knowledge_base → src}/connectors/__pycache__/playwright_fetcher.cpython-38.pyc +0 -0
  444. /package/{knowledge_base → src}/connectors/__pycache__/query_bridge.cpython-314.pyc +0 -0
  445. /package/{knowledge_base → src}/connectors/__pycache__/query_bridge.cpython-38.pyc +0 -0
  446. /package/{knowledge_base → src}/connectors/__pycache__/search_backends.cpython-38.pyc +0 -0
  447. /package/{knowledge_base → src}/connectors/__pycache__/serviceNow_connector.cpython-37.pyc +0 -0
  448. /package/{knowledge_base → src}/connectors/__pycache__/serviceNow_connector.cpython-38.pyc +0 -0
  449. /package/{knowledge_base → src}/connectors/__pycache__/sync_scheduler.cpython-37.pyc +0 -0
  450. /package/{knowledge_base → src}/connectors/__pycache__/sync_scheduler.cpython-38.pyc +0 -0
  451. /package/{knowledge_base → src}/connectors/__pycache__/teamcity_connector.cpython-37.pyc +0 -0
  452. /package/{knowledge_base → src}/connectors/__pycache__/teamcity_connector.cpython-38.pyc +0 -0
  453. /package/{knowledge_base → src}/connectors/__pycache__/testRail_connector.cpython-37.pyc +0 -0
  454. /package/{knowledge_base → src}/connectors/__pycache__/testRail_connector.cpython-38.pyc +0 -0
  455. /package/{knowledge_base → src}/connectors/__pycache__/web_fetcher.cpython-38.pyc +0 -0
  456. /package/{knowledge_base → src}/connectors/base.py +0 -0
  457. /package/{knowledge_base → src}/connectors/playwright_fetcher.py +0 -0
  458. /package/{knowledge_base → src}/core/__pycache__/__init__.cpython-314.pyc +0 -0
  459. /package/{knowledge_base → src}/core/__pycache__/__init__.cpython-37.pyc +0 -0
  460. /package/{knowledge_base → src}/core/__pycache__/__init__.cpython-38.pyc +0 -0
  461. /package/{knowledge_base → src}/core/__pycache__/cache.cpython-38.pyc +0 -0
  462. /package/{knowledge_base → src}/core/__pycache__/circuit_breaker.cpython-314.pyc +0 -0
  463. /package/{knowledge_base → src}/core/__pycache__/circuit_breaker.cpython-38.pyc +0 -0
  464. /package/{knowledge_base → src}/core/__pycache__/confidence.cpython-314.pyc +0 -0
  465. /package/{knowledge_base → src}/core/__pycache__/confidence.cpython-37.pyc +0 -0
  466. /package/{knowledge_base → src}/core/__pycache__/confidence.cpython-38.pyc +0 -0
  467. /package/{knowledge_base → src}/core/__pycache__/logging_setup.cpython-38.pyc +0 -0
  468. /package/{knowledge_base → src}/core/__pycache__/metrics.cpython-38.pyc +0 -0
  469. /package/{knowledge_base → src}/core/__pycache__/precedence.cpython-37.pyc +0 -0
  470. /package/{knowledge_base → src}/core/__pycache__/precedence.cpython-38.pyc +0 -0
  471. /package/{knowledge_base → src}/core/__pycache__/request_context.cpython-38.pyc +0 -0
  472. /package/{knowledge_base → src}/core/circuit_breaker.py +0 -0
  473. /package/{knowledge_base → src}/core/metrics.py +0 -0
  474. /package/{knowledge_base → src}/core/precedence.py +0 -0
  475. /package/{knowledge_base → src}/core/request_context.py +0 -0
  476. /package/{knowledge_base → src}/db/__init__.py +0 -0
  477. /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-313.pyc +0 -0
  478. /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-314.pyc +0 -0
  479. /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-37.pyc +0 -0
  480. /package/{knowledge_base → src}/db/__pycache__/__init__.cpython-38.pyc +0 -0
  481. /package/{knowledge_base → src}/db/__pycache__/client.cpython-314.pyc +0 -0
  482. /package/{knowledge_base → src}/db/__pycache__/client.cpython-37.pyc +0 -0
  483. /package/{knowledge_base → src}/db/__pycache__/client.cpython-38.pyc +0 -0
  484. /package/{knowledge_base → src}/db/__pycache__/connector_sync.cpython-38.pyc +0 -0
  485. /package/{knowledge_base → src}/db/__pycache__/feedback_schema.cpython-37.pyc +0 -0
  486. /package/{knowledge_base → src}/db/__pycache__/feedback_schema.cpython-38.pyc +0 -0
  487. /package/{knowledge_base → src}/db/__pycache__/igel_schema.cpython-314.pyc +0 -0
  488. /package/{knowledge_base → src}/db/__pycache__/kg_introspect.cpython-314.pyc +0 -0
  489. /package/{knowledge_base → src}/db/__pycache__/kg_introspect.cpython-37.pyc +0 -0
  490. /package/{knowledge_base → src}/db/__pycache__/kg_introspect.cpython-38.pyc +0 -0
  491. /package/{knowledge_base → src}/db/__pycache__/schema.cpython-37.pyc +0 -0
  492. /package/{knowledge_base → src}/db/__pycache__/schema.cpython-38.pyc +0 -0
  493. /package/{knowledge_base → src}/embeddings/__init__.py +0 -0
  494. /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-313.pyc +0 -0
  495. /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-314.pyc +0 -0
  496. /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-37.pyc +0 -0
  497. /package/{knowledge_base → src}/embeddings/__pycache__/__init__.cpython-38.pyc +0 -0
  498. /package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-314.pyc +0 -0
  499. /package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-37.pyc +0 -0
  500. /package/{knowledge_base → src}/embeddings/__pycache__/azure_embedder.cpython-38.pyc +0 -0
  501. /package/{knowledge_base → src}/eval/__pycache__/__init__.cpython-314.pyc +0 -0
  502. /package/{knowledge_base → src}/eval/__pycache__/__init__.cpython-37.pyc +0 -0
  503. /package/{knowledge_base → src}/eval/__pycache__/__init__.cpython-38.pyc +0 -0
  504. /package/{knowledge_base → src}/eval/__pycache__/__main__.cpython-37.pyc +0 -0
  505. /package/{knowledge_base → src}/eval/__pycache__/baseline.cpython-314.pyc +0 -0
  506. /package/{knowledge_base → src}/eval/__pycache__/baseline.cpython-37.pyc +0 -0
  507. /package/{knowledge_base → src}/eval/__pycache__/baseline.cpython-38.pyc +0 -0
  508. /package/{knowledge_base → src}/eval/__pycache__/harness.cpython-314.pyc +0 -0
  509. /package/{knowledge_base → src}/eval/__pycache__/harness.cpython-37.pyc +0 -0
  510. /package/{knowledge_base → src}/eval/__pycache__/harness.cpython-38.pyc +0 -0
  511. /package/{knowledge_base → src}/eval/__pycache__/scorers.cpython-314.pyc +0 -0
  512. /package/{knowledge_base → src}/eval/__pycache__/scorers.cpython-37.pyc +0 -0
  513. /package/{knowledge_base → src}/eval/__pycache__/scorers.cpython-38.pyc +0 -0
  514. /package/{knowledge_base → src}/eval/baseline.py +0 -0
  515. /package/{knowledge_base → src}/eval/queries_50.json +0 -0
  516. /package/{knowledge_base → src}/eval/scorers.py +0 -0
  517. /package/{knowledge_base → src}/exemplars/README.md +0 -0
  518. /package/{knowledge_base → src}/exemplars/__pycache__/pytest_reference_snippet.cpython-37.pyc +0 -0
  519. /package/{knowledge_base → src}/exemplars/gold_manual_concise_snippet.md +0 -0
  520. /package/{knowledge_base → src}/exemplars/gold_manual_detailed_snippet.md +0 -0
  521. /package/{knowledge_base → src}/exemplars/pytest_reference_snippet.py +0 -0
  522. /package/{knowledge_base → src}/feedback/__pycache__/__init__.cpython-37.pyc +0 -0
  523. /package/{knowledge_base → src}/feedback/__pycache__/__init__.cpython-38.pyc +0 -0
  524. /package/{knowledge_base → src}/feedback/__pycache__/analytics.cpython-37.pyc +0 -0
  525. /package/{knowledge_base → src}/feedback/__pycache__/analytics.cpython-38.pyc +0 -0
  526. /package/{knowledge_base → src}/feedback/__pycache__/applier.cpython-37.pyc +0 -0
  527. /package/{knowledge_base → src}/feedback/__pycache__/applier.cpython-38.pyc +0 -0
  528. /package/{knowledge_base → src}/feedback/__pycache__/curator.cpython-37.pyc +0 -0
  529. /package/{knowledge_base → src}/feedback/__pycache__/curator.cpython-38.pyc +0 -0
  530. /package/{knowledge_base → src}/feedback/__pycache__/handler.cpython-37.pyc +0 -0
  531. /package/{knowledge_base → src}/feedback/__pycache__/handler.cpython-38.pyc +0 -0
  532. /package/{knowledge_base → src}/generation/__init__.py +0 -0
  533. /package/{knowledge_base → src}/generation/__pycache__/__init__.cpython-314.pyc +0 -0
  534. /package/{knowledge_base → src}/generation/__pycache__/__init__.cpython-37.pyc +0 -0
  535. /package/{knowledge_base → src}/generation/__pycache__/__init__.cpython-38.pyc +0 -0
  536. /package/{knowledge_base → src}/generation/__pycache__/input_classifier.cpython-37.pyc +0 -0
  537. /package/{knowledge_base → src}/generation/__pycache__/input_classifier.cpython-38.pyc +0 -0
  538. /package/{knowledge_base → src}/generation/__pycache__/manual_tc_parser.cpython-37.pyc +0 -0
  539. /package/{knowledge_base → src}/generation/__pycache__/manual_tc_parser.cpython-38.pyc +0 -0
  540. /package/{knowledge_base → src}/generation/__pycache__/prompts.cpython-314.pyc +0 -0
  541. /package/{knowledge_base → src}/generation/__pycache__/prompts.cpython-37.pyc +0 -0
  542. /package/{knowledge_base → src}/generation/__pycache__/prompts.cpython-38.pyc +0 -0
  543. /package/{knowledge_base → src}/generation/__pycache__/tc_transformer.cpython-37.pyc +0 -0
  544. /package/{knowledge_base → src}/generation/__pycache__/test_generator.cpython-314.pyc +0 -0
  545. /package/{knowledge_base → src}/generation/__pycache__/test_generator.cpython-37.pyc +0 -0
  546. /package/{knowledge_base → src}/generation/__pycache__/test_generator.cpython-38.pyc +0 -0
  547. /package/{knowledge_base → src}/generation/manual_tc_parser.py +0 -0
  548. /package/{knowledge_base → src}/graph_db/__pycache__/__init__.cpython-37.pyc +0 -0
  549. /package/{knowledge_base → src}/graph_db/__pycache__/__init__.cpython-38.pyc +0 -0
  550. /package/{knowledge_base → src}/graph_db/__pycache__/graphiti_client.cpython-37.pyc +0 -0
  551. /package/{knowledge_base → src}/graph_db/__pycache__/kg_traversal.cpython-37.pyc +0 -0
  552. /package/{knowledge_base → src}/graph_db/__pycache__/migrate_kg.cpython-37.pyc +0 -0
  553. /package/{knowledge_base → src}/graph_db/__pycache__/neo4j_client.cpython-37.pyc +0 -0
  554. /package/{knowledge_base → src}/graph_db/__pycache__/neo4j_client.cpython-38.pyc +0 -0
  555. /package/{knowledge_base → src}/graph_db/__pycache__/schema.cpython-37.pyc +0 -0
  556. /package/{knowledge_base → src}/graph_db/__pycache__/temporal_ingest.cpython-37.pyc +0 -0
  557. /package/{knowledge_base → src}/graph_db/schema.py +0 -0
  558. /package/{knowledge_base → src}/ingestion/__init__.py +0 -0
  559. /package/{knowledge_base → src}/ingestion/__pycache__/__init__.cpython-37.pyc +0 -0
  560. /package/{knowledge_base → src}/ingestion/__pycache__/__init__.cpython-38.pyc +0 -0
  561. /package/{knowledge_base → src}/ingestion/__pycache__/ingest.cpython-37.pyc +0 -0
  562. /package/{knowledge_base → src}/ingestion/__pycache__/ingest.cpython-38.pyc +0 -0
  563. /package/{knowledge_base → src}/ingestion/__pycache__/ingest_images.cpython-37.pyc +0 -0
  564. /package/{knowledge_base → src}/ingestion/__pycache__/ingest_images.cpython-38.pyc +0 -0
  565. /package/{knowledge_base → src}/ingestion/__pycache__/kg_extractor.cpython-37.pyc +0 -0
  566. /package/{knowledge_base → src}/ingestion/__pycache__/kg_extractor.cpython-38.pyc +0 -0
  567. /package/{knowledge_base → src}/ingestion/__pycache__/web_ingest.cpython-38.pyc +0 -0
  568. /package/{knowledge_base → src}/intelligence/__init__.py +0 -0
  569. /package/{knowledge_base → src}/intelligence/__pycache__/__init__.cpython-37.pyc +0 -0
  570. /package/{knowledge_base → src}/intelligence/__pycache__/execution_ingest.cpython-37.pyc +0 -0
  571. /package/{knowledge_base → src}/intelligence/__pycache__/predictive_engine.cpython-37.pyc +0 -0
  572. /package/{knowledge_base → src}/intelligence/__pycache__/risk_scorer.cpython-37.pyc +0 -0
  573. /package/{knowledge_base → src}/intelligence/predictive_engine.py +0 -0
  574. /package/{knowledge_base → src}/intelligence/risk_scorer.py +0 -0
  575. /package/{knowledge_base → src}/memory/__pycache__/__init__.cpython-314.pyc +0 -0
  576. /package/{knowledge_base → src}/memory/__pycache__/__init__.cpython-37.pyc +0 -0
  577. /package/{knowledge_base → src}/memory/__pycache__/__init__.cpython-38.pyc +0 -0
  578. /package/{knowledge_base → src}/memory/__pycache__/cognee_client.cpython-314.pyc +0 -0
  579. /package/{knowledge_base → src}/memory/__pycache__/cognee_client.cpython-37.pyc +0 -0
  580. /package/{knowledge_base → src}/memory/__pycache__/cognee_client.cpython-38.pyc +0 -0
  581. /package/{knowledge_base → src}/memory/__pycache__/ingest_memory.cpython-37.pyc +0 -0
  582. /package/{knowledge_base → src}/memory/__pycache__/memory_types.cpython-314.pyc +0 -0
  583. /package/{knowledge_base → src}/memory/__pycache__/memory_types.cpython-37.pyc +0 -0
  584. /package/{knowledge_base → src}/memory/__pycache__/memory_types.cpython-38.pyc +0 -0
  585. /package/{knowledge_base → src}/memory/memory_types.py +0 -0
  586. /package/{knowledge_base → src}/models/__pycache__/test_requirement.cpython-314.pyc +0 -0
  587. /package/{knowledge_base → src}/parsers/__init__.py +0 -0
  588. /package/{knowledge_base → src}/parsers/__pycache__/__init__.cpython-37.pyc +0 -0
  589. /package/{knowledge_base → src}/parsers/__pycache__/__init__.cpython-38.pyc +0 -0
  590. /package/{knowledge_base → src}/parsers/__pycache__/csv_parser.cpython-37.pyc +0 -0
  591. /package/{knowledge_base → src}/parsers/__pycache__/csv_parser.cpython-38.pyc +0 -0
  592. /package/{knowledge_base → src}/parsers/__pycache__/doc_parser.cpython-37.pyc +0 -0
  593. /package/{knowledge_base → src}/parsers/__pycache__/doc_parser.cpython-38.pyc +0 -0
  594. /package/{knowledge_base → src}/parsers/__pycache__/html_parser.cpython-38.pyc +0 -0
  595. /package/{knowledge_base → src}/parsers/__pycache__/image_extractor.cpython-37.pyc +0 -0
  596. /package/{knowledge_base → src}/parsers/__pycache__/image_extractor.cpython-38.pyc +0 -0
  597. /package/{knowledge_base → src}/parsers/__pycache__/markdown_parser.cpython-37.pyc +0 -0
  598. /package/{knowledge_base → src}/parsers/__pycache__/markdown_parser.cpython-38.pyc +0 -0
  599. /package/{knowledge_base → src}/parsers/__pycache__/pdf_parser.cpython-37.pyc +0 -0
  600. /package/{knowledge_base → src}/parsers/__pycache__/pdf_parser.cpython-38.pyc +0 -0
  601. /package/{knowledge_base → src}/parsers/image_extractor.py +0 -0
  602. /package/{knowledge_base → src}/parsers/markdown_parser.py +0 -0
  603. /package/{knowledge_base/vision → src/project}/__init__.py +0 -0
  604. /package/{knowledge_base → src}/retrieval/__init__.py +0 -0
  605. /package/{knowledge_base → src}/retrieval/__pycache__/__init__.cpython-314.pyc +0 -0
  606. /package/{knowledge_base → src}/retrieval/__pycache__/__init__.cpython-37.pyc +0 -0
  607. /package/{knowledge_base → src}/retrieval/__pycache__/__init__.cpython-38.pyc +0 -0
  608. /package/{knowledge_base → src}/retrieval/__pycache__/context_fusion.cpython-37.pyc +0 -0
  609. /package/{knowledge_base → src}/retrieval/__pycache__/context_fusion.cpython-38.pyc +0 -0
  610. /package/{knowledge_base → src}/retrieval/__pycache__/knowledge_graph.cpython-314.pyc +0 -0
  611. /package/{knowledge_base → src}/retrieval/__pycache__/knowledge_graph.cpython-37.pyc +0 -0
  612. /package/{knowledge_base → src}/retrieval/__pycache__/knowledge_graph.cpython-38.pyc +0 -0
  613. /package/{knowledge_base → src}/retrieval/__pycache__/reranker.cpython-37.pyc +0 -0
  614. /package/{knowledge_base → src}/retrieval/__pycache__/reranker.cpython-38.pyc +0 -0
  615. /package/{knowledge_base → src}/retrieval/__pycache__/retrieval_debug.cpython-37.pyc +0 -0
  616. /package/{knowledge_base → src}/retrieval/__pycache__/retrieval_debug.cpython-38.pyc +0 -0
  617. /package/{knowledge_base → src}/retrieval/__pycache__/retriever.cpython-314.pyc +0 -0
  618. /package/{knowledge_base → src}/retrieval/__pycache__/retriever.cpython-37.pyc +0 -0
  619. /package/{knowledge_base → src}/retrieval/__pycache__/retriever.cpython-38.pyc +0 -0
  620. /package/{knowledge_base → src}/retrieval/__pycache__/unified_query.cpython-314.pyc +0 -0
  621. /package/{knowledge_base → src}/retrieval/__pycache__/unified_query.cpython-38.pyc +0 -0
  622. /package/{knowledge_base → src}/retrieval/__pycache__/web_retriever.cpython-38.pyc +0 -0
  623. /package/{knowledge_base → src}/retrieval/retrieval_debug.py +0 -0
  624. /package/{knowledge_base → src}/validators/__init__.py +0 -0
  625. /package/{knowledge_base → src}/validators/__pycache__/__init__.cpython-314.pyc +0 -0
  626. /package/{knowledge_base → src}/validators/__pycache__/__init__.cpython-37.pyc +0 -0
  627. /package/{knowledge_base → src}/validators/__pycache__/step_fidelity.cpython-314.pyc +0 -0
  628. /package/{knowledge_base → src}/validators/__pycache__/step_fidelity.cpython-37.pyc +0 -0
  629. /package/{knowledge_base → src}/vision/__pycache__/__init__.cpython-37.pyc +0 -0
  630. /package/{knowledge_base → src}/vision/__pycache__/__init__.cpython-38.pyc +0 -0
  631. /package/{knowledge_base → src}/vision/__pycache__/image_describer.cpython-37.pyc +0 -0
  632. /package/{knowledge_base → src}/vision/__pycache__/image_describer.cpython-38.pyc +0 -0
package/dist/cli/index.js CHANGED
@@ -1,86 +1,670 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from "commander";
3
3
  import chalk from "chalk";
4
- import { spawn } from "child_process";
4
+ import { spawn, spawnSync, execSync } from "child_process";
5
+ import { existsSync, mkdirSync, writeFileSync, readdirSync, statSync } from "fs";
6
+ import { join, dirname } from "path";
7
+ import { fileURLToPath } from "url";
5
8
  import { setupPlatform } from "./platform.js";
9
+ const __dirname = dirname(fileURLToPath(import.meta.url));
10
+ // Project root is 2 levels up from dist/cli/
11
+ const PROJECT_ROOT = join(__dirname, "..", "..");
6
12
  const program = new Command();
7
13
  program
8
14
  .name("igel-qe")
9
15
  .description("IGEL QE Developer Experience CLI")
10
16
  .version("1.0.0");
17
+ // ── helpers ────────────────────────────────────────────────────────────────────
18
+ function getPythonBin() {
19
+ const venv = join(PROJECT_ROOT, ".venv", "bin", "python");
20
+ return existsSync(venv) ? venv : "python3";
21
+ }
22
+ function resolveRequirementsPath() {
23
+ const primary = join(PROJECT_ROOT, "requirements.txt");
24
+ if (existsSync(primary))
25
+ return primary;
26
+ const fallback = join(PROJECT_ROOT, "src", "deploy", "requirements.txt");
27
+ if (existsSync(fallback))
28
+ return fallback;
29
+ return null;
30
+ }
31
+ const EXCLUDED_DIRS = new Set([
32
+ "node_modules",
33
+ ".git",
34
+ ".github",
35
+ ".vscode",
36
+ ".venv",
37
+ "__pycache__",
38
+ "dist",
39
+ "build",
40
+ ".idea",
41
+ ".pytest_cache",
42
+ ".mypy_cache",
43
+ ".ai",
44
+ ]);
45
+ const AUTOMATION_ROOT_HINTS = [
46
+ "tests",
47
+ "test",
48
+ "specs",
49
+ "pages",
50
+ "page_objects",
51
+ "pom",
52
+ "fixtures",
53
+ "utils",
54
+ "helpers",
55
+ "utilities",
56
+ "api",
57
+ "api_clients",
58
+ "services",
59
+ "testdata",
60
+ "test_data",
61
+ "data",
62
+ "config",
63
+ "core",
64
+ "ui",
65
+ ];
66
+ function pathDepth(base, target) {
67
+ const rel = target.replace(base, "").replace(/^\//, "");
68
+ if (!rel)
69
+ return 0;
70
+ return rel.split("/").filter(Boolean).length;
71
+ }
72
+ function buildContextTemplate(workspaceRoot, dirPath) {
73
+ const rel = dirPath === workspaceRoot ? "." : dirPath.replace(`${workspaceRoot}/`, "");
74
+ return [
75
+ `# Context - ${rel}`,
76
+ "",
77
+ "## Purpose",
78
+ `Describe the responsibility of this folder (${rel}) in the automation framework.`,
79
+ "",
80
+ "## Key Assets",
81
+ "List important files, modules, fixtures, page objects, utilities, and test data here.",
82
+ "",
83
+ "## Conventions",
84
+ "Document naming patterns, coding standards, and folder-specific rules.",
85
+ "",
86
+ "## Risks and Dependencies",
87
+ "Capture external dependencies, brittle areas, and environment assumptions.",
88
+ "",
89
+ ].join("\n");
90
+ }
91
+ function detectAutomationRoots(workspaceRoot) {
92
+ const roots = [];
93
+ for (const d of AUTOMATION_ROOT_HINTS) {
94
+ const p = join(workspaceRoot, d);
95
+ if (existsSync(p)) {
96
+ try {
97
+ if (statSync(p).isDirectory())
98
+ roots.push(p);
99
+ }
100
+ catch {
101
+ // Ignore unreadable entries.
102
+ }
103
+ }
104
+ }
105
+ return roots;
106
+ }
107
+ function scaffoldFrameworkContexts(workspaceRoot) {
108
+ const written = [];
109
+ const queue = [];
110
+ // Whole framework-level context at repository root.
111
+ const rootContext = join(workspaceRoot, "context.md");
112
+ if (!existsSync(rootContext)) {
113
+ writeFileSync(rootContext, buildContextTemplate(workspaceRoot, workspaceRoot), "utf-8");
114
+ written.push(rootContext);
115
+ }
116
+ const roots = detectAutomationRoots(workspaceRoot);
117
+ for (const r of roots)
118
+ queue.push(r);
119
+ // Fallback: if no known automation roots are found, traverse top-level folders.
120
+ if (queue.length === 0) {
121
+ try {
122
+ for (const entry of readdirSync(workspaceRoot)) {
123
+ if (EXCLUDED_DIRS.has(entry) || entry.startsWith("."))
124
+ continue;
125
+ const full = join(workspaceRoot, entry);
126
+ if (existsSync(full) && statSync(full).isDirectory())
127
+ queue.push(full);
128
+ }
129
+ }
130
+ catch {
131
+ // Ignore traversal issues.
132
+ }
133
+ }
134
+ // Traverse root hints and all subfolders under them, excluding noisy/system dirs.
135
+ for (let i = 0; i < queue.length; i += 1) {
136
+ const current = queue[i];
137
+ const baseName = current.split("/").pop() || "";
138
+ if (EXCLUDED_DIRS.has(baseName) || baseName.startsWith("."))
139
+ continue;
140
+ const contextPath = join(current, "context.md");
141
+ if (!existsSync(contextPath)) {
142
+ writeFileSync(contextPath, buildContextTemplate(workspaceRoot, current), "utf-8");
143
+ written.push(contextPath);
144
+ }
145
+ try {
146
+ const entries = readdirSync(current);
147
+ for (const entry of entries) {
148
+ if (EXCLUDED_DIRS.has(entry) || entry.startsWith("."))
149
+ continue;
150
+ const full = join(current, entry);
151
+ if (!existsSync(full) || !statSync(full).isDirectory())
152
+ continue;
153
+ // Guard against excessive recursive scaffolding in very deep trees.
154
+ if (pathDepth(workspaceRoot, full) <= 8) {
155
+ queue.push(full);
156
+ }
157
+ }
158
+ }
159
+ catch {
160
+ // Ignore unreadable directories.
161
+ }
162
+ }
163
+ return written;
164
+ }
165
+ function listFrameworkContextFiles(workspaceRoot) {
166
+ const found = [];
167
+ const queue = [workspaceRoot];
168
+ while (queue.length > 0) {
169
+ const current = queue.shift();
170
+ let entries = [];
171
+ try {
172
+ entries = readdirSync(current);
173
+ }
174
+ catch {
175
+ continue;
176
+ }
177
+ for (const entry of entries) {
178
+ const full = join(current, entry);
179
+ try {
180
+ const st = statSync(full);
181
+ if (st.isDirectory()) {
182
+ if (EXCLUDED_DIRS.has(entry) || entry.startsWith("."))
183
+ continue;
184
+ queue.push(full);
185
+ continue;
186
+ }
187
+ if (st.isFile() && entry === "context.md") {
188
+ found.push(full);
189
+ }
190
+ }
191
+ catch {
192
+ // Ignore unreadable entries.
193
+ }
194
+ }
195
+ }
196
+ return Array.from(new Set(found)).sort();
197
+ }
198
+ function isCopilotCliAvailable() {
199
+ const check = spawnSync("copilot", ["--version"], { encoding: "utf-8" });
200
+ return check.status === 0;
201
+ }
202
+ function isCopilotAuthenticated(workspaceRoot) {
203
+ const probe = spawnSync("copilot", ["-C", workspaceRoot, "-p", "Reply with exactly OK.", "--allow-all-tools", "--no-color", "-s"], { encoding: "utf-8" });
204
+ return probe.status === 0;
205
+ }
206
+ function ensureCopilotLogin(workspaceRoot) {
207
+ if (!isCopilotCliAvailable())
208
+ return false;
209
+ if (isCopilotAuthenticated(workspaceRoot))
210
+ return true;
211
+ console.log(chalk.yellow(" ⚠ GitHub Copilot CLI is not authenticated."));
212
+ console.log(chalk.yellow(" → Please complete Copilot login to continue context enrichment."));
213
+ const login = spawnSync("copilot", ["login"], { stdio: "inherit", encoding: "utf-8" });
214
+ if (login.status !== 0)
215
+ return false;
216
+ return isCopilotAuthenticated(workspaceRoot);
217
+ }
218
+ function enrichWithCopilotCli(workspaceRoot, contextFiles) {
219
+ let updated = 0;
220
+ let failed = 0;
221
+ for (const absPath of contextFiles) {
222
+ const relPath = absPath.replace(`${workspaceRoot}/`, "");
223
+ const prompt = [
224
+ `Update the markdown file at path '${relPath}' in place.`,
225
+ "Goal: make it both human-understandable and LLM-ready for automation framework reasoning.",
226
+ "Requirements:",
227
+ "- Keep heading style consistent.",
228
+ "- Include: purpose, architecture role, key assets, dependencies, conventions, risks, and update guidance.",
229
+ "- Be concrete and repository-aware.",
230
+ "- Do not modify any file other than the target file.",
231
+ "- Preserve valid markdown.",
232
+ ].join("\n");
233
+ const result = spawnSync("copilot", [
234
+ "-C", workspaceRoot,
235
+ "-p", prompt,
236
+ "--allow-all-tools",
237
+ "--allow-all-paths",
238
+ "--no-color",
239
+ "-s",
240
+ ], { encoding: "utf-8" });
241
+ if (result.status === 0) {
242
+ updated += 1;
243
+ }
244
+ else {
245
+ failed += 1;
246
+ }
247
+ }
248
+ return { updated, failed };
249
+ }
250
+ const GITHUB_AGENT_FILES = {
251
+ "IGEL-QE.agent.md": `---
252
+ name: IGEL QE Orchestrator
253
+ description: Single user-facing orchestrator for IGEL QE workflows. Plans first, enforces approvals, then runs generation. IGEL OS12 only.
254
+ argument-hint: Provide the Jira issue key (for example IGEL-1234) and the requested workflow intent.
255
+ target: vscode
256
+ tools: ['mcp']
257
+ ---
258
+
259
+ You are the IGEL QE Orchestrator Agent. IGEL OS12 only. Do not reference OS11.
260
+
261
+ You are the single user-facing entrypoint. Always select and execute one of these governed flows:
262
+
263
+ 1. Test case planning
264
+ 2. Test case generation
265
+ 3. Automation planning
266
+ 4. Automation generation
267
+ 5. Explicit approval recording
268
+
269
+ Mandatory governance rules:
270
+ - Never bypass planning for generation requests.
271
+ - If a generation request arrives without required approval, stop and ask for approval first.
272
+ - Surface governance questions in batch form when the planning response includes questions.
273
+
274
+ Tool dispatch:
275
+ - Plan test cases: call \`plan_test_cases\`.
276
+ - Generate test cases: call \`generate_test_cases\`.
277
+ - Plan automation: call \`plan_automation\`.
278
+ - Generate automation: call \`generate_automation\`.
279
+ - Record approval: call \`record_approval\` with stage, decision, actor, and reason.
280
+
281
+ Output format to user:
282
+ - Selected workflow
283
+ - Governance status (approval required, approval state, questions)
284
+ - Result summary
285
+ - Any blocking reason and the exact next action
286
+ `,
287
+ };
288
+ /**
289
+ * Scaffold .github/agents/*.agent.md into the user's repo (idempotent — skips existing files).
290
+ * Content is embedded as string literals so the npm package is self-contained.
291
+ */
292
+ function scaffoldGithubAgents(targetDir) {
293
+ const agentsDir = join(targetDir, ".github", "agents");
294
+ mkdirSync(agentsDir, { recursive: true });
295
+ const written = [];
296
+ for (const [filename, content] of Object.entries(GITHUB_AGENT_FILES)) {
297
+ const filePath = join(agentsDir, filename);
298
+ if (!existsSync(filePath)) {
299
+ writeFileSync(filePath, content, "utf-8");
300
+ written.push(filePath);
301
+ }
302
+ }
303
+ return written;
304
+ }
305
+ /**
306
+ * Invoke the Python workflow_cli and return parsed JSON output.
307
+ * Rejects if the process exits non-zero or output is not valid JSON.
308
+ */
309
+ function runWorkflow(action, args) {
310
+ return new Promise((resolve, reject) => {
311
+ const py = getPythonBin();
312
+ const proc = spawn(py, ["-m", "src.cli.workflow_cli", "--action", action, "--args", JSON.stringify(args)], { cwd: PROJECT_ROOT, env: process.env, stdio: ["ignore", "pipe", "pipe"] });
313
+ let stdout = "";
314
+ let stderr = "";
315
+ proc.stdout.on("data", (d) => (stdout += d.toString()));
316
+ proc.stderr.on("data", (d) => (stderr += d.toString()));
317
+ proc.on("close", (code) => {
318
+ if (code !== 0) {
319
+ if (stderr)
320
+ process.stderr.write(chalk.gray(stderr));
321
+ return reject(new Error(`workflow_cli exited with code ${code}`));
322
+ }
323
+ try {
324
+ resolve(JSON.parse(stdout.trim()));
325
+ }
326
+ catch {
327
+ // Non-JSON output — just print it
328
+ resolve({ raw: stdout.trim() });
329
+ }
330
+ });
331
+ });
332
+ }
333
+ // ── init ───────────────────────────────────────────────────────────────────────
11
334
  program
12
335
  .command("init")
13
- .description("Bootstrap the Python AI Platform Layer")
336
+ .description("Bootstrap the IGEL QE AI Platform")
14
337
  .option("--with-copilot", "Auto-configure for GitHub Copilot in VS Code")
15
338
  .option("--with-cline", "Auto-configure for Cline")
16
- .option("--with-antigravity", "Auto-configure for Antigravity (Gemini Code Assist)")
17
339
  .option("--with-all", "Auto-configure all supported platforms")
18
340
  .action(async (options) => {
19
- console.log(chalk.blue("Initializing IGEL QE AI Platform..."));
20
- const steps = [
21
- "1. Checking Python version...",
22
- "2. Creating virtual environment...",
23
- "3. Installing Python dependencies...",
24
- "4. Verifying PostgreSQL & pgvector...",
25
- "5. Configuring MCP Server...",
26
- "6. Building initial Code Index & Asset Registry..."
27
- ];
28
- for (const step of steps) {
29
- console.log(chalk.yellow(step));
30
- // Simulate step execution for demonstration
31
- await new Promise(r => setTimeout(r, 500));
32
- console.log(chalk.green(` ✓ Done`));
33
- }
34
- console.log(chalk.bold.green("\nIGEL QE AI Platform successfully initialized!"));
35
- if (options.withCopilot || options.withAll) {
36
- await setupPlatform('copilot');
341
+ const workspaceRoot = process.cwd();
342
+ console.log(chalk.blue("\nInitializing IGEL QE AI Platform…\n"));
343
+ // Step 1 venv + pip
344
+ const venvPath = join(PROJECT_ROOT, ".venv");
345
+ if (!existsSync(venvPath)) {
346
+ console.log(chalk.yellow("1. Creating virtual environment…"));
347
+ try {
348
+ execSync(`python3 -m venv .venv`, { cwd: PROJECT_ROOT, stdio: "inherit" });
349
+ console.log(chalk.green(" ✓ venv created"));
350
+ }
351
+ catch (e) {
352
+ console.log(chalk.yellow(` ⚠ venv setup skipped: ${e instanceof Error ? e.message : String(e)}`));
353
+ }
354
+ }
355
+ else {
356
+ console.log(chalk.green("1. Virtual environment already exists "));
357
+ }
358
+ console.log(chalk.yellow("2. Installing Python dependencies…"));
359
+ const reqPath = resolveRequirementsPath();
360
+ if (!reqPath) {
361
+ console.log(chalk.yellow(" ⚠ requirements file not found; skipping Python dependency install"));
362
+ }
363
+ else {
364
+ try {
365
+ execSync(`${getPythonBin()} -m pip install -q -r \"${reqPath}\"`, {
366
+ cwd: PROJECT_ROOT, stdio: "inherit",
367
+ });
368
+ console.log(chalk.green(" ✓ Dependencies installed"));
369
+ }
370
+ catch (e) {
371
+ console.log(chalk.yellow(` ⚠ Dependency install skipped: ${e instanceof Error ? e.message : String(e)}`));
372
+ }
373
+ }
374
+ // Step 2 — scaffold .github/agents/ agent prompts in workspace
375
+ console.log(chalk.yellow("3. Scaffolding .github/agents/ prompts…"));
376
+ const written = scaffoldGithubAgents(workspaceRoot);
377
+ if (written.length > 0) {
378
+ console.log(chalk.green(` ✓ Wrote ${written.length} agent file(s)`));
379
+ }
380
+ else {
381
+ console.log(chalk.green(" ✓ .github/agents/ already up to date"));
382
+ }
383
+ // Step 2b — scaffold framework context files (root + folder + subfolder)
384
+ console.log(chalk.yellow("3b. Scaffolding framework context files…"));
385
+ const contextWritten = scaffoldFrameworkContexts(workspaceRoot);
386
+ if (contextWritten.length > 0) {
387
+ console.log(chalk.green(` ✓ Wrote ${contextWritten.length} context.md file(s)`));
388
+ }
389
+ else {
390
+ console.log(chalk.green(" ✓ Framework context files already up to date"));
391
+ }
392
+ // Step 2c — enrich framework context files via AST/dependency graph + DB sync
393
+ console.log(chalk.yellow("3c. Enriching framework context files (AST + dependency graph + DB sync)…"));
394
+ try {
395
+ const enrichResult = await runWorkflow("enrich_framework_context", {
396
+ repo_path: workspaceRoot,
397
+ });
398
+ if (typeof enrichResult.enriched_count === "number") {
399
+ console.log(chalk.green(` ✓ Enriched ${enrichResult.enriched_count} context.md file(s)`));
400
+ }
401
+ else if (enrichResult.raw) {
402
+ console.log(chalk.green(" ✓ Context enrichment completed"));
403
+ }
404
+ else {
405
+ console.log(chalk.yellow(" ⚠ Context enrichment returned no summary; continuing"));
406
+ }
407
+ }
408
+ catch (e) {
409
+ console.log(chalk.yellow(` ⚠ Context enrichment skipped: ${e instanceof Error ? e.message : String(e)}`));
410
+ }
411
+ // Step 2d — Copilot CLI enrichment pass (asks login if needed), then DB sync.
412
+ console.log(chalk.yellow("3d. Enriching context via GitHub Copilot CLI…"));
413
+ try {
414
+ const allContextFiles = listFrameworkContextFiles(workspaceRoot);
415
+ if (allContextFiles.length === 0) {
416
+ console.log(chalk.yellow(" ⚠ No context.md files found for Copilot enrichment"));
417
+ }
418
+ else if (!isCopilotCliAvailable()) {
419
+ console.log(chalk.yellow(" ⚠ Copilot CLI not installed; skipping Copilot enrichment"));
420
+ }
421
+ else if (!ensureCopilotLogin(workspaceRoot)) {
422
+ console.log(chalk.yellow(" ⚠ Copilot login was not completed; skipping Copilot enrichment"));
423
+ }
424
+ else {
425
+ const run = enrichWithCopilotCli(workspaceRoot, allContextFiles);
426
+ console.log(chalk.green(` ✓ Copilot updated ${run.updated} context.md file(s)`));
427
+ if (run.failed > 0) {
428
+ console.log(chalk.yellow(` ⚠ Copilot failed to update ${run.failed} context.md file(s)`));
429
+ }
430
+ // Persist updated file content/metadata to DB without overwriting Copilot edits.
431
+ const contextPaths = allContextFiles.map((p) => p.replace(`${workspaceRoot}/`, ""));
432
+ await runWorkflow("enrich_framework_context", {
433
+ repo_path: workspaceRoot,
434
+ context_paths: contextPaths,
435
+ persist_only: true,
436
+ });
437
+ console.log(chalk.green(" ✓ Synced Copilot-enriched context metadata to DB"));
438
+ }
439
+ }
440
+ catch (e) {
441
+ console.log(chalk.yellow(` ⚠ Copilot context enrichment skipped: ${e instanceof Error ? e.message : String(e)}`));
442
+ }
443
+ // Step 3 — write MCP config (default: Copilot when no explicit platform flags)
444
+ console.log(chalk.yellow("4. Configuring MCP server…"));
445
+ const noPlatformFlags = !options.withCopilot && !options.withCline && !options.withAll;
446
+ const useCopilot = options.withCopilot || options.withAll || noPlatformFlags;
447
+ if (useCopilot) {
448
+ await setupPlatform("copilot");
37
449
  }
38
450
  if (options.withCline || options.withAll) {
39
- await setupPlatform('cline');
451
+ await setupPlatform("cline");
40
452
  }
41
- if (options.withAntigravity || options.withAll) {
42
- await setupPlatform('antigravity');
453
+ console.log(chalk.green(" ✓ MCP configuration written"));
454
+ // Step 4 — connectivity checks (advisory by default)
455
+ console.log(chalk.yellow("5. Running pre-flight checks…"));
456
+ try {
457
+ const checkResult = await runWorkflow("init_check", {});
458
+ const checks = checkResult;
459
+ if (checks.checks) {
460
+ for (const [name, result] of Object.entries(checks.checks)) {
461
+ const icon = result.status === "ok" ? chalk.green("✓") : result.status === "warn" ? chalk.yellow("⚠") : result.status === "skipped" ? chalk.gray("-") : chalk.red("✗");
462
+ console.log(` ${icon} ${name}: ${result.message}`);
463
+ }
464
+ }
465
+ if (!checks.ready) {
466
+ console.log(chalk.yellow(` ⚠ Required runtime checks failed: ${(checks.required_failed || []).join(", ")}`));
467
+ console.log(chalk.yellow(" ⚠ Init scaffolding is complete, but generation flows may fail until runtime dependencies are configured."));
468
+ }
469
+ else {
470
+ console.log(chalk.green(" ✓ Pre-flight checks passed"));
471
+ }
472
+ if ((checks.warnings || []).length > 0) {
473
+ console.log(chalk.yellow(` ⚠ Optional integrations degraded: ${(checks.warnings || []).join(", ")}`));
474
+ }
43
475
  }
44
- console.log(`You can now use GitHub Copilot, Cline, or Antigravity to invoke MCP tools or run commands via this CLI.`);
476
+ catch (e) {
477
+ console.log(chalk.yellow(` ⚠ Pre-flight checks could not run: ${e instanceof Error ? e.message : String(e)}`));
478
+ console.log(chalk.yellow(" ⚠ Init scaffolding is complete. Configure runtime dependencies before generation."));
479
+ }
480
+ console.log(chalk.bold.green("\nIGEL QE AI Platform initialised successfully!\n"));
481
+ console.log("Run " + chalk.cyan("igel-qe status") + " to verify project state.");
45
482
  });
483
+ // ── generate ───────────────────────────────────────────────────────────────────
46
484
  program
47
- .command("sync")
48
- .description("Trigger a delta sync of the automation codebase")
49
- .option("-c, --commit <hash>", "Bitbucket commit hash to sync", "HEAD")
50
- .action((options) => {
51
- console.log(chalk.blue(`Triggering delta sync for commit: ${options.commit}...`));
52
- import('path').then(path => {
53
- import('url').then(url => {
54
- const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
55
- const projectRoot = path.join(__dirname, '..', '..', '..');
56
- const pythonProcess = spawn("python", [
57
- "-m", "knowledge_base.cli.workflow_cli",
58
- "--action", "sync_bitbucket",
59
- "--args", JSON.stringify({ commit_hash: options.commit })
60
- ], {
61
- cwd: projectRoot,
62
- env: process.env,
63
- stdio: 'inherit'
64
- });
65
- pythonProcess.on("close", (code) => {
66
- if (code === 0) {
67
- console.log(chalk.green("Sync completed successfully."));
68
- }
69
- else {
70
- console.error(chalk.red(`Sync failed with code ${code}`));
71
- }
72
- });
485
+ .command("generate")
486
+ .description("Generate test cases for a Jira issue")
487
+ .requiredOption("--jira-key <key>", "Jira issue key, e.g. IGEL-1234")
488
+ .option("--test-reqid <id>", "Optional sub-requirement id to scope generation under the Jira key")
489
+ .action(async (options) => {
490
+ console.log(chalk.blue(`\nGenerating test cases for ${options.jiraKey}…`));
491
+ try {
492
+ const result = await runWorkflow("generate_test_cases", {
493
+ jira_key: options.jiraKey,
494
+ test_reqid: options.testReqid,
73
495
  });
74
- });
496
+ if (result.error) {
497
+ console.error(chalk.red(`Error: ${result.error}`));
498
+ process.exit(1);
499
+ }
500
+ console.log(chalk.green(`\n✓ Generation complete`));
501
+ console.log(` Scenarios : ${result.scenarios_count}`);
502
+ console.log(` Total cases : ${result.total_cases}`);
503
+ console.log(` Approved cases : ${result.approved_cases}`);
504
+ if (result.plan_artifact_used)
505
+ console.log(chalk.gray(" (reused an existing plan)"));
506
+ const artifact = result.artifact;
507
+ if (artifact?.artifact_dir)
508
+ console.log(` Artifact : ${artifact.artifact_dir}`);
509
+ if (Array.isArray(result.unapproved_cases) && result.unapproved_cases.length > 0) {
510
+ console.log(chalk.yellow(` ⚠ ${result.unapproved_cases.length} test case(s) below confidence threshold — review required`));
511
+ }
512
+ }
513
+ catch (e) {
514
+ console.error(chalk.red(`Generation failed: ${e instanceof Error ? e.message : String(e)}`));
515
+ process.exit(1);
516
+ }
517
+ });
518
+ // ── feedback ───────────────────────────────────────────────────────────────────
519
+ program
520
+ .command("feedback")
521
+ .description("Submit corrective feedback on a generated artefact")
522
+ .requiredOption("--level <level>", "Feedback level: requirement, scenario, testcase, teststep")
523
+ .requiredOption("--target <id>", "Target artefact ID, e.g. TC_IGEL-1234_S01_P")
524
+ .requiredOption("--type <type>", "Feedback type: correction, rejection, enhancement, approval")
525
+ .requiredOption("--comment <text>", "Feedback comment text")
526
+ .action(async (options) => {
527
+ console.log(chalk.blue(`\nSubmitting ${options.type} feedback on ${options.target}…`));
528
+ try {
529
+ const result = await runWorkflow("submit_feedback", {
530
+ level: options.level,
531
+ target_id: options.target,
532
+ feedback_type: options.type,
533
+ user_comment: options.comment,
534
+ });
535
+ if (result.error) {
536
+ console.error(chalk.red(`Error: ${result.error}`));
537
+ process.exit(1);
538
+ }
539
+ console.log(chalk.green("✓ Feedback submitted"));
540
+ }
541
+ catch (e) {
542
+ console.error(chalk.red(`Failed: ${e instanceof Error ? e.message : String(e)}`));
543
+ process.exit(1);
544
+ }
545
+ });
546
+ // ── impact ─────────────────────────────────────────────────────────────────────
547
+ program
548
+ .command("impact")
549
+ .description("Run impact analysis for changed files")
550
+ .option("--files <paths...>", "One or more changed file paths")
551
+ .option("--commit <hash>", "Commit hash to fetch changed files from Bitbucket")
552
+ .option("--repo-path <path>", "Local repo root path")
553
+ .action(async (options) => {
554
+ if (!options.files && !options.commit) {
555
+ console.error(chalk.red("Provide either --files or --commit"));
556
+ process.exit(1);
557
+ }
558
+ console.log(chalk.blue("\nRunning impact analysis…"));
559
+ try {
560
+ let changedFiles;
561
+ if (options.files) {
562
+ changedFiles = options.files;
563
+ }
564
+ else {
565
+ const syncArgs = { commit_hash: options.commit };
566
+ if (options.repoPath)
567
+ syncArgs.repo_path = options.repoPath;
568
+ const syncResult = await runWorkflow("sync_from_commit", syncArgs);
569
+ if (syncResult.error) {
570
+ console.error(chalk.red(`Error: ${syncResult.error}`));
571
+ process.exit(1);
572
+ }
573
+ changedFiles = syncResult.changed_files || [];
574
+ }
575
+ const args = { changed_files: changedFiles };
576
+ if (options.repoPath)
577
+ args.repo_path = options.repoPath;
578
+ const result = await runWorkflow("impact_analysis", args);
579
+ if (result.error) {
580
+ console.error(chalk.red(`Error: ${result.error}`));
581
+ process.exit(1);
582
+ }
583
+ console.log(chalk.green("✓ Impact analysis complete"));
584
+ const impact = result.impact;
585
+ if (impact) {
586
+ if (impact.affected_requirements?.length) {
587
+ console.log("Affected requirements:");
588
+ impact.affected_requirements.forEach((r) => console.log(` • ${r}`));
589
+ }
590
+ if (impact.affected_scripts?.length) {
591
+ console.log("Affected scripts:");
592
+ impact.affected_scripts.forEach((s) => console.log(` • ${s}`));
593
+ }
594
+ if (impact.affected_assets?.length) {
595
+ console.log("Affected assets:");
596
+ impact.affected_assets.forEach((a) => console.log(` • ${a}`));
597
+ }
598
+ }
599
+ }
600
+ catch (e) {
601
+ console.error(chalk.red(`Failed: ${e instanceof Error ? e.message : String(e)}`));
602
+ process.exit(1);
603
+ }
604
+ });
605
+ // ── status ─────────────────────────────────────────────────────────────────────
606
+ program
607
+ .command("status")
608
+ .description("Show current project state (reads from .ai/system/ after rebuilding from DB)")
609
+ .option("--json", "Output raw JSON")
610
+ .action(async (options) => {
611
+ console.log(chalk.blue("\nFetching project status…"));
612
+ try {
613
+ const result = await runWorkflow("get_project_status", {});
614
+ if (options.json) {
615
+ console.log(JSON.stringify(result, null, 2));
616
+ }
617
+ else {
618
+ const state = result;
619
+ console.log(chalk.bold("\nProject State"));
620
+ const ps = state.project_state;
621
+ if (ps) {
622
+ console.log(` Assets : ${ps.asset_count ?? "-"}`);
623
+ console.log(` Requirements : ${ps.requirement_count ?? "-"}`);
624
+ console.log(` Test cases : ${ps.testcase_count ?? "-"}`);
625
+ console.log(` Scripts : ${ps.script_count ?? "-"}`);
626
+ }
627
+ const ss = state.sync_state;
628
+ if (ss?.connectors) {
629
+ console.log(chalk.bold("\nConnector Sync"));
630
+ ss.connectors.forEach((c) => {
631
+ const icon = c.status === "ok" ? chalk.green("✓") : chalk.yellow("⚠");
632
+ console.log(` ${icon} ${c.source}: last synced ${c.last_synced_at || "never"}`);
633
+ });
634
+ }
635
+ console.log(chalk.green("\n✓ Status complete"));
636
+ }
637
+ }
638
+ catch (e) {
639
+ console.error(chalk.red(`Failed: ${e instanceof Error ? e.message : String(e)}`));
640
+ process.exit(1);
641
+ }
642
+ });
643
+ // ── sync (legacy) ──────────────────────────────────────────────────────────────
644
+ program
645
+ .command("sync")
646
+ .description("Trigger a delta sync from a Bitbucket commit hash")
647
+ .requiredOption("-c, --commit <hash>", "Bitbucket commit hash to sync (must be a resolvable Bitbucket API commit hash, not a local git ref like HEAD)")
648
+ .action(async (options) => {
649
+ console.log(chalk.blue(`\nTriggering sync for commit: ${options.commit}…`));
650
+ try {
651
+ await runWorkflow("sync_from_commit", { commit_hash: options.commit });
652
+ console.log(chalk.green("✓ Sync completed"));
653
+ }
654
+ catch (e) {
655
+ console.error(chalk.red(`Sync failed: ${e instanceof Error ? e.message : String(e)}`));
656
+ process.exit(1);
657
+ }
75
658
  });
659
+ // ── platform sub-command ──────────────────────────────────────────────────────
76
660
  const platformCmd = program
77
661
  .command("platform")
78
662
  .description("Manage coding agent platform configurations");
79
663
  platformCmd
80
664
  .command("setup <platform>")
81
- .description("Setup an MCP configuration for a specific platform (copilot, cline)")
665
+ .description("Write MCP config for a platform (copilot, cline)")
82
666
  .action(async (platform) => {
83
- console.log(chalk.blue(`Setting up configuration for ${platform}...`));
667
+ console.log(chalk.blue(`Setting up configuration for ${platform}…`));
84
668
  await setupPlatform(platform);
85
669
  });
86
670
  program.parse();