codex-agent-framework 0.1.38__tar.gz → 0.1.40__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.38 → codex_agent_framework-0.1.40}/CHANGELOG.md +16 -0
  2. {codex_agent_framework-0.1.38/codex_agent_framework.egg-info → codex_agent_framework-0.1.40}/PKG-INFO +1 -1
  3. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/plugin.py +24 -5
  4. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/tool.py +49 -14
  5. codex_agent_framework-0.1.40/codex_agent/version.py +1 -0
  6. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40/codex_agent_framework.egg-info}/PKG-INFO +1 -1
  7. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/pyproject.toml +1 -1
  8. codex_agent_framework-0.1.38/codex_agent/version.py +0 -1
  9. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/LICENSE +0 -0
  10. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/MANIFEST.in +0 -0
  11. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/README.md +0 -0
  12. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/__init__.py +0 -0
  13. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/__main__.py +0 -0
  14. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/agent.py +0 -0
  15. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/agent_runtime.py +0 -0
  16. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/ai.py +0 -0
  17. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/browser.py +0 -0
  18. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_commands.py +0 -0
  19. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/__init__.py +0 -0
  20. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/bash/__init__.py +0 -0
  21. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/bash/requirements.txt +0 -0
  22. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/browser/__init__.py +0 -0
  23. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/browser/requirements.txt +0 -0
  24. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/content/__init__.py +0 -0
  25. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/content/requirements.txt +0 -0
  26. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/content/system.py +0 -0
  27. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/content/vision.py +0 -0
  28. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/context/__init__.py +0 -0
  29. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/desktop/__init__.py +0 -0
  30. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/desktop/requirements.txt +0 -0
  31. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/environment/__init__.py +0 -0
  32. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/environment/requirements.txt +0 -0
  33. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/files/__init__.py +0 -0
  34. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/files/requirements.txt +0 -0
  35. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/files/tools.py +0 -0
  36. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/image_generation/__init__.py +0 -0
  37. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/image_generation/image_generation_system_prompt.txt +0 -0
  38. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/image_generation/requirements.txt +0 -0
  39. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/interface/__init__.py +0 -0
  40. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/interface/requirements.txt +0 -0
  41. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/memory/__init__.py +0 -0
  42. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/memory/requirements.txt +0 -0
  43. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/planner/__init__.py +0 -0
  44. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/planner/requirements.txt +0 -0
  45. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/python/__init__.py +0 -0
  46. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/python/requirements.txt +0 -0
  47. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/realtime/__init__.py +0 -0
  48. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/realtime/audio.py +0 -0
  49. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/realtime/bridge.py +0 -0
  50. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/realtime/manager.py +0 -0
  51. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/realtime/requirements.txt +0 -0
  52. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/realtime/session.py +0 -0
  53. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/scheduler/__init__.py +0 -0
  54. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/scheduler/requirements.txt +0 -0
  55. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/subagents/__init__.py +0 -0
  56. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/subagents/profiles/explorer.json +0 -0
  57. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/subagents/requirements.txt +0 -0
  58. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/tts/__init__.py +0 -0
  59. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/builtin_plugins/tts/requirements.txt +0 -0
  60. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/cli/__init__.py +0 -0
  61. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/cli/headless.py +0 -0
  62. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/cli/main.py +0 -0
  63. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/cli/output.py +0 -0
  64. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/cli/root.py +0 -0
  65. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/cli/runner.py +0 -0
  66. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/client.py +0 -0
  67. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/command.py +0 -0
  68. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/config.py +0 -0
  69. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/context.py +0 -0
  70. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/desktop.py +0 -0
  71. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/event.py +0 -0
  72. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/get_text/__init__.py +0 -0
  73. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/get_text/default_gitignore +0 -0
  74. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/get_text/get_text.py +0 -0
  75. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/get_text/simpler_get_text.py +0 -0
  76. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/hooks.py +0 -0
  77. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/image.py +0 -0
  78. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/latex.py +0 -0
  79. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/mainloop.py +0 -0
  80. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/message.py +0 -0
  81. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/prompts/system_prompt.txt +0 -0
  82. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/provider.py +0 -0
  83. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/runtime.py +0 -0
  84. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/scheduler.py +0 -0
  85. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/scripts/install-system-dependencies.sh +0 -0
  86. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/server/__init__.py +0 -0
  87. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/server/app.py +0 -0
  88. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/server/core.py +0 -0
  89. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/service.py +0 -0
  90. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/sessions.py +0 -0
  91. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/status.py +0 -0
  92. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/stream.py +0 -0
  93. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/stream_utils.py +0 -0
  94. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/tray.py +0 -0
  95. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/tui/__init__.py +0 -0
  96. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/tui/app.py +0 -0
  97. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/tui/chat.py +0 -0
  98. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/tui/lifecycle.py +0 -0
  99. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/tui/log.py +0 -0
  100. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/tui/state.py +0 -0
  101. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/tui/status_bar.py +0 -0
  102. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/tui/style.py +0 -0
  103. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/tui/transcript.py +0 -0
  104. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/utils.py +0 -0
  105. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent/worker.py +0 -0
  106. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent_framework.egg-info/SOURCES.txt +0 -0
  107. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent_framework.egg-info/dependency_links.txt +0 -0
  108. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent_framework.egg-info/entry_points.txt +0 -0
  109. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent_framework.egg-info/requires.txt +0 -0
  110. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/codex_agent_framework.egg-info/top_level.txt +0 -0
  111. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/dependencies.txt +0 -0
  112. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/setup.cfg +0 -0
  113. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent.py +0 -0
  114. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_audio_hooks.py +0 -0
  115. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_commands.py +0 -0
  116. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_context.py +0 -0
  117. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_desktop.py +0 -0
  118. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_environment.py +0 -0
  119. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_image_generation.py +0 -0
  120. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_observe.py +0 -0
  121. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_plugins.py +0 -0
  122. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_providers_config.py +0 -0
  123. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_realtime.py +0 -0
  124. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_response.py +0 -0
  125. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_runtime.py +0 -0
  126. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_sessions.py +0 -0
  127. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_subagents.py +0 -0
  128. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_tools.py +0 -0
  129. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_agent_turns.py +0 -0
  130. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_ai.py +0 -0
  131. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_browser.py +0 -0
  132. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_builtin_config.py +0 -0
  133. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_chat.py +0 -0
  134. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_cli.py +0 -0
  135. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_cli_headless.py +0 -0
  136. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_cli_root.py +0 -0
  137. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_client.py +0 -0
  138. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_events.py +0 -0
  139. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_get_text_browser.py +0 -0
  140. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_hooks.py +0 -0
  141. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_image_message.py +0 -0
  142. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_local_desktop.py +0 -0
  143. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_memory.py +0 -0
  144. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_messages.py +0 -0
  145. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_planner.py +0 -0
  146. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_scheduler.py +0 -0
  147. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_server.py +0 -0
  148. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_service.py +0 -0
  149. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_tui.py +0 -0
  150. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_utils.py +0 -0
  151. {codex_agent_framework-0.1.38 → codex_agent_framework-0.1.40}/tests/test_worker.py +0 -0
@@ -4,6 +4,22 @@ 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.40] - 2026-05-16
8
+ ### Changed
9
+ - Share decorated-plugin option lookup across event handlers, hooks, and stream processors.
10
+ - Reflow plugin load/unload runtime-state events for readability.
11
+
12
+ ### Tests
13
+ - Validate with plugin coverage and the 553-test offline CI suite.
14
+
15
+ ## [0.1.39] - 2026-05-16
16
+ ### Changed
17
+ - Reflow `Tool` and `ToolsManager` helper signatures and runtime-state events for readability.
18
+ - Shorten parsed-tool developer-message documentation while preserving the generated schema output.
19
+
20
+ ### Tests
21
+ - Validate with targeted tool, plugin, Agent, hook, and event coverage plus the 553-test offline CI suite.
22
+
7
23
  ## [0.1.38] - 2026-05-16
8
24
  ### Changed
9
25
  - Clarify development checks around the explicit offline/headless CI subset, broader local pytest sweeps, and live/local-heavy test placement.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-agent-framework
3
- Version: 0.1.38
3
+ Version: 0.1.40
4
4
  Summary: A lightweight event-driven Codex agent runtime.
5
5
  Author: Baptiste
6
6
  License-Expression: MIT
@@ -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):
@@ -117,14 +117,14 @@ class Tool(modict):
117
117
  tool.type = 'tool'
118
118
  return tool
119
119
 
120
- def __call__(self,*args,**kwargs):
120
+ def __call__(self, *args, **kwargs):
121
121
  obj = self.get_attr("obj", None)
122
122
  if obj is None:
123
123
  raise TypeError(f"Tool {self.name!r} has no bound callable")
124
124
  agent = self.get_attr("agent", None)
125
125
  token = set_current_agent(agent) if agent is not None and _current_agent.get() is None else None
126
126
  try:
127
- return obj(*args,**kwargs)
127
+ return obj(*args, **kwargs)
128
128
  finally:
129
129
  if token is not None:
130
130
  reset_current_agent(token)
@@ -253,13 +253,9 @@ class Tool(modict):
253
253
  return tool
254
254
 
255
255
  def to_developer_message(self):
256
- """Converts the Tool object into a developer message for parsed tool guidance.
257
- For tools that don't use the usual API function call pipeline, this can be used to provide the AI with the tool's schema in a more flexible way.
258
-
259
- Returns:
260
- Message: Developer message containing the tool's schema.
261
- """
262
- return DeveloperMessage(content=f"Tool: {self.name}\nSchema:\n{json.dumps(self.to_response_tool(), indent=2, ensure_ascii=False)}")
256
+ """Convert this tool into a developer message for parsed-tool guidance."""
257
+ schema = json.dumps(self.to_response_tool(), indent=2, ensure_ascii=False)
258
+ return DeveloperMessage(content=f"Tool: {self.name}\nSchema:\n{schema}")
263
259
 
264
260
 
265
261
  class ToolsManager:
@@ -292,7 +288,18 @@ class ToolsManager:
292
288
  options.name = name
293
289
  self.add(obj, canonical_name=canonical_name, owner=owner, **options)
294
290
 
295
- def add(self, func=None, name=None, description=None, parameters=None, required=None, tool_type=None, format=None, canonical_name=None, owner=None):
291
+ def add(
292
+ self,
293
+ func=None,
294
+ name=None,
295
+ description=None,
296
+ parameters=None,
297
+ required=None,
298
+ tool_type=None,
299
+ format=None,
300
+ canonical_name=None,
301
+ owner=None,
302
+ ):
296
303
  if func is None:
297
304
  def decorator(f):
298
305
  return self.add(
@@ -321,7 +328,15 @@ class ToolsManager:
321
328
  owner=owner,
322
329
  ).wait().result
323
330
 
324
- tool = Tool.from_callable(func, name, description, parameters, required, tool_type=tool_type, format=format)
331
+ tool = Tool.from_callable(
332
+ func,
333
+ name,
334
+ description,
335
+ parameters,
336
+ required,
337
+ tool_type=tool_type,
338
+ format=format,
339
+ )
325
340
  tool.set_attr("agent", self.agent)
326
341
  if canonical_name:
327
342
  tool.set_attr("canonical_name", canonical_name)
@@ -330,7 +345,14 @@ class ToolsManager:
330
345
  self.owners[tool.name] = owner
331
346
  else:
332
347
  self.owners.pop(tool.name, None)
333
- self.agent.emit(RuntimeStateChangedEvent, reason="tool_added", namespace="tools", name=tool.name, owner=owner or "", details=tool)
348
+ self.agent.emit(
349
+ RuntimeStateChangedEvent,
350
+ reason="tool_added",
351
+ namespace="tools",
352
+ name=tool.name,
353
+ owner=owner or "",
354
+ details=tool,
355
+ )
334
356
  return func
335
357
 
336
358
  def exclude_tool_specs(self):
@@ -380,7 +402,14 @@ class ToolsManager:
380
402
  self.owners[tool.type] = owner
381
403
  else:
382
404
  self.owners.pop(tool.type, None)
383
- self.agent.emit(RuntimeStateChangedEvent, reason="tool_added", namespace="tools", name=tool.type, owner=owner or "", details=tool)
405
+ self.agent.emit(
406
+ RuntimeStateChangedEvent,
407
+ reason="tool_added",
408
+ namespace="tools",
409
+ name=tool.type,
410
+ owner=owner or "",
411
+ details=tool,
412
+ )
384
413
  return tool
385
414
 
386
415
  def remove_by_owner(self, owner):
@@ -390,7 +419,13 @@ class ToolsManager:
390
419
  removed[name] = self.tools.pop(name, None)
391
420
  self.owners.pop(name, None)
392
421
  if removed:
393
- self.agent.emit(RuntimeStateChangedEvent, reason="tools_removed", namespace="tools", owner=owner or "", details=removed)
422
+ self.agent.emit(
423
+ RuntimeStateChangedEvent,
424
+ reason="tools_removed",
425
+ namespace="tools",
426
+ owner=owner or "",
427
+ details=removed,
428
+ )
394
429
  return removed
395
430
 
396
431
  def get_server_tools(self):
@@ -0,0 +1 @@
1
+ __version__ = "0.1.40"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-agent-framework
3
- Version: 0.1.38
3
+ Version: 0.1.40
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.38"
7
+ version = "0.1.40"
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.38"