codex-autorunner 0.1.1__tar.gz → 1.0.0__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_autorunner-0.1.1/src/codex_autorunner.egg-info → codex_autorunner-1.0.0}/PKG-INFO +20 -21
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/README.md +17 -20
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/pyproject.toml +8 -1
- codex_autorunner-1.0.0/src/codex_autorunner/__main__.py +4 -0
- codex_autorunner-1.0.0/src/codex_autorunner/agents/__init__.py +21 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/agents/base.py +2 -2
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/agents/codex/harness.py +1 -1
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/agents/opencode/__init__.py +4 -0
- codex_autorunner-1.0.0/src/codex_autorunner/agents/opencode/agent_config.py +104 -0
- codex_autorunner-1.0.0/src/codex_autorunner/agents/opencode/client.py +586 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/agents/opencode/harness.py +71 -20
- codex_autorunner-1.0.0/src/codex_autorunner/agents/opencode/logging.py +225 -0
- codex_autorunner-1.0.0/src/codex_autorunner/agents/opencode/run_prompt.py +261 -0
- codex_autorunner-1.0.0/src/codex_autorunner/agents/opencode/runtime.py +1579 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/agents/opencode/supervisor.py +194 -68
- codex_autorunner-1.0.0/src/codex_autorunner/agents/registry.py +258 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/agents/types.py +2 -2
- codex_autorunner-1.0.0/src/codex_autorunner/api.py +25 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/bootstrap.py +19 -40
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/cli.py +234 -151
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/about_car.py +44 -32
- codex_autorunner-1.0.0/src/codex_autorunner/core/adapter_utils.py +21 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/app_server_events.py +15 -6
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/app_server_logging.py +55 -15
- codex_autorunner-1.0.0/src/codex_autorunner/core/app_server_prompts.py +145 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/app_server_threads.py +15 -26
- codex_autorunner-1.0.0/src/codex_autorunner/core/circuit_breaker.py +183 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/codex_runner.py +6 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/config.py +555 -133
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/docs.py +54 -9
- codex_autorunner-1.0.0/src/codex_autorunner/core/drafts.py +82 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/engine.py +828 -274
- codex_autorunner-1.0.0/src/codex_autorunner/core/exceptions.py +60 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/flows/__init__.py +25 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/flows/controller.py +178 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/flows/definition.py +82 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/flows/models.py +75 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/flows/runtime.py +351 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/flows/store.py +485 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/flows/transition.py +133 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/flows/worker_process.py +242 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/hub.py +21 -13
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/locks.py +118 -1
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/logging_utils.py +9 -6
- codex_autorunner-1.0.0/src/codex_autorunner/core/path_utils.py +123 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/prompt.py +15 -7
- codex_autorunner-1.0.0/src/codex_autorunner/core/redaction.py +29 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/retry.py +61 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/review.py +888 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/review_context.py +161 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/run_index.py +223 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/runner_controller.py +44 -1
- codex_autorunner-1.0.0/src/codex_autorunner/core/runner_process.py +58 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/sqlite_utils.py +32 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/state.py +389 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/static_assets.py +55 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/supervisor_utils.py +67 -0
- codex_autorunner-1.0.0/src/codex_autorunner/core/text_delta_coalescer.py +43 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/update.py +20 -11
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/update_runner.py +2 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/usage.py +107 -75
- codex_autorunner-1.0.0/src/codex_autorunner/core/utils.py +297 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/discovery.py +3 -3
- codex_autorunner-1.0.0/src/codex_autorunner/flows/ticket_flow/__init__.py +3 -0
- codex_autorunner-1.0.0/src/codex_autorunner/flows/ticket_flow/definition.py +91 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/agents/__init__.py +27 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/agents/agent_backend.py +142 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/agents/codex_backend.py +307 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/agents/opencode_backend.py +325 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/agents/run_event.py +71 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/app_server/client.py +708 -153
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/app_server/supervisor.py +59 -33
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/adapter.py +474 -185
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/api_schemas.py +120 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/config.py +239 -1
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/constants.py +19 -1
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/dispatch.py +44 -8
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/doctor.py +47 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/handlers/approvals.py +12 -10
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/handlers/callbacks.py +15 -1
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/commands/__init__.py +29 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/commands/approvals.py +173 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/commands/execution.py +2595 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/commands/files.py +1408 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/commands/flows.py +227 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/commands/formatting.py +81 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/commands/github.py +1688 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/commands/shared.py +190 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/commands/voice.py +112 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/commands/workspace.py +2043 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/commands_runtime.py +2741 -0
- codex_autorunner-0.1.1/src/codex_autorunner/integrations/telegram/handlers/commands.py → codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/commands_spec.py +11 -4
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/handlers/messages.py +374 -49
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/questions.py +389 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/handlers/selections.py +6 -4
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/handlers/utils.py +171 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/helpers.py +90 -18
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/notifications.py +126 -35
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/outbox.py +366 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/progress_stream.py +42 -19
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/runtime.py +24 -13
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/service.py +500 -129
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/state.py +2216 -0
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/ticket_flow_bridge.py +322 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/transport.py +37 -4
- codex_autorunner-1.0.0/src/codex_autorunner/integrations/telegram/trigger_mode.py +53 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/types.py +22 -2
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/voice.py +14 -15
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/manifest.py +2 -0
- codex_autorunner-1.0.0/src/codex_autorunner/plugin_api.py +22 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/routes/__init__.py +25 -14
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/routes/agents.py +18 -78
- codex_autorunner-1.0.0/src/codex_autorunner/routes/analytics.py +239 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/routes/base.py +142 -113
- codex_autorunner-1.0.0/src/codex_autorunner/routes/file_chat.py +836 -0
- codex_autorunner-1.0.0/src/codex_autorunner/routes/flows.py +980 -0
- codex_autorunner-1.0.0/src/codex_autorunner/routes/messages.py +459 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/routes/repos.py +17 -0
- codex_autorunner-1.0.0/src/codex_autorunner/routes/review.py +148 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/routes/sessions.py +16 -8
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/routes/settings.py +22 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/routes/shared.py +33 -3
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/routes/system.py +22 -1
- codex_autorunner-1.0.0/src/codex_autorunner/routes/usage.py +87 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/routes/voice.py +5 -13
- codex_autorunner-1.0.0/src/codex_autorunner/routes/workspace.py +271 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/server.py +2 -1
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/agentControls.js +9 -1
- codex_autorunner-1.0.0/src/codex_autorunner/static/agentEvents.js +248 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/app.js +27 -22
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/autoRefresh.js +29 -1
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/bootstrap.js +1 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/bus.js +1 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/cache.js +1 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/constants.js +20 -4
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/dashboard.js +162 -150
- codex_autorunner-1.0.0/src/codex_autorunner/static/diffRenderer.js +37 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/docChatCore.js +324 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/docChatStorage.js +65 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/docChatVoice.js +65 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/docEditor.js +133 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/env.js +1 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/eventSummarizer.js +166 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/fileChat.js +182 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/health.js +155 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/hub.js +67 -126
- codex_autorunner-1.0.0/src/codex_autorunner/static/index.html +909 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/liveUpdates.js +59 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/loader.js +1 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/messages.js +470 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/mobileCompact.js +2 -1
- codex_autorunner-1.0.0/src/codex_autorunner/static/settings.js +154 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/styles.css +7577 -3758
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/tabs.js +28 -5
- codex_autorunner-1.0.0/src/codex_autorunner/static/terminal.js +26 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/terminalManager.js +53 -59
- codex_autorunner-1.0.0/src/codex_autorunner/static/ticketChatActions.js +333 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/ticketChatEvents.js +16 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/ticketChatStorage.js +16 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/ticketChatStream.js +264 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/ticketEditor.js +750 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/ticketVoice.js +9 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/tickets.js +1315 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/utils.js +32 -3
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/voice.js +21 -7
- codex_autorunner-1.0.0/src/codex_autorunner/static/workspace.js +672 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/workspaceApi.js +53 -0
- codex_autorunner-1.0.0/src/codex_autorunner/static/workspaceFileBrowser.js +504 -0
- codex_autorunner-1.0.0/src/codex_autorunner/tickets/__init__.py +20 -0
- codex_autorunner-1.0.0/src/codex_autorunner/tickets/agent_pool.py +377 -0
- codex_autorunner-1.0.0/src/codex_autorunner/tickets/files.py +85 -0
- codex_autorunner-1.0.0/src/codex_autorunner/tickets/frontmatter.py +55 -0
- codex_autorunner-1.0.0/src/codex_autorunner/tickets/lint.py +102 -0
- codex_autorunner-1.0.0/src/codex_autorunner/tickets/models.py +95 -0
- codex_autorunner-1.0.0/src/codex_autorunner/tickets/outbox.py +232 -0
- codex_autorunner-1.0.0/src/codex_autorunner/tickets/replies.py +179 -0
- codex_autorunner-1.0.0/src/codex_autorunner/tickets/runner.py +823 -0
- codex_autorunner-1.0.0/src/codex_autorunner/tickets/spec_ingest.py +77 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/voice/capture.py +7 -7
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/voice/service.py +51 -9
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/web/app.py +419 -199
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/web/hub_jobs.py +13 -2
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/web/middleware.py +47 -13
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/web/pty_session.py +26 -13
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/web/schemas.py +114 -109
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/web/static_assets.py +55 -42
- codex_autorunner-1.0.0/src/codex_autorunner/web/static_refresh.py +86 -0
- codex_autorunner-1.0.0/src/codex_autorunner/workspace/__init__.py +40 -0
- codex_autorunner-1.0.0/src/codex_autorunner/workspace/paths.py +319 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0/src/codex_autorunner.egg-info}/PKG-INFO +20 -21
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner.egg-info/SOURCES.txt +124 -49
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner.egg-info/requires.txt +2 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_about_car_terminal_context.py +3 -3
- codex_autorunner-1.0.0/tests/test_agent_run_events.py +347 -0
- codex_autorunner-1.0.0/tests/test_agents_plugins.py +67 -0
- codex_autorunner-1.0.0/tests/test_agents_registry.py +239 -0
- codex_autorunner-1.0.0/tests/test_api_contract.py +47 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_app_server_client.py +39 -2
- codex_autorunner-1.0.0/tests/test_app_server_event_formatter.py +252 -0
- codex_autorunner-1.0.0/tests/test_app_server_prompts.py +36 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_auth_middleware.py +1 -3
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_base_path_static.py +8 -10
- codex_autorunner-1.0.0/tests/test_cli_status.py +53 -0
- codex_autorunner-1.0.0/tests/test_codex_app_server_integration.py +360 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_config_resolution.py +145 -2
- codex_autorunner-1.0.0/tests/test_core_web_boundary.py +18 -0
- codex_autorunner-1.0.0/tests/test_engine_end_review.py +102 -0
- codex_autorunner-1.0.0/tests/test_file_chat_drafts.py +115 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_hub_create.py +2 -2
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_hub_foundation.py +1 -1
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_hub_supervisor.py +46 -10
- codex_autorunner-1.0.0/tests/test_lock_utils.py +62 -0
- codex_autorunner-1.0.0/tests/test_opencode_agent_config.py +176 -0
- codex_autorunner-1.0.0/tests/test_opencode_client.py +59 -0
- codex_autorunner-1.0.0/tests/test_opencode_event_formatter.py +28 -0
- codex_autorunner-1.0.0/tests/test_opencode_review_arguments.py +32 -0
- codex_autorunner-1.0.0/tests/test_opencode_runtime.py +525 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_patch_utils.py +16 -8
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_prompt.py +3 -5
- codex_autorunner-1.0.0/tests/test_redaction.py +60 -0
- codex_autorunner-1.0.0/tests/test_request_logging.py +172 -0
- codex_autorunner-1.0.0/tests/test_review_context.py +35 -0
- codex_autorunner-1.0.0/tests/test_review_service.py +16 -0
- codex_autorunner-1.0.0/tests/test_runner_controller.py +295 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_state_lock.py +1 -1
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_state_sessions.py +1 -1
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_static_asset_cache.py +31 -14
- codex_autorunner-1.0.0/tests/test_telegram_adapter.py +1047 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_bot_config.py +94 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_bot_integration.py +10 -4
- codex_autorunner-1.0.0/tests/test_telegram_codex_feature_flags.py +67 -0
- codex_autorunner-1.0.0/tests/test_telegram_fast_ack.py +257 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_handlers_callbacks.py +63 -4
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_handlers_messages.py +37 -11
- codex_autorunner-1.0.0/tests/test_telegram_media_batch_failure.py +46 -0
- codex_autorunner-1.0.0/tests/test_telegram_opencode_context_cache.py +74 -0
- codex_autorunner-1.0.0/tests/test_telegram_opencode_usage.py +53 -0
- codex_autorunner-1.0.0/tests/test_telegram_outbox.py +303 -0
- codex_autorunner-1.0.0/tests/test_telegram_progress_stream.py +27 -0
- codex_autorunner-1.0.0/tests/test_telegram_review_opencode.py +339 -0
- codex_autorunner-1.0.0/tests/test_telegram_state.py +34 -0
- codex_autorunner-1.0.0/tests/test_telegram_status_rate_limits.py +131 -0
- codex_autorunner-1.0.0/tests/test_telegram_topic_queue.py +30 -0
- codex_autorunner-1.0.0/tests/test_telegram_trigger_mode.py +45 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_turn_queue.py +16 -7
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_update_dedupe.py +4 -4
- codex_autorunner-1.0.0/tests/test_ticket_flow_approval_config.py +125 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_voice_transcribe_endpoint.py +6 -6
- codex_autorunner-1.0.0/tests/test_workspace_functional.py +378 -0
- codex_autorunner-1.0.0/tests/test_workspace_paths.py +42 -0
- codex_autorunner-0.1.1/src/codex_autorunner/agents/__init__.py +0 -1
- codex_autorunner-0.1.1/src/codex_autorunner/agents/opencode/client.py +0 -309
- codex_autorunner-0.1.1/src/codex_autorunner/agents/opencode/runtime.py +0 -509
- codex_autorunner-0.1.1/src/codex_autorunner/core/app_server_prompts.py +0 -376
- codex_autorunner-0.1.1/src/codex_autorunner/core/doc_chat.py +0 -1415
- codex_autorunner-0.1.1/src/codex_autorunner/core/runner_process.py +0 -29
- codex_autorunner-0.1.1/src/codex_autorunner/core/snapshot.py +0 -580
- codex_autorunner-0.1.1/src/codex_autorunner/core/state.py +0 -160
- codex_autorunner-0.1.1/src/codex_autorunner/core/utils.py +0 -133
- codex_autorunner-0.1.1/src/codex_autorunner/integrations/github/chatops.py +0 -268
- codex_autorunner-0.1.1/src/codex_autorunner/integrations/github/pr_flow.py +0 -1314
- codex_autorunner-0.1.1/src/codex_autorunner/integrations/telegram/handlers/commands_runtime.py +0 -7476
- codex_autorunner-0.1.1/src/codex_autorunner/integrations/telegram/outbox.py +0 -195
- codex_autorunner-0.1.1/src/codex_autorunner/integrations/telegram/state.py +0 -1268
- codex_autorunner-0.1.1/src/codex_autorunner/routes/docs.py +0 -381
- codex_autorunner-0.1.1/src/codex_autorunner/routes/github.py +0 -327
- codex_autorunner-0.1.1/src/codex_autorunner/routes/runs.py +0 -118
- codex_autorunner-0.1.1/src/codex_autorunner/spec_ingest.py +0 -788
- codex_autorunner-0.1.1/src/codex_autorunner/static/docChatActions.js +0 -279
- codex_autorunner-0.1.1/src/codex_autorunner/static/docChatEvents.js +0 -300
- codex_autorunner-0.1.1/src/codex_autorunner/static/docChatRender.js +0 -205
- codex_autorunner-0.1.1/src/codex_autorunner/static/docChatStream.js +0 -361
- codex_autorunner-0.1.1/src/codex_autorunner/static/docs.js +0 -20
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsClipboard.js +0 -69
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsCrud.js +0 -257
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsDocUpdates.js +0 -62
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsDrafts.js +0 -16
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsElements.js +0 -69
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsInit.js +0 -274
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsParse.js +0 -160
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsSnapshot.js +0 -87
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsSpecIngest.js +0 -263
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsState.js +0 -127
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsThreadRegistry.js +0 -44
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsUi.js +0 -153
- codex_autorunner-0.1.1/src/codex_autorunner/static/docsVoice.js +0 -56
- codex_autorunner-0.1.1/src/codex_autorunner/static/github.js +0 -442
- codex_autorunner-0.1.1/src/codex_autorunner/static/index.html +0 -928
- codex_autorunner-0.1.1/src/codex_autorunner/static/logs.js +0 -640
- codex_autorunner-0.1.1/src/codex_autorunner/static/runs.js +0 -409
- codex_autorunner-0.1.1/src/codex_autorunner/static/settings.js +0 -335
- codex_autorunner-0.1.1/src/codex_autorunner/static/snapshot.js +0 -124
- codex_autorunner-0.1.1/src/codex_autorunner/static/state.js +0 -86
- codex_autorunner-0.1.1/src/codex_autorunner/static/terminal.js +0 -12
- codex_autorunner-0.1.1/src/codex_autorunner/static/todoPreview.js +0 -27
- codex_autorunner-0.1.1/src/codex_autorunner/workspace.py +0 -16
- codex_autorunner-0.1.1/tests/test_api_contract.py +0 -37
- codex_autorunner-0.1.1/tests/test_app_server_prompts.py +0 -84
- codex_autorunner-0.1.1/tests/test_chatops.py +0 -38
- codex_autorunner-0.1.1/tests/test_cli_snapshot.py +0 -37
- codex_autorunner-0.1.1/tests/test_doc_chat.py +0 -508
- codex_autorunner-0.1.1/tests/test_doc_chat_ui.py +0 -231
- codex_autorunner-0.1.1/tests/test_docs_todos.py +0 -15
- codex_autorunner-0.1.1/tests/test_docs_validation.py +0 -18
- codex_autorunner-0.1.1/tests/test_github_context_hook.py +0 -154
- codex_autorunner-0.1.1/tests/test_github_service.py +0 -76
- codex_autorunner-0.1.1/tests/test_github_sync_pr_agentic.py +0 -212
- codex_autorunner-0.1.1/tests/test_lock_utils.py +0 -20
- codex_autorunner-0.1.1/tests/test_opencode_runtime.py +0 -85
- codex_autorunner-0.1.1/tests/test_pr_flow.py +0 -191
- codex_autorunner-0.1.1/tests/test_request_logging.py +0 -66
- codex_autorunner-0.1.1/tests/test_runner_controller.py +0 -46
- codex_autorunner-0.1.1/tests/test_snapshot_api.py +0 -70
- codex_autorunner-0.1.1/tests/test_snapshot_core.py +0 -52
- codex_autorunner-0.1.1/tests/test_snapshot_incremental.py +0 -136
- codex_autorunner-0.1.1/tests/test_spec_ingest.py +0 -26
- codex_autorunner-0.1.1/tests/test_telegram_adapter.py +0 -475
- codex_autorunner-0.1.1/tests/test_telegram_outbox.py +0 -64
- codex_autorunner-0.1.1/tests/test_telegram_state.py +0 -11
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/LICENSE +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/setup.cfg +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/__init__.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/agents/codex/__init__.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/agents/opencode/events.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/codex_cli.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/codex_runner.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/__init__.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/git_utils.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/injected_context.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/notifications.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/optional_dependencies.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/patch_utils.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/prompts.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/core/request_context.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/housekeeping.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/__init__.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/app_server/__init__.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/app_server/env.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/github/__init__.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/github/service.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/__init__.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/commands_registry.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/handlers/__init__.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/overflow.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/rendering.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/integrations/telegram/retry.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/routes/app_server.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/routes/terminal_images.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/LICENSE.xterm +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-cyrillic-ext.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-cyrillic.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-greek.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-latin-ext.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-latin.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-vietnamese.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-cyrillic-ext.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-cyrillic.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-greek.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-latin-ext.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-latin.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-vietnamese.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-cyrillic-ext.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-cyrillic.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-greek.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-latin-ext.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-latin.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-vietnamese.woff2 +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/OFL.txt +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/xterm-addon-fit.js +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/xterm.css +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/static/vendor/xterm.js +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/voice/__init__.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/voice/config.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/voice/provider.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/voice/providers/__init__.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/voice/providers/openai_whisper.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/voice/resolver.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/web/__init__.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/web/runner_manager.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/web/terminal_sessions.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner.egg-info/dependency_links.txt +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner.egg-info/entry_points.txt +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner.egg-info/top_level.txt +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_app_server_events.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_app_server_supervisor.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_app_server_thread_registry.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_base_path.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_cli_init.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_cli_sessions.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_codex_cli_flags.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_codex_runner.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_engine_app_server.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_engine_logs.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_housekeeping.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_hub_terminal_sessions.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_hub_ui_escape.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_logging_utils.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_notifications.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_opencode_integration.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_optional_dependencies.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_origin_middleware.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_sse_streams.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_static.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_system_update_check.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_system_update_worker.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_bot_lock.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_cache_cleanup.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_command_registry.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_interrupt_status.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_overflow.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_paths_compatible.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_task_tracking.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_thread_paths.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_transport.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_telegram_whisper_disclaimer.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_terminal_idle_timeout.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_terminal_input_dedupe.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_usage.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_voice_capture.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_voice_config.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_voice_service.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_voice_ui.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_voice_whisper_mime_types.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_voice_whisper_provider.py +0 -0
- {codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/tests/test_workspace_helpers.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-autorunner
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: Codex autorunner CLI per DESIGN-V1
|
|
5
5
|
Author: Codex
|
|
6
6
|
License: MIT License
|
|
@@ -45,10 +45,12 @@ Requires-Dist: ptyprocess>=0.7
|
|
|
45
45
|
Requires-Dist: python-multipart>=0.0.9
|
|
46
46
|
Requires-Dist: python-dotenv>=1.0
|
|
47
47
|
Requires-Dist: httpx>=0.27
|
|
48
|
+
Requires-Dist: tenacity>=8.0
|
|
48
49
|
Provides-Extra: dev
|
|
49
50
|
Requires-Dist: black==25.11.0; extra == "dev"
|
|
50
51
|
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
51
52
|
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
53
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
52
54
|
Requires-Dist: pytest-timeout>=2.0; extra == "dev"
|
|
53
55
|
Requires-Dist: ruff>=0.5.0; extra == "dev"
|
|
54
56
|
Requires-Dist: types-PyYAML; extra == "dev"
|
|
@@ -63,11 +65,17 @@ Dynamic: license-file
|
|
|
63
65
|
# codex-autorunner
|
|
64
66
|
[](https://pypi.org/project/codex-autorunner/)
|
|
65
67
|
|
|
66
|
-
An opinionated autorunner that uses the Codex
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
An opinionated autorunner that uses the Codex app-server as the primary execution backend with OpenCode support to work on large tasks via a simple loop. On each loop we feed the Codex instance the last one's final output along with core documents.
|
|
69
|
+
|
|
70
|
+
In the current model, the primary work surface is **tickets**:
|
|
71
|
+
|
|
72
|
+
- `.codex-autorunner/tickets/TICKET-###.md`
|
|
73
|
+
|
|
74
|
+
Optionally, you can maintain lightweight **workspace docs** (auto-created on write; missing is OK):
|
|
75
|
+
|
|
76
|
+
- `.codex-autorunner/workspace/active_context.md`
|
|
77
|
+
- `.codex-autorunner/workspace/decisions.md`
|
|
78
|
+
- `.codex-autorunner/workspace/spec.md`
|
|
71
79
|
|
|
72
80
|
## Sneak Peak
|
|
73
81
|
Run multiple agents on many repositories, with git worktree support
|
|
@@ -79,8 +87,7 @@ See the progress of your long running tasks with a high level overview
|
|
|
79
87
|
Dive deep into specific agent execution with a rich but readable log
|
|
80
88
|

|
|
81
89
|
|
|
82
|
-
|
|
83
|
-

|
|
90
|
+
Tickets and workspace docs are markdown files. Edit them directly or use the web UI’s file chat to iterate with the agent.
|
|
84
91
|
|
|
85
92
|
Use codex CLI directly for multi-shot problem solving or `/review`
|
|
86
93
|

|
|
@@ -90,11 +97,10 @@ Mobile-first experience, code on the go with Whisper support (BYOK)
|
|
|
90
97
|
|
|
91
98
|
## What it does
|
|
92
99
|
- Initializes a repo with Codex-friendly docs and config.
|
|
93
|
-
- Runs Codex in a loop against the repo, streaming logs.
|
|
100
|
+
- Runs Codex app-server in a loop against the repo, streaming logs via OpenCode runtime.
|
|
94
101
|
- Tracks state, logs, and config under `.codex-autorunner/`.
|
|
95
|
-
- Exposes a power-user HTTP API and web UI for docs, logs, runner control, and a Codex TUI terminal.
|
|
102
|
+
- Exposes a power-user HTTP API and web UI for tickets, workspace docs, file chat, logs, runner control, and a Codex TUI terminal.
|
|
96
103
|
- Optionally runs a Telegram bot for interactive, user-in-the-loop Codex sessions.
|
|
97
|
-
- Generates a pasteable repo snapshot (`.codex-autorunner/SNAPSHOT.md`) for sharing with other LLM chats.
|
|
98
104
|
|
|
99
105
|
CLI commands are available as `codex-autorunner` or the shorter `car`.
|
|
100
106
|
|
|
@@ -164,7 +170,7 @@ If you set a base path, prefix all checks with it.
|
|
|
164
170
|
|
|
165
171
|
## Quick start
|
|
166
172
|
1) Install (editable): `pip install -e .`
|
|
167
|
-
2) Initialize (hub + repo): `codex-autorunner init --git-init` (or `car init --git-init` if you prefer short). This creates the hub config at `.codex-autorunner/config.yml`, plus state/log files and
|
|
173
|
+
2) Initialize (hub + repo): `codex-autorunner init --git-init` (or `car init --git-init` if you prefer short). This creates the hub config at `.codex-autorunner/config.yml`, plus state/log files and starter content under `.codex-autorunner/` (tickets and optional workspace docs).
|
|
168
174
|
3) Run once: `codex-autorunner once` / `car once`
|
|
169
175
|
4) Continuous loop: `codex-autorunner run` / `car run`
|
|
170
176
|
5) If stuck: `codex-autorunner kill` then `codex-autorunner resume` (or the `car` equivalents)
|
|
@@ -229,19 +235,12 @@ If you set `server.auth_token_env`, the API requires `Authorization: Bearer <tok
|
|
|
229
235
|
- `run` / `once` — run the loop (continuous or single iteration).
|
|
230
236
|
- `resume` — clear stale lock/state and restart; `--once` for a single run.
|
|
231
237
|
- `kill` — SIGTERM the running loop and mark state error.
|
|
232
|
-
- `status` — show current state
|
|
238
|
+
- `status` — show current state.
|
|
233
239
|
- `sessions` — list terminal sessions (server-backed when available).
|
|
234
240
|
- `stop-session` — stop a terminal session by repo (`--repo`) or id (`--session`).
|
|
235
241
|
- `log` — view logs (tail or specific run).
|
|
236
|
-
- `edit` — open
|
|
237
|
-
- `ingest-spec` — generate TODO/PROGRESS/OPINIONS from SPEC using Codex (use `--force` to overwrite).
|
|
238
|
-
- `clear-docs` — reset TODO/PROGRESS/OPINIONS to empty templates (type CLEAR to confirm).
|
|
239
|
-
- `snapshot` — generate/update `.codex-autorunner/SNAPSHOT.md` (incremental by default when one exists; use `--from-scratch` to regenerate).
|
|
242
|
+
- `edit` — open `active_context|decisions|spec` in `$EDITOR`.
|
|
240
243
|
- `serve` — start the HTTP API (FastAPI) on host/port from config (defaults 127.0.0.1:4173).
|
|
241
244
|
|
|
242
|
-
## Snapshot (repo briefing)
|
|
243
|
-
- Web UI: open the Snapshot tab. If no snapshot exists, you’ll see “Generate snapshot”; otherwise you’ll see “Update snapshot (incremental)” and “Regenerate snapshot (from scratch)”, plus “Copy to clipboard”.
|
|
244
|
-
- CLI: `codex-autorunner snapshot` (or `car snapshot`) writes `.codex-autorunner/SNAPSHOT.md` and `.codex-autorunner/snapshot_state.json`.
|
|
245
|
-
|
|
246
245
|
## Star history
|
|
247
246
|
[](https://star-history.com/#Git-on-my-level/codex-autorunner&Date)
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
# codex-autorunner
|
|
2
2
|
[](https://pypi.org/project/codex-autorunner/)
|
|
3
3
|
|
|
4
|
-
An opinionated autorunner that uses the Codex
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
An opinionated autorunner that uses the Codex app-server as the primary execution backend with OpenCode support to work on large tasks via a simple loop. On each loop we feed the Codex instance the last one's final output along with core documents.
|
|
5
|
+
|
|
6
|
+
In the current model, the primary work surface is **tickets**:
|
|
7
|
+
|
|
8
|
+
- `.codex-autorunner/tickets/TICKET-###.md`
|
|
9
|
+
|
|
10
|
+
Optionally, you can maintain lightweight **workspace docs** (auto-created on write; missing is OK):
|
|
11
|
+
|
|
12
|
+
- `.codex-autorunner/workspace/active_context.md`
|
|
13
|
+
- `.codex-autorunner/workspace/decisions.md`
|
|
14
|
+
- `.codex-autorunner/workspace/spec.md`
|
|
9
15
|
|
|
10
16
|
## Sneak Peak
|
|
11
17
|
Run multiple agents on many repositories, with git worktree support
|
|
@@ -17,8 +23,7 @@ See the progress of your long running tasks with a high level overview
|
|
|
17
23
|
Dive deep into specific agent execution with a rich but readable log
|
|
18
24
|

|
|
19
25
|
|
|
20
|
-
|
|
21
|
-

|
|
26
|
+
Tickets and workspace docs are markdown files. Edit them directly or use the web UI’s file chat to iterate with the agent.
|
|
22
27
|
|
|
23
28
|
Use codex CLI directly for multi-shot problem solving or `/review`
|
|
24
29
|

|
|
@@ -28,11 +33,10 @@ Mobile-first experience, code on the go with Whisper support (BYOK)
|
|
|
28
33
|
|
|
29
34
|
## What it does
|
|
30
35
|
- Initializes a repo with Codex-friendly docs and config.
|
|
31
|
-
- Runs Codex in a loop against the repo, streaming logs.
|
|
36
|
+
- Runs Codex app-server in a loop against the repo, streaming logs via OpenCode runtime.
|
|
32
37
|
- Tracks state, logs, and config under `.codex-autorunner/`.
|
|
33
|
-
- Exposes a power-user HTTP API and web UI for docs, logs, runner control, and a Codex TUI terminal.
|
|
38
|
+
- Exposes a power-user HTTP API and web UI for tickets, workspace docs, file chat, logs, runner control, and a Codex TUI terminal.
|
|
34
39
|
- Optionally runs a Telegram bot for interactive, user-in-the-loop Codex sessions.
|
|
35
|
-
- Generates a pasteable repo snapshot (`.codex-autorunner/SNAPSHOT.md`) for sharing with other LLM chats.
|
|
36
40
|
|
|
37
41
|
CLI commands are available as `codex-autorunner` or the shorter `car`.
|
|
38
42
|
|
|
@@ -102,7 +106,7 @@ If you set a base path, prefix all checks with it.
|
|
|
102
106
|
|
|
103
107
|
## Quick start
|
|
104
108
|
1) Install (editable): `pip install -e .`
|
|
105
|
-
2) Initialize (hub + repo): `codex-autorunner init --git-init` (or `car init --git-init` if you prefer short). This creates the hub config at `.codex-autorunner/config.yml`, plus state/log files and
|
|
109
|
+
2) Initialize (hub + repo): `codex-autorunner init --git-init` (or `car init --git-init` if you prefer short). This creates the hub config at `.codex-autorunner/config.yml`, plus state/log files and starter content under `.codex-autorunner/` (tickets and optional workspace docs).
|
|
106
110
|
3) Run once: `codex-autorunner once` / `car once`
|
|
107
111
|
4) Continuous loop: `codex-autorunner run` / `car run`
|
|
108
112
|
5) If stuck: `codex-autorunner kill` then `codex-autorunner resume` (or the `car` equivalents)
|
|
@@ -167,19 +171,12 @@ If you set `server.auth_token_env`, the API requires `Authorization: Bearer <tok
|
|
|
167
171
|
- `run` / `once` — run the loop (continuous or single iteration).
|
|
168
172
|
- `resume` — clear stale lock/state and restart; `--once` for a single run.
|
|
169
173
|
- `kill` — SIGTERM the running loop and mark state error.
|
|
170
|
-
- `status` — show current state
|
|
174
|
+
- `status` — show current state.
|
|
171
175
|
- `sessions` — list terminal sessions (server-backed when available).
|
|
172
176
|
- `stop-session` — stop a terminal session by repo (`--repo`) or id (`--session`).
|
|
173
177
|
- `log` — view logs (tail or specific run).
|
|
174
|
-
- `edit` — open
|
|
175
|
-
- `ingest-spec` — generate TODO/PROGRESS/OPINIONS from SPEC using Codex (use `--force` to overwrite).
|
|
176
|
-
- `clear-docs` — reset TODO/PROGRESS/OPINIONS to empty templates (type CLEAR to confirm).
|
|
177
|
-
- `snapshot` — generate/update `.codex-autorunner/SNAPSHOT.md` (incremental by default when one exists; use `--from-scratch` to regenerate).
|
|
178
|
+
- `edit` — open `active_context|decisions|spec` in `$EDITOR`.
|
|
178
179
|
- `serve` — start the HTTP API (FastAPI) on host/port from config (defaults 127.0.0.1:4173).
|
|
179
180
|
|
|
180
|
-
## Snapshot (repo briefing)
|
|
181
|
-
- Web UI: open the Snapshot tab. If no snapshot exists, you’ll see “Generate snapshot”; otherwise you’ll see “Update snapshot (incremental)” and “Regenerate snapshot (from scratch)”, plus “Copy to clipboard”.
|
|
182
|
-
- CLI: `codex-autorunner snapshot` (or `car snapshot`) writes `.codex-autorunner/SNAPSHOT.md` and `.codex-autorunner/snapshot_state.json`.
|
|
183
|
-
|
|
184
181
|
## Star history
|
|
185
182
|
[](https://star-history.com/#Git-on-my-level/codex-autorunner&Date)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "codex-autorunner"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "1.0.0"
|
|
4
4
|
description = "Codex autorunner CLI per DESIGN-V1"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = {file = "LICENSE"}
|
|
@@ -16,6 +16,7 @@ dependencies = [
|
|
|
16
16
|
"python-multipart>=0.0.9",
|
|
17
17
|
"python-dotenv>=1.0",
|
|
18
18
|
"httpx>=0.27",
|
|
19
|
+
"tenacity>=8.0",
|
|
19
20
|
]
|
|
20
21
|
classifiers = [
|
|
21
22
|
"License :: OSI Approved :: MIT License",
|
|
@@ -35,6 +36,7 @@ dev = [
|
|
|
35
36
|
"black==25.11.0",
|
|
36
37
|
"mypy>=1.10",
|
|
37
38
|
"pytest>=7.0",
|
|
39
|
+
"pytest-asyncio>=0.23",
|
|
38
40
|
"pytest-timeout>=2.0",
|
|
39
41
|
"ruff>=0.5.0",
|
|
40
42
|
"types-PyYAML",
|
|
@@ -84,6 +86,11 @@ markers = [
|
|
|
84
86
|
"integration: marks tests as integration tests that require external dependencies (deselect with '-m \"not integration\"')",
|
|
85
87
|
"timeout(seconds): per-test timeout (provided by pytest-timeout)",
|
|
86
88
|
]
|
|
89
|
+
filterwarnings = [
|
|
90
|
+
# Cancelled auto-restart tasks can emit noisy unraisable warnings when the event
|
|
91
|
+
# loop shuts down; we explicitly clean these up, so silence the residual notice.
|
|
92
|
+
"ignore::pytest.PytestUnraisableExceptionWarning",
|
|
93
|
+
]
|
|
87
94
|
|
|
88
95
|
[tool.ruff]
|
|
89
96
|
line-length = 88
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""Agent harness abstractions."""
|
|
2
|
+
|
|
3
|
+
from .registry import (
|
|
4
|
+
AgentCapability,
|
|
5
|
+
AgentDescriptor,
|
|
6
|
+
get_agent_descriptor,
|
|
7
|
+
get_available_agents,
|
|
8
|
+
get_registered_agents,
|
|
9
|
+
has_capability,
|
|
10
|
+
validate_agent_id,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"AgentCapability",
|
|
15
|
+
"AgentDescriptor",
|
|
16
|
+
"get_registered_agents",
|
|
17
|
+
"get_available_agents",
|
|
18
|
+
"get_agent_descriptor",
|
|
19
|
+
"validate_agent_id",
|
|
20
|
+
"has_capability",
|
|
21
|
+
]
|
|
@@ -3,11 +3,11 @@ from __future__ import annotations
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import Any, AsyncIterator, Optional, Protocol
|
|
5
5
|
|
|
6
|
-
from .types import ConversationRef, ModelCatalog, TurnRef
|
|
6
|
+
from .types import AgentId, ConversationRef, ModelCatalog, TurnRef
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class AgentHarness(Protocol):
|
|
10
|
-
agent_id:
|
|
10
|
+
agent_id: AgentId
|
|
11
11
|
display_name: str
|
|
12
12
|
|
|
13
13
|
async def ensure_ready(self, workspace_root: Path) -> None: ...
|
{codex_autorunner-0.1.1 → codex_autorunner-1.0.0}/src/codex_autorunner/agents/opencode/__init__.py
RENAMED
|
@@ -3,12 +3,16 @@
|
|
|
3
3
|
from .client import OpenCodeClient
|
|
4
4
|
from .events import SSEEvent, parse_sse_lines
|
|
5
5
|
from .harness import OpenCodeHarness
|
|
6
|
+
from .run_prompt import OpenCodeRunConfig, OpenCodeRunResult, run_opencode_prompt
|
|
6
7
|
from .supervisor import OpenCodeSupervisor
|
|
7
8
|
|
|
8
9
|
__all__ = [
|
|
9
10
|
"OpenCodeClient",
|
|
10
11
|
"OpenCodeHarness",
|
|
12
|
+
"OpenCodeRunConfig",
|
|
13
|
+
"OpenCodeRunResult",
|
|
11
14
|
"OpenCodeSupervisor",
|
|
12
15
|
"SSEEvent",
|
|
13
16
|
"parse_sse_lines",
|
|
17
|
+
"run_opencode_prompt",
|
|
14
18
|
]
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
import logging
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Optional
|
|
7
|
+
|
|
8
|
+
logger = logging.getLogger(__name__)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
async def ensure_agent_config(
|
|
12
|
+
workspace_root: Path,
|
|
13
|
+
agent_id: str,
|
|
14
|
+
model: Optional[str],
|
|
15
|
+
title: Optional[str] = None,
|
|
16
|
+
description: Optional[str] = None,
|
|
17
|
+
) -> None:
|
|
18
|
+
"""Ensure .opencode/agent/<agent_id>.md exists with frontmatter config.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
workspace_root: Path to the workspace root
|
|
22
|
+
agent_id: Agent ID (e.g., "subagent")
|
|
23
|
+
model: Model ID in format "providerID/modelID" (e.g., "zai-coding-plan/glm-4.7-flashx")
|
|
24
|
+
title: Optional title for the agent
|
|
25
|
+
description: Optional description for the agent
|
|
26
|
+
"""
|
|
27
|
+
if model is None:
|
|
28
|
+
logger.debug(f"Skipping agent config for {agent_id}: no model configured")
|
|
29
|
+
return
|
|
30
|
+
|
|
31
|
+
agent_dir = workspace_root / ".opencode" / "agent"
|
|
32
|
+
agent_file = agent_dir / f"{agent_id}.md"
|
|
33
|
+
|
|
34
|
+
# Check if file already exists and has the correct model
|
|
35
|
+
if agent_file.exists():
|
|
36
|
+
existing_content = agent_file.read_text(encoding="utf-8")
|
|
37
|
+
existing_model = _extract_model_from_frontmatter(existing_content)
|
|
38
|
+
if existing_model == model:
|
|
39
|
+
logger.debug(f"Agent config already exists for {agent_id}: {agent_file}")
|
|
40
|
+
return
|
|
41
|
+
|
|
42
|
+
# Create agent directory if needed
|
|
43
|
+
await asyncio.to_thread(agent_dir.mkdir, parents=True, exist_ok=True)
|
|
44
|
+
|
|
45
|
+
# Build agent markdown with frontmatter
|
|
46
|
+
content = _build_agent_md(
|
|
47
|
+
agent_id=agent_id,
|
|
48
|
+
model=model,
|
|
49
|
+
title=title or agent_id,
|
|
50
|
+
description=description or f"Subagent for {agent_id} tasks",
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# Write atomically
|
|
54
|
+
await asyncio.to_thread(agent_file.write_text, content, encoding="utf-8")
|
|
55
|
+
logger.info(f"Created agent config: {agent_file} with model {model}")
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _build_agent_md(
|
|
59
|
+
agent_id: str,
|
|
60
|
+
model: str,
|
|
61
|
+
title: str,
|
|
62
|
+
description: str,
|
|
63
|
+
) -> str:
|
|
64
|
+
"""Generate markdown with YAML frontmatter.
|
|
65
|
+
|
|
66
|
+
Frontmatter format per OpenCode config schema:
|
|
67
|
+
---
|
|
68
|
+
agent: <agent_id>
|
|
69
|
+
title: "<title>"
|
|
70
|
+
description: "<description>"
|
|
71
|
+
model: <providerID>/<modelID>
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
<Optional agent instructions go here>
|
|
75
|
+
"""
|
|
76
|
+
return f"""---
|
|
77
|
+
agent: {agent_id}
|
|
78
|
+
title: "{title}"
|
|
79
|
+
description: "{description}"
|
|
80
|
+
model: {model}
|
|
81
|
+
---
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _extract_model_from_frontmatter(content: str) -> Optional[str]:
|
|
86
|
+
"""Extract model value from YAML frontmatter.
|
|
87
|
+
|
|
88
|
+
Returns None if frontmatter or model field is not found.
|
|
89
|
+
"""
|
|
90
|
+
lines = content.splitlines()
|
|
91
|
+
if not lines or not lines[0].startswith("---"):
|
|
92
|
+
return None
|
|
93
|
+
|
|
94
|
+
for _i, line in enumerate(lines[1:], start=1):
|
|
95
|
+
if line.startswith("---"):
|
|
96
|
+
break
|
|
97
|
+
if line.startswith("model:"):
|
|
98
|
+
model = line.split(":", 1)[1].strip()
|
|
99
|
+
return model if model else None
|
|
100
|
+
|
|
101
|
+
return None
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
__all__ = ["ensure_agent_config"]
|