deepstrike 0.2.26__tar.gz → 0.2.28__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 (173) hide show
  1. {deepstrike-0.2.26 → deepstrike-0.2.28}/Cargo.lock +5 -5
  2. {deepstrike-0.2.26 → deepstrike-0.2.28}/Cargo.toml +2 -2
  3. {deepstrike-0.2.26 → deepstrike-0.2.28}/PKG-INFO +1 -1
  4. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/runner.py +76 -9
  5. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/tools/registry.py +14 -0
  6. {deepstrike-0.2.26 → deepstrike-0.2.28}/pyproject.toml +1 -1
  7. {deepstrike-0.2.26 → deepstrike-0.2.28}/README.md +0 -0
  8. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/Cargo.toml +0 -0
  9. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/compression.rs +0 -0
  10. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/config.rs +0 -0
  11. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/dashboard.rs +0 -0
  12. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/manager.rs +0 -0
  13. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/mod.rs +0 -0
  14. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/partitions.rs +0 -0
  15. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/pressure.rs +0 -0
  16. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/renderer.rs +0 -0
  17. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/renewal.rs +0 -0
  18. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/sections.rs +0 -0
  19. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/skill_catalog.rs +0 -0
  20. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/snapshot.rs +0 -0
  21. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/summarizer.rs +0 -0
  22. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/task_state.rs +0 -0
  23. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/text.rs +0 -0
  24. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/context/token_engine.rs +0 -0
  25. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/governance/audit.rs +0 -0
  26. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/governance/constraint.rs +0 -0
  27. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/governance/mod.rs +0 -0
  28. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/governance/permission.rs +0 -0
  29. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/governance/pipeline.rs +0 -0
  30. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/governance/quota.rs +0 -0
  31. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/governance/rate_limit.rs +0 -0
  32. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/governance/sandbox.rs +0 -0
  33. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/governance/tool_decision.rs +0 -0
  34. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/governance/veto.rs +0 -0
  35. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/harness/eval.rs +0 -0
  36. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/harness/mod.rs +0 -0
  37. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/lib.rs +0 -0
  38. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/memory/curator.rs +0 -0
  39. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/memory/durable.rs +0 -0
  40. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/memory/extractor.rs +0 -0
  41. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/memory/idle_pipeline.rs +0 -0
  42. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/memory/mod.rs +0 -0
  43. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/memory/runtime.rs +0 -0
  44. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/memory/semantic.rs +0 -0
  45. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/memory/session.rs +0 -0
  46. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/memory/synthesis.rs +0 -0
  47. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/memory/trace_analyzer.rs +0 -0
  48. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/memory/working.rs +0 -0
  49. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/mm/handle.rs +0 -0
  50. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/mm/memory.rs +0 -0
  51. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/mm/mod.rs +0 -0
  52. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/orchestration/mod.rs +0 -0
  53. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/orchestration/task_graph.rs +0 -0
  54. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/orchestration/tournament.rs +0 -0
  55. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/orchestration/workflow/mod.rs +0 -0
  56. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/orchestration/workflow/run.rs +0 -0
  57. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/proc/mod.rs +0 -0
  58. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/runtime/event_log.rs +0 -0
  59. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/runtime/kernel.rs +0 -0
  60. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/runtime/mod.rs +0 -0
  61. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/runtime/repair.rs +0 -0
  62. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/runtime/replay.rs +0 -0
  63. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/runtime/session.rs +0 -0
  64. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/runtime/snapshot.rs +0 -0
  65. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/milestone.rs +0 -0
  66. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/mod.rs +0 -0
  67. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/policy.rs +0 -0
  68. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/rollback.rs +0 -0
  69. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/state_machine/capability.rs +0 -0
  70. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/state_machine/eviction.rs +0 -0
  71. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/state_machine/gate.rs +0 -0
  72. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/state_machine/milestone_exec.rs +0 -0
  73. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/state_machine/mod.rs +0 -0
  74. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/state_machine/process.rs +0 -0
  75. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/state_machine/signal.rs +0 -0
  76. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/state_machine/tests.rs +0 -0
  77. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/state_machine/workflow.rs +0 -0
  78. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/scheduler/tcb.rs +0 -0
  79. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/signals/attention.rs +0 -0
  80. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/signals/mod.rs +0 -0
  81. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/signals/queue.rs +0 -0
  82. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/signals/router.rs +0 -0
  83. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/syscall/mod.rs +0 -0
  84. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/agent.rs +0 -0
  85. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/capability.rs +0 -0
  86. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/contract.rs +0 -0
  87. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/error.rs +0 -0
  88. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/message.rs +0 -0
  89. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/milestone.rs +0 -0
  90. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/mod.rs +0 -0
  91. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/model.rs +0 -0
  92. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/policy.rs +0 -0
  93. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/result.rs +0 -0
  94. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/signal.rs +0 -0
  95. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/skill.rs +0 -0
  96. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-core/src/types/task.rs +0 -0
  97. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-py/Cargo.toml +0 -0
  98. {deepstrike-0.2.26 → deepstrike-0.2.28}/crates/deepstrike-py/src/lib.rs +0 -0
  99. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/__init__.py +0 -0
  100. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/collaboration/__init__.py +0 -0
  101. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/collaboration/contract.py +0 -0
  102. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/collaboration/handoff.py +0 -0
  103. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/collaboration/harness.py +0 -0
  104. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/collaboration/modes.py +0 -0
  105. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/collaboration/pool.py +0 -0
  106. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/governance.py +0 -0
  107. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/harness/__init__.py +0 -0
  108. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/harness/harness.py +0 -0
  109. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/kernel/__init__.py +0 -0
  110. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/knowledge/__init__.py +0 -0
  111. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/knowledge/source.py +0 -0
  112. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/memory/__init__.py +0 -0
  113. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/memory/agent.py +0 -0
  114. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/memory/in_memory_store.py +0 -0
  115. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/memory/protocols.py +0 -0
  116. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/memory/working.py +0 -0
  117. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/__init__.py +0 -0
  118. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/anthropic.py +0 -0
  119. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/base.py +0 -0
  120. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/deepseek.py +0 -0
  121. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/gemini.py +0 -0
  122. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/glm.py +0 -0
  123. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/kimi.py +0 -0
  124. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/minimax.py +0 -0
  125. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/ollama.py +0 -0
  126. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/openai.py +0 -0
  127. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/openai_responses.py +0 -0
  128. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/qwen.py +0 -0
  129. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/replay.py +0 -0
  130. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/replay_validator.py +0 -0
  131. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/providers/stream.py +0 -0
  132. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/__init__.py +0 -0
  133. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/archive.py +0 -0
  134. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/credential_vault.py +0 -0
  135. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/eval.py +0 -0
  136. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/execution_plane.py +0 -0
  137. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/filtered_plane.py +0 -0
  138. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/kernel_event_log.py +0 -0
  139. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/kernel_step.py +0 -0
  140. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/large_result_spool.py +0 -0
  141. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/mcp_proxy_plane.py +0 -0
  142. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/os_profile.py +0 -0
  143. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/os_snapshot.py +0 -0
  144. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/output_schema.py +0 -0
  145. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/process_sandbox_plane.py +0 -0
  146. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/provider_replay.py +0 -0
  147. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/reducers.py +0 -0
  148. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/remote_vpc_plane.py +0 -0
  149. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/replay_fixture.py +0 -0
  150. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/replay_provider.py +0 -0
  151. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/replay_sanitize.py +0 -0
  152. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/session_log.py +0 -0
  153. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/session_repair.py +0 -0
  154. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/sub_agent_orchestrator.py +0 -0
  155. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/workflow_control_flow.py +0 -0
  156. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/workflow_store.py +0 -0
  157. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/runtime/worktree_plane.py +0 -0
  158. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/safety/__init__.py +0 -0
  159. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/safety/permissions.py +0 -0
  160. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/signals/__init__.py +0 -0
  161. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/signals/gateway.py +0 -0
  162. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/signals/scheduled.py +0 -0
  163. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/signals/types.py +0 -0
  164. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/skills/__init__.py +0 -0
  165. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/skills/registry.py +0 -0
  166. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/skills/watcher.py +0 -0
  167. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/tools/__init__.py +0 -0
  168. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/tools/builtin/__init__.py +0 -0
  169. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/tools/builtin/read_file.py +0 -0
  170. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/tools/errors.py +0 -0
  171. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/tools/execution.py +0 -0
  172. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/types/__init__.py +0 -0
  173. {deepstrike-0.2.26 → deepstrike-0.2.28}/deepstrike/types/agent.py +0 -0
@@ -194,7 +194,7 @@ dependencies = [
194
194
 
195
195
  [[package]]
196
196
  name = "deepstrike-core"
197
- version = "0.2.26"
197
+ version = "0.2.28"
198
198
  dependencies = [
199
199
  "compact_str",
200
200
  "pretty_assertions",
@@ -206,7 +206,7 @@ dependencies = [
206
206
 
207
207
  [[package]]
208
208
  name = "deepstrike-node"
209
- version = "0.2.26"
209
+ version = "0.2.28"
210
210
  dependencies = [
211
211
  "compact_str",
212
212
  "deepstrike-core",
@@ -218,7 +218,7 @@ dependencies = [
218
218
 
219
219
  [[package]]
220
220
  name = "deepstrike-py"
221
- version = "0.2.26"
221
+ version = "0.2.28"
222
222
  dependencies = [
223
223
  "compact_str",
224
224
  "deepstrike-core",
@@ -229,7 +229,7 @@ dependencies = [
229
229
 
230
230
  [[package]]
231
231
  name = "deepstrike-sdk"
232
- version = "0.2.26"
232
+ version = "0.2.28"
233
233
  dependencies = [
234
234
  "async-stream",
235
235
  "async-trait",
@@ -263,7 +263,7 @@ dependencies = [
263
263
 
264
264
  [[package]]
265
265
  name = "deepstrike-wasm"
266
- version = "0.2.26"
266
+ version = "0.2.28"
267
267
  dependencies = [
268
268
  "compact_str",
269
269
  "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.26"
6
+ version = "0.2.28"
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.26" }
12
+ deepstrike-core = { path = "crates/deepstrike-core", version = "0.2.28" }
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.26
3
+ Version: 0.2.28
4
4
  Requires-Dist: httpx>=0.27
5
5
  Requires-Dist: pyyaml>=6.0
6
6
  Requires-Dist: anyio>=4.0
@@ -466,6 +466,68 @@ class RuntimeRunner:
466
466
  return await self.run_workflow(spec, _initial_event=initial_event)
467
467
 
468
468
  async def run_workflow(
469
+ self,
470
+ spec: "WorkflowSpec",
471
+ *,
472
+ resumed_completed: list[str] | None = None,
473
+ resumed_submissions: list | None = None,
474
+ session_id: str | None = None,
475
+ _initial_event: dict[str, Any] | None = None,
476
+ ) -> dict[str, list[str]]:
477
+ """Run a declarative workflow DAG, standalone or mid-run.
478
+
479
+ With no active parent run (e.g. a stateless request handler) this auto-bootstraps a kernel
480
+ that owns the DAG — ``start_run`` plus the same governance/quota/attention policies a full
481
+ ``run()`` gets — drives it, and tears it down so the runner is reusable. Called during an
482
+ active ``run()``, it drives the workflow on that kernel instead. ``session_id`` names the
483
+ standalone session (defaults to a fresh uuid); it is ignored when a run is already active.
484
+ """
485
+ bootstrapped = self._active_kernel is None or self._current_session_id is None
486
+ if bootstrapped:
487
+ self._bootstrap_workflow_kernel(session_id or f"wf-{uuid.uuid4()}", spec)
488
+ try:
489
+ return await self._run_workflow_inner(
490
+ spec,
491
+ resumed_completed=resumed_completed,
492
+ resumed_submissions=resumed_submissions,
493
+ _initial_event=_initial_event,
494
+ )
495
+ finally:
496
+ if bootstrapped:
497
+ self._active_kernel = None
498
+ self._current_session_id = None
499
+ self._pending_observations = []
500
+
501
+ def _bootstrap_workflow_kernel(self, session_id: str, spec: "WorkflowSpec") -> KernelRuntime:
502
+ """Bootstrap a standalone kernel for a host-driven workflow with no active parent run.
503
+
504
+ Mirrors ``_execute``'s pre-run setup (governance / attention / scheduler-budget / resource-quota,
505
+ then ``start_run``) so DAG-node spawns are gated and quota'd exactly as a mid-run spawn. Records a
506
+ best-effort ``run_started`` event so the standalone run can be resumed via ``resume_workflow``.
507
+ """
508
+ self._interrupted = False
509
+ self._pending_observations = []
510
+ self._current_session_id = session_id
511
+ runtime = self._create_syscall_runtime()
512
+ self._active_kernel = runtime
513
+ goal = f"workflow:{len(spec.nodes)} nodes"
514
+
515
+ os_profile = assert_native_profile(self._opts.os_profile or "native")
516
+ gov_policy = self._opts.governance_policy or os_profile.governance_policy
517
+ kernel_apply(runtime, self._pending_observations, governance_policy_to_kernel_event(gov_policy))
518
+ ap = self._opts.attention_policy or os_profile.attention_policy
519
+ max_q = ap.get("max_queue_size") if isinstance(ap, dict) else getattr(ap, "max_queue_size", None)
520
+ kernel_apply(runtime, self._pending_observations, {
521
+ "kind": "set_attention_policy",
522
+ **({"max_queue_size": max_q} if max_q is not None else {}),
523
+ })
524
+ scheduler_budget = _scheduler_budget_to_kernel(self._opts.scheduler_budget)
525
+ if scheduler_budget is not None:
526
+ kernel_apply(runtime, self._pending_observations, {"kind": "set_scheduler_budget", **scheduler_budget})
527
+ kernel_apply(runtime, self._pending_observations, {"kind": "start_run", "task": {"goal": goal, "criteria": []}})
528
+ return runtime
529
+
530
+ async def _run_workflow_inner(
469
531
  self,
470
532
  spec: "WorkflowSpec",
471
533
  *,
@@ -523,8 +585,8 @@ class RuntimeRunner:
523
585
  loop_instruction,
524
586
  )
525
587
 
526
- if self._active_kernel is None or self._current_session_id is None:
527
- raise RuntimeError("run_workflow requires an active parent run")
588
+ # The public run_workflow wrapper guarantees an active kernel here (bootstrapping one when called
589
+ # standalone), so no guard is needed.
528
590
  parent_session_id = self._current_session_id
529
591
  runtime = self._active_kernel
530
592
  orchestrator = self._opts.sub_agent_orchestrator or default_sub_agent_orchestrator
@@ -817,27 +879,32 @@ class RuntimeRunner:
817
879
  })
818
880
  return SimpleNamespace(kind="call_provider", context=runtime.render(), tools=action.tools)
819
881
 
820
- async def resume_workflow(self, spec: "WorkflowSpec") -> dict[str, list[str]]:
821
- """Resume a workflow from the parent session's completed nodes.
882
+ async def resume_workflow(
883
+ self, spec: "WorkflowSpec", *, session_id: str | None = None,
884
+ ) -> dict[str, list[str]]:
885
+ """Resume a workflow from a session's completed nodes.
822
886
 
823
- Reads the session log, extracts completed workflow node agent_ids, and
824
- calls run_workflow with resumed_completed so the kernel skips those nodes.
887
+ Reads the session log, extracts completed workflow node agent_ids, and calls run_workflow with
888
+ resumed_completed so the kernel skips those nodes. Pass ``session_id`` to resume an interrupted
889
+ standalone run from a stateless handler; omit it to resume the active session.
825
890
  """
826
891
  from deepstrike.runtime.session_repair import (
827
892
  recover_completed_workflow_nodes,
828
893
  recover_submitted_workflow_nodes,
829
894
  )
830
895
 
831
- if self._current_session_id is None:
832
- raise RuntimeError("resume_workflow requires an active parent run")
896
+ sid = session_id or self._current_session_id
897
+ if sid is None:
898
+ raise RuntimeError("resume_workflow requires an active parent run or an explicit session_id")
833
899
 
834
- events = await self._opts.session_log.read(self._current_session_id)
900
+ events = await self._opts.session_log.read(sid)
835
901
  resumed_completed = recover_completed_workflow_nodes(events)
836
902
  resumed_submissions = recover_submitted_workflow_nodes(events)
837
903
  return await self.run_workflow(
838
904
  spec,
839
905
  resumed_completed=resumed_completed,
840
906
  resumed_submissions=resumed_submissions,
907
+ session_id=sid,
841
908
  )
842
909
 
843
910
  def interrupt(self) -> None:
@@ -124,6 +124,20 @@ def _validate_value(schema: dict[str, Any], parent: Any, key: Any, path: str, st
124
124
  state["repaired"] = True
125
125
  except ValueError:
126
126
  pass
127
+ elif expected == "array":
128
+ # coerceItemArray: LLMs commonly wrap array args in a single-key {"item": X} / {"items": X}
129
+ # envelope, or emit a lone object where a one-element array was expected. Coerce both to a
130
+ # list so per-element validation runs (yielding precise `$.path[i]…` errors) instead of a
131
+ # blunt "must be array". Aligned with the str→number/bool casts above.
132
+ if isinstance(value, dict):
133
+ keys = list(value.keys())
134
+ if len(keys) == 1 and keys[0] in ("item", "items"):
135
+ inner = value[keys[0]]
136
+ parent[key] = inner if isinstance(inner, list) else [inner]
137
+ else:
138
+ parent[key] = [value]
139
+ value = parent[key]
140
+ state["repaired"] = True
127
141
 
128
142
  # 2. 补默认值 (Default Injection)
129
143
  if expected == "object":
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "deepstrike"
7
- version = "0.2.26"
7
+ version = "0.2.28"
8
8
  requires-python = ">=3.10"
9
9
  readme = "README.md"
10
10
  dependencies = [
File without changes