codex-agent-framework 0.1.44__tar.gz → 0.1.46__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 (151) hide show
  1. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/CHANGELOG.md +15 -0
  2. {codex_agent_framework-0.1.44/codex_agent_framework.egg-info → codex_agent_framework-0.1.46}/PKG-INFO +2 -2
  3. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/README.md +1 -1
  4. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/config.py +1 -0
  5. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/context.py +2 -1
  6. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/status.py +2 -1
  7. codex_agent_framework-0.1.46/codex_agent/version.py +1 -0
  8. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46/codex_agent_framework.egg-info}/PKG-INFO +2 -2
  9. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/pyproject.toml +1 -1
  10. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_context.py +21 -0
  11. codex_agent_framework-0.1.44/codex_agent/version.py +0 -1
  12. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/LICENSE +0 -0
  13. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/MANIFEST.in +0 -0
  14. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/__init__.py +0 -0
  15. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/__main__.py +0 -0
  16. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/agent.py +0 -0
  17. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/agent_runtime.py +0 -0
  18. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/ai.py +0 -0
  19. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/browser.py +0 -0
  20. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_commands.py +0 -0
  21. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/__init__.py +0 -0
  22. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/bash/__init__.py +0 -0
  23. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/bash/requirements.txt +0 -0
  24. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/browser/__init__.py +0 -0
  25. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/browser/requirements.txt +0 -0
  26. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/content/__init__.py +0 -0
  27. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/content/requirements.txt +0 -0
  28. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/content/system.py +0 -0
  29. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/content/vision.py +0 -0
  30. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/context/__init__.py +0 -0
  31. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/desktop/__init__.py +0 -0
  32. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/desktop/requirements.txt +0 -0
  33. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/environment/__init__.py +0 -0
  34. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/environment/requirements.txt +0 -0
  35. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/files/__init__.py +0 -0
  36. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/files/requirements.txt +0 -0
  37. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/files/tools.py +0 -0
  38. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/image_generation/__init__.py +0 -0
  39. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/image_generation/image_generation_system_prompt.txt +0 -0
  40. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/image_generation/requirements.txt +0 -0
  41. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/interface/__init__.py +0 -0
  42. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/interface/requirements.txt +0 -0
  43. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/memory/__init__.py +0 -0
  44. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/memory/requirements.txt +0 -0
  45. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/planner/__init__.py +0 -0
  46. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/planner/requirements.txt +0 -0
  47. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/python/__init__.py +0 -0
  48. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/python/requirements.txt +0 -0
  49. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/realtime/__init__.py +0 -0
  50. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/realtime/audio.py +0 -0
  51. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/realtime/bridge.py +0 -0
  52. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/realtime/manager.py +0 -0
  53. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/realtime/requirements.txt +0 -0
  54. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/realtime/session.py +0 -0
  55. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/scheduler/__init__.py +0 -0
  56. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/scheduler/requirements.txt +0 -0
  57. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/subagents/__init__.py +0 -0
  58. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/subagents/profiles/explorer.json +0 -0
  59. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/subagents/requirements.txt +0 -0
  60. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/tts/__init__.py +0 -0
  61. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/builtin_plugins/tts/requirements.txt +0 -0
  62. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/cli/__init__.py +0 -0
  63. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/cli/headless.py +0 -0
  64. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/cli/main.py +0 -0
  65. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/cli/output.py +0 -0
  66. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/cli/root.py +0 -0
  67. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/cli/runner.py +0 -0
  68. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/client.py +0 -0
  69. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/command.py +0 -0
  70. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/desktop.py +0 -0
  71. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/event.py +0 -0
  72. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/get_text/__init__.py +0 -0
  73. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/get_text/default_gitignore +0 -0
  74. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/get_text/get_text.py +0 -0
  75. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/get_text/simpler_get_text.py +0 -0
  76. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/hooks.py +0 -0
  77. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/image.py +0 -0
  78. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/latex.py +0 -0
  79. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/mainloop.py +0 -0
  80. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/message.py +0 -0
  81. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/plugin.py +0 -0
  82. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/prompts/system_prompt.txt +0 -0
  83. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/provider.py +0 -0
  84. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/runtime.py +0 -0
  85. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/scheduler.py +0 -0
  86. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/scripts/install-system-dependencies.sh +0 -0
  87. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/server/__init__.py +0 -0
  88. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/server/app.py +0 -0
  89. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/server/core.py +0 -0
  90. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/service.py +0 -0
  91. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/sessions.py +0 -0
  92. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/stream.py +0 -0
  93. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/stream_utils.py +0 -0
  94. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/tool.py +0 -0
  95. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/tray.py +0 -0
  96. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/tui/__init__.py +0 -0
  97. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/tui/app.py +0 -0
  98. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/tui/chat.py +0 -0
  99. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/tui/lifecycle.py +0 -0
  100. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/tui/log.py +0 -0
  101. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/tui/state.py +0 -0
  102. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/tui/status_bar.py +0 -0
  103. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/tui/style.py +0 -0
  104. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/tui/transcript.py +0 -0
  105. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/utils.py +0 -0
  106. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent/worker.py +0 -0
  107. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent_framework.egg-info/SOURCES.txt +0 -0
  108. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent_framework.egg-info/dependency_links.txt +0 -0
  109. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent_framework.egg-info/entry_points.txt +0 -0
  110. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent_framework.egg-info/requires.txt +0 -0
  111. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/codex_agent_framework.egg-info/top_level.txt +0 -0
  112. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/dependencies.txt +0 -0
  113. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/setup.cfg +0 -0
  114. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent.py +0 -0
  115. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_audio_hooks.py +0 -0
  116. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_commands.py +0 -0
  117. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_desktop.py +0 -0
  118. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_environment.py +0 -0
  119. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_image_generation.py +0 -0
  120. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_observe.py +0 -0
  121. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_plugins.py +0 -0
  122. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_providers_config.py +0 -0
  123. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_realtime.py +0 -0
  124. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_response.py +0 -0
  125. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_runtime.py +0 -0
  126. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_sessions.py +0 -0
  127. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_subagents.py +0 -0
  128. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_tools.py +0 -0
  129. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_agent_turns.py +0 -0
  130. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_ai.py +0 -0
  131. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_browser.py +0 -0
  132. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_builtin_config.py +0 -0
  133. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_chat.py +0 -0
  134. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_cli.py +0 -0
  135. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_cli_headless.py +0 -0
  136. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_cli_root.py +0 -0
  137. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_client.py +0 -0
  138. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_events.py +0 -0
  139. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_get_text_browser.py +0 -0
  140. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_hooks.py +0 -0
  141. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_image_message.py +0 -0
  142. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_local_desktop.py +0 -0
  143. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_memory.py +0 -0
  144. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_messages.py +0 -0
  145. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_planner.py +0 -0
  146. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_scheduler.py +0 -0
  147. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_server.py +0 -0
  148. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_service.py +0 -0
  149. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_tui.py +0 -0
  150. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_utils.py +0 -0
  151. {codex_agent_framework-0.1.44 → codex_agent_framework-0.1.46}/tests/test_worker.py +0 -0
@@ -4,6 +4,21 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  This project loosely follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and uses semantic versioning where practical.
6
6
 
7
+ ## [0.1.46] - 2026-05-16
8
+ ### Changed
9
+ - Clarify README product positioning as an open-source, hackable, local-first Codex-style harness with explicit control over sessions, tools, plugins, runtime state, and UI surfaces.
10
+
11
+ ### Tests
12
+ - Validate the documentation update with the 554-test offline CI suite.
13
+
14
+ ## [0.1.45] - 2026-05-16
15
+ ### Changed
16
+ - Add `prune_orphaned_tool_outputs_on_context_build` to keep orphaned tool-output pruning enabled by default while making the persistent side effect configurable.
17
+ - Apply the same pruning guard to context-window status estimates and document the current 554-test offline CI count.
18
+
19
+ ### Tests
20
+ - Add coverage for disabling context-build orphan pruning and validate with targeted context/session/response/config coverage plus the 554-test offline CI suite.
21
+
7
22
  ## [0.1.44] - 2026-05-16
8
23
  ### Changed
9
24
  - Clarify local server exposure risks for non-loopback binds, including the current lack of built-in authentication, authorization, and browser-facing CORS hardening.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-agent-framework
3
- Version: 0.1.44
3
+ Version: 0.1.46
4
4
  Summary: A lightweight event-driven Codex agent runtime.
5
5
  Author: Baptiste
6
6
  License-Expression: MIT
@@ -51,7 +51,7 @@ Dynamic: license-file
51
51
 
52
52
  `codex-agent-framework` is a local-first Python framework for building and running tool-using AI agents.
53
53
 
54
- Use it as a ready-to-run terminal assistant, or import `Agent` when you want to build your own agentic workflow in Python.
54
+ It is designed as an open-source, hackable Codex-style harness for people who want local control over sessions, tools, plugins, runtime state, and UI surfaces instead of a sealed assistant runtime. Use it as a ready-to-run terminal assistant, or import `Agent` when you want to build your own agentic workflow in Python.
55
55
 
56
56
  > Early alpha: APIs are still evolving and breaking changes are expected while the architecture settles.
57
57
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  `codex-agent-framework` is a local-first Python framework for building and running tool-using AI agents.
4
4
 
5
- Use it as a ready-to-run terminal assistant, or import `Agent` when you want to build your own agentic workflow in Python.
5
+ It is designed as an open-source, hackable Codex-style harness for people who want local control over sessions, tools, plugins, runtime state, and UI surfaces instead of a sealed assistant runtime. Use it as a ready-to-run terminal assistant, or import `Agent` when you want to build your own agentic workflow in Python.
6
6
 
7
7
  > Early alpha: APIs are still evolving and breaking changes are expected while the architecture settles.
8
8
 
@@ -33,6 +33,7 @@ class AgentConfig(modict):
33
33
  tool_call_timeout = 0
34
34
  vision_enabled = True
35
35
  max_images = 10
36
+ prune_orphaned_tool_outputs_on_context_build = True
36
37
  web_search_enabled = False
37
38
  image_generation_enabled = False
38
39
  image_generation_output_format = "png"
@@ -82,7 +82,8 @@ class ContextManager:
82
82
  providers_msgs = self.get_providers_messages()
83
83
  max_images = self.agent.config.get("max_images", 10)
84
84
 
85
- self.prune_orphaned_session_tool_outputs()
85
+ if self.agent.config.prune_orphaned_tool_outputs_on_context_build:
86
+ self.prune_orphaned_session_tool_outputs()
86
87
  session_messages = sort(
87
88
  msg for msg in self.agent.session.context_messages()
88
89
  if self.is_message_visible_in_context(msg)
@@ -70,7 +70,8 @@ class StatusManager:
70
70
  response_tools = self.agent.tools_manager.get_response_tools()
71
71
  max_images = self.agent.config.get("max_images", 10)
72
72
  context_manager = self.agent.context_manager
73
- context_manager.prune_orphaned_session_tool_outputs()
73
+ if self.agent.config.prune_orphaned_tool_outputs_on_context_build:
74
+ context_manager.prune_orphaned_session_tool_outputs()
74
75
  all_session_messages = list(self.agent.session.messages) if self.agent.session else []
75
76
  session_messages = sort(
76
77
  msg for msg in self.agent.session.context_messages()
@@ -0,0 +1 @@
1
+ __version__ = "0.1.46"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-agent-framework
3
- Version: 0.1.44
3
+ Version: 0.1.46
4
4
  Summary: A lightweight event-driven Codex agent runtime.
5
5
  Author: Baptiste
6
6
  License-Expression: MIT
@@ -51,7 +51,7 @@ Dynamic: license-file
51
51
 
52
52
  `codex-agent-framework` is a local-first Python framework for building and running tool-using AI agents.
53
53
 
54
- Use it as a ready-to-run terminal assistant, or import `Agent` when you want to build your own agentic workflow in Python.
54
+ It is designed as an open-source, hackable Codex-style harness for people who want local control over sessions, tools, plugins, runtime state, and UI surfaces instead of a sealed assistant runtime. Use it as a ready-to-run terminal assistant, or import `Agent` when you want to build your own agentic workflow in Python.
55
55
 
56
56
  > Early alpha: APIs are still evolving and breaking changes are expected while the architecture settles.
57
57
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "codex-agent-framework"
7
- version = "0.1.44"
7
+ version = "0.1.46"
8
8
  description = "A lightweight event-driven Codex agent runtime."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -475,6 +475,27 @@ def test_agent_get_context_filters_expired_messages():
475
475
  assert "expired hidden context" not in context_text
476
476
 
477
477
 
478
+ def test_agent_get_context_can_skip_orphaned_tool_output_pruning():
479
+ agent = Agent(session="new", prune_orphaned_tool_outputs_on_context_build=False)
480
+ output = ToolResultMessage(
481
+ name="observe",
482
+ call_id="call_missing",
483
+ content="success: full output in ImageMessage id=img_1.",
484
+ )
485
+ user = DeveloperMessage(content="resumed")
486
+ agent.session.messages = [output, user]
487
+ agent.save_session()
488
+
489
+ context = agent.context_manager.get_context()
490
+
491
+ assert output in agent.session.messages
492
+ assert user in agent.session.messages
493
+ assert user.id in [message.id for message in context]
494
+ with open(agent.session.session_file, encoding="utf-8") as f:
495
+ persisted = json.load(f)
496
+ assert [message["id"] for message in persisted["messages"]] == [output.id, user.id]
497
+
498
+
478
499
  def test_agent_get_context_uses_openai_input_token_count_when_available(monkeypatch):
479
500
  agent = Agent(session="new")
480
501
  agent.session.messages = [DeveloperMessage(content="visible context")]
@@ -1 +0,0 @@
1
- __version__ = "0.1.44"