codex-autorunner 0.1.2__py3-none-any.whl → 1.0.0__py3-none-any.whl

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 (189) hide show
  1. codex_autorunner/__main__.py +4 -0
  2. codex_autorunner/agents/opencode/client.py +68 -35
  3. codex_autorunner/agents/opencode/logging.py +21 -5
  4. codex_autorunner/agents/opencode/run_prompt.py +1 -0
  5. codex_autorunner/agents/opencode/runtime.py +118 -30
  6. codex_autorunner/agents/opencode/supervisor.py +36 -48
  7. codex_autorunner/agents/registry.py +136 -8
  8. codex_autorunner/api.py +25 -0
  9. codex_autorunner/bootstrap.py +16 -35
  10. codex_autorunner/cli.py +157 -139
  11. codex_autorunner/core/about_car.py +44 -32
  12. codex_autorunner/core/adapter_utils.py +21 -0
  13. codex_autorunner/core/app_server_logging.py +7 -3
  14. codex_autorunner/core/app_server_prompts.py +27 -260
  15. codex_autorunner/core/app_server_threads.py +15 -26
  16. codex_autorunner/core/codex_runner.py +6 -0
  17. codex_autorunner/core/config.py +390 -100
  18. codex_autorunner/core/docs.py +10 -2
  19. codex_autorunner/core/drafts.py +82 -0
  20. codex_autorunner/core/engine.py +278 -262
  21. codex_autorunner/core/flows/__init__.py +25 -0
  22. codex_autorunner/core/flows/controller.py +178 -0
  23. codex_autorunner/core/flows/definition.py +82 -0
  24. codex_autorunner/core/flows/models.py +75 -0
  25. codex_autorunner/core/flows/runtime.py +351 -0
  26. codex_autorunner/core/flows/store.py +485 -0
  27. codex_autorunner/core/flows/transition.py +133 -0
  28. codex_autorunner/core/flows/worker_process.py +242 -0
  29. codex_autorunner/core/hub.py +15 -9
  30. codex_autorunner/core/locks.py +4 -0
  31. codex_autorunner/core/prompt.py +15 -7
  32. codex_autorunner/core/redaction.py +29 -0
  33. codex_autorunner/core/review_context.py +5 -8
  34. codex_autorunner/core/run_index.py +6 -0
  35. codex_autorunner/core/runner_process.py +5 -2
  36. codex_autorunner/core/state.py +0 -88
  37. codex_autorunner/core/static_assets.py +55 -0
  38. codex_autorunner/core/supervisor_utils.py +67 -0
  39. codex_autorunner/core/update.py +20 -11
  40. codex_autorunner/core/update_runner.py +2 -0
  41. codex_autorunner/core/utils.py +29 -2
  42. codex_autorunner/discovery.py +2 -4
  43. codex_autorunner/flows/ticket_flow/__init__.py +3 -0
  44. codex_autorunner/flows/ticket_flow/definition.py +91 -0
  45. codex_autorunner/integrations/agents/__init__.py +27 -0
  46. codex_autorunner/integrations/agents/agent_backend.py +142 -0
  47. codex_autorunner/integrations/agents/codex_backend.py +307 -0
  48. codex_autorunner/integrations/agents/opencode_backend.py +325 -0
  49. codex_autorunner/integrations/agents/run_event.py +71 -0
  50. codex_autorunner/integrations/app_server/client.py +576 -92
  51. codex_autorunner/integrations/app_server/supervisor.py +59 -33
  52. codex_autorunner/integrations/telegram/adapter.py +141 -167
  53. codex_autorunner/integrations/telegram/api_schemas.py +120 -0
  54. codex_autorunner/integrations/telegram/config.py +175 -0
  55. codex_autorunner/integrations/telegram/constants.py +16 -1
  56. codex_autorunner/integrations/telegram/dispatch.py +17 -0
  57. codex_autorunner/integrations/telegram/doctor.py +47 -0
  58. codex_autorunner/integrations/telegram/handlers/callbacks.py +0 -4
  59. codex_autorunner/integrations/telegram/handlers/commands/__init__.py +2 -0
  60. codex_autorunner/integrations/telegram/handlers/commands/execution.py +53 -57
  61. codex_autorunner/integrations/telegram/handlers/commands/files.py +2 -6
  62. codex_autorunner/integrations/telegram/handlers/commands/flows.py +227 -0
  63. codex_autorunner/integrations/telegram/handlers/commands/formatting.py +1 -1
  64. codex_autorunner/integrations/telegram/handlers/commands/github.py +41 -582
  65. codex_autorunner/integrations/telegram/handlers/commands/workspace.py +8 -8
  66. codex_autorunner/integrations/telegram/handlers/commands_runtime.py +133 -475
  67. codex_autorunner/integrations/telegram/handlers/commands_spec.py +11 -4
  68. codex_autorunner/integrations/telegram/handlers/messages.py +120 -9
  69. codex_autorunner/integrations/telegram/helpers.py +88 -16
  70. codex_autorunner/integrations/telegram/outbox.py +208 -37
  71. codex_autorunner/integrations/telegram/progress_stream.py +3 -10
  72. codex_autorunner/integrations/telegram/service.py +214 -40
  73. codex_autorunner/integrations/telegram/state.py +100 -2
  74. codex_autorunner/integrations/telegram/ticket_flow_bridge.py +322 -0
  75. codex_autorunner/integrations/telegram/transport.py +36 -3
  76. codex_autorunner/integrations/telegram/trigger_mode.py +53 -0
  77. codex_autorunner/manifest.py +2 -0
  78. codex_autorunner/plugin_api.py +22 -0
  79. codex_autorunner/routes/__init__.py +23 -14
  80. codex_autorunner/routes/analytics.py +239 -0
  81. codex_autorunner/routes/base.py +81 -109
  82. codex_autorunner/routes/file_chat.py +836 -0
  83. codex_autorunner/routes/flows.py +980 -0
  84. codex_autorunner/routes/messages.py +459 -0
  85. codex_autorunner/routes/system.py +6 -1
  86. codex_autorunner/routes/usage.py +87 -0
  87. codex_autorunner/routes/workspace.py +271 -0
  88. codex_autorunner/server.py +2 -1
  89. codex_autorunner/static/agentControls.js +1 -0
  90. codex_autorunner/static/agentEvents.js +248 -0
  91. codex_autorunner/static/app.js +25 -22
  92. codex_autorunner/static/autoRefresh.js +29 -1
  93. codex_autorunner/static/bootstrap.js +1 -0
  94. codex_autorunner/static/bus.js +1 -0
  95. codex_autorunner/static/cache.js +1 -0
  96. codex_autorunner/static/constants.js +20 -4
  97. codex_autorunner/static/dashboard.js +162 -196
  98. codex_autorunner/static/diffRenderer.js +37 -0
  99. codex_autorunner/static/docChatCore.js +324 -0
  100. codex_autorunner/static/docChatStorage.js +65 -0
  101. codex_autorunner/static/docChatVoice.js +65 -0
  102. codex_autorunner/static/docEditor.js +133 -0
  103. codex_autorunner/static/env.js +1 -0
  104. codex_autorunner/static/eventSummarizer.js +166 -0
  105. codex_autorunner/static/fileChat.js +182 -0
  106. codex_autorunner/static/health.js +155 -0
  107. codex_autorunner/static/hub.js +41 -118
  108. codex_autorunner/static/index.html +787 -858
  109. codex_autorunner/static/liveUpdates.js +1 -0
  110. codex_autorunner/static/loader.js +1 -0
  111. codex_autorunner/static/messages.js +470 -0
  112. codex_autorunner/static/mobileCompact.js +2 -1
  113. codex_autorunner/static/settings.js +24 -211
  114. codex_autorunner/static/styles.css +7567 -3865
  115. codex_autorunner/static/tabs.js +28 -5
  116. codex_autorunner/static/terminal.js +14 -0
  117. codex_autorunner/static/terminalManager.js +34 -59
  118. codex_autorunner/static/ticketChatActions.js +333 -0
  119. codex_autorunner/static/ticketChatEvents.js +16 -0
  120. codex_autorunner/static/ticketChatStorage.js +16 -0
  121. codex_autorunner/static/ticketChatStream.js +264 -0
  122. codex_autorunner/static/ticketEditor.js +750 -0
  123. codex_autorunner/static/ticketVoice.js +9 -0
  124. codex_autorunner/static/tickets.js +1315 -0
  125. codex_autorunner/static/utils.js +32 -3
  126. codex_autorunner/static/voice.js +1 -0
  127. codex_autorunner/static/workspace.js +672 -0
  128. codex_autorunner/static/workspaceApi.js +53 -0
  129. codex_autorunner/static/workspaceFileBrowser.js +504 -0
  130. codex_autorunner/tickets/__init__.py +20 -0
  131. codex_autorunner/tickets/agent_pool.py +377 -0
  132. codex_autorunner/tickets/files.py +85 -0
  133. codex_autorunner/tickets/frontmatter.py +55 -0
  134. codex_autorunner/tickets/lint.py +102 -0
  135. codex_autorunner/tickets/models.py +95 -0
  136. codex_autorunner/tickets/outbox.py +232 -0
  137. codex_autorunner/tickets/replies.py +179 -0
  138. codex_autorunner/tickets/runner.py +823 -0
  139. codex_autorunner/tickets/spec_ingest.py +77 -0
  140. codex_autorunner/web/app.py +269 -91
  141. codex_autorunner/web/middleware.py +3 -4
  142. codex_autorunner/web/schemas.py +89 -109
  143. codex_autorunner/web/static_assets.py +1 -44
  144. codex_autorunner/workspace/__init__.py +40 -0
  145. codex_autorunner/workspace/paths.py +319 -0
  146. {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.0.0.dist-info}/METADATA +18 -21
  147. codex_autorunner-1.0.0.dist-info/RECORD +251 -0
  148. {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.0.0.dist-info}/WHEEL +1 -1
  149. codex_autorunner/agents/execution/policy.py +0 -292
  150. codex_autorunner/agents/factory.py +0 -52
  151. codex_autorunner/agents/orchestrator.py +0 -358
  152. codex_autorunner/core/doc_chat.py +0 -1446
  153. codex_autorunner/core/snapshot.py +0 -580
  154. codex_autorunner/integrations/github/chatops.py +0 -268
  155. codex_autorunner/integrations/github/pr_flow.py +0 -1314
  156. codex_autorunner/routes/docs.py +0 -381
  157. codex_autorunner/routes/github.py +0 -327
  158. codex_autorunner/routes/runs.py +0 -250
  159. codex_autorunner/spec_ingest.py +0 -812
  160. codex_autorunner/static/docChatActions.js +0 -287
  161. codex_autorunner/static/docChatEvents.js +0 -300
  162. codex_autorunner/static/docChatRender.js +0 -205
  163. codex_autorunner/static/docChatStream.js +0 -361
  164. codex_autorunner/static/docs.js +0 -20
  165. codex_autorunner/static/docsClipboard.js +0 -69
  166. codex_autorunner/static/docsCrud.js +0 -257
  167. codex_autorunner/static/docsDocUpdates.js +0 -62
  168. codex_autorunner/static/docsDrafts.js +0 -16
  169. codex_autorunner/static/docsElements.js +0 -69
  170. codex_autorunner/static/docsInit.js +0 -285
  171. codex_autorunner/static/docsParse.js +0 -160
  172. codex_autorunner/static/docsSnapshot.js +0 -87
  173. codex_autorunner/static/docsSpecIngest.js +0 -263
  174. codex_autorunner/static/docsState.js +0 -127
  175. codex_autorunner/static/docsThreadRegistry.js +0 -44
  176. codex_autorunner/static/docsUi.js +0 -153
  177. codex_autorunner/static/docsVoice.js +0 -56
  178. codex_autorunner/static/github.js +0 -504
  179. codex_autorunner/static/logs.js +0 -678
  180. codex_autorunner/static/review.js +0 -157
  181. codex_autorunner/static/runs.js +0 -418
  182. codex_autorunner/static/snapshot.js +0 -124
  183. codex_autorunner/static/state.js +0 -94
  184. codex_autorunner/static/todoPreview.js +0 -27
  185. codex_autorunner/workspace.py +0 -16
  186. codex_autorunner-0.1.2.dist-info/RECORD +0 -222
  187. {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.0.0.dist-info}/entry_points.txt +0 -0
  188. {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.0.0.dist-info}/licenses/LICENSE +0 -0
  189. {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.0.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-autorunner
3
- Version: 0.1.2
3
+ Version: 1.0.0
4
4
  Summary: Codex autorunner CLI per DESIGN-V1
5
5
  Author: Codex
6
6
  License: MIT License
@@ -65,11 +65,17 @@ Dynamic: license-file
65
65
  # codex-autorunner
66
66
  [![PyPI](https://img.shields.io/pypi/v/codex-autorunner.svg)](https://pypi.org/project/codex-autorunner/)
67
67
 
68
- An opinionated autorunner that uses the Codex CLI to work on large tasks via a simple loop. On each loop we feed the Codex instance the last one's final output along with core documents.
69
- 1. TODO - Tracks long-horizon tasks
70
- 2. PROGRESS - High level overview of what's been done already that may be relevant for future agents
71
- 3. OPINIONS - Guidelines for how we should approach implementation
72
- 4. SPEC - Source-of-truth requirements and scope for large features/projects
68
+ An opinionated autorunner that uses the Codex app-server as the primary execution backend with OpenCode support to work on large tasks via a simple loop. On each loop we feed the Codex instance the last one's final output along with core documents.
69
+
70
+ In the current model, the primary work surface is **tickets**:
71
+
72
+ - `.codex-autorunner/tickets/TICKET-###.md`
73
+
74
+ Optionally, you can maintain lightweight **workspace docs** (auto-created on write; missing is OK):
75
+
76
+ - `.codex-autorunner/workspace/active_context.md`
77
+ - `.codex-autorunner/workspace/decisions.md`
78
+ - `.codex-autorunner/workspace/spec.md`
73
79
 
74
80
  ## Sneak Peak
75
81
  Run multiple agents on many repositories, with git worktree support
@@ -81,8 +87,7 @@ See the progress of your long running tasks with a high level overview
81
87
  Dive deep into specific agent execution with a rich but readable log
82
88
  ![Desktop logs](docs/screenshots/car-desktop-logs.png)
83
89
 
84
- All memory and opinions are markdown files! Edit them directly or chat with the document!
85
- ![Desktop TODO](docs/screenshots/car-desktop-todo.png)
90
+ Tickets and workspace docs are markdown files. Edit them directly or use the web UI’s file chat to iterate with the agent.
86
91
 
87
92
  Use codex CLI directly for multi-shot problem solving or `/review`
88
93
  ![Desktop terminal](docs/screenshots/car-desktop-terminal.png)
@@ -92,11 +97,10 @@ Mobile-first experience, code on the go with Whisper support (BYOK)
92
97
 
93
98
  ## What it does
94
99
  - Initializes a repo with Codex-friendly docs and config.
95
- - Runs Codex in a loop against the repo, streaming logs.
100
+ - Runs Codex app-server in a loop against the repo, streaming logs via OpenCode runtime.
96
101
  - Tracks state, logs, and config under `.codex-autorunner/`.
97
- - Exposes a power-user HTTP API and web UI for docs, logs, runner control, and a Codex TUI terminal.
102
+ - Exposes a power-user HTTP API and web UI for tickets, workspace docs, file chat, logs, runner control, and a Codex TUI terminal.
98
103
  - Optionally runs a Telegram bot for interactive, user-in-the-loop Codex sessions.
99
- - Generates a pasteable repo snapshot (`.codex-autorunner/SNAPSHOT.md`) for sharing with other LLM chats.
100
104
 
101
105
  CLI commands are available as `codex-autorunner` or the shorter `car`.
102
106
 
@@ -166,7 +170,7 @@ If you set a base path, prefix all checks with it.
166
170
 
167
171
  ## Quick start
168
172
  1) Install (editable): `pip install -e .`
169
- 2) Initialize (hub + repo): `codex-autorunner init --git-init` (or `car init --git-init` if you prefer short). This creates the hub config at `.codex-autorunner/config.yml`, plus state/log files and the docs under `.codex-autorunner/`.
173
+ 2) Initialize (hub + repo): `codex-autorunner init --git-init` (or `car init --git-init` if you prefer short). This creates the hub config at `.codex-autorunner/config.yml`, plus state/log files and starter content under `.codex-autorunner/` (tickets and optional workspace docs).
170
174
  3) Run once: `codex-autorunner once` / `car once`
171
175
  4) Continuous loop: `codex-autorunner run` / `car run`
172
176
  5) If stuck: `codex-autorunner kill` then `codex-autorunner resume` (or the `car` equivalents)
@@ -231,19 +235,12 @@ If you set `server.auth_token_env`, the API requires `Authorization: Bearer <tok
231
235
  - `run` / `once` — run the loop (continuous or single iteration).
232
236
  - `resume` — clear stale lock/state and restart; `--once` for a single run.
233
237
  - `kill` — SIGTERM the running loop and mark state error.
234
- - `status` — show current state and outstanding TODO count.
238
+ - `status` — show current state.
235
239
  - `sessions` — list terminal sessions (server-backed when available).
236
240
  - `stop-session` — stop a terminal session by repo (`--repo`) or id (`--session`).
237
241
  - `log` — view logs (tail or specific run).
238
- - `edit` — open TODO/PROGRESS/OPINIONS/SPEC in `$EDITOR`.
239
- - `ingest-spec` — generate TODO/PROGRESS/OPINIONS from SPEC using Codex (use `--force` to overwrite).
240
- - `clear-docs` — reset TODO/PROGRESS/OPINIONS to empty templates (type CLEAR to confirm).
241
- - `snapshot` — generate/update `.codex-autorunner/SNAPSHOT.md` (incremental by default when one exists; use `--from-scratch` to regenerate).
242
+ - `edit` — open `active_context|decisions|spec` in `$EDITOR`.
242
243
  - `serve` — start the HTTP API (FastAPI) on host/port from config (defaults 127.0.0.1:4173).
243
244
 
244
- ## Snapshot (repo briefing)
245
- - Web UI: open the Snapshot tab. If no snapshot exists, you’ll see “Generate snapshot”; otherwise you’ll see “Update snapshot (incremental)” and “Regenerate snapshot (from scratch)”, plus “Copy to clipboard”.
246
- - CLI: `codex-autorunner snapshot` (or `car snapshot`) writes `.codex-autorunner/SNAPSHOT.md` and `.codex-autorunner/snapshot_state.json`.
247
-
248
245
  ## Star history
249
246
  [![Star History Chart](https://api.star-history.com/svg?repos=Git-on-my-level/codex-autorunner&type=Date)](https://star-history.com/#Git-on-my-level/codex-autorunner&Date)
@@ -0,0 +1,251 @@
1
+ codex_autorunner/__init__.py,sha256=ckmosn6wHfU7M5zBHvBr9Vq2TH-ZYz3qrMRIyHKzcrU,111
2
+ codex_autorunner/__main__.py,sha256=Qd-f8z2Q2vpiEP2x6PBFsJrpACWDVxFKQk820MhFmHo,59
3
+ codex_autorunner/api.py,sha256=1QIExNBqoNfND7ldsa36E65MGaBstutrr7j6Dgs5W74,705
4
+ codex_autorunner/bootstrap.py,sha256=19T2MT4DvrQb8XSkL2EfL9k1m0GiWP_pX--77XiyUVg,5084
5
+ codex_autorunner/cli.py,sha256=UorEn-AxVP_tjlBdlh_tPPndOrTjxZ8pLtVEYWcMPKY,42800
6
+ codex_autorunner/codex_cli.py,sha256=Uzt5I9zlsUJclQNYeMmt4q9AEGjtihln8FjljQ8-yg0,2513
7
+ codex_autorunner/codex_runner.py,sha256=P0yHlZZjVYWLVH1O4b5VUwQs_mkJspPPG3-nULWt4Cw,362
8
+ codex_autorunner/discovery.py,sha256=8vwGq5YKAZpyTFY-mcv2L7oZY1ECkgqeeu-jD3SBGaI,6778
9
+ codex_autorunner/housekeeping.py,sha256=1Jk3-vIDfYfXf1N63Dqz7C-i0ACGYTzRcgYHcYDjsZo,12826
10
+ codex_autorunner/manifest.py,sha256=-1pQfCNFeAei9r-Z5wqJV2_EmJ6jNhYZ4y1aIc__w-8,6545
11
+ codex_autorunner/plugin_api.py,sha256=o-87FVzjSbC1od55aGF3O3pp-NkKX9hDKOcEeh0J5BU,664
12
+ codex_autorunner/server.py,sha256=11st-JNeMZ4warDaxgEZ7i8QIIUjZL3Z0u8Vyj4CprE,416
13
+ codex_autorunner/agents/__init__.py,sha256=6xEQXHkZ40kHadHB9Is5fK9dGGVsgryasoRllIN8_ho,418
14
+ codex_autorunner/agents/base.py,sha256=UiYYYvSYrEjTHy0tjs8O8hcTwrgMtmuyrhoVW9EkiYY,1643
15
+ codex_autorunner/agents/registry.py,sha256=8N7yUpZbuU4Mm0m-hqM6Ujy7NRHRmAN83DwbQqDXYew,7511
16
+ codex_autorunner/agents/types.py,sha256=3dzkr0Rvn2EgSiJ1k65f6MF0ZEXifGK7GhUF4Nr2GBs,727
17
+ codex_autorunner/agents/codex/__init__.py,sha256=GQ9KHMVT2ggOe1jT1kHEPfJLRDzfH0doGJCNwO4a2o0,92
18
+ codex_autorunner/agents/codex/harness.py,sha256=ly-KtEdd1SGJzu9bqY4BW9yCJRoGCqaX2vIfcu8n4vM,8426
19
+ codex_autorunner/agents/opencode/__init__.py,sha256=nTTukw5TzOKURCTyF7CJsbx-rh-9sue79XvqsOVTTNc,478
20
+ codex_autorunner/agents/opencode/agent_config.py,sha256=VO3qske0X75S8eoK6XR3NUNJq_WzGLJu1KsZdOFF-MY,2922
21
+ codex_autorunner/agents/opencode/client.py,sha256=LC2VGtRugyvkAiwXCH6Caimprrphvl1C0iCVyxyz95c,19367
22
+ codex_autorunner/agents/opencode/events.py,sha256=c0OxtbfYtmYRwMyt4UOgRiAmunfT76huXBDQuybB0jg,1828
23
+ codex_autorunner/agents/opencode/harness.py,sha256=0tfFWVZH2ES1SMiVVacVk3c1PGnKANvvkfL8tE8uqlA,10596
24
+ codex_autorunner/agents/opencode/logging.py,sha256=pbIS4xG84fkLrdNKiX2Y4zMTqj-ADzXOCNNPlnw1-z0,8423
25
+ codex_autorunner/agents/opencode/run_prompt.py,sha256=b4sZcuRgyHrM2jouEGZGeCw-nOwqUFX6OPy92e64kJ4,8656
26
+ codex_autorunner/agents/opencode/runtime.py,sha256=0LxLtDUNnOy_z9MhWajQewhuGJEdD-fdB0uBEtZgwRE,62228
27
+ codex_autorunner/agents/opencode/supervisor.py,sha256=rtaY2HqUKd9xa2anHRCv0Xs84SPbQ9equtli8uUYa_4,18427
28
+ codex_autorunner/core/__init__.py,sha256=Y_gMb4qRh0IPcHermkvGuBa0chW31hqCTZ_M_hJ901c,31
29
+ codex_autorunner/core/about_car.py,sha256=8eGelUx1x3H7JgMN54an5fM05ISXkLVpjZevkEE1saE,5130
30
+ codex_autorunner/core/adapter_utils.py,sha256=o1AUZVhyQTMF-DaaWNVINnXJ_8HAyjaj6mqfDABYW9Q,728
31
+ codex_autorunner/core/app_server_events.py,sha256=1x-ddiRo5kyFRYbFdzOe6vcgx4dCzdh18_SqGQiKIPI,6856
32
+ codex_autorunner/core/app_server_logging.py,sha256=bXmc03VfpBRX0_WYW6QYJ7XLWpd-hnkJB_EnSr1WFOY,7792
33
+ codex_autorunner/core/app_server_prompts.py,sha256=Sjx22i7bxb8qFBBvkcFgyvHLEqFbz3IuGKTALRzsfjo,4222
34
+ codex_autorunner/core/app_server_threads.py,sha256=S5uoeWtb7M1h6Gb8U1oCvB5uRFKOb65pKUiYrkwx8nc,6122
35
+ codex_autorunner/core/circuit_breaker.py,sha256=DL8lUrZPluzvNHgCMDUJjWuYytgmVzhL30va8M3TPQ4,6205
36
+ codex_autorunner/core/codex_runner.py,sha256=-92FMYPQxUkZ6_XFkVPycblrZqFcwe4htL4i-bB8J90,3355
37
+ codex_autorunner/core/config.py,sha256=sCifsNFH2x9IdDuj8BvlKP1-VIdC1EwQlQmrSSTT0HM,101828
38
+ codex_autorunner/core/docs.py,sha256=K-L7E4QQEvLROnJypfNtjHhnOz7Dl8guLhmYdwTj2l8,3741
39
+ codex_autorunner/core/drafts.py,sha256=oM2D_Gb4CO9l2fGZcg1xK0uVClV9GGPh5EfuYybMnKU,2364
40
+ codex_autorunner/core/engine.py,sha256=JutfI6wI0hBanc5j4Wqp5QJfF-dCL-dXXRVLgeJWGiE,103338
41
+ codex_autorunner/core/exceptions.py,sha256=O1LmgvG5t70YODubg4t0xQq-JT1gyDJtnfYvNiEYfLE,1555
42
+ codex_autorunner/core/git_utils.py,sha256=vLINnfCNYaZyCzJFlkn5wasTZsfAfNOM5momEIcC46M,6633
43
+ codex_autorunner/core/hub.py,sha256=3dtlKh7dvLpEO2R9ZlTpxb1gm2msJPcs-wtiflNz_Fw,34091
44
+ codex_autorunner/core/injected_context.py,sha256=HQ1VTO7E0TccBkRMQM3f0ihiGS4FNM-aCW35QX7_CXs,301
45
+ codex_autorunner/core/locks.py,sha256=MWPGf7-4QTcQass9O5M7OlI1pHAqomep3-7pr3aA8qU,8324
46
+ codex_autorunner/core/logging_utils.py,sha256=fQ9rIshtE-S02-xcFJOUOAXFTrFIcv_TkHzBXU4fxHs,5063
47
+ codex_autorunner/core/notifications.py,sha256=Bx-2E01vKyhxODwx2dFnmv7ns2NPKG1irdguGYx9AXU,17556
48
+ codex_autorunner/core/optional_dependencies.py,sha256=sBuSnQrRhV6_JA2tVLlVnDBsED79kY81cOyWcRiynUM,1271
49
+ codex_autorunner/core/patch_utils.py,sha256=H5IPB5X4EJmXw7dNV3hj6m-vV2yXNY4PMuvq12msV7o,7635
50
+ codex_autorunner/core/path_utils.py,sha256=MjFTnTC-GuwR4-QS6fBJuvuicSi2E-G3Jt7KWjaFffc,3450
51
+ codex_autorunner/core/prompt.py,sha256=se4ziQ76LssiRJvSuNFbaIdf5UAX0wejmMVtO7k1So8,2898
52
+ codex_autorunner/core/prompts.py,sha256=LBab4SjAaAfWmWKSPkSGaCy5dWsnZr36lM3y8uFuGz4,8919
53
+ codex_autorunner/core/redaction.py,sha256=VkGJS2JTCYrWcTieb-iw994SM_mcBXC3toqwvH8VG2o,842
54
+ codex_autorunner/core/request_context.py,sha256=FVQtn67zJffRET9TBy48jk23ZonAjONOeFwZiizyfxc,997
55
+ codex_autorunner/core/retry.py,sha256=n31DM84oIW0PwWPipNd5TH2H6H5ej8I2JxikfX-FIQs,1725
56
+ codex_autorunner/core/review.py,sha256=au5Vr4hTtjHGRbXQxBbLCjQ52vqz-f9zjOIGpUKAeik,30878
57
+ codex_autorunner/core/review_context.py,sha256=DaepmVJ-qVx77FrXEkTMyDMF1uIAVT7HccDUXlk7iNU,5033
58
+ codex_autorunner/core/run_index.py,sha256=feOG5JNtJoqH57vfRuIeVtb111zokgpDsHMj3cgz4TE,7794
59
+ codex_autorunner/core/runner_controller.py,sha256=0QfocgTIZUQ4HbUhJLtVZRyT0vxyAzdHkttG0C94w2k,7404
60
+ codex_autorunner/core/runner_process.py,sha256=G_O_kzo6sv_oWl0FuCzUXW28kZGXh7OdZOBWBKR5kBk,1503
61
+ codex_autorunner/core/sqlite_utils.py,sha256=dA_2UGXoH-TNKPeJsqrIgbRtmTdETxr6FWPM5BZm9pU,754
62
+ codex_autorunner/core/state.py,sha256=-Adtoag43MDPFhv2rzI0doVCWNJxH5oVcHZKjUosQf8,14356
63
+ codex_autorunner/core/static_assets.py,sha256=jePQWRfLSiex0CcCvJgt-hQbt4bIk-aOz-a1ANEvXP0,1639
64
+ codex_autorunner/core/supervisor_utils.py,sha256=Cb20PgcJzRWVCrJZt3SkCocoijQOuOwkKzsIFEIaHYY,2060
65
+ codex_autorunner/core/text_delta_coalescer.py,sha256=Q1VVvWWJc7zg3RkPTIklA6ErpI74L_vQBfd5oPLkk9A,1063
66
+ codex_autorunner/core/update.py,sha256=KiA_pq9CFCOnV6yhe4NPSnrd_CUD0hYqcimZM1H1764,17865
67
+ codex_autorunner/core/update_runner.py,sha256=mimPqchmRD-Rv2TIX67Z-ShfH3ytzS_Lozw0m6IdBsc,1484
68
+ codex_autorunner/core/usage.py,sha256=3yS50fQz_v9zWD2Gr0NudAwZSEwXqO554jKsP1ZczYE,68698
69
+ codex_autorunner/core/utils.py,sha256=Lkf5giAp6kC1g2P6xdSFA2yp1k8gUpnJ89dX0hceR5w,8660
70
+ codex_autorunner/core/flows/__init__.py,sha256=AVQh2yts_kjo1zA91HwBc4uoMkfSRl8E_2b-gnxdvHM,503
71
+ codex_autorunner/core/flows/controller.py,sha256=QLXv0q0COyxvhF-nfB5M0Q952U0bdsPCuRXovh4GRsw,6019
72
+ codex_autorunner/core/flows/definition.py,sha256=5rkczvPA2dW0PdgSYQIFxu4ItUPu2Q9_8ATeZiKGEpY,2725
73
+ codex_autorunner/core/flows/models.py,sha256=YAnO_wcITBj_Eb1qqhKdE0xg3oJQLW6GrHlFmbEdsQQ,1948
74
+ codex_autorunner/core/flows/runtime.py,sha256=X8sVL61iO7A-YuKxTnqDctjomKAfaWIkxZyRYbORI1M,12217
75
+ codex_autorunner/core/flows/store.py,sha256=xIIX9b_jg28lZBvaX-K3-59htyuTVt5P9X0vk1FaJpA,15968
76
+ codex_autorunner/core/flows/transition.py,sha256=BdLp2MdiGuC79t1nys7DjJCQTItywy2HNkWg-0iBF1o,4362
77
+ codex_autorunner/core/flows/worker_process.py,sha256=C5Y-1Q8jNfW2sg-9FYIpuBDc_MF-FQ8I9ltNc9oaduE,6741
78
+ codex_autorunner/flows/ticket_flow/__init__.py,sha256=bSji9VcWwd_Ow6hdBlLOlpvoEcieEwcfswJ0DI-SWPA,97
79
+ codex_autorunner/flows/ticket_flow/definition.py,sha256=r0d42uZXGf9NTi0ASBLA9Hidywm0xT_ZG0x3atRim-8,3693
80
+ codex_autorunner/integrations/__init__.py,sha256=_6PZ2Hq6DzApW4d0rrmJY05vftGmHXpHe9SOxq0J2hM,28
81
+ codex_autorunner/integrations/agents/__init__.py,sha256=aSj5cU2TX6HF4BTNIfLE0p_ZGmJqAs0nF17kPxKc9bc,547
82
+ codex_autorunner/integrations/agents/agent_backend.py,sha256=O4jMqvZ0QuEn1lPbHTPWIMAtUkZ4VtcJZiphd_LcvnU,4330
83
+ codex_autorunner/integrations/agents/codex_backend.py,sha256=VC6kL168mh5T9OIrdWsMcub6lSWJJz5vZHPcvV2gEAA,11015
84
+ codex_autorunner/integrations/agents/opencode_backend.py,sha256=gBSpmrg2bAjKSbFc0mZY61iSODDmguKjmngkyYeZPpU,11713
85
+ codex_autorunner/integrations/agents/run_event.py,sha256=b0V_WWwDgoZkt3W9xqkaL4zWS08A5XNob3LGIuEIpWw,1114
86
+ codex_autorunner/integrations/app_server/__init__.py,sha256=Ro2hRhH9wzxQJThz1Kyo-SADxCFtyF2ZfhHNureykGk,201
87
+ codex_autorunner/integrations/app_server/client.py,sha256=KtiZq8_gQIGl26EtDQ6Ewj7BdOOOeHe5krCYGLnuNmI,72508
88
+ codex_autorunner/integrations/app_server/env.py,sha256=nQ44YN_Q1dyAZx0DJAimXbRx9SvlLXP5NZWV53cmj9s,3372
89
+ codex_autorunner/integrations/app_server/supervisor.py,sha256=7VAXeyufWRkqHrcaV4JFDknqboE7K3RosU14CFzUhl8,9659
90
+ codex_autorunner/integrations/github/__init__.py,sha256=mLMQATB-B_LbgebPRCdWqUDS-cMxXfuALGh_RsWbWBk,224
91
+ codex_autorunner/integrations/github/service.py,sha256=484jkhg_lnDap0jMatspuMNn04cg7uVqAG2GctF17Co,39015
92
+ codex_autorunner/integrations/telegram/__init__.py,sha256=oAEE1Yb-7Ybgb79NLWqNErkSXOGBJDgcvlI7gfHlpDA,36
93
+ codex_autorunner/integrations/telegram/adapter.py,sha256=2EB8wKtFrmYVIZCM7Egqq8azPqg4Wq3jeo32E6NNTwE,55003
94
+ codex_autorunner/integrations/telegram/api_schemas.py,sha256=IXwB17Y4wL0lborU8HHssgNgOtHUJYLoMAcyb3Jv7_8,3402
95
+ codex_autorunner/integrations/telegram/commands_registry.py,sha256=C5T6KeTUq4DmhmSe9FwNRg_kNJWKcYB4hxthVu7MbAQ,3153
96
+ codex_autorunner/integrations/telegram/config.py,sha256=u74VLTt0v6LNjA6SHwaAvwVAktukowEOcPS7t0gM8ws,30165
97
+ codex_autorunner/integrations/telegram/constants.py,sha256=rYI6XjrE-YnosjBieQyvfIcwgRNGiWy3dKlSZya1Hf4,6735
98
+ codex_autorunner/integrations/telegram/dispatch.py,sha256=dgh95aYuvveqS7TGvbYHKbtT2RYFx1qGq7mGYyRY2xI,6916
99
+ codex_autorunner/integrations/telegram/doctor.py,sha256=nVAjDg56XE4UZbJVndTqZJLnUyfQ5Itfgv1xntEwFvA,1628
100
+ codex_autorunner/integrations/telegram/helpers.py,sha256=6dCiGguKus8CTr8XFJQpw8sgxhK7Xb-W28X4fKgxRfw,72611
101
+ codex_autorunner/integrations/telegram/notifications.py,sha256=XvUdRUq5gfD9JA30PclVLrDL5Azw0Sin8Oj0i1fcVx4,23430
102
+ codex_autorunner/integrations/telegram/outbox.py,sha256=U3qve8pTSRakeqMMWgWqkSvL1e7zoz_aWqhLNH2eZEk,13954
103
+ codex_autorunner/integrations/telegram/overflow.py,sha256=LUbPTwA2BxFV1w0sF1XAhIu_ft_eieSVYmjuftiVyO0,5384
104
+ codex_autorunner/integrations/telegram/progress_stream.py,sha256=jphPyvF1ka_ppEK66spAbcSDkEcNNXuJ2Y6p89VC4ks,7756
105
+ codex_autorunner/integrations/telegram/rendering.py,sha256=uBhymMUQuiKJJZ0ZxSl01sC4dYFVJqoIMMMFlm1XGZc,3531
106
+ codex_autorunner/integrations/telegram/retry.py,sha256=GIdMSSCVa2Sjd6-t2FC1O6AwPPSEM342rjjuI1Y7Tpk,1349
107
+ codex_autorunner/integrations/telegram/runtime.py,sha256=V9P93PDl_-DrunkYYheRmvCjqNaaTwhw0D127vb0XFw,10375
108
+ codex_autorunner/integrations/telegram/service.py,sha256=4igUsvAfCM_AsVy83-utcLvnDEQnXAPE6j29N6rkkkQ,57960
109
+ codex_autorunner/integrations/telegram/state.py,sha256=y4tvDseDwaYPuYJXQ9P782BqRilkwCltX7Gr2qc5DRM,83841
110
+ codex_autorunner/integrations/telegram/ticket_flow_bridge.py,sha256=T5supFcLRvi2AFPXMVj-mejoLvUT6qQVOfvfRdmmcVM,11515
111
+ codex_autorunner/integrations/telegram/transport.py,sha256=FOyGd0YJwOKptbPe6BcrmlNiz6D0e9q346FfVaf9nfA,14662
112
+ codex_autorunner/integrations/telegram/trigger_mode.py,sha256=bDGQUMUbnUNq4u25c-zmBUAOlFvnl5a8YyWgTN2Y8h8,1531
113
+ codex_autorunner/integrations/telegram/types.py,sha256=SjeVaus_YtWz-06GqkSWl99cHTdu0YKd5egdlYY3tMI,1707
114
+ codex_autorunner/integrations/telegram/voice.py,sha256=I3XD-Uc-egA2UVfby210-kCLhL_pBfekyaaGLf359Qs,14784
115
+ codex_autorunner/integrations/telegram/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
+ codex_autorunner/integrations/telegram/handlers/approvals.py,sha256=G8-FwRSyyBs9emb9eJjf4a0kD2rdqnFf25SldfHCKZ4,9365
117
+ codex_autorunner/integrations/telegram/handlers/callbacks.py,sha256=CzuF5aQ6CU7_q--EJMQ1T26HhP7MsSWKzbkv75ys-Gg,3471
118
+ codex_autorunner/integrations/telegram/handlers/commands_runtime.py,sha256=NQT57Xh6XVmbiJhFo_H9LSd8WkCqoHWZjPhcKTuHqd8,102158
119
+ codex_autorunner/integrations/telegram/handlers/commands_spec.py,sha256=1Tg4JpofkdU69Q4-FnWSYSP6AwpCDnlT5yhOsFGXNto,4994
120
+ codex_autorunner/integrations/telegram/handlers/messages.py,sha256=vfqQgWhnA8XSnJndxfiqwTd6vOpRa3-F62y0U5U5Hnk,31680
121
+ codex_autorunner/integrations/telegram/handlers/questions.py,sha256=GoOZzyYPqOt9jW4T27EzjNUOQrMgf3i3F6fJ6tWILzI,15570
122
+ codex_autorunner/integrations/telegram/handlers/selections.py,sha256=V0gRMc6n8aVtAhIW9QGIc3abqFN1d9UKdPli1jj3cdM,22685
123
+ codex_autorunner/integrations/telegram/handlers/utils.py,sha256=T2y-2p1SNduypiNz9uq4zqRIFq47z9Lop6_s3nhUzN8,5317
124
+ codex_autorunner/integrations/telegram/handlers/commands/__init__.py,sha256=NjxemJCRhWUDCP0nacsBfhXMYYUstVotgUhcISTaANU,812
125
+ codex_autorunner/integrations/telegram/handlers/commands/approvals.py,sha256=uQsGQtSPjXZ5FyNldvVsZDImEI-G-YOMUwhlnth2wlc,6632
126
+ codex_autorunner/integrations/telegram/handlers/commands/execution.py,sha256=BgHwY6efXY-x7QKxzGlTGyKBubKoBAygO7phLndg5JI,104903
127
+ codex_autorunner/integrations/telegram/handlers/commands/files.py,sha256=xghRc6jF8iZoYxnOZY1h9wO08vLf72JcIcvRetfGQOU,50701
128
+ codex_autorunner/integrations/telegram/handlers/commands/flows.py,sha256=WZuakvnP5cTpUcVRNeZvAwVPbtNQM91cRvbdhb5DxuI,8389
129
+ codex_autorunner/integrations/telegram/handlers/commands/formatting.py,sha256=WRJDe2jUtrGMFVsp2Hah1GDsfQUV0Dd0KLSbcrY0j0o,3139
130
+ codex_autorunner/integrations/telegram/handlers/commands/github.py,sha256=IKWKYttLqUei5NCzjIIqvGBcFpRBffdfvTwSMzPHzWo,68888
131
+ codex_autorunner/integrations/telegram/handlers/commands/shared.py,sha256=Lam8f76yQGkTBsr0QpawOBU_eIjch8C4NzW6ifSd0sQ,6581
132
+ codex_autorunner/integrations/telegram/handlers/commands/voice.py,sha256=y06N3ju4RjI1Y4r69Os-2BcR6erHjXyGOkoiLWepS0k,3955
133
+ codex_autorunner/integrations/telegram/handlers/commands/workspace.py,sha256=w8LYnUJ0XX4VNmN0jkpGgbksyilliOBNQg71qiA24CE,81418
134
+ codex_autorunner/routes/__init__.py,sha256=hkTODmIm0HmhF4BgbxnfW3KbGswV3PVNFZ3WGwba208,2872
135
+ codex_autorunner/routes/agents.py,sha256=1di_lDZyjsQ4y_zNL5Nms4VDbSbG7zrn_K1BOVfkvcU,5533
136
+ codex_autorunner/routes/analytics.py,sha256=6whYX8zeVtpBnc8a77GsnTw5QdNC1jhJ3KzuYqg-LU8,7847
137
+ codex_autorunner/routes/app_server.py,sha256=OUYVzKTObaWII4I9xXhwYYLdEJ_oiYJJoHoocs7LyVc,5349
138
+ codex_autorunner/routes/base.py,sha256=2xuVFbHxSvSfEgihNALOlHw4lIoK-7cp4u0lZNq3m80,26062
139
+ codex_autorunner/routes/file_chat.py,sha256=O6jRsJF4wwyKiwEctyq9XMkAg4bkis_SaLq5nCDx2yk,29815
140
+ codex_autorunner/routes/flows.py,sha256=1oARZQ0UCWyrdFNJoB0GrSuN7c9w3zRefr2ws2mIiG8,35190
141
+ codex_autorunner/routes/messages.py,sha256=erN5DK4c0rFFCOFlBDSX0ht3uI6WCBo96BMwvQJvo0s,16631
142
+ codex_autorunner/routes/repos.py,sha256=qE_ObzKYiJap5MJyFHSoTjYzB9DnWYPWB3QiWrpDwWo,7999
143
+ codex_autorunner/routes/review.py,sha256=K0g1YzEvi845QSCY8VxejZJ9mpmfOPTJ6LVWe_hBHBA,5519
144
+ codex_autorunner/routes/sessions.py,sha256=C1FzYVC3d6U5w5vpHksjwi-O5Rk-y_hYlX5dAMM7MGw,6537
145
+ codex_autorunner/routes/settings.py,sha256=f-le6apg8dtvebMs0EGgUXLWjN-gkxenr5Ahbrmoj2k,7349
146
+ codex_autorunner/routes/shared.py,sha256=_UEIQrfRSpxsVz47R8EzsknNDCg5-XrTbZUz_Ah7xg0,9155
147
+ codex_autorunner/routes/system.py,sha256=K-yFq1w4A0amKoHJ7fdDvGh_-ppkjwOPj7Xb36y2f6s,7573
148
+ codex_autorunner/routes/terminal_images.py,sha256=0wNAIHRcN_iIzeXuVN6nqe9E7OYEoQ6C84Tcx93r1XI,3299
149
+ codex_autorunner/routes/usage.py,sha256=EwP407sSI0wFpKITP9LJE9sub0QcXe2AViIC8BUhFPU,2667
150
+ codex_autorunner/routes/voice.py,sha256=s_eDNBc3AxjrC6cZ7IETtIb5ybkoQLCK4wjhJwDN_lc,4856
151
+ codex_autorunner/routes/workspace.py,sha256=5fqrt-5VpNidLZ9rxkAr3RH0jxy3EhU1DNFiSSVESo4,11256
152
+ codex_autorunner/static/agentControls.js,sha256=NzP6KZNM6DQmzD8-_E94dk6FIRMWZp_YoVFqB5pRJo4,11761
153
+ codex_autorunner/static/agentEvents.js,sha256=HAQHeKJnOqj6IkcBEM1ye5p6rcIjK9c9LZfBWKowonw,8188
154
+ codex_autorunner/static/app.js,sha256=tb3KBU4UunpIDqT6j18UqpH5WpqBOzLEEVq8LfBga34,3770
155
+ codex_autorunner/static/autoRefresh.js,sha256=mLTGffVPIEYCjfqh2ZWU_gAiiDQ3bxMb44CFDf3jLp4,6544
156
+ codex_autorunner/static/bootstrap.js,sha256=ZXzMfDMjiC5ReOrDbv9lqSBaTZQlM7eqEAJ4IKPhm5s,4833
157
+ codex_autorunner/static/bus.js,sha256=NXuNHd_43Irr-5Ood1LQ15rSwCTm5J_Pv9ybnkeGQM0,630
158
+ codex_autorunner/static/cache.js,sha256=idp3ISlRKjSK_eSRUmL_rWGI2qx7g-BJ1_48Mz6IWSw,1035
159
+ codex_autorunner/static/constants.js,sha256=TuLK0-_WKJVE5uJUeTl_CVtD5laEtTjtTnu0Uv2eIFw,1932
160
+ codex_autorunner/static/dashboard.js,sha256=PM7XxeKQQnJqDxDc572Oxu_muiXkyOmmVbfxAXc3csQ,28855
161
+ codex_autorunner/static/diffRenderer.js,sha256=AVeJ6yt8UBk6yQJWV6VCIsH9TIY5CYTCjNFD8uOWQ9U,1307
162
+ codex_autorunner/static/docChatCore.js,sha256=XJW4LzojwfMITuw0QictzDQBL3Pu_y8LM71r6Pr3USc,13540
163
+ codex_autorunner/static/docChatStorage.js,sha256=OgPiNgvPVVp0kJcCVy-ILjMSo5--keyrIleWacA-k6A,2104
164
+ codex_autorunner/static/docChatVoice.js,sha256=YrKIf0INTke3ge9uDHLl_Fd3wFcISGyjJlQU-iyhAlU,2419
165
+ codex_autorunner/static/docEditor.js,sha256=w2AqcQEGIkRut2xpRiFG4ndxccv0THoh3ZdwFw2YM6s,4580
166
+ codex_autorunner/static/env.js,sha256=3-XgQC03WqalAg_T8dabn47uSKS7lPM874OzV7ET5jU,1813
167
+ codex_autorunner/static/eventSummarizer.js,sha256=PuLdLS9MIVrp97W47iAlEf8TFLNTHCigT2clYCH2sZg,5425
168
+ codex_autorunner/static/fileChat.js,sha256=NDuXXD35fVK2qxwQ9e1fAXMfy2WhIsq-L8BzIlyKOHA,5838
169
+ codex_autorunner/static/health.js,sha256=nwB-Ofc96zTP6YLQDaIJfO7duLug9bj3CCe893M7x1I,5204
170
+ codex_autorunner/static/hub.js,sha256=mLbky3q-RJSJjGB1SRL-QyTIG9UP-mivtwqLhe47GlE,49620
171
+ codex_autorunner/static/index.html,sha256=F7028vr24lFe68idquwbgHJcnwBT1vMazNBiHtub338,47480
172
+ codex_autorunner/static/liveUpdates.js,sha256=SiVWPQRp-mqmmhRqOQWPFtMBLUA89J1KYvif88ZCMOk,1950
173
+ codex_autorunner/static/loader.js,sha256=2Xyg_D43sSsH3fmm93-utyPJJSQ7KpvebbhNrM79ljo,1065
174
+ codex_autorunner/static/messages.js,sha256=Of3c1uO2PqRnxFxzuXZhIa5u61sQPD4vxpCMQImtsXA,17301
175
+ codex_autorunner/static/mobileCompact.js,sha256=cDXLGeFLj5_knH-9qOXfbR5IXjCttyQ3-jclL4k1ouo,9473
176
+ codex_autorunner/static/settings.js,sha256=zfVrm6dCtv8Y6s5j205weAMAEH9kVaWs0l2DgY_SkuE,5518
177
+ codex_autorunner/static/styles.css,sha256=0waFQzATECyWIiiUWw8VUkUtHnBL-OSxmBrjd-XSShA,186419
178
+ codex_autorunner/static/tabs.js,sha256=xR6EosAkbETvRp9NtoqEqti2SrWMJHZ29R1VTCiVCCA,2167
179
+ codex_autorunner/static/terminal.js,sha256=x86-_WgSgAKgQrQ4jGCTM6T-nXcsGDPyRk271MYxTeg,973
180
+ codex_autorunner/static/terminalManager.js,sha256=_KqMvFqCq3t5St_Bxl7pC8w9KAvOth9InT56hUSnZxc,139493
181
+ codex_autorunner/static/ticketChatActions.js,sha256=dH0h7CdCbEHr94aUQI-jxkLLoXw6_eoNeNhpcOWR0Ck,11862
182
+ codex_autorunner/static/ticketChatEvents.js,sha256=9Y1CA4t--bxqXRHrsE4O4Dx5Td9KAFAAZwLXXj_y1yM,536
183
+ codex_autorunner/static/ticketChatStorage.js,sha256=lEg2zKJfEA34ZS0azwCmGPW8CPpX3wqCmyNcCafP9Yw,621
184
+ codex_autorunner/static/ticketChatStream.js,sha256=yotrAXNI4FXbJFGuiLgVcYXDs3KU4GaNmQdwrECGPrk,9432
185
+ codex_autorunner/static/ticketEditor.js,sha256=3-URyHIi34aDecSBZUlwN5Y-s4wfbQjlOfAEP0O1Ye4,26710
186
+ codex_autorunner/static/ticketVoice.js,sha256=CVRumgn6kc9uwEqvRxh5bdHx4C1DTOv-SEP_fJgeLxM,320
187
+ codex_autorunner/static/tickets.js,sha256=U_-CA7r9zVDMbeuaOWBuY9fAbZqXf83DV5ME6orYMug,50035
188
+ codex_autorunner/static/utils.js,sha256=4geWosNqyTXK1mqP1WyoFJwueCZCy8HhIeayfmTY8io,22033
189
+ codex_autorunner/static/voice.js,sha256=QfQvDQK-AkyO1nNtYxq04dKolfyWHiLHG5uihGV9hpU,20209
190
+ codex_autorunner/static/workspace.js,sha256=ZMJK4TQLfuAz47tyRZvW7s6TGtdVEF0h4Xvft2unGrs,26325
191
+ codex_autorunner/static/workspaceApi.js,sha256=kZ79wHLBocaoFQwMN09XoQ8HM2rBKucqa_NQx5FPOlM,2015
192
+ codex_autorunner/static/workspaceFileBrowser.js,sha256=T-JP8rC2qHUGUN3LvbTN7bjPf_aZm-IlfXa_WmavuvU,20758
193
+ codex_autorunner/static/vendor/LICENSE.xterm,sha256=R1kKvILKKMOnUg07hzusejoAsCy8Mik-HxQdzNJpgIc,1186
194
+ codex_autorunner/static/vendor/xterm-addon-fit.js,sha256=EPMZTF8XwXhvt9XbhlweyFObZzajGAY_04var3xGhI8,1503
195
+ codex_autorunner/static/vendor/xterm.css,sha256=gy8_LGA7Q61DUf8ElwFQzHqHMBQnbbEmpgZcbdgeSHI,5383
196
+ codex_autorunner/static/vendor/xterm.js,sha256=8K6g919IVZATrmZDwked1zfSbaQtVSTm0rcJFa5lI8c,283404
197
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-cyrillic-ext.woff2,sha256=k0PeLKXZVJ95LnliN1r477DzIMdkO_02yIS1ow5cOW8,1664
198
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-cyrillic.woff2,sha256=SZWppDrGWewy_Ni0Y3Vc1qB7Mabms4lKahU7Zhz0kOI,8892
199
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-greek.woff2,sha256=ScPabJorJ5sPH4YPXPsfXcONiKXHvpybGDe7xOPbYRE,6800
200
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-latin-ext.woff2,sha256=nDjLLQ0tk8HubiH6eNt28T6n4V4VzGQhTHyom2qqNcQ,11596
201
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-latin.woff2,sha256=LDK5s-41jBGeIQ9vUZX5vTSJTXinhf8uldYOcY5ACvQ,31340
202
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-vietnamese.woff2,sha256=1E6xk2BDpWA46wLdcLJD83m-9leD-U7BLyd1UHIEEfE,5872
203
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-cyrillic-ext.woff2,sha256=k0PeLKXZVJ95LnliN1r477DzIMdkO_02yIS1ow5cOW8,1664
204
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-cyrillic.woff2,sha256=SZWppDrGWewy_Ni0Y3Vc1qB7Mabms4lKahU7Zhz0kOI,8892
205
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-greek.woff2,sha256=ScPabJorJ5sPH4YPXPsfXcONiKXHvpybGDe7xOPbYRE,6800
206
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-latin-ext.woff2,sha256=nDjLLQ0tk8HubiH6eNt28T6n4V4VzGQhTHyom2qqNcQ,11596
207
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-latin.woff2,sha256=LDK5s-41jBGeIQ9vUZX5vTSJTXinhf8uldYOcY5ACvQ,31340
208
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-vietnamese.woff2,sha256=1E6xk2BDpWA46wLdcLJD83m-9leD-U7BLyd1UHIEEfE,5872
209
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-cyrillic-ext.woff2,sha256=k0PeLKXZVJ95LnliN1r477DzIMdkO_02yIS1ow5cOW8,1664
210
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-cyrillic.woff2,sha256=SZWppDrGWewy_Ni0Y3Vc1qB7Mabms4lKahU7Zhz0kOI,8892
211
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-greek.woff2,sha256=ScPabJorJ5sPH4YPXPsfXcONiKXHvpybGDe7xOPbYRE,6800
212
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-latin-ext.woff2,sha256=nDjLLQ0tk8HubiH6eNt28T6n4V4VzGQhTHyom2qqNcQ,11596
213
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-latin.woff2,sha256=LDK5s-41jBGeIQ9vUZX5vTSJTXinhf8uldYOcY5ACvQ,31340
214
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-vietnamese.woff2,sha256=1E6xk2BDpWA46wLdcLJD83m-9leD-U7BLyd1UHIEEfE,5872
215
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/OFL.txt,sha256=p2q_ACxJCX0UboZ0CjEFpdAEULFZLoIKEQmoxWgM1pc,4399
216
+ codex_autorunner/tickets/__init__.py,sha256=NgZhIGivZN8BzGJL4rW-OWgBOf8TvWXJblxs-M5iRSM,526
217
+ codex_autorunner/tickets/agent_pool.py,sha256=vpCQSb0UbkLSBxZWGOEvsCLwwgxNlqxKAzqlIG6S2nk,15115
218
+ codex_autorunner/tickets/files.py,sha256=eNWXZ-PoqyLj4QmJte7LzupH1aPIz-RwXRDRSgb5fsc,2435
219
+ codex_autorunner/tickets/frontmatter.py,sha256=zsv6Y-csjpL_jtzNPk3d34oOqrg-6EjnAlN98BEtF_g,1547
220
+ codex_autorunner/tickets/lint.py,sha256=6vKPWMqbBvJ0fPJqBZGWo0aIsoYckceMjdVIzREUxMI,2873
221
+ codex_autorunner/tickets/models.py,sha256=J6Ssmhgg6BqyIFkEnJo2nseUcQdNRgYV0dmxLTdp0bM,2653
222
+ codex_autorunner/tickets/outbox.py,sha256=IpaNcd3YNCX48pp_5KqyMbSHrWBgvPk7TZ7lvdP6l80,6594
223
+ codex_autorunner/tickets/replies.py,sha256=R_eeg55s8dQ4VBcIpjPI1up4jCQvG8l_c0uV4LUa5Gs,4841
224
+ codex_autorunner/tickets/runner.py,sha256=ScapnU-tAy8YHYIZe1waXdU2xGsQYrXJ0B4W1HJVtZQ,32872
225
+ codex_autorunner/tickets/spec_ingest.py,sha256=PmCYdGFeKVN6C9tae3j1zt8WXvISunlFpVHimycaMpo,2507
226
+ codex_autorunner/voice/__init__.py,sha256=Z2ziy5TP4NCgNi4xld1FfRIbSJL9hpgkggYhbEtGOgQ,991
227
+ codex_autorunner/voice/capture.py,sha256=UzvQvu3KaKpL4RoyXT-mq24uohAXvHIZ8vi6wObEJgQ,11435
228
+ codex_autorunner/voice/config.py,sha256=BZAq90KS6aLLFto653a-PYj8Aq6b5Ty_UBBFhcrzvw0,6285
229
+ codex_autorunner/voice/provider.py,sha256=zvNVuvsrZfM4bj3N2xzEgTtQ78YGWcdjUW9fJK6Ziog,1750
230
+ codex_autorunner/voice/resolver.py,sha256=EC1AtmIrwRQBQE_hwreLgKhUtvzZ9Tg5vu8_MNIXES4,1130
231
+ codex_autorunner/voice/service.py,sha256=_kVyuB_3928BbGHrAqF28N_nCfKPLB6K9ilG79wyzl0,9052
232
+ codex_autorunner/voice/providers/__init__.py,sha256=L37XCpAHluK83m62y0_I0KGkiCdu1Keml02gS_g2Brc,200
233
+ codex_autorunner/voice/providers/openai_whisper.py,sha256=HCK_GMmYFoZ4EcneGsjr4_P9JzblRO8AOguVD5pOcLk,11973
234
+ codex_autorunner/web/__init__.py,sha256=fDDDTYL26__wwaWd7xtI6axymkOgYntcrlHeHptDb8I,29
235
+ codex_autorunner/web/app.py,sha256=q4a3ShXLunmMWdBqe8q2bSVi6n_OqooTt5JTEhJSzvg,76548
236
+ codex_autorunner/web/hub_jobs.py,sha256=rx4r2qFOyEwzctnabRtU1hrOwp8ETPNjarryNTE1aFg,6057
237
+ codex_autorunner/web/middleware.py,sha256=qSKNejOjJIX0DBj7ZOsc3l6lDY4VG14AGH79Szu9m5A,21452
238
+ codex_autorunner/web/pty_session.py,sha256=K1_hJFYy-xh90o1hDezmsC3euP7ifsgHMzAg1E9HZA8,12791
239
+ codex_autorunner/web/runner_manager.py,sha256=QCaypoNH0445bcNggpdNP-RrM0KEyxpK-LSl3AdyS64,646
240
+ codex_autorunner/web/schemas.py,sha256=2ZUxk4Ln0cbS0UGzYLb77W_nL4N2O8czZQl9T37cpmU,8421
241
+ codex_autorunner/web/static_assets.py,sha256=RL0M7HzW2_HlPXqZZV7cpVIKe6wqzsGSZS-0ECO8KIs,13893
242
+ codex_autorunner/web/static_refresh.py,sha256=PdJHcTJGP0cHr1FffhbIbyL6GQe_cv3jzSy4gHuDQOw,3144
243
+ codex_autorunner/web/terminal_sessions.py,sha256=JHS_YsWpdQSXKIrbbkPOgugj2EdpG4RP2jl2nLizTZc,2650
244
+ codex_autorunner/workspace/__init__.py,sha256=yTql6_7BVZG0tirPMhbmMEVkk_j7Q8Wvb89eIZ0K7o8,977
245
+ codex_autorunner/workspace/paths.py,sha256=wm7r8s1fMTTRuk_CZbglTz9R1JBPwV0NEjRvgQTfVxk,10486
246
+ codex_autorunner-1.0.0.dist-info/licenses/LICENSE,sha256=gfYghezUeimFKy0hTmkOiAAwBY_QdRSXDTypbMtZU0k,1068
247
+ codex_autorunner-1.0.0.dist-info/METADATA,sha256=XbQGyWC35MUjLKquX7Hdy7MUCpAFY5ERcoSN1ea9N6c,14574
248
+ codex_autorunner-1.0.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
249
+ codex_autorunner-1.0.0.dist-info/entry_points.txt,sha256=iPTzENG1MGBhxWF4x8W7VWk3iq4XurmGXMnIch7AVTs,93
250
+ codex_autorunner-1.0.0.dist-info/top_level.txt,sha256=fc2h9rEENr-ZdyLemPJbMcWmsWlz4JuyD1UOkPLLVSQ,17
251
+ codex_autorunner-1.0.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.10.1)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,292 +0,0 @@
1
- """Centralized approval and sandbox policy mappings for Codex and OpenCode agents."""
2
-
3
- from dataclasses import dataclass
4
- from typing import Any, Optional, Union
5
-
6
- # ========================================================================
7
- # Approval Policies
8
- # ========================================================================
9
-
10
-
11
- class ApprovalPolicy:
12
- """Canonical approval policy values for both Codex and OpenCode."""
13
-
14
- NEVER = "never"
15
- ON_FAILURE = "on-failure"
16
- ON_REQUEST = "on-request"
17
- UNTRUSTED = "untrusted"
18
-
19
- ALL_VALUES = {NEVER, ON_FAILURE, ON_REQUEST, UNTRUSTED}
20
-
21
-
22
- # ========================================================================
23
- # Sandbox Policies (Codex)
24
- # ========================================================================
25
-
26
-
27
- class SandboxPolicy:
28
- """Canonical sandbox policy values for Codex app-server."""
29
-
30
- DANGER_FULL_ACCESS = "dangerFullAccess"
31
- READ_ONLY = "readOnly"
32
- WORKSPACE_WRITE = "workspaceWrite"
33
- EXTERNAL_SANDBOX = "externalSandbox"
34
-
35
- ALL_VALUES = {
36
- DANGER_FULL_ACCESS,
37
- READ_ONLY,
38
- WORKSPACE_WRITE,
39
- EXTERNAL_SANDBOX,
40
- }
41
-
42
-
43
- # ========================================================================
44
- # Permission Policies (OpenCode)
45
- # ========================================================================
46
-
47
-
48
- class PermissionPolicy:
49
- """Canonical permission policy values for OpenCode."""
50
-
51
- ALLOW = "allow"
52
- DENY = "deny"
53
- ASK = "ask"
54
-
55
- ALL_VALUES = {ALLOW, DENY, ASK}
56
-
57
-
58
- # ========================================================================
59
- # Data Classes
60
- # ========================================================================
61
-
62
-
63
- @dataclass
64
- class SandboxPolicyConfig:
65
- """Configuration for Codex sandbox policies."""
66
-
67
- policy: Union[str, dict[str, Any]]
68
- """Either a string policy type or full policy dict with type and options."""
69
-
70
-
71
- @dataclass
72
- class PolicyMapping:
73
- """Unified policy mapping for both Codex and OpenCode agents."""
74
-
75
- approval_policy: str
76
- sandbox_policy: Union[str, dict[str, Any]]
77
- permission_policy: Optional[str] = None
78
-
79
-
80
- # ========================================================================
81
- # Normalization Functions
82
- # ========================================================================
83
-
84
-
85
- def normalize_approval_policy(policy: Optional[str]) -> str:
86
- """Normalize approval policy to canonical value.
87
-
88
- Args:
89
- policy: Approval policy string (case-insensitive, various aliases accepted).
90
-
91
- Returns:
92
- Canonical approval policy value.
93
-
94
- Raises:
95
- ValueError: If policy is not a recognized value.
96
- """
97
- if policy is None:
98
- return ApprovalPolicy.NEVER
99
-
100
- if not isinstance(policy, str):
101
- raise ValueError(f"Invalid approval policy: {policy!r}")
102
-
103
- normalized = policy.strip()
104
- if not normalized:
105
- raise ValueError(f"Invalid approval policy: {policy!r}")
106
-
107
- normalized = normalized.lower()
108
-
109
- # Aliases for never
110
- if normalized in ("never", "no", "false", "0"):
111
- return ApprovalPolicy.NEVER
112
-
113
- # Aliases for on-failure
114
- if normalized in (
115
- "on-failure",
116
- "on_failure",
117
- "onfailure",
118
- "fail",
119
- "failure",
120
- ):
121
- return ApprovalPolicy.ON_FAILURE
122
-
123
- # Aliases for on-request
124
- if normalized in ("on-request", "on_request", "onrequest", "ask", "prompt"):
125
- return ApprovalPolicy.ON_REQUEST
126
-
127
- # Aliases for untrusted
128
- if normalized in (
129
- "untrusted",
130
- "unlesstrusted",
131
- "unless-trusted",
132
- "unless trusted",
133
- "auto",
134
- ):
135
- return ApprovalPolicy.UNTRUSTED
136
-
137
- raise ValueError(
138
- f"Invalid approval policy: {policy!r}. "
139
- f"Valid values: {', '.join(sorted(ApprovalPolicy.ALL_VALUES))}"
140
- )
141
-
142
-
143
- def normalize_sandbox_policy(policy: Optional[Any]) -> Union[str, dict[str, Any]]:
144
- """Normalize sandbox policy to canonical value.
145
-
146
- Args:
147
- policy: Sandbox policy (string or dict with 'type' field).
148
-
149
- Returns:
150
- Normalized sandbox policy as string or dict.
151
- """
152
- if policy is None:
153
- return SandboxPolicy.DANGER_FULL_ACCESS
154
-
155
- # If it's a dict, normalize the type field
156
- if isinstance(policy, dict):
157
- policy_value = policy.copy()
158
- type_value = policy_value.get("type")
159
- if isinstance(type_value, str):
160
- policy_value["type"] = normalize_sandbox_policy_type(type_value)
161
- return policy_value
162
-
163
- # If it's a string, wrap in dict structure
164
- if isinstance(policy, str):
165
- normalized_type = normalize_sandbox_policy_type(policy)
166
- return {"type": normalized_type}
167
-
168
- # For other types, convert to string and wrap
169
- return {"type": SandboxPolicy.DANGER_FULL_ACCESS}
170
-
171
-
172
- def normalize_sandbox_policy_type(raw: str) -> str:
173
- """Normalize sandbox policy type string to canonical value.
174
-
175
- Args:
176
- raw: Sandbox policy type string (case-insensitive).
177
-
178
- Returns:
179
- Canonical sandbox policy type.
180
- """
181
- if not raw:
182
- return SandboxPolicy.DANGER_FULL_ACCESS
183
-
184
- # Normalize case and remove special characters
185
- import re
186
-
187
- cleaned = re.sub(r"[^a-zA-Z0-9]+", "", raw.strip())
188
- if not cleaned:
189
- return SandboxPolicy.DANGER_FULL_ACCESS
190
-
191
- canonical = _SANDBOX_POLICY_CANONICAL.get(cleaned.lower())
192
- return canonical or raw.strip()
193
-
194
-
195
- _SANDBOX_POLICY_CANONICAL = {
196
- "dangerfullaccess": SandboxPolicy.DANGER_FULL_ACCESS,
197
- "readonly": SandboxPolicy.READ_ONLY,
198
- "workspacewrite": SandboxPolicy.WORKSPACE_WRITE,
199
- "externalsandbox": SandboxPolicy.EXTERNAL_SANDBOX,
200
- }
201
-
202
-
203
- # ========================================================================
204
- # Mapping Functions
205
- # ========================================================================
206
-
207
-
208
- def map_approval_to_permission(
209
- approval_policy: Optional[str], *, default: str = PermissionPolicy.ALLOW
210
- ) -> str:
211
- """Map approval policy to OpenCode permission policy.
212
-
213
- This maps Codex-style approval policies to OpenCode-style permission policies.
214
-
215
- Args:
216
- approval_policy: Codex approval policy.
217
- default: Default permission if policy is None or unrecognized.
218
-
219
- Returns:
220
- OpenCode permission policy (allow/deny/ask).
221
- """
222
- if approval_policy is None:
223
- return default
224
-
225
- try:
226
- normalized = normalize_approval_policy(approval_policy)
227
- except ValueError:
228
- # Invalid policy, return default
229
- return default
230
-
231
- # Direct matches
232
- if normalized == ApprovalPolicy.NEVER:
233
- return PermissionPolicy.ALLOW
234
- if normalized == ApprovalPolicy.ON_FAILURE:
235
- return PermissionPolicy.ASK
236
- if normalized == ApprovalPolicy.ON_REQUEST:
237
- return PermissionPolicy.ASK
238
- if normalized == ApprovalPolicy.UNTRUSTED:
239
- return PermissionPolicy.ASK
240
-
241
- return default
242
-
243
-
244
- def build_codex_sandbox_policy(
245
- sandbox_mode: Optional[str],
246
- *,
247
- repo_root: Optional[Any] = None,
248
- network_access: bool = False,
249
- ) -> Union[str, dict[str, Any]]:
250
- """Build Codex sandbox policy from mode string.
251
-
252
- Args:
253
- sandbox_mode: Sandbox mode string.
254
- repo_root: Repository root path (for workspaceWrite policy).
255
- network_access: Whether to allow network access (for workspaceWrite).
256
-
257
- Returns:
258
- Sandbox policy string or dict.
259
- """
260
- if not sandbox_mode:
261
- return SandboxPolicy.DANGER_FULL_ACCESS
262
-
263
- normalized_mode = normalize_sandbox_policy_type(sandbox_mode)
264
-
265
- # workspaceWrite requires dict structure with writableRoots and networkAccess
266
- if normalized_mode == SandboxPolicy.WORKSPACE_WRITE and repo_root is not None:
267
- return {
268
- "type": SandboxPolicy.WORKSPACE_WRITE,
269
- "writableRoots": [str(repo_root)],
270
- "networkAccess": network_access,
271
- }
272
-
273
- # Other modes can be simple strings
274
- return normalized_mode
275
-
276
-
277
- # ========================================================================
278
- # Exports
279
- # ========================================================================
280
-
281
- __all__ = [
282
- "ApprovalPolicy",
283
- "SandboxPolicy",
284
- "PermissionPolicy",
285
- "SandboxPolicyConfig",
286
- "PolicyMapping",
287
- "normalize_approval_policy",
288
- "normalize_sandbox_policy",
289
- "normalize_sandbox_policy_type",
290
- "map_approval_to_permission",
291
- "build_codex_sandbox_policy",
292
- ]