deepstrike 0.2.38__tar.gz → 0.2.40__tar.gz

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 (219) hide show
  1. {deepstrike-0.2.38 → deepstrike-0.2.40}/Cargo.lock +15 -5
  2. {deepstrike-0.2.38 → deepstrike-0.2.40}/Cargo.toml +2 -2
  3. {deepstrike-0.2.38 → deepstrike-0.2.40}/PKG-INFO +54 -43
  4. {deepstrike-0.2.38 → deepstrike-0.2.40}/README.md +53 -42
  5. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/Cargo.toml +4 -0
  6. deepstrike-0.2.40/crates/deepstrike-core/benches/kernel_baseline.rs +202 -0
  7. deepstrike-0.2.40/crates/deepstrike-core/src/benchmark/mod.rs +207 -0
  8. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/compression.rs +554 -126
  9. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/config.rs +29 -11
  10. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/manager.rs +412 -99
  11. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/mod.rs +4 -1
  12. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/partitions.rs +209 -15
  13. deepstrike-0.2.40/crates/deepstrike-core/src/context/policy.rs +124 -0
  14. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/renderer.rs +472 -113
  15. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/renewal.rs +22 -10
  16. deepstrike-0.2.40/crates/deepstrike-core/src/context/summarizer.rs +312 -0
  17. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/task_state.rs +14 -7
  18. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/token_engine.rs +34 -3
  19. deepstrike-0.2.40/crates/deepstrike-core/src/context/units.rs +211 -0
  20. deepstrike-0.2.40/crates/deepstrike-core/src/context/utility.rs +402 -0
  21. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/governance/constraint.rs +1 -1
  22. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/governance/permission.rs +0 -1
  23. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/governance/pipeline.rs +4 -1
  24. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/governance/quota.rs +1 -1
  25. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/governance/repeat_fuse.rs +9 -3
  26. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/harness/eval.rs +1 -1
  27. deepstrike-0.2.40/crates/deepstrike-core/src/harness/mod.rs +6 -0
  28. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/lib.rs +11 -9
  29. deepstrike-0.2.40/crates/deepstrike-core/src/memory/curator.rs +112 -0
  30. deepstrike-0.2.40/crates/deepstrike-core/src/memory/mod.rs +7 -0
  31. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/mm/handle.rs +74 -17
  32. deepstrike-0.2.40/crates/deepstrike-core/src/mm/memory.rs +828 -0
  33. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/mm/mod.rs +3 -3
  34. deepstrike-0.2.40/crates/deepstrike-core/src/mm/value.rs +114 -0
  35. deepstrike-0.2.40/crates/deepstrike-core/src/orchestration/task_graph.rs +527 -0
  36. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/orchestration/tournament.rs +1 -2
  37. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/orchestration/workflow/mod.rs +64 -36
  38. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/orchestration/workflow/run.rs +1370 -339
  39. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/proc/mod.rs +7 -3
  40. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/runtime/event_log.rs +27 -9
  41. deepstrike-0.2.40/crates/deepstrike-core/src/runtime/kernel/protocol.rs +1417 -0
  42. deepstrike-0.2.40/crates/deepstrike-core/src/runtime/kernel/runtime.rs +2507 -0
  43. deepstrike-0.2.40/crates/deepstrike-core/src/runtime/kernel/tests.rs +4423 -0
  44. deepstrike-0.2.40/crates/deepstrike-core/src/runtime/kernel.rs +31 -0
  45. deepstrike-0.2.40/crates/deepstrike-core/src/runtime/mod.rs +27 -0
  46. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/runtime/repair.rs +138 -38
  47. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/runtime/replay.rs +88 -13
  48. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/runtime/session.rs +44 -11
  49. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/scheduler/entropy.rs +97 -17
  50. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/scheduler/mod.rs +1 -3
  51. deepstrike-0.2.40/crates/deepstrike-core/src/scheduler/policy.rs +99 -0
  52. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/scheduler/rollback.rs +6 -2
  53. deepstrike-0.2.40/crates/deepstrike-core/src/scheduler/state_machine/cancellation.rs +52 -0
  54. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/scheduler/state_machine/capability.rs +11 -10
  55. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/scheduler/state_machine/eviction.rs +23 -18
  56. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/scheduler/state_machine/gate.rs +146 -68
  57. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/scheduler/state_machine/milestone_exec.rs +10 -6
  58. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/scheduler/state_machine/mod.rs +540 -102
  59. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/scheduler/state_machine/process.rs +25 -28
  60. deepstrike-0.2.40/crates/deepstrike-core/src/scheduler/state_machine/signal.rs +258 -0
  61. deepstrike-0.2.40/crates/deepstrike-core/src/scheduler/state_machine/tests.rs +4141 -0
  62. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/scheduler/state_machine/workflow.rs +199 -61
  63. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/scheduler/tcb.rs +41 -9
  64. deepstrike-0.2.40/crates/deepstrike-core/src/signals/attention.rs +109 -0
  65. deepstrike-0.2.40/crates/deepstrike-core/src/signals/queue.rs +430 -0
  66. deepstrike-0.2.40/crates/deepstrike-core/src/signals/router.rs +625 -0
  67. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/syscall/mod.rs +19 -6
  68. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/types/agent.rs +13 -4
  69. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/types/capability.rs +4 -1
  70. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/types/contract.rs +1 -1
  71. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/types/message.rs +70 -39
  72. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/types/milestone.rs +1 -1
  73. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/types/policy.rs +2 -3
  74. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/types/signal.rs +24 -7
  75. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-py/src/lib.rs +298 -252
  76. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/__init__.py +106 -23
  77. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/collaboration/__init__.py +3 -4
  78. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/collaboration/contract.py +1 -1
  79. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/collaboration/handoff.py +2 -22
  80. deepstrike-0.2.40/deepstrike/collaboration/harness.py +119 -0
  81. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/collaboration/modes.py +56 -9
  82. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/collaboration/pool.py +71 -4
  83. deepstrike-0.2.40/deepstrike/harness/__init__.py +39 -0
  84. deepstrike-0.2.40/deepstrike/harness/harness.py +371 -0
  85. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/harness/judge.py +4 -6
  86. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/kernel/__init__.py +0 -2
  87. deepstrike-0.2.40/deepstrike/memory/__init__.py +14 -0
  88. deepstrike-0.2.40/deepstrike/memory/agent.py +23 -0
  89. deepstrike-0.2.40/deepstrike/memory/extraction.py +79 -0
  90. deepstrike-0.2.40/deepstrike/memory/in_memory_store.py +120 -0
  91. deepstrike-0.2.40/deepstrike/memory/protocols.py +97 -0
  92. deepstrike-0.2.40/deepstrike/memory/ranking.py +105 -0
  93. deepstrike-0.2.40/deepstrike/memory/retention.py +59 -0
  94. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/__init__.py +2 -1
  95. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/base.py +37 -4
  96. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/gemini.py +9 -1
  97. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/ollama.py +3 -0
  98. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/openai_responses.py +7 -2
  99. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/qwen.py +3 -1
  100. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/stream.py +0 -1
  101. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/__init__.py +110 -8
  102. deepstrike-0.2.40/deepstrike/runtime/context_policy.py +105 -0
  103. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/eval.py +1 -1
  104. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/event_stream.py +12 -3
  105. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/execution_plane.py +14 -7
  106. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/facade.py +5 -2
  107. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/kernel_event_log.py +51 -10
  108. deepstrike-0.2.40/deepstrike/runtime/kernel_rebuild.py +107 -0
  109. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/kernel_step.py +129 -11
  110. deepstrike-0.2.40/deepstrike/runtime/kernel_transaction_log.py +254 -0
  111. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/large_result_spool.py +16 -4
  112. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/loop_driver.py +1 -5
  113. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/mcp_proxy_plane.py +19 -5
  114. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/os_profile.py +30 -15
  115. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/os_snapshot.py +27 -4
  116. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/process_sandbox_plane.py +39 -11
  117. deepstrike-0.2.40/deepstrike/runtime/reaction_checkpoint.py +128 -0
  118. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/reactive_session.py +71 -21
  119. deepstrike-0.2.40/deepstrike/runtime/reliability.py +143 -0
  120. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/remote_vpc_plane.py +16 -4
  121. deepstrike-0.2.40/deepstrike/runtime/run_group.py +249 -0
  122. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/runner.py +1002 -580
  123. deepstrike-0.2.40/deepstrike/runtime/session_log.py +792 -0
  124. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/session_repair.py +37 -15
  125. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/sub_agent_orchestrator.py +43 -14
  126. deepstrike-0.2.40/deepstrike/signals/__init__.py +8 -0
  127. deepstrike-0.2.40/deepstrike/signals/gateway.py +193 -0
  128. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/signals/scheduled.py +1 -3
  129. deepstrike-0.2.40/deepstrike/signals/types.py +65 -0
  130. deepstrike-0.2.40/deepstrike/skills/loader.py +22 -0
  131. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/types/agent.py +67 -1
  132. {deepstrike-0.2.38 → deepstrike-0.2.40}/pyproject.toml +1 -1
  133. deepstrike-0.2.38/crates/deepstrike-core/src/context/summarizer.rs +0 -46
  134. deepstrike-0.2.38/crates/deepstrike-core/src/harness/mod.rs +0 -6
  135. deepstrike-0.2.38/crates/deepstrike-core/src/memory/curator.rs +0 -343
  136. deepstrike-0.2.38/crates/deepstrike-core/src/memory/idle_pipeline.rs +0 -461
  137. deepstrike-0.2.38/crates/deepstrike-core/src/memory/mod.rs +0 -13
  138. deepstrike-0.2.38/crates/deepstrike-core/src/memory/semantic.rs +0 -10
  139. deepstrike-0.2.38/crates/deepstrike-core/src/memory/synthesis.rs +0 -323
  140. deepstrike-0.2.38/crates/deepstrike-core/src/memory/trace_analyzer.rs +0 -360
  141. deepstrike-0.2.38/crates/deepstrike-core/src/mm/memory.rs +0 -342
  142. deepstrike-0.2.38/crates/deepstrike-core/src/orchestration/task_graph.rs +0 -300
  143. deepstrike-0.2.38/crates/deepstrike-core/src/runtime/kernel.rs +0 -2935
  144. deepstrike-0.2.38/crates/deepstrike-core/src/runtime/mod.rs +0 -27
  145. deepstrike-0.2.38/crates/deepstrike-core/src/scheduler/policy.rs +0 -51
  146. deepstrike-0.2.38/crates/deepstrike-core/src/scheduler/state_machine/signal.rs +0 -155
  147. deepstrike-0.2.38/crates/deepstrike-core/src/scheduler/state_machine/tests.rs +0 -3117
  148. deepstrike-0.2.38/crates/deepstrike-core/src/signals/attention.rs +0 -57
  149. deepstrike-0.2.38/crates/deepstrike-core/src/signals/queue.rs +0 -150
  150. deepstrike-0.2.38/crates/deepstrike-core/src/signals/router.rs +0 -155
  151. deepstrike-0.2.38/deepstrike/collaboration/harness.py +0 -225
  152. deepstrike-0.2.38/deepstrike/harness/__init__.py +0 -17
  153. deepstrike-0.2.38/deepstrike/harness/harness.py +0 -295
  154. deepstrike-0.2.38/deepstrike/memory/__init__.py +0 -11
  155. deepstrike-0.2.38/deepstrike/memory/agent.py +0 -33
  156. deepstrike-0.2.38/deepstrike/memory/in_memory_store.py +0 -53
  157. deepstrike-0.2.38/deepstrike/memory/protocols.py +0 -81
  158. deepstrike-0.2.38/deepstrike/runtime/run_group.py +0 -152
  159. deepstrike-0.2.38/deepstrike/runtime/session_log.py +0 -516
  160. deepstrike-0.2.38/deepstrike/signals/__init__.py +0 -5
  161. deepstrike-0.2.38/deepstrike/signals/gateway.py +0 -106
  162. deepstrike-0.2.38/deepstrike/signals/types.py +0 -68
  163. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/fault.rs +0 -0
  164. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/pressure.rs +0 -0
  165. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/skill_catalog.rs +0 -0
  166. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/context/text.rs +0 -0
  167. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/governance/mod.rs +0 -0
  168. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/governance/rate_limit.rs +0 -0
  169. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/governance/veto.rs +0 -0
  170. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/memory/durable.rs +0 -0
  171. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/orchestration/mod.rs +0 -0
  172. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/scheduler/milestone.rs +0 -0
  173. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/signals/mod.rs +0 -0
  174. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/types/error.rs +0 -0
  175. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/types/mod.rs +0 -0
  176. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/types/result.rs +0 -0
  177. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/types/skill.rs +0 -0
  178. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-core/src/types/task.rs +0 -0
  179. {deepstrike-0.2.38 → deepstrike-0.2.40}/crates/deepstrike-py/Cargo.toml +0 -0
  180. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/governance.py +0 -0
  181. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/knowledge/__init__.py +0 -0
  182. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/knowledge/source.py +0 -0
  183. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/memory/working.py +0 -0
  184. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/anthropic.py +0 -0
  185. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/anthropic_compatible.py +0 -0
  186. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/deepseek.py +0 -0
  187. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/factories.py +0 -0
  188. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/glm.py +0 -0
  189. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/kimi.py +0 -0
  190. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/minimax.py +0 -0
  191. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/openai.py +0 -0
  192. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/replay.py +0 -0
  193. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/replay_validator.py +0 -0
  194. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/providers/vendor_profiles.py +0 -0
  195. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/archive.py +0 -0
  196. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/credential_vault.py +0 -0
  197. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/filtered_plane.py +0 -0
  198. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/output_schema.py +0 -0
  199. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/provider_replay.py +0 -0
  200. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/reducers.py +0 -0
  201. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/replay_fixture.py +0 -0
  202. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/replay_provider.py +0 -0
  203. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/replay_sanitize.py +0 -0
  204. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/turn_policy.py +0 -0
  205. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/workflow_control_flow.py +0 -0
  206. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/workflow_store.py +0 -0
  207. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/runtime/worktree_plane.py +0 -0
  208. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/safety/__init__.py +0 -0
  209. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/safety/permissions.py +0 -0
  210. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/skills/__init__.py +0 -0
  211. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/skills/registry.py +0 -0
  212. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/skills/watcher.py +0 -0
  213. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/tools/__init__.py +0 -0
  214. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/tools/builtin/__init__.py +0 -0
  215. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/tools/builtin/read_file.py +0 -0
  216. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/tools/errors.py +0 -0
  217. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/tools/execution.py +0 -0
  218. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/tools/registry.py +0 -0
  219. {deepstrike-0.2.38 → deepstrike-0.2.40}/deepstrike/types/__init__.py +0 -0
@@ -194,7 +194,7 @@ dependencies = [
194
194
 
195
195
  [[package]]
196
196
  name = "deepstrike-core"
197
- version = "0.2.38"
197
+ version = "0.2.40"
198
198
  dependencies = [
199
199
  "compact_str",
200
200
  "pretty_assertions",
@@ -204,9 +204,19 @@ dependencies = [
204
204
  "uuid",
205
205
  ]
206
206
 
207
+ [[package]]
208
+ name = "deepstrike-lab"
209
+ version = "0.2.40"
210
+ dependencies = [
211
+ "deepstrike-core",
212
+ "serde",
213
+ "serde_json",
214
+ "thiserror",
215
+ ]
216
+
207
217
  [[package]]
208
218
  name = "deepstrike-node"
209
- version = "0.2.38"
219
+ version = "0.2.40"
210
220
  dependencies = [
211
221
  "compact_str",
212
222
  "deepstrike-core",
@@ -218,7 +228,7 @@ dependencies = [
218
228
 
219
229
  [[package]]
220
230
  name = "deepstrike-py"
221
- version = "0.2.38"
231
+ version = "0.2.40"
222
232
  dependencies = [
223
233
  "compact_str",
224
234
  "deepstrike-core",
@@ -229,7 +239,7 @@ dependencies = [
229
239
 
230
240
  [[package]]
231
241
  name = "deepstrike-sdk"
232
- version = "0.2.38"
242
+ version = "0.2.40"
233
243
  dependencies = [
234
244
  "async-stream",
235
245
  "async-trait",
@@ -263,7 +273,7 @@ dependencies = [
263
273
 
264
274
  [[package]]
265
275
  name = "deepstrike-wasm"
266
- version = "0.2.38"
276
+ version = "0.2.40"
267
277
  dependencies = [
268
278
  "compact_str",
269
279
  "deepstrike-core",
@@ -3,13 +3,13 @@ resolver = "2"
3
3
  members = ["crates/deepstrike-core", "crates/deepstrike-py"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.2.38"
6
+ version = "0.2.40"
7
7
  edition = "2024"
8
8
  license = "MIT"
9
9
  repository = "https://github.com/kongusen/deepstrike"
10
10
 
11
11
  [workspace.dependencies]
12
- deepstrike-core = { path = "crates/deepstrike-core", version = "0.2.38" }
12
+ deepstrike-core = { path = "crates/deepstrike-core", version = "0.2.40" }
13
13
  notify = "6"
14
14
  serde = { version = "1", features = ["derive"] }
15
15
  serde_json = "1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepstrike
3
- Version: 0.2.38
3
+ Version: 0.2.40
4
4
  Requires-Dist: httpx>=0.27
5
5
  Requires-Dist: pyyaml>=6.0
6
6
  Requires-Dist: anyio>=4.0
@@ -152,7 +152,7 @@ Tool calls, spawns, compression, and signals pass through one kernel gate with a
152
152
  Oversized tool results (> 50 KB) stay in context as a preview plus a `.spool/` reference — the model reads the full payload on demand via ordinary file tools. When pressure triggers semantic eviction, the SDK summarizes archived content into `DreamStore`. Long tasks survive token pressure instead of failing mid-run.
153
153
 
154
154
  **Safety and governance by default (OS native profile)**
155
- Every run loads declarative `governance_policy` (deny / ask_user / rate-limit / param rules) and in-kernel signal routing (`attention_policy`, default queue 64). Dangerous tools, external interrupts, and approval flows are policy — not ad-hoc checks in your handlers.
155
+ Every run loads declarative `governance_policy` (deny / ask_user / rate-limit / param rules) and in-kernel signal routing (`signal_policy`, default queue 64). Dangerous tools, external interrupts, and approval flows are policy — not ad-hoc checks in your handlers.
156
156
 
157
157
  **Long-term memory as syscalls (Phase-7)**
158
158
  `write_memory` and `query_memory` run outside the main tool loop: kernel validation before `DreamStore.commit`, search → `select_memories` → `memory_retrieval_result` on query. Failed writes emit `memory_validation_failed` for audit; good memory is durable without polluting history.
@@ -166,7 +166,7 @@ Spool, page-out, signals, processes, budgets, and memory events land in `Session
166
166
  | You need… | Use… |
167
167
  |---|---|
168
168
  | Policy before tools run | `governance_policy` (default: allow-all native profile) |
169
- | External interrupts | `signal_source` + in-kernel `attention_policy` |
169
+ | External interrupts | `signal_source` + in-kernel `signal_policy` |
170
170
  | Spawn / memory-write quotas | `resource_quota` (`set_resource_quota`) |
171
171
  | Huge tool output | Automatic Layer-1 spool; optional custom `result_spool` |
172
172
  | Durable recall across runs | `DreamStore` + semantic `page_out` via `dream_summarizer` |
@@ -290,7 +290,7 @@ from deepstrike import (
290
290
  AgentIdentity,
291
291
  AgentRunSpec,
292
292
  )
293
- from deepstrike.runtime import DEFAULT_NATIVE_ATTENTION_POLICY
293
+ from deepstrike.runtime import DEFAULT_NATIVE_SIGNAL_POLICY, PromptBudget
294
294
  from deepstrike.governance import GovernancePolicy, GovernancePolicyRule
295
295
 
296
296
  runner = RuntimeRunner(RuntimeOptions(
@@ -305,7 +305,12 @@ runner = RuntimeRunner(RuntimeOptions(
305
305
 
306
306
  # Agent OS native profile (defaults shown)
307
307
  governance_policy=DEFAULT_NATIVE_GOVERNANCE_POLICY,
308
- attention_policy=DEFAULT_NATIVE_ATTENTION_POLICY, # SignalRouter queue size 64
308
+ signal_policy=DEFAULT_NATIVE_SIGNAL_POLICY, # SignalRouter queue size 64
309
+ prompt_budget=PromptBudget(
310
+ prompt_overhead_tokens=20,
311
+ output_reserve_tokens=4096,
312
+ safety_margin_tokens=256,
313
+ ),
309
314
 
310
315
  # Host I/O
311
316
  extensions={"temperature": 0.1},
@@ -340,7 +345,8 @@ runner = RuntimeRunner(RuntimeOptions(
340
345
  | Option | Purpose |
341
346
  |--------|---------|
342
347
  | `governance_policy` | Declarative deny / ask_user / rate-limit / param rules loaded into the kernel before `start_run` |
343
- | `attention_policy` | In-kernel signal router queue size (default 64) |
348
+ | `signal_policy` | Versioned in-kernel signal queue/TTL policy (default queue 64) |
349
+ | `prompt_budget` | Provider-envelope overhead, output reserve, and safety margin deducted from the context window |
344
350
  | `on_permission_request` | Resolves `tool_gated` + `suspended` → kernel `resume` with approved/denied call IDs |
345
351
  | `compression_store` | Writes archived messages on `compressed` observations |
346
352
  | `dream_summarizer` | Summarizes `page_out { tier_hint: "semantic" }` into `DreamStore` during a run |
@@ -352,7 +358,7 @@ Validate policies before starting a run:
352
358
  ```python
353
359
  result = validate_declarative_policy(
354
360
  gov_policy=DEFAULT_SANDBOX_POLICY,
355
- attention_policy=DEFAULT_NATIVE_ATTENTION_POLICY,
361
+ signal_policy=DEFAULT_NATIVE_SIGNAL_POLICY,
356
362
  )
357
363
  assert result["valid"], result["errors"]
358
364
  ```
@@ -491,7 +497,7 @@ class MyStore(DreamStore):
491
497
  async def load_sessions(self, agent_id): ...
492
498
  async def load_memories(self, agent_id): ...
493
499
  async def commit(self, agent_id, result, existing): ...
494
- async def search(self, agent_id, query, top_k): ...
500
+ async def search(self, agent_id, query): ... # -> list[MemoryRecall]
495
501
  async def save_session(self, data): ...
496
502
 
497
503
  runner = RuntimeRunner(RuntimeOptions(
@@ -538,23 +544,27 @@ runner = RuntimeRunner(RuntimeOptions(
538
544
  ### Phase-7 memory syscalls (`write_memory` / `query_memory`)
539
545
 
540
546
  ```python
541
- await runner.write_memory({
542
- "metadata": {
543
- "name": "prefers-small-tests",
544
- "description": "User prefers focused unit tests",
545
- "kind": "feedback",
546
- "created_at": 1,
547
- "updated_at": 1,
548
- },
549
- "content": "User prefers focused unit tests for SDK behavior.",
550
- }, session_id="my-session")
551
-
552
- hits = await runner.query_memory({
553
- "current_context": "Need testing preferences",
554
- "active_tools": [],
555
- "already_surfaced": [],
556
- "top_k": 5,
557
- }, session_id="my-session")
547
+ from deepstrike import MemoryProvenance, MemoryQuery, MemoryRecord, MemoryScope
548
+
549
+ scope = MemoryScope(tenant_id="acme", namespace="assistant")
550
+ await runner.write_memory(MemoryRecord(
551
+ record_id="prefers-small-tests-v1",
552
+ scope=scope,
553
+ name="prefers-small-tests",
554
+ kind="feedback",
555
+ content="User prefers focused unit tests for SDK behavior.",
556
+ description="Testing preference",
557
+ provenance=MemoryProvenance(author="host", trust="user_asserted"),
558
+ created_at=1,
559
+ updated_at=1,
560
+ ), session_id="my-session")
561
+
562
+ hits = await runner.query_memory(MemoryQuery(
563
+ scope=scope,
564
+ query="Need testing preferences",
565
+ top_k=5,
566
+ kinds=["feedback"],
567
+ ), session_id="my-session")
558
568
  ```
559
569
 
560
570
  Session events: `memory_written`, `memory_queried`, `memory_validation_failed`, `memory_retrieval_result`.
@@ -633,7 +643,7 @@ Inbound signals are routed by the in-kernel attention policy (default queue size
633
643
 
634
644
  ```python
635
645
  from deepstrike import SignalGateway, ScheduledPrompt, RuntimeSignal
636
- from deepstrike.runtime import DEFAULT_NATIVE_ATTENTION_POLICY
646
+ from deepstrike.runtime import DEFAULT_NATIVE_SIGNAL_POLICY
637
647
 
638
648
  gw = SignalGateway()
639
649
  gw.schedule(ScheduledPrompt(goal="standup", run_at_ms=target_time))
@@ -644,14 +654,14 @@ runner = RuntimeRunner(RuntimeOptions(
644
654
  session_log=InMemorySessionLog(),
645
655
  execution_plane=plane,
646
656
  signal_source=gw,
647
- attention_policy=DEFAULT_NATIVE_ATTENTION_POLICY,
657
+ signal_policy=DEFAULT_NATIVE_SIGNAL_POLICY,
648
658
  ))
649
659
 
650
660
  runner.interrupt() # cooperative abort → kernel timeout path
651
661
  gw.destroy()
652
662
  ```
653
663
 
654
- Each routed signal produces a `signal_disposed` session event (`category: "ipc"`).
664
+ Each routed signal produces a correlated `signal_delivery_disposed` session event (`category: "ipc"`).
655
665
 
656
666
  ---
657
667
 
@@ -677,23 +687,21 @@ Requires an active parent run (`run()` / `wake()` in progress). The kernel emits
677
687
 
678
688
  ---
679
689
 
680
- ## Harness (evaluation framework)
690
+ ## Attempt loop
681
691
 
682
692
  ```python
683
693
  from deepstrike import (
684
- SinglePassHarness, EvalLoopHarness, HarnessLoop, HarnessRequest,
685
- SubAgentHarnessConfig, QualityGate,
694
+ AttemptLoop, AttemptRequest, RuntimeAttemptBody, StopPolicy,
695
+ LlmEvalJudge, SubAgentHarnessConfig,
686
696
  )
687
697
 
688
- outcome = await SinglePassHarness(runner).run(HarnessRequest(goal="Say hello"))
689
-
690
- class ContainsHello(QualityGate):
691
- async def evaluate(self, request, outcome) -> bool:
692
- return "hello" in outcome.result.lower()
693
-
694
- outcome = await EvalLoopHarness(runner, gate=ContainsHello(), max_attempts=3).run(req)
695
-
696
- loop = HarnessLoop(runner, eval_provider=eval_provider, max_attempts=3, skill_dir="./skills")
698
+ loop = AttemptLoop(
699
+ body=RuntimeAttemptBody(runner),
700
+ judge=LlmEvalJudge(eval_provider),
701
+ stop=StopPolicy(max_attempts=3),
702
+ )
703
+ outcome = await loop.run(AttemptRequest(goal="Write a haiku"))
704
+ print(outcome.run_status, outcome.outcome, outcome.verdict)
697
705
 
698
706
  runner = RuntimeRunner(RuntimeOptions(
699
707
  provider=provider,
@@ -701,11 +709,14 @@ runner = RuntimeRunner(RuntimeOptions(
701
709
  execution_plane=plane,
702
710
  sub_agent_harness=SubAgentHarnessConfig(eval_provider=eval_provider, max_attempts=3),
703
711
  ))
704
- async for event in loop.run_streaming(HarnessRequest(goal="Write a haiku")):
705
- if event.type == "done":
706
- print(event.verdict.passed, event.verdict.feedback)
712
+ async for event in loop.stream(AttemptRequest(goal="Write a haiku")):
713
+ if event.type == "completed":
714
+ print(event.outcome.run_status, event.outcome.verdict)
707
715
  ```
708
716
 
717
+ The default carry policy keeps one session and injects judge feedback as context. Use
718
+ `fresh_with_feedback` or `fresh_with_digest(...)` only when attempt isolation is intentional.
719
+
709
720
  ---
710
721
 
711
722
  ## Stream events
@@ -139,7 +139,7 @@ Tool calls, spawns, compression, and signals pass through one kernel gate with a
139
139
  Oversized tool results (> 50 KB) stay in context as a preview plus a `.spool/` reference — the model reads the full payload on demand via ordinary file tools. When pressure triggers semantic eviction, the SDK summarizes archived content into `DreamStore`. Long tasks survive token pressure instead of failing mid-run.
140
140
 
141
141
  **Safety and governance by default (OS native profile)**
142
- Every run loads declarative `governance_policy` (deny / ask_user / rate-limit / param rules) and in-kernel signal routing (`attention_policy`, default queue 64). Dangerous tools, external interrupts, and approval flows are policy — not ad-hoc checks in your handlers.
142
+ Every run loads declarative `governance_policy` (deny / ask_user / rate-limit / param rules) and in-kernel signal routing (`signal_policy`, default queue 64). Dangerous tools, external interrupts, and approval flows are policy — not ad-hoc checks in your handlers.
143
143
 
144
144
  **Long-term memory as syscalls (Phase-7)**
145
145
  `write_memory` and `query_memory` run outside the main tool loop: kernel validation before `DreamStore.commit`, search → `select_memories` → `memory_retrieval_result` on query. Failed writes emit `memory_validation_failed` for audit; good memory is durable without polluting history.
@@ -153,7 +153,7 @@ Spool, page-out, signals, processes, budgets, and memory events land in `Session
153
153
  | You need… | Use… |
154
154
  |---|---|
155
155
  | Policy before tools run | `governance_policy` (default: allow-all native profile) |
156
- | External interrupts | `signal_source` + in-kernel `attention_policy` |
156
+ | External interrupts | `signal_source` + in-kernel `signal_policy` |
157
157
  | Spawn / memory-write quotas | `resource_quota` (`set_resource_quota`) |
158
158
  | Huge tool output | Automatic Layer-1 spool; optional custom `result_spool` |
159
159
  | Durable recall across runs | `DreamStore` + semantic `page_out` via `dream_summarizer` |
@@ -277,7 +277,7 @@ from deepstrike import (
277
277
  AgentIdentity,
278
278
  AgentRunSpec,
279
279
  )
280
- from deepstrike.runtime import DEFAULT_NATIVE_ATTENTION_POLICY
280
+ from deepstrike.runtime import DEFAULT_NATIVE_SIGNAL_POLICY, PromptBudget
281
281
  from deepstrike.governance import GovernancePolicy, GovernancePolicyRule
282
282
 
283
283
  runner = RuntimeRunner(RuntimeOptions(
@@ -292,7 +292,12 @@ runner = RuntimeRunner(RuntimeOptions(
292
292
 
293
293
  # Agent OS native profile (defaults shown)
294
294
  governance_policy=DEFAULT_NATIVE_GOVERNANCE_POLICY,
295
- attention_policy=DEFAULT_NATIVE_ATTENTION_POLICY, # SignalRouter queue size 64
295
+ signal_policy=DEFAULT_NATIVE_SIGNAL_POLICY, # SignalRouter queue size 64
296
+ prompt_budget=PromptBudget(
297
+ prompt_overhead_tokens=20,
298
+ output_reserve_tokens=4096,
299
+ safety_margin_tokens=256,
300
+ ),
296
301
 
297
302
  # Host I/O
298
303
  extensions={"temperature": 0.1},
@@ -327,7 +332,8 @@ runner = RuntimeRunner(RuntimeOptions(
327
332
  | Option | Purpose |
328
333
  |--------|---------|
329
334
  | `governance_policy` | Declarative deny / ask_user / rate-limit / param rules loaded into the kernel before `start_run` |
330
- | `attention_policy` | In-kernel signal router queue size (default 64) |
335
+ | `signal_policy` | Versioned in-kernel signal queue/TTL policy (default queue 64) |
336
+ | `prompt_budget` | Provider-envelope overhead, output reserve, and safety margin deducted from the context window |
331
337
  | `on_permission_request` | Resolves `tool_gated` + `suspended` → kernel `resume` with approved/denied call IDs |
332
338
  | `compression_store` | Writes archived messages on `compressed` observations |
333
339
  | `dream_summarizer` | Summarizes `page_out { tier_hint: "semantic" }` into `DreamStore` during a run |
@@ -339,7 +345,7 @@ Validate policies before starting a run:
339
345
  ```python
340
346
  result = validate_declarative_policy(
341
347
  gov_policy=DEFAULT_SANDBOX_POLICY,
342
- attention_policy=DEFAULT_NATIVE_ATTENTION_POLICY,
348
+ signal_policy=DEFAULT_NATIVE_SIGNAL_POLICY,
343
349
  )
344
350
  assert result["valid"], result["errors"]
345
351
  ```
@@ -478,7 +484,7 @@ class MyStore(DreamStore):
478
484
  async def load_sessions(self, agent_id): ...
479
485
  async def load_memories(self, agent_id): ...
480
486
  async def commit(self, agent_id, result, existing): ...
481
- async def search(self, agent_id, query, top_k): ...
487
+ async def search(self, agent_id, query): ... # -> list[MemoryRecall]
482
488
  async def save_session(self, data): ...
483
489
 
484
490
  runner = RuntimeRunner(RuntimeOptions(
@@ -525,23 +531,27 @@ runner = RuntimeRunner(RuntimeOptions(
525
531
  ### Phase-7 memory syscalls (`write_memory` / `query_memory`)
526
532
 
527
533
  ```python
528
- await runner.write_memory({
529
- "metadata": {
530
- "name": "prefers-small-tests",
531
- "description": "User prefers focused unit tests",
532
- "kind": "feedback",
533
- "created_at": 1,
534
- "updated_at": 1,
535
- },
536
- "content": "User prefers focused unit tests for SDK behavior.",
537
- }, session_id="my-session")
538
-
539
- hits = await runner.query_memory({
540
- "current_context": "Need testing preferences",
541
- "active_tools": [],
542
- "already_surfaced": [],
543
- "top_k": 5,
544
- }, session_id="my-session")
534
+ from deepstrike import MemoryProvenance, MemoryQuery, MemoryRecord, MemoryScope
535
+
536
+ scope = MemoryScope(tenant_id="acme", namespace="assistant")
537
+ await runner.write_memory(MemoryRecord(
538
+ record_id="prefers-small-tests-v1",
539
+ scope=scope,
540
+ name="prefers-small-tests",
541
+ kind="feedback",
542
+ content="User prefers focused unit tests for SDK behavior.",
543
+ description="Testing preference",
544
+ provenance=MemoryProvenance(author="host", trust="user_asserted"),
545
+ created_at=1,
546
+ updated_at=1,
547
+ ), session_id="my-session")
548
+
549
+ hits = await runner.query_memory(MemoryQuery(
550
+ scope=scope,
551
+ query="Need testing preferences",
552
+ top_k=5,
553
+ kinds=["feedback"],
554
+ ), session_id="my-session")
545
555
  ```
546
556
 
547
557
  Session events: `memory_written`, `memory_queried`, `memory_validation_failed`, `memory_retrieval_result`.
@@ -620,7 +630,7 @@ Inbound signals are routed by the in-kernel attention policy (default queue size
620
630
 
621
631
  ```python
622
632
  from deepstrike import SignalGateway, ScheduledPrompt, RuntimeSignal
623
- from deepstrike.runtime import DEFAULT_NATIVE_ATTENTION_POLICY
633
+ from deepstrike.runtime import DEFAULT_NATIVE_SIGNAL_POLICY
624
634
 
625
635
  gw = SignalGateway()
626
636
  gw.schedule(ScheduledPrompt(goal="standup", run_at_ms=target_time))
@@ -631,14 +641,14 @@ runner = RuntimeRunner(RuntimeOptions(
631
641
  session_log=InMemorySessionLog(),
632
642
  execution_plane=plane,
633
643
  signal_source=gw,
634
- attention_policy=DEFAULT_NATIVE_ATTENTION_POLICY,
644
+ signal_policy=DEFAULT_NATIVE_SIGNAL_POLICY,
635
645
  ))
636
646
 
637
647
  runner.interrupt() # cooperative abort → kernel timeout path
638
648
  gw.destroy()
639
649
  ```
640
650
 
641
- Each routed signal produces a `signal_disposed` session event (`category: "ipc"`).
651
+ Each routed signal produces a correlated `signal_delivery_disposed` session event (`category: "ipc"`).
642
652
 
643
653
  ---
644
654
 
@@ -664,23 +674,21 @@ Requires an active parent run (`run()` / `wake()` in progress). The kernel emits
664
674
 
665
675
  ---
666
676
 
667
- ## Harness (evaluation framework)
677
+ ## Attempt loop
668
678
 
669
679
  ```python
670
680
  from deepstrike import (
671
- SinglePassHarness, EvalLoopHarness, HarnessLoop, HarnessRequest,
672
- SubAgentHarnessConfig, QualityGate,
681
+ AttemptLoop, AttemptRequest, RuntimeAttemptBody, StopPolicy,
682
+ LlmEvalJudge, SubAgentHarnessConfig,
673
683
  )
674
684
 
675
- outcome = await SinglePassHarness(runner).run(HarnessRequest(goal="Say hello"))
676
-
677
- class ContainsHello(QualityGate):
678
- async def evaluate(self, request, outcome) -> bool:
679
- return "hello" in outcome.result.lower()
680
-
681
- outcome = await EvalLoopHarness(runner, gate=ContainsHello(), max_attempts=3).run(req)
682
-
683
- loop = HarnessLoop(runner, eval_provider=eval_provider, max_attempts=3, skill_dir="./skills")
685
+ loop = AttemptLoop(
686
+ body=RuntimeAttemptBody(runner),
687
+ judge=LlmEvalJudge(eval_provider),
688
+ stop=StopPolicy(max_attempts=3),
689
+ )
690
+ outcome = await loop.run(AttemptRequest(goal="Write a haiku"))
691
+ print(outcome.run_status, outcome.outcome, outcome.verdict)
684
692
 
685
693
  runner = RuntimeRunner(RuntimeOptions(
686
694
  provider=provider,
@@ -688,11 +696,14 @@ runner = RuntimeRunner(RuntimeOptions(
688
696
  execution_plane=plane,
689
697
  sub_agent_harness=SubAgentHarnessConfig(eval_provider=eval_provider, max_attempts=3),
690
698
  ))
691
- async for event in loop.run_streaming(HarnessRequest(goal="Write a haiku")):
692
- if event.type == "done":
693
- print(event.verdict.passed, event.verdict.feedback)
699
+ async for event in loop.stream(AttemptRequest(goal="Write a haiku")):
700
+ if event.type == "completed":
701
+ print(event.outcome.run_status, event.outcome.verdict)
694
702
  ```
695
703
 
704
+ The default carry policy keeps one session and injects judge feedback as context. Use
705
+ `fresh_with_feedback` or `fresh_with_digest(...)` only when attempt isolation is intentional.
706
+
696
707
  ---
697
708
 
698
709
  ## Stream events
@@ -14,3 +14,7 @@ uuid = { workspace = true }
14
14
 
15
15
  [dev-dependencies]
16
16
  pretty_assertions = "1"
17
+
18
+ [[bench]]
19
+ name = "kernel_baseline"
20
+ harness = false
@@ -0,0 +1,202 @@
1
+ use std::alloc::{GlobalAlloc, Layout, System};
2
+ use std::hint::black_box;
3
+ use std::sync::atomic::{AtomicU64, Ordering};
4
+ use std::time::Instant;
5
+
6
+ use deepstrike_core::orchestration::workflow::{WorkflowNode, WorkflowSpec};
7
+ use deepstrike_core::runtime::kernel::{KernelReliabilityConfig, RunConfig};
8
+ use deepstrike_core::runtime::{KernelInput, KernelInputEvent, KernelRuntime};
9
+ use deepstrike_core::scheduler::policy::SchedulerBudget;
10
+ use deepstrike_core::types::agent::AgentRole;
11
+ use deepstrike_core::types::message::Message;
12
+ use deepstrike_core::types::signal::{RuntimeSignal, SignalSource, SignalType, Urgency};
13
+ use deepstrike_core::types::task::RuntimeTask;
14
+
15
+ struct CountingAllocator;
16
+
17
+ static ALLOCATION_COUNT: AtomicU64 = AtomicU64::new(0);
18
+ static ALLOCATED_BYTES: AtomicU64 = AtomicU64::new(0);
19
+
20
+ unsafe impl GlobalAlloc for CountingAllocator {
21
+ unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
22
+ let pointer = unsafe { System.alloc(layout) };
23
+ if !pointer.is_null() {
24
+ ALLOCATION_COUNT.fetch_add(1, Ordering::Relaxed);
25
+ ALLOCATED_BYTES.fetch_add(layout.size() as u64, Ordering::Relaxed);
26
+ }
27
+ pointer
28
+ }
29
+
30
+ unsafe fn dealloc(&self, pointer: *mut u8, layout: Layout) {
31
+ unsafe { System.dealloc(pointer, layout) };
32
+ }
33
+
34
+ unsafe fn realloc(&self, pointer: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
35
+ let replacement = unsafe { System.realloc(pointer, layout, new_size) };
36
+ if !replacement.is_null() {
37
+ ALLOCATION_COUNT.fetch_add(1, Ordering::Relaxed);
38
+ ALLOCATED_BYTES.fetch_add(new_size as u64, Ordering::Relaxed);
39
+ }
40
+ replacement
41
+ }
42
+ }
43
+
44
+ #[global_allocator]
45
+ static GLOBAL_ALLOCATOR: CountingAllocator = CountingAllocator;
46
+
47
+ fn begin_measurement() -> Instant {
48
+ ALLOCATION_COUNT.store(0, Ordering::Relaxed);
49
+ ALLOCATED_BYTES.store(0, Ordering::Relaxed);
50
+ Instant::now()
51
+ }
52
+
53
+ fn elapsed_ms(label: &str, started: Instant, operations: usize) {
54
+ let elapsed = started.elapsed();
55
+ let allocations = ALLOCATION_COUNT.load(Ordering::Relaxed);
56
+ let allocated_bytes = ALLOCATED_BYTES.load(Ordering::Relaxed);
57
+ println!(
58
+ "{label}: {:.3} ms total, {:.3} us/op ({operations} ops), {allocations} allocations / {allocated_bytes} bytes",
59
+ elapsed.as_secs_f64() * 1_000.0,
60
+ elapsed.as_secs_f64() * 1_000_000.0 / operations.max(1) as f64,
61
+ );
62
+ }
63
+
64
+ fn input(operation: &str, index: usize, event: KernelInputEvent) -> KernelInput {
65
+ KernelInput::correlated(
66
+ operation,
67
+ format!("{operation}-event-{index}"),
68
+ index as u64,
69
+ event,
70
+ )
71
+ }
72
+
73
+ fn main() {
74
+ let f1 = deepstrike_core::benchmark::f1_critical_path_skew();
75
+ assert!(f1.policy_makespan < f1.id_order_makespan);
76
+ let f2 = deepstrike_core::benchmark::f2_loop_fairness();
77
+ assert_eq!(f2.waiting_rounds, 0);
78
+ let f3 = deepstrike_core::benchmark::f3_termination_dependency_matrix();
79
+ assert_eq!(f3.cases_checked, 12);
80
+ println!("DAG gates: F1={f1:?}, F2={f2:?}, F3={f3:?}");
81
+
82
+ let mut step_runtime = KernelRuntime::new(SchedulerBudget::default());
83
+ let started = begin_measurement();
84
+ for index in 0..10_000 {
85
+ black_box(step_runtime.step(input(
86
+ "step-baseline",
87
+ index,
88
+ KernelInputEvent::SetMemoryEnabled {
89
+ enabled: index % 2 == 0,
90
+ },
91
+ )));
92
+ }
93
+ elapsed_ms("kernel step", started, 10_000);
94
+
95
+ let mut render_runtime = KernelRuntime::new(SchedulerBudget::default());
96
+ for index in 0..1_000 {
97
+ render_runtime.step(input(
98
+ "render-baseline",
99
+ index,
100
+ KernelInputEvent::AddHistoryMessage {
101
+ message: Message::user(format!("history-{index} {}", "x".repeat(256))),
102
+ tokens: Some(64),
103
+ },
104
+ ));
105
+ }
106
+ let started = begin_measurement();
107
+ for _ in 0..100 {
108
+ black_box(render_runtime.render());
109
+ }
110
+ elapsed_ms("large-context render", started, 100);
111
+
112
+ let started = begin_measurement();
113
+ black_box(render_runtime.step(input(
114
+ "render-baseline",
115
+ 1_001,
116
+ KernelInputEvent::ForceCompact,
117
+ )));
118
+ elapsed_ms("compression", started, 1);
119
+
120
+ let nodes = (0..100)
121
+ .map(|index| {
122
+ WorkflowNode::new(
123
+ RuntimeTask::new(format!("node-{index}")),
124
+ AgentRole::Implement,
125
+ )
126
+ })
127
+ .collect();
128
+ let mut workflow_runtime = KernelRuntime::new(SchedulerBudget::default());
129
+ workflow_runtime.step(input(
130
+ "workflow-baseline",
131
+ 0,
132
+ KernelInputEvent::StartRun {
133
+ task: RuntimeTask::new("parent"),
134
+ run_spec: None,
135
+ },
136
+ ));
137
+ let started = begin_measurement();
138
+ black_box(workflow_runtime.step(input(
139
+ "workflow-baseline",
140
+ 1,
141
+ KernelInputEvent::SubmitWorkflow {
142
+ spec: WorkflowSpec::new(nodes),
143
+ parent_session_id: "parent".into(),
144
+ submitter_agent_id: None,
145
+ },
146
+ )));
147
+ elapsed_ms("large workflow", started, 1);
148
+
149
+ let mut signal_runtime = KernelRuntime::new(SchedulerBudget::default());
150
+ signal_runtime.step(input(
151
+ "signal-baseline",
152
+ 0,
153
+ KernelInputEvent::ConfigureRun {
154
+ config: RunConfig {
155
+ reliability: Some(KernelReliabilityConfig {
156
+ snapshot_input_limit: Some(20_000),
157
+ ..KernelReliabilityConfig::default()
158
+ }),
159
+ ..RunConfig::default()
160
+ },
161
+ },
162
+ ));
163
+ signal_runtime.step(input(
164
+ "signal-baseline",
165
+ 1,
166
+ KernelInputEvent::StartRun {
167
+ task: RuntimeTask::new("signals"),
168
+ run_spec: None,
169
+ },
170
+ ));
171
+ let started = begin_measurement();
172
+ for index in 2..10_002 {
173
+ let mut signal = RuntimeSignal::new(
174
+ SignalSource::Gateway,
175
+ SignalType::Event,
176
+ Urgency::Normal,
177
+ format!("signal-{index}"),
178
+ );
179
+ signal.id = uuid::Uuid::from_u128(index as u128);
180
+ black_box(signal_runtime.step(input(
181
+ "signal-baseline",
182
+ index,
183
+ KernelInputEvent::DeliverSignal {
184
+ delivery_id: format!("delivery-{index}"),
185
+ attempt: 1,
186
+ signal,
187
+ },
188
+ )));
189
+ }
190
+ elapsed_ms("signal storm", started, 10_000);
191
+
192
+ let started = begin_measurement();
193
+ let encoded = signal_runtime
194
+ .snapshot_json()
195
+ .expect("encode 10k-event snapshot");
196
+ elapsed_ms("snapshot encode", started, 10_002);
197
+ println!("snapshot size: {} bytes", encoded.len());
198
+
199
+ let started = begin_measurement();
200
+ black_box(KernelRuntime::restore_snapshot_json(&encoded).expect("decode/replay snapshot"));
201
+ elapsed_ms("10k-event replay + snapshot decode", started, 10_002);
202
+ }