scienceflow 0.2.0b3__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 (951) hide show
  1. scienceflow/__init__.py +13 -0
  2. scienceflow/agent/__init__.py +120 -0
  3. scienceflow/agent/core/__init__.py +1 -0
  4. scienceflow/agent/core/ports/__init__.py +1 -0
  5. scienceflow/agent/core/ports/callback_ports.py +129 -0
  6. scienceflow/agent/core/ports/host_ports.py +126 -0
  7. scienceflow/agent/core/ports/session_callbacks.py +173 -0
  8. scienceflow/agent/core/runtime/__init__.py +1 -0
  9. scienceflow/agent/core/runtime/agent.py +173 -0
  10. scienceflow/agent/core/runtime/ephemeral.py +73 -0
  11. scienceflow/agent/core/runtime/registry.py +42 -0
  12. scienceflow/agent/core/runtime/run_policy.py +187 -0
  13. scienceflow/agent/factory/__init__.py +12 -0
  14. scienceflow/agent/factory/composition.py +276 -0
  15. scienceflow/agent/factory/construction/__init__.py +326 -0
  16. scienceflow/agent/factory/construction/assembly.py +626 -0
  17. scienceflow/agent/factory/construction/builder.py +34 -0
  18. scienceflow/agent/factory/contracts.py +29 -0
  19. scienceflow/agent/factory/service.py +96 -0
  20. scienceflow/agent/policies/__init__.py +3 -0
  21. scienceflow/agent/policies/repl.py +89 -0
  22. scienceflow/agent/policies/routing.py +407 -0
  23. scienceflow/agent/prompts/L0/README.md +7 -0
  24. scienceflow/agent/prompts/L0/code_agent_core.md +41 -0
  25. scienceflow/agent/prompts/L0/code_agent_core_bash_write.md +60 -0
  26. scienceflow/agent/prompts/L0/default_system.md +24 -0
  27. scienceflow/agent/prompts/L0/default_system_bash_write.md +37 -0
  28. scienceflow/agent/prompts/L0/tool_policy_parallel.md +16 -0
  29. scienceflow/agent/prompts/L0/tool_policy_parallel_bash_write.md +20 -0
  30. scienceflow/agent/prompts/L0/tool_policy_single.md +13 -0
  31. scienceflow/agent/prompts/L0/tool_policy_single_bash_write.md +16 -0
  32. scienceflow/agent/prompts/README.md +9 -0
  33. scienceflow/agent/prompts/__init__.py +13 -0
  34. scienceflow/agent/prompts/system_prompt.py +164 -0
  35. scienceflow/agent/prompts/write_coaching.py +252 -0
  36. scienceflow/agent/session/__init__.py +23 -0
  37. scienceflow/agent/session/coordination/__init__.py +1 -0
  38. scienceflow/agent/session/coordination/context.py +135 -0
  39. scienceflow/agent/session/coordination/contracts.py +24 -0
  40. scienceflow/agent/session/coordination/host.py +55 -0
  41. scienceflow/agent/session/execution/__init__.py +1 -0
  42. scienceflow/agent/session/execution/runtime.py +202 -0
  43. scienceflow/agent/session/execution/tool_result.py +202 -0
  44. scienceflow/agent/session/execution/turn.py +291 -0
  45. scienceflow/cli.py +7 -0
  46. scienceflow/foundation/__init__.py +1 -0
  47. scienceflow/foundation/architecture/__init__.py +15 -0
  48. scienceflow/foundation/architecture/dependencies.py +269 -0
  49. scienceflow/foundation/config/__init__.py +11 -0
  50. scienceflow/foundation/config/default.yaml +12 -0
  51. scienceflow/foundation/config/llm/__init__.py +1 -0
  52. scienceflow/foundation/config/llm/llm_factory.py +76 -0
  53. scienceflow/foundation/config/llm/llm_http.py +206 -0
  54. scienceflow/foundation/config/llm/llm_pool.py +69 -0
  55. scienceflow/foundation/config/llm/model_registry.py +188 -0
  56. scienceflow/foundation/config/profiles/__init__.py +1 -0
  57. scienceflow/foundation/config/profiles/defaults/agent.yaml +22 -0
  58. scienceflow/foundation/config/profiles/defaults/evaluator.yaml +37 -0
  59. scienceflow/foundation/config/profiles/defaults/exec.yaml +8 -0
  60. scienceflow/foundation/config/profiles/defaults/lnr/context.yaml +25 -0
  61. scienceflow/foundation/config/profiles/defaults/lnr/estra-magent.yaml +11 -0
  62. scienceflow/foundation/config/profiles/defaults/lnr/estra.yaml +22 -0
  63. scienceflow/foundation/config/profiles/defaults/lnr/index.yaml +18 -0
  64. scienceflow/foundation/config/profiles/defaults/lnr/resource-arbiter.yaml +26 -0
  65. scienceflow/foundation/config/profiles/defaults/lnr/resource-gpu.yaml +49 -0
  66. scienceflow/foundation/config/profiles/defaults/lnr/resource-guards.yaml +27 -0
  67. scienceflow/foundation/config/profiles/defaults/lnr/resource-monitor.yaml +37 -0
  68. scienceflow/foundation/config/profiles/defaults/lnr/runtime.yaml +10 -0
  69. scienceflow/foundation/config/profiles/defaults/lnr/selection.yaml +13 -0
  70. scienceflow/foundation/config/profiles/defaults/lnr/skills.yaml +11 -0
  71. scienceflow/foundation/config/profiles/defaults/lnr/snapshots.yaml +7 -0
  72. scienceflow/foundation/config/profiles/defaults/lnr/stage.yaml +20 -0
  73. scienceflow/foundation/config/profiles/defaults/lnr/workspace.yaml +13 -0
  74. scienceflow/foundation/config/profiles/defaults/repl.yaml +25 -0
  75. scienceflow/foundation/config/profiles/defaults/tool.yaml +64 -0
  76. scienceflow/foundation/config/profiles/defaults/workspace.yaml +10 -0
  77. scienceflow/foundation/config/runtime/__init__.py +1 -0
  78. scienceflow/foundation/config/runtime/agent_constants.py +47 -0
  79. scienceflow/foundation/config/runtime/environment.py +96 -0
  80. scienceflow/foundation/config/runtime/llm_lists.py +50 -0
  81. scienceflow/foundation/config/runtime/resource_modes.py +115 -0
  82. scienceflow/foundation/config/schema/__init__.py +1 -0
  83. scienceflow/foundation/config/schema/models/__init__.py +1 -0
  84. scienceflow/foundation/config/schema/models/contracts/__init__.py +1 -0
  85. scienceflow/foundation/config/schema/models/contracts/base.py +10 -0
  86. scienceflow/foundation/config/schema/models/contracts/environment.py +212 -0
  87. scienceflow/foundation/config/schema/models/contracts/profiles.py +192 -0
  88. scienceflow/foundation/config/schema/models/contracts/schema.py +629 -0
  89. scienceflow/foundation/config/schema/models/loading/__init__.py +1 -0
  90. scienceflow/foundation/config/schema/models/loading/loader.py +317 -0
  91. scienceflow/foundation/config/schema/models/loading/parallel_overrides.py +231 -0
  92. scienceflow/foundation/config/schema/models/loading/serialization.py +208 -0
  93. scienceflow/foundation/config/schema/settings.py +40 -0
  94. scienceflow/foundation/config/sci_modeling_bench.yaml +21 -0
  95. scienceflow/foundation/contracts/__init__.py +54 -0
  96. scienceflow/foundation/contracts/research/__init__.py +1 -0
  97. scienceflow/foundation/contracts/research/estra.py +45 -0
  98. scienceflow/foundation/contracts/research/evaluation.py +155 -0
  99. scienceflow/foundation/contracts/research/gate.py +51 -0
  100. scienceflow/foundation/contracts/research/metric.py +86 -0
  101. scienceflow/foundation/contracts/runtime/__init__.py +1 -0
  102. scienceflow/foundation/contracts/runtime/base.py +21 -0
  103. scienceflow/foundation/contracts/runtime/resource_execution.py +81 -0
  104. scienceflow/foundation/contracts/runtime/workspace_memory.py +77 -0
  105. scienceflow/interfaces/__init__.py +1 -0
  106. scienceflow/interfaces/cli/__init__.py +456 -0
  107. scienceflow/interfaces/cli/__main__.py +7 -0
  108. scienceflow/interfaces/cli/commands/__init__.py +1 -0
  109. scienceflow/interfaces/cli/commands/inspect/__init__.py +1 -0
  110. scienceflow/interfaces/cli/commands/inspect/monitor.py +86 -0
  111. scienceflow/interfaces/cli/commands/inspect/replay.py +76 -0
  112. scienceflow/interfaces/cli/commands/inspect/resources.py +23 -0
  113. scienceflow/interfaces/cli/commands/inspect/web.py +41 -0
  114. scienceflow/interfaces/cli/commands/run/__init__.py +1 -0
  115. scienceflow/interfaces/cli/commands/run/control/__init__.py +5 -0
  116. scienceflow/interfaces/cli/commands/run/control/commands.py +118 -0
  117. scienceflow/interfaces/cli/commands/run/control/guided.py +90 -0
  118. scienceflow/interfaces/cli/commands/run/parallel.py +36 -0
  119. scienceflow/interfaces/cli/commands/run/repl.py +310 -0
  120. scienceflow/interfaces/cli/commands/run/task.py +178 -0
  121. scienceflow/interfaces/cli/commands/run/tui.py +130 -0
  122. scienceflow/interfaces/cli/tui_sessions.py +66 -0
  123. scienceflow/interfaces/cli/user_config.py +83 -0
  124. scienceflow/interfaces/ui/__init__.py +16 -0
  125. scienceflow/interfaces/ui/assets/logo_scienceflow.png +0 -0
  126. scienceflow/interfaces/ui/assets/logo_scienceflow_lite.ico +0 -0
  127. scienceflow/interfaces/ui/assets/tui_badge.svg +12 -0
  128. scienceflow/interfaces/ui/assets/tui_tiny.svg +9 -0
  129. scienceflow/interfaces/ui/console.py +414 -0
  130. scienceflow/interfaces/ui/llm_cli.py +72 -0
  131. scienceflow/interfaces/ui/logo.py +29 -0
  132. scienceflow/interfaces/ui/long_research.py +661 -0
  133. scienceflow/interfaces/ui/long_research_progress.py +10 -0
  134. scienceflow/interfaces/ui/model_config.py +289 -0
  135. scienceflow/interfaces/ui/monitor/__init__.py +37 -0
  136. scienceflow/interfaces/ui/monitor/dashboard.py +815 -0
  137. scienceflow/interfaces/ui/monitor/helpers.py +319 -0
  138. scienceflow/interfaces/ui/monitor/lnr/__init__.py +1 -0
  139. scienceflow/interfaces/ui/monitor/lnr/projection/__init__.py +1 -0
  140. scienceflow/interfaces/ui/monitor/lnr/projection/aggregation.py +363 -0
  141. scienceflow/interfaces/ui/monitor/lnr/projection/events.py +299 -0
  142. scienceflow/interfaces/ui/monitor/lnr/projection/state.py +157 -0
  143. scienceflow/interfaces/ui/monitor/lnr/projection/summary.py +229 -0
  144. scienceflow/interfaces/ui/monitor/lnr/rendering/__init__.py +1 -0
  145. scienceflow/interfaces/ui/monitor/lnr/rendering/base.py +32 -0
  146. scienceflow/interfaces/ui/monitor/lnr/rendering/formatting.py +100 -0
  147. scienceflow/interfaces/ui/monitor/lnr/rendering/reader.py +208 -0
  148. scienceflow/interfaces/ui/monitor/lnr/rendering/status.py +279 -0
  149. scienceflow/interfaces/ui/monitor/lnr/rendering/time_trace.py +20 -0
  150. scienceflow/interfaces/ui/monitor/lnr_state.py +14 -0
  151. scienceflow/interfaces/ui/monitor_trace/__init__.py +19 -0
  152. scienceflow/interfaces/ui/monitor_trace/presentation/__init__.py +1 -0
  153. scienceflow/interfaces/ui/monitor_trace/presentation/builder.py +557 -0
  154. scienceflow/interfaces/ui/monitor_trace/presentation/render.py +375 -0
  155. scienceflow/interfaces/ui/monitor_trace/presentation/runner.py +55 -0
  156. scienceflow/interfaces/ui/monitor_trace/view_model/__init__.py +1 -0
  157. scienceflow/interfaces/ui/monitor_trace/view_model/assets.py +215 -0
  158. scienceflow/interfaces/ui/monitor_trace/view_model/leaderboard.py +241 -0
  159. scienceflow/interfaces/ui/monitor_trace/view_model/models.py +155 -0
  160. scienceflow/interfaces/ui/research/__init__.py +1 -0
  161. scienceflow/interfaces/ui/research/control/__init__.py +5 -0
  162. scienceflow/interfaces/ui/research/control/attachment.py +224 -0
  163. scienceflow/interfaces/ui/research/control/notices.py +51 -0
  164. scienceflow/interfaces/ui/research/control/tasks/__init__.py +1 -0
  165. scienceflow/interfaces/ui/research/control/tasks/completion.py +38 -0
  166. scienceflow/interfaces/ui/research/control/tasks/manager.py +350 -0
  167. scienceflow/interfaces/ui/research/control/tasks/metrics.py +115 -0
  168. scienceflow/interfaces/ui/research/control/tasks/projection.py +252 -0
  169. scienceflow/interfaces/ui/research/control/tasks/records.py +176 -0
  170. scienceflow/interfaces/ui/research/long_research_progress.py +272 -0
  171. scienceflow/interfaces/ui/research/research_events.py +146 -0
  172. scienceflow/interfaces/ui/research/research_preparation.py +210 -0
  173. scienceflow/interfaces/ui/research/research_usage.py +195 -0
  174. scienceflow/interfaces/ui/research/resources.py +218 -0
  175. scienceflow/interfaces/ui/research/telemetry/__init__.py +1 -0
  176. scienceflow/interfaces/ui/research/telemetry/formatting.py +68 -0
  177. scienceflow/interfaces/ui/research/telemetry/sampler.py +200 -0
  178. scienceflow/interfaces/ui/web_monitor/__init__.py +1 -0
  179. scienceflow/interfaces/ui/web_monitor/assets/core.js +84 -0
  180. scienceflow/interfaces/ui/web_monitor/assets/lineage.js +238 -0
  181. scienceflow/interfaces/ui/web_monitor/assets/lineage_layout.js +49 -0
  182. scienceflow/interfaces/ui/web_monitor/assets/lineage_viewport.js +138 -0
  183. scienceflow/interfaces/ui/web_monitor/assets/metric.js +144 -0
  184. scienceflow/interfaces/ui/web_monitor/assets/refresh.js +102 -0
  185. scienceflow/interfaces/ui/web_monitor/assets/shell.html +43 -0
  186. scienceflow/interfaces/ui/web_monitor/assets/theme.css +628 -0
  187. scienceflow/interfaces/ui/web_monitor/assets/view.js +256 -0
  188. scienceflow/interfaces/ui/web_monitor/data.py +267 -0
  189. scienceflow/interfaces/ui/web_monitor/page.py +59 -0
  190. scienceflow/interfaces/ui/web_monitor/projection.py +186 -0
  191. scienceflow/interfaces/ui/web_monitor/server.py +320 -0
  192. scienceflow/interfaces/ui/web_monitor/service.py +104 -0
  193. scienceflow/research/__init__.py +1 -0
  194. scienceflow/research/control/__init__.py +3 -0
  195. scienceflow/research/control/admission/__init__.py +20 -0
  196. scienceflow/research/control/admission/contracts.py +45 -0
  197. scienceflow/research/control/admission/observation.py +53 -0
  198. scienceflow/research/control/admission/policy.py +319 -0
  199. scienceflow/research/control/admission/replay.py +52 -0
  200. scienceflow/research/control/admission/service.py +143 -0
  201. scienceflow/research/control/agent_runtime_state.py +229 -0
  202. scienceflow/research/control/agent_session_setup.py +76 -0
  203. scienceflow/research/control/agent_session_state.py +44 -0
  204. scienceflow/research/control/ephemeral_agent_session.py +266 -0
  205. scienceflow/research/control/estra/__init__.py +31 -0
  206. scienceflow/research/control/estra/planning/__init__.py +1 -0
  207. scienceflow/research/control/estra/planning/contracts.py +96 -0
  208. scienceflow/research/control/estra/planning/parser.py +84 -0
  209. scienceflow/research/control/estra/planning/planner.py +132 -0
  210. scienceflow/research/control/estra/planning/policy.py +156 -0
  211. scienceflow/research/control/estra/runtime/__init__.py +1 -0
  212. scienceflow/research/control/estra/runtime/archive.py +150 -0
  213. scienceflow/research/control/estra/runtime/commands.py +49 -0
  214. scienceflow/research/control/estra/runtime/service.py +31 -0
  215. scienceflow/research/control/execution_value/__init__.py +25 -0
  216. scienceflow/research/control/execution_value/adapters/__init__.py +9 -0
  217. scienceflow/research/control/execution_value/adapters/lnr_observer.py +57 -0
  218. scienceflow/research/control/execution_value/decision/__init__.py +1 -0
  219. scienceflow/research/control/execution_value/decision/contracts.py +53 -0
  220. scienceflow/research/control/execution_value/decision/observation.py +47 -0
  221. scienceflow/research/control/execution_value/decision/router.py +152 -0
  222. scienceflow/research/control/execution_value/decision/service.py +79 -0
  223. scienceflow/research/control/execution_value/evidence/__init__.py +1 -0
  224. scienceflow/research/control/execution_value/evidence/cost_tracker.py +270 -0
  225. scienceflow/research/control/execution_value/evidence/quick_test.py +297 -0
  226. scienceflow/research/control/execution_value/evidence/replay.py +52 -0
  227. scienceflow/research/control/resources/__init__.py +69 -0
  228. scienceflow/research/control/resources/adapters/__init__.py +1 -0
  229. scienceflow/research/control/resources/adapters/lnr_runtime.py +8 -0
  230. scienceflow/research/control/resources/policy/__init__.py +1 -0
  231. scienceflow/research/control/resources/policy/effects.py +98 -0
  232. scienceflow/research/control/resources/policy/mechanisms.py +146 -0
  233. scienceflow/research/control/resources/policy/proposals.py +42 -0
  234. scienceflow/research/control/resources/policy/review_machine.py +100 -0
  235. scienceflow/research/control/resources/runtime/__init__.py +1 -0
  236. scienceflow/research/control/resources/runtime/feedback.py +127 -0
  237. scienceflow/research/control/resources/runtime/observation.py +143 -0
  238. scienceflow/research/control/resources/runtime/service.py +166 -0
  239. scienceflow/research/onboarding/__init__.py +49 -0
  240. scienceflow/research/onboarding/library/__init__.py +1 -0
  241. scienceflow/research/onboarding/library/catalog.py +54 -0
  242. scienceflow/research/onboarding/library/export.py +141 -0
  243. scienceflow/research/onboarding/library/portable.py +95 -0
  244. scienceflow/research/onboarding/manifest.py +196 -0
  245. scienceflow/research/onboarding/preflight.py +372 -0
  246. scienceflow/research/onboarding/session.py +360 -0
  247. scienceflow/research/onboarding/support/__init__.py +1 -0
  248. scienceflow/research/onboarding/support/answers.py +294 -0
  249. scienceflow/research/onboarding/support/evaluator_probe.py +75 -0
  250. scienceflow/research/onboarding/support/gate_probe.py +74 -0
  251. scienceflow/research/onboarding/support/preparation/__init__.py +5 -0
  252. scienceflow/research/onboarding/support/preparation/agent.py +157 -0
  253. scienceflow/research/onboarding/support/preparation/discovery.py +64 -0
  254. scienceflow/research/onboarding/support/preparation/registered.py +283 -0
  255. scienceflow/research/onboarding/support/preparation/validation.py +60 -0
  256. scienceflow/research/onboarding/support/task_defaults.py +113 -0
  257. scienceflow/research/quality/__init__.py +3 -0
  258. scienceflow/research/quality/assessment/__init__.py +8 -0
  259. scienceflow/research/quality/assessment/pipeline.py +235 -0
  260. scienceflow/research/quality/assessment/service.py +70 -0
  261. scienceflow/research/quality/embedded_fullrun.py +38 -0
  262. scienceflow/research/quality/evaluator/__init__.py +25 -0
  263. scienceflow/research/quality/evaluator/adapters.py +150 -0
  264. scienceflow/research/quality/evaluator/backends/__init__.py +18 -0
  265. scienceflow/research/quality/evaluator/backends/artifact_command.py +320 -0
  266. scienceflow/research/quality/evaluator/backends/command_env.py +76 -0
  267. scienceflow/research/quality/evaluator/backends/command_helpers.py +255 -0
  268. scienceflow/research/quality/evaluator/backends/task_package.py +505 -0
  269. scienceflow/research/quality/evaluator/cache.py +82 -0
  270. scienceflow/research/quality/evaluator/entrypoint_runner.py +94 -0
  271. scienceflow/research/quality/evaluator/event_log.py +64 -0
  272. scienceflow/research/quality/evaluator/manager.py +180 -0
  273. scienceflow/research/quality/evaluator/providers/__init__.py +13 -0
  274. scienceflow/research/quality/evaluator/providers/mlebench/__init__.py +25 -0
  275. scienceflow/research/quality/evaluator/providers/mlebench/submission_checks.py +205 -0
  276. scienceflow/research/quality/finalization/__init__.py +21 -0
  277. scienceflow/research/quality/finalization/artifacts/__init__.py +1 -0
  278. scienceflow/research/quality/finalization/artifacts/materialize.py +375 -0
  279. scienceflow/research/quality/finalization/artifacts/submission_links.py +244 -0
  280. scienceflow/research/quality/finalization/candidates/__init__.py +1 -0
  281. scienceflow/research/quality/finalization/candidates/evidence.py +441 -0
  282. scienceflow/research/quality/finalization/candidates/pack.py +169 -0
  283. scienceflow/research/quality/finalization/prompt.py +87 -0
  284. scienceflow/research/quality/finalization/selection/__init__.py +1 -0
  285. scienceflow/research/quality/finalization/selection/coverage.py +109 -0
  286. scienceflow/research/quality/finalization/selection/ranking.py +243 -0
  287. scienceflow/research/quality/finalization/service.py +460 -0
  288. scienceflow/research/quality/finalization/worker_outcomes.py +96 -0
  289. scienceflow/research/quality/fullrun/__init__.py +3 -0
  290. scienceflow/research/quality/fullrun/execution.py +789 -0
  291. scienceflow/research/quality/fullrun/snapshot.py +828 -0
  292. scienceflow/research/quality/gate/__init__.py +33 -0
  293. scienceflow/research/quality/gate/feedback.py +111 -0
  294. scienceflow/research/quality/gate/invariants.py +85 -0
  295. scienceflow/research/quality/gate/policy.py +392 -0
  296. scienceflow/research/reporting/__init__.py +5 -0
  297. scienceflow/research/reporting/analysis.py +567 -0
  298. scienceflow/research/reporting/charts.py +295 -0
  299. scienceflow/research/reporting/collect.py +366 -0
  300. scienceflow/research/reporting/html.py +230 -0
  301. scienceflow/research/reporting/lineage.py +94 -0
  302. scienceflow/research/reporting/markdown.py +269 -0
  303. scienceflow/research/reporting/models.py +52 -0
  304. scienceflow/research/reporting/narrative.py +129 -0
  305. scienceflow/research/reporting/pdf.py +640 -0
  306. scienceflow/research/reporting/service.py +128 -0
  307. scienceflow/research/solver/__init__.py +20 -0
  308. scienceflow/research/solver/data_prep.py +113 -0
  309. scienceflow/research/solver/lnr/__init__.py +23 -0
  310. scienceflow/research/solver/lnr/lifecycle/__init__.py +1 -0
  311. scienceflow/research/solver/lnr/lifecycle/records/__init__.py +1 -0
  312. scienceflow/research/solver/lnr/lifecycle/records/stage_logs.py +140 -0
  313. scienceflow/research/solver/lnr/lifecycle/records/stage_memory.py +23 -0
  314. scienceflow/research/solver/lnr/lifecycle/records/storage_usage.py +342 -0
  315. scienceflow/research/solver/lnr/lifecycle/snapshots/__init__.py +1 -0
  316. scienceflow/research/solver/lnr/lifecycle/snapshots/snapshot_store.py +1149 -0
  317. scienceflow/research/solver/lnr/lifecycle/snapshots/workspace_snapshot.py +461 -0
  318. scienceflow/research/solver/lnr/lifecycle/snapshots/workspace_snapshot_io.py +95 -0
  319. scienceflow/research/solver/lnr/lifecycle/snapshots/workspace_snapshot_subset.py +133 -0
  320. scienceflow/research/solver/lnr/lifecycle/stage/__init__.py +13 -0
  321. scienceflow/research/solver/lnr/lifecycle/stage/metrics/__init__.py +1 -0
  322. scienceflow/research/solver/lnr/lifecycle/stage/metrics/metric_adjudication.py +337 -0
  323. scienceflow/research/solver/lnr/lifecycle/stage/metrics/metric_semantics.py +262 -0
  324. scienceflow/research/solver/lnr/lifecycle/stage/metrics/metric_validity.py +222 -0
  325. scienceflow/research/solver/lnr/lifecycle/stage/metrics/score_summary.py +497 -0
  326. scienceflow/research/solver/lnr/lifecycle/stage/records/__init__.py +1 -0
  327. scienceflow/research/solver/lnr/lifecycle/stage/records/peer_context.py +275 -0
  328. scienceflow/research/solver/lnr/lifecycle/stage/records/stage_files.py +255 -0
  329. scienceflow/research/solver/lnr/lifecycle/stage/records/stage_ledger.py +450 -0
  330. scienceflow/research/solver/lnr/lifecycle/workspace/__init__.py +1 -0
  331. scienceflow/research/solver/lnr/lifecycle/workspace/init_workspace.py +163 -0
  332. scienceflow/research/solver/lnr/lifecycle/workspace/prep_fs.py +126 -0
  333. scienceflow/research/solver/lnr/lifecycle/workspace/runtime_paths.py +65 -0
  334. scienceflow/research/solver/lnr/lifecycle/workspace/worker_layout.py +47 -0
  335. scienceflow/research/solver/lnr/orchestration/__init__.py +1 -0
  336. scienceflow/research/solver/lnr/orchestration/agent_hooks.py +116 -0
  337. scienceflow/research/solver/lnr/orchestration/coordinator/__init__.py +7 -0
  338. scienceflow/research/solver/lnr/orchestration/coordinator/estra/__init__.py +1 -0
  339. scienceflow/research/solver/lnr/orchestration/coordinator/estra/adapter.py +833 -0
  340. scienceflow/research/solver/lnr/orchestration/coordinator/evaluation/__init__.py +1 -0
  341. scienceflow/research/solver/lnr/orchestration/coordinator/evaluation/adapter.py +717 -0
  342. scienceflow/research/solver/lnr/orchestration/coordinator/evaluation/capture.py +451 -0
  343. scienceflow/research/solver/lnr/orchestration/coordinator/evaluation/commit.py +505 -0
  344. scienceflow/research/solver/lnr/orchestration/coordinator/evaluation/metric_projection.py +245 -0
  345. scienceflow/research/solver/lnr/orchestration/coordinator/evaluation/profile.py +324 -0
  346. scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/__init__.py +1 -0
  347. scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/context/__init__.py +1 -0
  348. scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/context/coordination.py +845 -0
  349. scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/context/memory_coordination.py +485 -0
  350. scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/context/memory_projection.py +515 -0
  351. scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/stage/__init__.py +1 -0
  352. scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/stage/adapter.py +731 -0
  353. scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/stage/commit.py +450 -0
  354. scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/stage/experiment_state.py +226 -0
  355. scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/stage/prompt.py +413 -0
  356. scienceflow/research/solver/lnr/orchestration/coordinator/resource/__init__.py +1 -0
  357. scienceflow/research/solver/lnr/orchestration/coordinator/resource/advisory.py +530 -0
  358. scienceflow/research/solver/lnr/orchestration/coordinator/resource/construction.py +543 -0
  359. scienceflow/research/solver/lnr/orchestration/coordinator/resource/observer_construction.py +608 -0
  360. scienceflow/research/solver/lnr/orchestration/coordinator/resource/peer_snapshot.py +202 -0
  361. scienceflow/research/solver/lnr/orchestration/coordinator/resource/prompt_projection.py +607 -0
  362. scienceflow/research/solver/lnr/orchestration/coordinator/run/__init__.py +1 -0
  363. scienceflow/research/solver/lnr/orchestration/coordinator/run/agent_coordination.py +840 -0
  364. scienceflow/research/solver/lnr/orchestration/coordinator/run/construction.py +459 -0
  365. scienceflow/research/solver/lnr/orchestration/coordinator/run/coordination.py +972 -0
  366. scienceflow/research/solver/lnr/orchestration/coordinator/run/event_projection.py +880 -0
  367. scienceflow/research/solver/lnr/orchestration/coordinator/shared.py +597 -0
  368. scienceflow/research/solver/lnr/orchestration/coordinator/solver.py +422 -0
  369. scienceflow/research/solver/lnr/orchestration/runtime/__init__.py +9 -0
  370. scienceflow/research/solver/lnr/orchestration/runtime/execution/__init__.py +1 -0
  371. scienceflow/research/solver/lnr/orchestration/runtime/execution/adapters.py +260 -0
  372. scienceflow/research/solver/lnr/orchestration/runtime/execution/engine.py +79 -0
  373. scienceflow/research/solver/lnr/orchestration/runtime/execution/multi_worker.py +289 -0
  374. scienceflow/research/solver/lnr/orchestration/runtime/execution/single_worker.py +203 -0
  375. scienceflow/research/solver/lnr/orchestration/runtime/execution/worker_environment.py +97 -0
  376. scienceflow/research/solver/lnr/orchestration/runtime/services/__init__.py +1 -0
  377. scienceflow/research/solver/lnr/orchestration/runtime/services/deadline.py +29 -0
  378. scienceflow/research/solver/lnr/orchestration/runtime/services/facade.py +28 -0
  379. scienceflow/research/solver/lnr/orchestration/runtime/services/models.py +45 -0
  380. scienceflow/research/solver/lnr/orchestration/runtime/services/worker_services.py +218 -0
  381. scienceflow/research/solver/lnr/orchestration/solver.py +12 -0
  382. scienceflow/research/solver/lnr/orchestration/state_machine.py +548 -0
  383. scienceflow/research/solver/lnr/orchestration/state_projection.py +712 -0
  384. scienceflow/research/solver/lnr/resources/__init__.py +1 -0
  385. scienceflow/research/solver/lnr/resources/resource_advisory.py +192 -0
  386. scienceflow/research/solver/lnr/resources/resource_feedback_contract.py +9 -0
  387. scienceflow/research/solver/lnr/resources/resource_feedback_guidance.py +46 -0
  388. scienceflow/research/solver/lnr/resources/resource_observer.py +17 -0
  389. scienceflow/research/solver/lnr/resources/runtime/__init__.py +17 -0
  390. scienceflow/research/solver/lnr/resources/runtime/control/__init__.py +1 -0
  391. scienceflow/research/solver/lnr/resources/runtime/control/admission/__init__.py +1 -0
  392. scienceflow/research/solver/lnr/resources/runtime/control/admission/admission.py +19 -0
  393. scienceflow/research/solver/lnr/resources/runtime/control/admission/admission_safety.py +258 -0
  394. scienceflow/research/solver/lnr/resources/runtime/control/admission/control_profile.py +137 -0
  395. scienceflow/research/solver/lnr/resources/runtime/control/admission/pressure_state.py +514 -0
  396. scienceflow/research/solver/lnr/resources/runtime/control/admission/priority.py +64 -0
  397. scienceflow/research/solver/lnr/resources/runtime/control/gpu/__init__.py +1 -0
  398. scienceflow/research/solver/lnr/resources/runtime/control/gpu/gpu_feedback.py +40 -0
  399. scienceflow/research/solver/lnr/resources/runtime/control/gpu/gpu_lease_store.py +1147 -0
  400. scienceflow/research/solver/lnr/resources/runtime/control/gpu/gpu_sharing.py +733 -0
  401. scienceflow/research/solver/lnr/resources/runtime/control/gpu/soft_gpu_gate.py +108 -0
  402. scienceflow/research/solver/lnr/resources/runtime/control/gpu/workspace_gpu_guard.py +250 -0
  403. scienceflow/research/solver/lnr/resources/runtime/control/policy/__init__.py +1 -0
  404. scienceflow/research/solver/lnr/resources/runtime/control/policy/post_feedback_actions.py +63 -0
  405. scienceflow/research/solver/lnr/resources/runtime/control/policy/source_hints.py +289 -0
  406. scienceflow/research/solver/lnr/resources/runtime/control/policy/startup_trial.py +123 -0
  407. scienceflow/research/solver/lnr/resources/runtime/execution/__init__.py +1 -0
  408. scienceflow/research/solver/lnr/resources/runtime/execution/facade.py +45 -0
  409. scienceflow/research/solver/lnr/resources/runtime/execution/process/__init__.py +1 -0
  410. scienceflow/research/solver/lnr/resources/runtime/execution/process/jobs.py +110 -0
  411. scienceflow/research/solver/lnr/resources/runtime/execution/process/proc_inspect.py +89 -0
  412. scienceflow/research/solver/lnr/resources/runtime/execution/process/process_liveness.py +214 -0
  413. scienceflow/research/solver/lnr/resources/runtime/execution/process/quick_probe.py +234 -0
  414. scienceflow/research/solver/lnr/resources/runtime/execution/process/sidecar.py +217 -0
  415. scienceflow/research/solver/lnr/resources/runtime/execution/state/__init__.py +1 -0
  416. scienceflow/research/solver/lnr/resources/runtime/execution/state/history_store.py +178 -0
  417. scienceflow/research/solver/lnr/resources/runtime/execution/state/metric_history.py +200 -0
  418. scienceflow/research/solver/lnr/resources/runtime/execution/state/models.py +74 -0
  419. scienceflow/research/solver/lnr/resources/runtime/execution/state/unified_store.py +529 -0
  420. scienceflow/research/solver/lnr/resources/runtime/execution/state/utilization.py +402 -0
  421. scienceflow/research/solver/lnr/resources/runtime/observer/__init__.py +17 -0
  422. scienceflow/research/solver/lnr/resources/runtime/observer/allocation/__init__.py +1 -0
  423. scienceflow/research/solver/lnr/resources/runtime/observer/allocation/admission/__init__.py +1 -0
  424. scienceflow/research/solver/lnr/resources/runtime/observer/allocation/admission/decision.py +223 -0
  425. scienceflow/research/solver/lnr/resources/runtime/observer/allocation/lease/__init__.py +1 -0
  426. scienceflow/research/solver/lnr/resources/runtime/observer/allocation/lease/callbacks.py +118 -0
  427. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/__init__.py +1 -0
  428. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/observation/__init__.py +1 -0
  429. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/observation/classification.py +556 -0
  430. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/observation/feedback.py +599 -0
  431. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/observation/monitoring.py +440 -0
  432. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/observation/progress.py +329 -0
  433. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/observation/sampling.py +234 -0
  434. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/__init__.py +1 -0
  435. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/decision/__init__.py +1 -0
  436. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/decision/arbiter.py +419 -0
  437. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/decision/budget.py +372 -0
  438. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/decision/execution_value.py +566 -0
  439. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/decision/priority.py +358 -0
  440. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/decision/safety.py +691 -0
  441. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/state/__init__.py +1 -0
  442. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/state/facts.py +305 -0
  443. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/state/history.py +225 -0
  444. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/state/intervention.py +224 -0
  445. scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/state/machine.py +298 -0
  446. scienceflow/research/solver/lnr/resources/runtime/observer/callbacks/__init__.py +1 -0
  447. scienceflow/research/solver/lnr/resources/runtime/observer/callbacks/job.py +425 -0
  448. scienceflow/research/solver/lnr/resources/runtime/observer/callbacks/lifecycle.py +372 -0
  449. scienceflow/research/solver/lnr/resources/runtime/observer/callbacks/preflight.py +247 -0
  450. scienceflow/research/solver/lnr/resources/runtime/observer/construction.py +226 -0
  451. scienceflow/research/solver/lnr/resources/runtime/observer/construction_runtime.py +553 -0
  452. scienceflow/research/solver/lnr/resources/runtime/observer/controller.py +99 -0
  453. scienceflow/research/solver/lnr/resources/runtime/observer/shared.py +333 -0
  454. scienceflow/research/solver/lnr/resources/runtime/observer/sharing/__init__.py +1 -0
  455. scienceflow/research/solver/lnr/resources/runtime/observer/sharing/decision.py +295 -0
  456. scienceflow/research/solver/lnr/resources/runtime/observer/sharing/scheduling.py +592 -0
  457. scienceflow/research/solver/lnr/resources/runtime/review/__init__.py +13 -0
  458. scienceflow/research/solver/lnr/resources/runtime/review/decision/__init__.py +1 -0
  459. scienceflow/research/solver/lnr/resources/runtime/review/decision/arbiter.py +923 -0
  460. scienceflow/research/solver/lnr/resources/runtime/review/decision/arbiter_gate.py +683 -0
  461. scienceflow/research/solver/lnr/resources/runtime/review/decision/efficiency.py +313 -0
  462. scienceflow/research/solver/lnr/resources/runtime/review/decision/execution_facts.py +287 -0
  463. scienceflow/research/solver/lnr/resources/runtime/review/decision/kill_intent.py +165 -0
  464. scienceflow/research/solver/lnr/resources/runtime/review/evidence/__init__.py +1 -0
  465. scienceflow/research/solver/lnr/resources/runtime/review/evidence/lease_suspect.py +268 -0
  466. scienceflow/research/solver/lnr/resources/runtime/review/evidence/progress.py +152 -0
  467. scienceflow/research/solver/lnr/resources/runtime/review/evidence/research_cadence.py +214 -0
  468. scienceflow/research/solver/lnr/resources/runtime/review/evidence/state_generation.py +206 -0
  469. scienceflow/research/solver/lnr/resources/runtime/runtime_components/__init__.py +3 -0
  470. scienceflow/research/solver/lnr/resources/runtime/runtime_components/admission/__init__.py +1 -0
  471. scienceflow/research/solver/lnr/resources/runtime/runtime_components/admission/admission_coordination.py +601 -0
  472. scienceflow/research/solver/lnr/resources/runtime/runtime_components/admission/lease_coordination.py +252 -0
  473. scienceflow/research/solver/lnr/resources/runtime/runtime_components/admission/queue_coordination.py +196 -0
  474. scienceflow/research/solver/lnr/resources/runtime/runtime_components/admission/wait_coordination.py +169 -0
  475. scienceflow/research/solver/lnr/resources/runtime/runtime_components/control/__init__.py +1 -0
  476. scienceflow/research/solver/lnr/resources/runtime/runtime_components/control/monitoring.py +67 -0
  477. scienceflow/research/solver/lnr/resources/runtime/runtime_components/control/pressure_coordination.py +233 -0
  478. scienceflow/research/solver/lnr/resources/runtime/runtime_components/control/shared.py +130 -0
  479. scienceflow/research/solver/lnr/resources/runtime/runtime_components/control/state_policy.py +536 -0
  480. scienceflow/research/solver/lnr/support/__init__.py +1 -0
  481. scienceflow/research/solver/lnr/support/context_hygiene.py +174 -0
  482. scienceflow/research/solver/lnr/support/context_memory_policy.py +20 -0
  483. scienceflow/research/solver/lnr/support/prompt_template_store.py +54 -0
  484. scienceflow/research/solver/lnr/support/prompt_templates/__init__.py +21 -0
  485. scienceflow/research/solver/lnr/support/prompt_templates/estra/estra_archive_summary.md +18 -0
  486. scienceflow/research/solver/lnr/support/prompt_templates/estra/estra_decision.md +41 -0
  487. scienceflow/research/solver/lnr/support/prompt_templates/estra/estra_resume.md +17 -0
  488. scienceflow/research/solver/lnr/support/prompt_templates/estra/keep_current_compact.md +13 -0
  489. scienceflow/research/solver/lnr/support/prompt_templates/evaluation/metric_output_interpreter_system.md +25 -0
  490. scienceflow/research/solver/lnr/support/prompt_templates/evaluation/metric_output_interpreter_user.md +6 -0
  491. scienceflow/research/solver/lnr/support/prompt_templates/evaluation/metric_validity_adjudicator_system.md +34 -0
  492. scienceflow/research/solver/lnr/support/prompt_templates/evaluation/metric_validity_adjudicator_user.md +6 -0
  493. scienceflow/research/solver/lnr/support/prompt_templates/resources/resource_feedback_guidance.md +11 -0
  494. scienceflow/research/solver/lnr/support/prompt_templates/stage/stage_commit.md +23 -0
  495. scienceflow/research/solver/lnr/support/prompt_templates/stage/stage_commit_judgment.md +25 -0
  496. scienceflow/research/solver/lnr/support/prompt_templates/task/ml/first_user.md +18 -0
  497. scienceflow/research/solver/lnr/support/prompt_templates/task/opt_solver/first_user.md +19 -0
  498. scienceflow/research/solver/lnr/support/prompt_templates/task/sci_modeling_bench/first_user.md +50 -0
  499. scienceflow/research/solver/lnr/support/prompts.py +390 -0
  500. scienceflow/research/solver/lnr/transitions/__init__.py +1 -0
  501. scienceflow/research/solver/lnr/transitions/estra/__init__.py +7 -0
  502. scienceflow/research/solver/lnr/transitions/estra/parser.py +11 -0
  503. scienceflow/research/solver/lnr/transitions/estra/policy.py +27 -0
  504. scienceflow/research/solver/lnr/transitions/estra/service.py +7 -0
  505. scienceflow/research/solver/lnr/transitions/estra_magent/__init__.py +27 -0
  506. scienceflow/research/solver/lnr/transitions/estra_magent/coordinator.py +57 -0
  507. scienceflow/research/solver/lnr/transitions/estra_magent/events.py +95 -0
  508. scienceflow/research/solver/lnr/transitions/estra_magent/join_gate.py +180 -0
  509. scienceflow/research/solver/lnr/transitions/estra_magent/models.py +82 -0
  510. scienceflow/research/solver/lnr/transitions/estra_magent/prompt_blocks.py +78 -0
  511. scienceflow/research/solver/lnr/transitions/replay_prepare.py +400 -0
  512. scienceflow/research/solver/lnr/transitions/restore_cleanup.py +118 -0
  513. scienceflow/research/solver/lnr/transitions/resume/__init__.py +33 -0
  514. scienceflow/research/solver/lnr/transitions/resume/continuation.py +160 -0
  515. scienceflow/research/solver/lnr/transitions/resume/memory_state.py +42 -0
  516. scienceflow/research/state/__init__.py +3 -0
  517. scienceflow/research/state/dataset/__init__.py +5 -0
  518. scienceflow/research/state/dataset/discovery/__init__.py +1 -0
  519. scienceflow/research/state/dataset/discovery/eval_signature.py +37 -0
  520. scienceflow/research/state/dataset/discovery/scan.py +148 -0
  521. scienceflow/research/state/dataset/discovery/scan_metadata.py +675 -0
  522. scienceflow/research/state/dataset/discovery/scan_traversal.py +119 -0
  523. scienceflow/research/state/dataset/rendering/__init__.py +1 -0
  524. scienceflow/research/state/dataset/rendering/scan_render.py +580 -0
  525. scienceflow/research/state/dataset/rendering/scan_tree.py +66 -0
  526. scienceflow/research/state/dataset/rendering/scan_tree_flat.py +145 -0
  527. scienceflow/research/state/dataset/rendering/scan_tree_nested.py +481 -0
  528. scienceflow/research/state/knowledge/__init__.py +1 -0
  529. scienceflow/research/state/knowledge/context/__init__.py +15 -0
  530. scienceflow/research/state/knowledge/context/context/__init__.py +1 -0
  531. scienceflow/research/state/knowledge/context/context/compression/__init__.py +1 -0
  532. scienceflow/research/state/knowledge/context/context/compression/clone_compression.py +847 -0
  533. scienceflow/research/state/knowledge/context/context/compression/clone_inheritance.py +509 -0
  534. scienceflow/research/state/knowledge/context/context/compression/compaction.py +363 -0
  535. scienceflow/research/state/knowledge/context/context/compression/manager_compaction.py +462 -0
  536. scienceflow/research/state/knowledge/context/context/projection/__init__.py +1 -0
  537. scienceflow/research/state/knowledge/context/context/projection/bash_projection.py +184 -0
  538. scienceflow/research/state/knowledge/context/context/projection/manager_projection.py +257 -0
  539. scienceflow/research/state/knowledge/context/context/projection/source_projection.py +692 -0
  540. scienceflow/research/state/knowledge/context/context/results/__init__.py +1 -0
  541. scienceflow/research/state/knowledge/context/context/results/base.py +27 -0
  542. scienceflow/research/state/knowledge/context/context/results/pure.py +25 -0
  543. scienceflow/research/state/knowledge/context/context/results/tool_results.py +411 -0
  544. scienceflow/research/state/knowledge/context/context/runtime/__init__.py +1 -0
  545. scienceflow/research/state/knowledge/context/context/runtime/finalize_runtime.py +174 -0
  546. scienceflow/research/state/knowledge/context/context/runtime/manager_finalize.py +63 -0
  547. scienceflow/research/state/knowledge/context/context/runtime/manager_state.py +352 -0
  548. scienceflow/research/state/knowledge/context/context/runtime/manager_tool_results.py +96 -0
  549. scienceflow/research/state/knowledge/context/context/runtime/tool_result_runtime.py +356 -0
  550. scienceflow/research/state/knowledge/context/memory_context.py +80 -0
  551. scienceflow/research/state/knowledge/context/source_snapshot.py +744 -0
  552. scienceflow/research/state/knowledge/memory/__init__.py +32 -0
  553. scienceflow/research/state/knowledge/memory/adapters/__init__.py +1 -0
  554. scienceflow/research/state/knowledge/memory/adapters/lnr_stage.py +11 -0
  555. scienceflow/research/state/knowledge/memory/agent/__init__.py +13 -0
  556. scienceflow/research/state/knowledge/memory/agent/memory_utils.py +309 -0
  557. scienceflow/research/state/knowledge/memory/agent/reasoning_replay.py +68 -0
  558. scienceflow/research/state/knowledge/memory/agent/resource_feedback_memory.py +359 -0
  559. scienceflow/research/state/knowledge/memory/context/__init__.py +1 -0
  560. scienceflow/research/state/knowledge/memory/context/agent_compaction.py +76 -0
  561. scienceflow/research/state/knowledge/memory/context/agent_context_projection.py +314 -0
  562. scienceflow/research/state/knowledge/memory/context/agent_context_rules.py +88 -0
  563. scienceflow/research/state/knowledge/memory/context/protected_context.py +198 -0
  564. scienceflow/research/state/knowledge/memory/core/__init__.py +1 -0
  565. scienceflow/research/state/knowledge/memory/core/compactor.py +136 -0
  566. scienceflow/research/state/knowledge/memory/core/contracts.py +62 -0
  567. scienceflow/research/state/knowledge/memory/core/policy.py +60 -0
  568. scienceflow/research/state/knowledge/memory/core/service.py +91 -0
  569. scienceflow/research/state/knowledge/memory/records/__init__.py +1 -0
  570. scienceflow/research/state/knowledge/memory/records/agent_records.py +353 -0
  571. scienceflow/research/state/knowledge/memory/records/stage_memory.py +634 -0
  572. scienceflow/research/state/knowledge/prompt/__init__.py +9 -0
  573. scienceflow/research/state/knowledge/prompt/builder.py +51 -0
  574. scienceflow/research/state/knowledge/prompt/contracts.py +45 -0
  575. scienceflow/research/state/knowledge/skills/__init__.py +30 -0
  576. scienceflow/research/state/knowledge/skills/catalog/__init__.py +1 -0
  577. scienceflow/research/state/knowledge/skills/catalog/base.py +77 -0
  578. scienceflow/research/state/knowledge/skills/catalog/matcher.py +80 -0
  579. scienceflow/research/state/knowledge/skills/catalog/paths.py +22 -0
  580. scienceflow/research/state/knowledge/skills/catalog/registry.py +151 -0
  581. scienceflow/research/state/knowledge/skills/runtime/__init__.py +1 -0
  582. scienceflow/research/state/knowledge/skills/runtime/injector.py +41 -0
  583. scienceflow/research/state/knowledge/skills/runtime/tool.py +228 -0
  584. scienceflow/research/state/repl_context.py +251 -0
  585. scienceflow/research/state/workspace/__init__.py +19 -0
  586. scienceflow/research/state/workspace/adapters/__init__.py +1 -0
  587. scienceflow/research/state/workspace/adapters/agent_runtime.py +336 -0
  588. scienceflow/research/state/workspace/adapters/lnr.py +16 -0
  589. scienceflow/research/state/workspace/adapters/path_hygiene.py +418 -0
  590. scienceflow/research/state/workspace/session/__init__.py +1 -0
  591. scienceflow/research/state/workspace/session/agent_contracts.py +27 -0
  592. scienceflow/research/state/workspace/session/agent_session.py +83 -0
  593. scienceflow/research/state/workspace/session/lifecycle.py +72 -0
  594. scienceflow/research/state/workspace/session/service.py +97 -0
  595. scienceflow/research/state/workspace/storage/__init__.py +1 -0
  596. scienceflow/research/state/workspace/storage/git.py +759 -0
  597. scienceflow/research/state/workspace/storage/transactions.py +303 -0
  598. scienceflow/runtime/__init__.py +3 -0
  599. scienceflow/runtime/composition.py +84 -0
  600. scienceflow/runtime/core/__init__.py +1 -0
  601. scienceflow/runtime/core/kernel/__init__.py +56 -0
  602. scienceflow/runtime/core/kernel/hooks.py +366 -0
  603. scienceflow/runtime/core/kernel/journal.py +99 -0
  604. scienceflow/runtime/core/kernel/state_machines.py +288 -0
  605. scienceflow/runtime/core/process/__init__.py +35 -0
  606. scienceflow/runtime/core/process/commands.py +95 -0
  607. scienceflow/runtime/core/process/utils.py +45 -0
  608. scienceflow/runtime/core/stage/__init__.py +37 -0
  609. scienceflow/runtime/core/stage/contracts.py +93 -0
  610. scienceflow/runtime/core/stage/coordinator.py +325 -0
  611. scienceflow/runtime/core/stage/machine.py +107 -0
  612. scienceflow/runtime/core/support/__init__.py +3 -0
  613. scienceflow/runtime/core/support/artifact_io.py +56 -0
  614. scienceflow/runtime/core/support/node_paths.py +81 -0
  615. scienceflow/runtime/core/support/system_resources.py +209 -0
  616. scienceflow/runtime/environment.py +79 -0
  617. scienceflow/runtime/events.py +130 -0
  618. scienceflow/runtime/observability/__init__.py +3 -0
  619. scienceflow/runtime/observability/agent_io/__init__.py +13 -0
  620. scienceflow/runtime/observability/agent_io/interaction_log.py +250 -0
  621. scienceflow/runtime/observability/agent_io/interaction_log_policy.py +129 -0
  622. scienceflow/runtime/observability/agent_tool_feedback.py +211 -0
  623. scienceflow/runtime/observability/formatting.py +25 -0
  624. scienceflow/runtime/observability/interaction_log.py +647 -0
  625. scienceflow/runtime/observability/logging.py +103 -0
  626. scienceflow/runtime/observability/monitoring/__init__.py +20 -0
  627. scienceflow/runtime/observability/monitoring/metrics/__init__.py +1 -0
  628. scienceflow/runtime/observability/monitoring/metrics/cpu_monitor.py +124 -0
  629. scienceflow/runtime/observability/monitoring/metrics/gpu_monitor.py +101 -0
  630. scienceflow/runtime/observability/monitoring/metrics/performance_analyzer.py +160 -0
  631. scienceflow/runtime/observability/monitoring/process/__init__.py +1 -0
  632. scienceflow/runtime/observability/monitoring/process/probes.py +44 -0
  633. scienceflow/runtime/observability/monitoring/process/process_observer.py +41 -0
  634. scienceflow/runtime/observability/monitoring/process/process_tracker.py +82 -0
  635. scienceflow/runtime/observability/monitoring/runtime/__init__.py +1 -0
  636. scienceflow/runtime/observability/monitoring/runtime/contracts.py +25 -0
  637. scienceflow/runtime/observability/monitoring/runtime/hooks.py +58 -0
  638. scienceflow/runtime/observability/monitoring/runtime/service.py +85 -0
  639. scienceflow/runtime/observability/telemetry/__init__.py +7 -0
  640. scienceflow/runtime/observability/telemetry/agent/__init__.py +1 -0
  641. scienceflow/runtime/observability/telemetry/agent/agent_call.py +66 -0
  642. scienceflow/runtime/observability/telemetry/agent/audit/__init__.py +5 -0
  643. scienceflow/runtime/observability/telemetry/agent/audit/runtime.py +204 -0
  644. scienceflow/runtime/observability/telemetry/agent/llm_call_adapter.py +93 -0
  645. scienceflow/runtime/observability/telemetry/agent/llm_config_summary.py +349 -0
  646. scienceflow/runtime/observability/telemetry/agent/llm_cost.py +179 -0
  647. scienceflow/runtime/observability/telemetry/agent/llm_usage_adapter.py +48 -0
  648. scienceflow/runtime/observability/telemetry/journal/__init__.py +1 -0
  649. scienceflow/runtime/observability/telemetry/journal/contracts.py +26 -0
  650. scienceflow/runtime/observability/telemetry/journal/correlation.py +114 -0
  651. scienceflow/runtime/observability/telemetry/journal/sinks.py +29 -0
  652. scienceflow/runtime/observability/telemetry/trace/__init__.py +1 -0
  653. scienceflow/runtime/observability/telemetry/trace/stage_tool_index.py +66 -0
  654. scienceflow/runtime/observability/telemetry/trace/time_trace.py +367 -0
  655. scienceflow/runtime/observability/telemetry/trace/time_trace_summary.py +205 -0
  656. scienceflow/runtime/parallel/__init__.py +1 -0
  657. scienceflow/runtime/parallel/config/__init__.py +1 -0
  658. scienceflow/runtime/parallel/config/manifest.py +414 -0
  659. scienceflow/runtime/parallel/config/models.py +66 -0
  660. scienceflow/runtime/parallel/config/preparation.py +229 -0
  661. scienceflow/runtime/parallel/config/pure.py +58 -0
  662. scienceflow/runtime/parallel/control/__init__.py +6 -0
  663. scienceflow/runtime/parallel/control/registry.py +61 -0
  664. scienceflow/runtime/parallel/control/resource_claims.py +64 -0
  665. scienceflow/runtime/parallel/control/selection.py +93 -0
  666. scienceflow/runtime/parallel/control/service.py +171 -0
  667. scienceflow/runtime/parallel/control/worker.py +133 -0
  668. scienceflow/runtime/parallel/execution/__init__.py +1 -0
  669. scienceflow/runtime/parallel/execution/base.py +23 -0
  670. scienceflow/runtime/parallel/execution/construction.py +203 -0
  671. scienceflow/runtime/parallel/execution/runner.py +56 -0
  672. scienceflow/runtime/parallel/execution/scheduler.py +94 -0
  673. scienceflow/runtime/parallel/execution/subprocess.py +103 -0
  674. scienceflow/runtime/parallel/service.py +56 -0
  675. scienceflow/runtime/parallel/state/__init__.py +1 -0
  676. scienceflow/runtime/parallel/state/lifecycle.py +215 -0
  677. scienceflow/runtime/parallel/state/result.py +21 -0
  678. scienceflow/runtime/parallel/state/resume.py +74 -0
  679. scienceflow/runtime/parallel/state/subprocess_runtime.py +322 -0
  680. scienceflow/runtime/safety/__init__.py +42 -0
  681. scienceflow/runtime/safety/execution/__init__.py +1 -0
  682. scienceflow/runtime/safety/execution/agent_runtime/__init__.py +1 -0
  683. scienceflow/runtime/safety/execution/agent_runtime/edit_guard.py +176 -0
  684. scienceflow/runtime/safety/execution/agent_runtime/tool_base.py +51 -0
  685. scienceflow/runtime/safety/execution/agent_runtime/tool_bundle_policy.py +62 -0
  686. scienceflow/runtime/safety/execution/agent_runtime/tool_composition.py +243 -0
  687. scienceflow/runtime/safety/execution/evaluation_process.py +248 -0
  688. scienceflow/runtime/safety/execution/interpreter.py +192 -0
  689. scienceflow/runtime/safety/execution/sandbox.py +251 -0
  690. scienceflow/runtime/safety/policy/__init__.py +1 -0
  691. scienceflow/runtime/safety/policy/agent_policies/__init__.py +13 -0
  692. scienceflow/runtime/safety/policy/agent_policies/artifacts.py +711 -0
  693. scienceflow/runtime/safety/policy/agent_policies/bash_command_classifier.py +76 -0
  694. scienceflow/runtime/safety/policy/agent_policies/bash_utils.py +171 -0
  695. scienceflow/runtime/safety/policy/agent_policies/guards.py +1040 -0
  696. scienceflow/runtime/safety/policy/code_guard.py +276 -0
  697. scienceflow/runtime/safety/policy/execution_policy.py +1191 -0
  698. scienceflow/runtime/safety/policy/leakage_detector.py +588 -0
  699. scienceflow/runtime/safety/policy/stdout_checker.py +161 -0
  700. scienceflow/runtime/safety/resource/__init__.py +76 -0
  701. scienceflow/runtime/safety/resource/lifecycle/__init__.py +1 -0
  702. scienceflow/runtime/safety/resource/lifecycle/artifacts.py +320 -0
  703. scienceflow/runtime/safety/resource/lifecycle/completion.py +83 -0
  704. scienceflow/runtime/safety/resource/lifecycle/gpu_sublease.py +172 -0
  705. scienceflow/runtime/safety/resource/lifecycle/process_lifecycle.py +124 -0
  706. scienceflow/runtime/safety/resource/review/__init__.py +1 -0
  707. scienceflow/runtime/safety/resource/review/review_boundary.py +30 -0
  708. scienceflow/runtime/safety/resource/review/review_outcome.py +66 -0
  709. scienceflow/runtime/safety/resource/review/review_signal.py +238 -0
  710. scienceflow/runtime/safety/resource/review/review_state.py +533 -0
  711. scienceflow/runtime/safety/resource/review/signals.py +97 -0
  712. scienceflow/runtime/safety/tooling/__init__.py +1 -0
  713. scienceflow/runtime/safety/tooling/bash/__init__.py +43 -0
  714. scienceflow/runtime/safety/tooling/bash/core/__init__.py +1 -0
  715. scienceflow/runtime/safety/tooling/bash/core/pipeline_preparation.py +298 -0
  716. scienceflow/runtime/safety/tooling/bash/core/pure.py +51 -0
  717. scienceflow/runtime/safety/tooling/bash/core/request_builder.py +336 -0
  718. scienceflow/runtime/safety/tooling/bash/core/shared.py +237 -0
  719. scienceflow/runtime/safety/tooling/bash/core/tool.py +117 -0
  720. scienceflow/runtime/safety/tooling/bash/monitor/__init__.py +1 -0
  721. scienceflow/runtime/safety/tooling/bash/monitor/effects.py +196 -0
  722. scienceflow/runtime/safety/tooling/bash/monitor/execution.py +151 -0
  723. scienceflow/runtime/safety/tooling/bash/monitor/guard.py +535 -0
  724. scienceflow/runtime/safety/tooling/bash/monitor/stream.py +301 -0
  725. scienceflow/runtime/safety/tooling/bash/policy/__init__.py +1 -0
  726. scienceflow/runtime/safety/tooling/bash/policy/admission.py +595 -0
  727. scienceflow/runtime/safety/tooling/bash/policy/output.py +298 -0
  728. scienceflow/runtime/safety/tooling/bash/process/__init__.py +1 -0
  729. scienceflow/runtime/safety/tooling/bash/process/pipeline.py +154 -0
  730. scienceflow/runtime/safety/tooling/bash/process/start.py +118 -0
  731. scienceflow/runtime/safety/tooling/bash/process/streaming.py +228 -0
  732. scienceflow/runtime/safety/tooling/bash/runtime/__init__.py +1 -0
  733. scienceflow/runtime/safety/tooling/bash/runtime/tool_runtime.py +78 -0
  734. scienceflow/runtime/safety/tooling/resource_management/__init__.py +1 -0
  735. scienceflow/runtime/safety/tooling/resource_management/resource_policy.py +650 -0
  736. scienceflow/runtime/safety/tooling/resource_management/resource_timeout_feedback.py +5 -0
  737. scienceflow/runtime/safety/tooling/resource_management/resource_wait.py +85 -0
  738. scienceflow/runtime/safety/tooling/resource_management/signals.py +462 -0
  739. scienceflow/runtime/safety/tooling/resource_management/spawn_feedback.py +5 -0
  740. scienceflow/runtime/safety/tooling/workspace/__init__.py +1 -0
  741. scienceflow/runtime/safety/tooling/workspace/progress.py +260 -0
  742. scienceflow/runtime/safety/tooling/workspace/shadow_workspace.py +276 -0
  743. scienceflow/runtime/safety/tooling/workspace/shell_guards.py +1173 -0
  744. scienceflow/runtime/safety/tooling/workspace/shell_output.py +41 -0
  745. scienceflow/runtime/task_package.py +333 -0
  746. scienceflow/runtime/workflow.py +134 -0
  747. scienceflow-0.2.0b3.dist-info/METADATA +364 -0
  748. scienceflow-0.2.0b3.dist-info/RECORD +951 -0
  749. scienceflow-0.2.0b3.dist-info/WHEEL +5 -0
  750. scienceflow-0.2.0b3.dist-info/entry_points.txt +2 -0
  751. scienceflow-0.2.0b3.dist-info/licenses/LICENSE +9 -0
  752. scienceflow-0.2.0b3.dist-info/top_level.txt +2 -0
  753. tasks/README.md +10 -0
  754. tasks/ml/mlebench/3d-object-detection-for-autonomous-vehicles/description_lite.md +29 -0
  755. tasks/ml/mlebench/3d-object-detection-for-autonomous-vehicles/task.yaml +1 -0
  756. tasks/ml/mlebench/AI4Code/description_lite.md +29 -0
  757. tasks/ml/mlebench/AI4Code/task.yaml +1 -0
  758. tasks/ml/mlebench/_shared/evaluator.py +122 -0
  759. tasks/ml/mlebench/_shared/task_defaults.yaml +15 -0
  760. tasks/ml/mlebench/aerial-cactus-identification/description_lite.md +29 -0
  761. tasks/ml/mlebench/aerial-cactus-identification/task.yaml +1 -0
  762. tasks/ml/mlebench/alaska2-image-steganalysis/description_lite.md +30 -0
  763. tasks/ml/mlebench/alaska2-image-steganalysis/task.yaml +1 -0
  764. tasks/ml/mlebench/aptos2019-blindness-detection/description_lite.md +28 -0
  765. tasks/ml/mlebench/aptos2019-blindness-detection/task.yaml +1 -0
  766. tasks/ml/mlebench/billion-word-imputation/description_lite.md +30 -0
  767. tasks/ml/mlebench/billion-word-imputation/task.yaml +3 -0
  768. tasks/ml/mlebench/bms-molecular-translation/description_lite.md +29 -0
  769. tasks/ml/mlebench/bms-molecular-translation/task.yaml +1 -0
  770. tasks/ml/mlebench/cassava-leaf-disease-classification/description_lite.md +28 -0
  771. tasks/ml/mlebench/cassava-leaf-disease-classification/task.yaml +3 -0
  772. tasks/ml/mlebench/cdiscount-image-classification-challenge/description_lite.md +89 -0
  773. tasks/ml/mlebench/cdiscount-image-classification-challenge/task.yaml +3 -0
  774. tasks/ml/mlebench/chaii-hindi-and-tamil-question-answering/description_lite.md +29 -0
  775. tasks/ml/mlebench/chaii-hindi-and-tamil-question-answering/task.yaml +1 -0
  776. tasks/ml/mlebench/champs-scalar-coupling/description_lite.md +29 -0
  777. tasks/ml/mlebench/champs-scalar-coupling/task.yaml +1 -0
  778. tasks/ml/mlebench/competition_categories.json +76 -0
  779. tasks/ml/mlebench/denoising-dirty-documents/description_lite.md +30 -0
  780. tasks/ml/mlebench/denoising-dirty-documents/task.yaml +1 -0
  781. tasks/ml/mlebench/detecting-insults-in-social-commentary/description_lite.md +29 -0
  782. tasks/ml/mlebench/detecting-insults-in-social-commentary/task.yaml +1 -0
  783. tasks/ml/mlebench/dog-breed-identification/description_lite.md +29 -0
  784. tasks/ml/mlebench/dog-breed-identification/task.yaml +1 -0
  785. tasks/ml/mlebench/dogs-vs-cats-redux-kernels-edition/description_lite.md +29 -0
  786. tasks/ml/mlebench/dogs-vs-cats-redux-kernels-edition/task.yaml +1 -0
  787. tasks/ml/mlebench/facebook-recruiting-iii-keyword-extraction/description_lite.md +32 -0
  788. tasks/ml/mlebench/facebook-recruiting-iii-keyword-extraction/task.yaml +1 -0
  789. tasks/ml/mlebench/freesound-audio-tagging-2019/description_lite.md +27 -0
  790. tasks/ml/mlebench/freesound-audio-tagging-2019/task.yaml +1 -0
  791. tasks/ml/mlebench/google-quest-challenge/description_lite.md +27 -0
  792. tasks/ml/mlebench/google-quest-challenge/task.yaml +1 -0
  793. tasks/ml/mlebench/google-research-identify-contrails-reduce-global-warming/description_lite.md +35 -0
  794. tasks/ml/mlebench/google-research-identify-contrails-reduce-global-warming/task.yaml +1 -0
  795. tasks/ml/mlebench/h-and-m-personalized-fashion-recommendations/description_lite.md +32 -0
  796. tasks/ml/mlebench/h-and-m-personalized-fashion-recommendations/task.yaml +1 -0
  797. tasks/ml/mlebench/herbarium-2020-fgvc7/description_lite.md +28 -0
  798. tasks/ml/mlebench/herbarium-2020-fgvc7/task.yaml +1 -0
  799. tasks/ml/mlebench/herbarium-2021-fgvc8/description_lite.md +28 -0
  800. tasks/ml/mlebench/herbarium-2021-fgvc8/task.yaml +1 -0
  801. tasks/ml/mlebench/herbarium-2022-fgvc9/description_lite.md +28 -0
  802. tasks/ml/mlebench/herbarium-2022-fgvc9/task.yaml +1 -0
  803. tasks/ml/mlebench/histopathologic-cancer-detection/description_lite.md +29 -0
  804. tasks/ml/mlebench/histopathologic-cancer-detection/task.yaml +1 -0
  805. tasks/ml/mlebench/hms-harmful-brain-activity-classification/description_lite.md +29 -0
  806. tasks/ml/mlebench/hms-harmful-brain-activity-classification/task.yaml +1 -0
  807. tasks/ml/mlebench/hotel-id-2021-fgvc8/description_lite.md +29 -0
  808. tasks/ml/mlebench/hotel-id-2021-fgvc8/task.yaml +1 -0
  809. tasks/ml/mlebench/hubmap-kidney-segmentation/description_lite.md +30 -0
  810. tasks/ml/mlebench/hubmap-kidney-segmentation/task.yaml +3 -0
  811. tasks/ml/mlebench/icecube-neutrinos-in-deep-ice/description_lite.md +28 -0
  812. tasks/ml/mlebench/icecube-neutrinos-in-deep-ice/task.yaml +1 -0
  813. tasks/ml/mlebench/imet-2020-fgvc7/description_lite.md +29 -0
  814. tasks/ml/mlebench/imet-2020-fgvc7/task.yaml +1 -0
  815. tasks/ml/mlebench/inaturalist-2019-fgvc6/description_lite.md +29 -0
  816. tasks/ml/mlebench/inaturalist-2019-fgvc6/task.yaml +1 -0
  817. tasks/ml/mlebench/iwildcam-2019-fgvc6/description_lite.md +28 -0
  818. tasks/ml/mlebench/iwildcam-2019-fgvc6/task.yaml +1 -0
  819. tasks/ml/mlebench/iwildcam-2020-fgvc7/description_lite.md +28 -0
  820. tasks/ml/mlebench/iwildcam-2020-fgvc7/task.yaml +1 -0
  821. tasks/ml/mlebench/jigsaw-toxic-comment-classification-challenge/description_lite.md +29 -0
  822. tasks/ml/mlebench/jigsaw-toxic-comment-classification-challenge/task.yaml +1 -0
  823. tasks/ml/mlebench/jigsaw-unintended-bias-in-toxicity-classification/description_lite.md +26 -0
  824. tasks/ml/mlebench/jigsaw-unintended-bias-in-toxicity-classification/task.yaml +1 -0
  825. tasks/ml/mlebench/kuzushiji-recognition/description_lite.md +28 -0
  826. tasks/ml/mlebench/kuzushiji-recognition/task.yaml +1 -0
  827. tasks/ml/mlebench/leaf-classification/description_lite.md +28 -0
  828. tasks/ml/mlebench/leaf-classification/task.yaml +1 -0
  829. tasks/ml/mlebench/learning-agency-lab-automated-essay-scoring-2/description_lite.md +29 -0
  830. tasks/ml/mlebench/learning-agency-lab-automated-essay-scoring-2/task.yaml +1 -0
  831. tasks/ml/mlebench/lmsys-chatbot-arena/description_lite.md +29 -0
  832. tasks/ml/mlebench/lmsys-chatbot-arena/task.yaml +1 -0
  833. tasks/ml/mlebench/mlsp-2013-birds/description_lite.md +27 -0
  834. tasks/ml/mlebench/mlsp-2013-birds/task.yaml +1 -0
  835. tasks/ml/mlebench/multi-modal-gesture-recognition/description_lite.md +29 -0
  836. tasks/ml/mlebench/multi-modal-gesture-recognition/task.yaml +1 -0
  837. tasks/ml/mlebench/new-york-city-taxi-fare-prediction/description_lite.md +39 -0
  838. tasks/ml/mlebench/new-york-city-taxi-fare-prediction/task.yaml +1 -0
  839. tasks/ml/mlebench/nfl-player-contact-detection/description_lite.md +31 -0
  840. tasks/ml/mlebench/nfl-player-contact-detection/task.yaml +1 -0
  841. tasks/ml/mlebench/nomad2018-predict-transparent-conductors/description_lite.md +29 -0
  842. tasks/ml/mlebench/nomad2018-predict-transparent-conductors/task.yaml +1 -0
  843. tasks/ml/mlebench/osic-pulmonary-fibrosis-progression/description_lite.md +37 -0
  844. tasks/ml/mlebench/osic-pulmonary-fibrosis-progression/task.yaml +1 -0
  845. tasks/ml/mlebench/petfinder-pawpularity-score/description_lite.md +29 -0
  846. tasks/ml/mlebench/petfinder-pawpularity-score/task.yaml +3 -0
  847. tasks/ml/mlebench/plant-pathology-2020-fgvc7/description_lite.md +30 -0
  848. tasks/ml/mlebench/plant-pathology-2020-fgvc7/task.yaml +1 -0
  849. tasks/ml/mlebench/plant-pathology-2021-fgvc8/description_lite.md +28 -0
  850. tasks/ml/mlebench/plant-pathology-2021-fgvc8/task.yaml +1 -0
  851. tasks/ml/mlebench/predict-volcanic-eruptions-ingv-oe/description_lite.md +27 -0
  852. tasks/ml/mlebench/predict-volcanic-eruptions-ingv-oe/task.yaml +1 -0
  853. tasks/ml/mlebench/random-acts-of-pizza/description_lite.md +29 -0
  854. tasks/ml/mlebench/random-acts-of-pizza/task.yaml +1 -0
  855. tasks/ml/mlebench/ranzcr-clip-catheter-line-classification/description_lite.md +29 -0
  856. tasks/ml/mlebench/ranzcr-clip-catheter-line-classification/task.yaml +1 -0
  857. tasks/ml/mlebench/rsna-2022-cervical-spine-fracture-detection/description_lite.md +28 -0
  858. tasks/ml/mlebench/rsna-2022-cervical-spine-fracture-detection/task.yaml +1 -0
  859. tasks/ml/mlebench/rsna-breast-cancer-detection/description_lite.md +73 -0
  860. tasks/ml/mlebench/rsna-breast-cancer-detection/task.yaml +1 -0
  861. tasks/ml/mlebench/rsna-miccai-brain-tumor-radiogenomic-classification/description_lite.md +29 -0
  862. tasks/ml/mlebench/rsna-miccai-brain-tumor-radiogenomic-classification/task.yaml +1 -0
  863. tasks/ml/mlebench/seti-breakthrough-listen/description_lite.md +28 -0
  864. tasks/ml/mlebench/seti-breakthrough-listen/task.yaml +3 -0
  865. tasks/ml/mlebench/siim-covid19-detection/description_lite.md +29 -0
  866. tasks/ml/mlebench/siim-covid19-detection/task.yaml +1 -0
  867. tasks/ml/mlebench/siim-isic-melanoma-classification/description_lite.md +29 -0
  868. tasks/ml/mlebench/siim-isic-melanoma-classification/task.yaml +1 -0
  869. tasks/ml/mlebench/smartphone-decimeter-2022/description_lite.md +35 -0
  870. tasks/ml/mlebench/smartphone-decimeter-2022/task.yaml +1 -0
  871. tasks/ml/mlebench/spooky-author-identification/description_lite.md +29 -0
  872. tasks/ml/mlebench/spooky-author-identification/task.yaml +1 -0
  873. tasks/ml/mlebench/stanford-covid-vaccine/description_lite.md +29 -0
  874. tasks/ml/mlebench/stanford-covid-vaccine/task.yaml +1 -0
  875. tasks/ml/mlebench/statoil-iceberg-classifier-challenge/description_lite.md +30 -0
  876. tasks/ml/mlebench/statoil-iceberg-classifier-challenge/task.yaml +1 -0
  877. tasks/ml/mlebench/tabular-playground-series-dec-2021/description_lite.md +28 -0
  878. tasks/ml/mlebench/tabular-playground-series-dec-2021/task.yaml +1 -0
  879. tasks/ml/mlebench/tabular-playground-series-may-2022/description_lite.md +28 -0
  880. tasks/ml/mlebench/tabular-playground-series-may-2022/task.yaml +1 -0
  881. tasks/ml/mlebench/tensorflow-speech-recognition-challenge/description_lite.md +28 -0
  882. tasks/ml/mlebench/tensorflow-speech-recognition-challenge/task.yaml +1 -0
  883. tasks/ml/mlebench/tensorflow2-question-answering/description_lite.md +31 -0
  884. tasks/ml/mlebench/tensorflow2-question-answering/task.yaml +1 -0
  885. tasks/ml/mlebench/text-normalization-challenge-english-language/description_lite.md +31 -0
  886. tasks/ml/mlebench/text-normalization-challenge-english-language/task.yaml +1 -0
  887. tasks/ml/mlebench/text-normalization-challenge-russian-language/description_lite.md +28 -0
  888. tasks/ml/mlebench/text-normalization-challenge-russian-language/task.yaml +1 -0
  889. tasks/ml/mlebench/tgs-salt-identification-challenge/description_lite.md +29 -0
  890. tasks/ml/mlebench/tgs-salt-identification-challenge/task.yaml +1 -0
  891. tasks/ml/mlebench/the-icml-2013-whale-challenge-right-whale-redux/description_lite.md +27 -0
  892. tasks/ml/mlebench/the-icml-2013-whale-challenge-right-whale-redux/task.yaml +1 -0
  893. tasks/ml/mlebench/tweet-sentiment-extraction/description_lite.md +29 -0
  894. tasks/ml/mlebench/tweet-sentiment-extraction/task.yaml +1 -0
  895. tasks/ml/mlebench/us-patent-phrase-to-phrase-matching/description_lite.md +29 -0
  896. tasks/ml/mlebench/us-patent-phrase-to-phrase-matching/task.yaml +1 -0
  897. tasks/ml/mlebench/uw-madison-gi-tract-image-segmentation/description_lite.md +33 -0
  898. tasks/ml/mlebench/uw-madison-gi-tract-image-segmentation/task.yaml +1 -0
  899. tasks/ml/mlebench/ventilator-pressure-prediction/description_lite.md +29 -0
  900. tasks/ml/mlebench/ventilator-pressure-prediction/task.yaml +1 -0
  901. tasks/ml/mlebench/vesuvius-challenge-ink-detection/description_lite.md +28 -0
  902. tasks/ml/mlebench/vesuvius-challenge-ink-detection/task.yaml +1 -0
  903. tasks/ml/mlebench/vinbigdata-chest-xray-abnormalities-detection/description_lite.md +29 -0
  904. tasks/ml/mlebench/vinbigdata-chest-xray-abnormalities-detection/task.yaml +1 -0
  905. tasks/ml/mlebench/whale-categorization-playground/description_lite.md +29 -0
  906. tasks/ml/mlebench/whale-categorization-playground/task.yaml +1 -0
  907. tasks/opt_solver/_shared/task_defaults.yaml +2 -0
  908. tasks/opt_solver/_tools/prepare_math_opt_solver_tasks.py +154 -0
  909. tasks/opt_solver/circle-packing/description_lite.md +30 -0
  910. tasks/opt_solver/circle-packing/evaluator.py +192 -0
  911. tasks/opt_solver/circle-packing/task.yaml +24 -0
  912. tasks/opt_solver/circle-packing/validation/invalid_solution.json +5 -0
  913. tasks/opt_solver/circle-packing/validation/valid_solution.json +10 -0
  914. tasks/opt_solver/kttsp/description_lite.md +7 -0
  915. tasks/opt_solver/kttsp/evaluator.py +277 -0
  916. tasks/opt_solver/kttsp/task.yaml +17 -0
  917. tasks/opt_solver/ratio-minimization/description_lite.md +41 -0
  918. tasks/opt_solver/ratio-minimization/evaluator.py +119 -0
  919. tasks/opt_solver/ratio-minimization/task.yaml +18 -0
  920. tasks/opt_solver/uncertainty-ineq/description_lite.md +36 -0
  921. tasks/opt_solver/uncertainty-ineq/evaluator.py +179 -0
  922. tasks/opt_solver/uncertainty-ineq/task.yaml +15 -0
  923. tasks/sci_modeling_bench/README.md +64 -0
  924. tasks/sci_modeling_bench/_shared/common.py +177 -0
  925. tasks/sci_modeling_bench/_shared/evaluator.py +625 -0
  926. tasks/sci_modeling_bench/_shared/prepare_data.py +492 -0
  927. tasks/sci_modeling_bench/_shared/query_budget.py +193 -0
  928. tasks/sci_modeling_bench/drugmatrix-chloride-ranking/description_lite.md +24 -0
  929. tasks/sci_modeling_bench/drugmatrix-chloride-ranking/task.yaml +40 -0
  930. tasks/sci_modeling_bench/drugmatrix-creatinine-ranking/description_lite.md +24 -0
  931. tasks/sci_modeling_bench/drugmatrix-creatinine-ranking/task.yaml +40 -0
  932. tasks/sci_modeling_bench/drugmatrix-mch-ranking/description_lite.md +25 -0
  933. tasks/sci_modeling_bench/drugmatrix-mch-ranking/task.yaml +40 -0
  934. tasks/sci_modeling_bench/drugmatrix-mchc-ranking/description_lite.md +26 -0
  935. tasks/sci_modeling_bench/drugmatrix-mchc-ranking/task.yaml +40 -0
  936. tasks/sci_modeling_bench/drugmatrix-phosphorus-ranking/description_lite.md +23 -0
  937. tasks/sci_modeling_bench/drugmatrix-phosphorus-ranking/task.yaml +40 -0
  938. tasks/sci_modeling_bench/drugmatrix-sodium-ranking/description_lite.md +26 -0
  939. tasks/sci_modeling_bench/drugmatrix-sodium-ranking/task.yaml +40 -0
  940. tasks/sci_modeling_bench/gfp-ranking/description_lite.md +44 -0
  941. tasks/sci_modeling_bench/gfp-ranking/task.yaml +48 -0
  942. tasks/sci_modeling_bench/hopper-controller-ranking/description_lite.md +41 -0
  943. tasks/sci_modeling_bench/hopper-controller-ranking/task.yaml +48 -0
  944. tasks/sci_modeling_bench/superconductor-ranking/description_lite.md +40 -0
  945. tasks/sci_modeling_bench/superconductor-ranking/task.yaml +48 -0
  946. tasks/sci_modeling_bench/tfbind10-pho4-black-box/description_lite.md +46 -0
  947. tasks/sci_modeling_bench/tfbind10-pho4-black-box/task.yaml +47 -0
  948. tasks/sci_modeling_bench/tfbind8-black-box/description_lite.md +40 -0
  949. tasks/sci_modeling_bench/tfbind8-black-box/task.yaml +50 -0
  950. tasks/sci_modeling_bench/utr-mrl-ranking/description_lite.md +44 -0
  951. tasks/sci_modeling_bench/utr-mrl-ranking/task.yaml +48 -0
@@ -0,0 +1,13 @@
1
+ # Copyright (C) 2026. Huawei Technologies Co., Ltd. All rights reserved.
2
+ #
3
+ # This program is free software; you can redistribute it and/or modify it under
4
+ # the terms of the MIT license.
5
+ #
6
+ # This program is distributed in the hope that it will be useful, but WITHOUT ANY
7
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
8
+ # PARTICULAR PURPOSE. See the MIT License for more details.
9
+ #
10
+ # The name of Huawei and the contributors may not be used to endorse or promote
11
+ # products derived from this software without specific prior written permission.
12
+
13
+ """ScienceFlow scientific-agent package."""
@@ -0,0 +1,120 @@
1
+ """Lazy public surface for ScienceFlow's domain-specific agent extensions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from importlib import import_module
6
+ from typing import Any
7
+
8
+ _EXPORTS = {
9
+ "AgentCallbackPorts": ("scienceflow.agent.core.ports.callback_ports", "AgentCallbackPorts"),
10
+ "ScienceAgent": ("scienceflow.agent.core.runtime.agent", "ScienceAgent"),
11
+ "_DEFAULT_SYSTEM": ("scienceflow.agent.prompts.system_prompt", "_DEFAULT_SYSTEM"),
12
+ "_default_system_prompt": (
13
+ "scienceflow.agent.prompts.system_prompt",
14
+ "_default_system_prompt",
15
+ ),
16
+ "_extract_python_code_from_assistant_text": (
17
+ "scienceflow.agent.prompts.write_coaching",
18
+ "_extract_python_code_from_assistant_text",
19
+ ),
20
+ "_bash_command_parallel_safe": (
21
+ "scienceflow.runtime.safety.policy.agent_policies.bash_utils",
22
+ "_bash_command_parallel_safe",
23
+ ),
24
+ "_embedded_failure_user_message": (
25
+ "scienceflow.runtime.safety.policy.agent_policies.bash_utils",
26
+ "_embedded_failure_user_message",
27
+ ),
28
+ "_looks_like_quick_test_solution_run": (
29
+ "scienceflow.runtime.safety.policy.agent_policies.bash_utils",
30
+ "_looks_like_quick_test_solution_run",
31
+ ),
32
+ "_looks_like_write_placeholder_mimicry": (
33
+ "scienceflow.runtime.safety.policy.agent_policies.bash_utils",
34
+ "_looks_like_write_placeholder_mimicry",
35
+ ),
36
+ "_WS_LOG_RECOVERY_CAP": (
37
+ "scienceflow.foundation.config.runtime.agent_constants",
38
+ "_WS_LOG_RECOVERY_CAP",
39
+ ),
40
+ "_WS_LOG_USER_CAP": ("scienceflow.foundation.config.runtime.agent_constants", "_WS_LOG_USER_CAP"),
41
+ "_WS_LOG_BODY_CAP": (
42
+ "scienceflow.runtime.observability.agent_io.interaction_log",
43
+ "_WS_LOG_BODY_CAP",
44
+ ),
45
+ "_WS_LOG_MAX_LINES": (
46
+ "scienceflow.runtime.observability.agent_io.interaction_log",
47
+ "_WS_LOG_MAX_LINES",
48
+ ),
49
+ "_WS_LOG_TOOL_CALL_SINGLE_CAP": (
50
+ "scienceflow.runtime.observability.agent_io.interaction_log",
51
+ "_WS_LOG_TOOL_CALL_SINGLE_CAP",
52
+ ),
53
+ "_WS_LOG_TOOL_RESULT_CAP": (
54
+ "scienceflow.runtime.observability.agent_io.interaction_log",
55
+ "_WS_LOG_TOOL_RESULT_CAP",
56
+ ),
57
+ "format_tool_call_lines_for_interaction_log": (
58
+ "scienceflow.runtime.observability.agent_io.interaction_log",
59
+ "format_tool_call_lines_for_interaction_log",
60
+ ),
61
+ "format_tool_result_for_interaction_log": (
62
+ "scienceflow.runtime.observability.agent_io.interaction_log",
63
+ "format_tool_result_for_interaction_log",
64
+ ),
65
+ "tool_result_text_for_interaction_log": (
66
+ "scienceflow.runtime.observability.agent_io.interaction_log",
67
+ "tool_result_text_for_interaction_log",
68
+ ),
69
+ "truncate_for_interaction_log": (
70
+ "scienceflow.runtime.observability.agent_io.interaction_log",
71
+ "truncate_for_interaction_log",
72
+ ),
73
+ "InteractionLogPolicy": (
74
+ "scienceflow.runtime.observability.agent_io.interaction_log_policy",
75
+ "InteractionLogPolicy",
76
+ ),
77
+ "resolve_interaction_log_policy": (
78
+ "scienceflow.runtime.observability.agent_io.interaction_log_policy",
79
+ "resolve_interaction_log_policy",
80
+ ),
81
+ "_compress_tool_call_for_memory": (
82
+ "scienceflow.research.state.knowledge.memory.agent.memory_utils",
83
+ "_compress_tool_call_for_memory",
84
+ ),
85
+ "_tool_call_args_from_tc": (
86
+ "scienceflow.research.state.knowledge.memory.agent.memory_utils",
87
+ "_tool_call_args_from_tc",
88
+ ),
89
+ "inject_thought_into_tool_params": (
90
+ "scienceflow.research.state.knowledge.memory.agent.memory_utils",
91
+ "inject_thought_into_tool_params",
92
+ ),
93
+ "create_tool_collection": (
94
+ "scienceflow.runtime.safety.execution.agent_runtime.tool_composition",
95
+ "create_tool_collection",
96
+ ),
97
+ "clear_embedded_full_run_result": (
98
+ "scienceflow.runtime.safety.policy.execution_policy",
99
+ "clear_embedded_full_run_result",
100
+ ),
101
+ "ensure_full_execution": (
102
+ "scienceflow.runtime.safety.policy.execution_policy",
103
+ "ensure_full_execution",
104
+ ),
105
+ "write_embedded_full_run_result": (
106
+ "scienceflow.runtime.safety.policy.execution_policy",
107
+ "write_embedded_full_run_result",
108
+ ),
109
+ }
110
+
111
+ __all__ = list(_EXPORTS)
112
+
113
+
114
+ def __getattr__(name: str) -> Any:
115
+ if name not in _EXPORTS:
116
+ raise AttributeError(name)
117
+ module_name, attribute = _EXPORTS[name]
118
+ value = getattr(import_module(module_name), attribute)
119
+ globals()[name] = value
120
+ return value
@@ -0,0 +1 @@
1
+ """Core agent runtime and port contracts."""
@@ -0,0 +1 @@
1
+ """Agent host and callback ports."""
@@ -0,0 +1,129 @@
1
+ # Copyright (C) 2026. Huawei Technologies Co., Ltd. All rights reserved.
2
+
3
+ """Typed callback capabilities injected at the ScienceAgent composition edge."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from dataclasses import dataclass, replace
8
+ from typing import Any, Protocol
9
+
10
+
11
+ class CandidateArchivePort(Protocol):
12
+ def __call__(
13
+ self,
14
+ *,
15
+ agent: Any,
16
+ tool_name: str,
17
+ args: dict[str, Any],
18
+ tool_result: Any,
19
+ ) -> Any: ...
20
+
21
+
22
+ class StageCapturePort(Protocol):
23
+ def __call__(
24
+ self,
25
+ *,
26
+ agent: Any,
27
+ args: dict[str, Any],
28
+ tool_result: Any,
29
+ ) -> Any: ...
30
+
31
+
32
+ class MetricInterpretationPort(Protocol):
33
+ def __call__(
34
+ self,
35
+ *,
36
+ agent: Any,
37
+ stdout: str,
38
+ script_label: str,
39
+ ) -> Any: ...
40
+
41
+
42
+ class TextOnlyDecisionPort(Protocol):
43
+ def __call__(
44
+ self,
45
+ *,
46
+ agent: Any,
47
+ assistant_text: str,
48
+ round_idx: int,
49
+ max_steps: int,
50
+ ) -> Any: ...
51
+
52
+
53
+ class ContextLimitEstraPort(Protocol):
54
+ def __call__(
55
+ self,
56
+ *,
57
+ agent: Any,
58
+ round_idx: int,
59
+ max_steps: int,
60
+ omitted: int,
61
+ ) -> Any: ...
62
+
63
+
64
+ class ContextCompactObserver(Protocol):
65
+ def __call__(self, *, phase: str, **payload: Any) -> Any: ...
66
+
67
+
68
+ @dataclass(frozen=True, slots=True)
69
+ class AgentCallbackPorts:
70
+ """Narrow callback capabilities; absent capabilities are explicitly ``None``."""
71
+
72
+ candidate_archive: CandidateArchivePort | None = None
73
+ stage_capture: StageCapturePort | None = None
74
+ metric_interpretation: MetricInterpretationPort | None = None
75
+ text_only_decision: TextOnlyDecisionPort | None = None
76
+ context_limit_estra: ContextLimitEstraPort | None = None
77
+ context_compact_observer: ContextCompactObserver | None = None
78
+
79
+ def with_overrides(self, **updates: Any) -> AgentCallbackPorts:
80
+ return replace(self, **updates)
81
+
82
+
83
+ _LEGACY_CALLBACK_ATTRIBUTES = {
84
+ "candidate_archive": "_lnr_candidate_archive_callback",
85
+ "stage_capture": "_lnr_stage_capture_callback",
86
+ "metric_interpretation": "_lnr_metric_output_interpretation_callback",
87
+ "text_only_decision": "_lnr_text_only_callback",
88
+ "context_limit_estra": "_context_limit_estra_callback",
89
+ "context_compact_observer": "_context_compact_event_callback",
90
+ }
91
+
92
+
93
+ def callback_ports_for(agent: Any) -> AgentCallbackPorts:
94
+ ports = getattr(agent, "callback_ports", None)
95
+ return ports if isinstance(ports, AgentCallbackPorts) else AgentCallbackPorts()
96
+
97
+
98
+ def install_callback_ports(agent: Any, ports: AgentCallbackPorts) -> None:
99
+ installer = getattr(agent, "configure_callback_ports", None)
100
+ if callable(installer):
101
+ installer(ports)
102
+ return
103
+ agent.callback_ports = ports
104
+
105
+
106
+ def resolve_agent_callback(agent: Any, capability: str) -> Any | None:
107
+ """Resolve a typed port, with a read-only legacy fallback during migration."""
108
+
109
+ ports = callback_ports_for(agent)
110
+ callback = getattr(ports, capability)
111
+ if callable(callback):
112
+ return callback
113
+ legacy_name = _LEGACY_CALLBACK_ATTRIBUTES[capability]
114
+ legacy_callback = getattr(agent, legacy_name, None)
115
+ return legacy_callback if callable(legacy_callback) else None
116
+
117
+
118
+ __all__ = [
119
+ "AgentCallbackPorts",
120
+ "CandidateArchivePort",
121
+ "ContextCompactObserver",
122
+ "ContextLimitEstraPort",
123
+ "MetricInterpretationPort",
124
+ "StageCapturePort",
125
+ "TextOnlyDecisionPort",
126
+ "callback_ports_for",
127
+ "install_callback_ports",
128
+ "resolve_agent_callback",
129
+ ]
@@ -0,0 +1,126 @@
1
+ """Typed capabilities consumed by the ScienceFlow agent session."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+ from functools import partial
7
+ from typing import Any, Awaitable, Callable, Protocol
8
+
9
+ from inquirycraft.tools import ToolResult
10
+
11
+ from scienceflow.agent.policies import routing
12
+ from scienceflow.agent.prompts import system_prompt
13
+ from scienceflow.research.control import agent_runtime_state
14
+ from scienceflow.runtime.observability import agent_tool_feedback
15
+ from scienceflow.research.quality import embedded_fullrun
16
+ from scienceflow.runtime.safety.execution.agent_runtime import edit_guard
17
+ from scienceflow.runtime.safety.execution.agent_runtime.tool_bundle_policy import (
18
+ normalize_tool_calls_for_execution,
19
+ )
20
+ from scienceflow.research.solver.lnr.orchestration import agent_hooks
21
+ from scienceflow.research.state.workspace.adapters import path_hygiene
22
+
23
+
24
+ class PrepareToolFeedbackPort(Protocol):
25
+ def __call__(
26
+ self,
27
+ tool_name: str,
28
+ args: dict[str, Any],
29
+ tool_result: ToolResult,
30
+ *,
31
+ guard_coaching: str = "",
32
+ ) -> str: ...
33
+
34
+
35
+ WorkspaceCheckpointPort = Callable[[str, ToolResult], None]
36
+ NormalizeToolInputPort = Callable[[str, dict[str, Any]], dict[str, Any]]
37
+ RewriteToolResultPort = Callable[[ToolResult], ToolResult]
38
+ ExecuteToolPort = Callable[[str, dict[str, Any]], Awaitable[ToolResult]]
39
+ RecordReadPort = Callable[[str], None]
40
+ RoundIndexPort = Callable[[int], None]
41
+ RoundCompletePort = Callable[[list[str] | None], None]
42
+ NoArgumentPort = Callable[[], None]
43
+ BuildSystemMessagesPort = Callable[[], list[Any]]
44
+ ToolChoicePort = Callable[[int, str | None], str]
45
+ NormalizeCallsPort = Callable[[list[Any]], Any]
46
+ EmbeddedToolResultPort = Callable[[dict[str, Any], ToolResult], Awaitable[Any]]
47
+
48
+
49
+ @dataclass(frozen=True, slots=True)
50
+ class AgentHostPorts:
51
+ """Narrow, explicit host capabilities used by the IQ runtime adapter."""
52
+
53
+ workspace_checkpoint: WorkspaceCheckpointPort
54
+ normalize_tool_input_paths: NormalizeToolInputPort
55
+ rewrite_tool_result_paths: RewriteToolResultPort
56
+ execute_tool_with_edit_guard: ExecuteToolPort
57
+ record_read_for_edit_guard: RecordReadPort
58
+ prepare_tool_feedback_for_memory: PrepareToolFeedbackPort
59
+ log_iteration_header: RoundIndexPort
60
+ pop_and_log_thought: Callable[[dict[str, Any]], None]
61
+ fresh_workspace_hint: RoundIndexPort
62
+ periodic_round_injection: RoundIndexPort
63
+ round_complete: RoundCompletePort
64
+ sync_resource_state_summary: NoArgumentPort
65
+ write_productivity_snapshot: NoArgumentPort
66
+ build_system_messages: BuildSystemMessagesPort
67
+ tool_choice_for_main_loop: ToolChoicePort
68
+ normalize_repl_file_change_calls: NormalizeCallsPort
69
+ normalize_tool_calls: NormalizeCallsPort
70
+ maybe_write_bare_run_tail_snapshot: EmbeddedToolResultPort
71
+ maybe_embedded_full_run_after_quick_test: EmbeddedToolResultPort
72
+
73
+
74
+ def compose_agent_host_ports(host: Any) -> AgentHostPorts:
75
+ """Bind real domain owners once at the ScienceAgent composition boundary."""
76
+
77
+ return AgentHostPorts(
78
+ workspace_checkpoint=partial(
79
+ path_hygiene._maybe_workspace_git_auto_checkpoint, host
80
+ ),
81
+ normalize_tool_input_paths=partial(
82
+ path_hygiene._maybe_normalize_tool_input_paths, host
83
+ ),
84
+ rewrite_tool_result_paths=partial(
85
+ path_hygiene._maybe_rewrite_tool_result_paths, host
86
+ ),
87
+ execute_tool_with_edit_guard=partial(
88
+ edit_guard._execute_tool_maybe_edit_guard, host
89
+ ),
90
+ record_read_for_edit_guard=partial(
91
+ edit_guard._record_read_for_edit_guard, host
92
+ ),
93
+ prepare_tool_feedback_for_memory=partial(
94
+ agent_tool_feedback._prepare_tool_feedback_for_memory, host
95
+ ),
96
+ log_iteration_header=partial(agent_tool_feedback._log_iteration_header, host),
97
+ pop_and_log_thought=partial(agent_tool_feedback._pop_and_log_thought, host),
98
+ fresh_workspace_hint=partial(
99
+ agent_hooks._lnr_maybe_fresh_workspace_hint_first_round, host
100
+ ),
101
+ periodic_round_injection=partial(
102
+ agent_hooks._lnr_maybe_periodic_inject_at_round_start, host
103
+ ),
104
+ round_complete=partial(agent_hooks._lnr_on_round_complete, host),
105
+ sync_resource_state_summary=partial(
106
+ routing._sync_resource_state_summary_slot, host
107
+ ),
108
+ write_productivity_snapshot=partial(
109
+ agent_runtime_state._write_productivity_snapshot, host
110
+ ),
111
+ build_system_messages=partial(system_prompt._build_system_messages, host),
112
+ tool_choice_for_main_loop=partial(routing._tool_choice_for_main_loop, host),
113
+ normalize_repl_file_change_calls=partial(
114
+ routing._normalize_repl_file_change_tool_calls, host
115
+ ),
116
+ normalize_tool_calls=partial(normalize_tool_calls_for_execution, host),
117
+ maybe_write_bare_run_tail_snapshot=partial(
118
+ embedded_fullrun._maybe_write_bare_run_tail_snapshot, host
119
+ ),
120
+ maybe_embedded_full_run_after_quick_test=partial(
121
+ embedded_fullrun._maybe_embedded_full_run_after_quick_test, host
122
+ ),
123
+ )
124
+
125
+
126
+ __all__ = ["AgentHostPorts", "compose_agent_host_ports"]
@@ -0,0 +1,173 @@
1
+ """ScienceFlow policies adapted to InquiryCraft's post-commit lifecycle."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import inspect
6
+ from typing import Any
7
+
8
+ from inquirycraft.runtime import (
9
+ RuntimeContext,
10
+ ToolCommitDecision,
11
+ ToolCommitObservation,
12
+ )
13
+ from inquirycraft.tools import ToolOutputReducerRegistry, ToolResult, coerce_tool_result
14
+
15
+ from scienceflow.agent.core.ports.callback_ports import resolve_agent_callback
16
+
17
+
18
+ def scienceflow_output_reducers(host: Any) -> ToolOutputReducerRegistry:
19
+ """Make IQ the single projection owner while preserving SF-visible feedback."""
20
+
21
+ registry = ToolOutputReducerRegistry()
22
+
23
+ def register(tool_name: str) -> None:
24
+ def reduce(*, args, result, **_):
25
+ guard = getattr(host, "_guard_manager", None)
26
+ coaching = (
27
+ guard.process_tool_result(tool_name, args, result) if guard else ""
28
+ )
29
+ visible = host._host_ports.prepare_tool_feedback_for_memory(
30
+ tool_name, args, result, guard_coaching=coaching
31
+ )
32
+ return visible, "scienceflow_feedback_v1"
33
+
34
+ registry.register(tool_name, reduce)
35
+
36
+ for tool in host.availableTools:
37
+ register(str(tool.name))
38
+ return registry
39
+
40
+
41
+ class ScienceFlowPostCommitAdapter:
42
+ """Run domain callbacks from immutable, journaled tool evidence."""
43
+
44
+ def __init__(self, host: Any) -> None:
45
+ self.host = host
46
+ self._seen: set[tuple[str, str, int]] = set()
47
+
48
+ async def __call__(
49
+ self, observation: ToolCommitObservation, context: RuntimeContext
50
+ ) -> ToolCommitDecision | None:
51
+ if observation.recovering and not observation.replayed:
52
+ return None
53
+ key = (
54
+ context.run_id,
55
+ str(observation.invocation.id),
56
+ observation.journal_attempt,
57
+ )
58
+ if key in self._seen:
59
+ return None
60
+ self._seen.add(key)
61
+ host = self.host
62
+ name = str(observation.invocation.name)
63
+ args = host._host_ports.normalize_tool_input_paths(
64
+ name, dict(observation.invocation.arguments)
65
+ )
66
+ args.pop("thought", None)
67
+ raw_result = coerce_tool_result(observation.raw_result)
68
+ await self._candidate_archive(name, args, raw_result)
69
+ if name != "bash":
70
+ return None
71
+ early = await host._host_ports.maybe_embedded_full_run_after_quick_test(
72
+ args, raw_result
73
+ )
74
+ if early is not None:
75
+ return self._terminate(str(early), "embedded_full_run")
76
+ await host._host_ports.maybe_write_bare_run_tail_snapshot(args, raw_result)
77
+ stage_callback = resolve_agent_callback(host, "stage_capture")
78
+ if not self._stage_ready(raw_result, stage_callback):
79
+ return None
80
+ stage_output = stage_callback(agent=host, args=args, tool_result=raw_result)
81
+ if inspect.isawaitable(stage_output):
82
+ stage_output = await stage_output
83
+ self._refresh_stage_id(stage_callback, context)
84
+ if stage_output:
85
+ return self._terminate(str(stage_output), "stage_capture")
86
+ return None
87
+
88
+ async def _candidate_archive(
89
+ self, name: str, args: dict[str, Any], result: ToolResult
90
+ ) -> None:
91
+ callback = resolve_agent_callback(self.host, "candidate_archive")
92
+ if not callable(callback):
93
+ return
94
+ try:
95
+ value = callback(
96
+ agent=self.host,
97
+ tool_name=name,
98
+ args=args,
99
+ tool_result=result,
100
+ )
101
+ if inspect.isawaitable(value):
102
+ await value
103
+ except Exception as exc:
104
+ self.host._log_info(
105
+ "[long-horizon-flow] candidate artifact archive callback failed: %s",
106
+ exc,
107
+ )
108
+
109
+ def _stage_ready(self, result: ToolResult, callback: Any) -> bool:
110
+ host = self.host
111
+ owner = getattr(callback, "__self__", None)
112
+ if isinstance(getattr(owner, "pending_text_stage_commit", None), dict):
113
+ return False
114
+ artifact = str(getattr(host, "_lnr_candidate_artifact_rel", "") or "").strip()
115
+ artifact_ready = bool(
116
+ getattr(host, "_lnr_stage_capture_on_candidate_artifact", False)
117
+ and artifact
118
+ and (host._workspace_dir / artifact).exists()
119
+ )
120
+ return bool(
121
+ callable(callback)
122
+ and not host._embedded_full_run_enabled
123
+ and not result.error
124
+ and (getattr(host, "_lnr_snapshot_ok", False) or artifact_ready)
125
+ )
126
+
127
+ @staticmethod
128
+ def _refresh_stage_id(callback: Any, context: RuntimeContext) -> None:
129
+ owner = getattr(callback, "__self__", None)
130
+ snapshots = getattr(owner, "stage_snapshots", ())
131
+ latest = None
132
+ fallback_stage_id = ""
133
+ if isinstance(snapshots, dict) and snapshots:
134
+ fallback_stage_id = str(next(reversed(snapshots)))
135
+ latest = snapshots[fallback_stage_id]
136
+ elif snapshots:
137
+ latest = snapshots[-1]
138
+ next_stage = getattr(owner, "_next_stage_id_for_logging", None)
139
+ if callable(next_stage):
140
+ stage_id = str(next_stage() or "draft")
141
+ elif latest is not None:
142
+ stage_id = str(
143
+ getattr(latest, "stage_id", "") or fallback_stage_id or "draft"
144
+ )
145
+ else:
146
+ return
147
+ lineage = getattr(owner, "_lineage_uid_prefix", None)
148
+ lineage_id = str(lineage() or "") if callable(lineage) else ""
149
+ node = getattr(owner, "_stage_node_uid", None)
150
+ node_uid = (
151
+ str(node(stage_id, lineage_id=lineage_id) or "") if callable(node) else ""
152
+ )
153
+ context.metadata["stage_id"] = stage_id
154
+ context.metadata["lineage_id"] = lineage_id
155
+ context.metadata["node_uid"] = node_uid
156
+ host = getattr(callback, "__self__", None)
157
+ agent = getattr(host, "_resource_main_agent_ref", None)
158
+ if agent is not None:
159
+ agent._scienceflow_stage_id = stage_id
160
+ agent._scienceflow_lineage_id = lineage_id
161
+ agent._scienceflow_node_uid = node_uid
162
+
163
+ @staticmethod
164
+ def _terminate(output: str, route: str) -> ToolCommitDecision:
165
+ return ToolCommitDecision(
166
+ action="terminate_session",
167
+ output=output,
168
+ reason=f"scienceflow_{route}",
169
+ route=route,
170
+ )
171
+
172
+
173
+ __all__ = ["ScienceFlowPostCommitAdapter", "scienceflow_output_reducers"]
@@ -0,0 +1 @@
1
+ """Agent runtime implementation and lifecycle policy."""