codex-agent-framework 0.1.40__tar.gz → 0.1.42__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.40 → codex_agent_framework-0.1.42}/CHANGELOG.md +14 -0
  2. {codex_agent_framework-0.1.40/codex_agent_framework.egg-info → codex_agent_framework-0.1.42}/PKG-INFO +1 -1
  3. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/config.py +30 -5
  4. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/sessions.py +88 -17
  5. codex_agent_framework-0.1.42/codex_agent/version.py +1 -0
  6. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42/codex_agent_framework.egg-info}/PKG-INFO +1 -1
  7. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/pyproject.toml +1 -1
  8. codex_agent_framework-0.1.40/codex_agent/version.py +0 -1
  9. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/LICENSE +0 -0
  10. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/MANIFEST.in +0 -0
  11. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/README.md +0 -0
  12. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/__init__.py +0 -0
  13. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/__main__.py +0 -0
  14. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/agent.py +0 -0
  15. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/agent_runtime.py +0 -0
  16. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/ai.py +0 -0
  17. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/browser.py +0 -0
  18. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_commands.py +0 -0
  19. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/__init__.py +0 -0
  20. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/bash/__init__.py +0 -0
  21. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/bash/requirements.txt +0 -0
  22. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/browser/__init__.py +0 -0
  23. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/browser/requirements.txt +0 -0
  24. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/content/__init__.py +0 -0
  25. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/content/requirements.txt +0 -0
  26. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/content/system.py +0 -0
  27. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/content/vision.py +0 -0
  28. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/context/__init__.py +0 -0
  29. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/desktop/__init__.py +0 -0
  30. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/desktop/requirements.txt +0 -0
  31. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/environment/__init__.py +0 -0
  32. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/environment/requirements.txt +0 -0
  33. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/files/__init__.py +0 -0
  34. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/files/requirements.txt +0 -0
  35. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/files/tools.py +0 -0
  36. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/image_generation/__init__.py +0 -0
  37. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/image_generation/image_generation_system_prompt.txt +0 -0
  38. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/image_generation/requirements.txt +0 -0
  39. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/interface/__init__.py +0 -0
  40. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/interface/requirements.txt +0 -0
  41. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/memory/__init__.py +0 -0
  42. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/memory/requirements.txt +0 -0
  43. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/planner/__init__.py +0 -0
  44. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/planner/requirements.txt +0 -0
  45. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/python/__init__.py +0 -0
  46. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/python/requirements.txt +0 -0
  47. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/realtime/__init__.py +0 -0
  48. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/realtime/audio.py +0 -0
  49. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/realtime/bridge.py +0 -0
  50. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/realtime/manager.py +0 -0
  51. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/realtime/requirements.txt +0 -0
  52. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/realtime/session.py +0 -0
  53. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/scheduler/__init__.py +0 -0
  54. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/scheduler/requirements.txt +0 -0
  55. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/subagents/__init__.py +0 -0
  56. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/subagents/profiles/explorer.json +0 -0
  57. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/subagents/requirements.txt +0 -0
  58. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/tts/__init__.py +0 -0
  59. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/builtin_plugins/tts/requirements.txt +0 -0
  60. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/cli/__init__.py +0 -0
  61. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/cli/headless.py +0 -0
  62. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/cli/main.py +0 -0
  63. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/cli/output.py +0 -0
  64. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/cli/root.py +0 -0
  65. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/cli/runner.py +0 -0
  66. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/client.py +0 -0
  67. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/command.py +0 -0
  68. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/context.py +0 -0
  69. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/desktop.py +0 -0
  70. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/event.py +0 -0
  71. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/get_text/__init__.py +0 -0
  72. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/get_text/default_gitignore +0 -0
  73. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/get_text/get_text.py +0 -0
  74. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/get_text/simpler_get_text.py +0 -0
  75. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/hooks.py +0 -0
  76. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/image.py +0 -0
  77. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/latex.py +0 -0
  78. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/mainloop.py +0 -0
  79. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/message.py +0 -0
  80. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/plugin.py +0 -0
  81. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/prompts/system_prompt.txt +0 -0
  82. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/provider.py +0 -0
  83. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/runtime.py +0 -0
  84. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/scheduler.py +0 -0
  85. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/scripts/install-system-dependencies.sh +0 -0
  86. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/server/__init__.py +0 -0
  87. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/server/app.py +0 -0
  88. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/server/core.py +0 -0
  89. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/service.py +0 -0
  90. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/status.py +0 -0
  91. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/stream.py +0 -0
  92. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/stream_utils.py +0 -0
  93. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/tool.py +0 -0
  94. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/tray.py +0 -0
  95. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/tui/__init__.py +0 -0
  96. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/tui/app.py +0 -0
  97. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/tui/chat.py +0 -0
  98. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/tui/lifecycle.py +0 -0
  99. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/tui/log.py +0 -0
  100. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/tui/state.py +0 -0
  101. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/tui/status_bar.py +0 -0
  102. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/tui/style.py +0 -0
  103. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/tui/transcript.py +0 -0
  104. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/utils.py +0 -0
  105. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent/worker.py +0 -0
  106. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent_framework.egg-info/SOURCES.txt +0 -0
  107. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent_framework.egg-info/dependency_links.txt +0 -0
  108. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent_framework.egg-info/entry_points.txt +0 -0
  109. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent_framework.egg-info/requires.txt +0 -0
  110. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/codex_agent_framework.egg-info/top_level.txt +0 -0
  111. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/dependencies.txt +0 -0
  112. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/setup.cfg +0 -0
  113. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent.py +0 -0
  114. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_audio_hooks.py +0 -0
  115. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_commands.py +0 -0
  116. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_context.py +0 -0
  117. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_desktop.py +0 -0
  118. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_environment.py +0 -0
  119. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_image_generation.py +0 -0
  120. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_observe.py +0 -0
  121. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_plugins.py +0 -0
  122. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_providers_config.py +0 -0
  123. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_realtime.py +0 -0
  124. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_response.py +0 -0
  125. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_runtime.py +0 -0
  126. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_sessions.py +0 -0
  127. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_subagents.py +0 -0
  128. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_tools.py +0 -0
  129. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_agent_turns.py +0 -0
  130. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_ai.py +0 -0
  131. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_browser.py +0 -0
  132. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_builtin_config.py +0 -0
  133. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_chat.py +0 -0
  134. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_cli.py +0 -0
  135. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_cli_headless.py +0 -0
  136. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_cli_root.py +0 -0
  137. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_client.py +0 -0
  138. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_events.py +0 -0
  139. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_get_text_browser.py +0 -0
  140. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_hooks.py +0 -0
  141. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_image_message.py +0 -0
  142. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_local_desktop.py +0 -0
  143. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_memory.py +0 -0
  144. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_messages.py +0 -0
  145. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_planner.py +0 -0
  146. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_scheduler.py +0 -0
  147. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_server.py +0 -0
  148. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_service.py +0 -0
  149. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_tui.py +0 -0
  150. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_utils.py +0 -0
  151. {codex_agent_framework-0.1.40 → codex_agent_framework-0.1.42}/tests/test_worker.py +0 -0
@@ -4,6 +4,20 @@ 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.42] - 2026-05-16
8
+ ### Changed
9
+ - Reflow `AgentSession` and `SessionsManager` imports, compaction signatures, session load/start events, and compaction defaults for readability.
10
+
11
+ ### Tests
12
+ - Validate with targeted session, context, response, and core Agent coverage plus the 553-test offline CI suite.
13
+
14
+ ## [0.1.41] - 2026-05-16
15
+ ### Changed
16
+ - Reflow `ConfigManager` update, namespace update, plugin default, and system prompt validation paths for readability.
17
+
18
+ ### Tests
19
+ - Validate with targeted config/provider/plugin/environment coverage and the 553-test offline CI suite.
20
+
7
21
  ## [0.1.40] - 2026-05-16
8
22
  ### Changed
9
23
  - Share decorated-plugin option lookup across event handlers, hooks, and stream processors.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-agent-framework
3
- Version: 0.1.40
3
+ Version: 0.1.42
4
4
  Summary: A lightweight event-driven Codex agent runtime.
5
5
  Author: Baptiste
6
6
  License-Expression: MIT
@@ -143,7 +143,12 @@ class ConfigManager:
143
143
 
144
144
  def update(self, config=None, save=True, **kwargs):
145
145
  if self.should_queue_state_command():
146
- return self.agent.submit("update_config", config=config, save=save, kwargs=kwargs).wait().result
146
+ return self.agent.submit(
147
+ "update_config",
148
+ config=config,
149
+ save=save,
150
+ kwargs=kwargs,
151
+ ).wait().result
147
152
  data = modict(config or {})
148
153
  data.update(kwargs)
149
154
  if data:
@@ -151,7 +156,12 @@ class ConfigManager:
151
156
  self.agent.config = self.config
152
157
  if save:
153
158
  self.save()
154
- self.emit_state_changed(reason="config_updated", namespace="config", name="agent", details=data)
159
+ self.emit_state_changed(
160
+ reason="config_updated",
161
+ namespace="config",
162
+ name="agent",
163
+ details=data,
164
+ )
155
165
  return self.config
156
166
 
157
167
  def update_config(self, namespace="agent", config=None, save=True, **kwargs):
@@ -166,7 +176,12 @@ class ConfigManager:
166
176
  target.update(data)
167
177
  if save:
168
178
  self.save_config(namespace)
169
- self.emit_state_changed(reason="config_updated", namespace="config", name=namespace, details=data)
179
+ self.emit_state_changed(
180
+ reason="config_updated",
181
+ namespace="config",
182
+ name=namespace,
183
+ details=data,
184
+ )
170
185
  return target
171
186
 
172
187
  def emit_state_changed(self, **data):
@@ -222,7 +237,16 @@ class ConfigManager:
222
237
  if isinstance(plugins, dict) and not plugins:
223
238
  self.config.pop("plugins", None)
224
239
 
225
- def apply_config_defaults(self, namespace, *, file=None, config_class=PluginConfig, defaults=None, legacy_agent_aliases=None, legacy_agent_sections=None):
240
+ def apply_config_defaults(
241
+ self,
242
+ namespace,
243
+ *,
244
+ file=None,
245
+ config_class=PluginConfig,
246
+ defaults=None,
247
+ legacy_agent_aliases=None,
248
+ legacy_agent_sections=None,
249
+ ):
226
250
  config = self.load_config(namespace, config_class=config_class, file=file, defaults=defaults)
227
251
  migrated = False
228
252
  for section in legacy_agent_sections or ():
@@ -253,7 +277,8 @@ class ConfigManager:
253
277
  prompt = self.config.system
254
278
  else:
255
279
  raise ValueError(
256
- f"Invalid system message configuration. Expected path or string, got {type(self.config.system)}"
280
+ "Invalid system message configuration. "
281
+ f"Expected path or string, got {type(self.config.system)}"
257
282
  )
258
283
  sections = [str(prompt or "").strip()]
259
284
  plugins_manager = getattr(self.agent, "plugins_manager", None)
@@ -7,12 +7,39 @@ from typing import List
7
7
  from codex_backend_sdk import CodexClient
8
8
  from modict import modict
9
9
 
10
- from .event import CompactionCompletedEvent, CompactionFailedEvent, CompactionRequestedEvent, MessageAddedEvent, SessionDeletedEvent, SessionLoadedEvent
11
- from .message import AssistantMessage, CompactionMessage, DeveloperMessage, Message, SystemMessage, ToolResultMessage, ToolResultWrapper, message_from_data
12
- from .utils import atomic_write_json, runtime_join, session_id, sort, split_history_turns, timestamp, total_tokens, truncate
13
-
14
-
15
- UNRESOLVED_TOOL_RESULT_CONTENT = "This tool call could not be resolved or has been interrupted: result unavailable."
10
+ from .event import (
11
+ CompactionCompletedEvent,
12
+ CompactionFailedEvent,
13
+ CompactionRequestedEvent,
14
+ MessageAddedEvent,
15
+ SessionDeletedEvent,
16
+ SessionLoadedEvent,
17
+ )
18
+ from .message import (
19
+ AssistantMessage,
20
+ CompactionMessage,
21
+ DeveloperMessage,
22
+ Message,
23
+ SystemMessage,
24
+ ToolResultMessage,
25
+ ToolResultWrapper,
26
+ message_from_data,
27
+ )
28
+ from .utils import (
29
+ atomic_write_json,
30
+ runtime_join,
31
+ session_id,
32
+ sort,
33
+ split_history_turns,
34
+ timestamp,
35
+ total_tokens,
36
+ truncate,
37
+ )
38
+
39
+
40
+ UNRESOLVED_TOOL_RESULT_CONTENT = (
41
+ "This tool call could not be resolved or has been interrupted: result unavailable."
42
+ )
16
43
  DEFAULT_COMPACTION_MAX_INPUT_TOKENS = 8000
17
44
 
18
45
 
@@ -46,13 +73,23 @@ class AgentSession(modict):
46
73
  def is_message_visible_in_context(self, message):
47
74
  return message.get("turns_left", -1) != 0
48
75
 
49
- def truncate_message_for_compaction(self, message, max_input_tokens=DEFAULT_COMPACTION_MAX_INPUT_TOKENS, model=None):
76
+ def truncate_message_for_compaction(
77
+ self,
78
+ message,
79
+ max_input_tokens=DEFAULT_COMPACTION_MAX_INPUT_TOKENS,
80
+ model=None,
81
+ ):
50
82
  message = message.copy()
51
83
  if message.get("content") and isinstance(message.content, str):
52
84
  message.content = truncate(message.content, max_tokens=max_input_tokens, model=model)
53
85
  return message
54
86
 
55
- def compaction_plan(self, max_input_tokens=DEFAULT_COMPACTION_MAX_INPUT_TOKENS, model=None, max_compacted_turns=None):
87
+ def compaction_plan(
88
+ self,
89
+ max_input_tokens=DEFAULT_COMPACTION_MAX_INPUT_TOKENS,
90
+ model=None,
91
+ max_compacted_turns=None,
92
+ ):
56
93
  compaction_index = self.latest_compaction_index()
57
94
  start = compaction_index + 1 if compaction_index is not None else 0
58
95
  anchor = self.messages[compaction_index] if compaction_index is not None else None
@@ -102,12 +139,26 @@ class AgentSession(modict):
102
139
  compacted_turn_count=len(selected_turns),
103
140
  preserved_turn_count=len(preserved_turns),
104
141
  compacted_message_count=len(compacted_messages),
105
- compacted_token_count=total_tokens(history_messages[1:] if anchor is not None else history_messages, model=model),
142
+ compacted_token_count=total_tokens(
143
+ history_messages[1:] if anchor is not None else history_messages,
144
+ model=model,
145
+ ),
106
146
  context_message_count=len(history_messages) + len(preserved_messages),
107
147
  )
108
148
 
109
- def compact(self, client=None, model="gpt-5.4", instructions="", max_input_tokens=DEFAULT_COMPACTION_MAX_INPUT_TOKENS, max_compacted_turns=None):
110
- plan = self.compaction_plan(max_input_tokens=max_input_tokens, model=model, max_compacted_turns=max_compacted_turns)
149
+ def compact(
150
+ self,
151
+ client=None,
152
+ model="gpt-5.4",
153
+ instructions="",
154
+ max_input_tokens=DEFAULT_COMPACTION_MAX_INPUT_TOKENS,
155
+ max_compacted_turns=None,
156
+ ):
157
+ plan = self.compaction_plan(
158
+ max_input_tokens=max_input_tokens,
159
+ model=model,
160
+ max_compacted_turns=max_compacted_turns,
161
+ )
111
162
  compacted_messages = plan.compacted_messages
112
163
  if not compacted_messages:
113
164
  return None
@@ -619,8 +670,16 @@ class SessionsManager:
619
670
  self.agent.current_session_id = self.agent.session.session_id
620
671
  if repair.repaired:
621
672
  self.agent.status_manager.invalidate_context_cache()
622
- self.append_message(DeveloperMessage(content=f"Resuming chat session at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}."))
623
- self.agent.emit(SessionLoadedEvent, session=self.agent.session, session_id=self.agent.session.session_id)
673
+ self.append_message(
674
+ DeveloperMessage(
675
+ content=f"Resuming chat session at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}."
676
+ )
677
+ )
678
+ self.agent.emit(
679
+ SessionLoadedEvent,
680
+ session=self.agent.session,
681
+ session_id=self.agent.session.session_id,
682
+ )
624
683
  return self.agent.session
625
684
 
626
685
  def start_new(self, root_dir=None, cwd=None):
@@ -634,8 +693,16 @@ class SessionsManager:
634
693
  )
635
694
  self.agent.apply_session_working_directories()
636
695
  self.agent.current_session_id = self.agent.session.session_id
637
- self.append_message(DeveloperMessage(content=f"Starting a new chat session at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}."))
638
- self.agent.emit(SessionLoadedEvent, session=self.agent.session, session_id=self.agent.session.session_id)
696
+ self.append_message(
697
+ DeveloperMessage(
698
+ content=f"Starting a new chat session at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}."
699
+ )
700
+ )
701
+ self.agent.emit(
702
+ SessionLoadedEvent,
703
+ session=self.agent.session,
704
+ session_id=self.agent.session.session_id,
705
+ )
639
706
  return self.agent.session
640
707
 
641
708
  def delete(self, session):
@@ -698,8 +765,12 @@ class SessionsManager:
698
765
  ).wait().result
699
766
 
700
767
  model = model or self.agent.config.model
701
- instructions = instructions if instructions is not None else self.agent.config_manager.system_message().content
702
- max_input_tokens = self.agent.config.get("max_input_tokens", DEFAULT_COMPACTION_MAX_INPUT_TOKENS)
768
+ if instructions is None:
769
+ instructions = self.agent.config_manager.system_message().content
770
+ max_input_tokens = self.agent.config.get(
771
+ "max_input_tokens",
772
+ DEFAULT_COMPACTION_MAX_INPUT_TOKENS,
773
+ )
703
774
  plan = self.agent.session.compaction_plan(
704
775
  max_input_tokens=max_input_tokens,
705
776
  model=model,
@@ -0,0 +1 @@
1
+ __version__ = "0.1.42"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-agent-framework
3
- Version: 0.1.40
3
+ Version: 0.1.42
4
4
  Summary: A lightweight event-driven Codex agent runtime.
5
5
  Author: Baptiste
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "codex-agent-framework"
7
- version = "0.1.40"
7
+ version = "0.1.42"
8
8
  description = "A lightweight event-driven Codex agent runtime."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1 +0,0 @@
1
- __version__ = "0.1.40"