codex-autorunner 1.0.0__py3-none-any.whl → 1.2.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 (227) hide show
  1. codex_autorunner/__init__.py +12 -1
  2. codex_autorunner/agents/codex/harness.py +1 -1
  3. codex_autorunner/agents/opencode/client.py +113 -4
  4. codex_autorunner/agents/opencode/constants.py +3 -0
  5. codex_autorunner/agents/opencode/harness.py +6 -1
  6. codex_autorunner/agents/opencode/runtime.py +59 -18
  7. codex_autorunner/agents/opencode/supervisor.py +4 -0
  8. codex_autorunner/agents/registry.py +36 -7
  9. codex_autorunner/bootstrap.py +226 -4
  10. codex_autorunner/cli.py +5 -1174
  11. codex_autorunner/codex_cli.py +20 -84
  12. codex_autorunner/core/__init__.py +20 -0
  13. codex_autorunner/core/about_car.py +119 -1
  14. codex_autorunner/core/app_server_ids.py +59 -0
  15. codex_autorunner/core/app_server_threads.py +17 -2
  16. codex_autorunner/core/app_server_utils.py +165 -0
  17. codex_autorunner/core/archive.py +349 -0
  18. codex_autorunner/core/codex_runner.py +6 -2
  19. codex_autorunner/core/config.py +433 -4
  20. codex_autorunner/core/context_awareness.py +38 -0
  21. codex_autorunner/core/docs.py +0 -122
  22. codex_autorunner/core/drafts.py +58 -4
  23. codex_autorunner/core/exceptions.py +4 -0
  24. codex_autorunner/core/filebox.py +265 -0
  25. codex_autorunner/core/flows/controller.py +96 -2
  26. codex_autorunner/core/flows/models.py +13 -0
  27. codex_autorunner/core/flows/reasons.py +52 -0
  28. codex_autorunner/core/flows/reconciler.py +134 -0
  29. codex_autorunner/core/flows/runtime.py +57 -4
  30. codex_autorunner/core/flows/store.py +142 -7
  31. codex_autorunner/core/flows/transition.py +27 -15
  32. codex_autorunner/core/flows/ux_helpers.py +272 -0
  33. codex_autorunner/core/flows/worker_process.py +32 -6
  34. codex_autorunner/core/git_utils.py +62 -0
  35. codex_autorunner/core/hub.py +291 -20
  36. codex_autorunner/core/lifecycle_events.py +253 -0
  37. codex_autorunner/core/notifications.py +14 -2
  38. codex_autorunner/core/path_utils.py +2 -1
  39. codex_autorunner/core/pma_audit.py +224 -0
  40. codex_autorunner/core/pma_context.py +496 -0
  41. codex_autorunner/core/pma_dispatch_interceptor.py +284 -0
  42. codex_autorunner/core/pma_lifecycle.py +527 -0
  43. codex_autorunner/core/pma_queue.py +367 -0
  44. codex_autorunner/core/pma_safety.py +221 -0
  45. codex_autorunner/core/pma_state.py +115 -0
  46. codex_autorunner/core/ports/__init__.py +28 -0
  47. codex_autorunner/{integrations/agents → core/ports}/agent_backend.py +13 -8
  48. codex_autorunner/core/ports/backend_orchestrator.py +41 -0
  49. codex_autorunner/{integrations/agents → core/ports}/run_event.py +23 -6
  50. codex_autorunner/core/prompt.py +0 -80
  51. codex_autorunner/core/prompts.py +56 -172
  52. codex_autorunner/core/redaction.py +0 -4
  53. codex_autorunner/core/review_context.py +11 -9
  54. codex_autorunner/core/runner_controller.py +35 -33
  55. codex_autorunner/core/runner_state.py +147 -0
  56. codex_autorunner/core/runtime.py +829 -0
  57. codex_autorunner/core/sqlite_utils.py +13 -4
  58. codex_autorunner/core/state.py +7 -10
  59. codex_autorunner/core/state_roots.py +62 -0
  60. codex_autorunner/core/supervisor_protocol.py +15 -0
  61. codex_autorunner/core/templates/__init__.py +39 -0
  62. codex_autorunner/core/templates/git_mirror.py +234 -0
  63. codex_autorunner/core/templates/provenance.py +56 -0
  64. codex_autorunner/core/templates/scan_cache.py +120 -0
  65. codex_autorunner/core/text_delta_coalescer.py +54 -0
  66. codex_autorunner/core/ticket_linter_cli.py +218 -0
  67. codex_autorunner/core/ticket_manager_cli.py +494 -0
  68. codex_autorunner/core/time_utils.py +11 -0
  69. codex_autorunner/core/types.py +18 -0
  70. codex_autorunner/core/update.py +4 -5
  71. codex_autorunner/core/update_paths.py +28 -0
  72. codex_autorunner/core/usage.py +164 -12
  73. codex_autorunner/core/utils.py +125 -15
  74. codex_autorunner/flows/review/__init__.py +17 -0
  75. codex_autorunner/{core/review.py → flows/review/service.py} +37 -34
  76. codex_autorunner/flows/ticket_flow/definition.py +52 -3
  77. codex_autorunner/integrations/agents/__init__.py +11 -19
  78. codex_autorunner/integrations/agents/backend_orchestrator.py +302 -0
  79. codex_autorunner/integrations/agents/codex_adapter.py +90 -0
  80. codex_autorunner/integrations/agents/codex_backend.py +177 -25
  81. codex_autorunner/integrations/agents/opencode_adapter.py +108 -0
  82. codex_autorunner/integrations/agents/opencode_backend.py +305 -32
  83. codex_autorunner/integrations/agents/runner.py +86 -0
  84. codex_autorunner/integrations/agents/wiring.py +279 -0
  85. codex_autorunner/integrations/app_server/client.py +7 -60
  86. codex_autorunner/integrations/app_server/env.py +2 -107
  87. codex_autorunner/{core/app_server_events.py → integrations/app_server/event_buffer.py} +15 -8
  88. codex_autorunner/integrations/telegram/adapter.py +65 -0
  89. codex_autorunner/integrations/telegram/config.py +46 -0
  90. codex_autorunner/integrations/telegram/constants.py +1 -1
  91. codex_autorunner/integrations/telegram/doctor.py +228 -6
  92. codex_autorunner/integrations/telegram/handlers/callbacks.py +7 -0
  93. codex_autorunner/integrations/telegram/handlers/commands/execution.py +236 -74
  94. codex_autorunner/integrations/telegram/handlers/commands/files.py +314 -75
  95. codex_autorunner/integrations/telegram/handlers/commands/flows.py +1496 -71
  96. codex_autorunner/integrations/telegram/handlers/commands/workspace.py +498 -37
  97. codex_autorunner/integrations/telegram/handlers/commands_runtime.py +206 -48
  98. codex_autorunner/integrations/telegram/handlers/commands_spec.py +20 -3
  99. codex_autorunner/integrations/telegram/handlers/messages.py +27 -1
  100. codex_autorunner/integrations/telegram/handlers/selections.py +61 -1
  101. codex_autorunner/integrations/telegram/helpers.py +22 -1
  102. codex_autorunner/integrations/telegram/runtime.py +9 -4
  103. codex_autorunner/integrations/telegram/service.py +45 -10
  104. codex_autorunner/integrations/telegram/state.py +38 -0
  105. codex_autorunner/integrations/telegram/ticket_flow_bridge.py +338 -43
  106. codex_autorunner/integrations/telegram/transport.py +13 -4
  107. codex_autorunner/integrations/templates/__init__.py +27 -0
  108. codex_autorunner/integrations/templates/scan_agent.py +312 -0
  109. codex_autorunner/routes/__init__.py +37 -76
  110. codex_autorunner/routes/agents.py +2 -137
  111. codex_autorunner/routes/analytics.py +2 -238
  112. codex_autorunner/routes/app_server.py +2 -131
  113. codex_autorunner/routes/base.py +2 -596
  114. codex_autorunner/routes/file_chat.py +4 -833
  115. codex_autorunner/routes/flows.py +4 -977
  116. codex_autorunner/routes/messages.py +4 -456
  117. codex_autorunner/routes/repos.py +2 -196
  118. codex_autorunner/routes/review.py +2 -147
  119. codex_autorunner/routes/sessions.py +2 -175
  120. codex_autorunner/routes/settings.py +2 -168
  121. codex_autorunner/routes/shared.py +2 -275
  122. codex_autorunner/routes/system.py +4 -193
  123. codex_autorunner/routes/usage.py +2 -86
  124. codex_autorunner/routes/voice.py +2 -119
  125. codex_autorunner/routes/workspace.py +2 -270
  126. codex_autorunner/server.py +4 -4
  127. codex_autorunner/static/agentControls.js +61 -16
  128. codex_autorunner/static/app.js +126 -14
  129. codex_autorunner/static/archive.js +826 -0
  130. codex_autorunner/static/archiveApi.js +37 -0
  131. codex_autorunner/static/autoRefresh.js +7 -7
  132. codex_autorunner/static/chatUploads.js +137 -0
  133. codex_autorunner/static/dashboard.js +224 -171
  134. codex_autorunner/static/docChatCore.js +185 -13
  135. codex_autorunner/static/fileChat.js +68 -40
  136. codex_autorunner/static/fileboxUi.js +159 -0
  137. codex_autorunner/static/hub.js +114 -131
  138. codex_autorunner/static/index.html +375 -49
  139. codex_autorunner/static/messages.js +568 -87
  140. codex_autorunner/static/notifications.js +255 -0
  141. codex_autorunner/static/pma.js +1167 -0
  142. codex_autorunner/static/preserve.js +17 -0
  143. codex_autorunner/static/settings.js +128 -6
  144. codex_autorunner/static/smartRefresh.js +52 -0
  145. codex_autorunner/static/streamUtils.js +57 -0
  146. codex_autorunner/static/styles.css +9798 -6143
  147. codex_autorunner/static/tabs.js +152 -11
  148. codex_autorunner/static/templateReposSettings.js +225 -0
  149. codex_autorunner/static/terminal.js +18 -0
  150. codex_autorunner/static/ticketChatActions.js +165 -3
  151. codex_autorunner/static/ticketChatStream.js +17 -119
  152. codex_autorunner/static/ticketEditor.js +137 -15
  153. codex_autorunner/static/ticketTemplates.js +798 -0
  154. codex_autorunner/static/tickets.js +821 -98
  155. codex_autorunner/static/turnEvents.js +27 -0
  156. codex_autorunner/static/turnResume.js +33 -0
  157. codex_autorunner/static/utils.js +39 -0
  158. codex_autorunner/static/workspace.js +389 -82
  159. codex_autorunner/static/workspaceFileBrowser.js +15 -13
  160. codex_autorunner/surfaces/__init__.py +5 -0
  161. codex_autorunner/surfaces/cli/__init__.py +6 -0
  162. codex_autorunner/surfaces/cli/cli.py +2534 -0
  163. codex_autorunner/surfaces/cli/codex_cli.py +20 -0
  164. codex_autorunner/surfaces/cli/pma_cli.py +817 -0
  165. codex_autorunner/surfaces/telegram/__init__.py +3 -0
  166. codex_autorunner/surfaces/web/__init__.py +1 -0
  167. codex_autorunner/surfaces/web/app.py +2223 -0
  168. codex_autorunner/surfaces/web/hub_jobs.py +192 -0
  169. codex_autorunner/surfaces/web/middleware.py +587 -0
  170. codex_autorunner/surfaces/web/pty_session.py +370 -0
  171. codex_autorunner/surfaces/web/review.py +6 -0
  172. codex_autorunner/surfaces/web/routes/__init__.py +82 -0
  173. codex_autorunner/surfaces/web/routes/agents.py +138 -0
  174. codex_autorunner/surfaces/web/routes/analytics.py +284 -0
  175. codex_autorunner/surfaces/web/routes/app_server.py +132 -0
  176. codex_autorunner/surfaces/web/routes/archive.py +357 -0
  177. codex_autorunner/surfaces/web/routes/base.py +615 -0
  178. codex_autorunner/surfaces/web/routes/file_chat.py +1117 -0
  179. codex_autorunner/surfaces/web/routes/filebox.py +227 -0
  180. codex_autorunner/surfaces/web/routes/flows.py +1354 -0
  181. codex_autorunner/surfaces/web/routes/messages.py +490 -0
  182. codex_autorunner/surfaces/web/routes/pma.py +1652 -0
  183. codex_autorunner/surfaces/web/routes/repos.py +197 -0
  184. codex_autorunner/surfaces/web/routes/review.py +148 -0
  185. codex_autorunner/surfaces/web/routes/sessions.py +176 -0
  186. codex_autorunner/surfaces/web/routes/settings.py +169 -0
  187. codex_autorunner/surfaces/web/routes/shared.py +277 -0
  188. codex_autorunner/surfaces/web/routes/system.py +196 -0
  189. codex_autorunner/surfaces/web/routes/templates.py +634 -0
  190. codex_autorunner/surfaces/web/routes/usage.py +89 -0
  191. codex_autorunner/surfaces/web/routes/voice.py +120 -0
  192. codex_autorunner/surfaces/web/routes/workspace.py +271 -0
  193. codex_autorunner/surfaces/web/runner_manager.py +25 -0
  194. codex_autorunner/surfaces/web/schemas.py +469 -0
  195. codex_autorunner/surfaces/web/static_assets.py +490 -0
  196. codex_autorunner/surfaces/web/static_refresh.py +86 -0
  197. codex_autorunner/surfaces/web/terminal_sessions.py +78 -0
  198. codex_autorunner/tickets/__init__.py +8 -1
  199. codex_autorunner/tickets/agent_pool.py +53 -4
  200. codex_autorunner/tickets/files.py +37 -16
  201. codex_autorunner/tickets/lint.py +50 -0
  202. codex_autorunner/tickets/models.py +6 -1
  203. codex_autorunner/tickets/outbox.py +50 -2
  204. codex_autorunner/tickets/runner.py +396 -57
  205. codex_autorunner/web/__init__.py +5 -1
  206. codex_autorunner/web/app.py +2 -1949
  207. codex_autorunner/web/hub_jobs.py +2 -191
  208. codex_autorunner/web/middleware.py +2 -586
  209. codex_autorunner/web/pty_session.py +2 -369
  210. codex_autorunner/web/runner_manager.py +2 -24
  211. codex_autorunner/web/schemas.py +2 -376
  212. codex_autorunner/web/static_assets.py +4 -441
  213. codex_autorunner/web/static_refresh.py +2 -85
  214. codex_autorunner/web/terminal_sessions.py +2 -77
  215. codex_autorunner/workspace/paths.py +49 -33
  216. codex_autorunner-1.2.0.dist-info/METADATA +150 -0
  217. codex_autorunner-1.2.0.dist-info/RECORD +339 -0
  218. codex_autorunner/core/adapter_utils.py +0 -21
  219. codex_autorunner/core/engine.py +0 -2653
  220. codex_autorunner/core/static_assets.py +0 -55
  221. codex_autorunner-1.0.0.dist-info/METADATA +0 -246
  222. codex_autorunner-1.0.0.dist-info/RECORD +0 -251
  223. /codex_autorunner/{routes → surfaces/web/routes}/terminal_images.py +0 -0
  224. {codex_autorunner-1.0.0.dist-info → codex_autorunner-1.2.0.dist-info}/WHEEL +0 -0
  225. {codex_autorunner-1.0.0.dist-info → codex_autorunner-1.2.0.dist-info}/entry_points.txt +0 -0
  226. {codex_autorunner-1.0.0.dist-info → codex_autorunner-1.2.0.dist-info}/licenses/LICENSE +0 -0
  227. {codex_autorunner-1.0.0.dist-info → codex_autorunner-1.2.0.dist-info}/top_level.txt +0 -0
@@ -1,55 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from contextlib import ExitStack
4
- from importlib import resources
5
- from pathlib import Path
6
- from typing import Optional
7
-
8
- # Keep the required asset list close to the core boundary so core modules do not
9
- # import from codex_autorunner.web.*
10
- _REQUIRED_STATIC_ASSETS = (
11
- "index.html",
12
- "styles.css",
13
- "bootstrap.js",
14
- "loader.js",
15
- "app.js",
16
- "vendor/xterm.js",
17
- "vendor/xterm-addon-fit.js",
18
- "vendor/xterm.css",
19
- )
20
-
21
-
22
- def missing_static_assets(static_dir: Path) -> list[str]:
23
- missing: list[str] = []
24
- for rel_path in _REQUIRED_STATIC_ASSETS:
25
- try:
26
- if not (static_dir / rel_path).exists():
27
- missing.append(rel_path)
28
- except OSError:
29
- missing.append(rel_path)
30
- return missing
31
-
32
-
33
- def resolve_static_dir() -> tuple[Path, Optional[ExitStack]]:
34
- """Locate packaged static assets without importing codex_autorunner.web."""
35
-
36
- static_root = resources.files("codex_autorunner").joinpath("static")
37
- if isinstance(static_root, Path):
38
- if static_root.exists():
39
- return static_root, None
40
- fallback = Path(__file__).resolve().parent.parent / "static"
41
- return fallback, None
42
-
43
- stack = ExitStack()
44
- try:
45
- static_path = stack.enter_context(resources.as_file(static_root))
46
- except Exception:
47
- stack.close()
48
- fallback = Path(__file__).resolve().parent.parent / "static"
49
- return fallback, None
50
- if static_path.exists():
51
- return static_path, stack
52
-
53
- stack.close()
54
- fallback = Path(__file__).resolve().parent.parent / "static"
55
- return fallback, None
@@ -1,246 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: codex-autorunner
3
- Version: 1.0.0
4
- Summary: Codex autorunner CLI per DESIGN-V1
5
- Author: Codex
6
- License: MIT License
7
-
8
- Copyright (c) 2025 David Zhang
9
-
10
- Permission is hereby granted, free of charge, to any person obtaining a copy
11
- of this software and associated documentation files (the "Software"), to deal
12
- in the Software without restriction, including without limitation the rights
13
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
- copies of the Software, and to permit persons to whom the Software is
15
- furnished to do so, subject to the following conditions:
16
-
17
- The above copyright notice and this permission notice shall be included in all
18
- copies or substantial portions of the Software.
19
-
20
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
- SOFTWARE.
27
-
28
- Project-URL: Homepage, https://github.com/Git-on-my-level/codex-autorunner
29
- Project-URL: Repository, https://github.com/Git-on-my-level/codex-autorunner
30
- Project-URL: Issues, https://github.com/Git-on-my-level/codex-autorunner/issues
31
- Keywords: codex,automation,agent,cli,fastapi
32
- Classifier: License :: OSI Approved :: MIT License
33
- Classifier: Programming Language :: Python :: 3
34
- Classifier: Programming Language :: Python :: 3 :: Only
35
- Classifier: Operating System :: OS Independent
36
- Requires-Python: >=3.9
37
- Description-Content-Type: text/markdown
38
- License-File: LICENSE
39
- Requires-Dist: typer>=0.9
40
- Requires-Dist: click<8.2
41
- Requires-Dist: pyyaml>=6.0
42
- Requires-Dist: fastapi>=0.111
43
- Requires-Dist: uvicorn[standard]>=0.30
44
- Requires-Dist: ptyprocess>=0.7
45
- Requires-Dist: python-multipart>=0.0.9
46
- Requires-Dist: python-dotenv>=1.0
47
- Requires-Dist: httpx>=0.27
48
- Requires-Dist: tenacity>=8.0
49
- Provides-Extra: dev
50
- Requires-Dist: black==25.11.0; extra == "dev"
51
- Requires-Dist: mypy>=1.10; extra == "dev"
52
- Requires-Dist: pytest>=7.0; extra == "dev"
53
- Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
54
- Requires-Dist: pytest-timeout>=2.0; extra == "dev"
55
- Requires-Dist: ruff>=0.5.0; extra == "dev"
56
- Requires-Dist: types-PyYAML; extra == "dev"
57
- Provides-Extra: telegram
58
- Requires-Dist: httpx>=0.27; extra == "telegram"
59
- Provides-Extra: voice
60
- Requires-Dist: httpx>=0.27; extra == "voice"
61
- Requires-Dist: python-multipart>=0.0.9; extra == "voice"
62
- Provides-Extra: github
63
- Dynamic: license-file
64
-
65
- # codex-autorunner
66
- [![PyPI](https://img.shields.io/pypi/v/codex-autorunner.svg)](https://pypi.org/project/codex-autorunner/)
67
-
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`
79
-
80
- ## Sneak Peak
81
- Run multiple agents on many repositories, with git worktree support
82
- ![Desktop hub](docs/screenshots/car-desktop-hub.png)
83
-
84
- See the progress of your long running tasks with a high level overview
85
- ![Desktop repo dashboard](docs/screenshots/car-desktop-repo-dashboard.png)
86
-
87
- Dive deep into specific agent execution with a rich but readable log
88
- ![Desktop logs](docs/screenshots/car-desktop-logs.png)
89
-
90
- Tickets and workspace docs are markdown files. Edit them directly or use the web UI’s file chat to iterate with the agent.
91
-
92
- Use codex CLI directly for multi-shot problem solving or `/review`
93
- ![Desktop terminal](docs/screenshots/car-desktop-terminal.png)
94
-
95
- Mobile-first experience, code on the go with Whisper support (BYOK)
96
- ![Mobile terminal](docs/screenshots/car-mobile-terminal.png)
97
-
98
- ## What it does
99
- - Initializes a repo with Codex-friendly docs and config.
100
- - Runs Codex app-server in a loop against the repo, streaming logs via OpenCode runtime.
101
- - Tracks state, logs, and config under `.codex-autorunner/`.
102
- - Exposes a power-user HTTP API and web UI for tickets, workspace docs, file chat, logs, runner control, and a Codex TUI terminal.
103
- - Optionally runs a Telegram bot for interactive, user-in-the-loop Codex sessions.
104
-
105
- CLI commands are available as `codex-autorunner` or the shorter `car`.
106
-
107
- ## Install
108
- PyPI (pipx):
109
- ```
110
- pipx install codex-autorunner
111
- ```
112
-
113
- GitHub (pipx, dev):
114
- ```
115
- pipx install git+https://github.com/Git-on-my-level/codex-autorunner.git
116
- ```
117
-
118
- From source (editable):
119
- ```
120
- git clone https://github.com/Git-on-my-level/codex-autorunner.git
121
- cd codex-autorunner
122
- pip install -e .
123
- ```
124
-
125
- ### Optional extras
126
- - Telegram bot support: `pip install codex-autorunner[telegram]`
127
- - Voice transcription support: `pip install codex-autorunner[voice]`
128
- - Dev tools (lint/test): `pip install codex-autorunner[dev]`
129
- - Local dev alternative: `pip install -e .[extra]`
130
-
131
- ## Dev setup
132
- - `make setup` creates `.venv`, installs `.[dev]`, runs `pnpm install`, and sets `core.hooksPath` to `.githooks`.
133
-
134
- ### Opinionated setup (macOS headless hub at `~/car-workspace`)
135
- - One-shot setup (user scope): `scripts/install-local-mac-hub.sh`. It pipx-installs this repo, creates/initializes `~/car-workspace` as a hub, writes a launchd agent plist, and loads it. Defaults: host `127.0.0.1`, port `4173`, label `com.codex.autorunner`. Override via env (`WORKSPACE`, `HOST`, `PORT`, `LABEL`, `PLIST_PATH`, `PACKAGE_SRC`). For remote access, prefer a VPN like Tailscale and keep the hub bound to loopback; if you bind to a non-loopback host, the script configures `server.auth_token_env` + a token in `.codex-autorunner/.env`.
136
- - Create/update the launchd agent plist and (re)load it: `scripts/launchd-hub.sh` (or `make launchd-hub`).
137
- - Linux users: see `docs/ops/systemd.md` for systemd hub/Telegram setup.
138
- - Manual path if you prefer:
139
- - `pipx install .`
140
- - `car init --mode hub --path ~/car-workspace`
141
- - Copy `docs/ops/launchd-hub-example.plist` to `~/Library/LaunchAgents/com.codex.autorunner.plist`, replace `/Users/you` with your home, adjust host/port if desired, then `launchctl load -w ~/Library/LaunchAgents/com.codex.autorunner.plist`.
142
- - The hub serves the UI/API from `http://<host>:<port>` and writes logs to `~/car-workspace/.codex-autorunner/codex-autorunner-hub.log`. Each repo under `~/car-workspace` should be a git repo with its own `.codex-autorunner/` (run `car init` in each).
143
-
144
- #### Refresh a launchd hub to the current branch
145
- When you change code in this repo and want the launchd-managed hub to run it:
146
- 1) Recommended: run the safe refresher, which installs into a new venv, flips `~/.local/pipx/venvs/codex-autorunner.current`, restarts launchd, health-checks, and auto-rolls back on failure:
147
- ```
148
- make refresh-launchd
149
- ```
150
-
151
- Important: avoid in-place pip/pipx installs against the live venv. During uninstall/reinstall, packaged static assets disappear and the UI can break while the server keeps running. Use the safe refresher or stop the service before manual installs.
152
-
153
- 2) Manual path (offline only; no rollback): stop launchd first, then reinstall into the launchd venv (pipx default paths shown; adjust if your label/paths differ):
154
- ```
155
- $HOME/.local/pipx/venvs/codex-autorunner/bin/python -m pip install --force-reinstall /path/to/your/codex-autorunner
156
- ```
157
- 3) Restart the agent so it picks up the new bits (default label is `com.codex.autorunner`; default plist `~/Library/LaunchAgents/com.codex.autorunner.plist`):
158
- ```
159
- launchctl unload ~/Library/LaunchAgents/com.codex.autorunner.plist 2>/dev/null || true
160
- launchctl load -w ~/Library/LaunchAgents/com.codex.autorunner.plist
161
- launchctl kickstart -k gui/$(id -u)/com.codex.autorunner
162
- ```
163
- 4) Tail the hub log to confirm it booted: `tail -n 50 ~/car-workspace/.codex-autorunner/codex-autorunner-hub.log`.
164
-
165
- #### Health checks (recommended)
166
- - `GET /health` returns 200 (verifies static assets are present).
167
- - `GET /static/app.js` returns 200.
168
- - Optional: `GET /` returns HTML (not a JSON error).
169
- If you set a base path, prefix all checks with it.
170
-
171
- ## Quick start
172
- 1) Install (editable): `pip install -e .`
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).
174
- 3) Run once: `codex-autorunner once` / `car once`
175
- 4) Continuous loop: `codex-autorunner run` / `car run`
176
- 5) If stuck: `codex-autorunner kill` then `codex-autorunner resume` (or the `car` equivalents)
177
- 6) Check status/logs: `codex-autorunner status`, `codex-autorunner log --tail 200` (or `car ...`)
178
-
179
- ## Configuration
180
- - Root defaults live in `codex-autorunner.yml` (committed).
181
- - Local overrides live in `codex-autorunner.override.yml` (gitignored). Use it for machine-specific tweaks; keep secrets in env vars.
182
- - Hub config lives at `.codex-autorunner/config.yml` (generated). It includes `repo_defaults` for all repos.
183
- - Repo overrides are optional; add `.codex-autorunner/repo.override.yml` to override hub defaults for a specific repo.
184
-
185
- ## Interfaces
186
-
187
- CAR supports two interfaces with the same core engine. The web UI is the power
188
- user control plane for multi-repo visibility and system control. The Telegram
189
- bot is optimized for interactive back-and-forth, mirroring the Codex TUI
190
- experience inside Telegram with user-in-the-loop approvals.
191
-
192
- ### Web UI (control plane)
193
- 1) Ensure the hub is initialized (`codex-autorunner init`) so `.codex-autorunner/config.yml` exists.
194
- 2) Start the API/UI backend: `codex-autorunner serve` (or `car serve`) — defaults to `127.0.0.1:4173`; override via `server.host`/`server.port` in `.codex-autorunner/config.yml`.
195
- 3) Open `http://127.0.0.1:4173` for the hub UI; repo UIs live under `/repos/<repo_id>/`. FastAPI endpoints are under `/api/*` (repo) and `/hub/*` (hub).
196
- - The Terminal tab launches the configured Codex binary inside a PTY via websocket; it uses `codex.terminal_args` (defaults empty, so it runs `codex` bare unless you override). xterm.js assets are vendored under `static/vendor`.
197
- - Repo IDs are URL-safe slugs; if a repo directory or requested ID contains spaces, `#`, or other unsafe chars, the hub stores the original name as `display_name` and generates a safe `repo_id` for URLs.
198
- - If you need to serve under a proxy prefix (e.g., `/car`), set `server.base_path` in `.codex-autorunner/config.yml` or pass `--base-path` to `car serve/hub serve`; all HTTP/WS endpoints will be reachable under that prefix. Proxy must forward that prefix (e.g., Caddy `handle /car/* { reverse_proxy ... }` with a 404 fallback for everything else).
199
- - Chat composer shortcuts: desktop uses Cmd+Enter (or Ctrl+Enter) to send and Shift+Enter for newline; mobile uses Enter to send and Shift+Enter for newline.
200
-
201
- ### Telegram bot (interactive sessions)
202
- - The interactive Telegram bot is separate from `notifications.telegram` (which is one-way notifications).
203
- - Each operator should create their own Telegram bot token. Multi-user use requires explicit allowlists.
204
- - Quickstart:
205
- 1) Set env vars: `CAR_TELEGRAM_BOT_TOKEN` (and optionally `CAR_TELEGRAM_CHAT_ID`).
206
- 2) In config, set `telegram_bot.enabled: true` and fill `allowed_user_ids` + `allowed_chat_ids`.
207
- 3) Run `car telegram start --path <repo_or_hub>`.
208
- 4) Use `/bind` (hub mode) and `/new` or `/resume` in Telegram.
209
- - How it works (high level):
210
- - The bot polls the Telegram Bot API, allowlists chat/user IDs, and routes each topic to a workspace + Codex thread.
211
- - Messages and media are forwarded to the Codex app-server, streaming responses back to Telegram.
212
- - Approvals can be requested inline, giving a hands-on, TUI-like workflow without leaving Telegram.
213
- - Details: `docs/telegram/architecture.md`, `docs/ops/telegram-bot-runbook.md`, and `docs/telegram/security.md`.
214
-
215
- ## Security and remote access
216
- - The UI/API are effectively privileged access and can execute code on your machine (terminal + runner).
217
- - Keep the server bound to `127.0.0.1` and use Tailscale (or another VPN) for remote access.
218
- - If you must expose it, set `server.auth_token_env` and also put it behind an auth-enforcing reverse proxy (basic auth/SSO).
219
- - Do not expose it publicly without protections. See `docs/web/security.md` for details.
220
-
221
- ### Auth token (optional)
222
- If you set `server.auth_token_env`, the API requires `Authorization: Bearer <token>` on every request.
223
- - Set the config: `server.auth_token_env: CAR_SERVER_TOKEN`.
224
- - Export the token before starting the server: `export CAR_SERVER_TOKEN="..."`.
225
- - Browser UI: visit `http://host:port/?token=...` once. The UI stores it in `sessionStorage` and removes it from the URL; WebSocket connections send the token via `Sec-WebSocket-Protocol: car-token-b64.<base64url(token)>`.
226
- - CLI: requests automatically attach the token from `server.auth_token_env`; if the env var is missing, CLI commands will error.
227
-
228
- ## Git hooks
229
- - Install dev tools: `pip install -e .[dev]`
230
- - Point Git to the repo hooks: `git config core.hooksPath .githooks`
231
- - The `pre-commit` hook runs `scripts/check.sh` (Black formatting check + pytest). Run it manually with `./scripts/check.sh` before committing or in CI.
232
-
233
- ## Commands (CLI)
234
- - `init` — seed config/state/docs.
235
- - `run` / `once` — run the loop (continuous or single iteration).
236
- - `resume` — clear stale lock/state and restart; `--once` for a single run.
237
- - `kill` — SIGTERM the running loop and mark state error.
238
- - `status` — show current state.
239
- - `sessions` — list terminal sessions (server-backed when available).
240
- - `stop-session` — stop a terminal session by repo (`--repo`) or id (`--session`).
241
- - `log` — view logs (tail or specific run).
242
- - `edit` — open `active_context|decisions|spec` in `$EDITOR`.
243
- - `serve` — start the HTTP API (FastAPI) on host/port from config (defaults 127.0.0.1:4173).
244
-
245
- ## Star history
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)
@@ -1,251 +0,0 @@
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,,