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,12 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
- import os
3
+ import logging
4
4
  from dataclasses import dataclass
5
5
  from datetime import datetime, timezone
6
6
  from pathlib import Path, PurePosixPath
7
7
  from typing import Literal, cast
8
8
 
9
9
  from ..core import drafts as draft_utils
10
+ from ..core.logging_utils import log_event
10
11
 
11
12
  WorkspaceDocKind = Literal["active_context", "decisions", "spec"]
12
13
  WORKSPACE_DOC_KINDS: tuple[WorkspaceDocKind, ...] = (
@@ -15,6 +16,8 @@ WORKSPACE_DOC_KINDS: tuple[WorkspaceDocKind, ...] = (
15
16
  "spec",
16
17
  )
17
18
 
19
+ logger = logging.getLogger(__name__)
20
+
18
21
 
19
22
  @dataclass
20
23
  class WorkspaceFile:
@@ -57,8 +60,8 @@ def normalize_workspace_rel_path(repo_root: Path, rel_path: str) -> tuple[Path,
57
60
  against ".." traversal and symlink escapes that CodeQL flagged.
58
61
  """
59
62
 
60
- base = workspace_dir(repo_root)
61
- base_real = os.path.realpath(base)
63
+ base = workspace_dir(repo_root).resolve(strict=False)
64
+ base_real = base.resolve(strict=False)
62
65
  cleaned = (rel_path or "").strip()
63
66
  if not cleaned:
64
67
  raise ValueError("invalid workspace file path")
@@ -67,28 +70,12 @@ def normalize_workspace_rel_path(repo_root: Path, rel_path: str) -> tuple[Path,
67
70
  if relative.is_absolute() or ".." in relative.parts:
68
71
  raise ValueError("invalid workspace file path")
69
72
 
70
- # Normalize the relative path to collapse any sneaky segments
71
- norm_relative = os.path.normpath(relative.as_posix())
72
- if norm_relative in {".", ""}:
73
- normalized = ""
74
- else:
75
- normalized = norm_relative
76
-
77
- # Reject traversal or absolute inputs after normalization
78
- if (
79
- normalized.startswith("..")
80
- or normalized.startswith("/")
81
- or normalized.startswith("\\")
82
- ):
83
- raise ValueError("invalid workspace file path")
84
-
85
- candidate_str = os.path.realpath(os.path.join(base_real, normalized))
86
- # Ensure the resolved path stays under the workspace directory
87
- if not (candidate_str == base_real or candidate_str.startswith(base_real + os.sep)):
88
- raise ValueError("invalid workspace file path")
73
+ candidate = (base / relative).resolve(strict=False)
74
+ try:
75
+ rel_posix = candidate.relative_to(base_real).as_posix()
76
+ except ValueError:
77
+ raise ValueError("invalid workspace file path") from None
89
78
 
90
- candidate = Path(candidate_str)
91
- rel_posix = candidate.relative_to(base_real).as_posix()
92
79
  return candidate, rel_posix
93
80
 
94
81
 
@@ -150,14 +137,27 @@ def write_workspace_file( # codeql[py/path-injection]
150
137
  path.write_text(
151
138
  content or "", encoding="utf-8"
152
139
  ) # codeql[py/path-injection] validated by normalize_workspace_rel_path
140
+ rel = path.relative_to(repo_root).as_posix()
141
+ state_key = f"workspace_{rel_posix.replace('/', '_')}"
153
142
  try:
154
- rel = path.relative_to(repo_root).as_posix()
155
143
  draft_utils.invalidate_drafts_for_path(repo_root, rel)
156
- state_key = f"workspace_{rel_posix.replace('/', '_')}"
157
144
  draft_utils.remove_draft(repo_root, state_key)
158
- except Exception:
159
- # best effort; do not block writes
160
- pass
145
+ except Exception as exc:
146
+ log_event(
147
+ logger,
148
+ logging.WARNING,
149
+ "workspace.draft_invalidation_failed",
150
+ repo_root=str(repo_root),
151
+ rel_path=rel_posix,
152
+ state_key=state_key,
153
+ exc=exc,
154
+ )
155
+ logger.debug(
156
+ "workspace draft invalidation failed for %s (repo_root=%s)",
157
+ rel_posix,
158
+ repo_root,
159
+ exc_info=True,
160
+ )
161
161
  return path.read_text(encoding="utf-8")
162
162
 
163
163
 
@@ -176,13 +176,29 @@ def write_workspace_doc( # codeql[py/path-injection]
176
176
  path.write_text(
177
177
  content or "", encoding="utf-8"
178
178
  ) # codeql[py/path-injection] workspace_doc_path is deterministic
179
+ rel = path.relative_to(repo_root).as_posix()
180
+ state_key = f"workspace_{rel.replace('/', '_')}"
179
181
  try:
180
- rel = path.relative_to(repo_root).as_posix()
181
182
  draft_utils.invalidate_drafts_for_path(repo_root, rel)
182
- state_key = f"workspace_{rel.replace('/', '_')}"
183
183
  draft_utils.remove_draft(repo_root, state_key)
184
- except Exception:
185
- pass
184
+ except Exception as exc:
185
+ log_event(
186
+ logger,
187
+ logging.WARNING,
188
+ "workspace.draft_invalidation_failed",
189
+ repo_root=str(repo_root),
190
+ rel_path=rel,
191
+ state_key=state_key,
192
+ kind=kind,
193
+ exc=exc,
194
+ )
195
+ logger.debug(
196
+ "workspace draft invalidation failed for %s (repo_root=%s kind=%s)",
197
+ rel,
198
+ repo_root,
199
+ kind,
200
+ exc_info=True,
201
+ )
186
202
  return path.read_text(encoding="utf-8")
187
203
 
188
204
 
@@ -0,0 +1,150 @@
1
+ Metadata-Version: 2.4
2
+ Name: codex-autorunner
3
+ Version: 1.2.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
+ # CAR (codex-autorunner)
66
+ [![PyPI](https://img.shields.io/pypi/v/codex-autorunner.svg)](https://pypi.org/project/codex-autorunner/)
67
+
68
+ CAR provides a set of low-opinion agent coordination tools for you to run long complex implementations using the agents you already love.
69
+
70
+ What this looks like in practice:
71
+ - You write a plan, or generate a plan by chatting with your favorite AI
72
+ - You convert the plan (or ask an AI to convert it for you) into CAR compatible tickets (markdown with some frontmatter)
73
+ - Go off and do something else, no need to babysit the agents, they will notify you if they need your input
74
+
75
+ ![CAR Web Hub Screenshot](docs/screenshots/hub.png)
76
+
77
+ ## How it works
78
+ CAR is very simple. At it's core, CAR is a state machine which checks to see if there are any incomplete tickets. If yes, pick the next one and run it against an agent. Tickets can be pre-populated by the user, but agents can also write tickets. _Tickets are the control plane for CAR_.
79
+
80
+ When each agent wakes up, it gets knowledge about CAR and how to operate within CAR, a pre-defined set of context (workspace files), the current ticket, and optionally the final output of the previous agent. This simple loop ensures that agents know enough to use CAR while also focusing them on the task at hand.
81
+
82
+ ## Philosophy
83
+ The philosophy behind CAR is to let the agents do what they do best, and get out of their way. CAR is _very bitter-lesson-pilled_. As models and agents get more powerful, CAR should serve as a form of leverage, and avoid constraining models and their harnesses. This is why we treat the filesystem as the first class data plane and utilize tools and languages the models are already very familiar with (git, python).
84
+
85
+ CAR treats tickets as the control plane and models as the execution layer. This means that we rely on agents to follow the instructions written in the tickets. If you use a sufficiently weak model, CAR may not work well for you. CAR is an amplifier for agent capabilities. Agents who like to scope creep (create too many new tickets) or reward hack (mark a ticket as done despite it being incomplete) are not a good fit for CAR.
86
+
87
+ ## Interaction patterns
88
+ CAR's core is a set of python functions surfaced as a CLI, operating on a file system. There are current 3 UIs built on top of this core.
89
+
90
+ ### Web UI
91
+ The web UI is the main control plane for CAR. From here you can set up new repositories or clone existing ones, chat with agents using their TUI, and run the ticket autorunner. There are many quality-of-life features like Whisper integration, editing documents by chatting with AI (useful for mobile), viewing usage analytics, and much more. The Web UI is the most full featured user-facing interface and a good starting point for trying out CAR.
92
+
93
+ I recommend serving the web UI over Tailscale. There is an auth token option but the system is not very battle tested.
94
+
95
+ ### Telegram
96
+ Telegram is the "on-the-go" and notification hub for CAR. From here you can kick off and monitor existing tickets, set up new tickets, and chat with agents. Your primary UX here is asking the agent to do things for you rather than you doing it yourself like you would on the web UI. This is great for on-the-go work, but it doesn't have full feature parity with the web UI.
97
+
98
+ ### Project Manager Agent
99
+ The project manager agent (PMA) is a way to use an AI agent to run CAR. For example instead of making/editing tickets in the UI, you can ask the PMA to do it for you. Instead of starting a ticket flow, the PMA can babysit it for you. The PMA can be accessed in the web and in Telegram, and also uses the CAR CLI directly.
100
+
101
+ ## Quickstart
102
+
103
+ The fastest way to get started is to pass [this setup guide](docs/AGENT_SETUP_GUIDE.md) to your favorite AI agent. The agent will walk you through installation and configuration interactively based on your environment.
104
+
105
+ ### From source (repo checkout)
106
+
107
+ If you're working from a fresh clone of this repo, you can run the repo-local CLI shim:
108
+
109
+ ```bash
110
+ ./car --help
111
+ ```
112
+
113
+ The shim will try `PYTHONPATH=src` first and, if dependencies are missing, will bootstrap a local `.venv` and install CAR.
114
+
115
+ ## Supported models
116
+ CAR currently supports:
117
+ - Codex
118
+ - Opencode
119
+
120
+ CAR is built to easily integrate any reasonable agent built for Agent Client Protocol (ACP). If you would like to see your agent supported, please reach out or open a PR.
121
+
122
+ ## Examples
123
+ Build out complex features and products by providing a series of tickets assigned to various agents.
124
+ ![CAR Tickets in Progress Screenshot](docs/screenshots/tickets-in-progress.png)
125
+
126
+ Tickets are just markdown files that both you and the agent can edit.
127
+ ![CAR Ticket Markdown Screenshot](docs/screenshots/ticket-markdown.png)
128
+
129
+ You don't have to babysit the agents, they inbox you or ping you on Telegram.
130
+ ![CAR Inbox Screenshot](docs/screenshots/inbox.png)
131
+
132
+ You can collaborate with the agents in a shared workspace, independent of the codebase. Drop context there, extract artifacts, it's like a shared scratchpad.
133
+ ![CAR Workspace Screenshot](docs/screenshots/workspace.png)
134
+
135
+ All core workspace documents are also just markdown files, so you and the agent can easily edit them.
136
+ ![CAR Workspace New MD Screenshot](docs/screenshots/workspace-new-md.png)
137
+
138
+ If you need to do something more custom or granular, you can use your favorite agent TUIs in the built-in terminal.
139
+ ![CAR Terminal Codex Screenshot](docs/screenshots/terminal-codex.png)
140
+ ![CAR Terminal Opencode Screenshot](docs/screenshots/terminal-opencode.png)
141
+
142
+ On the go? The web UI is mobile responsive, or if you prefer you can type or voice chat with your agents on Telegram.
143
+ ![CAR Telegram Media Voice Screenshot](docs/screenshots/telegram-media-voice.PNG)
144
+ ![CAR Telegram Media Image Screenshot](docs/screenshots/telegram-media-image.PNG)
145
+
146
+ Don't want to use the product directly? Delegate work to the PMA.
147
+ ![CAR Telegram PMA Screenshot](docs/screenshots/telegram-pma.png)
148
+
149
+ ## Star history
150
+ [![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,339 @@
1
+ codex_autorunner/__init__.py,sha256=EyZQrh8IKtssHmoNafaN7--MNRG4DhLA-w7T7-AJqhk,205
2
+ codex_autorunner/__main__.py,sha256=Qd-f8z2Q2vpiEP2x6PBFsJrpACWDVxFKQk820MhFmHo,59
3
+ codex_autorunner/api.py,sha256=1QIExNBqoNfND7ldsa36E65MGaBstutrr7j6Dgs5W74,705
4
+ codex_autorunner/bootstrap.py,sha256=rvUj4RLEhDFoEbNmtOTOEQKUlYDdak2kwVx_VgBPRt8,12558
5
+ codex_autorunner/cli.py,sha256=UKTukqhpK2pSJeFdVT1ESAGgjR_VGAtfHaovpwydf0k,222
6
+ codex_autorunner/codex_cli.py,sha256=SkIFfNx7-sJB2QXa9Sy3r0MjovkGTFe8zM96vVxCA9E,384
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=BINEzCpVBJW0gXMe2jBmnwpuaFy36Ukp5YWXK72seKA,451
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=n9snnwQapd426vtoeDyOnIlfpC-97vpI-xbaIadzolE,8516
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=Eva1uR-QuWpMk07VuDLXVpterpqOHls5WadbnpJnnOs,8440
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=G32-WeoN7D4dO9GO4ymqCg_XTMxa5Kjwb_ylzy1ApJo,23738
22
+ codex_autorunner/agents/opencode/constants.py,sha256=h9rywpj-Lqio-pRVZ74CEbq8TOVI11oEEIXwY9hQ9FA,85
23
+ codex_autorunner/agents/opencode/events.py,sha256=c0OxtbfYtmYRwMyt4UOgRiAmunfT76huXBDQuybB0jg,1828
24
+ codex_autorunner/agents/opencode/harness.py,sha256=djALbaAhEi3coX4oSqhIne_9JHC19Gf-VcBca-a9R9I,10788
25
+ codex_autorunner/agents/opencode/logging.py,sha256=pbIS4xG84fkLrdNKiX2Y4zMTqj-ADzXOCNNPlnw1-z0,8423
26
+ codex_autorunner/agents/opencode/run_prompt.py,sha256=b4sZcuRgyHrM2jouEGZGeCw-nOwqUFX6OPy92e64kJ4,8656
27
+ codex_autorunner/agents/opencode/runtime.py,sha256=CTeARdmkCfyp2TB193vG4GeXB1MNPZ4S83OMMqGProE,63958
28
+ codex_autorunner/agents/opencode/supervisor.py,sha256=KJ-Zz4nE12NsL5QZSMSejPFCiOHKDePVmAnthVwRaFU,18625
29
+ codex_autorunner/core/__init__.py,sha256=tLqdoJBO1Xvr9umB50rLnn7z-GzMF1VKc-2ZzW7FUTQ,535
30
+ codex_autorunner/core/about_car.py,sha256=KoV0jlyiF0V-wtZ1sb2w-GsaNr3HHukt69NL-9iHKWk,11116
31
+ codex_autorunner/core/app_server_ids.py,sha256=hn1AOx5RXN2gKtxdgfhFYGaYFAHxOJdgcvp1yqQyRMg,1839
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=8cHq4Z5SpMNntF1BWrI2z8r3PHOQu0ARyT2PQXIPoII,6645
35
+ codex_autorunner/core/app_server_utils.py,sha256=We3SjezC4FFfYcQc8t8g40GWZlJft_1CFt1LCSgs298,5148
36
+ codex_autorunner/core/archive.py,sha256=CyUiGChq9LrbnDOWAi8LgHllcHd79ZxbBIm5O7m_wjk,10415
37
+ codex_autorunner/core/circuit_breaker.py,sha256=DL8lUrZPluzvNHgCMDUJjWuYytgmVzhL30va8M3TPQ4,6205
38
+ codex_autorunner/core/codex_runner.py,sha256=iteZnbPnsvfYBopCvvhyWIbnx_eVUJWu6A-gilVGVcw,3353
39
+ codex_autorunner/core/config.py,sha256=LxeFJSastIFqbkoLy8RiywR0ms55UAY29a1pNAX0WtI,117531
40
+ codex_autorunner/core/context_awareness.py,sha256=5iM9wSFWp_oaZLazAz1qRAgOeX4te07MO9kebd-xdXU,1782
41
+ codex_autorunner/core/docs.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ codex_autorunner/core/drafts.py,sha256=VeHfBmUpQDFmVZH2RSbZHCi7lIiMVrCFRf0iENlreEY,4202
43
+ codex_autorunner/core/exceptions.py,sha256=CJAOtYagbVSieCxJiP3ndp-sBvjcQVYBz6LLKzKKaWA,1600
44
+ codex_autorunner/core/filebox.py,sha256=XS0fu9k4q-V2BTO5OFDmTZ9BGq87ua_wJTF8b1y_-aE,8104
45
+ codex_autorunner/core/git_utils.py,sha256=hOxXp41FDO6U0x0fOjSdW8-x1IXj6rJ_EvgXXre6a3c,8570
46
+ codex_autorunner/core/hub.py,sha256=JeFndESVPUYDARB7MZIU_sdyEL20DRSVL1cpKisnpX8,44847
47
+ codex_autorunner/core/injected_context.py,sha256=HQ1VTO7E0TccBkRMQM3f0ihiGS4FNM-aCW35QX7_CXs,301
48
+ codex_autorunner/core/lifecycle_events.py,sha256=QLpBJ1OjbGxY3rvzmYrlu-ZmoDicXNSiwO8RB5Qc4cE,8515
49
+ codex_autorunner/core/locks.py,sha256=MWPGf7-4QTcQass9O5M7OlI1pHAqomep3-7pr3aA8qU,8324
50
+ codex_autorunner/core/logging_utils.py,sha256=fQ9rIshtE-S02-xcFJOUOAXFTrFIcv_TkHzBXU4fxHs,5063
51
+ codex_autorunner/core/notifications.py,sha256=XHhnhN6nJpJlbnNVrapMiXr8Y4El7l7x9s3ZCqTAjqM,18043
52
+ codex_autorunner/core/optional_dependencies.py,sha256=sBuSnQrRhV6_JA2tVLlVnDBsED79kY81cOyWcRiynUM,1271
53
+ codex_autorunner/core/patch_utils.py,sha256=H5IPB5X4EJmXw7dNV3hj6m-vV2yXNY4PMuvq12msV7o,7635
54
+ codex_autorunner/core/path_utils.py,sha256=2TwtUY8YvIbc4fyqVcZalzBVTmk5uDMpeUg7ZDAt0h4,3492
55
+ codex_autorunner/core/pma_audit.py,sha256=QtDbR6yD4kdk8JV67fjeidNjOga8S2rLUsUNX7BSxJE,8022
56
+ codex_autorunner/core/pma_context.py,sha256=Xm63zxRcQ0DybQaJOXhwde1ADPGq8iQMeFIUhEhtvIE,16559
57
+ codex_autorunner/core/pma_dispatch_interceptor.py,sha256=WZZfNJKAciqLdpJm02tE1t3WndU7nLO4z9xQcOb0wJk,9203
58
+ codex_autorunner/core/pma_lifecycle.py,sha256=p60VgkpXxY0evLNPJj4-OhWIG6BXP4IepLyins4lhNE,16997
59
+ codex_autorunner/core/pma_queue.py,sha256=R7AvfqWWxpER3lkhuP1d1eLD_LK-94oJyVmF7TKP4CM,12464
60
+ codex_autorunner/core/pma_safety.py,sha256=Xf648Q044O_Gx8GZYVybBFaPy9fZwExWqGZciNMTgmk,7619
61
+ codex_autorunner/core/pma_state.py,sha256=dN-nRhUrZVPqlTsaEOfDn6s7eoN12zMTBqmW2HJrS4M,3722
62
+ codex_autorunner/core/prompt.py,sha256=TUkZr5wYVHNtgxUpXeiSK_d_nxf412idEtjjoaXcDWM,177
63
+ codex_autorunner/core/prompts.py,sha256=rPC7nIyA0QbQZDhTuqO3--_pf64wzPOCxKstwRalkGQ,5857
64
+ codex_autorunner/core/redaction.py,sha256=bm7KhtSVJ24GwTOkJBRSZjCzCG-uHerqFtZN-KemhJ0,738
65
+ codex_autorunner/core/request_context.py,sha256=FVQtn67zJffRET9TBy48jk23ZonAjONOeFwZiizyfxc,997
66
+ codex_autorunner/core/retry.py,sha256=n31DM84oIW0PwWPipNd5TH2H6H5ej8I2JxikfX-FIQs,1725
67
+ codex_autorunner/core/review_context.py,sha256=kCRjuzHLyf3weUh2uycn0EgHzrvTco1bino0fV0StOU,5107
68
+ codex_autorunner/core/run_index.py,sha256=feOG5JNtJoqH57vfRuIeVtb111zokgpDsHMj3cgz4TE,7794
69
+ codex_autorunner/core/runner_controller.py,sha256=uIT_Kt2OBgKVCbk_8otN1zwCCnqCQFoUXnalI1Euoxs,7521
70
+ codex_autorunner/core/runner_process.py,sha256=G_O_kzo6sv_oWl0FuCzUXW28kZGXh7OdZOBWBKR5kBk,1503
71
+ codex_autorunner/core/runner_state.py,sha256=WzkAGaf3OA3jLSSmVAtxwuoYoQkvpUPLOa_BulJ8Yds,5014
72
+ codex_autorunner/core/runtime.py,sha256=6DKC7Onpb4nxGoCTJXlgI3rwrQWxtPg4iM3KlwjSGTs,26626
73
+ codex_autorunner/core/sqlite_utils.py,sha256=1fvF2SZ6bx0yI7fgm-obik6x7RwofymgWZbpQuatf_M,1069
74
+ codex_autorunner/core/state.py,sha256=xfcbAYr6RRMNCUDbfde_qOGp_cS28XjKRORyfUs5kn4,14379
75
+ codex_autorunner/core/state_roots.py,sha256=q0UO8-prWErKP0MmSRPQKAXQH3hacdnXPHB-ZrO5iQ4,1887
76
+ codex_autorunner/core/supervisor_protocol.py,sha256=5mF7krSfH82zU6smopJKamzqrcs2t2Uz-GU-vuCk2oc,364
77
+ codex_autorunner/core/supervisor_utils.py,sha256=Cb20PgcJzRWVCrJZt3SkCocoijQOuOwkKzsIFEIaHYY,2060
78
+ codex_autorunner/core/text_delta_coalescer.py,sha256=hNHupQpbE6YVDioNmuehcQZosGI9fhvNLFTm_5xtNMs,3086
79
+ codex_autorunner/core/ticket_linter_cli.py,sha256=PQ3Ir_EOEMAV-qGMw_mf4FWl1sByZb7NJWxY43R7KEU,7260
80
+ codex_autorunner/core/ticket_manager_cli.py,sha256=-knJiuWIu9qmwz8FKuZjqY-rCFA7MVMbWz8NNBadTQs,16598
81
+ codex_autorunner/core/time_utils.py,sha256=XUnwf8G33GXC41BC04ofjVgy-BXQPvBBlaPNgAk1wjk,206
82
+ codex_autorunner/core/types.py,sha256=azj_41SVrmarROn0EKSGmCzBeNgJcx7F1k-pqadBSkI,440
83
+ codex_autorunner/core/update.py,sha256=Nw0o6QlsqIiRmiKhQ7ScRHa_H7U7zs2DbN-2PjBC4zA,17839
84
+ codex_autorunner/core/update_paths.py,sha256=ECTr-8YUr85Shg_HKHgYHcsgZP5eOcmZsEOQbiYgeZE,796
85
+ codex_autorunner/core/update_runner.py,sha256=mimPqchmRD-Rv2TIX67Z-ShfH3ytzS_Lozw0m6IdBsc,1484
86
+ codex_autorunner/core/usage.py,sha256=BpttMKXZaPADFhjBxlhIExY6vTr2tmwUK7v6u_vSwfg,74815
87
+ codex_autorunner/core/utils.py,sha256=F4vvnOeduINC500_N6Uil0_xWZHiWVLElO2uYKwOF6w,11892
88
+ codex_autorunner/core/flows/__init__.py,sha256=AVQh2yts_kjo1zA91HwBc4uoMkfSRl8E_2b-gnxdvHM,503
89
+ codex_autorunner/core/flows/controller.py,sha256=2OYAVzIuRvCdEkD5Cx0OS7AxCbOje0sS3JwQqfQgULY,9814
90
+ codex_autorunner/core/flows/definition.py,sha256=5rkczvPA2dW0PdgSYQIFxu4ItUPu2Q9_8ATeZiKGEpY,2725
91
+ codex_autorunner/core/flows/models.py,sha256=Pny0f6fFXKX7tCuwUCYKRJPit8orqLIfjkfhLd_8zWA,2428
92
+ codex_autorunner/core/flows/reasons.py,sha256=hT_NXIl-7Ry8n7xk289iUnbL_5i-SAOeBjo5AJikqA4,1565
93
+ codex_autorunner/core/flows/reconciler.py,sha256=Ta3mUFfOmFZIgVoc-fpkIM9FAK19HzIbCnibHWfvQmM,4292
94
+ codex_autorunner/core/flows/runtime.py,sha256=mMyWJR63sZjhPsmiQRLwakoKSxR-OFjIexNP1n2cfO4,14495
95
+ codex_autorunner/core/flows/store.py,sha256=G6M17Wf3jO3fXCjwW9PfvI-Ak2kYjOJf9ZhNjZZh7wQ,20434
96
+ codex_autorunner/core/flows/transition.py,sha256=o-LDTz5aL5jQ-owNAVq1Xe6Su8lZ7GCGdX_NWus2V6U,5056
97
+ codex_autorunner/core/flows/ux_helpers.py,sha256=-508f_gGLq1J-owUziCSTXV14dIjZOAqWvV3NuK7oG0,8620
98
+ codex_autorunner/core/flows/worker_process.py,sha256=kTg9yzxlD5UnQ0veDjP8_v6mi1UXADNnPm4zrcZei7c,7471
99
+ codex_autorunner/core/ports/__init__.py,sha256=FAfpDuugMaknY8LSIqqGqsfCXgnh3kbBQlux5Z6Xez4,490
100
+ codex_autorunner/core/ports/agent_backend.py,sha256=LAqXqhjs482Al6S4Tx_6h4yiFgRl3VXlAkzFTS9yZOs,4304
101
+ codex_autorunner/core/ports/backend_orchestrator.py,sha256=3VZpeW078WqcLJotf5zXArs4O6dU79Kfz3e9iZcgvuc,1113
102
+ codex_autorunner/core/ports/run_event.py,sha256=inttfYvHRxQG06mv0iQIjLEuSuMTLauWwZlyhFk_0sc,1410
103
+ codex_autorunner/core/templates/__init__.py,sha256=g5g9IGdQoJerPat7cOUtIEpWbW3EGvpnToifKDGf9vQ,840
104
+ codex_autorunner/core/templates/git_mirror.py,sha256=7xcR1M8HU_6Khm5rL4ziZXlEPPCiLXFF2mul4e6y4K8,6639
105
+ codex_autorunner/core/templates/provenance.py,sha256=mayi07_J2pED_rKxxXvds9zWSLWJ_wn-IVVq0k-T3xs,1638
106
+ codex_autorunner/core/templates/scan_cache.py,sha256=i_jABUdRoV4AvYm3fHSb3Ex-z2JHQmIc--rd7ckt-6E,3790
107
+ codex_autorunner/flows/review/__init__.py,sha256=aUkSaVLBDjgbC72hfIM1t-ZzE0hLWmtjlNjlhJb0ktk,320
108
+ codex_autorunner/flows/review/service.py,sha256=MiO496yk-XhTmt-DgDWKmGMHuZQxtIR_CZYj6rbELZY,30600
109
+ codex_autorunner/flows/ticket_flow/__init__.py,sha256=bSji9VcWwd_Ow6hdBlLOlpvoEcieEwcfswJ0DI-SWPA,97
110
+ codex_autorunner/flows/ticket_flow/definition.py,sha256=zQyxoWQ02QX32_Ipx28rckK3ZtKk5UfRW78nPdG1_Vg,5509
111
+ codex_autorunner/integrations/__init__.py,sha256=_6PZ2Hq6DzApW4d0rrmJY05vftGmHXpHe9SOxq0J2hM,28
112
+ codex_autorunner/integrations/agents/__init__.py,sha256=9SiyMj-Ud1rtfOWrvpzxEIZRn8vLuix6G186AiXDht0,610
113
+ codex_autorunner/integrations/agents/backend_orchestrator.py,sha256=KdGNhI6kbMhpBypJQqDRsPek8PXSuGhiyss1MdRz5mU,10269
114
+ codex_autorunner/integrations/agents/codex_adapter.py,sha256=V6OtHb3poUB67nrIdnHwnCN4lmUaTFTCfR9XPkRxRDM,3886
115
+ codex_autorunner/integrations/agents/codex_backend.py,sha256=D53HdjyHL7bL2SPi7DVY7dRRtRT_4NCU-yd910wS_v8,17882
116
+ codex_autorunner/integrations/agents/opencode_adapter.py,sha256=yOG3WfwRborZ6pKgABG7P7W9EG-QkkH3g9-49m_u1oM,4051
117
+ codex_autorunner/integrations/agents/opencode_backend.py,sha256=kSPuAcb2DuZnKyf-0ZFEhLLKLoEQKKA9NKD2qFYpWMs,22307
118
+ codex_autorunner/integrations/agents/runner.py,sha256=JyytAeuSBpJPA75jWmIoFlON9jyKgfvXmg-ZJSXm_uk,2690
119
+ codex_autorunner/integrations/agents/wiring.py,sha256=UVnBHoOvDNlGK5U3sqPfggaWlPxr-Ai7Xfk508zrAzc,12326
120
+ codex_autorunner/integrations/app_server/__init__.py,sha256=Ro2hRhH9wzxQJThz1Kyo-SADxCFtyF2ZfhHNureykGk,201
121
+ codex_autorunner/integrations/app_server/client.py,sha256=S6zRzbSryU9YrZ3j_1Azu7dO6NQ9ZbY40HuaN_xkoR4,70827
122
+ codex_autorunner/integrations/app_server/env.py,sha256=S0qP_hPFlRL-IHJCoRQoGJBWrkjnngiI4vGRCuimpx4,130
123
+ codex_autorunner/integrations/app_server/event_buffer.py,sha256=t5e6YJ7ZaqoR8p0K95i6q8dfrUQ9sR1lYdMi1jjepZk,7150
124
+ codex_autorunner/integrations/app_server/supervisor.py,sha256=7VAXeyufWRkqHrcaV4JFDknqboE7K3RosU14CFzUhl8,9659
125
+ codex_autorunner/integrations/github/__init__.py,sha256=mLMQATB-B_LbgebPRCdWqUDS-cMxXfuALGh_RsWbWBk,224
126
+ codex_autorunner/integrations/github/service.py,sha256=484jkhg_lnDap0jMatspuMNn04cg7uVqAG2GctF17Co,39015
127
+ codex_autorunner/integrations/telegram/__init__.py,sha256=oAEE1Yb-7Ybgb79NLWqNErkSXOGBJDgcvlI7gfHlpDA,36
128
+ codex_autorunner/integrations/telegram/adapter.py,sha256=YPFLrFxtYu_nfOGEG-dzWcjeWioBsCtG7bzxy1R66l0,56820
129
+ codex_autorunner/integrations/telegram/api_schemas.py,sha256=IXwB17Y4wL0lborU8HHssgNgOtHUJYLoMAcyb3Jv7_8,3402
130
+ codex_autorunner/integrations/telegram/commands_registry.py,sha256=C5T6KeTUq4DmhmSe9FwNRg_kNJWKcYB4hxthVu7MbAQ,3153
131
+ codex_autorunner/integrations/telegram/config.py,sha256=9xp66k479EedIGssi24UIm8EvCAtBuGL_ea4kkmdGEA,32312
132
+ codex_autorunner/integrations/telegram/constants.py,sha256=16-CnkenzOrXAslfFXKYAMBmBUVPltAHfSuBWqq0Eag,6741
133
+ codex_autorunner/integrations/telegram/dispatch.py,sha256=dgh95aYuvveqS7TGvbYHKbtT2RYFx1qGq7mGYyRY2xI,6916
134
+ codex_autorunner/integrations/telegram/doctor.py,sha256=uZNxQsnRGaQnu6GpoHVve5ELkSDO6FPCN4_byj6XbQo,9667
135
+ codex_autorunner/integrations/telegram/helpers.py,sha256=vfsrdiaAILyOAqSbDikakhlfYFS23Kqb9lYO2sixocA,73389
136
+ codex_autorunner/integrations/telegram/notifications.py,sha256=XvUdRUq5gfD9JA30PclVLrDL5Azw0Sin8Oj0i1fcVx4,23430
137
+ codex_autorunner/integrations/telegram/outbox.py,sha256=U3qve8pTSRakeqMMWgWqkSvL1e7zoz_aWqhLNH2eZEk,13954
138
+ codex_autorunner/integrations/telegram/overflow.py,sha256=LUbPTwA2BxFV1w0sF1XAhIu_ft_eieSVYmjuftiVyO0,5384
139
+ codex_autorunner/integrations/telegram/progress_stream.py,sha256=jphPyvF1ka_ppEK66spAbcSDkEcNNXuJ2Y6p89VC4ks,7756
140
+ codex_autorunner/integrations/telegram/rendering.py,sha256=uBhymMUQuiKJJZ0ZxSl01sC4dYFVJqoIMMMFlm1XGZc,3531
141
+ codex_autorunner/integrations/telegram/retry.py,sha256=GIdMSSCVa2Sjd6-t2FC1O6AwPPSEM342rjjuI1Y7Tpk,1349
142
+ codex_autorunner/integrations/telegram/runtime.py,sha256=yyELUr2b-H3qosqWFnkhqCgaG5Cvf1i4hv3CClVHChg,10625
143
+ codex_autorunner/integrations/telegram/service.py,sha256=vBXVyhtXTBUtMmG2hjw36ql6iK4NpglwpMRJALFhN8E,59505
144
+ codex_autorunner/integrations/telegram/state.py,sha256=FxdZVz8JNGyM5MAOBYXBHGcKJj4dxiNX6SrF_2ktrgw,85694
145
+ codex_autorunner/integrations/telegram/ticket_flow_bridge.py,sha256=UkRMloBZx-amYf2M4xRZG35-Zyz7ecu8uBEDY3dyeJA,21308
146
+ codex_autorunner/integrations/telegram/transport.py,sha256=zvNMR2hhwTgxLyf0dS0gDxFVIVEMoiGYkeiPQwblD2o,15082
147
+ codex_autorunner/integrations/telegram/trigger_mode.py,sha256=bDGQUMUbnUNq4u25c-zmBUAOlFvnl5a8YyWgTN2Y8h8,1531
148
+ codex_autorunner/integrations/telegram/types.py,sha256=SjeVaus_YtWz-06GqkSWl99cHTdu0YKd5egdlYY3tMI,1707
149
+ codex_autorunner/integrations/telegram/voice.py,sha256=I3XD-Uc-egA2UVfby210-kCLhL_pBfekyaaGLf359Qs,14784
150
+ codex_autorunner/integrations/telegram/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
+ codex_autorunner/integrations/telegram/handlers/approvals.py,sha256=G8-FwRSyyBs9emb9eJjf4a0kD2rdqnFf25SldfHCKZ4,9365
152
+ codex_autorunner/integrations/telegram/handlers/callbacks.py,sha256=wyF8Kmg69KHpKdlPj1DOhp3EEQ3rZ0sjxHnomApSAKw,3754
153
+ codex_autorunner/integrations/telegram/handlers/commands_runtime.py,sha256=b935T6ML8lG8VUjAZQQ5M1nDR0rDU-1rq-u9HWez7oY,108920
154
+ codex_autorunner/integrations/telegram/handlers/commands_spec.py,sha256=B9nzbALNmcxCzgz6MSHJgYy7lJgt4xgT9E41XrxVlqk,5629
155
+ codex_autorunner/integrations/telegram/handlers/messages.py,sha256=2MOy2nxyStU3l4-fJ9_YMfjsyVovju9o9Fn64PwzK9Y,32665
156
+ codex_autorunner/integrations/telegram/handlers/questions.py,sha256=GoOZzyYPqOt9jW4T27EzjNUOQrMgf3i3F6fJ6tWILzI,15570
157
+ codex_autorunner/integrations/telegram/handlers/selections.py,sha256=JSg_ihLMkK1L3aH8XPEFbO5EaYY5ZWddwPztkNkA-Wc,25055
158
+ codex_autorunner/integrations/telegram/handlers/utils.py,sha256=T2y-2p1SNduypiNz9uq4zqRIFq47z9Lop6_s3nhUzN8,5317
159
+ codex_autorunner/integrations/telegram/handlers/commands/__init__.py,sha256=NjxemJCRhWUDCP0nacsBfhXMYYUstVotgUhcISTaANU,812
160
+ codex_autorunner/integrations/telegram/handlers/commands/approvals.py,sha256=uQsGQtSPjXZ5FyNldvVsZDImEI-G-YOMUwhlnth2wlc,6632
161
+ codex_autorunner/integrations/telegram/handlers/commands/execution.py,sha256=TF4d4V9SI-6qbEHTy9BZcwA3fuMh08RxYGBvJL-D084,112545
162
+ codex_autorunner/integrations/telegram/handlers/commands/files.py,sha256=OtWdyV_EKsyp6wJK2HlEUuBfB0ZM67NATnoZvVcVsTQ,59270
163
+ codex_autorunner/integrations/telegram/handlers/commands/flows.py,sha256=vJWHGNdFai8kgttOP1CybuAQPF4XfFU-mCOIXxbbP1I,64463
164
+ codex_autorunner/integrations/telegram/handlers/commands/formatting.py,sha256=WRJDe2jUtrGMFVsp2Hah1GDsfQUV0Dd0KLSbcrY0j0o,3139
165
+ codex_autorunner/integrations/telegram/handlers/commands/github.py,sha256=IKWKYttLqUei5NCzjIIqvGBcFpRBffdfvTwSMzPHzWo,68888
166
+ codex_autorunner/integrations/telegram/handlers/commands/shared.py,sha256=Lam8f76yQGkTBsr0QpawOBU_eIjch8C4NzW6ifSd0sQ,6581
167
+ codex_autorunner/integrations/telegram/handlers/commands/voice.py,sha256=y06N3ju4RjI1Y4r69Os-2BcR6erHjXyGOkoiLWepS0k,3955
168
+ codex_autorunner/integrations/telegram/handlers/commands/workspace.py,sha256=7sle1PCCD1WQ1vdrzQ8IWEDSgTJHBxyf-TpZdeesElc,100360
169
+ codex_autorunner/integrations/templates/__init__.py,sha256=zicmMosrOEOwvBqiWkYzOfkWN6v2t4hlEwVMZyyLpNw,706
170
+ codex_autorunner/integrations/templates/scan_agent.py,sha256=4OIrBbIzG-nxS_zXNcfBKmC2l4XHVavG2rdFA9dEHo8,9887
171
+ codex_autorunner/routes/__init__.py,sha256=c8w_wt0V051zbHnI9WG3HieblE_2HivnboGux25oLQA,505
172
+ codex_autorunner/routes/agents.py,sha256=0mrfZk4I3m0ESgD22n-hyPrSMWlrzgC-WhXqRIci1r8,103
173
+ codex_autorunner/routes/analytics.py,sha256=OPyGeqZVb0bDleUiAovfAOuYEpKwUNEbmC3Zhbd6_ds,110
174
+ codex_autorunner/routes/app_server.py,sha256=mWMpx9SzuxuqlXvEGS3_ew874i8QnXRAjb4ApOFkB2o,112
175
+ codex_autorunner/routes/base.py,sha256=A0itiLKieDNxo7N2SX2vX4Vf5aIatnDUIkXnlj08gy4,100
176
+ codex_autorunner/routes/file_chat.py,sha256=t2mUC7FJyyYX61i_zQ6M3xvgGpodWe-uB9sHGhZEd7E,151
177
+ codex_autorunner/routes/flows.py,sha256=DWc8xypej8xckLFqm9-qJMOGltncYS44hA2z-xlwPPM,134
178
+ codex_autorunner/routes/messages.py,sha256=IUn6B3KfPxw6dZ_8Yclc6kWtyzRJTBofxLizVCR0qX0,146
179
+ codex_autorunner/routes/repos.py,sha256=GuoriAMRGIzp77AqSK-s09RfzJEG1hDhYjyqq62rNjY,101
180
+ codex_autorunner/routes/review.py,sha256=vka1UJoMPL11OcftGCIHKRSaYYRHf1GKS1a37U2dxQY,104
181
+ codex_autorunner/routes/sessions.py,sha256=oXcKezZ1CTlOMz4bF1lOhFogYi1msbgmrpoUj_KmyXI,107
182
+ codex_autorunner/routes/settings.py,sha256=udTlhq0iFVloQz0C4bNTB7PQvMZRKeL9XP122Mp41_Q,108
183
+ codex_autorunner/routes/shared.py,sha256=abxEaPZOgPMGZmYJxkN3Vqlm1-lE79FkM9VAvzpB-RU,113
184
+ codex_autorunner/routes/system.py,sha256=sDPU0W0XxMvPKsqUfNfryN7dTp3QNjE1d6awhsVrUIU,139
185
+ codex_autorunner/routes/usage.py,sha256=XbPzqbQdPMlpley43IqGCeAZ0VzQ-7Da9A2dLhpmf0Q,102
186
+ codex_autorunner/routes/voice.py,sha256=1Ce6A2NojspaJQ_TodOsdZRyodn4E-gDPkVnwe_rQi0,102
187
+ codex_autorunner/routes/workspace.py,sha256=j_-z5kSU5pMC2obOyqJj4HYW35pquVwy7swBQBDflk4,110
188
+ codex_autorunner/static/agentControls.js,sha256=U8c8s9ueKOBD8rgLJS5gseebKnXnxYfMnQqttY2MS8U,13745
189
+ codex_autorunner/static/agentEvents.js,sha256=HAQHeKJnOqj6IkcBEM1ye5p6rcIjK9c9LZfBWKowonw,8188
190
+ codex_autorunner/static/app.js,sha256=rxtxK_Tw4l6rXxRycE7a-rHoZaOTne901CQbmLQ0ZyU,7658
191
+ codex_autorunner/static/archive.js,sha256=OsdQ_OwOiSsA1mDPtPO_fEUuVZ0XsDGfE20Ddnd7RII,31544
192
+ codex_autorunner/static/archiveApi.js,sha256=da5envEoMUK0WF_iQScWjUhEeQPaCilsGGbWNyK_MnA,1622
193
+ codex_autorunner/static/autoRefresh.js,sha256=8nsJmnIpD1Ga02kdUIFNAA3Z3-lw-7kLJMjR4Ve0aE8,6694
194
+ codex_autorunner/static/bootstrap.js,sha256=ZXzMfDMjiC5ReOrDbv9lqSBaTZQlM7eqEAJ4IKPhm5s,4833
195
+ codex_autorunner/static/bus.js,sha256=NXuNHd_43Irr-5Ood1LQ15rSwCTm5J_Pv9ybnkeGQM0,630
196
+ codex_autorunner/static/cache.js,sha256=idp3ISlRKjSK_eSRUmL_rWGI2qx7g-BJ1_48Mz6IWSw,1035
197
+ codex_autorunner/static/chatUploads.js,sha256=oFKWPAHnESvk0aqFTH40A3-90fai78GGS9KXSr1RZsk,5174
198
+ codex_autorunner/static/constants.js,sha256=TuLK0-_WKJVE5uJUeTl_CVtD5laEtTjtTnu0Uv2eIFw,1932
199
+ codex_autorunner/static/dashboard.js,sha256=15gI7rxhtG6Ngnw_N9iNHSkALkaaGRIYCYoqEJxwOe4,30749
200
+ codex_autorunner/static/diffRenderer.js,sha256=AVeJ6yt8UBk6yQJWV6VCIsH9TIY5CYTCjNFD8uOWQ9U,1307
201
+ codex_autorunner/static/docChatCore.js,sha256=LSn_Z7MHh7FtiRexXtxfXGdjN9mjfkdQODxgcAc90h0,22724
202
+ codex_autorunner/static/docChatStorage.js,sha256=OgPiNgvPVVp0kJcCVy-ILjMSo5--keyrIleWacA-k6A,2104
203
+ codex_autorunner/static/docChatVoice.js,sha256=YrKIf0INTke3ge9uDHLl_Fd3wFcISGyjJlQU-iyhAlU,2419
204
+ codex_autorunner/static/docEditor.js,sha256=w2AqcQEGIkRut2xpRiFG4ndxccv0THoh3ZdwFw2YM6s,4580
205
+ codex_autorunner/static/env.js,sha256=3-XgQC03WqalAg_T8dabn47uSKS7lPM874OzV7ET5jU,1813
206
+ codex_autorunner/static/eventSummarizer.js,sha256=PuLdLS9MIVrp97W47iAlEf8TFLNTHCigT2clYCH2sZg,5425
207
+ codex_autorunner/static/fileChat.js,sha256=cUdmgyUOo2VL5Oe8VK7aDFYHEoT1ldyjZx7bgY0A69E,7248
208
+ codex_autorunner/static/fileboxUi.js,sha256=HPNsms7jzdl8sM5eZNFkJac3mkvSRioziwIkQ16OwjQ,5600
209
+ codex_autorunner/static/health.js,sha256=nwB-Ofc96zTP6YLQDaIJfO7duLug9bj3CCe893M7x1I,5204
210
+ codex_autorunner/static/hub.js,sha256=CTZRedwEwo7S3Z500doHEYrEcWpIgm-Rk2rtY6aVd1U,48852
211
+ codex_autorunner/static/index.html,sha256=JICjnURPfBLlmVsbpiEkzu7mJsOKUwg7NXfgF8G6Ksg,65834
212
+ codex_autorunner/static/liveUpdates.js,sha256=SiVWPQRp-mqmmhRqOQWPFtMBLUA89J1KYvif88ZCMOk,1950
213
+ codex_autorunner/static/loader.js,sha256=2Xyg_D43sSsH3fmm93-utyPJJSQ7KpvebbhNrM79ljo,1065
214
+ codex_autorunner/static/messages.js,sha256=xLjw2LJMy6ng1cgEsCcZZ7SN4PXeNSFEVkJycQVhe8Y,35287
215
+ codex_autorunner/static/mobileCompact.js,sha256=cDXLGeFLj5_knH-9qOXfbR5IXjCttyQ3-jclL4k1ouo,9473
216
+ codex_autorunner/static/notifications.js,sha256=WauZLW1M4oPX9y9mtMklioVpzlPu7cu06aWgIBgEz2E,8992
217
+ codex_autorunner/static/pma.js,sha256=eA_jyCXjaLetVQ02-jacfLN813xYSM4yaGIesCJ9ssc,42857
218
+ codex_autorunner/static/preserve.js,sha256=cOB-kcPQPHYDZqwkJFi69n6LhT51BHNWGL6zLRPsJyM,437
219
+ codex_autorunner/static/settings.js,sha256=ouKultNn5PUXt4tFr9CkkQdTMDwC_RtSTIbyuz-12Vs,9989
220
+ codex_autorunner/static/smartRefresh.js,sha256=0BovWNSXgeqkcawiF0JfZf7Zu81Nqr2Ni4qCj0EeJ6I,1713
221
+ codex_autorunner/static/streamUtils.js,sha256=EXbXeDUKUry953W3noyWo-2dpZxVVkfgbwiFT3eAXLQ,2128
222
+ codex_autorunner/static/styles.css,sha256=srBoQ3KL6UW2zl80ThpgFE0c9a8hDciRjjxMYfrcuGc,253919
223
+ codex_autorunner/static/tabs.js,sha256=SgebpOJIxzkD307VQ1NmXBpLY40b1g8RvNIcf2fmVlI,8429
224
+ codex_autorunner/static/templateReposSettings.js,sha256=w-YmI-zbSpiVE_MHew3Ly2kJRF81_QbV-GMl8MAfq9E,7121
225
+ codex_autorunner/static/terminal.js,sha256=EEnwfA8rcOt1vOQngXdOTpymdqsYoBA-XPmFoksaHcs,1621
226
+ codex_autorunner/static/terminalManager.js,sha256=_KqMvFqCq3t5St_Bxl7pC8w9KAvOth9InT56hUSnZxc,139493
227
+ codex_autorunner/static/ticketChatActions.js,sha256=4BsA_eUb3fV0qqK7GO1s7BvZiVIH1F7ggm773x5BS9E,18026
228
+ codex_autorunner/static/ticketChatEvents.js,sha256=9Y1CA4t--bxqXRHrsE4O4Dx5Td9KAFAAZwLXXj_y1yM,536
229
+ codex_autorunner/static/ticketChatStorage.js,sha256=lEg2zKJfEA34ZS0azwCmGPW8CPpX3wqCmyNcCafP9Yw,621
230
+ codex_autorunner/static/ticketChatStream.js,sha256=vv5hqpmvUPINVEZB5PKPBviLqB5ZHdLb3N-UhARxhiA,5987
231
+ codex_autorunner/static/ticketEditor.js,sha256=BYWz8Avwux-rfuEZ-_uObokzGVBXYEnZAGPd8gElfU0,31420
232
+ codex_autorunner/static/ticketTemplates.js,sha256=jk8LWKnMHPoLoD7QCQ-88NDdQWwrHZj12RGtFkTbkjk,26465
233
+ codex_autorunner/static/ticketVoice.js,sha256=CVRumgn6kc9uwEqvRxh5bdHx4C1DTOv-SEP_fJgeLxM,320
234
+ codex_autorunner/static/tickets.js,sha256=c57keSCtTObCY4XXVcTkqBhUdjRJqFc_86tTTly2_B4,79904
235
+ codex_autorunner/static/turnEvents.js,sha256=AmZZ3Bt-A1hg4QwaY9-tiwxnUEvDJvwdbrq7OF8wK5s,1152
236
+ codex_autorunner/static/turnResume.js,sha256=eAXZLyyEYr-mCuDjItxRJkdCUBbdXZGzQEH_lTx2CHk,776
237
+ codex_autorunner/static/utils.js,sha256=oWEmfn2JFSYDIcKpBNVu4kcSHnqbaxm42AxP1Ns7OBA,23200
238
+ codex_autorunner/static/voice.js,sha256=QfQvDQK-AkyO1nNtYxq04dKolfyWHiLHG5uihGV9hpU,20209
239
+ codex_autorunner/static/workspace.js,sha256=xqdf9T_0Cy_iFECMREIZ-WwmKL0jUfz2aM4f2Cm_DKg,37220
240
+ codex_autorunner/static/workspaceApi.js,sha256=kZ79wHLBocaoFQwMN09XoQ8HM2rBKucqa_NQx5FPOlM,2015
241
+ codex_autorunner/static/workspaceFileBrowser.js,sha256=qgn3AXtSym3nIY4d7RQxLW3JLuD3iOjlwPymXsP3Eus,20961
242
+ codex_autorunner/static/vendor/LICENSE.xterm,sha256=R1kKvILKKMOnUg07hzusejoAsCy8Mik-HxQdzNJpgIc,1186
243
+ codex_autorunner/static/vendor/xterm-addon-fit.js,sha256=EPMZTF8XwXhvt9XbhlweyFObZzajGAY_04var3xGhI8,1503
244
+ codex_autorunner/static/vendor/xterm.css,sha256=gy8_LGA7Q61DUf8ElwFQzHqHMBQnbbEmpgZcbdgeSHI,5383
245
+ codex_autorunner/static/vendor/xterm.js,sha256=8K6g919IVZATrmZDwked1zfSbaQtVSTm0rcJFa5lI8c,283404
246
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-cyrillic-ext.woff2,sha256=k0PeLKXZVJ95LnliN1r477DzIMdkO_02yIS1ow5cOW8,1664
247
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-cyrillic.woff2,sha256=SZWppDrGWewy_Ni0Y3Vc1qB7Mabms4lKahU7Zhz0kOI,8892
248
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-greek.woff2,sha256=ScPabJorJ5sPH4YPXPsfXcONiKXHvpybGDe7xOPbYRE,6800
249
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-latin-ext.woff2,sha256=nDjLLQ0tk8HubiH6eNt28T6n4V4VzGQhTHyom2qqNcQ,11596
250
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-latin.woff2,sha256=LDK5s-41jBGeIQ9vUZX5vTSJTXinhf8uldYOcY5ACvQ,31340
251
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-vietnamese.woff2,sha256=1E6xk2BDpWA46wLdcLJD83m-9leD-U7BLyd1UHIEEfE,5872
252
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-cyrillic-ext.woff2,sha256=k0PeLKXZVJ95LnliN1r477DzIMdkO_02yIS1ow5cOW8,1664
253
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-cyrillic.woff2,sha256=SZWppDrGWewy_Ni0Y3Vc1qB7Mabms4lKahU7Zhz0kOI,8892
254
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-greek.woff2,sha256=ScPabJorJ5sPH4YPXPsfXcONiKXHvpybGDe7xOPbYRE,6800
255
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-latin-ext.woff2,sha256=nDjLLQ0tk8HubiH6eNt28T6n4V4VzGQhTHyom2qqNcQ,11596
256
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-latin.woff2,sha256=LDK5s-41jBGeIQ9vUZX5vTSJTXinhf8uldYOcY5ACvQ,31340
257
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-vietnamese.woff2,sha256=1E6xk2BDpWA46wLdcLJD83m-9leD-U7BLyd1UHIEEfE,5872
258
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-cyrillic-ext.woff2,sha256=k0PeLKXZVJ95LnliN1r477DzIMdkO_02yIS1ow5cOW8,1664
259
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-cyrillic.woff2,sha256=SZWppDrGWewy_Ni0Y3Vc1qB7Mabms4lKahU7Zhz0kOI,8892
260
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-greek.woff2,sha256=ScPabJorJ5sPH4YPXPsfXcONiKXHvpybGDe7xOPbYRE,6800
261
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-latin-ext.woff2,sha256=nDjLLQ0tk8HubiH6eNt28T6n4V4VzGQhTHyom2qqNcQ,11596
262
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-latin.woff2,sha256=LDK5s-41jBGeIQ9vUZX5vTSJTXinhf8uldYOcY5ACvQ,31340
263
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-vietnamese.woff2,sha256=1E6xk2BDpWA46wLdcLJD83m-9leD-U7BLyd1UHIEEfE,5872
264
+ codex_autorunner/static/vendor/fonts/jetbrains-mono/OFL.txt,sha256=p2q_ACxJCX0UboZ0CjEFpdAEULFZLoIKEQmoxWgM1pc,4399
265
+ codex_autorunner/surfaces/__init__.py,sha256=qZrxvu7IX7s-SgSSIugNSc1JBE566tYz0zCX0hDhoUs,117
266
+ codex_autorunner/surfaces/cli/__init__.py,sha256=TPjzXRVfCb4BIDdNkHovX9nhW31VGTQGy7V7oYvEVF4,211
267
+ codex_autorunner/surfaces/cli/cli.py,sha256=vKlQSC0MPXVeQNjEj3eY94iTzUglA3uk3YScyynNiHQ,92443
268
+ codex_autorunner/surfaces/cli/codex_cli.py,sha256=4DJIaw63ohYlxsXWTG7Ikux8_zwgWYOyQqXtRWE7rMc,386
269
+ codex_autorunner/surfaces/cli/pma_cli.py,sha256=7Id9_KpG2UBQoz7_201vZib-4C3DJyCKxjJ7fiHyARU,30315
270
+ codex_autorunner/surfaces/telegram/__init__.py,sha256=esNRNjA4D3fsYSNsR-x2C18iUQpnyYWY0CQT7hrUx3k,66
271
+ codex_autorunner/surfaces/web/__init__.py,sha256=fDDDTYL26__wwaWd7xtI6axymkOgYntcrlHeHptDb8I,29
272
+ codex_autorunner/surfaces/web/app.py,sha256=WpE-jiYok1t_Qnvr0HNra1VJO211s3Y19pWXePCbDiQ,87990
273
+ codex_autorunner/surfaces/web/hub_jobs.py,sha256=L_ba698fms2YdlZLUl6erLha-_-t3MJE5jsL9JcP3pw,6059
274
+ codex_autorunner/surfaces/web/middleware.py,sha256=4mh4EikDLWWByLx3O5nQvMcqHOUFpORrNSWagHWLweE,21455
275
+ codex_autorunner/surfaces/web/pty_session.py,sha256=K1_hJFYy-xh90o1hDezmsC3euP7ifsgHMzAg1E9HZA8,12791
276
+ codex_autorunner/surfaces/web/review.py,sha256=70KXs1-b15f1CXuRfWHgHpriHzcyPbpMkEFY25AOzNo,166
277
+ codex_autorunner/surfaces/web/runner_manager.py,sha256=V1oA0e8qFpVz1wNGr-67lEMoe4jTo5x7DULgOrp2bx8,665
278
+ codex_autorunner/surfaces/web/schemas.py,sha256=Py7hljRZ_e8epRFbfc7-GNie9sYV2KgkYAxJP126v4k,10711
279
+ codex_autorunner/surfaces/web/static_assets.py,sha256=Mo0FJ0ALM-NlUpkWJIMKC2Vq5JX6ZeOe3w_h_VK5uys,15178
280
+ codex_autorunner/surfaces/web/static_refresh.py,sha256=Rv40lPd3eRDqcwnF6CXlwRaV5kNPkcXund7zjY7YqGM,3145
281
+ codex_autorunner/surfaces/web/terminal_sessions.py,sha256=uol4tWorQ-EcJHLWNS6MQb8otpGFR1CaXuzutGMOgO0,2651
282
+ codex_autorunner/surfaces/web/routes/__init__.py,sha256=laWu7u2pF5Xelmsaap-WVMCYj4puekaI-xCqpEiv-RI,3154
283
+ codex_autorunner/surfaces/web/routes/agents.py,sha256=w3yC3KxNMy16015YFS9FNRLLiIq9CvFM7culln7ByqA,5541
284
+ codex_autorunner/surfaces/web/routes/analytics.py,sha256=1P4TP_icwWYY2ddLYHaCTTxgkc_1QrRch12nakOtCrY,10140
285
+ codex_autorunner/surfaces/web/routes/app_server.py,sha256=vPy0nsw7wqQpK_4Iquffa6Aox4ksuyBx1hHfvrek040,5351
286
+ codex_autorunner/surfaces/web/routes/archive.py,sha256=IjYtIi0P_WucFxppoqRLnSuFaFcclSKx9kiDnAbJ5vU,12514
287
+ codex_autorunner/surfaces/web/routes/base.py,sha256=JV8kpXuaPkoJh9DBq--k9CdEM2VZwqfBDTEUE8EqGRg,26662
288
+ codex_autorunner/surfaces/web/routes/file_chat.py,sha256=IVvG5TmeTruY4Geo6qMZV1P3U5xIiXCTvQ-tFs565XQ,41880
289
+ codex_autorunner/surfaces/web/routes/filebox.py,sha256=HdRRAjh80o4IfDkUbsuPUXflQ96fcJ6KBDQHmq42mcA,8084
290
+ codex_autorunner/surfaces/web/routes/flows.py,sha256=C9SpQwmnVb5t3xfxluNTrhG1fHlUkRTrV-evzxptUB4,50327
291
+ codex_autorunner/surfaces/web/routes/messages.py,sha256=XEIH24jfHUN3e00hopDmiXnADLo0h6Shw9Ie-nHAdPs,18070
292
+ codex_autorunner/surfaces/web/routes/pma.py,sha256=1hLNmFkSWbZxhVMkf-IUAs0AhoajUVLW-z1j7S4mbGU,65690
293
+ codex_autorunner/surfaces/web/routes/repos.py,sha256=peJku6GMqMuF4mHVo-jC8cooeIRbNDpW5Hd_caGqmYs,8000
294
+ codex_autorunner/surfaces/web/routes/review.py,sha256=kFUxZ27PSc89VR1V4-2m6iyL5EbTJ5TV60WmAnKKccY,5510
295
+ codex_autorunner/surfaces/web/routes/sessions.py,sha256=TdUdMFp8AWJJ2GQpNUvHN9SJ2kFTpTFFITWWXmKcixA,6535
296
+ codex_autorunner/surfaces/web/routes/settings.py,sha256=uqSGmXp_jdrKnwMsJ_hYp18beTzKQULeTNE5nicAXVk,7347
297
+ codex_autorunner/surfaces/web/routes/shared.py,sha256=y3svPKfYPaCiY66VHdVj_AoqfefIBRjZNmT34I4mfzs,8988
298
+ codex_autorunner/surfaces/web/routes/system.py,sha256=fvU-5umRh8bxgdiNmfs_5ObUGibMLHqDQpvasU-0m80,7580
299
+ codex_autorunner/surfaces/web/routes/templates.py,sha256=43lGtI9vRS6zQV3Ioung_zojaLvLDEIopuUQZaJE0mY,21760
300
+ codex_autorunner/surfaces/web/routes/terminal_images.py,sha256=0wNAIHRcN_iIzeXuVN6nqe9E7OYEoQ6C84Tcx93r1XI,3299
301
+ codex_autorunner/surfaces/web/routes/usage.py,sha256=p4olpgUXSbV7Nn4DQPZPYCxPNzmFQdC_5gUYUSPMJuU,2737
302
+ codex_autorunner/surfaces/web/routes/voice.py,sha256=sfws5BPrz9GWH_CEqrtNgO0H4wV1Ys-FNQSH5okQ_os,4858
303
+ codex_autorunner/surfaces/web/routes/workspace.py,sha256=nbBUXX35h6QI0HkC0SLliDj1v43pKFBoWsqojylg0lA,11258
304
+ codex_autorunner/tickets/__init__.py,sha256=2_OD0c3RHdRgCoi-T5Xacw9_gKqu5BBbUxQRMTZgsNw,607
305
+ codex_autorunner/tickets/agent_pool.py,sha256=wweHSG6_LDYRDdlLbTt-y-HlyKOs22Ycz9nOxlpRLH4,17617
306
+ codex_autorunner/tickets/files.py,sha256=DQDa4A9o_QRgAJ7P2MHB1jTdLlosr-XlJ5x8D0y-vQY,3303
307
+ codex_autorunner/tickets/frontmatter.py,sha256=zsv6Y-csjpL_jtzNPk3d34oOqrg-6EjnAlN98BEtF_g,1547
308
+ codex_autorunner/tickets/lint.py,sha256=RFwVqodHaq7PO-PSWw-XUhtqABgFupQXO4W9ggdeOTE,4462
309
+ codex_autorunner/tickets/models.py,sha256=X8zmzWjRhJyBrSMzUca-4lH3H-4JjL5159bfIjfsJ4c,2854
310
+ codex_autorunner/tickets/outbox.py,sha256=uUI_EkNiqs9lm9lSwSViPKAR8xSCHMFMN0CL-cOEmIY,8179
311
+ codex_autorunner/tickets/replies.py,sha256=R_eeg55s8dQ4VBcIpjPI1up4jCQvG8l_c0uV4LUa5Gs,4841
312
+ codex_autorunner/tickets/runner.py,sha256=1pvA6WBDOUOo35SaqqBNEn1gbBxWzoxjHRUywgjF-4o,47725
313
+ codex_autorunner/tickets/spec_ingest.py,sha256=PmCYdGFeKVN6C9tae3j1zt8WXvISunlFpVHimycaMpo,2507
314
+ codex_autorunner/voice/__init__.py,sha256=Z2ziy5TP4NCgNi4xld1FfRIbSJL9hpgkggYhbEtGOgQ,991
315
+ codex_autorunner/voice/capture.py,sha256=UzvQvu3KaKpL4RoyXT-mq24uohAXvHIZ8vi6wObEJgQ,11435
316
+ codex_autorunner/voice/config.py,sha256=BZAq90KS6aLLFto653a-PYj8Aq6b5Ty_UBBFhcrzvw0,6285
317
+ codex_autorunner/voice/provider.py,sha256=zvNVuvsrZfM4bj3N2xzEgTtQ78YGWcdjUW9fJK6Ziog,1750
318
+ codex_autorunner/voice/resolver.py,sha256=EC1AtmIrwRQBQE_hwreLgKhUtvzZ9Tg5vu8_MNIXES4,1130
319
+ codex_autorunner/voice/service.py,sha256=_kVyuB_3928BbGHrAqF28N_nCfKPLB6K9ilG79wyzl0,9052
320
+ codex_autorunner/voice/providers/__init__.py,sha256=L37XCpAHluK83m62y0_I0KGkiCdu1Keml02gS_g2Brc,200
321
+ codex_autorunner/voice/providers/openai_whisper.py,sha256=HCK_GMmYFoZ4EcneGsjr4_P9JzblRO8AOguVD5pOcLk,11973
322
+ codex_autorunner/web/__init__.py,sha256=wKC_eHatQaY4LdIYJzywiFdtNwOOghbKfsdRZdf5DBY,200
323
+ codex_autorunner/web/app.py,sha256=GY2v8xP1zW9HXnbePvZVruNy2Kntk6WW2Bu0QCCwdN4,92
324
+ codex_autorunner/web/hub_jobs.py,sha256=gxWUcENl_wlG6rytQoeEH-4wU4jxqCEQ6elsNFuXQzc,101
325
+ codex_autorunner/web/middleware.py,sha256=h2cXCErMuMdalnVj22N0cXSjY2y-7L4f8xj8B-v3I80,106
326
+ codex_autorunner/web/pty_session.py,sha256=yLzWXYS7J76VwUEIyvisUezaa3s0CJZ-7JWmrCUClZs,108
327
+ codex_autorunner/web/runner_manager.py,sha256=semh-u1DoOb84o6PVw3vFWWfrjPo4pSecFdAwSa5X_w,114
328
+ codex_autorunner/web/schemas.py,sha256=n-44_A8E-WgYg1c0IUm2wZRtfEUs7NwTiC4ZF__XbO8,99
329
+ codex_autorunner/web/static_assets.py,sha256=zvZ9Pr1YETsWfEkHi4zdOS_-2AD4aSvgmaNA5zc6UNc,160
330
+ codex_autorunner/web/static_refresh.py,sha256=4QY5FK5T8ymsBIuSeuLWcx9yXL8LyO4Usc7Rhjs3N4Q,114
331
+ codex_autorunner/web/terminal_sessions.py,sha256=8Pa4gKd-ZUjwqEDUInAgEPRP14CouBEZqgvXRKzNjEg,119
332
+ codex_autorunner/workspace/__init__.py,sha256=yTql6_7BVZG0tirPMhbmMEVkk_j7Q8Wvb89eIZ0K7o8,977
333
+ codex_autorunner/workspace/paths.py,sha256=mScZQpKPyFYvxEmyr_51PfWP_7aTAWkRT4AZWqGnME4,10785
334
+ codex_autorunner-1.2.0.dist-info/licenses/LICENSE,sha256=gfYghezUeimFKy0hTmkOiAAwBY_QdRSXDTypbMtZU0k,1068
335
+ codex_autorunner-1.2.0.dist-info/METADATA,sha256=1xmI7p6haabEJXOlVpgH2_gTx3W2gjNBON_RK2CW5Bo,8914
336
+ codex_autorunner-1.2.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
337
+ codex_autorunner-1.2.0.dist-info/entry_points.txt,sha256=iPTzENG1MGBhxWF4x8W7VWk3iq4XurmGXMnIch7AVTs,93
338
+ codex_autorunner-1.2.0.dist-info/top_level.txt,sha256=fc2h9rEENr-ZdyLemPJbMcWmsWlz4JuyD1UOkPLLVSQ,17
339
+ codex_autorunner-1.2.0.dist-info/RECORD,,