deepstrike 0.2.72__tar.gz → 0.2.73__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 (263) hide show
  1. {deepstrike-0.2.72 → deepstrike-0.2.73}/Cargo.lock +6 -6
  2. {deepstrike-0.2.72 → deepstrike-0.2.73}/Cargo.toml +3 -3
  3. {deepstrike-0.2.72 → deepstrike-0.2.73}/PKG-INFO +11 -23
  4. {deepstrike-0.2.72 → deepstrike-0.2.73}/README.md +10 -22
  5. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/measurement.rs +1 -2
  6. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/config.rs +3 -8
  7. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/driver/effects.rs +0 -8
  8. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/effect.rs +6 -67
  9. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/projection.rs +1 -11
  10. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/__init__.py +2 -2
  11. deepstrike-0.2.73/deepstrike/agent.py +125 -0
  12. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/base.py +2 -3
  13. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/model_registry.py +1 -7
  14. deepstrike-0.2.73/deepstrike/providers/protocols.py +18 -0
  15. {deepstrike-0.2.72 → deepstrike-0.2.73}/pyproject.toml +1 -1
  16. deepstrike-0.2.72/deepstrike/agent.py +0 -69
  17. {deepstrike-0.2.72 → deepstrike-0.2.73}/LICENSE +0 -0
  18. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/Cargo.toml +0 -0
  19. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/LICENSE +0 -0
  20. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/benches/kernel_baseline.rs +0 -0
  21. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/benches/verifiable_baseline.rs +0 -0
  22. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/benches/wait_index_baseline.rs +0 -0
  23. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/benchmark/mod.rs +0 -0
  24. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/bin/deepstrike.rs +0 -0
  25. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/bin/support/evidence_io.rs +0 -0
  26. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/compression.rs +0 -0
  27. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/config.rs +0 -0
  28. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/execution.rs +0 -0
  29. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/fault.rs +0 -0
  30. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/manager.rs +0 -0
  31. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/mod.rs +0 -0
  32. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/partitions.rs +0 -0
  33. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/policy.rs +0 -0
  34. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/pressure.rs +0 -0
  35. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/renderer.rs +0 -0
  36. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/renewal.rs +0 -0
  37. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/skill_catalog.rs +0 -0
  38. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/summarizer.rs +0 -0
  39. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/task_state.rs +0 -0
  40. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/text.rs +0 -0
  41. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/token_engine.rs +0 -0
  42. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/units.rs +0 -0
  43. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/context/utility.rs +0 -0
  44. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/evolution.rs +0 -0
  45. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/governance/constraint.rs +0 -0
  46. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/governance/mod.rs +0 -0
  47. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/governance/permission.rs +0 -0
  48. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/governance/pipeline.rs +0 -0
  49. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/governance/quota.rs +0 -0
  50. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/governance/rate_limit.rs +0 -0
  51. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/governance/repeat_fuse.rs +0 -0
  52. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/governance/veto.rs +0 -0
  53. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/harness/eval.rs +0 -0
  54. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/harness/mod.rs +0 -0
  55. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/lexical.rs +0 -0
  56. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/lib.rs +0 -0
  57. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/memory/curator.rs +0 -0
  58. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/memory/durable.rs +0 -0
  59. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/memory/mod.rs +0 -0
  60. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/mm/handle.rs +0 -0
  61. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/mm/memory.rs +0 -0
  62. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/mm/mod.rs +0 -0
  63. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/mm/value.rs +0 -0
  64. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/orchestration/mod.rs +0 -0
  65. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/orchestration/task_graph.rs +0 -0
  66. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/orchestration/tournament.rs +0 -0
  67. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/orchestration/workflow/mod.rs +0 -0
  68. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/orchestration/workflow/run.rs +0 -0
  69. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/proc/mod.rs +0 -0
  70. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/projection_pairs.rs +0 -0
  71. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/chain_validator/mod.rs +0 -0
  72. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/event_log.rs +0 -0
  73. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/observation.rs +0 -0
  74. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/binding.rs +0 -0
  75. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/checkpoint.rs +0 -0
  76. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/command.rs +0 -0
  77. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/crash_point.rs +0 -0
  78. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/driver/continuation.rs +0 -0
  79. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/driver/events.rs +0 -0
  80. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/driver/planning.rs +0 -0
  81. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/driver/projection.rs +0 -0
  82. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/driver/provider.rs +0 -0
  83. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/driver/syscall.rs +0 -0
  84. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/driver/tests.rs +0 -0
  85. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/driver.rs +0 -0
  86. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/envelope.rs +0 -0
  87. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/event.rs +0 -0
  88. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/fault.rs +0 -0
  89. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/record.rs +0 -0
  90. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/restore.rs +0 -0
  91. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/root.rs +0 -0
  92. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/scalar.rs +0 -0
  93. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/syscall.rs +0 -0
  94. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/terminal.rs +0 -0
  95. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/tests.rs +0 -0
  96. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire/transaction.rs +0 -0
  97. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel/wire.rs +0 -0
  98. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/kernel.rs +0 -0
  99. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/mod.rs +0 -0
  100. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/repair.rs +0 -0
  101. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/replay.rs +0 -0
  102. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/session.rs +0 -0
  103. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/runtime/verifiable.rs +0 -0
  104. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/budget_grant.rs +0 -0
  105. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/cross_operation.rs +0 -0
  106. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/entropy.rs +0 -0
  107. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/mailbox.rs +0 -0
  108. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/milestone.rs +0 -0
  109. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/mod.rs +0 -0
  110. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/policy.rs +0 -0
  111. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/rollback.rs +0 -0
  112. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/runnable.rs +0 -0
  113. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/state_machine/cancellation.rs +0 -0
  114. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/state_machine/capability.rs +0 -0
  115. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/state_machine/eviction.rs +0 -0
  116. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/state_machine/gate.rs +0 -0
  117. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/state_machine/milestone_exec.rs +0 -0
  118. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/state_machine/mod.rs +0 -0
  119. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/state_machine/process.rs +0 -0
  120. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/state_machine/signal.rs +0 -0
  121. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/state_machine/tests.rs +0 -0
  122. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/state_machine/workflow.rs +0 -0
  123. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/tcb.rs +0 -0
  124. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/scheduler/wait_index.rs +0 -0
  125. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/signals/attention.rs +0 -0
  126. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/signals/mod.rs +0 -0
  127. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/signals/queue.rs +0 -0
  128. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/signals/router.rs +0 -0
  129. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/syscall/mod.rs +0 -0
  130. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/agent.rs +0 -0
  131. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/capability.rs +0 -0
  132. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/contract.rs +0 -0
  133. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/durable_content.rs +0 -0
  134. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/error.rs +0 -0
  135. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/message.rs +0 -0
  136. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/milestone.rs +0 -0
  137. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/mod.rs +0 -0
  138. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/policy.rs +0 -0
  139. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/result.rs +0 -0
  140. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/signal.rs +0 -0
  141. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/skill.rs +0 -0
  142. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-core/src/types/task.rs +0 -0
  143. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-py/Cargo.toml +0 -0
  144. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-py/LICENSE +0 -0
  145. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-py/src/lib.rs +0 -0
  146. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-tokenizer/Cargo.toml +0 -0
  147. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-tokenizer/LICENSE +0 -0
  148. {deepstrike-0.2.72 → deepstrike-0.2.73}/crates/deepstrike-tokenizer/src/lib.rs +0 -0
  149. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/agent_ir.py +0 -0
  150. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/collaboration/__init__.py +0 -0
  151. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/collaboration/contract.py +0 -0
  152. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/collaboration/handoff.py +0 -0
  153. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/collaboration/harness.py +0 -0
  154. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/collaboration/modes.py +0 -0
  155. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/collaboration/pool.py +0 -0
  156. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/governance.py +0 -0
  157. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/harness/__init__.py +0 -0
  158. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/harness/harness.py +0 -0
  159. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/harness/judge.py +0 -0
  160. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/kernel/__init__.py +0 -0
  161. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/kernel/canonical.py +0 -0
  162. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/knowledge/__init__.py +0 -0
  163. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/knowledge/source.py +0 -0
  164. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/memory/__init__.py +0 -0
  165. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/memory/agent.py +0 -0
  166. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/memory/durable.py +0 -0
  167. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/memory/extraction.py +0 -0
  168. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/memory/in_memory_store.py +0 -0
  169. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/memory/protocols.py +0 -0
  170. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/memory/ranking.py +0 -0
  171. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/memory/retention.py +0 -0
  172. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/memory/working.py +0 -0
  173. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/__init__.py +0 -0
  174. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/anthropic.py +0 -0
  175. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/anthropic_adapter.py +0 -0
  176. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/anthropic_compatible.py +0 -0
  177. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/capability_router.py +0 -0
  178. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/credentials.py +0 -0
  179. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/embedding.py +0 -0
  180. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/factories.py +0 -0
  181. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/gemini.py +0 -0
  182. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/gemini_adapter.py +0 -0
  183. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/model_catalog.py +0 -0
  184. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/ollama.py +0 -0
  185. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/ollama_adapter.py +0 -0
  186. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/openai.py +0 -0
  187. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/openai_chat_adapter.py +0 -0
  188. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/openai_responses.py +0 -0
  189. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/prepared_request.py +0 -0
  190. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/protocol_adapter.py +0 -0
  191. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/provider_error.py +0 -0
  192. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/qwen.py +0 -0
  193. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/replay.py +0 -0
  194. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/replay_validator.py +0 -0
  195. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/request_plan.py +0 -0
  196. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/runtime_registry.py +0 -0
  197. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/stop_reason.py +0 -0
  198. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/stream.py +0 -0
  199. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/usage.py +0 -0
  200. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/providers/vendor_profiles.py +0 -0
  201. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/__init__.py +0 -0
  202. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/archive.py +0 -0
  203. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/canonical_kernel_step.py +0 -0
  204. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/context.py +0 -0
  205. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/context_policy.py +0 -0
  206. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/credential_vault.py +0 -0
  207. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/durable_content.py +0 -0
  208. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/eval.py +0 -0
  209. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/event_stream.py +0 -0
  210. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/evolution.py +0 -0
  211. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/execution_evidence.py +0 -0
  212. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/execution_plane.py +0 -0
  213. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/facade.py +0 -0
  214. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/filtered_plane.py +0 -0
  215. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/kernel_event_log.py +0 -0
  216. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/kernel_journal.py +0 -0
  217. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/kernel_step.py +0 -0
  218. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/loop_driver.py +0 -0
  219. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/mcp_proxy_plane.py +0 -0
  220. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/os_profile.py +0 -0
  221. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/os_snapshot.py +0 -0
  222. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/output_schema.py +0 -0
  223. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/payload_store.py +0 -0
  224. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/process_sandbox_plane.py +0 -0
  225. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/provider_replay.py +0 -0
  226. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/reaction_checkpoint.py +0 -0
  227. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/reactive_session.py +0 -0
  228. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/reducers.py +0 -0
  229. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/reliability.py +0 -0
  230. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/remote_vpc_plane.py +0 -0
  231. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/replay_fixture.py +0 -0
  232. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/replay_provider.py +0 -0
  233. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/replay_sanitize.py +0 -0
  234. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/run_group.py +0 -0
  235. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/runner.py +0 -0
  236. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/session_log.py +0 -0
  237. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/session_repair.py +0 -0
  238. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/sub_agent_orchestrator.py +0 -0
  239. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/turn_policy.py +0 -0
  240. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/verifiable_report.py +0 -0
  241. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/workflow_control_flow.py +0 -0
  242. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/workflow_store.py +0 -0
  243. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/runtime/worktree_plane.py +0 -0
  244. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/safety/__init__.py +0 -0
  245. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/safety/permissions.py +0 -0
  246. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/signals/__init__.py +0 -0
  247. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/signals/gateway.py +0 -0
  248. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/signals/scheduled.py +0 -0
  249. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/signals/types.py +0 -0
  250. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/skills/__init__.py +0 -0
  251. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/skills/loader.py +0 -0
  252. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/skills/registry.py +0 -0
  253. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/skills/watcher.py +0 -0
  254. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/tools/__init__.py +0 -0
  255. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/tools/builtin/__init__.py +0 -0
  256. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/tools/builtin/read_file.py +0 -0
  257. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/tools/errors.py +0 -0
  258. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/tools/execution.py +0 -0
  259. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/tools/registry.py +0 -0
  260. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/types/__init__.py +0 -0
  261. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/types/agent.py +0 -0
  262. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/types/content.py +0 -0
  263. {deepstrike-0.2.72 → deepstrike-0.2.73}/deepstrike/types/content_policy.py +0 -0
@@ -254,7 +254,7 @@ dependencies = [
254
254
 
255
255
  [[package]]
256
256
  name = "deepstrike-core"
257
- version = "0.2.72"
257
+ version = "0.2.73"
258
258
  dependencies = [
259
259
  "compact_str",
260
260
  "deepstrike-tokenizer",
@@ -268,7 +268,7 @@ dependencies = [
268
268
 
269
269
  [[package]]
270
270
  name = "deepstrike-node"
271
- version = "0.2.72"
271
+ version = "0.2.73"
272
272
  dependencies = [
273
273
  "compact_str",
274
274
  "deepstrike-core",
@@ -280,7 +280,7 @@ dependencies = [
280
280
 
281
281
  [[package]]
282
282
  name = "deepstrike-py"
283
- version = "0.2.72"
283
+ version = "0.2.73"
284
284
  dependencies = [
285
285
  "compact_str",
286
286
  "deepstrike-core",
@@ -291,7 +291,7 @@ dependencies = [
291
291
 
292
292
  [[package]]
293
293
  name = "deepstrike-sdk"
294
- version = "0.2.72"
294
+ version = "0.2.73"
295
295
  dependencies = [
296
296
  "async-stream",
297
297
  "async-trait",
@@ -327,7 +327,7 @@ dependencies = [
327
327
 
328
328
  [[package]]
329
329
  name = "deepstrike-tokenizer"
330
- version = "0.2.72"
330
+ version = "0.2.73"
331
331
  dependencies = [
332
332
  "pretty_assertions",
333
333
  "tiktoken-rs",
@@ -335,7 +335,7 @@ dependencies = [
335
335
 
336
336
  [[package]]
337
337
  name = "deepstrike-wasm"
338
- version = "0.2.72"
338
+ version = "0.2.73"
339
339
  dependencies = [
340
340
  "compact_str",
341
341
  "deepstrike-core",
@@ -3,13 +3,13 @@ resolver = "2"
3
3
  members = ["crates/deepstrike-core", "crates/deepstrike-tokenizer", "crates/deepstrike-py"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.2.72"
6
+ version = "0.2.73"
7
7
  edition = "2024"
8
8
  repository = "https://github.com/kongusen/deepstrike"
9
9
 
10
10
  [workspace.dependencies]
11
- deepstrike-core = { path = "crates/deepstrike-core", version = "0.2.72" }
12
- deepstrike-tokenizer = { path = "crates/deepstrike-tokenizer", version = "0.2.72" }
11
+ deepstrike-core = { path = "crates/deepstrike-core", version = "0.2.73" }
12
+ deepstrike-tokenizer = { path = "crates/deepstrike-tokenizer", version = "0.2.73" }
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.72
3
+ Version: 0.2.73
4
4
  Requires-Dist: httpx>=0.27
5
5
  Requires-Dist: pyyaml>=6.0
6
6
  Requires-Dist: anyio>=4.0
@@ -42,40 +42,28 @@ maturin develop --manifest-path crates/deepstrike-py/Cargo.toml
42
42
 
43
43
  ```python
44
44
  import asyncio
45
- from deepstrike import (
46
- FileSessionLog,
47
- InMemorySessionLog,
48
- LocalExecutionPlane,
49
- OpenAIProvider,
50
- RuntimeOptions,
51
- RuntimeRunner,
52
- collect_text,
53
- tool,
54
- )
45
+ from deepstrike import OpenAIProvider, create_agent, tool
55
46
 
56
47
  @tool
57
48
  async def add(x: int, y: int) -> str:
58
49
  """Add two numbers."""
59
50
  return str(x + y)
60
51
 
61
- plane = LocalExecutionPlane().register(add)
62
- runner = RuntimeRunner(RuntimeOptions(
63
- provider=OpenAIProvider(api_key="sk-...", model="gpt-5-mini"),
64
- session_log=FileSessionLog(".deepstrike/sessions"),
65
- execution_plane=plane,
66
- max_tokens=4096,
67
- ))
52
+ agent = create_agent(
53
+ "math",
54
+ model="openai/gpt-5-mini",
55
+ runtime_binding={"provider": OpenAIProvider(api_key="sk-...", model="gpt-5-mini")},
56
+ tools=[add],
57
+ )
68
58
 
69
- asyncio.run(collect_text(runner.run(
70
- session_id="math-1",
71
- goal="What is 17 + 28?",
72
- )))
59
+ result = asyncio.run(agent.run("What is 17 + 28?", session_id="math-1"))
60
+ print(result["output"])
73
61
  # => "45"
74
62
  ```
75
63
 
76
64
  ### Recipes — the canonical entry points
77
65
 
78
- Most apps need one of two shapes. Start with the facades; drop to `RuntimeRunner` for streaming, tools, signals, memory, or governance.
66
+ Most apps start with `Agent`; use `RuntimeRunner` from the runtime submodule only for custom host control.
79
67
 
80
68
  ```python
81
69
  from deepstrike import run_agent, run_fanout
@@ -28,40 +28,28 @@ maturin develop --manifest-path crates/deepstrike-py/Cargo.toml
28
28
 
29
29
  ```python
30
30
  import asyncio
31
- from deepstrike import (
32
- FileSessionLog,
33
- InMemorySessionLog,
34
- LocalExecutionPlane,
35
- OpenAIProvider,
36
- RuntimeOptions,
37
- RuntimeRunner,
38
- collect_text,
39
- tool,
40
- )
31
+ from deepstrike import OpenAIProvider, create_agent, tool
41
32
 
42
33
  @tool
43
34
  async def add(x: int, y: int) -> str:
44
35
  """Add two numbers."""
45
36
  return str(x + y)
46
37
 
47
- plane = LocalExecutionPlane().register(add)
48
- runner = RuntimeRunner(RuntimeOptions(
49
- provider=OpenAIProvider(api_key="sk-...", model="gpt-5-mini"),
50
- session_log=FileSessionLog(".deepstrike/sessions"),
51
- execution_plane=plane,
52
- max_tokens=4096,
53
- ))
38
+ agent = create_agent(
39
+ "math",
40
+ model="openai/gpt-5-mini",
41
+ runtime_binding={"provider": OpenAIProvider(api_key="sk-...", model="gpt-5-mini")},
42
+ tools=[add],
43
+ )
54
44
 
55
- asyncio.run(collect_text(runner.run(
56
- session_id="math-1",
57
- goal="What is 17 + 28?",
58
- )))
45
+ result = asyncio.run(agent.run("What is 17 + 28?", session_id="math-1"))
46
+ print(result["output"])
59
47
  # => "45"
60
48
  ```
61
49
 
62
50
  ### Recipes — the canonical entry points
63
51
 
64
- Most apps need one of two shapes. Start with the facades; drop to `RuntimeRunner` for streaming, tools, signals, memory, or governance.
52
+ Most apps start with `Agent`; use `RuntimeRunner` from the runtime submodule only for custom host control.
65
53
 
66
54
  ```python
67
55
  from deepstrike import run_agent, run_fanout
@@ -2,8 +2,7 @@
2
2
  //! ("measure provider-visible input, never underestimate") requires between what a request is
3
3
  //! *estimated* to cost before it is sent (`PromptMeasurement`, this module), what the provider
4
4
  //! actually reports back (`ProviderUsage`, Node/Python Host layer — not this crate). This module
5
- //! only defines a preflight fact. The `MeasurePrompt` wire tag is reserved, but A-00R removed its
6
- //! scheduler producer until request fingerprinting and durable replay semantics are defined.
5
+ //! only defines a host-side preflight fact for provider-visible request preparation.
7
6
 
8
7
  use serde::{Deserialize, Serialize};
9
8
 
@@ -2557,7 +2557,7 @@ mod tests {
2557
2557
  serde_json::from_value::<HostEffectSupport>(json!({ "supported": ["load_payload"] }))
2558
2558
  .is_ok()
2559
2559
  );
2560
- assert_eq!(EffectKindTag::ALL.len(), 11);
2560
+ assert_eq!(EffectKindTag::ALL.len(), 10);
2561
2561
  }
2562
2562
 
2563
2563
  // -----------------------------------------------------------------------------------------
@@ -2926,17 +2926,12 @@ mod tests {
2926
2926
  // required kind from the
2927
2927
  // support declaration must be refused — and the rejection must name the kind, because a
2928
2928
  // host reading it has to know which declaration to fix. Iterating `ALL` also means a new
2929
- // effect kind cannot be added without deciding what switches it on. `MeasurePrompt` is a
2930
- // reserved wire shape with no scheduler producer after SPC-013 A-00R, so it deliberately
2931
- // imposes no host-support requirement.
2929
+ // effect kind cannot be added without deciding what switches it on.
2932
2930
  let full = fully_populated_config();
2933
2931
  full.resolve(&defaults())
2934
2932
  .expect("declaring every kind satisfies every trigger");
2935
2933
 
2936
- for dropped in EffectKindTag::ALL
2937
- .into_iter()
2938
- .filter(|kind| *kind != EffectKindTag::MeasurePrompt)
2939
- {
2934
+ for dropped in EffectKindTag::ALL {
2940
2935
  let mut config = full.clone();
2941
2936
  config.host_effect_support = HostEffectSupport::new(
2942
2937
  EffectKindTag::ALL
@@ -220,10 +220,6 @@ impl CanonicalOperationDriver {
220
220
  EffectSuccess::PayloadLoaded(loaded) => {
221
221
  self.commit_payload_load(context, effect_id, loaded)
222
222
  }
223
- EffectSuccess::PromptMeasured(_) => Err(KernelFault::new(
224
- KernelFaultCode::UnexpectedEffectOutcome,
225
- "prompt measurement outcomes are reserved but adaptive measurement has no scheduler producer",
226
- )),
227
223
  }
228
224
  }
229
225
 
@@ -462,10 +458,6 @@ impl CanonicalOperationDriver {
462
458
  step.focus = self.focus.clone();
463
459
  Ok(step)
464
460
  }
465
- EffectKindTag::MeasurePrompt => Err(KernelFault::new(
466
- KernelFaultCode::UnexpectedEffectOutcome,
467
- "prompt measurement failures are reserved but adaptive measurement has no scheduler producer",
468
- )),
469
461
  }
470
462
  }
471
463
 
@@ -26,7 +26,7 @@ use serde::de::{self, Deserializer, Visitor};
26
26
  use serde::{Deserialize, Serialize, Serializer};
27
27
 
28
28
  use crate::context::execution::ContextCandidate;
29
- use crate::context::measurement::{PromptMeasurement, ToolMeasurement};
29
+ use crate::context::measurement::ToolMeasurement;
30
30
  use crate::types::durable_content::DurableContent;
31
31
 
32
32
  use super::root::{LogicalAgentSpec, MessageRole};
@@ -260,8 +260,6 @@ pub enum EffectKind {
260
260
  /// to it instead of scanning a session log for the original bytes (§7.10 rule 4).
261
261
  LoadPayload(LoadPayloadEffect),
262
262
  EvaluateMilestone(EvaluateMilestoneEffect),
263
- /// spc_011-C-02: preflight prompt-token measurement — see [`MeasurePromptEffect`].
264
- MeasurePrompt(MeasurePromptEffect),
265
263
  }
266
264
 
267
265
  impl EffectKind {
@@ -277,7 +275,6 @@ impl EffectKind {
277
275
  Self::ArchivePageOut(_) => EffectKindTag::ArchivePageOut,
278
276
  Self::LoadPayload(_) => EffectKindTag::LoadPayload,
279
277
  Self::EvaluateMilestone(_) => EffectKindTag::EvaluateMilestone,
280
- Self::MeasurePrompt(_) => EffectKindTag::MeasurePrompt,
281
278
  }
282
279
  }
283
280
  }
@@ -301,12 +298,10 @@ pub enum EffectKindTag {
301
298
  ArchivePageOut,
302
299
  LoadPayload,
303
300
  EvaluateMilestone,
304
- /// spc_011-C-02.
305
- MeasurePrompt,
306
301
  }
307
302
 
308
303
  impl EffectKindTag {
309
- pub const ALL: [Self; 11] = [
304
+ pub const ALL: [Self; 10] = [
310
305
  Self::CallProvider,
311
306
  Self::ExecuteTools,
312
307
  Self::RequestApproval,
@@ -317,7 +312,6 @@ impl EffectKindTag {
317
312
  Self::ArchivePageOut,
318
313
  Self::LoadPayload,
319
314
  Self::EvaluateMilestone,
320
- Self::MeasurePrompt,
321
315
  ];
322
316
 
323
317
  pub fn as_str(self) -> &'static str {
@@ -332,7 +326,6 @@ impl EffectKindTag {
332
326
  Self::ArchivePageOut => "archive_page_out",
333
327
  Self::LoadPayload => "load_payload",
334
328
  Self::EvaluateMilestone => "evaluate_milestone",
335
- Self::MeasurePrompt => "measure_prompt",
336
329
  }
337
330
  }
338
331
 
@@ -349,7 +342,6 @@ impl EffectKindTag {
349
342
  Self::ArchivePageOut => EffectSuccessTag::PageOutArchived,
350
343
  Self::LoadPayload => EffectSuccessTag::PayloadLoaded,
351
344
  Self::EvaluateMilestone => EffectSuccessTag::MilestoneEvaluated,
352
- Self::MeasurePrompt => EffectSuccessTag::PromptMeasured,
353
345
  }
354
346
  }
355
347
  }
@@ -375,27 +367,6 @@ pub struct CallProviderEffect {
375
367
  pub tools: Vec<ToolSchema>,
376
368
  }
377
369
 
378
- /// spc_011-C-02: a preflight token-count request. Reuses the same `RenderedContext`/`ToolSchema`
379
- /// shape `CallProviderEffect` already carries, rather than inventing a parallel candidate-request
380
- /// type — the kernel is asking "how many tokens would *this* request cost", the same request it
381
- /// would otherwise hand to `CallProvider`.
382
- ///
383
- /// spc_011-C-06: no `provider`/`model` fields, matching `CallProviderEffect` exactly. An earlier
384
- /// draft of this struct carried both, reasoning that "the answer is meaningless without knowing
385
- /// which vendor should answer it" — but the kernel has no provider/model identity to put there:
386
- /// `OperationConfig` carries no such field, vendor selection is entirely a Host-side concern (the
387
- /// same Host that will execute `CallProvider` for this operation already knows which provider it
388
- /// dispatches to, the same way it already resolves that for `CallProviderEffect`, which has never
389
- /// carried these fields). This surfaced only when 011-C-06 tried to actually construct one inside
390
- /// the kernel and found nothing to put in `provider`/`model`.
391
- #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
392
- #[serde(deny_unknown_fields)]
393
- pub struct MeasurePromptEffect {
394
- pub context: RenderedContext,
395
- #[serde(default, skip_serializing_if = "Vec::is_empty")]
396
- pub tools: Vec<ToolSchema>,
397
- }
398
-
399
370
  #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
400
371
  #[serde(deny_unknown_fields)]
401
372
  pub struct ExecuteToolsEffect {
@@ -777,8 +748,6 @@ pub enum EffectSuccess {
777
748
  PageOutArchived(PageOutArchivedSuccess),
778
749
  PayloadLoaded(PayloadLoadedSuccess),
779
750
  MilestoneEvaluated(MilestoneEvaluatedSuccess),
780
- /// spc_011-C-02.
781
- PromptMeasured(PromptMeasuredSuccess),
782
751
  }
783
752
 
784
753
  impl EffectSuccess {
@@ -794,7 +763,6 @@ impl EffectSuccess {
794
763
  Self::PageOutArchived(_) => EffectSuccessTag::PageOutArchived,
795
764
  Self::PayloadLoaded(_) => EffectSuccessTag::PayloadLoaded,
796
765
  Self::MilestoneEvaluated(_) => EffectSuccessTag::MilestoneEvaluated,
797
- Self::PromptMeasured(_) => EffectSuccessTag::PromptMeasured,
798
766
  }
799
767
  }
800
768
  }
@@ -813,12 +781,10 @@ pub enum EffectSuccessTag {
813
781
  PageOutArchived,
814
782
  PayloadLoaded,
815
783
  MilestoneEvaluated,
816
- /// spc_011-C-02.
817
- PromptMeasured,
818
784
  }
819
785
 
820
786
  impl EffectSuccessTag {
821
- pub const ALL: [Self; 11] = [
787
+ pub const ALL: [Self; 10] = [
822
788
  Self::Provider,
823
789
  Self::Tools,
824
790
  Self::Approval,
@@ -829,7 +795,6 @@ impl EffectSuccessTag {
829
795
  Self::PageOutArchived,
830
796
  Self::PayloadLoaded,
831
797
  Self::MilestoneEvaluated,
832
- Self::PromptMeasured,
833
798
  ];
834
799
 
835
800
  pub fn as_str(self) -> &'static str {
@@ -844,7 +809,6 @@ impl EffectSuccessTag {
844
809
  Self::PageOutArchived => "page_out_archived",
845
810
  Self::PayloadLoaded => "payload_loaded",
846
811
  Self::MilestoneEvaluated => "milestone_evaluated",
847
- Self::PromptMeasured => "prompt_measured",
848
812
  }
849
813
  }
850
814
 
@@ -862,7 +826,6 @@ impl EffectSuccessTag {
862
826
  Self::PageOutArchived => EffectKindTag::ArchivePageOut,
863
827
  Self::PayloadLoaded => EffectKindTag::LoadPayload,
864
828
  Self::MilestoneEvaluated => EffectKindTag::EvaluateMilestone,
865
- Self::PromptMeasured => EffectKindTag::MeasurePrompt,
866
829
  }
867
830
  }
868
831
  }
@@ -1153,14 +1116,6 @@ pub struct MilestoneCheckResult {
1153
1116
  pub notes: String,
1154
1117
  }
1155
1118
 
1156
- /// spc_011-C-02: the answer to a `MeasurePrompt` effect — one [`PromptMeasurement`] fact, wrapped
1157
- /// the same way every other effect wraps its one matching success payload.
1158
- #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1159
- #[serde(deny_unknown_fields)]
1160
- pub struct PromptMeasuredSuccess {
1161
- pub measurement: PromptMeasurement,
1162
- }
1163
-
1164
1119
  // ---------------------------------------------------------------------------------------------
1165
1120
  // §7.10 · inline / external payload
1166
1121
  // ---------------------------------------------------------------------------------------------
@@ -1354,9 +1309,7 @@ mod tests {
1354
1309
 
1355
1310
  use serde_json::{Value, json};
1356
1311
 
1357
- use crate::context::measurement::{
1358
- MeasurementConfidence, MeasurementSource, PromptMeasurement, ToolMeasurement,
1359
- };
1312
+ use crate::context::measurement::ToolMeasurement;
1360
1313
 
1361
1314
  use super::super::*;
1362
1315
 
@@ -1551,10 +1504,6 @@ mod tests {
1551
1504
  phase_id: "phase-2".to_string(),
1552
1505
  },
1553
1506
  }),
1554
- EffectKind::MeasurePrompt(MeasurePromptEffect {
1555
- context: RenderedContext::default(),
1556
- tools: Vec::new(),
1557
- }),
1558
1507
  ]
1559
1508
  }
1560
1509
 
@@ -1657,15 +1606,6 @@ mod tests {
1657
1606
  notes: String::new(),
1658
1607
  },
1659
1608
  }),
1660
- EffectSuccess::PromptMeasured(PromptMeasuredSuccess {
1661
- measurement: PromptMeasurement {
1662
- input_tokens: 4200,
1663
- source: MeasurementSource::Native {
1664
- provider: "anthropic".to_string(),
1665
- },
1666
- confidence: MeasurementConfidence::Exact,
1667
- },
1668
- }),
1669
1609
  ]
1670
1610
  }
1671
1611
 
@@ -1682,7 +1622,7 @@ mod tests {
1682
1622
  // -----------------------------------------------------------------------------------------
1683
1623
 
1684
1624
  #[test]
1685
- fn the_effect_union_is_exactly_the_eleven_host_executable_actions() {
1625
+ fn the_effect_union_is_exactly_the_ten_host_executable_actions() {
1686
1626
  let tags: BTreeSet<&str> = EffectKindTag::ALL.iter().map(|tag| tag.as_str()).collect();
1687
1627
  assert_eq!(
1688
1628
  tags,
@@ -1697,10 +1637,9 @@ mod tests {
1697
1637
  "archive_page_out",
1698
1638
  "load_payload",
1699
1639
  "evaluate_milestone",
1700
- "measure_prompt",
1701
1640
  ])
1702
1641
  );
1703
- assert_eq!(EffectKindTag::ALL.len(), 11);
1642
+ assert_eq!(EffectKindTag::ALL.len(), 10);
1704
1643
 
1705
1644
  let sampled: Vec<EffectKindTag> = effect_samples().iter().map(EffectKind::tag).collect();
1706
1645
  assert_eq!(
@@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize};
9
9
  use super::driver::PlannedStep;
10
10
  use super::effect::{
11
11
  ArchivePageOutEffect, CallProviderEffect, EffectKind, EffectKindTag, EvaluateMilestoneEffect,
12
- ExecuteToolsEffect, KernelEffect, LoadPayloadEffect, MeasurePromptEffect, PersistMemoryEffect,
12
+ ExecuteToolsEffect, KernelEffect, LoadPayloadEffect, PersistMemoryEffect,
13
13
  PreemptTasksEffect, QueryMemoryEffect, RequestApprovalEffect, SpawnTasksEffect,
14
14
  };
15
15
  use super::scalar::EffectId;
@@ -77,11 +77,6 @@ pub enum CanonicalHostAction {
77
77
  causation_input_id: super::scalar::InputId,
78
78
  payload: EvaluateMilestoneEffect,
79
79
  },
80
- MeasurePrompt {
81
- effect_id: EffectId,
82
- causation_input_id: super::scalar::InputId,
83
- payload: MeasurePromptEffect,
84
- },
85
80
  }
86
81
 
87
82
  #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
@@ -152,11 +147,6 @@ pub fn project_effect(effect: &KernelEffect) -> CanonicalHostAction {
152
147
  causation_input_id,
153
148
  payload: payload.clone(),
154
149
  },
155
- EffectKind::MeasurePrompt(payload) => CanonicalHostAction::MeasurePrompt {
156
- effect_id,
157
- causation_input_id,
158
- payload: payload.clone(),
159
- },
160
150
  }
161
151
  }
162
152
 
@@ -201,7 +201,7 @@ from deepstrike.types.agent import (
201
201
  workflow_budget_note,
202
202
  fanout_synthesize, generate_and_filter, verify_rules, gen_eval,
203
203
  )
204
- from deepstrike.agent import Agent, AgentDefinition, AgentMemory, MemoryReference, ModelRef
204
+ from deepstrike.agent import Agent, AgentDefinition, AgentMemory, MemoryReference, ModelRef, create_agent
205
205
  from deepstrike.agent_ir import lower_agent, normalize_agent
206
206
  from deepstrike.runtime.durable_content import (
207
207
  DurableContentError,
@@ -382,7 +382,7 @@ __all__ = [
382
382
  "SkillMetadata",
383
383
  # Sub-agent isolation
384
384
  "AgentIdentity", "AgentCapabilityFilter", "AgentRunSpec",
385
- "Agent", "AgentDefinition", "AgentMemory", "MemoryReference", "ModelRef", "lower_agent", "normalize_agent",
385
+ "Agent", "create_agent", "AgentDefinition", "AgentMemory", "MemoryReference", "ModelRef", "lower_agent", "normalize_agent",
386
386
  "AgentProcessChangedObservation", "SubAgentResult", "LoopResult",
387
387
  "KernelAgentRole", "AgentIsolation", "ContextInheritance",
388
388
  "MilestoneContract", "MilestonePhase", "MilestoneCheckResult", "MilestonePolicy",
@@ -0,0 +1,125 @@
1
+ """Public executable Agent contract.
2
+
3
+ This surface describes an agent before a host chooses a provider, execution plane, or Kernel run.
4
+ The declaration stays provider-neutral; execution resolves a provider through the explicit
5
+ ``runtime_binding`` supplied by the host.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ from dataclasses import dataclass
10
+ from typing import Any, Literal, Mapping, Sequence, TypeAlias
11
+
12
+ from deepstrike.types.agent import AgentCapabilityFilter
13
+
14
+
15
+ ModelRef: TypeAlias = str | dict[str, Any]
16
+ AgentDefinition: TypeAlias = Mapping[str, Any]
17
+ AgentMemory: TypeAlias = Any
18
+
19
+
20
+ @dataclass(frozen=True)
21
+ class MemoryReference:
22
+ """Serializable durable-memory binding for an agent declared before a host store exists."""
23
+
24
+ namespace: str | None = None
25
+ kind: Literal["durable"] = "durable"
26
+
27
+
28
+ class Agent:
29
+ """Provider-neutral declaration and executable public Agent handle.
30
+
31
+ ``tools`` may contain executable ``RegisteredTool`` instances or JSON-safe tool descriptors.
32
+ The latter carry schema only and do not create executable capabilities.
33
+ """
34
+
35
+ def __init__(
36
+ self,
37
+ name: str,
38
+ *,
39
+ description: str | None = None,
40
+ instructions: str | None = None,
41
+ model: ModelRef | None = None,
42
+ capability_filter: AgentCapabilityFilter | Mapping[str, Any] | None = None,
43
+ tools: Sequence[Any] | None = None,
44
+ mcp_servers: Sequence[Mapping[str, Any]] | None = None,
45
+ skills: Sequence[Mapping[str, Any]] | None = None,
46
+ memory: AgentMemory | None = None,
47
+ knowledge: Sequence[Mapping[str, Any]] | None = None,
48
+ handoffs: Sequence[Mapping[str, Any]] | None = None,
49
+ provider_options: Mapping[str, Any] | None = None,
50
+ output_schema: Mapping[str, Any] | None = None,
51
+ metadata: Mapping[str, Any] | None = None,
52
+ guardrails: Sequence[Mapping[str, Any]] | None = None,
53
+ runtime_binding: Mapping[str, Any] | None = None,
54
+ ) -> None:
55
+ if not name:
56
+ raise ValueError("agent name is required")
57
+ self.name = name
58
+ self.description = description
59
+ self.instructions = instructions
60
+ self.model = model
61
+ self.capability_filter = capability_filter
62
+ self.tools = list(tools) if tools is not None else None
63
+ self.mcp_servers = list(mcp_servers) if mcp_servers is not None else None
64
+ self.skills = list(skills) if skills is not None else None
65
+ self.memory = memory
66
+ self.knowledge = list(knowledge) if knowledge is not None else None
67
+ self.handoffs = list(handoffs) if handoffs is not None else None
68
+ self.provider_options = dict(provider_options) if provider_options is not None else None
69
+ self.output_schema = dict(output_schema) if output_schema is not None else None
70
+ self.metadata = dict(metadata) if metadata is not None else None
71
+ self.guardrails = list(guardrails) if guardrails is not None else None
72
+ self.runtime_binding = dict(runtime_binding) if runtime_binding is not None else None
73
+
74
+ async def run(self, goal: str, *, session_id: str | None = None, max_turns: int | None = None) -> dict[str, Any]:
75
+ """Execute one goal through the host binding and return a structured run result."""
76
+ if not self.runtime_binding:
77
+ raise RuntimeError(f'agent "{self.name}" has no runtime binding')
78
+ provider = self.runtime_binding.get("provider")
79
+ if provider is None:
80
+ provider_for = self.runtime_binding.get("provider_for")
81
+ provider = provider_for(self.model) if callable(provider_for) else None
82
+ if provider is None:
83
+ raise RuntimeError(f'agent "{self.name}" has no runtime provider binding')
84
+ from deepstrike.runtime.facade import run_agent
85
+ output = await run_agent(
86
+ provider=provider,
87
+ goal=goal,
88
+ system_prompt=self.instructions,
89
+ tools=list(self.tools or []),
90
+ session_id=session_id,
91
+ max_turns=max_turns,
92
+ )
93
+ return {"output": output, "status": "completed", "session_id": session_id}
94
+
95
+ async def stream(self, goal: str, *, session_id: str | None = None, max_turns: int | None = None):
96
+ """Stream host events for the same public Agent contract."""
97
+ if not self.runtime_binding:
98
+ raise RuntimeError(f'agent "{self.name}" has no runtime binding')
99
+ provider = self.runtime_binding.get("provider")
100
+ if provider is None:
101
+ provider_for = self.runtime_binding.get("provider_for")
102
+ provider = provider_for(self.model) if callable(provider_for) else None
103
+ if provider is None:
104
+ raise RuntimeError(f'agent "{self.name}" has no runtime provider binding')
105
+ from deepstrike.runtime.execution_plane import LocalExecutionPlane
106
+ from deepstrike.runtime.runner import RuntimeOptions, RuntimeRunner
107
+ from deepstrike.runtime.session_log import InMemorySessionLog
108
+ options = self.runtime_binding.get("runtime_options", {})
109
+ runner = RuntimeRunner(RuntimeOptions(
110
+ provider=provider,
111
+ execution_plane=LocalExecutionPlane(),
112
+ session_log=InMemorySessionLog(),
113
+ max_tokens=32_000,
114
+ agent_id=self.name,
115
+ **({"system_prompt": self.instructions} if self.instructions else {}),
116
+ **({"max_turns": max_turns} if max_turns is not None else {}),
117
+ **options,
118
+ ))
119
+ async for event in runner.run(goal=goal, session_id=session_id or f"agent-{uuid.uuid4()}"):
120
+ yield event
121
+
122
+
123
+ def create_agent(name: str, **kwargs: Any) -> Agent:
124
+ """Create the executable public Agent handle."""
125
+ return Agent(name, **kwargs)
@@ -433,8 +433,7 @@ class RuntimePolicy:
433
433
  self.timeout_ms = timeout_ms
434
434
 
435
435
 
436
- # Wire protocols a provider can speak. Mirrors the Node/WASM ProviderProtocol union.
437
- ProviderProtocol = str # "anthropic-messages" | "openai-chat" | "openai-responses" | "gemini"
436
+ from .protocols import GenerationProtocol
438
437
 
439
438
 
440
439
  @dataclass
@@ -442,7 +441,7 @@ class ProviderDescriptor:
442
441
  """Stable identity advertised by a provider so the recovery layer can decide
443
442
  whether a stored replay envelope may be seeded into it."""
444
443
  provider: str
445
- protocol: ProviderProtocol
444
+ protocol: GenerationProtocol
446
445
  model: str
447
446
  reasoning: dict[str, Any] = field(default_factory=dict)
448
447
  tool_calls: dict[str, Any] = field(default_factory=dict)