codex-autorunner 1.1.0__tar.gz → 1.2.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-1.1.0/src/codex_autorunner.egg-info → codex_autorunner-1.2.0}/PKG-INFO +15 -19
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/README.md +14 -18
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/pyproject.toml +2 -1
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/opencode/client.py +113 -4
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/opencode/supervisor.py +4 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/registry.py +17 -7
- codex_autorunner-1.2.0/src/codex_autorunner/bootstrap.py +363 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/__init__.py +21 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/about_car.py +114 -1
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/app_server_threads.py +6 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/config.py +236 -1
- codex_autorunner-1.2.0/src/codex_autorunner/core/context_awareness.py +38 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/filebox.py +265 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/flows/controller.py +71 -1
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/flows/reconciler.py +4 -1
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/flows/runtime.py +22 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/flows/store.py +61 -9
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/flows/transition.py +23 -16
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/flows/ux_helpers.py +18 -3
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/flows/worker_process.py +32 -6
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/hub.py +198 -41
- codex_autorunner-1.2.0/src/codex_autorunner/core/lifecycle_events.py +253 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/path_utils.py +2 -1
- codex_autorunner-1.2.0/src/codex_autorunner/core/pma_audit.py +224 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/pma_context.py +496 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/pma_dispatch_interceptor.py +284 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/pma_lifecycle.py +527 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/pma_queue.py +367 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/pma_safety.py +221 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/pma_state.py +115 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/ports/agent_backend.py +2 -5
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/ports/run_event.py +1 -4
- codex_autorunner-1.2.0/src/codex_autorunner/core/prompt.py +8 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/prompts.py +159 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/redaction.py +0 -4
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/review_context.py +11 -9
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/runner_controller.py +35 -33
- codex_autorunner-1.2.0/src/codex_autorunner/core/runner_state.py +147 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/runtime.py +829 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/sqlite_utils.py +13 -4
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/state.py +7 -10
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/state_roots.py +5 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/templates/__init__.py +39 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/templates/git_mirror.py +234 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/templates/provenance.py +56 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/templates/scan_cache.py +120 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/ticket_linter_cli.py +17 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/ticket_manager_cli.py +154 -92
- codex_autorunner-1.2.0/src/codex_autorunner/core/time_utils.py +11 -0
- codex_autorunner-1.2.0/src/codex_autorunner/core/types.py +18 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/utils.py +34 -6
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/flows/review/service.py +23 -25
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/flows/ticket_flow/definition.py +43 -1
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/agents/__init__.py +2 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/agents/backend_orchestrator.py +18 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/agents/codex_backend.py +19 -8
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/agents/runner.py +3 -8
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/agents/wiring.py +8 -0
- codex_autorunner-1.2.0/src/codex_autorunner/integrations/telegram/doctor.py +269 -0
- codex_autorunner-1.2.0/src/codex_autorunner/integrations/telegram/handlers/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/commands/execution.py +236 -74
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/commands/files.py +314 -75
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/commands/flows.py +346 -58
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/commands/workspace.py +498 -37
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/commands_runtime.py +202 -45
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/commands_spec.py +18 -7
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/messages.py +26 -1
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/helpers.py +1 -3
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/runtime.py +9 -4
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/service.py +30 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/state.py +38 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/ticket_flow_bridge.py +10 -4
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/transport.py +10 -3
- codex_autorunner-1.2.0/src/codex_autorunner/integrations/templates/__init__.py +27 -0
- codex_autorunner-1.2.0/src/codex_autorunner/integrations/templates/scan_agent.py +312 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/server.py +2 -2
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/agentControls.js +21 -5
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/app.js +115 -11
- codex_autorunner-1.2.0/src/codex_autorunner/static/chatUploads.js +137 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/docChatCore.js +185 -13
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/fileChat.js +68 -40
- codex_autorunner-1.2.0/src/codex_autorunner/static/fileboxUi.js +159 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/hub.js +46 -81
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/index.html +303 -24
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/messages.js +82 -4
- codex_autorunner-1.2.0/src/codex_autorunner/static/notifications.js +255 -0
- codex_autorunner-1.2.0/src/codex_autorunner/static/pma.js +1167 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/settings.js +3 -0
- codex_autorunner-1.2.0/src/codex_autorunner/static/streamUtils.js +57 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/styles.css +9125 -6742
- codex_autorunner-1.2.0/src/codex_autorunner/static/templateReposSettings.js +225 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/ticketChatActions.js +165 -3
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/ticketChatStream.js +17 -119
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/ticketEditor.js +41 -13
- codex_autorunner-1.2.0/src/codex_autorunner/static/ticketTemplates.js +798 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/tickets.js +69 -19
- codex_autorunner-1.2.0/src/codex_autorunner/static/turnEvents.js +27 -0
- codex_autorunner-1.2.0/src/codex_autorunner/static/turnResume.js +33 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/utils.js +28 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/workspace.js +258 -44
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/workspaceFileBrowser.js +6 -4
- codex_autorunner-1.2.0/src/codex_autorunner/surfaces/cli/cli.py +2534 -0
- codex_autorunner-1.2.0/src/codex_autorunner/surfaces/cli/pma_cli.py +817 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/app.py +253 -49
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/__init__.py +4 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/analytics.py +29 -22
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/file_chat.py +317 -36
- codex_autorunner-1.2.0/src/codex_autorunner/surfaces/web/routes/filebox.py +227 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/flows.py +219 -29
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/messages.py +70 -39
- codex_autorunner-1.2.0/src/codex_autorunner/surfaces/web/routes/pma.py +1652 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/repos.py +1 -1
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/shared.py +0 -3
- codex_autorunner-1.2.0/src/codex_autorunner/surfaces/web/routes/templates.py +634 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/runner_manager.py +2 -2
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/schemas.py +70 -18
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/tickets/agent_pool.py +27 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/tickets/files.py +33 -16
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/tickets/lint.py +50 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/tickets/models.py +3 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/tickets/outbox.py +41 -5
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/tickets/runner.py +350 -69
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0/src/codex_autorunner.egg-info}/PKG-INFO +15 -19
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner.egg-info/SOURCES.txt +57 -7
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_about_car_terminal_context.py +3 -3
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_agents_registry.py +63 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_app_server_thread_registry.py +10 -1
- codex_autorunner-1.2.0/tests/test_cli_hub_snapshot.py +206 -0
- codex_autorunner-1.2.0/tests/test_cli_hub_worktree.py +172 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_cli_status.py +0 -3
- codex_autorunner-1.2.0/tests/test_cli_templates_apply.py +250 -0
- codex_autorunner-1.2.0/tests/test_cli_templates_fetch.py +154 -0
- codex_autorunner-1.2.0/tests/test_cli_templates_repos.py +319 -0
- codex_autorunner-1.2.0/tests/test_cli_ticket_flow_guard.py +38 -0
- codex_autorunner-1.2.0/tests/test_codex_backend_security.py +167 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_codex_runner.py +3 -3
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_core_web_boundary.py +3 -3
- codex_autorunner-1.2.0/tests/test_doctor_checks.py +118 -0
- codex_autorunner-1.2.0/tests/test_durable_writes.py +143 -0
- codex_autorunner-1.2.0/tests/test_file_chat_prompt.py +26 -0
- codex_autorunner-1.2.0/tests/test_filebox.py +85 -0
- codex_autorunner-1.2.0/tests/test_hub_app_context.py +24 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_hub_supervisor.py +64 -22
- codex_autorunner-1.2.0/tests/test_lifecycle_events.py +130 -0
- codex_autorunner-1.2.0/tests/test_opencode_agent_pool.py +555 -0
- codex_autorunner-1.2.0/tests/test_pma_audit_safety.py +163 -0
- codex_autorunner-1.2.0/tests/test_pma_bootstrap.py +56 -0
- codex_autorunner-1.2.0/tests/test_pma_cli.py +298 -0
- codex_autorunner-1.2.0/tests/test_pma_context.py +348 -0
- codex_autorunner-1.2.0/tests/test_pma_lifecycle.py +137 -0
- codex_autorunner-1.2.0/tests/test_pma_routes.py +693 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_redaction.py +1 -9
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_review_context.py +5 -11
- codex_autorunner-1.2.0/tests/test_runner_controller.py +80 -0
- codex_autorunner-1.2.0/tests/test_runner_state.py +103 -0
- codex_autorunner-1.2.0/tests/test_telegram_car_context.py +18 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_command_registry.py +0 -9
- codex_autorunner-1.2.0/tests/test_telegram_files_pma.py +99 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_flow_aliases.py +16 -16
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_flow_status.py +148 -0
- codex_autorunner-1.2.0/tests/test_telegram_pma_routing.py +702 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_state.py +22 -1
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_status_rate_limits.py +16 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_ticket_linter_cli.py +25 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_ticket_manager_cli.py +48 -0
- codex_autorunner-1.2.0/tests/test_time_utils.py +17 -0
- codex_autorunner-1.1.0/src/codex_autorunner/bootstrap.py +0 -145
- codex_autorunner-1.1.0/src/codex_autorunner/core/__init__.py +0 -5
- codex_autorunner-1.1.0/src/codex_autorunner/core/adapter_utils.py +0 -21
- codex_autorunner-1.1.0/src/codex_autorunner/core/docs.py +0 -122
- codex_autorunner-1.1.0/src/codex_autorunner/core/engine.py +0 -3302
- codex_autorunner-1.1.0/src/codex_autorunner/core/prompt.py +0 -88
- codex_autorunner-1.1.0/src/codex_autorunner/core/prompts.py +0 -275
- codex_autorunner-1.1.0/src/codex_autorunner/integrations/telegram/doctor.py +0 -47
- codex_autorunner-1.1.0/src/codex_autorunner/surfaces/cli/cli.py +0 -1224
- codex_autorunner-1.1.0/tests/test_engine_app_server.py +0 -198
- codex_autorunner-1.1.0/tests/test_engine_end_review.py +0 -102
- codex_autorunner-1.1.0/tests/test_engine_logs.py +0 -34
- codex_autorunner-1.1.0/tests/test_opencode_agent_pool.py +0 -120
- codex_autorunner-1.1.0/tests/test_prompt.py +0 -51
- codex_autorunner-1.1.0/tests/test_runner_controller.py +0 -295
- codex_autorunner-1.1.0/tests/test_sse_streams.py +0 -26
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/LICENSE +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/setup.cfg +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/__main__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/base.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/codex/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/codex/harness.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/opencode/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/opencode/agent_config.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/opencode/constants.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/opencode/events.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/opencode/harness.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/opencode/logging.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/opencode/run_prompt.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/opencode/runtime.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/types.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/api.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/cli.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/codex_cli.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/codex_runner.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/app_server_ids.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/app_server_logging.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/app_server_prompts.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/app_server_utils.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/archive.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/circuit_breaker.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/codex_runner.py +0 -0
- /codex_autorunner-1.1.0/src/codex_autorunner/integrations/telegram/handlers/__init__.py → /codex_autorunner-1.2.0/src/codex_autorunner/core/docs.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/drafts.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/exceptions.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/flows/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/flows/definition.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/flows/models.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/flows/reasons.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/git_utils.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/injected_context.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/locks.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/logging_utils.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/notifications.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/optional_dependencies.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/patch_utils.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/ports/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/ports/backend_orchestrator.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/request_context.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/retry.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/run_index.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/runner_process.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/supervisor_protocol.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/supervisor_utils.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/text_delta_coalescer.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/update.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/update_paths.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/update_runner.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/core/usage.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/discovery.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/flows/review/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/flows/ticket_flow/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/housekeeping.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/agents/codex_adapter.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/agents/opencode_adapter.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/agents/opencode_backend.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/app_server/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/app_server/client.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/app_server/env.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/app_server/event_buffer.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/app_server/supervisor.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/github/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/github/service.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/adapter.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/api_schemas.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/commands_registry.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/config.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/constants.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/dispatch.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/approvals.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/callbacks.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/commands/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/commands/approvals.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/commands/formatting.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/commands/github.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/commands/shared.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/commands/voice.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/questions.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/selections.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/handlers/utils.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/notifications.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/outbox.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/overflow.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/progress_stream.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/rendering.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/retry.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/trigger_mode.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/types.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/integrations/telegram/voice.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/manifest.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/plugin_api.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/agents.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/analytics.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/app_server.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/base.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/file_chat.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/flows.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/messages.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/repos.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/review.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/sessions.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/settings.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/shared.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/system.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/usage.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/voice.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/routes/workspace.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/agentEvents.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/archive.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/archiveApi.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/autoRefresh.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/bootstrap.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/bus.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/cache.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/constants.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/dashboard.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/diffRenderer.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/docChatStorage.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/docChatVoice.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/docEditor.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/env.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/eventSummarizer.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/health.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/liveUpdates.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/loader.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/mobileCompact.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/preserve.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/smartRefresh.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/tabs.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/terminal.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/terminalManager.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/ticketChatEvents.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/ticketChatStorage.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/ticketVoice.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/LICENSE.xterm +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-cyrillic-ext.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-cyrillic.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-greek.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-latin-ext.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-latin.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-vietnamese.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-cyrillic-ext.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-cyrillic.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-greek.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-latin-ext.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-latin.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-vietnamese.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-cyrillic-ext.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-cyrillic.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-greek.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-latin-ext.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-latin.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-vietnamese.woff2 +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/OFL.txt +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/xterm-addon-fit.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/xterm.css +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/vendor/xterm.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/voice.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/static/workspaceApi.js +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/cli/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/cli/codex_cli.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/telegram/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/hub_jobs.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/middleware.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/pty_session.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/review.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/agents.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/app_server.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/archive.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/base.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/review.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/sessions.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/settings.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/system.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/terminal_images.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/usage.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/voice.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/routes/workspace.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/static_assets.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/static_refresh.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/surfaces/web/terminal_sessions.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/tickets/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/tickets/frontmatter.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/tickets/replies.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/tickets/spec_ingest.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/voice/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/voice/capture.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/voice/config.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/voice/provider.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/voice/providers/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/voice/providers/openai_whisper.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/voice/resolver.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/voice/service.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/web/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/web/app.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/web/hub_jobs.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/web/middleware.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/web/pty_session.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/web/runner_manager.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/web/schemas.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/web/static_assets.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/web/static_refresh.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/web/terminal_sessions.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/workspace/__init__.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/workspace/paths.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner.egg-info/dependency_links.txt +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner.egg-info/entry_points.txt +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner.egg-info/requires.txt +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner.egg-info/top_level.txt +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_agent_run_events.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_agents_plugins.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_api_contract.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_app_server_client.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_app_server_event_formatter.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_app_server_events.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_app_server_prompts.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_app_server_supervisor.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_archive_worktree.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_auth_middleware.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_base_path.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_base_path_static.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_cli_init.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_cli_sessions.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_codex_app_server_integration.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_codex_cli_flags.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_config_resolution.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_file_chat_drafts.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_housekeeping.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_hub_create.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_hub_foundation.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_hub_terminal_sessions.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_hub_ui_escape.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_lock_utils.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_logging_utils.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_notifications.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_opencode_agent_config.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_opencode_backend_streaming.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_opencode_client.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_opencode_event_formatter.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_opencode_integration.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_opencode_review_arguments.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_opencode_runtime.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_optional_dependencies.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_origin_middleware.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_patch_utils.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_request_logging.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_review_service.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_state_lock.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_state_sessions.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_static.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_static_asset_cache.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_system_update_check.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_system_update_worker.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_adapter.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_bot_config.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_bot_integration.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_bot_lock.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_cache_cleanup.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_codex_feature_flags.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_fast_ack.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_flow_bootstrap.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_flow_callback_actions.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_flow_commands.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_flow_lifecycle.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_handlers_callbacks.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_handlers_messages.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_interrupt_status.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_media_batch_failure.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_opencode_context_cache.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_opencode_usage.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_outbox.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_overflow.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_paths_compatible.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_progress_stream.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_review_opencode.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_task_tracking.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_thread_paths.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_ticket_flow_bridge.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_topic_queue.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_transport.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_trigger_mode.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_turn_queue.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_update_dedupe.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_telegram_whisper_disclaimer.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_terminal_idle_timeout.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_terminal_input_dedupe.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_ticket_flow_approval_config.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_update_paths.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_usage.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_voice_capture.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_voice_config.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_voice_service.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_voice_transcribe_endpoint.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_voice_ui.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_voice_whisper_mime_types.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_voice_whisper_provider.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_workspace_functional.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_workspace_helpers.py +0 -0
- {codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/tests/test_workspace_paths.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-autorunner
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: Codex autorunner CLI per DESIGN-V1
|
|
5
5
|
Author: Codex
|
|
6
6
|
License: MIT License
|
|
@@ -85,7 +85,7 @@ The philosophy behind CAR is to let the agents do what they do best, and get out
|
|
|
85
85
|
CAR treats tickets as the control plane and models as the execution layer. This means that we rely on agents to follow the instructions written in the tickets. If you use a sufficiently weak model, CAR may not work well for you. CAR is an amplifier for agent capabilities. Agents who like to scope creep (create too many new tickets) or reward hack (mark a ticket as done despite it being incomplete) are not a good fit for CAR.
|
|
86
86
|
|
|
87
87
|
## Interaction patterns
|
|
88
|
-
CAR's core is a set of python functions surfaced as a CLI, operating on a file system. There are current
|
|
88
|
+
CAR's core is a set of python functions surfaced as a CLI, operating on a file system. There are current 3 UIs built on top of this core.
|
|
89
89
|
|
|
90
90
|
### Web UI
|
|
91
91
|
The web UI is the main control plane for CAR. From here you can set up new repositories or clone existing ones, chat with agents using their TUI, and run the ticket autorunner. There are many quality-of-life features like Whisper integration, editing documents by chatting with AI (useful for mobile), viewing usage analytics, and much more. The Web UI is the most full featured user-facing interface and a good starting point for trying out CAR.
|
|
@@ -95,30 +95,23 @@ I recommend serving the web UI over Tailscale. There is an auth token option but
|
|
|
95
95
|
### Telegram
|
|
96
96
|
Telegram is the "on-the-go" and notification hub for CAR. From here you can kick off and monitor existing tickets, set up new tickets, and chat with agents. Your primary UX here is asking the agent to do things for you rather than you doing it yourself like you would on the web UI. This is great for on-the-go work, but it doesn't have full feature parity with the web UI.
|
|
97
97
|
|
|
98
|
+
### Project Manager Agent
|
|
99
|
+
The project manager agent (PMA) is a way to use an AI agent to run CAR. For example instead of making/editing tickets in the UI, you can ask the PMA to do it for you. Instead of starting a ticket flow, the PMA can babysit it for you. The PMA can be accessed in the web and in Telegram, and also uses the CAR CLI directly.
|
|
100
|
+
|
|
98
101
|
## Quickstart
|
|
99
102
|
|
|
100
103
|
The fastest way to get started is to pass [this setup guide](docs/AGENT_SETUP_GUIDE.md) to your favorite AI agent. The agent will walk you through installation and configuration interactively based on your environment.
|
|
101
104
|
|
|
102
|
-
|
|
105
|
+
### From source (repo checkout)
|
|
103
106
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
# Initialize in your repo
|
|
109
|
-
```
|
|
110
|
-
cd /path/to/your/repo
|
|
111
|
-
car init
|
|
112
|
-
```
|
|
113
|
-
# Verify setup
|
|
114
|
-
```
|
|
115
|
-
car doctor
|
|
116
|
-
```
|
|
117
|
-
# Create a ticket and run
|
|
118
|
-
```
|
|
119
|
-
car run
|
|
107
|
+
If you're working from a fresh clone of this repo, you can run the repo-local CLI shim:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
./car --help
|
|
120
111
|
```
|
|
121
112
|
|
|
113
|
+
The shim will try `PYTHONPATH=src` first and, if dependencies are missing, will bootstrap a local `.venv` and install CAR.
|
|
114
|
+
|
|
122
115
|
## Supported models
|
|
123
116
|
CAR currently supports:
|
|
124
117
|
- Codex
|
|
@@ -150,5 +143,8 @@ On the go? The web UI is mobile responsive, or if you prefer you can type or voi
|
|
|
150
143
|

|
|
151
144
|

|
|
152
145
|
|
|
146
|
+
Don't want to use the product directly? Delegate work to the PMA.
|
|
147
|
+

|
|
148
|
+
|
|
153
149
|
## Star history
|
|
154
150
|
[](https://star-history.com/#Git-on-my-level/codex-autorunner&Date)
|
|
@@ -21,7 +21,7 @@ The philosophy behind CAR is to let the agents do what they do best, and get out
|
|
|
21
21
|
CAR treats tickets as the control plane and models as the execution layer. This means that we rely on agents to follow the instructions written in the tickets. If you use a sufficiently weak model, CAR may not work well for you. CAR is an amplifier for agent capabilities. Agents who like to scope creep (create too many new tickets) or reward hack (mark a ticket as done despite it being incomplete) are not a good fit for CAR.
|
|
22
22
|
|
|
23
23
|
## Interaction patterns
|
|
24
|
-
CAR's core is a set of python functions surfaced as a CLI, operating on a file system. There are current
|
|
24
|
+
CAR's core is a set of python functions surfaced as a CLI, operating on a file system. There are current 3 UIs built on top of this core.
|
|
25
25
|
|
|
26
26
|
### Web UI
|
|
27
27
|
The web UI is the main control plane for CAR. From here you can set up new repositories or clone existing ones, chat with agents using their TUI, and run the ticket autorunner. There are many quality-of-life features like Whisper integration, editing documents by chatting with AI (useful for mobile), viewing usage analytics, and much more. The Web UI is the most full featured user-facing interface and a good starting point for trying out CAR.
|
|
@@ -31,30 +31,23 @@ I recommend serving the web UI over Tailscale. There is an auth token option but
|
|
|
31
31
|
### Telegram
|
|
32
32
|
Telegram is the "on-the-go" and notification hub for CAR. From here you can kick off and monitor existing tickets, set up new tickets, and chat with agents. Your primary UX here is asking the agent to do things for you rather than you doing it yourself like you would on the web UI. This is great for on-the-go work, but it doesn't have full feature parity with the web UI.
|
|
33
33
|
|
|
34
|
+
### Project Manager Agent
|
|
35
|
+
The project manager agent (PMA) is a way to use an AI agent to run CAR. For example instead of making/editing tickets in the UI, you can ask the PMA to do it for you. Instead of starting a ticket flow, the PMA can babysit it for you. The PMA can be accessed in the web and in Telegram, and also uses the CAR CLI directly.
|
|
36
|
+
|
|
34
37
|
## Quickstart
|
|
35
38
|
|
|
36
39
|
The fastest way to get started is to pass [this setup guide](docs/AGENT_SETUP_GUIDE.md) to your favorite AI agent. The agent will walk you through installation and configuration interactively based on your environment.
|
|
37
40
|
|
|
38
|
-
|
|
41
|
+
### From source (repo checkout)
|
|
39
42
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
# Initialize in your repo
|
|
45
|
-
```
|
|
46
|
-
cd /path/to/your/repo
|
|
47
|
-
car init
|
|
48
|
-
```
|
|
49
|
-
# Verify setup
|
|
50
|
-
```
|
|
51
|
-
car doctor
|
|
52
|
-
```
|
|
53
|
-
# Create a ticket and run
|
|
54
|
-
```
|
|
55
|
-
car run
|
|
43
|
+
If you're working from a fresh clone of this repo, you can run the repo-local CLI shim:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
./car --help
|
|
56
47
|
```
|
|
57
48
|
|
|
49
|
+
The shim will try `PYTHONPATH=src` first and, if dependencies are missing, will bootstrap a local `.venv` and install CAR.
|
|
50
|
+
|
|
58
51
|
## Supported models
|
|
59
52
|
CAR currently supports:
|
|
60
53
|
- Codex
|
|
@@ -86,5 +79,8 @@ On the go? The web UI is mobile responsive, or if you prefer you can type or voi
|
|
|
86
79
|

|
|
87
80
|

|
|
88
81
|
|
|
82
|
+
Don't want to use the product directly? Delegate work to the PMA.
|
|
83
|
+

|
|
84
|
+
|
|
89
85
|
## Star history
|
|
90
86
|
[](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 = "1.
|
|
3
|
+
version = "1.2.0"
|
|
4
4
|
description = "Codex autorunner CLI per DESIGN-V1"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = {file = "LICENSE"}
|
|
@@ -108,6 +108,7 @@ ignore = ["E501"]
|
|
|
108
108
|
"src/codex_autorunner/static_assets.py" = ["F403"]
|
|
109
109
|
"src/codex_autorunner/cli.py" = ["B008"]
|
|
110
110
|
"src/codex_autorunner/surfaces/cli/cli.py" = ["B008"]
|
|
111
|
+
"src/codex_autorunner/surfaces/cli/pma_cli.py" = ["B008"]
|
|
111
112
|
"src/codex_autorunner/routes/terminal_images.py" = ["B008"]
|
|
112
113
|
"src/codex_autorunner/surfaces/web/routes/terminal_images.py" = ["B008"]
|
|
113
114
|
"src/codex_autorunner/routes/voice.py" = ["B008"]
|
{codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/opencode/client.py
RENAMED
|
@@ -21,6 +21,7 @@ class OpenCodeApiProfile:
|
|
|
21
21
|
|
|
22
22
|
supports_prompt_async: bool = True
|
|
23
23
|
supports_global_endpoints: bool = True
|
|
24
|
+
max_text_chars: Optional[int] = None
|
|
24
25
|
spec_fetched: bool = False
|
|
25
26
|
|
|
26
27
|
|
|
@@ -83,6 +84,7 @@ class OpenCodeClient:
|
|
|
83
84
|
*,
|
|
84
85
|
auth: Optional[tuple[str, str]] = None,
|
|
85
86
|
timeout: Optional[float] = None,
|
|
87
|
+
max_text_chars: Optional[int] = None,
|
|
86
88
|
logger: Optional[logging.Logger] = None,
|
|
87
89
|
) -> None:
|
|
88
90
|
self._client = httpx.AsyncClient(
|
|
@@ -93,6 +95,10 @@ class OpenCodeClient:
|
|
|
93
95
|
self._logger = logger or logging.getLogger(__name__)
|
|
94
96
|
self._api_profile: Optional[OpenCodeApiProfile] = None
|
|
95
97
|
self._api_profile_lock = asyncio.Lock()
|
|
98
|
+
self._max_text_chars_override = (
|
|
99
|
+
int(max_text_chars) if isinstance(max_text_chars, int) else None
|
|
100
|
+
)
|
|
101
|
+
self._max_text_chars_cache: Optional[int] = None
|
|
96
102
|
|
|
97
103
|
async def close(self) -> None:
|
|
98
104
|
await self._client.aclose()
|
|
@@ -121,6 +127,7 @@ class OpenCodeClient:
|
|
|
121
127
|
profile.supports_global_endpoints = self.has_endpoint(
|
|
122
128
|
spec, "get", "/global/health"
|
|
123
129
|
) or self.has_endpoint(spec, "get", "/global/event")
|
|
130
|
+
profile.max_text_chars = self._extract_max_text_chars(spec)
|
|
124
131
|
|
|
125
132
|
log_event(
|
|
126
133
|
self._logger,
|
|
@@ -147,6 +154,103 @@ class OpenCodeClient:
|
|
|
147
154
|
return OpenCodeApiProfile()
|
|
148
155
|
return self._api_profile
|
|
149
156
|
|
|
157
|
+
@staticmethod
|
|
158
|
+
def _extract_max_text_chars(spec: dict[str, Any]) -> Optional[int]:
|
|
159
|
+
if not isinstance(spec, dict):
|
|
160
|
+
return None
|
|
161
|
+
components = spec.get("components")
|
|
162
|
+
if not isinstance(components, dict):
|
|
163
|
+
return None
|
|
164
|
+
schemas = components.get("schemas")
|
|
165
|
+
if not isinstance(schemas, dict):
|
|
166
|
+
return None
|
|
167
|
+
candidates: list[int] = []
|
|
168
|
+
for schema in schemas.values():
|
|
169
|
+
max_len = OpenCodeClient._find_text_max_length(schema)
|
|
170
|
+
if isinstance(max_len, int) and max_len > 0:
|
|
171
|
+
candidates.append(max_len)
|
|
172
|
+
return min(candidates) if candidates else None
|
|
173
|
+
|
|
174
|
+
@staticmethod
|
|
175
|
+
def _find_text_max_length(schema: Any) -> Optional[int]:
|
|
176
|
+
if not isinstance(schema, dict):
|
|
177
|
+
return None
|
|
178
|
+
candidates: list[int] = []
|
|
179
|
+
properties = schema.get("properties")
|
|
180
|
+
if isinstance(properties, dict) and "text" in properties:
|
|
181
|
+
text_schema = properties.get("text")
|
|
182
|
+
if isinstance(text_schema, dict):
|
|
183
|
+
max_len = text_schema.get("maxLength")
|
|
184
|
+
if isinstance(max_len, int) and max_len > 0:
|
|
185
|
+
candidates.append(max_len)
|
|
186
|
+
for key in ("allOf", "anyOf", "oneOf"):
|
|
187
|
+
seq = schema.get(key)
|
|
188
|
+
if isinstance(seq, list):
|
|
189
|
+
for item in seq:
|
|
190
|
+
item_len = OpenCodeClient._find_text_max_length(item)
|
|
191
|
+
if isinstance(item_len, int) and item_len > 0:
|
|
192
|
+
candidates.append(item_len)
|
|
193
|
+
return min(candidates) if candidates else None
|
|
194
|
+
|
|
195
|
+
def set_max_text_chars(self, value: Optional[int]) -> None:
|
|
196
|
+
self._max_text_chars_override = int(value) if isinstance(value, int) else None
|
|
197
|
+
self._max_text_chars_cache = None
|
|
198
|
+
|
|
199
|
+
async def _resolve_max_text_chars(
|
|
200
|
+
self, profile: Optional[OpenCodeApiProfile] = None
|
|
201
|
+
) -> Optional[int]:
|
|
202
|
+
if self._max_text_chars_cache is not None:
|
|
203
|
+
return self._max_text_chars_cache
|
|
204
|
+
if profile is None:
|
|
205
|
+
profile = await self.detect_api_shape()
|
|
206
|
+
detected = (
|
|
207
|
+
profile.max_text_chars
|
|
208
|
+
if isinstance(profile.max_text_chars, int) and profile.max_text_chars > 0
|
|
209
|
+
else None
|
|
210
|
+
)
|
|
211
|
+
override = (
|
|
212
|
+
self._max_text_chars_override
|
|
213
|
+
if isinstance(self._max_text_chars_override, int)
|
|
214
|
+
and self._max_text_chars_override > 0
|
|
215
|
+
else None
|
|
216
|
+
)
|
|
217
|
+
if override is None:
|
|
218
|
+
resolved = detected
|
|
219
|
+
elif detected is None:
|
|
220
|
+
resolved = override
|
|
221
|
+
else:
|
|
222
|
+
resolved = min(override, detected)
|
|
223
|
+
self._max_text_chars_cache = resolved
|
|
224
|
+
return resolved
|
|
225
|
+
|
|
226
|
+
@staticmethod
|
|
227
|
+
def _split_text(text: str, max_chars: int) -> list[str]:
|
|
228
|
+
if max_chars <= 0 or len(text) <= max_chars:
|
|
229
|
+
return [text]
|
|
230
|
+
parts: list[str] = []
|
|
231
|
+
start = 0
|
|
232
|
+
length = len(text)
|
|
233
|
+
while start < length:
|
|
234
|
+
end = min(start + max_chars, length)
|
|
235
|
+
if end < length:
|
|
236
|
+
split = text.rfind("\n", start, end)
|
|
237
|
+
if split <= start:
|
|
238
|
+
split = text.rfind(" ", start, end)
|
|
239
|
+
if split > start:
|
|
240
|
+
end = split + 1
|
|
241
|
+
parts.append(text[start:end])
|
|
242
|
+
start = end
|
|
243
|
+
return [part for part in parts if part]
|
|
244
|
+
|
|
245
|
+
async def _build_text_parts(
|
|
246
|
+
self, message: str, profile: Optional[OpenCodeApiProfile] = None
|
|
247
|
+
) -> list[dict[str, str]]:
|
|
248
|
+
limit = await self._resolve_max_text_chars(profile)
|
|
249
|
+
if limit is None:
|
|
250
|
+
return [{"type": "text", "text": message}]
|
|
251
|
+
chunks = self._split_text(message, limit)
|
|
252
|
+
return [{"type": "text", "text": chunk} for chunk in chunks]
|
|
253
|
+
|
|
150
254
|
def _dir_params(self, directory: Optional[str]) -> dict[str, str]:
|
|
151
255
|
return {"directory": directory} if directory else {}
|
|
152
256
|
|
|
@@ -275,8 +379,10 @@ class OpenCodeClient:
|
|
|
275
379
|
model: Optional[dict[str, str]] = None,
|
|
276
380
|
variant: Optional[str] = None,
|
|
277
381
|
) -> Any:
|
|
382
|
+
profile = await self.detect_api_shape()
|
|
383
|
+
parts = await self._build_text_parts(message, profile)
|
|
278
384
|
payload: dict[str, Any] = {
|
|
279
|
-
"parts":
|
|
385
|
+
"parts": parts,
|
|
280
386
|
}
|
|
281
387
|
if agent:
|
|
282
388
|
payload["agent"] = agent
|
|
@@ -300,8 +406,10 @@ class OpenCodeClient:
|
|
|
300
406
|
model: Optional[dict[str, str]] = None,
|
|
301
407
|
variant: Optional[str] = None,
|
|
302
408
|
) -> Any:
|
|
409
|
+
profile = await self.detect_api_shape()
|
|
410
|
+
parts = await self._build_text_parts(message, profile)
|
|
303
411
|
payload: dict[str, Any] = {
|
|
304
|
-
"parts":
|
|
412
|
+
"parts": parts,
|
|
305
413
|
}
|
|
306
414
|
if agent:
|
|
307
415
|
payload["agent"] = agent
|
|
@@ -310,7 +418,6 @@ class OpenCodeClient:
|
|
|
310
418
|
if variant:
|
|
311
419
|
payload["variant"] = variant
|
|
312
420
|
|
|
313
|
-
profile = await self.detect_api_shape()
|
|
314
421
|
if profile.supports_prompt_async:
|
|
315
422
|
return await self._request(
|
|
316
423
|
"POST",
|
|
@@ -335,8 +442,10 @@ class OpenCodeClient:
|
|
|
335
442
|
model: Optional[dict[str, str]] = None,
|
|
336
443
|
variant: Optional[str] = None,
|
|
337
444
|
) -> Any:
|
|
445
|
+
profile = await self.detect_api_shape()
|
|
446
|
+
parts = await self._build_text_parts(message, profile)
|
|
338
447
|
payload: dict[str, Any] = {
|
|
339
|
-
"parts":
|
|
448
|
+
"parts": parts,
|
|
340
449
|
}
|
|
341
450
|
if agent:
|
|
342
451
|
payload["agent"] = agent
|
{codex_autorunner-1.1.0 → codex_autorunner-1.2.0}/src/codex_autorunner/agents/opencode/supervisor.py
RENAMED
|
@@ -55,6 +55,7 @@ class OpenCodeSupervisor:
|
|
|
55
55
|
base_url: Optional[str] = None,
|
|
56
56
|
subagent_models: Optional[Mapping[str, str]] = None,
|
|
57
57
|
session_stall_timeout_seconds: Optional[float] = None,
|
|
58
|
+
max_text_chars: Optional[int] = None,
|
|
58
59
|
) -> None:
|
|
59
60
|
self._command = [str(arg) for arg in command]
|
|
60
61
|
self._logger = logger or logging.getLogger(__name__)
|
|
@@ -70,6 +71,7 @@ class OpenCodeSupervisor:
|
|
|
70
71
|
self._base_env = base_env
|
|
71
72
|
self._base_url = base_url
|
|
72
73
|
self._subagent_models = subagent_models or {}
|
|
74
|
+
self._max_text_chars = max_text_chars
|
|
73
75
|
self._handles: dict[str, OpenCodeHandle] = {}
|
|
74
76
|
self._lock: Optional[asyncio.Lock] = None
|
|
75
77
|
|
|
@@ -275,6 +277,7 @@ class OpenCodeSupervisor:
|
|
|
275
277
|
base_url,
|
|
276
278
|
auth=self._auth,
|
|
277
279
|
timeout=self._request_timeout,
|
|
280
|
+
max_text_chars=self._max_text_chars,
|
|
278
281
|
logger=self._logger,
|
|
279
282
|
)
|
|
280
283
|
try:
|
|
@@ -344,6 +347,7 @@ class OpenCodeSupervisor:
|
|
|
344
347
|
base_url,
|
|
345
348
|
auth=self._auth,
|
|
346
349
|
timeout=self._request_timeout,
|
|
350
|
+
max_text_chars=self._max_text_chars,
|
|
347
351
|
logger=self._logger,
|
|
348
352
|
)
|
|
349
353
|
try:
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import importlib.metadata
|
|
4
4
|
import logging
|
|
5
|
+
import threading
|
|
5
6
|
from dataclasses import dataclass
|
|
6
7
|
from typing import Any, Callable, Iterable, Literal, Optional
|
|
7
8
|
|
|
@@ -102,6 +103,9 @@ _BUILTIN_AGENTS: dict[str, AgentDescriptor] = {
|
|
|
102
103
|
# Lazy-loaded cache of built-in + plugin agents.
|
|
103
104
|
_AGENT_CACHE: Optional[dict[str, AgentDescriptor]] = None
|
|
104
105
|
|
|
106
|
+
# Lock to protect cache initialization and reload from concurrent access.
|
|
107
|
+
_AGENT_CACHE_LOCK = threading.Lock()
|
|
108
|
+
|
|
105
109
|
|
|
106
110
|
def _select_entry_points(group: str) -> Iterable[importlib.metadata.EntryPoint]:
|
|
107
111
|
"""Compatibility wrapper for `importlib.metadata.entry_points()` across py versions."""
|
|
@@ -164,10 +168,13 @@ def _load_agent_plugins() -> dict[str, AgentDescriptor]:
|
|
|
164
168
|
continue
|
|
165
169
|
|
|
166
170
|
api_version_raw = getattr(descriptor, "plugin_api_version", None)
|
|
167
|
-
|
|
168
|
-
api_version = int(api_version_raw)
|
|
169
|
-
except Exception:
|
|
171
|
+
if api_version_raw is None:
|
|
170
172
|
api_version = None
|
|
173
|
+
else:
|
|
174
|
+
try:
|
|
175
|
+
api_version = int(api_version_raw)
|
|
176
|
+
except Exception:
|
|
177
|
+
api_version = None
|
|
171
178
|
if api_version is None:
|
|
172
179
|
_logger.warning(
|
|
173
180
|
"Ignoring agent plugin %s: invalid api_version %s",
|
|
@@ -215,9 +222,11 @@ def _load_agent_plugins() -> dict[str, AgentDescriptor]:
|
|
|
215
222
|
def _all_agents() -> dict[str, AgentDescriptor]:
|
|
216
223
|
global _AGENT_CACHE
|
|
217
224
|
if _AGENT_CACHE is None:
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
225
|
+
with _AGENT_CACHE_LOCK:
|
|
226
|
+
if _AGENT_CACHE is None:
|
|
227
|
+
agents = _BUILTIN_AGENTS.copy()
|
|
228
|
+
agents.update(_load_agent_plugins())
|
|
229
|
+
_AGENT_CACHE = agents
|
|
221
230
|
return _AGENT_CACHE
|
|
222
231
|
|
|
223
232
|
|
|
@@ -228,7 +237,8 @@ def reload_agents() -> dict[str, AgentDescriptor]:
|
|
|
228
237
|
"""
|
|
229
238
|
|
|
230
239
|
global _AGENT_CACHE
|
|
231
|
-
|
|
240
|
+
with _AGENT_CACHE_LOCK:
|
|
241
|
+
_AGENT_CACHE = None
|
|
232
242
|
return get_registered_agents()
|
|
233
243
|
|
|
234
244
|
|