codex-agent-framework 0.1.79__tar.gz → 0.1.81__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.79 → codex_agent_framework-0.1.81}/CHANGELOG.md +14 -0
- {codex_agent_framework-0.1.79/codex_agent_framework.egg-info → codex_agent_framework-0.1.81}/PKG-INFO +1 -1
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_commands.py +14 -2
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/client.py +12 -0
- codex_agent_framework-0.1.81/codex_agent/version.py +1 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81/codex_agent_framework.egg-info}/PKG-INFO +1 -1
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/pyproject.toml +1 -1
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_commands.py +4 -2
- codex_agent_framework-0.1.79/codex_agent/version.py +0 -1
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/LICENSE +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/MANIFEST.in +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/README.md +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/__main__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/agent.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/agent_runtime.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/ai.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/browser.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/bash/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/bash/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/browser/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/browser/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/content/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/content/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/content/system.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/content/vision.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/context/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/desktop/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/desktop/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/environment/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/environment/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/files/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/files/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/files/tools.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/image_generation/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/image_generation/image_generation_system_prompt.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/image_generation/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/interface/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/interface/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/memory/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/memory/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/planner/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/planner/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/python/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/python/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/realtime/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/realtime/audio.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/realtime/bridge.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/realtime/manager.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/realtime/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/realtime/session.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/scheduler/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/scheduler/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/subagents/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/subagents/profiles/explorer.json +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/subagents/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/tts/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/tts/requirements.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_plugins/web_search/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/cli/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/cli/headless.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/cli/main.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/cli/output.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/cli/root.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/cli/runner.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/command.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/config.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/context.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/desktop.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/event.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/get_text/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/get_text/default_gitignore +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/get_text/get_text.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/get_text/simpler_get_text.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/hooks.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/image.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/latex.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/mainloop.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/message.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/plugin.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/prompts/compaction_prompt.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/prompts/system_prompt.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/provider.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/runtime.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/scheduler.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/scripts/install-system-dependencies.sh +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/server/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/server/app.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/server/core.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/service.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/sessions.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/status.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/stream.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/stream_utils.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/token_counter.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tool.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tray.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tui/__init__.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tui/app.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tui/chat.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tui/lifecycle.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tui/log.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tui/perf.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tui/state.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tui/status_bar.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tui/stream_debug.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tui/style.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tui/transcript.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/tui/widgets.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/utils.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/worker.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent_framework.egg-info/SOURCES.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent_framework.egg-info/dependency_links.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent_framework.egg-info/entry_points.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent_framework.egg-info/requires.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent_framework.egg-info/top_level.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/dependencies.txt +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/setup.cfg +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_audio_hooks.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_context.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_desktop.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_environment.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_image_generation.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_observe.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_plugins.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_providers_config.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_realtime.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_response.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_runtime.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_sessions.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_subagents.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_tools.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_turns.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_ai.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_browser.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_builtin_config.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_chat.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_cli.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_cli_headless.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_cli_root.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_client.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_events.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_get_text_browser.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_hooks.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_image_message.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_local_desktop.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_memory.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_messages.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_planner.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_scheduler.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_server.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_service.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_token_counter.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_tui.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_utils.py +0 -0
- {codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_worker.py +0 -0
|
@@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
This project loosely follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and uses semantic versioning where practical.
|
|
6
6
|
|
|
7
|
+
## [0.1.81] - 2026-05-18
|
|
8
|
+
### Changed
|
|
9
|
+
- Document the remaining built-in slash commands and make `/help` show concise command summaries from their docstrings.
|
|
10
|
+
|
|
11
|
+
### Tests
|
|
12
|
+
- Validate the command help pass with targeted command tests plus the full offline CI suite (618 passed).
|
|
13
|
+
|
|
14
|
+
## [0.1.80] - 2026-05-18
|
|
15
|
+
### Changed
|
|
16
|
+
- Document `AgentClient` event-stream, SSE parsing, sequence resume, URL, and HTTP request helper contracts with concise docstrings.
|
|
17
|
+
|
|
18
|
+
### Tests
|
|
19
|
+
- Validate the client documentation pass with targeted client tests plus the full offline CI suite (618 passed).
|
|
20
|
+
|
|
7
21
|
## [0.1.60] - 2026-05-18
|
|
8
22
|
### Fixed
|
|
9
23
|
- Count compacted summary messages with observed compaction `usage.output_tokens` instead of `usage.input_tokens`, so future context estimates reflect the size of the produced summary rather than the size of the compacted input.
|
{codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/builtin_commands.py
RENAMED
|
@@ -27,16 +27,25 @@ def format_config_output(value, prefix=""):
|
|
|
27
27
|
return "\n".join(_format_lines(value, prefix=prefix)) if isinstance(value, dict) else repr(value)
|
|
28
28
|
|
|
29
29
|
|
|
30
|
+
def _command_summary(func):
|
|
31
|
+
doc = (getattr(func, "__doc__", None) or "").strip()
|
|
32
|
+
return doc.splitlines()[0].strip() if doc else ""
|
|
33
|
+
|
|
34
|
+
|
|
30
35
|
@command
|
|
31
36
|
def help():
|
|
32
37
|
"""List slash commands currently registered on the active agent."""
|
|
33
38
|
agent = get_agent()
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
lines = ["Available commands:"]
|
|
40
|
+
for name in sorted(agent.commands):
|
|
41
|
+
summary = _command_summary(agent.commands[name])
|
|
42
|
+
lines.append(f"/{name} - {summary}" if summary else f"/{name}")
|
|
43
|
+
return "\n".join(lines)
|
|
36
44
|
|
|
37
45
|
|
|
38
46
|
@command
|
|
39
47
|
def compact(max_compacted_turns=None):
|
|
48
|
+
"""Compact the current session history, optionally limiting compacted turns."""
|
|
40
49
|
agent = get_agent()
|
|
41
50
|
max_compacted_turns = None if max_compacted_turns in (None, "", "all") else int(max_compacted_turns)
|
|
42
51
|
message = agent.compact_session(
|
|
@@ -83,6 +92,7 @@ def _format_session_list(agent):
|
|
|
83
92
|
|
|
84
93
|
@command
|
|
85
94
|
def session(action=None, *parts):
|
|
95
|
+
"""List, create, rename, or switch persisted chat sessions."""
|
|
86
96
|
agent = get_agent()
|
|
87
97
|
if action is None:
|
|
88
98
|
return _format_session_list(agent)
|
|
@@ -120,6 +130,7 @@ def session(action=None, *parts):
|
|
|
120
130
|
|
|
121
131
|
@command
|
|
122
132
|
def config(path=None, value=None, *extra, **values):
|
|
133
|
+
"""Show, update, or save runtime configuration values."""
|
|
123
134
|
agent = get_agent()
|
|
124
135
|
manager = agent.config_manager
|
|
125
136
|
|
|
@@ -193,6 +204,7 @@ def verbosity(value=None):
|
|
|
193
204
|
|
|
194
205
|
@command
|
|
195
206
|
def voice(value=None):
|
|
207
|
+
"""Show or update TTS voice settings through the TTS plugin."""
|
|
196
208
|
agent = get_agent()
|
|
197
209
|
if "tts" not in agent.plugins:
|
|
198
210
|
agent.load_builtin_plugin("tts")
|
|
@@ -276,6 +276,7 @@ class AgentClient:
|
|
|
276
276
|
self._event_stop.wait(0.1)
|
|
277
277
|
|
|
278
278
|
def event_error_payload(self, exc):
|
|
279
|
+
"""Build a local client error event from an event-stream exception."""
|
|
279
280
|
payload = modict(type="client_event_error", error=str(exc), source="event_stream")
|
|
280
281
|
if isinstance(exc, requests.HTTPError) and exc.response is not None:
|
|
281
282
|
payload.status_code = exc.response.status_code
|
|
@@ -289,11 +290,13 @@ class AgentClient:
|
|
|
289
290
|
return payload
|
|
290
291
|
|
|
291
292
|
def is_event_idle_timeout(self, exc):
|
|
293
|
+
"""Return whether an event-stream exception is an idle read timeout."""
|
|
292
294
|
if isinstance(exc, (requests.exceptions.ReadTimeout, requests.exceptions.Timeout)):
|
|
293
295
|
return True
|
|
294
296
|
return "read timed out" in str(exc).lower()
|
|
295
297
|
|
|
296
298
|
def iter_sse(self, lines):
|
|
299
|
+
"""Yield parsed SSE payloads from decoded or byte line chunks."""
|
|
297
300
|
event = None
|
|
298
301
|
data_lines = []
|
|
299
302
|
event_id = None
|
|
@@ -339,6 +342,7 @@ class AgentClient:
|
|
|
339
342
|
yield payload
|
|
340
343
|
|
|
341
344
|
def remember_event_sequence(self, event):
|
|
345
|
+
"""Track the highest numeric event sequence seen for replay resume."""
|
|
342
346
|
sequence = event.get("sequence") if isinstance(event, dict) else None
|
|
343
347
|
if sequence is None:
|
|
344
348
|
return
|
|
@@ -348,17 +352,22 @@ class AgentClient:
|
|
|
348
352
|
return
|
|
349
353
|
if self._last_event_sequence is None or sequence > self._last_event_sequence:
|
|
350
354
|
self._last_event_sequence = sequence
|
|
355
|
+
|
|
351
356
|
def events_url(self):
|
|
357
|
+
"""Build the SSE endpoint URL with replay and compaction parameters."""
|
|
352
358
|
params = {"client_pid": int(self.client_pid)}
|
|
353
359
|
if self.compact_events:
|
|
354
360
|
params["compact"] = 1
|
|
355
361
|
if self._last_event_sequence is not None:
|
|
356
362
|
params["after_sequence"] = int(self._last_event_sequence)
|
|
357
363
|
return self.url(f"/events?{urlencode(params)}")
|
|
364
|
+
|
|
358
365
|
def url(self, path):
|
|
366
|
+
"""Return an absolute server URL for an API path."""
|
|
359
367
|
return self.base_url + path
|
|
360
368
|
|
|
361
369
|
def request(self, method, path, **kwargs):
|
|
370
|
+
"""Send an HTTP request and decode its JSON response as a modict."""
|
|
362
371
|
kwargs.setdefault("timeout", self.timeout)
|
|
363
372
|
response = requests.request(method, self.url(path), **kwargs)
|
|
364
373
|
response.raise_for_status()
|
|
@@ -367,12 +376,15 @@ class AgentClient:
|
|
|
367
376
|
return modict(response.json())
|
|
368
377
|
|
|
369
378
|
def get(self, path):
|
|
379
|
+
"""Send a GET request to a server API path."""
|
|
370
380
|
return self.request("GET", path)
|
|
371
381
|
|
|
372
382
|
def post(self, path, payload=None):
|
|
383
|
+
"""Send a JSON POST request to a server API path."""
|
|
373
384
|
return self.request("POST", path, json=payload or {})
|
|
374
385
|
|
|
375
386
|
def delete(self, path):
|
|
387
|
+
"""Send a DELETE request to a server API path."""
|
|
376
388
|
return self.request("DELETE", path)
|
|
377
389
|
|
|
378
390
|
def health(self):
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.1.81"
|
|
@@ -126,8 +126,10 @@ def test_agent_loads_builtin_commands():
|
|
|
126
126
|
agent = Agent(session="new")
|
|
127
127
|
|
|
128
128
|
assert {"help", "compact", "config", "model", "reasoning", "verbosity", "voice"}.issubset(agent.commands)
|
|
129
|
-
|
|
130
|
-
assert "/
|
|
129
|
+
output = agent_result(agent, "/help")
|
|
130
|
+
assert "/help - List slash commands" in output
|
|
131
|
+
assert "/compact - Compact the current session history" in output
|
|
132
|
+
assert "/voice - Show or update TTS voice settings" in output
|
|
131
133
|
|
|
132
134
|
|
|
133
135
|
def test_builtin_model_config_commands_update_and_persist(tmp_path, monkeypatch):
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.1.79"
|
|
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
|
|
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.79 → codex_agent_framework-0.1.81}/codex_agent/get_text/__init__.py
RENAMED
|
File without changes
|
{codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/codex_agent/get_text/default_gitignore
RENAMED
|
File without changes
|
{codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/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
|
|
File without changes
|
{codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/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.79 → codex_agent_framework-0.1.81}/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.79 → codex_agent_framework-0.1.81}/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.79 → codex_agent_framework-0.1.81}/tests/test_agent_audio_hooks.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_environment.py
RENAMED
|
File without changes
|
{codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/tests/test_agent_image_generation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_agent_framework-0.1.79 → codex_agent_framework-0.1.81}/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.79 → codex_agent_framework-0.1.81}/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
|