qwen-sci 0.2.2__py3-none-any.whl

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 (549) hide show
  1. qwen_sci-0.2.2.dist-info/METADATA +492 -0
  2. qwen_sci-0.2.2.dist-info/RECORD +549 -0
  3. qwen_sci-0.2.2.dist-info/WHEEL +4 -0
  4. qwen_sci-0.2.2.dist-info/entry_points.txt +6 -0
  5. qwen_sci-0.2.2.dist-info/licenses/LICENSE +21 -0
  6. src/1.txt +1 -0
  7. src/__init__.py +1 -0
  8. src/__main__.py +5 -0
  9. src/agents/__init__.py +1 -0
  10. src/agents/experiment_design_agent/__init__.py +268 -0
  11. src/agents/experiment_design_agent/artifacts.py +747 -0
  12. src/agents/experiment_design_agent/cache.py +319 -0
  13. src/agents/experiment_design_agent/completeness.py +130 -0
  14. src/agents/experiment_design_agent/contracts.py +771 -0
  15. src/agents/experiment_design_agent/counterexample_analyzer.py +187 -0
  16. src/agents/experiment_design_agent/design_evidence_paper_screener.py +470 -0
  17. src/agents/experiment_design_agent/discipline_catalog.py +178 -0
  18. src/agents/experiment_design_agent/evidence_cards.py +338 -0
  19. src/agents/experiment_design_agent/evidence_planner.py +452 -0
  20. src/agents/experiment_design_agent/formal_reasoning_planner.py +884 -0
  21. src/agents/experiment_design_agent/fulltext_acquisition.py +863 -0
  22. src/agents/experiment_design_agent/idea_adapter.py +100 -0
  23. src/agents/experiment_design_agent/idea_intake.py +87 -0
  24. src/agents/experiment_design_agent/llm_json.py +328 -0
  25. src/agents/experiment_design_agent/orchestrator.py +1220 -0
  26. src/agents/experiment_design_agent/reasoning_context.py +183 -0
  27. src/agents/experiment_design_agent/reasoning_validation.py +546 -0
  28. src/agents/experiment_design_agent/run.py +481 -0
  29. src/agents/experiment_design_agent/run_logging.py +292 -0
  30. src/agents/experiment_design_agent/scope_gate.py +198 -0
  31. src/agents/experiment_design_agent/study_type_composer.py +1360 -0
  32. src/agents/experiment_design_agent/survey_evidence.py +1381 -0
  33. src/agents/experiment_design_agent/template_router.py +195 -0
  34. src/agents/experiment_design_agent/variable_claim_extractor.py +93 -0
  35. src/agents/idea_agent/__init__.py +1 -0
  36. src/agents/idea_agent/agent/__init__.py +6 -0
  37. src/agents/idea_agent/agent/artifacts.py +308 -0
  38. src/agents/idea_agent/agent/base.py +122 -0
  39. src/agents/idea_agent/agent/ligagent.py +488 -0
  40. src/agents/idea_agent/agent/mcts.py +2060 -0
  41. src/agents/idea_agent/agent/prompts/__init__.py +48 -0
  42. src/agents/idea_agent/agent/prompts/advanced_analysis.py +235 -0
  43. src/agents/idea_agent/agent/prompts/algorithm_alignment.py +55 -0
  44. src/agents/idea_agent/agent/prompts/algorithm_structuring.py +48 -0
  45. src/agents/idea_agent/agent/prompts/component_extraction.py +62 -0
  46. src/agents/idea_agent/agent/prompts/component_novelty_evaluation.py +54 -0
  47. src/agents/idea_agent/agent/prompts/experiment_findings_extraction.py +39 -0
  48. src/agents/idea_agent/agent/prompts/idea_fusion.py +295 -0
  49. src/agents/idea_agent/agent/prompts/idea_introduction.py +30 -0
  50. src/agents/idea_agent/agent/prompts/idea_result_alignment.py +39 -0
  51. src/agents/idea_agent/agent/prompts/input_interpreter.py +52 -0
  52. src/agents/idea_agent/agent/prompts/keynote_ops.py +78 -0
  53. src/agents/idea_agent/agent/prompts/mcts_evaluation.py +235 -0
  54. src/agents/idea_agent/agent/prompts/mcts_generation.py +140 -0
  55. src/agents/idea_agent/agent/prompts/mechanism_commit_query.py +99 -0
  56. src/agents/idea_agent/agent/prompts/memory_selection.py +0 -0
  57. src/agents/idea_agent/agent/prompts/prompt_modes.py +16 -0
  58. src/agents/idea_agent/agent/prompts/rag_query.py +34 -0
  59. src/agents/idea_agent/agent/prompts/re_analysis_replan.py +48 -0
  60. src/agents/idea_agent/agent/prompts/reference_grounding.py +34 -0
  61. src/agents/idea_agent/agent/prompts/root_domain_classification.py +32 -0
  62. src/agents/idea_agent/agent/prompts/scientific_debate.py +88 -0
  63. src/agents/idea_agent/agent/prompts/scientific_materialization.py +45 -0
  64. src/agents/idea_agent/agent/prompts/skill_instantiation.py +193 -0
  65. src/agents/idea_agent/agent/prompts/theory_transfer_query.py +93 -0
  66. src/agents/idea_agent/agent/prompts/topic_background.py +15 -0
  67. src/agents/idea_agent/agent/skills/DEFAULT_SKILL_TEMPLATES.json +263 -0
  68. src/agents/idea_agent/agent/skills/edit_operator_skills/alternative-path-contrast/SKILL.md +40 -0
  69. src/agents/idea_agent/agent/skills/edit_operator_skills/alternative-path-contrast/references/contrast_patterns.md +22 -0
  70. src/agents/idea_agent/agent/skills/edit_operator_skills/feedback-closed-loop/SKILL.md +40 -0
  71. src/agents/idea_agent/agent/skills/edit_operator_skills/feedback-closed-loop/references/mechanism_cards.md +24 -0
  72. src/agents/idea_agent/agent/skills/edit_operator_skills/hierarchical-decomposition/SKILL.md +39 -0
  73. src/agents/idea_agent/agent/skills/edit_operator_skills/hierarchical-decomposition/references/hierarchy_patterns.md +22 -0
  74. src/agents/idea_agent/agent/skills/edit_operator_skills/mechanism-commit-innovation/SKILL.md +39 -0
  75. src/agents/idea_agent/agent/skills/edit_operator_skills/mechanism-commit-innovation/references/mechanism_commit_patterns.md +24 -0
  76. src/agents/idea_agent/agent/skills/edit_operator_skills/multi-scale-coordinator/SKILL.md +39 -0
  77. src/agents/idea_agent/agent/skills/edit_operator_skills/multi-scale-coordinator/references/coordination_patterns.md +22 -0
  78. src/agents/idea_agent/agent/skills/edit_operator_skills/speculative-execution-with-repair/SKILL.md +41 -0
  79. src/agents/idea_agent/agent/skills/edit_operator_skills/speculative-execution-with-repair/references/speculation_patterns.md +22 -0
  80. src/agents/idea_agent/agent/skills/edit_operator_skills/surgical-modularity/SKILL.md +39 -0
  81. src/agents/idea_agent/agent/skills/edit_operator_skills/surgical-modularity/references/modularity_patterns.md +22 -0
  82. src/agents/idea_agent/agent/skills/edit_operator_skills/theory-transfer-injection/SKILL.md +40 -0
  83. src/agents/idea_agent/agent/skills/edit_operator_skills/theory-transfer-injection/references/transfer_patterns.md +24 -0
  84. src/agents/idea_agent/example/idea_result.json +900 -0
  85. src/agents/idea_agent/run.py +276 -0
  86. src/agents/idea_agent/tests/test_advanced_analysis_contract.py +90 -0
  87. src/agents/idea_agent/tests/test_gap_hypothesis_bridge.py +166 -0
  88. src/agents/idea_agent/tests/test_idea_debate.py +480 -0
  89. src/agents/idea_agent/tests/test_idea_result_v5.py +99 -0
  90. src/agents/idea_agent/tests/test_idea_synthesis.py +92 -0
  91. src/agents/idea_agent/tests/test_mature_idea_sources.py +27 -0
  92. src/agents/idea_agent/tests/test_multimodal_idea_integration.py +386 -0
  93. src/agents/idea_agent/tests/test_profile_materialization_and_scoring.py +219 -0
  94. src/agents/idea_agent/tests/test_profile_native_skill_rendering.py +122 -0
  95. src/agents/idea_agent/tests/test_result_persistence.py +183 -0
  96. src/agents/idea_agent/tests/test_scientific_intervention_profiles.py +241 -0
  97. src/agents/idea_agent/tests/test_scientific_rubric_and_prompts.py +559 -0
  98. src/agents/idea_agent/tests/test_strict_json_object_responses.py +48 -0
  99. src/agents/idea_agent/utils/core/__init__.py +1 -0
  100. src/agents/idea_agent/utils/core/ablation_inputs.py +60 -0
  101. src/agents/idea_agent/utils/core/chat_errors.py +95 -0
  102. src/agents/idea_agent/utils/core/chat_router.py +130 -0
  103. src/agents/idea_agent/utils/core/chat_transport.py +188 -0
  104. src/agents/idea_agent/utils/core/config_loader.py +166 -0
  105. src/agents/idea_agent/utils/core/json_utils.py +28 -0
  106. src/agents/idea_agent/utils/core/logger.py +287 -0
  107. src/agents/idea_agent/utils/core/progress.py +58 -0
  108. src/agents/idea_agent/utils/core/response_parsing.py +57 -0
  109. src/agents/idea_agent/utils/core/run_inputs.py +198 -0
  110. src/agents/idea_agent/utils/mcts/__init__.py +1 -0
  111. src/agents/idea_agent/utils/mcts/component_novelty.py +342 -0
  112. src/agents/idea_agent/utils/mcts/defect_registry.py +302 -0
  113. src/agents/idea_agent/utils/mcts/idea_routes.py +61 -0
  114. src/agents/idea_agent/utils/mcts/idea_taste_presets.py +312 -0
  115. src/agents/idea_agent/utils/mcts/mcts_helpers.py +738 -0
  116. src/agents/idea_agent/utils/mcts/mcts_runtime.py +3000 -0
  117. src/agents/idea_agent/utils/mcts/scientific_intervention_ontology.py +1561 -0
  118. src/agents/idea_agent/utils/mcts/scientific_rubric.py +211 -0
  119. src/agents/idea_agent/utils/mcts/skill_parsing.py +92 -0
  120. src/agents/idea_agent/utils/papers/__init__.py +1 -0
  121. src/agents/idea_agent/utils/papers/paper_graph_vector_store.py +499 -0
  122. src/agents/idea_agent/utils/papers/paper_repository.py +372 -0
  123. src/agents/idea_agent/utils/prompting/__init__.py +1 -0
  124. src/agents/idea_agent/utils/prompting/prompt_views.py +637 -0
  125. src/agents/idea_agent/utils/workflow/__init__.py +1 -0
  126. src/agents/idea_agent/utils/workflow/advanced_analysis_contract.py +244 -0
  127. src/agents/idea_agent/utils/workflow/gap_hypothesis_bridge.py +461 -0
  128. src/agents/idea_agent/utils/workflow/idea_contract.py +426 -0
  129. src/agents/idea_agent/utils/workflow/idea_debate.py +1238 -0
  130. src/agents/idea_agent/utils/workflow/idea_diversity.py +163 -0
  131. src/agents/idea_agent/utils/workflow/idea_fusion.py +889 -0
  132. src/agents/idea_agent/utils/workflow/idea_helpers.py +478 -0
  133. src/agents/idea_agent/utils/workflow/idea_portfolio.py +422 -0
  134. src/agents/idea_agent/utils/workflow/idea_synthesis.py +482 -0
  135. src/agents/idea_agent/utils/workflow/ligagent_flow.py +581 -0
  136. src/agents/idea_agent/utils/workflow/ligagent_handlers.py +1836 -0
  137. src/agents/idea_agent/utils/workflow/ligagent_helpers.py +1331 -0
  138. src/agents/idea_agent/utils/workflow/ligagent_utils.py +322 -0
  139. src/agents/idea_agent/utils/workflow/mature_idea_sources.py +648 -0
  140. src/agents/idea_agent/utils/workflow/multimodal_data_anchoring.py +578 -0
  141. src/agents/idea_agent/utils/workflow/result_persistence.py +774 -0
  142. src/agents/idea_agent/utils/workflow/stage_contract.py +76 -0
  143. src/agents/idea_agent/utils/workflow/workflow_runtime.py +288 -0
  144. src/agents/research_plan_author/__init__.py +50 -0
  145. src/agents/research_plan_author/artifacts.py +270 -0
  146. src/agents/research_plan_author/authoring_blueprint.py +1246 -0
  147. src/agents/research_plan_author/bibtex_renderer.py +252 -0
  148. src/agents/research_plan_author/contract_repair.py +131 -0
  149. src/agents/research_plan_author/contracts.py +745 -0
  150. src/agents/research_plan_author/cross_section_editor.py +232 -0
  151. src/agents/research_plan_author/document_quality.py +987 -0
  152. src/agents/research_plan_author/idea_evolution.py +223 -0
  153. src/agents/research_plan_author/input_loader.py +76 -0
  154. src/agents/research_plan_author/latex_compiler.py +260 -0
  155. src/agents/research_plan_author/latex_safety.py +159 -0
  156. src/agents/research_plan_author/llm_json.py +74 -0
  157. src/agents/research_plan_author/markdown_renderer.py +275 -0
  158. src/agents/research_plan_author/pdf_validator.py +149 -0
  159. src/agents/research_plan_author/render.py +166 -0
  160. src/agents/research_plan_author/render_artifacts.py +187 -0
  161. src/agents/research_plan_author/run.py +765 -0
  162. src/agents/research_plan_author/run_logging.py +209 -0
  163. src/agents/research_plan_author/section_cache.py +184 -0
  164. src/agents/research_plan_author/section_composer.py +1764 -0
  165. src/agents/research_plan_author/section_router.py +209 -0
  166. src/agents/research_plan_author/semantic_validator.py +254 -0
  167. src/agents/research_plan_author/source_bundle.py +46 -0
  168. src/agents/research_plan_author/source_registry.py +208 -0
  169. src/agents/research_plan_author/survey_source_loader.py +137 -0
  170. src/agents/research_plan_author/template_adapter.py +173 -0
  171. src/agents/research_plan_author/template_profile.py +204 -0
  172. src/agents/research_plan_author/tex_renderer.py +496 -0
  173. src/agents/research_plan_author/theory_presentation.py +134 -0
  174. src/agents/research_plan_author/theory_spine.py +703 -0
  175. src/agents/survey_agent/Dockerfile +54 -0
  176. src/agents/survey_agent/README.md +350 -0
  177. src/agents/survey_agent/config/deep_survey.yaml +217 -0
  178. src/agents/survey_agent/config/deep_survey_batch.yaml +176 -0
  179. src/agents/survey_agent/config/deep_survey_fast.yaml +183 -0
  180. src/agents/survey_agent/config/evaluate_baseline.yaml +197 -0
  181. src/agents/survey_agent/config/outcomeRAG.yaml +159 -0
  182. src/agents/survey_agent/env_report.md +348 -0
  183. src/agents/survey_agent/modules/__init__.py +0 -0
  184. src/agents/survey_agent/modules/code_collector.py +2194 -0
  185. src/agents/survey_agent/modules/code_report_generator.py +1282 -0
  186. src/agents/survey_agent/modules/data_manager.py +1713 -0
  187. src/agents/survey_agent/modules/database.py +167 -0
  188. src/agents/survey_agent/modules/fulltext_download_cache.py +462 -0
  189. src/agents/survey_agent/modules/fulltext_http.py +134 -0
  190. src/agents/survey_agent/modules/fulltext_resolution.py +749 -0
  191. src/agents/survey_agent/modules/judge.py +434 -0
  192. src/agents/survey_agent/modules/outcome_RAG.py +236 -0
  193. src/agents/survey_agent/modules/paper_graph_retriever.py +1075 -0
  194. src/agents/survey_agent/modules/pe.py +1729 -0
  195. src/agents/survey_agent/modules/pseudo_creator.py +782 -0
  196. src/agents/survey_agent/modules/pseudo_reviser.py +537 -0
  197. src/agents/survey_agent/modules/refine_agent.py +1952 -0
  198. src/agents/survey_agent/modules/survey_generator.py +5691 -0
  199. src/agents/survey_agent/modules/survey_visualizer.py +1817 -0
  200. src/agents/survey_agent/modules/visual_prompts.py +327 -0
  201. src/agents/survey_agent/modules/work_analyzer.py +2750 -0
  202. src/agents/survey_agent/modules/work_collector.py +5649 -0
  203. src/agents/survey_agent/scripts/baseline_evaluation.py +411 -0
  204. src/agents/survey_agent/scripts/run_deep_survey.py +224 -0
  205. src/agents/survey_agent/scripts/run_deep_survey_adapter.py +407 -0
  206. src/agents/survey_agent/scripts/run_deep_survey_adapter_with_input.py +409 -0
  207. src/agents/survey_agent/scripts/run_deep_survey_batch.py +228 -0
  208. src/agents/survey_agent/scripts/run_deep_survey_batch_arg.py +243 -0
  209. src/agents/survey_agent/scripts/run_deep_survey_batch_settings.py +218 -0
  210. src/agents/survey_agent/scripts/run_keynotes_gen.py +128 -0
  211. src/agents/survey_agent/scripts/run_work_clusters.py +140 -0
  212. src/agents/survey_agent/utils/__init__.py +0 -0
  213. src/agents/survey_agent/utils/ablation_utils.py +317 -0
  214. src/agents/survey_agent/utils/api_call.py +2518 -0
  215. src/agents/survey_agent/utils/chat_utils.py +82 -0
  216. src/agents/survey_agent/utils/config_utils.py +70 -0
  217. src/agents/survey_agent/utils/convert_to_md.py +29 -0
  218. src/agents/survey_agent/utils/err_info.py +24 -0
  219. src/agents/survey_agent/utils/file_utils.py +176 -0
  220. src/agents/survey_agent/utils/gpu_utils.py +145 -0
  221. src/agents/survey_agent/utils/graph_visualizer.py +279 -0
  222. src/agents/survey_agent/utils/html_utils.py +181 -0
  223. src/agents/survey_agent/utils/latex_generator_intra_cluster.py +529 -0
  224. src/agents/survey_agent/utils/latex_generator_relation_table.py +193 -0
  225. src/agents/survey_agent/utils/mineru_section_packer.py +334 -0
  226. src/agents/survey_agent/utils/mineru_utils.py +396 -0
  227. src/agents/survey_agent/utils/paper.py +144 -0
  228. src/agents/survey_agent/utils/read_yaml.py +15 -0
  229. src/agents/survey_agent/utils/repo_utils.py +167 -0
  230. src/agents/survey_agent/utils/rich_logger.py +77 -0
  231. src/agents/survey_agent/utils/step2v2.py +874 -0
  232. src/agents/survey_agent/utils/step2v2_extractor.py +856 -0
  233. src/agents/survey_agent/utils/topic_survey_storage.py +309 -0
  234. src/agents/survey_agent/utils/utils.py +118 -0
  235. src/agents/survey_agent/utils/work.py +2 -0
  236. src/cli.py +1611 -0
  237. src/config/__init__.py +213 -0
  238. src/config/default.yaml +1122 -0
  239. src/harness/LICENSE +21 -0
  240. src/harness/VENDORED.md +14 -0
  241. src/harness/src/__init__.py +0 -0
  242. src/harness/src/openharness/__init__.py +0 -0
  243. src/harness/src/openharness/__main__.py +6 -0
  244. src/harness/src/openharness/api/__init__.py +21 -0
  245. src/harness/src/openharness/api/client.py +281 -0
  246. src/harness/src/openharness/api/codex_client.py +407 -0
  247. src/harness/src/openharness/api/copilot_auth.py +240 -0
  248. src/harness/src/openharness/api/copilot_client.py +134 -0
  249. src/harness/src/openharness/api/errors.py +19 -0
  250. src/harness/src/openharness/api/openai_client.py +577 -0
  251. src/harness/src/openharness/api/provider.py +186 -0
  252. src/harness/src/openharness/api/registry.py +437 -0
  253. src/harness/src/openharness/api/usage.py +17 -0
  254. src/harness/src/openharness/auth/__init__.py +29 -0
  255. src/harness/src/openharness/auth/external.py +610 -0
  256. src/harness/src/openharness/auth/flows.py +189 -0
  257. src/harness/src/openharness/auth/manager.py +482 -0
  258. src/harness/src/openharness/auth/storage.py +269 -0
  259. src/harness/src/openharness/autopilot/__init__.py +23 -0
  260. src/harness/src/openharness/autopilot/service.py +2239 -0
  261. src/harness/src/openharness/autopilot/types.py +91 -0
  262. src/harness/src/openharness/bridge/__init__.py +20 -0
  263. src/harness/src/openharness/bridge/manager.py +106 -0
  264. src/harness/src/openharness/bridge/session_runner.py +46 -0
  265. src/harness/src/openharness/bridge/types.py +37 -0
  266. src/harness/src/openharness/bridge/work_secret.py +41 -0
  267. src/harness/src/openharness/channels/UPSTREAM +6 -0
  268. src/harness/src/openharness/channels/__init__.py +22 -0
  269. src/harness/src/openharness/channels/adapter.py +131 -0
  270. src/harness/src/openharness/channels/bus/__init__.py +6 -0
  271. src/harness/src/openharness/channels/bus/events.py +38 -0
  272. src/harness/src/openharness/channels/bus/queue.py +44 -0
  273. src/harness/src/openharness/channels/impl/__init__.py +6 -0
  274. src/harness/src/openharness/channels/impl/base.py +141 -0
  275. src/harness/src/openharness/channels/impl/dingtalk.py +445 -0
  276. src/harness/src/openharness/channels/impl/discord.py +311 -0
  277. src/harness/src/openharness/channels/impl/email.py +410 -0
  278. src/harness/src/openharness/channels/impl/feishu.py +1342 -0
  279. src/harness/src/openharness/channels/impl/manager.py +257 -0
  280. src/harness/src/openharness/channels/impl/matrix.py +700 -0
  281. src/harness/src/openharness/channels/impl/mochat.py +897 -0
  282. src/harness/src/openharness/channels/impl/qq.py +141 -0
  283. src/harness/src/openharness/channels/impl/slack.py +284 -0
  284. src/harness/src/openharness/channels/impl/telegram.py +525 -0
  285. src/harness/src/openharness/channels/impl/whatsapp.py +159 -0
  286. src/harness/src/openharness/cli.py +2551 -0
  287. src/harness/src/openharness/commands/__init__.py +21 -0
  288. src/harness/src/openharness/commands/registry.py +2783 -0
  289. src/harness/src/openharness/config/__init__.py +34 -0
  290. src/harness/src/openharness/config/paths.py +160 -0
  291. src/harness/src/openharness/config/schema.py +119 -0
  292. src/harness/src/openharness/config/settings.py +1104 -0
  293. src/harness/src/openharness/coordinator/__init__.py +12 -0
  294. src/harness/src/openharness/coordinator/agent_definitions.py +975 -0
  295. src/harness/src/openharness/coordinator/coordinator_mode.py +520 -0
  296. src/harness/src/openharness/engine/__init__.py +80 -0
  297. src/harness/src/openharness/engine/cost_tracker.py +24 -0
  298. src/harness/src/openharness/engine/messages.py +222 -0
  299. src/harness/src/openharness/engine/query.py +1188 -0
  300. src/harness/src/openharness/engine/query_engine.py +313 -0
  301. src/harness/src/openharness/engine/stream_events.py +90 -0
  302. src/harness/src/openharness/hooks/__init__.py +50 -0
  303. src/harness/src/openharness/hooks/events.py +20 -0
  304. src/harness/src/openharness/hooks/executor.py +242 -0
  305. src/harness/src/openharness/hooks/hot_reload.py +31 -0
  306. src/harness/src/openharness/hooks/loader.py +68 -0
  307. src/harness/src/openharness/hooks/schemas.py +66 -0
  308. src/harness/src/openharness/hooks/types.py +38 -0
  309. src/harness/src/openharness/keybindings/__init__.py +14 -0
  310. src/harness/src/openharness/keybindings/default_bindings.py +11 -0
  311. src/harness/src/openharness/keybindings/loader.py +22 -0
  312. src/harness/src/openharness/keybindings/parser.py +18 -0
  313. src/harness/src/openharness/keybindings/resolver.py +13 -0
  314. src/harness/src/openharness/mcp/__init__.py +79 -0
  315. src/harness/src/openharness/mcp/client.py +298 -0
  316. src/harness/src/openharness/mcp/config.py +16 -0
  317. src/harness/src/openharness/mcp/types.py +76 -0
  318. src/harness/src/openharness/memory/__init__.py +25 -0
  319. src/harness/src/openharness/memory/agent.py +91 -0
  320. src/harness/src/openharness/memory/manager.py +183 -0
  321. src/harness/src/openharness/memory/memdir.py +52 -0
  322. src/harness/src/openharness/memory/migrate.py +137 -0
  323. src/harness/src/openharness/memory/paths.py +22 -0
  324. src/harness/src/openharness/memory/relevance.py +145 -0
  325. src/harness/src/openharness/memory/scan.py +116 -0
  326. src/harness/src/openharness/memory/schema.py +443 -0
  327. src/harness/src/openharness/memory/search.py +71 -0
  328. src/harness/src/openharness/memory/team.py +90 -0
  329. src/harness/src/openharness/memory/types.py +33 -0
  330. src/harness/src/openharness/memory/usage.py +153 -0
  331. src/harness/src/openharness/output_styles/__init__.py +5 -0
  332. src/harness/src/openharness/output_styles/loader.py +42 -0
  333. src/harness/src/openharness/permissions/__init__.py +26 -0
  334. src/harness/src/openharness/permissions/checker.py +200 -0
  335. src/harness/src/openharness/permissions/modes.py +13 -0
  336. src/harness/src/openharness/personalization/__init__.py +6 -0
  337. src/harness/src/openharness/personalization/extractor.py +138 -0
  338. src/harness/src/openharness/personalization/rules.py +64 -0
  339. src/harness/src/openharness/personalization/session_hook.py +65 -0
  340. src/harness/src/openharness/platforms.py +86 -0
  341. src/harness/src/openharness/plugins/__init__.py +53 -0
  342. src/harness/src/openharness/plugins/bundled/__init__.py +0 -0
  343. src/harness/src/openharness/plugins/installer.py +39 -0
  344. src/harness/src/openharness/plugins/loader.py +730 -0
  345. src/harness/src/openharness/plugins/schemas.py +24 -0
  346. src/harness/src/openharness/plugins/types.py +59 -0
  347. src/harness/src/openharness/prompts/__init__.py +14 -0
  348. src/harness/src/openharness/prompts/claudemd.py +48 -0
  349. src/harness/src/openharness/prompts/context.py +187 -0
  350. src/harness/src/openharness/prompts/environment.py +135 -0
  351. src/harness/src/openharness/prompts/system_prompt.py +109 -0
  352. src/harness/src/openharness/sandbox/Dockerfile +6 -0
  353. src/harness/src/openharness/sandbox/__init__.py +33 -0
  354. src/harness/src/openharness/sandbox/adapter.py +148 -0
  355. src/harness/src/openharness/sandbox/docker_backend.py +232 -0
  356. src/harness/src/openharness/sandbox/docker_image.py +103 -0
  357. src/harness/src/openharness/sandbox/path_validator.py +37 -0
  358. src/harness/src/openharness/sandbox/session.py +63 -0
  359. src/harness/src/openharness/services/__init__.py +30 -0
  360. src/harness/src/openharness/services/autodream/__init__.py +34 -0
  361. src/harness/src/openharness/services/autodream/backup.py +104 -0
  362. src/harness/src/openharness/services/autodream/lock.py +138 -0
  363. src/harness/src/openharness/services/autodream/prompt.py +128 -0
  364. src/harness/src/openharness/services/autodream/service.py +313 -0
  365. src/harness/src/openharness/services/compact/__init__.py +1725 -0
  366. src/harness/src/openharness/services/cron.py +137 -0
  367. src/harness/src/openharness/services/cron_scheduler.py +595 -0
  368. src/harness/src/openharness/services/lsp/__init__.py +216 -0
  369. src/harness/src/openharness/services/memory_extract/__init__.py +261 -0
  370. src/harness/src/openharness/services/oauth/__init__.py +0 -0
  371. src/harness/src/openharness/services/session_backend.py +97 -0
  372. src/harness/src/openharness/services/session_memory/__init__.py +139 -0
  373. src/harness/src/openharness/services/session_storage.py +230 -0
  374. src/harness/src/openharness/services/token_estimation.py +15 -0
  375. src/harness/src/openharness/services/tool_outputs.py +55 -0
  376. src/harness/src/openharness/skills/__init__.py +44 -0
  377. src/harness/src/openharness/skills/_frontmatter.py +97 -0
  378. src/harness/src/openharness/skills/bundled/__init__.py +75 -0
  379. src/harness/src/openharness/skills/bundled/content/commit.md +25 -0
  380. src/harness/src/openharness/skills/bundled/content/debug.md +25 -0
  381. src/harness/src/openharness/skills/bundled/content/diagnose.md +35 -0
  382. src/harness/src/openharness/skills/bundled/content/plan.md +39 -0
  383. src/harness/src/openharness/skills/bundled/content/review.md +33 -0
  384. src/harness/src/openharness/skills/bundled/content/simplify.md +26 -0
  385. src/harness/src/openharness/skills/bundled/content/skill-creator.md +175 -0
  386. src/harness/src/openharness/skills/bundled/content/test.md +38 -0
  387. src/harness/src/openharness/skills/loader.py +229 -0
  388. src/harness/src/openharness/skills/registry.py +29 -0
  389. src/harness/src/openharness/skills/types.py +24 -0
  390. src/harness/src/openharness/state/__init__.py +6 -0
  391. src/harness/src/openharness/state/app_state.py +30 -0
  392. src/harness/src/openharness/state/store.py +40 -0
  393. src/harness/src/openharness/swarm/__init__.py +70 -0
  394. src/harness/src/openharness/swarm/in_process.py +693 -0
  395. src/harness/src/openharness/swarm/lockfile.py +24 -0
  396. src/harness/src/openharness/swarm/mailbox.py +522 -0
  397. src/harness/src/openharness/swarm/permission_sync.py +1168 -0
  398. src/harness/src/openharness/swarm/registry.py +410 -0
  399. src/harness/src/openharness/swarm/spawn_utils.py +229 -0
  400. src/harness/src/openharness/swarm/subprocess_backend.py +171 -0
  401. src/harness/src/openharness/swarm/team_lifecycle.py +910 -0
  402. src/harness/src/openharness/swarm/types.py +398 -0
  403. src/harness/src/openharness/swarm/worktree.py +315 -0
  404. src/harness/src/openharness/tasks/__init__.py +18 -0
  405. src/harness/src/openharness/tasks/local_agent_task.py +28 -0
  406. src/harness/src/openharness/tasks/local_shell_task.py +17 -0
  407. src/harness/src/openharness/tasks/manager.py +475 -0
  408. src/harness/src/openharness/tasks/stop_task.py +11 -0
  409. src/harness/src/openharness/tasks/types.py +32 -0
  410. src/harness/src/openharness/themes/__init__.py +21 -0
  411. src/harness/src/openharness/themes/builtin.py +89 -0
  412. src/harness/src/openharness/themes/loader.py +55 -0
  413. src/harness/src/openharness/themes/schema.py +54 -0
  414. src/harness/src/openharness/tools/__init__.py +107 -0
  415. src/harness/src/openharness/tools/agent_tool.py +141 -0
  416. src/harness/src/openharness/tools/ask_user_question_tool.py +46 -0
  417. src/harness/src/openharness/tools/base.py +80 -0
  418. src/harness/src/openharness/tools/bash_tool.py +259 -0
  419. src/harness/src/openharness/tools/brief_tool.py +33 -0
  420. src/harness/src/openharness/tools/config_tool.py +54 -0
  421. src/harness/src/openharness/tools/cron_create_tool.py +105 -0
  422. src/harness/src/openharness/tools/cron_delete_tool.py +32 -0
  423. src/harness/src/openharness/tools/cron_list_tool.py +69 -0
  424. src/harness/src/openharness/tools/cron_toggle_tool.py +37 -0
  425. src/harness/src/openharness/tools/enter_plan_mode_tool.py +28 -0
  426. src/harness/src/openharness/tools/enter_worktree_tool.py +80 -0
  427. src/harness/src/openharness/tools/exit_plan_mode_tool.py +28 -0
  428. src/harness/src/openharness/tools/exit_worktree_tool.py +42 -0
  429. src/harness/src/openharness/tools/file_edit_tool.py +95 -0
  430. src/harness/src/openharness/tools/file_read_tool.py +72 -0
  431. src/harness/src/openharness/tools/file_write_tool.py +87 -0
  432. src/harness/src/openharness/tools/glob_tool.py +175 -0
  433. src/harness/src/openharness/tools/grep_tool.py +374 -0
  434. src/harness/src/openharness/tools/image_generation_tool.py +447 -0
  435. src/harness/src/openharness/tools/image_to_text_tool.py +237 -0
  436. src/harness/src/openharness/tools/list_mcp_resources_tool.py +36 -0
  437. src/harness/src/openharness/tools/lsp_tool.py +154 -0
  438. src/harness/src/openharness/tools/mcp_auth_tool.py +71 -0
  439. src/harness/src/openharness/tools/mcp_tool.py +72 -0
  440. src/harness/src/openharness/tools/notebook_edit_tool.py +97 -0
  441. src/harness/src/openharness/tools/read_mcp_resource_tool.py +38 -0
  442. src/harness/src/openharness/tools/remote_trigger_tool.py +74 -0
  443. src/harness/src/openharness/tools/send_message_tool.py +58 -0
  444. src/harness/src/openharness/tools/skill_tool.py +43 -0
  445. src/harness/src/openharness/tools/sleep_tool.py +32 -0
  446. src/harness/src/openharness/tools/task_create_tool.py +56 -0
  447. src/harness/src/openharness/tools/task_get_tool.py +33 -0
  448. src/harness/src/openharness/tools/task_list_tool.py +35 -0
  449. src/harness/src/openharness/tools/task_output_tool.py +35 -0
  450. src/harness/src/openharness/tools/task_stop_tool.py +30 -0
  451. src/harness/src/openharness/tools/task_update_tool.py +50 -0
  452. src/harness/src/openharness/tools/team_create_tool.py +31 -0
  453. src/harness/src/openharness/tools/team_delete_tool.py +30 -0
  454. src/harness/src/openharness/tools/todo_write_tool.py +46 -0
  455. src/harness/src/openharness/tools/tool_search_tool.py +38 -0
  456. src/harness/src/openharness/tools/web_fetch_tool.py +117 -0
  457. src/harness/src/openharness/tools/web_search_tool.py +119 -0
  458. src/harness/src/openharness/ui/__init__.py +5 -0
  459. src/harness/src/openharness/ui/app.py +320 -0
  460. src/harness/src/openharness/ui/backend_host.py +941 -0
  461. src/harness/src/openharness/ui/coordinator_drain.py +198 -0
  462. src/harness/src/openharness/ui/input.py +32 -0
  463. src/harness/src/openharness/ui/output.py +265 -0
  464. src/harness/src/openharness/ui/permission_dialog.py +14 -0
  465. src/harness/src/openharness/ui/protocol.py +247 -0
  466. src/harness/src/openharness/ui/react_launcher.py +179 -0
  467. src/harness/src/openharness/ui/runtime.py +799 -0
  468. src/harness/src/openharness/ui/textual_app.py +495 -0
  469. src/harness/src/openharness/utils/__init__.py +0 -0
  470. src/harness/src/openharness/utils/file_lock.py +86 -0
  471. src/harness/src/openharness/utils/fs.py +98 -0
  472. src/harness/src/openharness/utils/helpers.py +77 -0
  473. src/harness/src/openharness/utils/network_guard.py +340 -0
  474. src/harness/src/openharness/utils/shell.py +147 -0
  475. src/harness/src/openharness/vim/__init__.py +5 -0
  476. src/harness/src/openharness/vim/transitions.py +8 -0
  477. src/harness/src/openharness/voice/__init__.py +7 -0
  478. src/harness/src/openharness/voice/keyterms.py +10 -0
  479. src/harness/src/openharness/voice/stream_stt.py +8 -0
  480. src/harness/src/openharness/voice/voice_mode.py +44 -0
  481. src/llm/__init__.py +29 -0
  482. src/llm/image_generation.py +402 -0
  483. src/llm/provider_registry.py +419 -0
  484. src/llm/runtime_env.py +64 -0
  485. src/llm/structured_output.py +131 -0
  486. src/llm/vision.py +198 -0
  487. src/memory/__init__.py +2 -0
  488. src/memory/api/__init__.py +1 -0
  489. src/memory/api/base_memory_system_api.py +98 -0
  490. src/memory/api/base_symbolic_memory_system_api.py +190 -0
  491. src/memory/api/base_vector_memory_system_api.py +116 -0
  492. src/memory/api/faiss_memory_system_api.py +228 -0
  493. src/memory/api/slot_process_api.py +827 -0
  494. src/memory/api/symbolic_memory_system_api.py +572 -0
  495. src/memory/memory_system/__init__.py +48 -0
  496. src/memory/memory_system/component_taxonomy.py +430 -0
  497. src/memory/memory_system/llm.py +437 -0
  498. src/memory/memory_system/models.py +168 -0
  499. src/memory/memory_system/user_prompt.py +418 -0
  500. src/memory/memory_system/utils.py +282 -0
  501. src/memory/memory_system/vectorstore.py +311 -0
  502. src/memory/memory_system/working_slot.py +99 -0
  503. src/pipeline/__init__.py +129 -0
  504. src/pipeline/contracts.py +531 -0
  505. src/pipeline/discipline_taxonomy.py +916 -0
  506. src/pipeline/evidence_coverage_ledger.py +1150 -0
  507. src/pipeline/evidence_refinement.py +620 -0
  508. src/pipeline/experiment_to_symbolic.py +137 -0
  509. src/pipeline/multimodal_evidence/__init__.py +28 -0
  510. src/pipeline/multimodal_evidence/capabilities.py +107 -0
  511. src/pipeline/multimodal_evidence/claims.py +135 -0
  512. src/pipeline/multimodal_evidence/contract.py +291 -0
  513. src/pipeline/multimodal_evidence/data_sh_compiler.py +505 -0
  514. src/pipeline/multimodal_evidence/handoff_binding.py +135 -0
  515. src/pipeline/multimodal_evidence/manifest.py +254 -0
  516. src/pipeline/multimodal_evidence/native_analysis.py +479 -0
  517. src/pipeline/multimodal_evidence/perception.py +277 -0
  518. src/pipeline/multimodal_evidence/query_binding.py +65 -0
  519. src/pipeline/multimodal_evidence/rendering.py +120 -0
  520. src/pipeline/multimodal_evidence/safety.py +42 -0
  521. src/pipeline/multimodal_evidence/sampling.py +69 -0
  522. src/pipeline/multimodal_evidence/service.py +148 -0
  523. src/pipeline/multimodal_evidence/survey_integration.py +460 -0
  524. src/pipeline/paper_identity.py +52 -0
  525. src/pipeline/research_design_inventory.py +338 -0
  526. src/pipeline/research_domain_resolution.py +669 -0
  527. src/pipeline/research_identity.py +548 -0
  528. src/pipeline/research_question_contract.py +646 -0
  529. src/pipeline/retrieval_lanes.py +889 -0
  530. src/pipeline/run_loop.py +862 -0
  531. src/pipeline/science_events.py +30 -0
  532. src/pipeline/science_manifests.py +602 -0
  533. src/pipeline/science_run.py +918 -0
  534. src/pipeline/science_stages.py +709 -0
  535. src/pipeline/science_workflow.py +807 -0
  536. src/pipeline/sh_cluster_projection.py +306 -0
  537. src/pipeline/sh_graph_provenance.py +648 -0
  538. src/pipeline/subhypothesis_decomposition.py +392 -0
  539. src/pipeline/subhypothesis_evidence.py +856 -0
  540. src/pipeline/survey_evidence_plan.py +858 -0
  541. src/pipeline/survey_gap_adjudication.py +647 -0
  542. src/pipeline/survey_gap_candidates.py +840 -0
  543. src/pipeline/survey_gap_ledger.py +683 -0
  544. src/pipeline/survey_gap_triage.py +401 -0
  545. src/pipeline/survey_handoff_persistence.py +481 -0
  546. src/pipeline/survey_handoff_projection.py +457 -0
  547. src/pipeline/survey_idea_handoff.py +1112 -0
  548. src/pipeline/survey_idea_loader.py +289 -0
  549. src/research_run_ids.py +11 -0
@@ -0,0 +1,48 @@
1
+ from src.agents.idea_agent.agent.prompts.advanced_analysis import ADVANCED_ANALYSIS_PROMPT
2
+ from src.agents.idea_agent.agent.prompts.component_novelty_evaluation import (
3
+ COMPONENT_NOVELTY_EVALUATION_PROMPT,
4
+ )
5
+ from src.agents.idea_agent.agent.prompts.mcts_evaluation import MCTS_IDEA_EVALUATION_PROMPT
6
+ from src.agents.idea_agent.agent.prompts.re_analysis_replan import RE_ANALYSIS_REPLAN_PROMPT
7
+ from src.agents.idea_agent.agent.prompts.reference_grounding import REFERENCE_GROUNDING_PROMPT
8
+ from src.agents.idea_agent.agent.prompts.algorithm_structuring import ALGORITHM_STRUCTURING_PROMPT
9
+ from src.agents.idea_agent.agent.prompts.algorithm_alignment import ALGORITHM_ALIGNMENT_PROMPT
10
+ from src.agents.idea_agent.agent.prompts.scientific_materialization import (
11
+ SCIENTIFIC_MATERIALIZATION_PROMPT,
12
+ )
13
+ from src.agents.idea_agent.agent.prompts.idea_introduction import IDEA_INTRODUCTION_PROMPT
14
+ from src.agents.idea_agent.agent.prompts.idea_fusion import IDEA_FUSION_PROMPT
15
+ from src.agents.idea_agent.agent.prompts.scientific_debate import SCIENTIFIC_DEBATE_PROMPT
16
+ from src.agents.idea_agent.agent.prompts.idea_result_alignment import IDEA_RESULT_ALIGNMENT_PROMPT
17
+ from src.agents.idea_agent.agent.prompts.keynote_ops import (
18
+ KEYNOTE_GROUP_SUMMARY_PROMPT,
19
+ KEYNOTE_SCORING_PROMPT,
20
+ KEYNOTE_SINGLE_COMPRESSION_PROMPT,
21
+ )
22
+ from src.agents.idea_agent.agent.prompts.experiment_findings_extraction import (
23
+ EXPERIMENT_FINDINGS_EXTRACTION_PROMPT,
24
+ )
25
+ from src.agents.idea_agent.agent.prompts.topic_background import TOPIC_BACKGROUND_PROMPT
26
+ from src.agents.idea_agent.agent.prompts.rag_query import RAG_QUERY_PROMPT
27
+
28
+
29
+ PROMPTS = {
30
+ "advanced_analysis": ADVANCED_ANALYSIS_PROMPT,
31
+ "component_novelty_evaluation": COMPONENT_NOVELTY_EVALUATION_PROMPT,
32
+ "mcts_evaluation": MCTS_IDEA_EVALUATION_PROMPT,
33
+ "re_analysis_replan": RE_ANALYSIS_REPLAN_PROMPT,
34
+ "reference_grounding": REFERENCE_GROUNDING_PROMPT,
35
+ "algorithm_structuring": ALGORITHM_STRUCTURING_PROMPT,
36
+ "algorithm_alignment": ALGORITHM_ALIGNMENT_PROMPT,
37
+ "scientific_materialization": SCIENTIFIC_MATERIALIZATION_PROMPT,
38
+ "idea_introduction": IDEA_INTRODUCTION_PROMPT,
39
+ "idea_fusion": IDEA_FUSION_PROMPT,
40
+ "scientific_debate": SCIENTIFIC_DEBATE_PROMPT,
41
+ "idea_result_alignment": IDEA_RESULT_ALIGNMENT_PROMPT,
42
+ "keynote_group_summary": KEYNOTE_GROUP_SUMMARY_PROMPT,
43
+ "keynote_scoring": KEYNOTE_SCORING_PROMPT,
44
+ "keynote_single_compression": KEYNOTE_SINGLE_COMPRESSION_PROMPT,
45
+ "experiment_findings_extraction": EXPERIMENT_FINDINGS_EXTRACTION_PROMPT,
46
+ "topic_background": TOPIC_BACKGROUND_PROMPT,
47
+ "rag_query": RAG_QUERY_PROMPT,
48
+ }
@@ -0,0 +1,235 @@
1
+ ADVANCED_ANALYSIS_PROMPT_SURVEY_LED_WITH_PAPERS = """
2
+ You are the lead author preparing an top-tier paper on the topic "{topic}".
3
+
4
+ == Mature idea (optional; if empty, ignore) ==
5
+ {mature_idea}
6
+
7
+ == Mature idea source ==
8
+ {mature_idea_source}
9
+
10
+ == Refinement scope (optional; if empty, ignore) ==
11
+ {refinement_scope}
12
+
13
+ == Refinement scope source ==
14
+ {refinement_scope_source}
15
+
16
+ You have:
17
+ (1) Survey contents (PRIMARY source of problem framing, clusters, and gaps):
18
+ {survey_contents}
19
+
20
+ (2) Curated cited-paper capsules derived from survey keynotes (SECONDARY source; use for evidence, baselines, feasibility details, and concrete instantiations ONLY):
21
+ {papers}
22
+
23
+ (3) Experiment findings extracted from raw ablation results (OPTIONAL; use only if present):
24
+ {experiment_findings}
25
+
26
+ Core principle (must follow):
27
+ - Survey drives the agenda: method clusters + unresolved mechanism bottlenecks + evaluation blind spots MUST be derived from survey_contents.
28
+ - Cited-paper capsules may refine or substantiate the survey-derived bottlenecks and gaps, but MUST NOT redefine the agenda or introduce a new main axis not present in the survey framing.
29
+ - This stage is a 1.0 -> 1.1 calibrator, NOT a 2.0 invention stage. Diagnose, constrain, and lightly refine the current idea; leave major novelty jumps to MCTS.
30
+ - If mature_idea is provided and mature_idea_source is `config_explicit` or `input_explicit`, keep the same topic, core hypothesis, and primary mechanism axis. Only make localized corrections, clarifications, or feasibility-driven adjustments.
31
+ - If mature_idea_source is `input_inferred` or `empty`, treat the current mature_idea as provisional. You may rewrite it into a more grounded mature idea as long as you stay on the same overall direction suggested by the input and survey.
32
+ - If refinement_scope is provided, treat it as a hard edit boundary. Keep repairs inside that scope and do not move the proposal's novelty to another subsystem or layer.
33
+ - If refinement_scope_source is `input_inferred` or `empty`, you may sharpen or generate a clearer grounded refinement_scope from the survey and papers.
34
+ - If experiment findings are present, use them as failure evidence, feasibility evidence, and mechanism constraints. They may invalidate a weak component or suggest a local replacement, but they MUST NOT trigger a paradigm shift.
35
+ - Prioritize mechanism bottlenecks over evaluation tooling. Evaluation blind spots are secondary unless they expose a missing mechanism that blocks a credible root idea.
36
+ - Do NOT directly introduce a new primary mechanism family. First identify which part of the current idea is weak, underspecified, brittle, or unsupported, then propose the smallest mechanism patch that repairs that limitation while preserving the original thesis.
37
+ - Do NOT default to gate/router/controller/monitor style patches just because they are easy local edits. Prefer sharpening an existing update rule, objective, representation, write policy, consolidation rule, or training contract already implicit in the current idea.
38
+ - A new gate/threshold/router is allowed only when the mature_idea already centers that decision surface and the patch merely calibrates or simplifies it. Otherwise, treat gate-like control logic as a likely sign of drift away from the original idea.
39
+ - If no clearly valuable mechanism-level local patch exists, preserve the current mature_idea instead of inventing a gate/router/controller/threshold/budget fix.
40
+ - If the only available local change mainly improves explainability, diagnosability, observability, auditing, monitoring, or validation tooling, preserve the current mature_idea instead of elevating that safe repair into the main contribution.
41
+ - If the current mature_idea is training-free or inference-time only, preserve that character when possible. Do NOT introduce a new training stage, trainable controller, auxiliary loss, fine-tuning loop, or learned module unless it is indispensable and central to repairing the identified limitation.
42
+ - For training-free ideas, prefer rule-level, objective-free, or inference-time repairs first. If you newly introduce training, explicitly justify why a training-free patch is insufficient.
43
+ - If no convincing local repair exists within refinement_scope, preserve the current mature_idea instead of escaping that scope.
44
+
45
+ Perform the steps below explicitly before answering:
46
+ 1) Survey-led clustering:
47
+ Map the dominant method clusters mentioned in the survey. For each cluster, summarize:
48
+ - assumptions
49
+ - supervision/training signals
50
+ - implementation constraints or operating assumptions (as described or implied by the survey)
51
+ Cited-paper capsules can be used only to add concrete examples, representative baselines, or implementation constraints for clusters already defined by the survey.
52
+
53
+ 2) Mechanism bottleneck stress test (survey is the ground truth for "what is missing"):
54
+ Extract unresolved mechanism-level limitations from the survey first, then list any evaluation blind spots that prevent those limitations from being measured cleanly.
55
+ You MAY use cited-paper capsules to corroborate a bottleneck (e.g., show multiple methods still exhibit the limitation), but you MUST keep the bottleneck statement aligned with survey framing.
56
+ Do NOT let an evaluation gap become the main novelty unless it directly reveals a missing mechanism on the current method axis.
57
+
58
+ 3) Conservative root calibration:
59
+ Produce a search-ready root idea that directly targets the extracted SURVEY mechanism bottlenecks while staying close to the current mature_idea when one is provided.
60
+ The root idea should be a minimal but meaningful refinement:
61
+ - read like a v1.1 update of the current idea, not a replacement idea,
62
+ - preserve the same main method axis,
63
+ - keep most of the existing structure if it is still defensible,
64
+ - explicitly identify which existing component/assumption/objective is weak and what local patch fixes it,
65
+ - prefer repairing an existing rule or mechanism already present in the idea over adding a new gating or routing layer,
66
+ - if the only available delta is easier explanation, diagnosis, monitoring, budgeting, or validation, keep the mature_idea unchanged instead of turning that safe repair into the new thesis,
67
+ - if the current idea is training-free, prefer training-free local repairs over introducing new optimization or fine-tuning machinery,
68
+ - only adjust components/objectives/protocols that are weak, unsupported, or contradicted by experiment findings,
69
+ - use evaluation gaps only as evidence for what must be measured to validate the mechanism patch, not as the main proposal.
70
+
71
+ 4) Validation tooling:
72
+ Specify what experiments/protocols/tools are required to validate the calibrated root idea credibly.
73
+ Evaluation ideas are allowed only if they are tightly coupled to proving the proposed mechanism patch.
74
+ Do not let the validation protocol become the primary contribution.
75
+
76
+ Return STRICT JSON (no prose, no Markdown) with the schema:
77
+ {{
78
+ "key_methods": ["..."], // survey-led cluster names or dominant families
79
+ "field_consensus": ["..."], // constraints / assumptions / consensus points the new idea should respect
80
+ "existing_problems": ["..."], // survey-led mechanism or structural limitations (primary driver of root_idea)
81
+ "evaluation_gaps": [
82
+ {{
83
+ "gap": "concise description of a measurement blind spot (MUST originate from survey_contents)",
84
+ "why_it_matters": "impact on validating the mechanism bottleneck or proposed patch",
85
+ "validation_expectation": "what the validation setup must include to measure that mechanism credibly"
86
+ }}
87
+ ],
88
+ "future_directions": ["..."], // incremental but useful; must still be anchored in survey
89
+ "preserve_current_idea": {{
90
+ "keep_original": false,
91
+ "reason": "empty unless no convincing valuable mechanism-level local patch exists and the mature_idea should be preserved"
92
+ }},
93
+ "mature_ideas": [
94
+ {{
95
+ "idea_id": "stable identifier",
96
+ "title": "independent mature idea title",
97
+ "hypothesis": "central hypothesis",
98
+ "scientific_object": "object or process",
99
+ "mechanism": "causal or formal mechanism",
100
+ "assumptions": ["..."],
101
+ "evidence_basis": ["SURVEY_ANCHOR: ..."],
102
+ "target_gap_ids": ["gap id when available"],
103
+ "refinement_scope": "allowed refinement boundary",
104
+ "falsifier": "result that would refute the idea",
105
+ "counterexamples": ["relevant counterexample or negative evidence"],
106
+ "retrieval_queries": ["idea-specific retrieval query"],
107
+ "mechanism_chain": ["object -> mechanism -> observable consequence"],
108
+ "validation_targets": ["testable target"],
109
+ "anchor_policy": "scoped_survey_anchor|reframe_without_default_problem_anchor",
110
+ "maturity_status": "mature|provisional",
111
+ "idea_source": "user_input|survey_gap|prior_candidate|experiment_feedback|problem_reframing|adversarial_generation|cross_domain_transfer",
112
+ "lineage": "where this idea came from",
113
+ "independence_rationale": "structural difference from other mature ideas"
114
+ }}
115
+ ],
116
+ "grounded_mature_idea": "3-6 sentences; if mature_idea is empty or provisional, provide a grounded mature idea derived from the survey/papers; otherwise return empty or a minimally clarified restatement",
117
+ "grounded_refinement_scope": "1-3 sentences; if refinement_scope is empty or provisional, provide a crisp edit boundary that matches the grounded mature idea; otherwise return empty or a minimally clarified restatement",
118
+ "root_idea": {{
119
+ "title": "one calibrated root idea title",
120
+ "abstract": "one concrete root idea abstract; should read like a refined v1.1 version of the current idea when mature_idea is provided",
121
+ "core_contribution": "main mechanism-level claim; keep it close to the current idea and express the smallest meaningful repair unless evidence forces a local correction. Prefer a repaired rule/objective/update contract over a new gate/router/controller",
122
+ "method": "specific method sketch with modules/objective/training contract; prefer local edits over new paradigms, state which original limitation is being repaired, avoid introducing a fresh gate/router/controller unless the mature idea already depends on one, and keep training-free ideas training-free unless new training is truly necessary",
123
+ "risks": "main scientific/engineering risks",
124
+ "target_defects": ["..."],
125
+ "rationale": "why this is the best calibrated 1.1 starting point from the extracted survey mechanism bottlenecks",
126
+ "supporting_papers": ["SURVEY_ANCHOR:...", "PAPER_ANCHOR:..."]
127
+ }},
128
+ "divergent_idea_seeds": [
129
+ {{
130
+ "title": "short memorable name",
131
+ "hypothesis": "small neighboring alternative only if useful",
132
+ "why_it_is_not_incremental": "leave empty or describe only a local contrast",
133
+ "method_sketch": "near-neighbor mechanism patch, not a new paradigm",
134
+ "evaluation_plan": "protocol/stress-test to validate the patch",
135
+ "risk": "dominant scientific or engineering risk",
136
+ "supporting_papers": ["SURVEY_ANCHOR:...", "PAPER_ANCHOR:..."]
137
+ }}
138
+ ],
139
+ "cross_domain_inspiration": [
140
+ {{
141
+ "source_field": "e.g., control theory, neuroscience",
142
+ "transferable_mechanism": "what we borrow only if it can be expressed as a local patch",
143
+ "application_hook": "explicit mapping: which survey bottleneck/cluster it improves and how without changing the main method axis"
144
+ }}
145
+ ],
146
+ "tldr": "≤50 word synthesis tying SURVEY mechanism bottlenecks to the calibrated 1.1 root idea"
147
+ }}
148
+
149
+ == Rules (Strict) ==
150
+ - Always output exactly one `root_idea`; it must be concrete enough to act as the MCTS root node.
151
+ - `root_idea` must directly address at least one named `existing_problems`; it may also respond to `evaluation_gaps`, but evaluation gaps should usually support validation rather than define the main novelty.
152
+ - If `mature_idea` is provided, `root_idea` should usually be a minimally revised version of it, not a new paradigm.
153
+ - If `refinement_scope` is provided, `root_idea` must stay inside that scope. Do not relocate the novelty to a different subsystem just because it seems easier to improve.
154
+ - Preserve the same primary method axis unless experiment findings clearly invalidate a local component; even then, prefer local replacement over architecture reset.
155
+ - `root_idea` should explicitly read as a small-version improvement of the current idea. It should say what limitation in the current idea is being repaired and should avoid introducing a fresh unrelated mechanism as the new center of gravity.
156
+ - If the current idea does not already revolve around gating/routing/control logic, do not introduce a new gate, router, controller, monitor, or threshold policy as the main repair. Prefer expressing the patch as a correction to the existing mechanism itself.
157
+ - If the only available "small fix" would be a gate/router/controller/threshold/budget wrapper, or a patch whose main value is explainability, diagnosability, observability, auditing, monitoring, or validation tooling, set `preserve_current_idea.keep_original=true` and keep `root_idea` as a faithful restatement of the current mature_idea rather than inventing a weak patch.
158
+ - When `preserve_current_idea.keep_original=true`, do not introduce any new mechanism term into `root_idea`; explain in `preserve_current_idea.reason` why the original idea is being kept unchanged.
159
+ - If the current mature idea is training-free, do not add a new training stage, learned controller, auxiliary loss, or fine-tuning loop unless it is clearly indispensable. If such a training shift is not strongly justified, prefer preserving the original idea or making a training-free local repair instead.
160
+ - Every divergent_idea_seed MUST:
161
+ (a) cite at least one SURVEY_ANCHOR and name which existing_problems it addresses; mention evaluation_gaps only when they affect validation,
162
+ (b) propose a concrete local mechanism patch, not just instrumentation,
163
+ (c) keep the main axis consistent with survey framing and close to the current idea,
164
+ (d) remain a small contrastive variant rather than a replacement proposal.
165
+ - `divergent_idea_seeds` are optional supporting alternatives; return 0-1 only if they help contrast the chosen `root_idea`.
166
+ - `mature_ideas` may contain multiple structurally independent mature seeds. Do not create title-only variants; distinguish object, assumptions, mechanism, intervention, representation, target gaps, or falsifier.
167
+ - Mature ideas may come from `user_input`, `survey_gap`, `prior_candidate`, `experiment_feedback`, `problem_reframing`, `adversarial_generation`, or `cross_domain_transfer`; preserve the exact source and a structured lineage record for each mature idea. Do not collapse these sources into generic `survey`, `history`, or `generated` labels.
168
+ - Keep problem-reframing or adversarial records as formal exploratory/provisional ideas when they challenge the default problem definition; do not discard them solely for lower feasibility.
169
+ - Papers may contribute:
170
+ - representative baselines and fair comparison protocol details,
171
+ - feasibility constraints (latency/memory/compute),
172
+ - evidence that a survey bottleneck or gap persists across recent works.
173
+ Cited-paper capsules may NOT contribute:
174
+ - a new main problem statement that is absent from survey,
175
+ - a new core mechanism term as the central novelty unless it is only a local substitute for a weak component.
176
+ - Evaluation gaps alone should not define the root idea unless they expose a concrete missing mechanism that the root idea patches.
177
+ - If survey_contents lacks explicit anchors, create anchors by quoting a short distinctive phrase from the survey and prefix it with "SURVEY_QUOTE:".
178
+ - Keep the JSON valid and free of commentary.
179
+ """
180
+
181
+ # Backward-compatible alias expected by prompt registry/imports.
182
+ ADVANCED_ANALYSIS_PROMPT = ADVANCED_ANALYSIS_PROMPT_SURVEY_LED_WITH_PAPERS
183
+
184
+
185
+ def render_advanced_analysis_prompt(prompt: str, profile_id: str | None = None) -> str:
186
+ """Keep the pre-MCTS survey analysis in the selected scientific vocabulary."""
187
+
188
+ if str(profile_id or "").strip().lower() == "computational_algorithmic":
189
+ return prompt
190
+ replacements = {
191
+ "method clusters + unresolved mechanism bottlenecks + evaluation blind spots": "scientific object/process clusters + unresolved mechanism bottlenecks + evidence blind spots",
192
+ "supervision/training signals": "evidence, observations, or operating conditions",
193
+ "implementation constraints or operating assumptions": "implementation, intervention, measurement, or operating assumptions",
194
+ "gate/router/controller/monitor style patches": "generic wrapper or decision-layer patches",
195
+ "gate/router/controller/monitor": "generic wrapper or decision-layer",
196
+ "gate/router/controller": "generic decision layer",
197
+ "gate/threshold/router": "generic decision layer",
198
+ "gate-like control logic": "generic decision logic",
199
+ "threshold/budget": "decision-layer/resource",
200
+ "gating/routing/control logic": "generic decision logic",
201
+ "gate, router, controller, monitor, or threshold": "generic decision or audit layer",
202
+ "threshold policy": "decision policy",
203
+ "trainable controller": "fitted or control layer",
204
+ "auxiliary loss": "auxiliary fitting criterion",
205
+ "learned module": "fitted component",
206
+ "fine-tuning": "additional optimization",
207
+ "fine tuning": "additional optimization",
208
+ "representation": "scientific object description",
209
+ "task-solving mechanism": "scientific mechanism",
210
+ "update rule, objective, representation, or training contract": "process rule, causal relation, measurement construct, assumption, or evidence contract",
211
+ "objective, representation, update contract, or training contract": "process rule, causal relation, measurement construct, assumption, or evidence contract",
212
+ "objective, representation, or training contract": "process rule, causal relation, measurement construct, or evidence contract",
213
+ "new training stage, trainable controller, auxiliary loss, fine-tuning loop, or learned module": "unrelated optimization stage, control wrapper, or auxiliary computational layer",
214
+ "training-free or inference-time": "non-learning, observation-only, or intervention-only",
215
+ "training-free": "non-learning",
216
+ "optimization or calibration-free": "non-learning",
217
+ "training-free ideas": "non-learning or intervention-only ideas",
218
+ "training-free local repairs": "profile-native local repairs",
219
+ "modules/objective/training contract": "objects/processes/relations/evidence contract",
220
+ "modules/objective/update contract": "objects/processes/relations/evidence contract",
221
+ "modules/objective": "objects/processes/relations",
222
+ "learned controller": "generic control wrapper",
223
+ "fine-tuning machinery": "unrelated optimization machinery",
224
+ "representation change": "object or relation change",
225
+ "update rule": "process or causal rule",
226
+ "training contract": "evidence contract",
227
+ "training signals": "evidence or operating signals",
228
+ "training": "optimization or calibration",
229
+ "supervision": "evidence or observation",
230
+ "modules": "scientific objects",
231
+ "objective": "claim or process target",
232
+ }
233
+ for source, target in replacements.items():
234
+ prompt = prompt.replace(source, target)
235
+ return prompt
@@ -0,0 +1,55 @@
1
+ ALGORITHM_ALIGNMENT_PROMPT = """
2
+ You are a research alignment editor. A single idea (title + abstract) is implemented by several algorithm specs, but some may drift away from the idea. Rewrite the algorithms so every entry clearly supports the given idea, removing anything that cannot be justified.
3
+
4
+ == Idea Title ==
5
+ {idea_title}
6
+
7
+ == Idea Abstract ==
8
+ {idea_abstract}
9
+
10
+ == Idea Method ==
11
+ {idea_method}
12
+
13
+ == Exact Components ==
14
+ {components}
15
+
16
+ == Component Explanations ==
17
+ {component_explanations}
18
+
19
+ == Candidate Algorithms ==
20
+ {algorithms}
21
+
22
+ == Requirements ==
23
+ - The top-level JSON value MUST be an object, never a raw array.
24
+ - Even if only one algorithm remains, still return `{{"algorithms": [ ... ]}}`.
25
+ - Do NOT return `[{{...}}]` at the top level.
26
+ - Maintain the schema exactly: each algorithm has "name", "input", "output", "pipeline".
27
+ - Edit minimally. Preserve concrete operations and structure when already aligned.
28
+ - Do NOT rewrite detailed steps into higher-level summaries, overviews, or motivation prose.
29
+ - `input`, `output`, and `pipeline` must remain arrays of strings, not arrays of objects.
30
+ - `pipeline[*]` must keep the `Step k:` form.
31
+ - Whenever a pipeline step or input references an existing module, use the exact component names copied from `components`.
32
+ - The final algorithm must read as a standalone specification for THIS idea only. Assume the downstream experiment agent can see only this idea.
33
+ - Remove any mention of other ideas, alternative candidates, sibling modes, source modes, fusion, host idea, parent idea, rejected components, or comparisons against other ideas.
34
+ - You may repair, merge, or drop entries, but only if needed to align them with the idea title, abstract, and method.
35
+ - If you keep multiple algorithms, ensure each pipeline explicitly references the mechanisms and exact components in the method.
36
+ - No commentary outside the JSON.
37
+
38
+ Return JSON:
39
+ {{
40
+ "algorithms": [
41
+ {{
42
+ "name": "...",
43
+ "input": [
44
+ "concrete input description"
45
+ ],
46
+ "output": [
47
+ "concrete output description"
48
+ ],
49
+ "pipeline": [
50
+ "Step 1: concrete execution action using exact component names"
51
+ ]
52
+ }}
53
+ ]
54
+ }}
55
+ """
@@ -0,0 +1,48 @@
1
+ ALGORITHM_STRUCTURING_PROMPT = """
2
+ You are an expert algorithm architect. Your task is to translate an abstract research idea into a rigorous, executable algorithm specification.
3
+
4
+ == Topic ==
5
+ {topic}
6
+
7
+ == Idea Title ==
8
+ {idea_title}
9
+
10
+ == Idea Abstract ==
11
+ {idea_abstract}
12
+
13
+ == Compact Idea JSON ==
14
+ {idea}
15
+
16
+ Return ONLY a valid JSON object matching this schema exactly:
17
+ {{
18
+ "algorithms": [
19
+ {{
20
+ "name": "Concise algorithm name (<8 words)",
21
+ "input": [
22
+ "concrete input description"
23
+ ],
24
+ "output": [
25
+ "concrete output description"
26
+ ],
27
+ "pipeline": [
28
+ "Step 1: concrete execution action using exact component names"
29
+ ]
30
+ }}
31
+ ]
32
+ }}
33
+
34
+ == Rules (Strict) ==
35
+ - The top-level JSON value MUST be an object, never a raw array.
36
+ - Even if there is only one algorithm, still return `{{"algorithms": [ ... ]}}`.
37
+ - Do NOT return `[{{...}}]` at the top level.
38
+ - `input`, `output`, and `pipeline` must each be arrays of strings, not arrays of objects.
39
+ - Use ONLY exact component names copied from `components` whenever an input line or pipeline step touches an existing module.
40
+ - Every `pipeline` item must start with `Step k:` and describe one concrete execution step, not an overview, heading, or prose summary.
41
+ - Each pipeline step should explicitly name the exact components it uses and the concrete state, signal, or artifact it produces.
42
+ - Write the algorithm as a standalone specification for THIS idea only. Assume the downstream experiment agent can see only this idea.
43
+ - Do NOT mention other ideas, alternative candidates, sibling modes, source modes, fusion, host idea, parent idea, rejected components, or comparisons against other ideas anywhere in `name`, `input`, `output`, or `pipeline`.
44
+ - NO MAGIC WORDS: do not write vague summaries like 'integrate the system' or 'optimize performance'. Write the actual mechanism.
45
+ - Keep inputs/outputs concrete (e.g., `slot_records` instead of `data`).
46
+ - If multiple distinct sub-algorithms are needed to realize the idea, include each as its own entry in the `algorithms` array.
47
+ - Do not add any markdown formatting (like ```json) or commentary outside the JSON object.
48
+ """
@@ -0,0 +1,62 @@
1
+ COMPONENT_EXTRACTION_PROMPT = """
2
+ You are an expert research scientist. Given a mature research idea and a fixed scientific intervention profile, extract its key domain-native research components.
3
+
4
+ Each component should be a concise name (2-5 words, snake_case) representing a distinct scientific object, mechanism, intervention, process, relation, measurement, proof object, data step, or evaluation protocol described in the idea.
5
+
6
+ == Mature Idea ==
7
+ {mature_idea}
8
+
9
+ == Topic ==
10
+ {topic}
11
+
12
+ == Fixed scientific intervention profile ==
13
+ {scientific_intervention_profile}
14
+
15
+ == Previous idea component inventory (reuse these exact names whenever the revised idea still contains the same component role) ==
16
+ {prior_components}
17
+
18
+ == Latest component decisions from re_analysis_replan ==
19
+ {component_decisions}
20
+
21
+ Return STRICT JSON (no Markdown wrapping):
22
+ {{
23
+ "components": ["component_name_1", "component_name_2", ...],
24
+ "component_explanations": {{
25
+ "component_name_1": "Short explanation of the role this component plays in the idea.",
26
+ "component_name_2": "Short explanation of the role this component plays in the idea."
27
+ }}
28
+ }}
29
+
30
+ == Rules (Strict) ==
31
+ - Extract at least 1 and at most 5 components.
32
+ - Each component must be a distinct, non-overlapping part of the idea's scientific object, intervention, mechanism, or methodology.
33
+ - Use short, descriptive snake_case names. Examples are profile-native roles such as "controllable_process", "causal_mediator", "measurement_endpoint", or "proof_obligation"; choose concrete names from the idea rather than copying these examples.
34
+ - Do NOT include generic placeholders such as "unnamed_object" or "generic_process" — be specific to this idea.
35
+ - Do not invent profile objects merely because the discipline is unresolved; use the selected profile's object, intervention, mechanism, observable, comparator, and boundary roles instead.
36
+ - If the revised mature idea keeps or strengthens a prior component, reuse the exact prior component name instead of inventing a synonym.
37
+ - Component explanations may change; name reuse matters more than explanation reuse.
38
+ - If a component is genuinely replaced with a different mechanism, create a new name only when the functional role has materially changed.
39
+ - Prefer the smallest stable rename set: reuse old names wherever reasonable, introduce new names only for genuinely new components.
40
+ - Order objects by their importance to the central claim (most claim-critical first).
41
+ """
42
+
43
+
44
+ def render_component_extraction_prompt(profile_id: str = "") -> str:
45
+ """Render extraction wording without computational vocabulary for non-CS profiles."""
46
+
47
+ prompt = COMPONENT_EXTRACTION_PROMPT
48
+ if str(profile_id or "").strip().lower() == "computational_algorithmic":
49
+ return prompt
50
+ replacements = {
51
+ "Each component should be a concise name": "Each scientific object should be a concise name",
52
+ "Previous idea component inventory (reuse these exact names whenever the revised idea still contains the same component role)": "Previous scientific-object inventory (reuse these exact names whenever the revised idea still contains the same role)",
53
+ '"components": ["component_name_1", "component_name_2", ...],': '"components": ["scientific_object_1", "scientific_object_2", ...],',
54
+ "Each component must be a distinct, non-overlapping part": "Each scientific object must be a distinct, non-overlapping part",
55
+ "If a component is genuinely replaced with a different mechanism, create a new name": "If a scientific object is genuinely replaced with a different mechanism, create a new name",
56
+ "If the revised mature idea keeps or strengthens a prior component, reuse the exact prior component name": "If the revised mature idea keeps or strengthens a prior scientific object, reuse the exact prior name",
57
+ "Component explanations may change; name reuse matters more than explanation reuse.": "Scientific-object explanations may change; name reuse matters more than explanation reuse.",
58
+ "Prefer the smallest stable rename set": "Prefer the smallest stable scientific-object rename set",
59
+ }
60
+ for source, target in replacements.items():
61
+ prompt = prompt.replace(source, target)
62
+ return prompt
@@ -0,0 +1,54 @@
1
+ COMPONENT_NOVELTY_EVALUATION_PROMPT = """
2
+ You are a strictly objective novelty evaluator for a research idea during an MCTS search process.
3
+
4
+ == Topic ==
5
+ {topic}
6
+
7
+ == Scientific novelty profile ==
8
+ Profile: {profile_id}
9
+ Novelty axes: {novelty_axes}
10
+
11
+ == Candidate idea state (JSON) ==
12
+ {idea_state}
13
+
14
+ == Component explanations used as semantic queries ==
15
+ {components_with_explanations}
16
+
17
+ == Nearest paper-graph evidence nodes ==
18
+ These are the most frequently retrieved core nodes after running top-{retrieval_top_k} component-summary semantic search for EACH component explanation.
19
+ Treat them as the closest known prior-art neighborhood in the existing paper graph.
20
+ {retrieved_nodes}
21
+
22
+ Novelty scoring policy:
23
+ - Score scientific novelty, not component-name novelty. The nearest-neighbor search is prior-art context, not proof of a research gap.
24
+ - Evaluate the profile-native novelty axes above. Consider mechanism, relation, boundary, causal/measurement design, proposition/proof structure, or algorithmic mechanism as appropriate to the profile.
25
+ - Ignore impact, feasibility, and writing quality when assigning novelty.
26
+ - Use the retrieved nodes as the main baseline, but do not stop at nearest-neighbor text similarity.
27
+ - High similarity usually lowers novelty, but it does NOT automatically force a low score if the mechanism shift is concrete and scientifically substantive.
28
+ - Low similarity does NOT automatically imply high novelty if the idea is vague, generic, or just repackages common patterns not captured in the retrieved set. Penalize vague claims.
29
+ - COMPONENT AGGREGATION RULE: If an idea combines standard/highly-similar components with at least ONE highly novel, scientifically substantive object, relation, or boundary change, anchor the overall `rubric_score` on that change (do not simply average component names).
30
+ - POLARITY FOR SIMILARITY: 5 = Nearly identical/heavy overlap with retrieved nodes. 0 = Completely orthogonal/unrelated to retrieved nodes.
31
+
32
+ Rubric anchors (for the final `rubric_score`):
33
+ - 0 = Trivial restatement or cosmetic rename of the retrieved neighborhood.
34
+ - 1 = Very small edit that preserves the same underlying mechanism.
35
+ - 2 = Modest variation with limited new mechanism content.
36
+ - 3 = Meaningful recombination or scoped mechanism change, but still close to nearby prior art.
37
+ - 4 = Clear mechanism-level departure relative to the retrieved neighborhood.
38
+ - 5 = Strongly differentiated mechanism with concrete, defensible novelty.
39
+
40
+ First, conduct your analysis in the `evaluation_scratchpad`. Then, assign the numeric scores.
41
+ Return STRICT JSON ONLY (no markdown blocks like ```json, no prose outside the JSON object):
42
+ {{
43
+ "retrieval_similarity": <int 0-5>,
44
+ "novelty_axes": {{
45
+ "mechanism_or_process": <int 0-5>,
46
+ "relation_or_claim": <int 0-5>,
47
+ "boundary_or_regime": <int 0-5>,
48
+ "evidence_or_measurement_design": <int 0-5>
49
+ }},
50
+ "perceived_novelty": <int 0-5>,
51
+ "rubric_score": <int 0-5>,
52
+ "rationale": "One concise sentence summarizing why this specific rubric_score was chosen based on the mechanism delta."
53
+ }}
54
+ """
@@ -0,0 +1,39 @@
1
+ EXPERIMENT_FINDINGS_EXTRACTION_PROMPT = """
2
+ You are a research-analysis agent.
3
+
4
+ == Task ==
5
+ Read the raw ablation / experiment JSON below and extract structured findings for LigAgent.
6
+
7
+ == Important assumptions ==
8
+ - Treat every key under `components` as a REAL component name.
9
+ - Do not invent new component names.
10
+ - Base all findings strictly on the provided raw JSON.
11
+ - The output must stay grounded in the raw JSON. Do not add action suggestions, theme taxonomies, or other speculative labels.
12
+ - Every component under `components` MUST appear exactly once in `component_findings`.
13
+ - The `component` field must exactly match the original key from `components`.
14
+ - If `summary.feasible`, `summary.confidence`, or `summary.key_findings` exist in the raw JSON, preserve them faithfully unless the raw JSON is clearly inconsistent.
15
+
16
+ == Raw ablation JSON ==
17
+ {raw_ablation}
18
+
19
+ Return STRICT JSON with this schema:
20
+ {{
21
+ "summary": {{
22
+ "hypothesis_status": "supported|challenged|falsified|mixed|inconclusive",
23
+ "feasible": true,
24
+ "overall_confidence": 0.0,
25
+ "tldr": "short summary of the overall ablation outcome",
26
+ "key_findings": ["..."]
27
+ }},
28
+ "component_findings": [
29
+ {{
30
+ "component": "string",
31
+ "result": "positive|negative|inconclusive",
32
+ "metric": "string",
33
+ "value": "string",
34
+ "confidence": 0.0,
35
+ "analysis": "short grounded explanation of what this result means"
36
+ }}
37
+ ]
38
+ }}
39
+ """