codex-agent-framework 0.1.72__tar.gz → 0.1.74__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.
- {codex_agent_framework-0.1.72/codex_agent_framework.egg-info → codex_agent_framework-0.1.74}/PKG-INFO +1 -1
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/cli/main.py +13 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/image.py +14 -0
- codex_agent_framework-0.1.74/codex_agent/version.py +1 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74/codex_agent_framework.egg-info}/PKG-INFO +1 -1
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/pyproject.toml +1 -1
- codex_agent_framework-0.1.72/codex_agent/version.py +0 -1
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/CHANGELOG.md +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/LICENSE +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/MANIFEST.in +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/README.md +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/__main__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/agent.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/agent_runtime.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/ai.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/browser.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_commands.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/bash/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/bash/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/browser/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/browser/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/content/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/content/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/content/system.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/content/vision.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/context/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/desktop/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/desktop/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/environment/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/environment/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/files/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/files/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/files/tools.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/image_generation/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/image_generation/image_generation_system_prompt.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/image_generation/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/interface/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/interface/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/memory/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/memory/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/planner/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/planner/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/python/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/python/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/realtime/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/realtime/audio.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/realtime/bridge.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/realtime/manager.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/realtime/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/realtime/session.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/scheduler/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/scheduler/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/subagents/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/subagents/profiles/explorer.json +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/subagents/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/tts/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/tts/requirements.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_plugins/web_search/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/cli/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/cli/headless.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/cli/output.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/cli/root.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/cli/runner.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/client.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/command.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/config.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/context.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/desktop.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/event.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/get_text/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/get_text/default_gitignore +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/get_text/get_text.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/get_text/simpler_get_text.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/hooks.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/latex.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/mainloop.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/message.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/plugin.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/prompts/compaction_prompt.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/prompts/system_prompt.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/provider.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/runtime.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/scheduler.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/scripts/install-system-dependencies.sh +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/server/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/server/app.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/server/core.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/service.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/sessions.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/status.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/stream.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/stream_utils.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/token_counter.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tool.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tray.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/__init__.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/app.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/chat.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/lifecycle.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/log.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/perf.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/state.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/status_bar.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/stream_debug.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/style.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/transcript.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/widgets.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/utils.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/worker.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent_framework.egg-info/SOURCES.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent_framework.egg-info/dependency_links.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent_framework.egg-info/entry_points.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent_framework.egg-info/requires.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent_framework.egg-info/top_level.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/dependencies.txt +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/setup.cfg +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_audio_hooks.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_commands.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_context.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_desktop.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_environment.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_image_generation.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_observe.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_plugins.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_providers_config.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_realtime.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_response.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_runtime.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_sessions.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_subagents.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_tools.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_turns.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_ai.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_browser.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_builtin_config.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_chat.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_cli.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_cli_headless.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_cli_root.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_client.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_events.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_get_text_browser.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_hooks.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_image_message.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_local_desktop.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_memory.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_messages.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_planner.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_scheduler.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_server.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_service.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_token_counter.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_tui.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_utils.py +0 -0
- {codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_worker.py +0 -0
|
@@ -13,6 +13,7 @@ PACKAGE_DIR = Path(__file__).resolve().parents[1]
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
def default_agent_kwargs(host=None, port=None):
|
|
16
|
+
"""Build default Agent constructor kwargs used by CLI entrypoints."""
|
|
16
17
|
kwargs = dict(
|
|
17
18
|
system=str(PACKAGE_DIR / 'prompts' / 'system_prompt.txt'),
|
|
18
19
|
username="Baptiste",
|
|
@@ -24,15 +25,18 @@ def default_agent_kwargs(host=None, port=None):
|
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
def default_agent():
|
|
28
|
+
"""Create the default CLI Agent instance."""
|
|
27
29
|
return Agent(**default_agent_kwargs())
|
|
28
30
|
|
|
29
31
|
|
|
30
32
|
def configure_server_url(agent, host, port):
|
|
33
|
+
"""Point an Agent at the CLI-managed local server URL."""
|
|
31
34
|
agent.config_manager.update(server_url=f"http://{host}:{port}", save=False)
|
|
32
35
|
return agent
|
|
33
36
|
|
|
34
37
|
|
|
35
38
|
def run_server(host="127.0.0.1", port=8765):
|
|
39
|
+
"""Run the local HTTP server in the foreground."""
|
|
36
40
|
import uvicorn
|
|
37
41
|
|
|
38
42
|
app = create_app(process_agent=True, **default_agent_kwargs(host, port))
|
|
@@ -42,10 +46,12 @@ def run_server(host="127.0.0.1", port=8765):
|
|
|
42
46
|
|
|
43
47
|
|
|
44
48
|
def run_chat(base_url="http://127.0.0.1:8765"):
|
|
49
|
+
"""Run the Textual chat interface against a server URL."""
|
|
45
50
|
Chat(base_url=base_url).run()
|
|
46
51
|
|
|
47
52
|
|
|
48
53
|
def server_is_available(base_url, timeout=0.5):
|
|
54
|
+
"""Return whether the local agent server responds to health checks."""
|
|
49
55
|
try:
|
|
50
56
|
from codex_agent.client import AgentClient
|
|
51
57
|
AgentClient(base_url, timeout=timeout).health()
|
|
@@ -55,10 +61,12 @@ def server_is_available(base_url, timeout=0.5):
|
|
|
55
61
|
|
|
56
62
|
|
|
57
63
|
def run_tray_mode(base_url="http://127.0.0.1:8765"):
|
|
64
|
+
"""Run the desktop tray integration against a server URL."""
|
|
58
65
|
run_tray(base_url=base_url)
|
|
59
66
|
|
|
60
67
|
|
|
61
68
|
def run_system_deps_installer(extra_args=None):
|
|
69
|
+
"""Run the packaged system dependency installer script."""
|
|
62
70
|
script = PACKAGE_DIR / "scripts" / "install-system-dependencies.sh"
|
|
63
71
|
if not script.is_file():
|
|
64
72
|
raise RuntimeError(f"System dependency installer not found: {script}")
|
|
@@ -74,6 +82,7 @@ def run_bootstrap(
|
|
|
74
82
|
install_service=True,
|
|
75
83
|
start_service=True,
|
|
76
84
|
):
|
|
85
|
+
"""Install optional system dependencies and user service components."""
|
|
77
86
|
if install_system_deps:
|
|
78
87
|
code = run_system_deps_installer(system_deps_args or [])
|
|
79
88
|
if code:
|
|
@@ -86,6 +95,7 @@ def run_bootstrap(
|
|
|
86
95
|
|
|
87
96
|
|
|
88
97
|
def run_local(host="127.0.0.1", port=8765):
|
|
98
|
+
"""Open chat on an existing server or a temporary local server."""
|
|
89
99
|
import threading
|
|
90
100
|
import time
|
|
91
101
|
|
|
@@ -112,6 +122,7 @@ def run_local(host="127.0.0.1", port=8765):
|
|
|
112
122
|
|
|
113
123
|
|
|
114
124
|
def build_parser():
|
|
125
|
+
"""Build the legacy single-command CLI argument parser."""
|
|
115
126
|
import argparse
|
|
116
127
|
|
|
117
128
|
parser = argparse.ArgumentParser(prog="codex-agent")
|
|
@@ -138,6 +149,7 @@ def build_parser():
|
|
|
138
149
|
|
|
139
150
|
|
|
140
151
|
def run_agent_cli(argv=None):
|
|
152
|
+
"""Dispatch legacy CLI modes and headless API subcommands."""
|
|
141
153
|
parser = build_parser()
|
|
142
154
|
args, extra_args = parser.parse_known_args(argv)
|
|
143
155
|
headless_modes = {"run", "prompt", "status", "tools", "sessions", "config", "interrupt"}
|
|
@@ -186,6 +198,7 @@ def run_agent_cli(argv=None):
|
|
|
186
198
|
|
|
187
199
|
|
|
188
200
|
def main(argv=None):
|
|
201
|
+
"""Run the public codex-agent command-line entrypoint."""
|
|
189
202
|
load_runtime_env()
|
|
190
203
|
from .root import dispatch
|
|
191
204
|
dispatch(argv, fallback=run_agent_cli)
|
|
@@ -18,6 +18,7 @@ IMAGE_DIR = 'images'
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def ext_to_mime(ext):
|
|
21
|
+
"""Return the MIME type matching a common image extension."""
|
|
21
22
|
ext = ext.lower().lstrip('.')
|
|
22
23
|
if ext in ('jpg', 'jpeg'):
|
|
23
24
|
return 'image/jpeg'
|
|
@@ -36,6 +37,7 @@ def _data_url(data, mime_type):
|
|
|
36
37
|
|
|
37
38
|
|
|
38
39
|
def data_url_from_file(path):
|
|
40
|
+
"""Read a local image file and encode it as a data URL."""
|
|
39
41
|
ext = os.path.splitext(path)[1]
|
|
40
42
|
mime_type = ext_to_mime(ext) or 'image/jpeg'
|
|
41
43
|
with open(path, 'rb') as f:
|
|
@@ -64,6 +66,7 @@ def image_request_headers(url):
|
|
|
64
66
|
|
|
65
67
|
|
|
66
68
|
def image_mime_from_source(source, content_type=None):
|
|
69
|
+
"""Infer an image MIME type from headers, paths, or bytes-like sources."""
|
|
67
70
|
content_type = (content_type or '').split(';')[0].strip()
|
|
68
71
|
if content_type.startswith('image/'):
|
|
69
72
|
return content_type
|
|
@@ -74,6 +77,7 @@ def image_mime_from_source(source, content_type=None):
|
|
|
74
77
|
|
|
75
78
|
|
|
76
79
|
def fetch_image_bytes(url, timeout=15):
|
|
80
|
+
"""Download image bytes and validate or infer their MIME type."""
|
|
77
81
|
response = requests.get(url, timeout=timeout, headers=image_request_headers(url))
|
|
78
82
|
response.raise_for_status()
|
|
79
83
|
|
|
@@ -94,11 +98,13 @@ def fetch_image_bytes(url, timeout=15):
|
|
|
94
98
|
|
|
95
99
|
|
|
96
100
|
def data_url_from_url(url):
|
|
101
|
+
"""Fetch a remote image URL and encode it as a data URL."""
|
|
97
102
|
data, mime_type = fetch_image_bytes(url)
|
|
98
103
|
return _data_url(data, mime_type)
|
|
99
104
|
|
|
100
105
|
|
|
101
106
|
def persist_image_url(url):
|
|
107
|
+
"""Download a remote image and persist it in the runtime image cache."""
|
|
102
108
|
data, mime_type = fetch_image_bytes(url)
|
|
103
109
|
ext = os.path.splitext(url.split('?', 1)[0])[1] or None
|
|
104
110
|
mime_ext = {
|
|
@@ -113,6 +119,7 @@ def persist_image_url(url):
|
|
|
113
119
|
|
|
114
120
|
|
|
115
121
|
def get_data_url(source):
|
|
122
|
+
"""Return a data URL for a supported local path or remote URL source."""
|
|
116
123
|
if isinstance(source, str) and os.path.isfile(source):
|
|
117
124
|
return data_url_from_file(source)
|
|
118
125
|
if isinstance(source, str) and source.startswith(('http://', 'https://')):
|
|
@@ -121,6 +128,7 @@ def get_data_url(source):
|
|
|
121
128
|
|
|
122
129
|
|
|
123
130
|
def persist_image_bytes(data, name=None):
|
|
131
|
+
"""Persist raw image bytes under the runtime image cache directory."""
|
|
124
132
|
_, ext = os.path.splitext(name) if isinstance(name, str) else ('', '')
|
|
125
133
|
ext = ext or guess_extension_from_bytes(data) or '.png'
|
|
126
134
|
|
|
@@ -134,10 +142,12 @@ def persist_image_bytes(data, name=None):
|
|
|
134
142
|
|
|
135
143
|
|
|
136
144
|
def persist_bytesio(source):
|
|
145
|
+
"""Persist a BytesIO image source, preserving its filename extension."""
|
|
137
146
|
return persist_image_bytes(source.getvalue(), name=getattr(source, 'name', None))
|
|
138
147
|
|
|
139
148
|
|
|
140
149
|
def image_name_from_source(source):
|
|
150
|
+
"""Return a human-friendly image name for paths, URLs, or byte streams."""
|
|
141
151
|
if isinstance(source, BytesIO) and getattr(source, 'name', None):
|
|
142
152
|
return os.path.basename(source.name)
|
|
143
153
|
if isinstance(source, str) and os.path.isfile(source):
|
|
@@ -386,6 +396,7 @@ class ImageMessage(Message):
|
|
|
386
396
|
return "\n".join(parts)
|
|
387
397
|
|
|
388
398
|
def as_bytesio(self):
|
|
399
|
+
"""Return the in-memory image payload as bytes, when available."""
|
|
389
400
|
data_url = self.get_base64()
|
|
390
401
|
if not data_url:
|
|
391
402
|
return None
|
|
@@ -396,6 +407,7 @@ class ImageMessage(Message):
|
|
|
396
407
|
return BytesIO(base64.b64decode(match.group(1)))
|
|
397
408
|
|
|
398
409
|
def image_size(self):
|
|
410
|
+
"""Return image dimensions, or None when the payload is unavailable."""
|
|
399
411
|
img_bytes = self.as_bytesio()
|
|
400
412
|
if not img_bytes:
|
|
401
413
|
return None
|
|
@@ -406,6 +418,7 @@ class ImageMessage(Message):
|
|
|
406
418
|
return None
|
|
407
419
|
|
|
408
420
|
def api_token_fingerprint(self):
|
|
421
|
+
"""Return a stable fingerprint for cached image token estimates."""
|
|
409
422
|
import hashlib
|
|
410
423
|
import json
|
|
411
424
|
|
|
@@ -421,6 +434,7 @@ class ImageMessage(Message):
|
|
|
421
434
|
return hashlib.sha256(text.encode("utf-8")).hexdigest()
|
|
422
435
|
|
|
423
436
|
def compute_api_token_count(self, model=None):
|
|
437
|
+
"""Estimate text-structure and visual-token cost for the image message."""
|
|
424
438
|
size = self.image_size()
|
|
425
439
|
text = (
|
|
426
440
|
"The following image has been made available in context for visual analysis:\n"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.1.74"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.1.72"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/builtin_commands.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/get_text/__init__.py
RENAMED
|
File without changes
|
{codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/get_text/default_gitignore
RENAMED
|
File without changes
|
{codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/get_text/get_text.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/prompts/system_prompt.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/server/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/codex_agent/tui/stream_debug.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_audio_hooks.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_environment.py
RENAMED
|
File without changes
|
{codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_image_generation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_agent_providers_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_agent_framework-0.1.72 → codex_agent_framework-0.1.74}/tests/test_get_text_browser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|