AbstractAgent 0.3.13__tar.gz → 0.3.14__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 (126) hide show
  1. {abstractagent-0.3.13/src/abstractagent.egg-info → abstractagent-0.3.14}/PKG-INFO +12 -10
  2. {abstractagent-0.3.13 → abstractagent-0.3.14}/README.md +8 -6
  3. {abstractagent-0.3.13 → abstractagent-0.3.14}/pyproject.toml +4 -4
  4. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/codeact_runtime.py +4 -0
  5. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/memact_runtime.py +4 -0
  6. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/react_runtime.py +4 -0
  7. {abstractagent-0.3.13 → abstractagent-0.3.14/src/abstractagent.egg-info}/PKG-INFO +12 -10
  8. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent.egg-info/SOURCES.txt +1 -0
  9. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent.egg-info/requires.txt +3 -3
  10. abstractagent-0.3.14/tests/test_agent_stream_inheritance.py +56 -0
  11. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_packaging_profiles.py +3 -3
  12. {abstractagent-0.3.13 → abstractagent-0.3.14}/LICENSE +0 -0
  13. {abstractagent-0.3.13 → abstractagent-0.3.14}/setup.cfg +0 -0
  14. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/__init__.py +0 -0
  15. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/__init__.py +0 -0
  16. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/emit_inventory.py +0 -0
  17. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/generation_params.py +0 -0
  18. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/loop_hooks.py +0 -0
  19. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/media.py +0 -0
  20. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/native_loop_registry.py +0 -0
  21. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/progress.py +0 -0
  22. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/read_orchestration.py +0 -0
  23. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/tool_allowlist.py +0 -0
  24. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/tool_failure_hints.py +0 -0
  25. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/adapters/transcripts.py +0 -0
  26. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/agents/__init__.py +0 -0
  27. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/agents/base.py +0 -0
  28. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/agents/codeact.py +0 -0
  29. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/agents/defaults.py +0 -0
  30. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/agents/memact.py +0 -0
  31. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/agents/react.py +0 -0
  32. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/agents/task_reset.py +0 -0
  33. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/agents/unattended.py +0 -0
  34. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/logic/__init__.py +0 -0
  35. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/logic/builtins.py +0 -0
  36. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/logic/codeact.py +0 -0
  37. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/logic/memact.py +0 -0
  38. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/logic/react.py +0 -0
  39. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/logic/types.py +0 -0
  40. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/metrics/__init__.py +0 -0
  41. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/metrics/prefix_reuse.py +0 -0
  42. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/repl.py +0 -0
  43. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/sandbox/__init__.py +0 -0
  44. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/sandbox/interface.py +0 -0
  45. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/sandbox/local.py +0 -0
  46. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/scripts/__init__.py +0 -0
  47. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/scripts/lmstudio_tool_eval.py +0 -0
  48. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/tools/__init__.py +0 -0
  49. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/tools/code_execution.py +0 -0
  50. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent/tools/self_improve.py +0 -0
  51. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent.egg-info/dependency_links.txt +0 -0
  52. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent.egg-info/entry_points.txt +0 -0
  53. {abstractagent-0.3.13 → abstractagent-0.3.14}/src/abstractagent.egg-info/top_level.txt +0 -0
  54. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_active_context_policy_adoption.py +0 -0
  55. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_adversary_hardening_2026_07_13.py +0 -0
  56. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_agent_plan_review_modes.py +0 -0
  57. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_agent_speculation_inheritance.py +0 -0
  58. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_agents_integration_llm.py +0 -0
  59. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_base_agent_trace_accessors.py +0 -0
  60. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_batching_prompt_rule.py +0 -0
  61. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_budget_triage_tail.py +0 -0
  62. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_builtin_tool_specs_optional_defaults.py +0 -0
  63. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_c2447_visit_lane_honesty.py +0 -0
  64. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_claim_0029_residue_2026_07_14.py +0 -0
  65. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_codeact_logic.py +0 -0
  66. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_codeact_runtime_verifier_policy.py +0 -0
  67. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_delegate_session_route_composition.py +0 -0
  68. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_emit_inventory_drift.py +0 -0
  69. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_gated_remainder_wave_2026_07_14.py +0 -0
  70. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_generation_params_media_policies.py +0 -0
  71. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_history_monster_clamp.py +0 -0
  72. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_improvement_wave_2026_07_13.py +0 -0
  73. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_llm_call_payload_requires_prompt_or_messages.py +0 -0
  74. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_lmstudio_tool_eval_metrics.py +0 -0
  75. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_loop_hooks.py +0 -0
  76. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_loop_hooks_0026_follow_ups.py +0 -0
  77. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_memact_codeact_guidance_durable_transcript.py +0 -0
  78. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_memact_session_memory.py +0 -0
  79. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_memact_workflow.py +0 -0
  80. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_memory_recall_tool.py +0 -0
  81. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_native_loop_registry.py +0 -0
  82. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_open_attachment_tool_available.py +0 -0
  83. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_operator_conclude.py +0 -0
  84. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_optimal_wave_batch2_2026_07_13.py +0 -0
  85. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_parse_prompt_cache_capture.py +0 -0
  86. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_prefix_reuse_metric.py +0 -0
  87. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_progress_detection.py +0 -0
  88. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_act_only_observation.py +0 -0
  89. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_active_attachments_disable_tools_first_iteration.py +0 -0
  90. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_adapter_forwards_context_attachments_media.py +0 -0
  91. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_delegate_agent_tool.py +0 -0
  92. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_election_fence_conformance.py +0 -0
  93. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_entity_dress_conformance.py +0 -0
  94. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_guidance_durable_transcript.py +0 -0
  95. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_logic.py +0 -0
  96. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_loop_aborted_generation_retry.py +0 -0
  97. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_loop_context_transcript_levels.py +0 -0
  98. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_loop_followthrough_retry.py +0 -0
  99. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_loop_side_effect_dedupe_comms.py +0 -0
  100. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_loop_truncated_output_retry.py +0 -0
  101. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_max_iterations_concludes.py +0 -0
  102. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_phase_grant_boundary.py +0 -0
  103. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_planish_heuristic.py +0 -0
  104. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_prompt_prefix_stability.py +0 -0
  105. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_sight_lane_media_fold.py +0 -0
  106. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_turn_byte_stability.py +0 -0
  107. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_verifier_and_plan.py +0 -0
  108. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_visit_composition.py +0 -0
  109. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_visit_merge.py +0 -0
  110. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_workflow_system_prompt_and_tools_override.py +0 -0
  111. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_react_workflow_toolset_refresh.py +0 -0
  112. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_read_orchestration_guidance.py +0 -0
  113. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_reasoning_first_citizen_agent.py +0 -0
  114. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_review_failure_containment.py +0 -0
  115. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_run_start_seeds_runtime_provider_model.py +0 -0
  116. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_session_memory.py +0 -0
  117. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_sibling_loop_defects_batch.py +0 -0
  118. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_sibling_strict_transcripts_0011.py +0 -0
  119. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_stuck_streak_termination.py +0 -0
  120. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_tool_failure_hints.py +0 -0
  121. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_tool_loop_prefix_extension_a3.py +0 -0
  122. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_tool_observe_emits_result_for_tui.py +0 -0
  123. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_tools_editing.py +0 -0
  124. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_unseeded_render_limits.py +0 -0
  125. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_verifier_execution_preference.py +0 -0
  126. {abstractagent-0.3.13 → abstractagent-0.3.14}/tests/test_verifier_schema_strict.py +0 -0
@@ -1,18 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractagent
3
- Version: 0.3.13
3
+ Version: 0.3.14
4
4
  Summary: Agent implementations using AbstractRuntime and AbstractCore
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
7
7
  License-File: LICENSE
8
8
  Requires-Dist: abstractcore[tools]>=2.13.41
9
- Requires-Dist: abstractruntime>=0.4.32
9
+ Requires-Dist: abstractruntime>=0.5.0
10
10
  Provides-Extra: apple
11
11
  Requires-Dist: abstractcore[all-apple]>=2.13.41; extra == "apple"
12
- Requires-Dist: abstractruntime[apple]>=0.4.32; extra == "apple"
12
+ Requires-Dist: abstractruntime[apple]>=0.5.0; extra == "apple"
13
13
  Provides-Extra: gpu
14
14
  Requires-Dist: abstractcore[all-gpu]>=2.13.41; extra == "gpu"
15
- Requires-Dist: abstractruntime[gpu]>=0.4.32; extra == "gpu"
15
+ Requires-Dist: abstractruntime[gpu]>=0.5.0; extra == "gpu"
16
16
  Provides-Extra: dev
17
17
  Requires-Dist: pytest>=7.0; extra == "dev"
18
18
  Provides-Extra: test
@@ -46,12 +46,14 @@ flowchart LR
46
46
  - Getting started: [`docs/getting-started.md`](docs/getting-started.md)
47
47
  - API reference: [`docs/api.md`](docs/api.md)
48
48
  - Loop hooks (listen/steer/capture): [`docs/hooks.md`](docs/hooks.md)
49
- - FAQ / troubleshooting: [`docs/faq.md`](docs/faq.md)
49
+ - FAQ: [`docs/faq.md`](docs/faq.md)
50
+ - Troubleshooting: [`docs/troubleshooting.md`](docs/troubleshooting.md)
50
51
  - Architecture (diagrams): [`docs/architecture.md`](docs/architecture.md)
51
52
  - Changelog: [`CHANGELOG.md`](CHANGELOG.md)
52
53
  - Contributing: [`CONTRIBUTING.md`](CONTRIBUTING.md)
53
54
  - Security: [`SECURITY.md`](SECURITY.md)
54
55
  - Acknowledgements: [`ACKNOWLEDMENTS.md`](ACKNOWLEDMENTS.md)
56
+ - Code of conduct: [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
55
57
 
56
58
  ## What you get
57
59
 
@@ -103,9 +105,10 @@ Native Python hardware profile cascades are available for deployment manifests:
103
105
  AbstractCore and AbstractRuntime profiles; AbstractAgent itself remains
104
106
  provider/runtime agnostic.
105
107
 
106
- AbstractAgent 0.3.13 requires `abstractcore[tools]>=2.13.41` and
107
- `AbstractRuntime>=0.4.32` (the runtime release that provides turn grounding,
108
- in-flight cancellation and speculation inheritance).
108
+ AbstractAgent 0.3.14 requires `abstractcore[tools]>=2.13.41` and
109
+ `AbstractRuntime>=0.5.0` (the runtime release that provides live token
110
+ streaming, on top of turn grounding, in-flight cancellation and speculation
111
+ inheritance). AbstractRuntime 0.5.0 itself requires AbstractCore 2.16.0 or newer.
109
112
 
110
113
  Note: the repository may be ahead of the latest published PyPI release. To verify what you installed:
111
114
 
@@ -129,8 +132,7 @@ print(state.output["answer"])
129
132
  Tip: these loops send the full transcript plus ~19 tool schemas every cycle —
130
133
  prefer a tool-capable model. On Ollama, raise the context window to the model's
131
134
  maximum available context or the server silently truncates from the oldest
132
- content first: per-call `llm_kwargs={"num_ctx": <model max>}` (forwarded since
133
- 2026-07-13) or server-side `OLLAMA_CONTEXT_LENGTH=<model max> ollama serve`.
135
+ content first: per-call `llm_kwargs={"num_ctx": <model max>}` or server-side `OLLAMA_CONTEXT_LENGTH=<model max> ollama serve`.
134
136
  House rule: maximum available context unless you explicitly choose otherwise —
135
137
  a fixed lower number is a hidden ceiling (see [`docs/faq.md`](docs/faq.md)).
136
138
 
@@ -25,12 +25,14 @@ flowchart LR
25
25
  - Getting started: [`docs/getting-started.md`](docs/getting-started.md)
26
26
  - API reference: [`docs/api.md`](docs/api.md)
27
27
  - Loop hooks (listen/steer/capture): [`docs/hooks.md`](docs/hooks.md)
28
- - FAQ / troubleshooting: [`docs/faq.md`](docs/faq.md)
28
+ - FAQ: [`docs/faq.md`](docs/faq.md)
29
+ - Troubleshooting: [`docs/troubleshooting.md`](docs/troubleshooting.md)
29
30
  - Architecture (diagrams): [`docs/architecture.md`](docs/architecture.md)
30
31
  - Changelog: [`CHANGELOG.md`](CHANGELOG.md)
31
32
  - Contributing: [`CONTRIBUTING.md`](CONTRIBUTING.md)
32
33
  - Security: [`SECURITY.md`](SECURITY.md)
33
34
  - Acknowledgements: [`ACKNOWLEDMENTS.md`](ACKNOWLEDMENTS.md)
35
+ - Code of conduct: [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
34
36
 
35
37
  ## What you get
36
38
 
@@ -82,9 +84,10 @@ Native Python hardware profile cascades are available for deployment manifests:
82
84
  AbstractCore and AbstractRuntime profiles; AbstractAgent itself remains
83
85
  provider/runtime agnostic.
84
86
 
85
- AbstractAgent 0.3.13 requires `abstractcore[tools]>=2.13.41` and
86
- `AbstractRuntime>=0.4.32` (the runtime release that provides turn grounding,
87
- in-flight cancellation and speculation inheritance).
87
+ AbstractAgent 0.3.14 requires `abstractcore[tools]>=2.13.41` and
88
+ `AbstractRuntime>=0.5.0` (the runtime release that provides live token
89
+ streaming, on top of turn grounding, in-flight cancellation and speculation
90
+ inheritance). AbstractRuntime 0.5.0 itself requires AbstractCore 2.16.0 or newer.
88
91
 
89
92
  Note: the repository may be ahead of the latest published PyPI release. To verify what you installed:
90
93
 
@@ -108,8 +111,7 @@ print(state.output["answer"])
108
111
  Tip: these loops send the full transcript plus ~19 tool schemas every cycle —
109
112
  prefer a tool-capable model. On Ollama, raise the context window to the model's
110
113
  maximum available context or the server silently truncates from the oldest
111
- content first: per-call `llm_kwargs={"num_ctx": <model max>}` (forwarded since
112
- 2026-07-13) or server-side `OLLAMA_CONTEXT_LENGTH=<model max> ollama serve`.
114
+ content first: per-call `llm_kwargs={"num_ctx": <model max>}` or server-side `OLLAMA_CONTEXT_LENGTH=<model max> ollama serve`.
113
115
  House rule: maximum available context unless you explicitly choose otherwise —
114
116
  a fixed lower number is a hidden ceiling (see [`docs/faq.md`](docs/faq.md)).
115
117
 
@@ -4,23 +4,23 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "abstractagent"
7
- version = "0.3.13"
7
+ version = "0.3.14"
8
8
  description = "Agent implementations using AbstractRuntime and AbstractCore"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
11
11
  dependencies = [
12
12
  "abstractcore[tools]>=2.13.41",
13
- "abstractruntime>=0.4.32",
13
+ "abstractruntime>=0.5.0",
14
14
  ]
15
15
 
16
16
  [project.optional-dependencies]
17
17
  apple = [
18
18
  "abstractcore[all-apple]>=2.13.41",
19
- "abstractruntime[apple]>=0.4.32",
19
+ "abstractruntime[apple]>=0.5.0",
20
20
  ]
21
21
  gpu = [
22
22
  "abstractcore[all-gpu]>=2.13.41",
23
- "abstractruntime[gpu]>=0.4.32",
23
+ "abstractruntime[gpu]>=0.5.0",
24
24
  ]
25
25
  dev = [
26
26
  "pytest>=7.0",
@@ -1094,6 +1094,10 @@ def create_codeact_workflow(
1094
1094
  # that silently reverts to provider defaults.
1095
1095
  "thinking",
1096
1096
  "speculation",
1097
+ # Live token streaming (2026-09-26): a delegated child
1098
+ # streams its LLM calls to the same live view as the
1099
+ # parent; False (explicit off) is inherited too.
1100
+ "stream",
1097
1101
  "max_output_tokens",
1098
1102
  "tool_prompt_examples",
1099
1103
  # Approval policy inherits monotonically (tool-tiers adversary
@@ -915,6 +915,10 @@ def create_memact_workflow(
915
915
  # that silently reverts to provider defaults.
916
916
  "thinking",
917
917
  "speculation",
918
+ # Live token streaming (2026-09-26): a delegated child
919
+ # streams its LLM calls to the same live view as the
920
+ # parent; False (explicit off) is inherited too.
921
+ "stream",
918
922
  "max_output_tokens",
919
923
  "tool_prompt_examples",
920
924
  # Approval policy inherits monotonically (tool-tiers adversary
@@ -2871,6 +2871,10 @@ def create_react_workflow(
2871
2871
  # that silently reverts to provider defaults.
2872
2872
  "thinking",
2873
2873
  "speculation",
2874
+ # Live token streaming (2026-09-26): a delegated child
2875
+ # streams its LLM calls to the same live view as the
2876
+ # parent; False (explicit off) is inherited too.
2877
+ "stream",
2874
2878
  "max_output_tokens",
2875
2879
  "tool_prompt_examples",
2876
2880
  # Approval policy inherits MONOTONICALLY (tool-tiers adversary
@@ -1,18 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractagent
3
- Version: 0.3.13
3
+ Version: 0.3.14
4
4
  Summary: Agent implementations using AbstractRuntime and AbstractCore
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
7
7
  License-File: LICENSE
8
8
  Requires-Dist: abstractcore[tools]>=2.13.41
9
- Requires-Dist: abstractruntime>=0.4.32
9
+ Requires-Dist: abstractruntime>=0.5.0
10
10
  Provides-Extra: apple
11
11
  Requires-Dist: abstractcore[all-apple]>=2.13.41; extra == "apple"
12
- Requires-Dist: abstractruntime[apple]>=0.4.32; extra == "apple"
12
+ Requires-Dist: abstractruntime[apple]>=0.5.0; extra == "apple"
13
13
  Provides-Extra: gpu
14
14
  Requires-Dist: abstractcore[all-gpu]>=2.13.41; extra == "gpu"
15
- Requires-Dist: abstractruntime[gpu]>=0.4.32; extra == "gpu"
15
+ Requires-Dist: abstractruntime[gpu]>=0.5.0; extra == "gpu"
16
16
  Provides-Extra: dev
17
17
  Requires-Dist: pytest>=7.0; extra == "dev"
18
18
  Provides-Extra: test
@@ -46,12 +46,14 @@ flowchart LR
46
46
  - Getting started: [`docs/getting-started.md`](docs/getting-started.md)
47
47
  - API reference: [`docs/api.md`](docs/api.md)
48
48
  - Loop hooks (listen/steer/capture): [`docs/hooks.md`](docs/hooks.md)
49
- - FAQ / troubleshooting: [`docs/faq.md`](docs/faq.md)
49
+ - FAQ: [`docs/faq.md`](docs/faq.md)
50
+ - Troubleshooting: [`docs/troubleshooting.md`](docs/troubleshooting.md)
50
51
  - Architecture (diagrams): [`docs/architecture.md`](docs/architecture.md)
51
52
  - Changelog: [`CHANGELOG.md`](CHANGELOG.md)
52
53
  - Contributing: [`CONTRIBUTING.md`](CONTRIBUTING.md)
53
54
  - Security: [`SECURITY.md`](SECURITY.md)
54
55
  - Acknowledgements: [`ACKNOWLEDMENTS.md`](ACKNOWLEDMENTS.md)
56
+ - Code of conduct: [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
55
57
 
56
58
  ## What you get
57
59
 
@@ -103,9 +105,10 @@ Native Python hardware profile cascades are available for deployment manifests:
103
105
  AbstractCore and AbstractRuntime profiles; AbstractAgent itself remains
104
106
  provider/runtime agnostic.
105
107
 
106
- AbstractAgent 0.3.13 requires `abstractcore[tools]>=2.13.41` and
107
- `AbstractRuntime>=0.4.32` (the runtime release that provides turn grounding,
108
- in-flight cancellation and speculation inheritance).
108
+ AbstractAgent 0.3.14 requires `abstractcore[tools]>=2.13.41` and
109
+ `AbstractRuntime>=0.5.0` (the runtime release that provides live token
110
+ streaming, on top of turn grounding, in-flight cancellation and speculation
111
+ inheritance). AbstractRuntime 0.5.0 itself requires AbstractCore 2.16.0 or newer.
109
112
 
110
113
  Note: the repository may be ahead of the latest published PyPI release. To verify what you installed:
111
114
 
@@ -129,8 +132,7 @@ print(state.output["answer"])
129
132
  Tip: these loops send the full transcript plus ~19 tool schemas every cycle —
130
133
  prefer a tool-capable model. On Ollama, raise the context window to the model's
131
134
  maximum available context or the server silently truncates from the oldest
132
- content first: per-call `llm_kwargs={"num_ctx": <model max>}` (forwarded since
133
- 2026-07-13) or server-side `OLLAMA_CONTEXT_LENGTH=<model max> ollama serve`.
135
+ content first: per-call `llm_kwargs={"num_ctx": <model max>}` or server-side `OLLAMA_CONTEXT_LENGTH=<model max> ollama serve`.
134
136
  House rule: maximum available context unless you explicitly choose otherwise —
135
137
  a fixed lower number is a hidden ceiling (see [`docs/faq.md`](docs/faq.md)).
136
138
 
@@ -51,6 +51,7 @@ tests/test_active_context_policy_adoption.py
51
51
  tests/test_adversary_hardening_2026_07_13.py
52
52
  tests/test_agent_plan_review_modes.py
53
53
  tests/test_agent_speculation_inheritance.py
54
+ tests/test_agent_stream_inheritance.py
54
55
  tests/test_agents_integration_llm.py
55
56
  tests/test_base_agent_trace_accessors.py
56
57
  tests/test_batching_prompt_rule.py
@@ -1,16 +1,16 @@
1
1
  abstractcore[tools]>=2.13.41
2
- abstractruntime>=0.4.32
2
+ abstractruntime>=0.5.0
3
3
 
4
4
  [apple]
5
5
  abstractcore[all-apple]>=2.13.41
6
- abstractruntime[apple]>=0.4.32
6
+ abstractruntime[apple]>=0.5.0
7
7
 
8
8
  [dev]
9
9
  pytest>=7.0
10
10
 
11
11
  [gpu]
12
12
  abstractcore[all-gpu]>=2.13.41
13
- abstractruntime[gpu]>=0.4.32
13
+ abstractruntime[gpu]>=0.5.0
14
14
 
15
15
  [test]
16
16
  pytest>=7.0
@@ -0,0 +1,56 @@
1
+ """Delegated sub-agents inherit the run's live token-streaming switch.
2
+
3
+ `_runtime.stream: true` asks the runtime to stream every LLM call of the run
4
+ to the host's live view. A `delegate_agent` child is started with an explicit
5
+ `_runtime` rider list; without `stream` in it, the child's calls would silently
6
+ stop streaming mid-tree. False (explicit off) is inherited too; an absent value
7
+ stays absent.
8
+ """
9
+ from types import SimpleNamespace
10
+
11
+ import pytest
12
+
13
+ from abstractagent.adapters.codeact_runtime import create_codeact_workflow
14
+ from abstractagent.adapters.memact_runtime import create_memact_workflow
15
+ from abstractagent.adapters.react_runtime import create_react_workflow
16
+ from abstractagent.logic.builtins import DELEGATE_AGENT_TOOL
17
+ from abstractagent.logic.codeact import CodeActLogic
18
+ from abstractagent.logic.memact import MemActLogic
19
+ from abstractagent.logic.react import ReActLogic
20
+ from abstractruntime import EffectType, RunState, RunStatus
21
+
22
+
23
+ @pytest.mark.parametrize(
24
+ "factory,logic",
25
+ [
26
+ (create_react_workflow, ReActLogic),
27
+ (create_codeact_workflow, CodeActLogic),
28
+ (create_memact_workflow, MemActLogic),
29
+ ],
30
+ )
31
+ @pytest.mark.parametrize("stream", [True, False, None])
32
+ def test_every_delegate_loop_inherits_stream(factory, logic, stream):
33
+ workflow = factory(logic=logic(tools=[DELEGATE_AGENT_TOOL]), workflow_id="wf")
34
+ runtime_ns = {"inbox": [], "provider": "stub", "model": "stub", "allowed_tools": ["delegate_agent"]}
35
+ if stream is not None:
36
+ runtime_ns["stream"] = stream
37
+ run = RunState(
38
+ run_id="parent",
39
+ workflow_id="wf",
40
+ status=RunStatus.RUNNING,
41
+ current_node="act",
42
+ vars={
43
+ "context": {"task": "test", "messages": []},
44
+ "scratchpad": {"iteration": 1, "max_iterations": 20, "cycles": []},
45
+ "_runtime": runtime_ns,
46
+ "_temp": {"pending_tool_calls": [{"name": "delegate_agent", "arguments": {"task": "subtask"}, "call_id": "d1"}]},
47
+ "_limits": {"max_iterations": 20},
48
+ },
49
+ )
50
+ plan = workflow.get_node("act")(run, SimpleNamespace(now_iso=lambda: "2026-09-26T00:00:00Z"))
51
+ assert plan.effect is not None and plan.effect.type == EffectType.START_SUBWORKFLOW
52
+ child = plan.effect.payload["vars"]["_runtime"]
53
+ if stream is None:
54
+ assert "stream" not in child
55
+ else:
56
+ assert child["stream"] is stream
@@ -19,7 +19,7 @@ def test_base_dependency_floors_match_gateway_alignment() -> None:
19
19
  deps = set(_project()["dependencies"])
20
20
 
21
21
  assert "abstractcore[tools]>=2.13.41" in deps
22
- assert "abstractruntime>=0.4.32" in deps
22
+ assert "abstractruntime>=0.5.0" in deps
23
23
 
24
24
 
25
25
  def test_hardware_profile_extras_are_core_runtime_cascades() -> None:
@@ -27,11 +27,11 @@ def test_hardware_profile_extras_are_core_runtime_cascades() -> None:
27
27
 
28
28
  assert set(extras["apple"]) == {
29
29
  "abstractcore[all-apple]>=2.13.41",
30
- "abstractruntime[apple]>=0.4.32",
30
+ "abstractruntime[apple]>=0.5.0",
31
31
  }
32
32
  assert set(extras["gpu"]) == {
33
33
  "abstractcore[all-gpu]>=2.13.41",
34
- "abstractruntime[gpu]>=0.4.32",
34
+ "abstractruntime[gpu]>=0.5.0",
35
35
  }
36
36
  assert "all-apple" not in extras
37
37
  assert "all-gpu" not in extras
File without changes
File without changes