codex-autorunner 1.2.0__tar.gz → 1.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. {codex_autorunner-1.2.0/src/codex_autorunner.egg-info → codex_autorunner-1.2.1}/PKG-INFO +1 -1
  2. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/pyproject.toml +1 -1
  3. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/about_car.py +12 -12
  4. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/config.py +2 -2
  5. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/context_awareness.py +1 -0
  6. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/pma_context.py +188 -1
  7. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/adapter.py +1 -1
  8. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/config.py +1 -1
  9. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/messages.py +8 -2
  10. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/archive.js +274 -81
  11. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/archiveApi.js +21 -0
  12. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/constants.js +1 -1
  13. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/notifications.js +33 -0
  14. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/styles.css +16 -0
  15. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/terminalManager.js +22 -3
  16. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/archive.py +197 -0
  17. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/file_chat.py +6 -26
  18. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/schemas.py +11 -0
  19. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1/src/codex_autorunner.egg-info}/PKG-INFO +1 -1
  20. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_pma_context.py +26 -2
  21. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_pma_routing.py +4 -5
  22. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/LICENSE +0 -0
  23. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/README.md +0 -0
  24. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/setup.cfg +0 -0
  25. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/__init__.py +0 -0
  26. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/__main__.py +0 -0
  27. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/__init__.py +0 -0
  28. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/base.py +0 -0
  29. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/codex/__init__.py +0 -0
  30. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/codex/harness.py +0 -0
  31. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/opencode/__init__.py +0 -0
  32. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/opencode/agent_config.py +0 -0
  33. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/opencode/client.py +0 -0
  34. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/opencode/constants.py +0 -0
  35. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/opencode/events.py +0 -0
  36. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/opencode/harness.py +0 -0
  37. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/opencode/logging.py +0 -0
  38. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/opencode/run_prompt.py +0 -0
  39. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/opencode/runtime.py +0 -0
  40. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/opencode/supervisor.py +0 -0
  41. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/registry.py +0 -0
  42. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/agents/types.py +0 -0
  43. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/api.py +0 -0
  44. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/bootstrap.py +0 -0
  45. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/cli.py +0 -0
  46. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/codex_cli.py +0 -0
  47. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/codex_runner.py +0 -0
  48. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/__init__.py +0 -0
  49. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/app_server_ids.py +0 -0
  50. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/app_server_logging.py +0 -0
  51. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/app_server_prompts.py +0 -0
  52. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/app_server_threads.py +0 -0
  53. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/app_server_utils.py +0 -0
  54. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/archive.py +0 -0
  55. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/circuit_breaker.py +0 -0
  56. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/codex_runner.py +0 -0
  57. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/docs.py +0 -0
  58. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/drafts.py +0 -0
  59. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/exceptions.py +0 -0
  60. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/filebox.py +0 -0
  61. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/flows/__init__.py +0 -0
  62. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/flows/controller.py +0 -0
  63. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/flows/definition.py +0 -0
  64. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/flows/models.py +0 -0
  65. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/flows/reasons.py +0 -0
  66. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/flows/reconciler.py +0 -0
  67. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/flows/runtime.py +0 -0
  68. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/flows/store.py +0 -0
  69. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/flows/transition.py +0 -0
  70. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/flows/ux_helpers.py +0 -0
  71. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/flows/worker_process.py +0 -0
  72. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/git_utils.py +0 -0
  73. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/hub.py +0 -0
  74. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/injected_context.py +0 -0
  75. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/lifecycle_events.py +0 -0
  76. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/locks.py +0 -0
  77. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/logging_utils.py +0 -0
  78. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/notifications.py +0 -0
  79. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/optional_dependencies.py +0 -0
  80. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/patch_utils.py +0 -0
  81. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/path_utils.py +0 -0
  82. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/pma_audit.py +0 -0
  83. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/pma_dispatch_interceptor.py +0 -0
  84. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/pma_lifecycle.py +0 -0
  85. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/pma_queue.py +0 -0
  86. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/pma_safety.py +0 -0
  87. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/pma_state.py +0 -0
  88. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/ports/__init__.py +0 -0
  89. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/ports/agent_backend.py +0 -0
  90. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/ports/backend_orchestrator.py +0 -0
  91. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/ports/run_event.py +0 -0
  92. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/prompt.py +0 -0
  93. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/prompts.py +0 -0
  94. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/redaction.py +0 -0
  95. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/request_context.py +0 -0
  96. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/retry.py +0 -0
  97. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/review_context.py +0 -0
  98. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/run_index.py +0 -0
  99. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/runner_controller.py +0 -0
  100. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/runner_process.py +0 -0
  101. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/runner_state.py +0 -0
  102. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/runtime.py +0 -0
  103. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/sqlite_utils.py +0 -0
  104. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/state.py +0 -0
  105. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/state_roots.py +0 -0
  106. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/supervisor_protocol.py +0 -0
  107. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/supervisor_utils.py +0 -0
  108. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/templates/__init__.py +0 -0
  109. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/templates/git_mirror.py +0 -0
  110. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/templates/provenance.py +0 -0
  111. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/templates/scan_cache.py +0 -0
  112. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/text_delta_coalescer.py +0 -0
  113. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/ticket_linter_cli.py +0 -0
  114. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/ticket_manager_cli.py +0 -0
  115. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/time_utils.py +0 -0
  116. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/types.py +0 -0
  117. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/update.py +0 -0
  118. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/update_paths.py +0 -0
  119. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/update_runner.py +0 -0
  120. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/usage.py +0 -0
  121. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/core/utils.py +0 -0
  122. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/discovery.py +0 -0
  123. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/flows/review/__init__.py +0 -0
  124. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/flows/review/service.py +0 -0
  125. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/flows/ticket_flow/__init__.py +0 -0
  126. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/flows/ticket_flow/definition.py +0 -0
  127. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/housekeeping.py +0 -0
  128. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/__init__.py +0 -0
  129. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/agents/__init__.py +0 -0
  130. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/agents/backend_orchestrator.py +0 -0
  131. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/agents/codex_adapter.py +0 -0
  132. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/agents/codex_backend.py +0 -0
  133. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/agents/opencode_adapter.py +0 -0
  134. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/agents/opencode_backend.py +0 -0
  135. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/agents/runner.py +0 -0
  136. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/agents/wiring.py +0 -0
  137. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/app_server/__init__.py +0 -0
  138. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/app_server/client.py +0 -0
  139. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/app_server/env.py +0 -0
  140. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/app_server/event_buffer.py +0 -0
  141. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/app_server/supervisor.py +0 -0
  142. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/github/__init__.py +0 -0
  143. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/github/service.py +0 -0
  144. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/__init__.py +0 -0
  145. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/api_schemas.py +0 -0
  146. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/commands_registry.py +0 -0
  147. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/constants.py +0 -0
  148. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/dispatch.py +0 -0
  149. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/doctor.py +0 -0
  150. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/__init__.py +0 -0
  151. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/approvals.py +0 -0
  152. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/callbacks.py +0 -0
  153. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/commands/__init__.py +0 -0
  154. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/commands/approvals.py +0 -0
  155. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/commands/execution.py +0 -0
  156. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/commands/files.py +0 -0
  157. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/commands/flows.py +0 -0
  158. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/commands/formatting.py +0 -0
  159. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/commands/github.py +0 -0
  160. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/commands/shared.py +0 -0
  161. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/commands/voice.py +0 -0
  162. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/commands/workspace.py +0 -0
  163. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/commands_runtime.py +0 -0
  164. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/commands_spec.py +0 -0
  165. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/questions.py +0 -0
  166. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/selections.py +0 -0
  167. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/handlers/utils.py +0 -0
  168. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/helpers.py +0 -0
  169. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/notifications.py +0 -0
  170. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/outbox.py +0 -0
  171. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/overflow.py +0 -0
  172. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/progress_stream.py +0 -0
  173. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/rendering.py +0 -0
  174. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/retry.py +0 -0
  175. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/runtime.py +0 -0
  176. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/service.py +0 -0
  177. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/state.py +0 -0
  178. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/ticket_flow_bridge.py +0 -0
  179. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/transport.py +0 -0
  180. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/trigger_mode.py +0 -0
  181. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/types.py +0 -0
  182. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/telegram/voice.py +0 -0
  183. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/templates/__init__.py +0 -0
  184. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/integrations/templates/scan_agent.py +0 -0
  185. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/manifest.py +0 -0
  186. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/plugin_api.py +0 -0
  187. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/__init__.py +0 -0
  188. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/agents.py +0 -0
  189. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/analytics.py +0 -0
  190. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/app_server.py +0 -0
  191. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/base.py +0 -0
  192. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/file_chat.py +0 -0
  193. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/flows.py +0 -0
  194. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/messages.py +0 -0
  195. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/repos.py +0 -0
  196. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/review.py +0 -0
  197. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/sessions.py +0 -0
  198. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/settings.py +0 -0
  199. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/shared.py +0 -0
  200. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/system.py +0 -0
  201. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/usage.py +0 -0
  202. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/voice.py +0 -0
  203. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/routes/workspace.py +0 -0
  204. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/server.py +0 -0
  205. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/agentControls.js +0 -0
  206. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/agentEvents.js +0 -0
  207. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/app.js +0 -0
  208. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/autoRefresh.js +0 -0
  209. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/bootstrap.js +0 -0
  210. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/bus.js +0 -0
  211. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/cache.js +0 -0
  212. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/chatUploads.js +0 -0
  213. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/dashboard.js +0 -0
  214. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/diffRenderer.js +0 -0
  215. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/docChatCore.js +0 -0
  216. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/docChatStorage.js +0 -0
  217. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/docChatVoice.js +0 -0
  218. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/docEditor.js +0 -0
  219. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/env.js +0 -0
  220. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/eventSummarizer.js +0 -0
  221. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/fileChat.js +0 -0
  222. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/fileboxUi.js +0 -0
  223. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/health.js +0 -0
  224. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/hub.js +0 -0
  225. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/index.html +0 -0
  226. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/liveUpdates.js +0 -0
  227. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/loader.js +0 -0
  228. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/messages.js +0 -0
  229. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/mobileCompact.js +0 -0
  230. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/pma.js +0 -0
  231. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/preserve.js +0 -0
  232. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/settings.js +0 -0
  233. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/smartRefresh.js +0 -0
  234. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/streamUtils.js +0 -0
  235. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/tabs.js +0 -0
  236. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/templateReposSettings.js +0 -0
  237. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/terminal.js +0 -0
  238. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/ticketChatActions.js +0 -0
  239. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/ticketChatEvents.js +0 -0
  240. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/ticketChatStorage.js +0 -0
  241. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/ticketChatStream.js +0 -0
  242. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/ticketEditor.js +0 -0
  243. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/ticketTemplates.js +0 -0
  244. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/ticketVoice.js +0 -0
  245. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/tickets.js +0 -0
  246. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/turnEvents.js +0 -0
  247. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/turnResume.js +0 -0
  248. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/utils.js +0 -0
  249. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/LICENSE.xterm +0 -0
  250. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-cyrillic-ext.woff2 +0 -0
  251. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-cyrillic.woff2 +0 -0
  252. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-greek.woff2 +0 -0
  253. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-latin-ext.woff2 +0 -0
  254. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-latin.woff2 +0 -0
  255. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-vietnamese.woff2 +0 -0
  256. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-cyrillic-ext.woff2 +0 -0
  257. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-cyrillic.woff2 +0 -0
  258. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-greek.woff2 +0 -0
  259. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-latin-ext.woff2 +0 -0
  260. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-latin.woff2 +0 -0
  261. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-vietnamese.woff2 +0 -0
  262. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-cyrillic-ext.woff2 +0 -0
  263. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-cyrillic.woff2 +0 -0
  264. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-greek.woff2 +0 -0
  265. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-latin-ext.woff2 +0 -0
  266. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-latin.woff2 +0 -0
  267. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-vietnamese.woff2 +0 -0
  268. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/fonts/jetbrains-mono/OFL.txt +0 -0
  269. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/xterm-addon-fit.js +0 -0
  270. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/xterm.css +0 -0
  271. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/vendor/xterm.js +0 -0
  272. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/voice.js +0 -0
  273. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/workspace.js +0 -0
  274. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/workspaceApi.js +0 -0
  275. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/static/workspaceFileBrowser.js +0 -0
  276. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/__init__.py +0 -0
  277. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/cli/__init__.py +0 -0
  278. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/cli/cli.py +0 -0
  279. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/cli/codex_cli.py +0 -0
  280. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/cli/pma_cli.py +0 -0
  281. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/telegram/__init__.py +0 -0
  282. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/__init__.py +0 -0
  283. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/app.py +0 -0
  284. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/hub_jobs.py +0 -0
  285. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/middleware.py +0 -0
  286. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/pty_session.py +0 -0
  287. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/review.py +0 -0
  288. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/__init__.py +0 -0
  289. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/agents.py +0 -0
  290. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/analytics.py +0 -0
  291. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/app_server.py +0 -0
  292. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/base.py +0 -0
  293. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/filebox.py +0 -0
  294. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/flows.py +0 -0
  295. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/messages.py +0 -0
  296. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/pma.py +0 -0
  297. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/repos.py +0 -0
  298. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/review.py +0 -0
  299. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/sessions.py +0 -0
  300. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/settings.py +0 -0
  301. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/shared.py +0 -0
  302. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/system.py +0 -0
  303. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/templates.py +0 -0
  304. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/terminal_images.py +0 -0
  305. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/usage.py +0 -0
  306. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/voice.py +0 -0
  307. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/routes/workspace.py +0 -0
  308. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/runner_manager.py +0 -0
  309. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/static_assets.py +0 -0
  310. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/static_refresh.py +0 -0
  311. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/surfaces/web/terminal_sessions.py +0 -0
  312. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/tickets/__init__.py +0 -0
  313. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/tickets/agent_pool.py +0 -0
  314. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/tickets/files.py +0 -0
  315. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/tickets/frontmatter.py +0 -0
  316. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/tickets/lint.py +0 -0
  317. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/tickets/models.py +0 -0
  318. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/tickets/outbox.py +0 -0
  319. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/tickets/replies.py +0 -0
  320. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/tickets/runner.py +0 -0
  321. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/tickets/spec_ingest.py +0 -0
  322. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/voice/__init__.py +0 -0
  323. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/voice/capture.py +0 -0
  324. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/voice/config.py +0 -0
  325. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/voice/provider.py +0 -0
  326. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/voice/providers/__init__.py +0 -0
  327. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/voice/providers/openai_whisper.py +0 -0
  328. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/voice/resolver.py +0 -0
  329. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/voice/service.py +0 -0
  330. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/web/__init__.py +0 -0
  331. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/web/app.py +0 -0
  332. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/web/hub_jobs.py +0 -0
  333. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/web/middleware.py +0 -0
  334. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/web/pty_session.py +0 -0
  335. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/web/runner_manager.py +0 -0
  336. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/web/schemas.py +0 -0
  337. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/web/static_assets.py +0 -0
  338. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/web/static_refresh.py +0 -0
  339. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/web/terminal_sessions.py +0 -0
  340. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/workspace/__init__.py +0 -0
  341. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner/workspace/paths.py +0 -0
  342. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner.egg-info/SOURCES.txt +0 -0
  343. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner.egg-info/dependency_links.txt +0 -0
  344. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner.egg-info/entry_points.txt +0 -0
  345. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner.egg-info/requires.txt +0 -0
  346. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/src/codex_autorunner.egg-info/top_level.txt +0 -0
  347. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_about_car_terminal_context.py +0 -0
  348. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_agent_run_events.py +0 -0
  349. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_agents_plugins.py +0 -0
  350. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_agents_registry.py +0 -0
  351. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_api_contract.py +0 -0
  352. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_app_server_client.py +0 -0
  353. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_app_server_event_formatter.py +0 -0
  354. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_app_server_events.py +0 -0
  355. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_app_server_prompts.py +0 -0
  356. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_app_server_supervisor.py +0 -0
  357. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_app_server_thread_registry.py +0 -0
  358. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_archive_worktree.py +0 -0
  359. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_auth_middleware.py +0 -0
  360. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_base_path.py +0 -0
  361. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_base_path_static.py +0 -0
  362. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_cli_hub_snapshot.py +0 -0
  363. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_cli_hub_worktree.py +0 -0
  364. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_cli_init.py +0 -0
  365. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_cli_sessions.py +0 -0
  366. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_cli_status.py +0 -0
  367. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_cli_templates_apply.py +0 -0
  368. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_cli_templates_fetch.py +0 -0
  369. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_cli_templates_repos.py +0 -0
  370. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_cli_ticket_flow_guard.py +0 -0
  371. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_codex_app_server_integration.py +0 -0
  372. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_codex_backend_security.py +0 -0
  373. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_codex_cli_flags.py +0 -0
  374. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_codex_runner.py +0 -0
  375. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_config_resolution.py +0 -0
  376. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_core_web_boundary.py +0 -0
  377. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_doctor_checks.py +0 -0
  378. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_durable_writes.py +0 -0
  379. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_file_chat_drafts.py +0 -0
  380. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_file_chat_prompt.py +0 -0
  381. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_filebox.py +0 -0
  382. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_housekeeping.py +0 -0
  383. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_hub_app_context.py +0 -0
  384. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_hub_create.py +0 -0
  385. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_hub_foundation.py +0 -0
  386. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_hub_supervisor.py +0 -0
  387. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_hub_terminal_sessions.py +0 -0
  388. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_hub_ui_escape.py +0 -0
  389. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_lifecycle_events.py +0 -0
  390. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_lock_utils.py +0 -0
  391. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_logging_utils.py +0 -0
  392. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_notifications.py +0 -0
  393. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_opencode_agent_config.py +0 -0
  394. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_opencode_agent_pool.py +0 -0
  395. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_opencode_backend_streaming.py +0 -0
  396. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_opencode_client.py +0 -0
  397. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_opencode_event_formatter.py +0 -0
  398. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_opencode_integration.py +0 -0
  399. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_opencode_review_arguments.py +0 -0
  400. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_opencode_runtime.py +0 -0
  401. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_optional_dependencies.py +0 -0
  402. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_origin_middleware.py +0 -0
  403. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_patch_utils.py +0 -0
  404. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_pma_audit_safety.py +0 -0
  405. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_pma_bootstrap.py +0 -0
  406. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_pma_cli.py +0 -0
  407. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_pma_lifecycle.py +0 -0
  408. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_pma_routes.py +0 -0
  409. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_redaction.py +0 -0
  410. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_request_logging.py +0 -0
  411. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_review_context.py +0 -0
  412. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_review_service.py +0 -0
  413. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_runner_controller.py +0 -0
  414. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_runner_state.py +0 -0
  415. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_state_lock.py +0 -0
  416. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_state_sessions.py +0 -0
  417. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_static.py +0 -0
  418. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_static_asset_cache.py +0 -0
  419. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_system_update_check.py +0 -0
  420. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_system_update_worker.py +0 -0
  421. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_adapter.py +0 -0
  422. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_bot_config.py +0 -0
  423. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_bot_integration.py +0 -0
  424. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_bot_lock.py +0 -0
  425. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_cache_cleanup.py +0 -0
  426. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_car_context.py +0 -0
  427. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_codex_feature_flags.py +0 -0
  428. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_command_registry.py +0 -0
  429. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_fast_ack.py +0 -0
  430. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_files_pma.py +0 -0
  431. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_flow_aliases.py +0 -0
  432. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_flow_bootstrap.py +0 -0
  433. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_flow_callback_actions.py +0 -0
  434. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_flow_commands.py +0 -0
  435. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_flow_lifecycle.py +0 -0
  436. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_flow_status.py +0 -0
  437. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_handlers_callbacks.py +0 -0
  438. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_handlers_messages.py +0 -0
  439. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_interrupt_status.py +0 -0
  440. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_media_batch_failure.py +0 -0
  441. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_opencode_context_cache.py +0 -0
  442. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_opencode_usage.py +0 -0
  443. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_outbox.py +0 -0
  444. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_overflow.py +0 -0
  445. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_paths_compatible.py +0 -0
  446. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_progress_stream.py +0 -0
  447. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_review_opencode.py +0 -0
  448. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_state.py +0 -0
  449. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_status_rate_limits.py +0 -0
  450. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_task_tracking.py +0 -0
  451. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_thread_paths.py +0 -0
  452. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_ticket_flow_bridge.py +0 -0
  453. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_topic_queue.py +0 -0
  454. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_transport.py +0 -0
  455. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_trigger_mode.py +0 -0
  456. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_turn_queue.py +0 -0
  457. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_update_dedupe.py +0 -0
  458. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_telegram_whisper_disclaimer.py +0 -0
  459. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_terminal_idle_timeout.py +0 -0
  460. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_terminal_input_dedupe.py +0 -0
  461. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_ticket_flow_approval_config.py +0 -0
  462. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_ticket_linter_cli.py +0 -0
  463. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_ticket_manager_cli.py +0 -0
  464. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_time_utils.py +0 -0
  465. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_update_paths.py +0 -0
  466. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_usage.py +0 -0
  467. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_voice_capture.py +0 -0
  468. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_voice_config.py +0 -0
  469. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_voice_service.py +0 -0
  470. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_voice_transcribe_endpoint.py +0 -0
  471. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_voice_ui.py +0 -0
  472. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_voice_whisper_mime_types.py +0 -0
  473. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_voice_whisper_provider.py +0 -0
  474. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_workspace_functional.py +0 -0
  475. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/tests/test_workspace_helpers.py +0 -0
  476. {codex_autorunner-1.2.0 → codex_autorunner-1.2.1}/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.2.0
3
+ Version: 1.2.1
4
4
  Summary: Codex autorunner CLI per DESIGN-V1
5
5
  Author: Codex
6
6
  License: MIT License
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "codex-autorunner"
3
- version = "1.2.0"
3
+ version = "1.2.1"
4
4
  description = "Codex autorunner CLI per DESIGN-V1"
5
5
  readme = "README.md"
6
6
  license = {file = "LICENSE"}
@@ -7,7 +7,6 @@ from .config import (
7
7
  REPO_OVERRIDE_FILENAME,
8
8
  ROOT_CONFIG_FILENAME,
9
9
  ROOT_OVERRIDE_FILENAME,
10
- Config,
11
10
  find_nearest_hub_config_path,
12
11
  )
13
12
 
@@ -98,6 +97,18 @@ def build_about_car_markdown(
98
97
  f"`{decisions_disp}`\n"
99
98
  "- **Spec**: "
100
99
  f"`{spec_disp}`\n\n"
100
+ "## Web UI quick map (repo page)\n"
101
+ "- Repo view: `/repos/<repo_id>/`\n"
102
+ "- Tabs: **Tickets** = `.codex-autorunner/tickets/` queue.\n"
103
+ "- Tabs: **Inbox** = paused run dispatches/handoffs.\n"
104
+ "- Tabs: **Workspace** = edit `active_context.md`, `spec.md`, `decisions.md`.\n"
105
+ "- Tabs: **Terminal** = launches the configured `codex` binary in a PTY.\n"
106
+ "- Tabs: **Archive** = browse worktree snapshots.\n\n"
107
+ "## FileBox (attachments)\n"
108
+ "- Repo FileBox root: `.codex-autorunner/filebox/`.\n"
109
+ "- User uploads: `.codex-autorunner/filebox/inbox/`.\n"
110
+ "- Files to send back: `.codex-autorunner/filebox/outbox/`.\n"
111
+ "- Note: ticket_flow uses per-run dispatch directories; do not confuse dispatch with FileBox.\n\n"
101
112
  "## Critical rules\n"
102
113
  "- Do **not** create new copies of workspace docs elsewhere in the repo.\n"
103
114
  "- Treat `.codex-autorunner/` as intentional project structure even though it is hidden/gitignored.\n\n"
@@ -211,17 +222,6 @@ def build_tickets_agents_markdown(*, repo_root: Path) -> str:
211
222
  )
212
223
 
213
224
 
214
- def ensure_about_car_file(config: Config, *, force: bool = False) -> Path:
215
- """Config-aware wrapper that uses configured doc paths."""
216
- repo_root = config.root
217
- docs = {
218
- "active_context": config.doc_path("active_context"),
219
- "decisions": config.doc_path("decisions"),
220
- "spec": config.doc_path("spec"),
221
- }
222
- return ensure_about_car_file_for_repo(repo_root, doc_paths=docs, force=force)
223
-
224
-
225
225
  def ensure_ticket_flow_quickstart_file_for_repo(
226
226
  repo_root: Path, *, force: bool = False
227
227
  ) -> Path:
@@ -258,7 +258,7 @@ DEFAULT_REPO_CONFIG: Dict[str, Any] = {
258
258
  "files": True,
259
259
  "max_image_bytes": 10_000_000,
260
260
  "max_voice_bytes": 10_000_000,
261
- "max_file_bytes": 10_000_000,
261
+ "max_file_bytes": 100_000_000,
262
262
  "image_prompt": (
263
263
  "The user sent an image with no caption. Use it to continue the "
264
264
  "conversation; if no clear task, describe the image and ask what "
@@ -542,7 +542,7 @@ DEFAULT_HUB_CONFIG: Dict[str, Any] = {
542
542
  "files": True,
543
543
  "max_image_bytes": 10_000_000,
544
544
  "max_voice_bytes": 10_000_000,
545
- "max_file_bytes": 10_000_000,
545
+ "max_file_bytes": 100_000_000,
546
546
  "image_prompt": (
547
547
  "The user sent an image with no caption. Use it to continue the "
548
548
  "conversation; if no clear task, describe the image and ask what "
@@ -12,6 +12,7 @@ CAR’s durable control-plane lives under `.codex-autorunner/`:
12
12
  - `active_context.md` — current “north star” context; kept fresh for ongoing work.
13
13
  - `spec.md` — longer spec / acceptance criteria when needed.
14
14
  - `decisions.md` — prior decisions / tradeoffs when relevant.
15
+ - `.codex-autorunner/filebox/` — attachments inbox/outbox used by CAR surfaces (if present).
15
16
 
16
17
  Intent signals: if the user mentions tickets, “dispatch”, “resume”, workspace docs, or `.codex-autorunner/`, they are likely referring to CAR artifacts/workflow rather than generic repo files.
17
18
 
@@ -19,6 +19,30 @@ PMA_MAX_MESSAGES = 10
19
19
  PMA_MAX_TEXT = 800
20
20
  PMA_MAX_TEMPLATE_REPOS = 25
21
21
  PMA_MAX_TEMPLATE_FIELD_CHARS = 120
22
+ PMA_MAX_PMA_FILES = 50
23
+ PMA_MAX_LIFECYCLE_EVENTS = 20
24
+
25
+ # Keep this short and stable; see ticket TICKET-001 for rationale.
26
+ PMA_FASTPATH = """<pma_fastpath>
27
+ You are PMA inside Codex Autorunner (CAR). Treat the filesystem as truth; prefer creating/updating CAR artifacts over "chat-only" plans.
28
+
29
+ First-turn routine:
30
+ 1) Read <user_message> and <hub_snapshot>.
31
+ 2) If hub_snapshot.inbox has entries, handle them first (these are paused runs needing input):
32
+ - Summarize the dispatch question.
33
+ - Answer it or propose the next minimal action.
34
+ - Include the item.open_url so the user can jump straight to the repo Inbox tab.
35
+ 3) If the request is new work:
36
+ - Identify the target repo(s).
37
+ - Prefer hub-owned worktrees for changes.
38
+ - Create/adjust repo tickets under each repo's `.codex-autorunner/tickets/`.
39
+
40
+ Web UI map (user perspective):
41
+ - Hub root: `/` (repos list + global notifications).
42
+ - Repo view: `/repos/<repo_id>/` tabs: Tickets | Inbox | Workspace | Terminal | Analytics | Archive.
43
+ - Tickets: edit queue; Inbox: paused run dispatches; Workspace: active_context/spec/decisions.
44
+ </pma_fastpath>
45
+ """
22
46
 
23
47
  # Defaults used when hub config is not available (should be rare).
24
48
  PMA_DOCS_MAX_CHARS = 12_000
@@ -192,13 +216,170 @@ def load_pma_prompt(hub_root: Path) -> str:
192
216
  return ""
193
217
 
194
218
 
219
+ def _render_ticket_flow_summary(summary: Optional[dict[str, Any]]) -> str:
220
+ if not summary:
221
+ return "null"
222
+ status = summary.get("status")
223
+ done_count = summary.get("done_count")
224
+ total_count = summary.get("total_count")
225
+ current_step = summary.get("current_step")
226
+ parts: list[str] = []
227
+ if status is not None:
228
+ parts.append(f"status={status}")
229
+ if done_count is not None and total_count is not None:
230
+ parts.append(f"done={done_count}/{total_count}")
231
+ if current_step is not None:
232
+ parts.append(f"step={current_step}")
233
+ if not parts:
234
+ return "null"
235
+ return " ".join(parts)
236
+
237
+
238
+ def _render_hub_snapshot(
239
+ snapshot: dict[str, Any],
240
+ *,
241
+ max_repos: int = PMA_MAX_REPOS,
242
+ max_messages: int = PMA_MAX_MESSAGES,
243
+ max_text_chars: int = PMA_MAX_TEXT,
244
+ max_template_repos: int = PMA_MAX_TEMPLATE_REPOS,
245
+ max_field_chars: int = PMA_MAX_TEMPLATE_FIELD_CHARS,
246
+ max_pma_files: int = PMA_MAX_PMA_FILES,
247
+ max_lifecycle_events: int = PMA_MAX_LIFECYCLE_EVENTS,
248
+ ) -> str:
249
+ lines: list[str] = []
250
+
251
+ inbox = snapshot.get("inbox") or []
252
+ if inbox:
253
+ lines.append("Inbox (paused runs needing attention):")
254
+ for item in list(inbox)[: max(0, max_messages)]:
255
+ repo_id = _truncate(str(item.get("repo_id", "")), max_field_chars)
256
+ run_id = _truncate(str(item.get("run_id", "")), max_field_chars)
257
+ seq = _truncate(str(item.get("seq", "")), max_field_chars)
258
+ dispatch = item.get("dispatch") or {}
259
+ mode = _truncate(str(dispatch.get("mode", "")), max_field_chars)
260
+ handoff = bool(dispatch.get("is_handoff"))
261
+ lines.append(
262
+ f"- repo_id={repo_id} run_id={run_id} seq={seq} mode={mode} "
263
+ f"handoff={str(handoff).lower()}"
264
+ )
265
+ title = dispatch.get("title")
266
+ if title:
267
+ lines.append(f" title: {_truncate(str(title), max_text_chars)}")
268
+ body = dispatch.get("body")
269
+ if body:
270
+ lines.append(f" body: {_truncate(str(body), max_text_chars)}")
271
+ files = item.get("files") or []
272
+ if files:
273
+ display = [
274
+ _truncate(str(name), max_field_chars)
275
+ for name in list(files)[: max(0, max_pma_files)]
276
+ ]
277
+ lines.append(f" attachments: [{', '.join(display)}]")
278
+ open_url = item.get("open_url")
279
+ if open_url:
280
+ lines.append(f" open_url: {_truncate(str(open_url), max_field_chars)}")
281
+ lines.append("")
282
+
283
+ repos = snapshot.get("repos") or []
284
+ if repos:
285
+ lines.append("Repos:")
286
+ for repo in list(repos)[: max(0, max_repos)]:
287
+ repo_id = _truncate(str(repo.get("id", "")), max_field_chars)
288
+ display_name = _truncate(str(repo.get("display_name", "")), max_field_chars)
289
+ status = _truncate(str(repo.get("status", "")), max_field_chars)
290
+ last_run_id = _truncate(str(repo.get("last_run_id", "")), max_field_chars)
291
+ last_exit = _truncate(str(repo.get("last_exit_code", "")), max_field_chars)
292
+ ticket_flow = _render_ticket_flow_summary(repo.get("ticket_flow"))
293
+ lines.append(
294
+ f"- {repo_id} ({display_name}): status={status} "
295
+ f"last_run_id={last_run_id} last_exit_code={last_exit} "
296
+ f"ticket_flow={ticket_flow}"
297
+ )
298
+ lines.append("")
299
+
300
+ templates = snapshot.get("templates") or {}
301
+ template_repos = templates.get("repos") or []
302
+ template_scan = templates.get("last_scan")
303
+ if templates.get("enabled") or template_repos or template_scan:
304
+ enabled = bool(templates.get("enabled"))
305
+ lines.append("Templates:")
306
+ lines.append(f"- enabled={str(enabled).lower()}")
307
+ if template_repos:
308
+ items: list[str] = []
309
+ for repo in list(template_repos)[: max(0, max_template_repos)]:
310
+ repo_id = _truncate(str(repo.get("id", "")), max_field_chars)
311
+ default_ref = _truncate(
312
+ str(repo.get("default_ref", "")), max_field_chars
313
+ )
314
+ trusted = bool(repo.get("trusted"))
315
+ items.append(f"{repo_id}@{default_ref} trusted={str(trusted).lower()}")
316
+ lines.append(f"- repos: [{', '.join(items)}]")
317
+ if template_scan:
318
+ repo_id = _truncate(str(template_scan.get("repo_id", "")), max_field_chars)
319
+ decision = _truncate(
320
+ str(template_scan.get("decision", "")), max_field_chars
321
+ )
322
+ severity = _truncate(
323
+ str(template_scan.get("severity", "")), max_field_chars
324
+ )
325
+ scanned_at = _truncate(
326
+ str(template_scan.get("scanned_at", "")), max_field_chars
327
+ )
328
+ lines.append(
329
+ f"- last_scan: {repo_id} {decision} {severity} {scanned_at}".strip()
330
+ )
331
+ lines.append("")
332
+
333
+ pma_files = snapshot.get("pma_files") or {}
334
+ inbox_files = pma_files.get("inbox") or []
335
+ outbox_files = pma_files.get("outbox") or []
336
+ if inbox_files or outbox_files:
337
+ lines.append("PMA files:")
338
+ if inbox_files:
339
+ files = [
340
+ _truncate(str(name), max_field_chars)
341
+ for name in list(inbox_files)[: max(0, max_pma_files)]
342
+ ]
343
+ lines.append(f"- inbox: [{', '.join(files)}]")
344
+ if outbox_files:
345
+ files = [
346
+ _truncate(str(name), max_field_chars)
347
+ for name in list(outbox_files)[: max(0, max_pma_files)]
348
+ ]
349
+ lines.append(f"- outbox: [{', '.join(files)}]")
350
+ lines.append("")
351
+
352
+ lifecycle_events = snapshot.get("lifecycle_events") or []
353
+ if lifecycle_events:
354
+ lines.append("Lifecycle events (recent):")
355
+ for event in list(lifecycle_events)[: max(0, max_lifecycle_events)]:
356
+ timestamp = _truncate(str(event.get("timestamp", "")), max_field_chars)
357
+ event_type = _truncate(str(event.get("event_type", "")), max_field_chars)
358
+ repo_id = _truncate(str(event.get("repo_id", "")), max_field_chars)
359
+ run_id = _truncate(str(event.get("run_id", "")), max_field_chars)
360
+ lines.append(
361
+ f"- {timestamp} {event_type} repo_id={repo_id} run_id={run_id}"
362
+ )
363
+ lines.append("")
364
+
365
+ if lines and lines[-1] == "":
366
+ lines.pop()
367
+ return "\n".join(lines)
368
+
369
+
195
370
  def format_pma_prompt(
196
371
  base_prompt: str,
197
372
  snapshot: dict[str, Any],
198
373
  message: str,
199
374
  hub_root: Optional[Path] = None,
200
375
  ) -> str:
201
- snapshot_text = json.dumps(snapshot, sort_keys=True)
376
+ limits = snapshot.get("limits") or {}
377
+ snapshot_text = _render_hub_snapshot(
378
+ snapshot,
379
+ max_repos=limits.get("max_repos", PMA_MAX_REPOS),
380
+ max_messages=limits.get("max_messages", PMA_MAX_MESSAGES),
381
+ max_text_chars=limits.get("max_text_chars", PMA_MAX_TEXT),
382
+ )
202
383
 
203
384
  pma_docs: Optional[dict[str, Any]] = None
204
385
  if hub_root is not None:
@@ -235,6 +416,7 @@ def format_pma_prompt(
235
416
  "</pma_workspace_docs>\n\n"
236
417
  )
237
418
 
419
+ prompt += f"{PMA_FASTPATH}\n\n"
238
420
  prompt += (
239
421
  "<hub_snapshot>\n"
240
422
  f"{snapshot_text}\n"
@@ -493,4 +675,9 @@ async def build_hub_snapshot(
493
675
  "templates": templates,
494
676
  "pma_files": pma_files,
495
677
  "lifecycle_events": lifecycle_events,
678
+ "limits": {
679
+ "max_repos": max_repos,
680
+ "max_messages": max_messages,
681
+ "max_text_chars": max_text_chars,
682
+ },
496
683
  }
@@ -1370,7 +1370,7 @@ class TelegramBotClient:
1370
1370
  return bool(result) if isinstance(result, bool) else False
1371
1371
 
1372
1372
  async def download_file(
1373
- self, file_path: str, max_size_bytes: int = 50 * 1024 * 1024
1373
+ self, file_path: str, max_size_bytes: int = 100 * 1024 * 1024
1374
1374
  ) -> bytes:
1375
1375
  safe_path = file_path.lstrip("/")
1376
1376
  url = f"{self._file_base_url}/{safe_path}"
@@ -44,7 +44,7 @@ DEFAULT_APP_SERVER_TURN_TIMEOUT_SECONDS = 28800
44
44
  DEFAULT_APPROVAL_TIMEOUT_SECONDS = 300.0
45
45
  DEFAULT_MEDIA_MAX_IMAGE_BYTES = 10 * 1024 * 1024
46
46
  DEFAULT_MEDIA_MAX_VOICE_BYTES = 10 * 1024 * 1024
47
- DEFAULT_MEDIA_MAX_FILE_BYTES = 10 * 1024 * 1024
47
+ DEFAULT_MEDIA_MAX_FILE_BYTES = 100 * 1024 * 1024
48
48
  DEFAULT_MEDIA_IMAGE_PROMPT = (
49
49
  "The user sent an image with no caption. Use it to continue the "
50
50
  "conversation; if no clear task, describe the image and ask what they want."
@@ -859,7 +859,10 @@ async def handle_media_message(
859
859
  best = photos[0]
860
860
  try:
861
861
  file_info = await handlers._bot.get_file(best.file_id)
862
- data = await handlers._bot.download_file(file_info.file_path)
862
+ data = await handlers._bot.download_file(
863
+ file_info.file_path,
864
+ max_size_bytes=handlers._config.media.max_image_bytes,
865
+ )
863
866
  filename = f"photo_{best.file_id}.jpg"
864
867
  files.append((filename, data))
865
868
  except Exception as exc:
@@ -868,7 +871,10 @@ async def handle_media_message(
868
871
  elif message.document:
869
872
  try:
870
873
  file_info = await handlers._bot.get_file(message.document.file_id)
871
- data = await handlers._bot.download_file(file_info.file_path)
874
+ data = await handlers._bot.download_file(
875
+ file_info.file_path,
876
+ max_size_bytes=handlers._config.media.max_file_bytes,
877
+ )
872
878
  filename = (
873
879
  message.document.file_name or f"document_{message.document.file_id}"
874
880
  )