codex-agent-framework 0.1.39__tar.gz → 0.1.41__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.39 → codex_agent_framework-0.1.41}/CHANGELOG.md +15 -0
  2. {codex_agent_framework-0.1.39/codex_agent_framework.egg-info → codex_agent_framework-0.1.41}/PKG-INFO +1 -1
  3. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/config.py +30 -5
  4. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/plugin.py +24 -5
  5. codex_agent_framework-0.1.41/codex_agent/version.py +1 -0
  6. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41/codex_agent_framework.egg-info}/PKG-INFO +1 -1
  7. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/pyproject.toml +1 -1
  8. codex_agent_framework-0.1.39/codex_agent/version.py +0 -1
  9. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/LICENSE +0 -0
  10. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/MANIFEST.in +0 -0
  11. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/README.md +0 -0
  12. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/__init__.py +0 -0
  13. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/__main__.py +0 -0
  14. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/agent.py +0 -0
  15. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/agent_runtime.py +0 -0
  16. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/ai.py +0 -0
  17. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/browser.py +0 -0
  18. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_commands.py +0 -0
  19. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/__init__.py +0 -0
  20. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/bash/__init__.py +0 -0
  21. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/bash/requirements.txt +0 -0
  22. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/browser/__init__.py +0 -0
  23. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/browser/requirements.txt +0 -0
  24. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/content/__init__.py +0 -0
  25. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/content/requirements.txt +0 -0
  26. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/content/system.py +0 -0
  27. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/content/vision.py +0 -0
  28. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/context/__init__.py +0 -0
  29. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/desktop/__init__.py +0 -0
  30. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/desktop/requirements.txt +0 -0
  31. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/environment/__init__.py +0 -0
  32. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/environment/requirements.txt +0 -0
  33. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/files/__init__.py +0 -0
  34. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/files/requirements.txt +0 -0
  35. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/files/tools.py +0 -0
  36. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/image_generation/__init__.py +0 -0
  37. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/image_generation/image_generation_system_prompt.txt +0 -0
  38. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/image_generation/requirements.txt +0 -0
  39. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/interface/__init__.py +0 -0
  40. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/interface/requirements.txt +0 -0
  41. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/memory/__init__.py +0 -0
  42. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/memory/requirements.txt +0 -0
  43. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/planner/__init__.py +0 -0
  44. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/planner/requirements.txt +0 -0
  45. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/python/__init__.py +0 -0
  46. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/python/requirements.txt +0 -0
  47. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/realtime/__init__.py +0 -0
  48. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/realtime/audio.py +0 -0
  49. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/realtime/bridge.py +0 -0
  50. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/realtime/manager.py +0 -0
  51. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/realtime/requirements.txt +0 -0
  52. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/realtime/session.py +0 -0
  53. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/scheduler/__init__.py +0 -0
  54. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/scheduler/requirements.txt +0 -0
  55. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/subagents/__init__.py +0 -0
  56. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/subagents/profiles/explorer.json +0 -0
  57. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/subagents/requirements.txt +0 -0
  58. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/tts/__init__.py +0 -0
  59. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/builtin_plugins/tts/requirements.txt +0 -0
  60. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/cli/__init__.py +0 -0
  61. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/cli/headless.py +0 -0
  62. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/cli/main.py +0 -0
  63. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/cli/output.py +0 -0
  64. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/cli/root.py +0 -0
  65. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/cli/runner.py +0 -0
  66. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/client.py +0 -0
  67. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/command.py +0 -0
  68. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/context.py +0 -0
  69. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/desktop.py +0 -0
  70. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/event.py +0 -0
  71. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/get_text/__init__.py +0 -0
  72. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/get_text/default_gitignore +0 -0
  73. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/get_text/get_text.py +0 -0
  74. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/get_text/simpler_get_text.py +0 -0
  75. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/hooks.py +0 -0
  76. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/image.py +0 -0
  77. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/latex.py +0 -0
  78. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/mainloop.py +0 -0
  79. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/message.py +0 -0
  80. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/prompts/system_prompt.txt +0 -0
  81. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/provider.py +0 -0
  82. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/runtime.py +0 -0
  83. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/scheduler.py +0 -0
  84. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/scripts/install-system-dependencies.sh +0 -0
  85. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/server/__init__.py +0 -0
  86. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/server/app.py +0 -0
  87. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/server/core.py +0 -0
  88. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/service.py +0 -0
  89. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/sessions.py +0 -0
  90. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/status.py +0 -0
  91. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/stream.py +0 -0
  92. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/stream_utils.py +0 -0
  93. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/tool.py +0 -0
  94. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/tray.py +0 -0
  95. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/tui/__init__.py +0 -0
  96. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/tui/app.py +0 -0
  97. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/tui/chat.py +0 -0
  98. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/tui/lifecycle.py +0 -0
  99. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/tui/log.py +0 -0
  100. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/tui/state.py +0 -0
  101. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/tui/status_bar.py +0 -0
  102. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/tui/style.py +0 -0
  103. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/tui/transcript.py +0 -0
  104. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/utils.py +0 -0
  105. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent/worker.py +0 -0
  106. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent_framework.egg-info/SOURCES.txt +0 -0
  107. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent_framework.egg-info/dependency_links.txt +0 -0
  108. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent_framework.egg-info/entry_points.txt +0 -0
  109. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent_framework.egg-info/requires.txt +0 -0
  110. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/codex_agent_framework.egg-info/top_level.txt +0 -0
  111. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/dependencies.txt +0 -0
  112. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/setup.cfg +0 -0
  113. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent.py +0 -0
  114. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_audio_hooks.py +0 -0
  115. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_commands.py +0 -0
  116. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_context.py +0 -0
  117. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_desktop.py +0 -0
  118. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_environment.py +0 -0
  119. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_image_generation.py +0 -0
  120. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_observe.py +0 -0
  121. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_plugins.py +0 -0
  122. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_providers_config.py +0 -0
  123. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_realtime.py +0 -0
  124. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_response.py +0 -0
  125. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_runtime.py +0 -0
  126. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_sessions.py +0 -0
  127. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_subagents.py +0 -0
  128. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_tools.py +0 -0
  129. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_agent_turns.py +0 -0
  130. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_ai.py +0 -0
  131. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_browser.py +0 -0
  132. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_builtin_config.py +0 -0
  133. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_chat.py +0 -0
  134. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_cli.py +0 -0
  135. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_cli_headless.py +0 -0
  136. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_cli_root.py +0 -0
  137. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_client.py +0 -0
  138. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_events.py +0 -0
  139. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_get_text_browser.py +0 -0
  140. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_hooks.py +0 -0
  141. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_image_message.py +0 -0
  142. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_local_desktop.py +0 -0
  143. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_memory.py +0 -0
  144. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_messages.py +0 -0
  145. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_planner.py +0 -0
  146. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_scheduler.py +0 -0
  147. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_server.py +0 -0
  148. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_service.py +0 -0
  149. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_tui.py +0 -0
  150. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/tests/test_utils.py +0 -0
  151. {codex_agent_framework-0.1.39 → codex_agent_framework-0.1.41}/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.41] - 2026-05-16
8
+ ### Changed
9
+ - Reflow `ConfigManager` update, namespace update, plugin default, and system prompt validation paths for readability.
10
+
11
+ ### Tests
12
+ - Validate with targeted config/provider/plugin/environment coverage and the 553-test offline CI suite.
13
+
14
+ ## [0.1.40] - 2026-05-16
15
+ ### Changed
16
+ - Share decorated-plugin option lookup across event handlers, hooks, and stream processors.
17
+ - Reflow plugin load/unload runtime-state events for readability.
18
+
19
+ ### Tests
20
+ - Validate with plugin coverage and the 553-test offline CI suite.
21
+
7
22
  ## [0.1.39] - 2026-05-16
8
23
  ### Changed
9
24
  - Reflow `Tool` and `ToolsManager` helper signatures and runtime-state events for readability.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-agent-framework
3
- Version: 0.1.39
3
+ Version: 0.1.41
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)
@@ -30,8 +30,13 @@ def event_handler(event):
30
30
  return decorator
31
31
 
32
32
 
33
+ def _decorated_option(func, attr):
34
+ bound_func = getattr(func, "__func__", None)
35
+ return getattr(func, attr, getattr(bound_func, attr, None))
36
+
37
+
33
38
  def event_handler_options(func):
34
- return getattr(func, "_codex_event_handler", getattr(getattr(func, "__func__", None), "_codex_event_handler", None))
39
+ return _decorated_option(func, "_codex_event_handler")
35
40
 
36
41
 
37
42
  def hook_handler(name):
@@ -46,7 +51,7 @@ def hook_handler(name):
46
51
 
47
52
 
48
53
  def hook_handler_options(func):
49
- return getattr(func, "_codex_hook_handler", getattr(getattr(func, "__func__", None), "_codex_hook_handler", None))
54
+ return _decorated_option(func, "_codex_hook_handler")
50
55
 
51
56
 
52
57
  def stream_processor(key):
@@ -61,7 +66,7 @@ def stream_processor(key):
61
66
 
62
67
 
63
68
  def stream_processor_options(func):
64
- return getattr(func, "_codex_stream_processor", getattr(getattr(func, "__func__", None), "_codex_stream_processor", None))
69
+ return _decorated_option(func, "_codex_stream_processor")
65
70
 
66
71
 
67
72
  class Plugin:
@@ -473,7 +478,14 @@ class PluginsManager:
473
478
  self.plugins[plugin_name] = plugin
474
479
  plugin.apply_config_defaults()
475
480
  self.add_plugin_members(plugin)
476
- self.agent.emit(RuntimeStateChangedEvent, reason="plugin_loaded", namespace="plugins", name=plugin_name, owner=plugin_name, details=plugin)
481
+ self.agent.emit(
482
+ RuntimeStateChangedEvent,
483
+ reason="plugin_loaded",
484
+ namespace="plugins",
485
+ name=plugin_name,
486
+ owner=plugin_name,
487
+ details=plugin,
488
+ )
477
489
  return plugin
478
490
 
479
491
  def remove_plugin_members(self, plugin_or_name):
@@ -495,7 +507,14 @@ class PluginsManager:
495
507
  plugin.stop(timeout=timeout)
496
508
  removed = self.remove_plugin_members(plugin_name)
497
509
  self.plugins.pop(plugin_name, None)
498
- self.agent.emit(RuntimeStateChangedEvent, reason="plugin_unloaded", namespace="plugins", name=plugin_name, owner=plugin_name, details=removed)
510
+ self.agent.emit(
511
+ RuntimeStateChangedEvent,
512
+ reason="plugin_unloaded",
513
+ namespace="plugins",
514
+ name=plugin_name,
515
+ owner=plugin_name,
516
+ details=removed,
517
+ )
499
518
  return modict(plugin=plugin, removed=removed)
500
519
 
501
520
  def reload_plugin(self, plugin_or_name, timeout=None):
@@ -0,0 +1 @@
1
+ __version__ = "0.1.41"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-agent-framework
3
- Version: 0.1.39
3
+ Version: 0.1.41
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.39"
7
+ version = "0.1.41"
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.39"