codex-agent-framework 0.1.63__tar.gz → 0.1.64__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 (158) hide show
  1. {codex_agent_framework-0.1.63/codex_agent_framework.egg-info → codex_agent_framework-0.1.64}/PKG-INFO +1 -1
  2. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/ai.py +2 -0
  3. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/client.py +2 -1
  4. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/desktop.py +5 -12
  5. codex_agent_framework-0.1.64/codex_agent/version.py +1 -0
  6. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64/codex_agent_framework.egg-info}/PKG-INFO +1 -1
  7. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/pyproject.toml +1 -1
  8. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_ai.py +19 -0
  9. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_client.py +14 -0
  10. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_local_desktop.py +18 -0
  11. codex_agent_framework-0.1.63/codex_agent/version.py +0 -1
  12. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/CHANGELOG.md +0 -0
  13. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/LICENSE +0 -0
  14. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/MANIFEST.in +0 -0
  15. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/README.md +0 -0
  16. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/__init__.py +0 -0
  17. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/__main__.py +0 -0
  18. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/agent.py +0 -0
  19. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/agent_runtime.py +0 -0
  20. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/browser.py +0 -0
  21. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_commands.py +0 -0
  22. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/__init__.py +0 -0
  23. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/bash/__init__.py +0 -0
  24. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/bash/requirements.txt +0 -0
  25. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/browser/__init__.py +0 -0
  26. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/browser/requirements.txt +0 -0
  27. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/content/__init__.py +0 -0
  28. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/content/requirements.txt +0 -0
  29. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/content/system.py +0 -0
  30. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/content/vision.py +0 -0
  31. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/context/__init__.py +0 -0
  32. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/desktop/__init__.py +0 -0
  33. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/desktop/requirements.txt +0 -0
  34. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/environment/__init__.py +0 -0
  35. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/environment/requirements.txt +0 -0
  36. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/files/__init__.py +0 -0
  37. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/files/requirements.txt +0 -0
  38. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/files/tools.py +0 -0
  39. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/image_generation/__init__.py +0 -0
  40. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/image_generation/image_generation_system_prompt.txt +0 -0
  41. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/image_generation/requirements.txt +0 -0
  42. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/interface/__init__.py +0 -0
  43. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/interface/requirements.txt +0 -0
  44. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/memory/__init__.py +0 -0
  45. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/memory/requirements.txt +0 -0
  46. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/planner/__init__.py +0 -0
  47. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/planner/requirements.txt +0 -0
  48. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/python/__init__.py +0 -0
  49. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/python/requirements.txt +0 -0
  50. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/realtime/__init__.py +0 -0
  51. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/realtime/audio.py +0 -0
  52. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/realtime/bridge.py +0 -0
  53. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/realtime/manager.py +0 -0
  54. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/realtime/requirements.txt +0 -0
  55. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/realtime/session.py +0 -0
  56. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/scheduler/__init__.py +0 -0
  57. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/scheduler/requirements.txt +0 -0
  58. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/subagents/__init__.py +0 -0
  59. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/subagents/profiles/explorer.json +0 -0
  60. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/subagents/requirements.txt +0 -0
  61. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/tts/__init__.py +0 -0
  62. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/tts/requirements.txt +0 -0
  63. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/builtin_plugins/web_search/__init__.py +0 -0
  64. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/cli/__init__.py +0 -0
  65. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/cli/headless.py +0 -0
  66. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/cli/main.py +0 -0
  67. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/cli/output.py +0 -0
  68. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/cli/root.py +0 -0
  69. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/cli/runner.py +0 -0
  70. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/command.py +0 -0
  71. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/config.py +0 -0
  72. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/context.py +0 -0
  73. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/event.py +0 -0
  74. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/get_text/__init__.py +0 -0
  75. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/get_text/default_gitignore +0 -0
  76. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/get_text/get_text.py +0 -0
  77. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/get_text/simpler_get_text.py +0 -0
  78. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/hooks.py +0 -0
  79. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/image.py +0 -0
  80. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/latex.py +0 -0
  81. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/mainloop.py +0 -0
  82. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/message.py +0 -0
  83. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/plugin.py +0 -0
  84. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/prompts/compaction_prompt.txt +0 -0
  85. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/prompts/system_prompt.txt +0 -0
  86. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/provider.py +0 -0
  87. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/runtime.py +0 -0
  88. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/scheduler.py +0 -0
  89. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/scripts/install-system-dependencies.sh +0 -0
  90. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/server/__init__.py +0 -0
  91. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/server/app.py +0 -0
  92. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/server/core.py +0 -0
  93. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/service.py +0 -0
  94. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/sessions.py +0 -0
  95. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/status.py +0 -0
  96. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/stream.py +0 -0
  97. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/stream_utils.py +0 -0
  98. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/token_counter.py +0 -0
  99. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tool.py +0 -0
  100. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tray.py +0 -0
  101. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tui/__init__.py +0 -0
  102. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tui/app.py +0 -0
  103. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tui/chat.py +0 -0
  104. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tui/lifecycle.py +0 -0
  105. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tui/log.py +0 -0
  106. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tui/perf.py +0 -0
  107. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tui/state.py +0 -0
  108. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tui/status_bar.py +0 -0
  109. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tui/stream_debug.py +0 -0
  110. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tui/style.py +0 -0
  111. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tui/transcript.py +0 -0
  112. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/tui/widgets.py +0 -0
  113. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/utils.py +0 -0
  114. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent/worker.py +0 -0
  115. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent_framework.egg-info/SOURCES.txt +0 -0
  116. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent_framework.egg-info/dependency_links.txt +0 -0
  117. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent_framework.egg-info/entry_points.txt +0 -0
  118. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent_framework.egg-info/requires.txt +0 -0
  119. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/codex_agent_framework.egg-info/top_level.txt +0 -0
  120. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/dependencies.txt +0 -0
  121. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/setup.cfg +0 -0
  122. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent.py +0 -0
  123. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_audio_hooks.py +0 -0
  124. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_commands.py +0 -0
  125. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_context.py +0 -0
  126. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_desktop.py +0 -0
  127. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_environment.py +0 -0
  128. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_image_generation.py +0 -0
  129. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_observe.py +0 -0
  130. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_plugins.py +0 -0
  131. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_providers_config.py +0 -0
  132. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_realtime.py +0 -0
  133. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_response.py +0 -0
  134. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_runtime.py +0 -0
  135. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_sessions.py +0 -0
  136. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_subagents.py +0 -0
  137. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_tools.py +0 -0
  138. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_agent_turns.py +0 -0
  139. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_browser.py +0 -0
  140. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_builtin_config.py +0 -0
  141. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_chat.py +0 -0
  142. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_cli.py +0 -0
  143. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_cli_headless.py +0 -0
  144. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_cli_root.py +0 -0
  145. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_events.py +0 -0
  146. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_get_text_browser.py +0 -0
  147. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_hooks.py +0 -0
  148. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_image_message.py +0 -0
  149. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_memory.py +0 -0
  150. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_messages.py +0 -0
  151. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_planner.py +0 -0
  152. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_scheduler.py +0 -0
  153. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_server.py +0 -0
  154. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_service.py +0 -0
  155. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_token_counter.py +0 -0
  156. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_tui.py +0 -0
  157. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_utils.py +0 -0
  158. {codex_agent_framework-0.1.63 → codex_agent_framework-0.1.64}/tests/test_worker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-agent-framework
3
- Version: 0.1.63
3
+ Version: 0.1.64
4
4
  Summary: A lightweight event-driven Codex agent runtime.
5
5
  Author: Baptiste
6
6
  License-Expression: MIT
@@ -603,11 +603,13 @@ class AIClient:
603
603
  return embeddings
604
604
 
605
605
  def message_embedding_content(self, msg):
606
+ """Return stripped text content suitable for embedding a message."""
606
607
  if hasattr(msg, 'content') and isinstance(msg.content, str):
607
608
  return msg.content.strip()
608
609
  raise ValueError("Message must have text content")
609
610
 
610
611
  def zero_embedding(self, dimensions=128):
612
+ """Return a zero vector with the requested embedding dimensionality."""
611
613
  return [0.0] * int(dimensions)
612
614
 
613
615
  def similarity(self, emb1, emb2):
@@ -379,7 +379,8 @@ class AgentClient:
379
379
  return self.get("/health")
380
380
 
381
381
  def context_status(self):
382
- return self.get("/status")
382
+ """Backward-compatible alias for the canonical server status endpoint."""
383
+ return self.get_status()
383
384
 
384
385
  def get_status(self):
385
386
  return self.get("/status")
@@ -175,7 +175,7 @@ class DesktopController:
175
175
  continue
176
176
  key, value = line.split("=", 1)
177
177
  key = key.lower()
178
- location[key] = _to_int(value) if key in {"x", "y", "screen", "window"} else value
178
+ location[key] = _safe_int(value) if key in {"x", "y", "screen", "window"} else value
179
179
  return location
180
180
 
181
181
  def move_mouse(self, x: int, y: int) -> None:
@@ -297,10 +297,10 @@ class DesktopController:
297
297
  id=parts[0],
298
298
  desktop=parts[1],
299
299
  pid=parts[2],
300
- x=_to_int(parts[3]),
301
- y=_to_int(parts[4]),
302
- width=_to_int(parts[5]),
303
- height=_to_int(parts[6]),
300
+ x=_safe_int(parts[3]),
301
+ y=_safe_int(parts[4]),
302
+ width=_safe_int(parts[5]),
303
+ height=_safe_int(parts[6]),
304
304
  wm_class=parts[7],
305
305
  title=title,
306
306
  backend="wmctrl",
@@ -416,13 +416,6 @@ def get_desktop_controller() -> DesktopController:
416
416
  return _desktop_controller
417
417
 
418
418
 
419
- def _to_int(value: str) -> int | None:
420
- try:
421
- return int(value)
422
- except (TypeError, ValueError):
423
- return None
424
-
425
-
426
419
  def _safe_int(value: Any) -> int | None:
427
420
  try:
428
421
  return None if value is None else int(value)
@@ -0,0 +1 @@
1
+ __version__ = "0.1.64"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-agent-framework
3
- Version: 0.1.63
3
+ Version: 0.1.64
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.63"
7
+ version = "0.1.64"
8
8
  description = "A lightweight event-driven Codex agent runtime."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -181,6 +181,25 @@ def test_embed_messages_skips_empty_content_without_api_error():
181
181
  assert embeddings == [empty.embedding, blank.embedding, filled.embedding]
182
182
 
183
183
 
184
+ def test_message_embedding_content_strips_text_messages():
185
+ ai = AIClient(agent=None)
186
+
187
+ assert ai.message_embedding_content(DeveloperMessage(content=" hello ")) == "hello"
188
+
189
+
190
+ def test_message_embedding_content_rejects_non_text_content():
191
+ ai = AIClient(agent=None)
192
+
193
+ with pytest.raises(ValueError, match="text content"):
194
+ ai.message_embedding_content(SystemMessage(content=[{"type": "input_text", "text": "hello"}]))
195
+
196
+
197
+ def test_zero_embedding_returns_requested_dimension():
198
+ ai = AIClient(agent=None)
199
+
200
+ assert ai.zero_embedding(dimensions=3) == [0.0, 0.0, 0.0]
201
+
202
+
184
203
  def test_embed_message_assigns_zero_embedding_for_empty_content():
185
204
  ai = AIClient(agent=None)
186
205
  ai._codex_client = FakeCodexClient()
@@ -151,6 +151,20 @@ def test_agent_client_http_error_payload_includes_status_and_detail():
151
151
  assert payload.error == "an event client is already connected"
152
152
 
153
153
 
154
+ def test_agent_client_context_status_delegates_to_get_status(monkeypatch):
155
+ client = AgentClient(base_url="http://agent.local")
156
+ calls = []
157
+
158
+ def fake_get(path):
159
+ calls.append(path)
160
+ return {"ok": True}
161
+
162
+ monkeypatch.setattr(client, "get", fake_get)
163
+
164
+ assert client.context_status() == {"ok": True}
165
+ assert calls == ["/status"]
166
+
167
+
154
168
  def test_agent_client_submit_prompt_posts_prompt(monkeypatch):
155
169
  client = AgentClient(base_url="http://agent.local")
156
170
  calls = []
@@ -34,6 +34,24 @@ def test_desktop_controller_wmctrl_parser(monkeypatch):
34
34
  ]
35
35
 
36
36
 
37
+ def test_desktop_controller_wmctrl_parser_keeps_invalid_geometry_as_none(monkeypatch):
38
+ controller = DesktopController()
39
+
40
+ monkeypatch.setattr(controller, "_list_windows_pywinctl", lambda: [])
41
+ monkeypatch.setattr("codex_agent.desktop.shutil.which", lambda name: name == "wmctrl")
42
+
43
+ class Result:
44
+ stdout = "0x01200007 0 1234 ? nope 800 bad app.Class host Example window\n"
45
+
46
+ monkeypatch.setattr(controller, "_run", lambda command: Result())
47
+
48
+ [window] = controller.list_windows()
49
+ assert window.x is None
50
+ assert window.y is None
51
+ assert window.width == 800
52
+ assert window.height is None
53
+
54
+
37
55
  def test_desktop_controller_capture_screen_uses_mss_only(monkeypatch, tmp_path):
38
56
  controller = DesktopController()
39
57
  output = tmp_path / "screen.png"
@@ -1 +0,0 @@
1
- __version__ = "0.1.63"