codex-autorunner 0.1.2__py3-none-any.whl → 1.1.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 (276) hide show
  1. codex_autorunner/__init__.py +12 -1
  2. codex_autorunner/__main__.py +4 -0
  3. codex_autorunner/agents/codex/harness.py +1 -1
  4. codex_autorunner/agents/opencode/client.py +68 -35
  5. codex_autorunner/agents/opencode/constants.py +3 -0
  6. codex_autorunner/agents/opencode/harness.py +6 -1
  7. codex_autorunner/agents/opencode/logging.py +21 -5
  8. codex_autorunner/agents/opencode/run_prompt.py +1 -0
  9. codex_autorunner/agents/opencode/runtime.py +176 -47
  10. codex_autorunner/agents/opencode/supervisor.py +36 -48
  11. codex_autorunner/agents/registry.py +155 -8
  12. codex_autorunner/api.py +25 -0
  13. codex_autorunner/bootstrap.py +22 -37
  14. codex_autorunner/cli.py +5 -1156
  15. codex_autorunner/codex_cli.py +20 -84
  16. codex_autorunner/core/__init__.py +4 -0
  17. codex_autorunner/core/about_car.py +49 -32
  18. codex_autorunner/core/adapter_utils.py +21 -0
  19. codex_autorunner/core/app_server_ids.py +59 -0
  20. codex_autorunner/core/app_server_logging.py +7 -3
  21. codex_autorunner/core/app_server_prompts.py +27 -260
  22. codex_autorunner/core/app_server_threads.py +26 -28
  23. codex_autorunner/core/app_server_utils.py +165 -0
  24. codex_autorunner/core/archive.py +349 -0
  25. codex_autorunner/core/codex_runner.py +12 -2
  26. codex_autorunner/core/config.py +587 -103
  27. codex_autorunner/core/docs.py +10 -2
  28. codex_autorunner/core/drafts.py +136 -0
  29. codex_autorunner/core/engine.py +1531 -866
  30. codex_autorunner/core/exceptions.py +4 -0
  31. codex_autorunner/core/flows/__init__.py +25 -0
  32. codex_autorunner/core/flows/controller.py +202 -0
  33. codex_autorunner/core/flows/definition.py +82 -0
  34. codex_autorunner/core/flows/models.py +88 -0
  35. codex_autorunner/core/flows/reasons.py +52 -0
  36. codex_autorunner/core/flows/reconciler.py +131 -0
  37. codex_autorunner/core/flows/runtime.py +382 -0
  38. codex_autorunner/core/flows/store.py +568 -0
  39. codex_autorunner/core/flows/transition.py +138 -0
  40. codex_autorunner/core/flows/ux_helpers.py +257 -0
  41. codex_autorunner/core/flows/worker_process.py +242 -0
  42. codex_autorunner/core/git_utils.py +62 -0
  43. codex_autorunner/core/hub.py +136 -16
  44. codex_autorunner/core/locks.py +4 -0
  45. codex_autorunner/core/notifications.py +14 -2
  46. codex_autorunner/core/ports/__init__.py +28 -0
  47. codex_autorunner/core/ports/agent_backend.py +150 -0
  48. codex_autorunner/core/ports/backend_orchestrator.py +41 -0
  49. codex_autorunner/core/ports/run_event.py +91 -0
  50. codex_autorunner/core/prompt.py +15 -7
  51. codex_autorunner/core/redaction.py +29 -0
  52. codex_autorunner/core/review_context.py +5 -8
  53. codex_autorunner/core/run_index.py +6 -0
  54. codex_autorunner/core/runner_process.py +5 -2
  55. codex_autorunner/core/state.py +0 -88
  56. codex_autorunner/core/state_roots.py +57 -0
  57. codex_autorunner/core/supervisor_protocol.py +15 -0
  58. codex_autorunner/core/supervisor_utils.py +67 -0
  59. codex_autorunner/core/text_delta_coalescer.py +54 -0
  60. codex_autorunner/core/ticket_linter_cli.py +201 -0
  61. codex_autorunner/core/ticket_manager_cli.py +432 -0
  62. codex_autorunner/core/update.py +24 -16
  63. codex_autorunner/core/update_paths.py +28 -0
  64. codex_autorunner/core/update_runner.py +2 -0
  65. codex_autorunner/core/usage.py +164 -12
  66. codex_autorunner/core/utils.py +120 -11
  67. codex_autorunner/discovery.py +2 -4
  68. codex_autorunner/flows/review/__init__.py +17 -0
  69. codex_autorunner/{core/review.py → flows/review/service.py} +15 -10
  70. codex_autorunner/flows/ticket_flow/__init__.py +3 -0
  71. codex_autorunner/flows/ticket_flow/definition.py +98 -0
  72. codex_autorunner/integrations/agents/__init__.py +17 -0
  73. codex_autorunner/integrations/agents/backend_orchestrator.py +284 -0
  74. codex_autorunner/integrations/agents/codex_adapter.py +90 -0
  75. codex_autorunner/integrations/agents/codex_backend.py +448 -0
  76. codex_autorunner/integrations/agents/opencode_adapter.py +108 -0
  77. codex_autorunner/integrations/agents/opencode_backend.py +598 -0
  78. codex_autorunner/integrations/agents/runner.py +91 -0
  79. codex_autorunner/integrations/agents/wiring.py +271 -0
  80. codex_autorunner/integrations/app_server/client.py +583 -152
  81. codex_autorunner/integrations/app_server/env.py +2 -107
  82. codex_autorunner/{core/app_server_events.py → integrations/app_server/event_buffer.py} +15 -8
  83. codex_autorunner/integrations/app_server/supervisor.py +59 -33
  84. codex_autorunner/integrations/telegram/adapter.py +204 -165
  85. codex_autorunner/integrations/telegram/api_schemas.py +120 -0
  86. codex_autorunner/integrations/telegram/config.py +221 -0
  87. codex_autorunner/integrations/telegram/constants.py +17 -2
  88. codex_autorunner/integrations/telegram/dispatch.py +17 -0
  89. codex_autorunner/integrations/telegram/doctor.py +47 -0
  90. codex_autorunner/integrations/telegram/handlers/callbacks.py +7 -4
  91. codex_autorunner/integrations/telegram/handlers/commands/__init__.py +2 -0
  92. codex_autorunner/integrations/telegram/handlers/commands/execution.py +53 -57
  93. codex_autorunner/integrations/telegram/handlers/commands/files.py +2 -6
  94. codex_autorunner/integrations/telegram/handlers/commands/flows.py +1364 -0
  95. codex_autorunner/integrations/telegram/handlers/commands/formatting.py +1 -1
  96. codex_autorunner/integrations/telegram/handlers/commands/github.py +41 -582
  97. codex_autorunner/integrations/telegram/handlers/commands/workspace.py +8 -8
  98. codex_autorunner/integrations/telegram/handlers/commands_runtime.py +137 -478
  99. codex_autorunner/integrations/telegram/handlers/commands_spec.py +17 -4
  100. codex_autorunner/integrations/telegram/handlers/messages.py +121 -9
  101. codex_autorunner/integrations/telegram/handlers/selections.py +61 -1
  102. codex_autorunner/integrations/telegram/helpers.py +111 -16
  103. codex_autorunner/integrations/telegram/outbox.py +208 -37
  104. codex_autorunner/integrations/telegram/progress_stream.py +3 -10
  105. codex_autorunner/integrations/telegram/service.py +221 -42
  106. codex_autorunner/integrations/telegram/state.py +100 -2
  107. codex_autorunner/integrations/telegram/ticket_flow_bridge.py +611 -0
  108. codex_autorunner/integrations/telegram/transport.py +39 -4
  109. codex_autorunner/integrations/telegram/trigger_mode.py +53 -0
  110. codex_autorunner/manifest.py +2 -0
  111. codex_autorunner/plugin_api.py +22 -0
  112. codex_autorunner/routes/__init__.py +37 -67
  113. codex_autorunner/routes/agents.py +2 -137
  114. codex_autorunner/routes/analytics.py +3 -0
  115. codex_autorunner/routes/app_server.py +2 -131
  116. codex_autorunner/routes/base.py +2 -624
  117. codex_autorunner/routes/file_chat.py +7 -0
  118. codex_autorunner/routes/flows.py +7 -0
  119. codex_autorunner/routes/messages.py +7 -0
  120. codex_autorunner/routes/repos.py +2 -196
  121. codex_autorunner/routes/review.py +2 -147
  122. codex_autorunner/routes/sessions.py +2 -175
  123. codex_autorunner/routes/settings.py +2 -168
  124. codex_autorunner/routes/shared.py +2 -275
  125. codex_autorunner/routes/system.py +4 -188
  126. codex_autorunner/routes/usage.py +3 -0
  127. codex_autorunner/routes/voice.py +2 -119
  128. codex_autorunner/routes/workspace.py +3 -0
  129. codex_autorunner/server.py +3 -2
  130. codex_autorunner/static/agentControls.js +41 -11
  131. codex_autorunner/static/agentEvents.js +248 -0
  132. codex_autorunner/static/app.js +35 -24
  133. codex_autorunner/static/archive.js +826 -0
  134. codex_autorunner/static/archiveApi.js +37 -0
  135. codex_autorunner/static/autoRefresh.js +36 -8
  136. codex_autorunner/static/bootstrap.js +1 -0
  137. codex_autorunner/static/bus.js +1 -0
  138. codex_autorunner/static/cache.js +1 -0
  139. codex_autorunner/static/constants.js +20 -4
  140. codex_autorunner/static/dashboard.js +344 -325
  141. codex_autorunner/static/diffRenderer.js +37 -0
  142. codex_autorunner/static/docChatCore.js +324 -0
  143. codex_autorunner/static/docChatStorage.js +65 -0
  144. codex_autorunner/static/docChatVoice.js +65 -0
  145. codex_autorunner/static/docEditor.js +133 -0
  146. codex_autorunner/static/env.js +1 -0
  147. codex_autorunner/static/eventSummarizer.js +166 -0
  148. codex_autorunner/static/fileChat.js +182 -0
  149. codex_autorunner/static/health.js +155 -0
  150. codex_autorunner/static/hub.js +126 -185
  151. codex_autorunner/static/index.html +839 -863
  152. codex_autorunner/static/liveUpdates.js +1 -0
  153. codex_autorunner/static/loader.js +1 -0
  154. codex_autorunner/static/messages.js +873 -0
  155. codex_autorunner/static/mobileCompact.js +2 -1
  156. codex_autorunner/static/preserve.js +17 -0
  157. codex_autorunner/static/settings.js +149 -217
  158. codex_autorunner/static/smartRefresh.js +52 -0
  159. codex_autorunner/static/styles.css +8850 -3876
  160. codex_autorunner/static/tabs.js +175 -11
  161. codex_autorunner/static/terminal.js +32 -0
  162. codex_autorunner/static/terminalManager.js +34 -59
  163. codex_autorunner/static/ticketChatActions.js +333 -0
  164. codex_autorunner/static/ticketChatEvents.js +16 -0
  165. codex_autorunner/static/ticketChatStorage.js +16 -0
  166. codex_autorunner/static/ticketChatStream.js +264 -0
  167. codex_autorunner/static/ticketEditor.js +844 -0
  168. codex_autorunner/static/ticketVoice.js +9 -0
  169. codex_autorunner/static/tickets.js +1988 -0
  170. codex_autorunner/static/utils.js +43 -3
  171. codex_autorunner/static/voice.js +1 -0
  172. codex_autorunner/static/workspace.js +765 -0
  173. codex_autorunner/static/workspaceApi.js +53 -0
  174. codex_autorunner/static/workspaceFileBrowser.js +504 -0
  175. codex_autorunner/surfaces/__init__.py +5 -0
  176. codex_autorunner/surfaces/cli/__init__.py +6 -0
  177. codex_autorunner/surfaces/cli/cli.py +1224 -0
  178. codex_autorunner/surfaces/cli/codex_cli.py +20 -0
  179. codex_autorunner/surfaces/telegram/__init__.py +3 -0
  180. codex_autorunner/surfaces/web/__init__.py +1 -0
  181. codex_autorunner/surfaces/web/app.py +2019 -0
  182. codex_autorunner/surfaces/web/hub_jobs.py +192 -0
  183. codex_autorunner/surfaces/web/middleware.py +587 -0
  184. codex_autorunner/surfaces/web/pty_session.py +370 -0
  185. codex_autorunner/surfaces/web/review.py +6 -0
  186. codex_autorunner/surfaces/web/routes/__init__.py +78 -0
  187. codex_autorunner/surfaces/web/routes/agents.py +138 -0
  188. codex_autorunner/surfaces/web/routes/analytics.py +277 -0
  189. codex_autorunner/surfaces/web/routes/app_server.py +132 -0
  190. codex_autorunner/surfaces/web/routes/archive.py +357 -0
  191. codex_autorunner/surfaces/web/routes/base.py +615 -0
  192. codex_autorunner/surfaces/web/routes/file_chat.py +836 -0
  193. codex_autorunner/surfaces/web/routes/flows.py +1164 -0
  194. codex_autorunner/surfaces/web/routes/messages.py +459 -0
  195. codex_autorunner/surfaces/web/routes/repos.py +197 -0
  196. codex_autorunner/surfaces/web/routes/review.py +148 -0
  197. codex_autorunner/surfaces/web/routes/sessions.py +176 -0
  198. codex_autorunner/surfaces/web/routes/settings.py +169 -0
  199. codex_autorunner/surfaces/web/routes/shared.py +280 -0
  200. codex_autorunner/surfaces/web/routes/system.py +196 -0
  201. codex_autorunner/surfaces/web/routes/usage.py +89 -0
  202. codex_autorunner/surfaces/web/routes/voice.py +120 -0
  203. codex_autorunner/surfaces/web/routes/workspace.py +271 -0
  204. codex_autorunner/surfaces/web/runner_manager.py +25 -0
  205. codex_autorunner/surfaces/web/schemas.py +417 -0
  206. codex_autorunner/surfaces/web/static_assets.py +490 -0
  207. codex_autorunner/surfaces/web/static_refresh.py +86 -0
  208. codex_autorunner/surfaces/web/terminal_sessions.py +78 -0
  209. codex_autorunner/tickets/__init__.py +27 -0
  210. codex_autorunner/tickets/agent_pool.py +399 -0
  211. codex_autorunner/tickets/files.py +89 -0
  212. codex_autorunner/tickets/frontmatter.py +55 -0
  213. codex_autorunner/tickets/lint.py +102 -0
  214. codex_autorunner/tickets/models.py +97 -0
  215. codex_autorunner/tickets/outbox.py +244 -0
  216. codex_autorunner/tickets/replies.py +179 -0
  217. codex_autorunner/tickets/runner.py +881 -0
  218. codex_autorunner/tickets/spec_ingest.py +77 -0
  219. codex_autorunner/web/__init__.py +5 -1
  220. codex_autorunner/web/app.py +2 -1771
  221. codex_autorunner/web/hub_jobs.py +2 -191
  222. codex_autorunner/web/middleware.py +2 -587
  223. codex_autorunner/web/pty_session.py +2 -369
  224. codex_autorunner/web/runner_manager.py +2 -24
  225. codex_autorunner/web/schemas.py +2 -396
  226. codex_autorunner/web/static_assets.py +4 -484
  227. codex_autorunner/web/static_refresh.py +2 -85
  228. codex_autorunner/web/terminal_sessions.py +2 -77
  229. codex_autorunner/workspace/__init__.py +40 -0
  230. codex_autorunner/workspace/paths.py +335 -0
  231. codex_autorunner-1.1.0.dist-info/METADATA +154 -0
  232. codex_autorunner-1.1.0.dist-info/RECORD +308 -0
  233. {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.1.0.dist-info}/WHEEL +1 -1
  234. codex_autorunner/agents/execution/policy.py +0 -292
  235. codex_autorunner/agents/factory.py +0 -52
  236. codex_autorunner/agents/orchestrator.py +0 -358
  237. codex_autorunner/core/doc_chat.py +0 -1446
  238. codex_autorunner/core/snapshot.py +0 -580
  239. codex_autorunner/integrations/github/chatops.py +0 -268
  240. codex_autorunner/integrations/github/pr_flow.py +0 -1314
  241. codex_autorunner/routes/docs.py +0 -381
  242. codex_autorunner/routes/github.py +0 -327
  243. codex_autorunner/routes/runs.py +0 -250
  244. codex_autorunner/spec_ingest.py +0 -812
  245. codex_autorunner/static/docChatActions.js +0 -287
  246. codex_autorunner/static/docChatEvents.js +0 -300
  247. codex_autorunner/static/docChatRender.js +0 -205
  248. codex_autorunner/static/docChatStream.js +0 -361
  249. codex_autorunner/static/docs.js +0 -20
  250. codex_autorunner/static/docsClipboard.js +0 -69
  251. codex_autorunner/static/docsCrud.js +0 -257
  252. codex_autorunner/static/docsDocUpdates.js +0 -62
  253. codex_autorunner/static/docsDrafts.js +0 -16
  254. codex_autorunner/static/docsElements.js +0 -69
  255. codex_autorunner/static/docsInit.js +0 -285
  256. codex_autorunner/static/docsParse.js +0 -160
  257. codex_autorunner/static/docsSnapshot.js +0 -87
  258. codex_autorunner/static/docsSpecIngest.js +0 -263
  259. codex_autorunner/static/docsState.js +0 -127
  260. codex_autorunner/static/docsThreadRegistry.js +0 -44
  261. codex_autorunner/static/docsUi.js +0 -153
  262. codex_autorunner/static/docsVoice.js +0 -56
  263. codex_autorunner/static/github.js +0 -504
  264. codex_autorunner/static/logs.js +0 -678
  265. codex_autorunner/static/review.js +0 -157
  266. codex_autorunner/static/runs.js +0 -418
  267. codex_autorunner/static/snapshot.js +0 -124
  268. codex_autorunner/static/state.js +0 -94
  269. codex_autorunner/static/todoPreview.js +0 -27
  270. codex_autorunner/workspace.py +0 -16
  271. codex_autorunner-0.1.2.dist-info/METADATA +0 -249
  272. codex_autorunner-0.1.2.dist-info/RECORD +0 -222
  273. /codex_autorunner/{routes → surfaces/web/routes}/terminal_images.py +0 -0
  274. {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.1.0.dist-info}/entry_points.txt +0 -0
  275. {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.1.0.dist-info}/licenses/LICENSE +0 -0
  276. {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.1.0.dist-info}/top_level.txt +0 -0
@@ -1,94 +0,0 @@
1
- import { api, confirmModal, flash, streamEvents } from "./utils.js";
2
- import { publish } from "./bus.js";
3
- import { CONSTANTS } from "./constants.js";
4
- let stopStateStream = null;
5
- export async function loadState({ notify = true } = {}) {
6
- try {
7
- const data = await api(CONSTANTS.API.STATE_ENDPOINT);
8
- publish("state:update", data);
9
- return data;
10
- }
11
- catch (err) {
12
- if (notify)
13
- flash(err.message);
14
- publish("state:error", err);
15
- throw err;
16
- }
17
- }
18
- export function startStatePolling() {
19
- if (stopStateStream)
20
- return stopStateStream;
21
- let active = true;
22
- let cancelStream = null;
23
- const connect = () => {
24
- if (!active)
25
- return;
26
- loadState({ notify: false }).catch(() => { });
27
- cancelStream = streamEvents("/api/state/stream", {
28
- onMessage: (data, event) => {
29
- if (event && event !== "message")
30
- return;
31
- try {
32
- const state = JSON.parse(data);
33
- publish("state:update", state);
34
- }
35
- catch (e) {
36
- console.error("Bad state payload", e);
37
- }
38
- },
39
- onFinish: () => {
40
- if (active) {
41
- setTimeout(connect, 2000);
42
- }
43
- },
44
- });
45
- };
46
- connect();
47
- stopStateStream = () => {
48
- active = false;
49
- if (cancelStream)
50
- cancelStream();
51
- stopStateStream = null;
52
- };
53
- return stopStateStream;
54
- }
55
- async function runAction(path, body, successMessage) {
56
- await api(path, { method: "POST", body });
57
- if (successMessage)
58
- flash(successMessage);
59
- await loadState({ notify: false });
60
- }
61
- export function startRun(once = false, overrides = {}) {
62
- const body = { once };
63
- if (Object.prototype.hasOwnProperty.call(overrides, "agent")) {
64
- body.agent = overrides.agent;
65
- }
66
- if (Object.prototype.hasOwnProperty.call(overrides, "model")) {
67
- body.model = overrides.model;
68
- }
69
- if (Object.prototype.hasOwnProperty.call(overrides, "reasoning")) {
70
- body.reasoning = overrides.reasoning;
71
- }
72
- return runAction("/api/run/start", body, once ? "Started one-off run" : "Runner starting");
73
- }
74
- export function stopRun() {
75
- return runAction("/api/run/stop", null, "Stop signal sent");
76
- }
77
- export function resumeRun() {
78
- return runAction("/api/run/resume", null, "Resume requested");
79
- }
80
- export async function killRun() {
81
- const confirmed = await confirmModal("Kill the runner process? This stops it immediately and may leave partial state.", { confirmText: "Kill runner", cancelText: "Cancel", danger: true });
82
- if (!confirmed)
83
- return null;
84
- return runAction("/api/run/kill", null, "Kill signal sent");
85
- }
86
- export function resetRun() {
87
- return runAction("/api/run/reset", null, "Runner reset complete");
88
- }
89
- export async function clearLock() {
90
- const confirmed = await confirmModal("Clear a stale autorunner lock? This will only succeed if the lock looks safe to remove.", { confirmText: "Clear lock", cancelText: "Cancel", danger: true });
91
- if (!confirmed)
92
- return null;
93
- return runAction("/api/run/clear-lock", null, "Cleared stale lock");
94
- }
@@ -1,27 +0,0 @@
1
- export function renderTodoPreview(text) {
2
- const list = document.getElementById("todo-preview-list");
3
- if (!list)
4
- return;
5
- list.innerHTML = "";
6
- const lines = (text || "").split("\n").map((l) => l.trim());
7
- const todos = lines.filter((l) => l.startsWith("- ["));
8
- if (todos.length === 0) {
9
- const li = document.createElement("li");
10
- li.textContent = "No TODO items found.";
11
- list.appendChild(li);
12
- return;
13
- }
14
- todos.forEach((line) => {
15
- const li = document.createElement("li");
16
- const box = document.createElement("div");
17
- box.className = "box";
18
- const done = line.toLowerCase().startsWith("- [x]");
19
- if (done)
20
- box.classList.add("done");
21
- const textSpan = document.createElement("span");
22
- textSpan.textContent = line.substring(5).trim();
23
- li.appendChild(box);
24
- li.appendChild(textSpan);
25
- list.appendChild(li);
26
- });
27
- }
@@ -1,16 +0,0 @@
1
- import hashlib
2
- from pathlib import Path
3
-
4
- from .core.utils import canonicalize_path
5
-
6
- WORKSPACE_ID_HEX_LEN = 12
7
-
8
-
9
- def canonical_workspace_root(path: Path) -> Path:
10
- return canonicalize_path(path)
11
-
12
-
13
- def workspace_id_for_path(path: Path) -> str:
14
- canonical = canonical_workspace_root(path)
15
- digest = hashlib.sha256(str(canonical).encode("utf-8")).hexdigest()
16
- return digest[:WORKSPACE_ID_HEX_LEN]
@@ -1,249 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: codex-autorunner
3
- Version: 0.1.2
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 CLI to work on large tasks via a simple loop. On each loop we feed the Codex instance the last one's final output along with core documents.
69
- 1. TODO - Tracks long-horizon tasks
70
- 2. PROGRESS - High level overview of what's been done already that may be relevant for future agents
71
- 3. OPINIONS - Guidelines for how we should approach implementation
72
- 4. SPEC - Source-of-truth requirements and scope for large features/projects
73
-
74
- ## Sneak Peak
75
- Run multiple agents on many repositories, with git worktree support
76
- ![Desktop hub](docs/screenshots/car-desktop-hub.png)
77
-
78
- See the progress of your long running tasks with a high level overview
79
- ![Desktop repo dashboard](docs/screenshots/car-desktop-repo-dashboard.png)
80
-
81
- Dive deep into specific agent execution with a rich but readable log
82
- ![Desktop logs](docs/screenshots/car-desktop-logs.png)
83
-
84
- All memory and opinions are markdown files! Edit them directly or chat with the document!
85
- ![Desktop TODO](docs/screenshots/car-desktop-todo.png)
86
-
87
- Use codex CLI directly for multi-shot problem solving or `/review`
88
- ![Desktop terminal](docs/screenshots/car-desktop-terminal.png)
89
-
90
- Mobile-first experience, code on the go with Whisper support (BYOK)
91
- ![Mobile terminal](docs/screenshots/car-mobile-terminal.png)
92
-
93
- ## What it does
94
- - Initializes a repo with Codex-friendly docs and config.
95
- - Runs Codex in a loop against the repo, streaming logs.
96
- - Tracks state, logs, and config under `.codex-autorunner/`.
97
- - Exposes a power-user HTTP API and web UI for docs, logs, runner control, and a Codex TUI terminal.
98
- - Optionally runs a Telegram bot for interactive, user-in-the-loop Codex sessions.
99
- - Generates a pasteable repo snapshot (`.codex-autorunner/SNAPSHOT.md`) for sharing with other LLM chats.
100
-
101
- CLI commands are available as `codex-autorunner` or the shorter `car`.
102
-
103
- ## Install
104
- PyPI (pipx):
105
- ```
106
- pipx install codex-autorunner
107
- ```
108
-
109
- GitHub (pipx, dev):
110
- ```
111
- pipx install git+https://github.com/Git-on-my-level/codex-autorunner.git
112
- ```
113
-
114
- From source (editable):
115
- ```
116
- git clone https://github.com/Git-on-my-level/codex-autorunner.git
117
- cd codex-autorunner
118
- pip install -e .
119
- ```
120
-
121
- ### Optional extras
122
- - Telegram bot support: `pip install codex-autorunner[telegram]`
123
- - Voice transcription support: `pip install codex-autorunner[voice]`
124
- - Dev tools (lint/test): `pip install codex-autorunner[dev]`
125
- - Local dev alternative: `pip install -e .[extra]`
126
-
127
- ## Dev setup
128
- - `make setup` creates `.venv`, installs `.[dev]`, runs `pnpm install`, and sets `core.hooksPath` to `.githooks`.
129
-
130
- ### Opinionated setup (macOS headless hub at `~/car-workspace`)
131
- - 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`.
132
- - Create/update the launchd agent plist and (re)load it: `scripts/launchd-hub.sh` (or `make launchd-hub`).
133
- - Linux users: see `docs/ops/systemd.md` for systemd hub/Telegram setup.
134
- - Manual path if you prefer:
135
- - `pipx install .`
136
- - `car init --mode hub --path ~/car-workspace`
137
- - 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`.
138
- - 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).
139
-
140
- #### Refresh a launchd hub to the current branch
141
- When you change code in this repo and want the launchd-managed hub to run it:
142
- 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:
143
- ```
144
- make refresh-launchd
145
- ```
146
-
147
- 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.
148
-
149
- 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):
150
- ```
151
- $HOME/.local/pipx/venvs/codex-autorunner/bin/python -m pip install --force-reinstall /path/to/your/codex-autorunner
152
- ```
153
- 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`):
154
- ```
155
- launchctl unload ~/Library/LaunchAgents/com.codex.autorunner.plist 2>/dev/null || true
156
- launchctl load -w ~/Library/LaunchAgents/com.codex.autorunner.plist
157
- launchctl kickstart -k gui/$(id -u)/com.codex.autorunner
158
- ```
159
- 4) Tail the hub log to confirm it booted: `tail -n 50 ~/car-workspace/.codex-autorunner/codex-autorunner-hub.log`.
160
-
161
- #### Health checks (recommended)
162
- - `GET /health` returns 200 (verifies static assets are present).
163
- - `GET /static/app.js` returns 200.
164
- - Optional: `GET /` returns HTML (not a JSON error).
165
- If you set a base path, prefix all checks with it.
166
-
167
- ## Quick start
168
- 1) Install (editable): `pip install -e .`
169
- 2) Initialize (hub + repo): `codex-autorunner init --git-init` (or `car init --git-init` if you prefer short). This creates the hub config at `.codex-autorunner/config.yml`, plus state/log files and the docs under `.codex-autorunner/`.
170
- 3) Run once: `codex-autorunner once` / `car once`
171
- 4) Continuous loop: `codex-autorunner run` / `car run`
172
- 5) If stuck: `codex-autorunner kill` then `codex-autorunner resume` (or the `car` equivalents)
173
- 6) Check status/logs: `codex-autorunner status`, `codex-autorunner log --tail 200` (or `car ...`)
174
-
175
- ## Configuration
176
- - Root defaults live in `codex-autorunner.yml` (committed).
177
- - Local overrides live in `codex-autorunner.override.yml` (gitignored). Use it for machine-specific tweaks; keep secrets in env vars.
178
- - Hub config lives at `.codex-autorunner/config.yml` (generated). It includes `repo_defaults` for all repos.
179
- - Repo overrides are optional; add `.codex-autorunner/repo.override.yml` to override hub defaults for a specific repo.
180
-
181
- ## Interfaces
182
-
183
- CAR supports two interfaces with the same core engine. The web UI is the power
184
- user control plane for multi-repo visibility and system control. The Telegram
185
- bot is optimized for interactive back-and-forth, mirroring the Codex TUI
186
- experience inside Telegram with user-in-the-loop approvals.
187
-
188
- ### Web UI (control plane)
189
- 1) Ensure the hub is initialized (`codex-autorunner init`) so `.codex-autorunner/config.yml` exists.
190
- 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`.
191
- 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).
192
- - 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`.
193
- - 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.
194
- - 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).
195
- - 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.
196
-
197
- ### Telegram bot (interactive sessions)
198
- - The interactive Telegram bot is separate from `notifications.telegram` (which is one-way notifications).
199
- - Each operator should create their own Telegram bot token. Multi-user use requires explicit allowlists.
200
- - Quickstart:
201
- 1) Set env vars: `CAR_TELEGRAM_BOT_TOKEN` (and optionally `CAR_TELEGRAM_CHAT_ID`).
202
- 2) In config, set `telegram_bot.enabled: true` and fill `allowed_user_ids` + `allowed_chat_ids`.
203
- 3) Run `car telegram start --path <repo_or_hub>`.
204
- 4) Use `/bind` (hub mode) and `/new` or `/resume` in Telegram.
205
- - How it works (high level):
206
- - The bot polls the Telegram Bot API, allowlists chat/user IDs, and routes each topic to a workspace + Codex thread.
207
- - Messages and media are forwarded to the Codex app-server, streaming responses back to Telegram.
208
- - Approvals can be requested inline, giving a hands-on, TUI-like workflow without leaving Telegram.
209
- - Details: `docs/telegram/architecture.md`, `docs/ops/telegram-bot-runbook.md`, and `docs/telegram/security.md`.
210
-
211
- ## Security and remote access
212
- - The UI/API are effectively privileged access and can execute code on your machine (terminal + runner).
213
- - Keep the server bound to `127.0.0.1` and use Tailscale (or another VPN) for remote access.
214
- - If you must expose it, set `server.auth_token_env` and also put it behind an auth-enforcing reverse proxy (basic auth/SSO).
215
- - Do not expose it publicly without protections. See `docs/web/security.md` for details.
216
-
217
- ### Auth token (optional)
218
- If you set `server.auth_token_env`, the API requires `Authorization: Bearer <token>` on every request.
219
- - Set the config: `server.auth_token_env: CAR_SERVER_TOKEN`.
220
- - Export the token before starting the server: `export CAR_SERVER_TOKEN="..."`.
221
- - 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)>`.
222
- - CLI: requests automatically attach the token from `server.auth_token_env`; if the env var is missing, CLI commands will error.
223
-
224
- ## Git hooks
225
- - Install dev tools: `pip install -e .[dev]`
226
- - Point Git to the repo hooks: `git config core.hooksPath .githooks`
227
- - The `pre-commit` hook runs `scripts/check.sh` (Black formatting check + pytest). Run it manually with `./scripts/check.sh` before committing or in CI.
228
-
229
- ## Commands (CLI)
230
- - `init` — seed config/state/docs.
231
- - `run` / `once` — run the loop (continuous or single iteration).
232
- - `resume` — clear stale lock/state and restart; `--once` for a single run.
233
- - `kill` — SIGTERM the running loop and mark state error.
234
- - `status` — show current state and outstanding TODO count.
235
- - `sessions` — list terminal sessions (server-backed when available).
236
- - `stop-session` — stop a terminal session by repo (`--repo`) or id (`--session`).
237
- - `log` — view logs (tail or specific run).
238
- - `edit` — open TODO/PROGRESS/OPINIONS/SPEC in `$EDITOR`.
239
- - `ingest-spec` — generate TODO/PROGRESS/OPINIONS from SPEC using Codex (use `--force` to overwrite).
240
- - `clear-docs` — reset TODO/PROGRESS/OPINIONS to empty templates (type CLEAR to confirm).
241
- - `snapshot` — generate/update `.codex-autorunner/SNAPSHOT.md` (incremental by default when one exists; use `--from-scratch` to regenerate).
242
- - `serve` — start the HTTP API (FastAPI) on host/port from config (defaults 127.0.0.1:4173).
243
-
244
- ## Snapshot (repo briefing)
245
- - Web UI: open the Snapshot tab. If no snapshot exists, you’ll see “Generate snapshot”; otherwise you’ll see “Update snapshot (incremental)” and “Regenerate snapshot (from scratch)”, plus “Copy to clipboard”.
246
- - CLI: `codex-autorunner snapshot` (or `car snapshot`) writes `.codex-autorunner/SNAPSHOT.md` and `.codex-autorunner/snapshot_state.json`.
247
-
248
- ## Star history
249
- [![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,222 +0,0 @@
1
- codex_autorunner/__init__.py,sha256=ckmosn6wHfU7M5zBHvBr9Vq2TH-ZYz3qrMRIyHKzcrU,111
2
- codex_autorunner/bootstrap.py,sha256=YMmbttb_sQI2eFOlcK5rNMUuGBKzw-00A7oKB4XRSgs,5477
3
- codex_autorunner/cli.py,sha256=diEYM7hbsOS1ZLBVD7P6i1AEU6IimkZeOqWF2Urc2lY,42321
4
- codex_autorunner/codex_cli.py,sha256=Uzt5I9zlsUJclQNYeMmt4q9AEGjtihln8FjljQ8-yg0,2513
5
- codex_autorunner/codex_runner.py,sha256=P0yHlZZjVYWLVH1O4b5VUwQs_mkJspPPG3-nULWt4Cw,362
6
- codex_autorunner/discovery.py,sha256=waPlKWNRgKYKAawVxTKhqE5kL7OaXpGxB_B_0VWwN20,6828
7
- codex_autorunner/housekeeping.py,sha256=1Jk3-vIDfYfXf1N63Dqz7C-i0ACGYTzRcgYHcYDjsZo,12826
8
- codex_autorunner/manifest.py,sha256=_BahkPLNNFvRqKsfBFKYT-2sOsb89Bgzo4df9aatPAM,6457
9
- codex_autorunner/server.py,sha256=B09qqzqC8kYbCGa9iGCEySS_e_nddYyeY3sMi33KOWk,376
10
- codex_autorunner/spec_ingest.py,sha256=gqCHmuVrC-iIABxxcri9cxrOi2Qy-N_idItxbTbluxw,30595
11
- codex_autorunner/workspace.py,sha256=PBm2IeR5XSG7-1UOk08TTHzKq76qFEptoROnhOM9Y_0,405
12
- codex_autorunner/agents/__init__.py,sha256=6xEQXHkZ40kHadHB9Is5fK9dGGVsgryasoRllIN8_ho,418
13
- codex_autorunner/agents/base.py,sha256=UiYYYvSYrEjTHy0tjs8O8hcTwrgMtmuyrhoVW9EkiYY,1643
14
- codex_autorunner/agents/factory.py,sha256=fo5dZCoNGzEZ1sgGS8VYc-emftVngo26Xfm567pCra0,2058
15
- codex_autorunner/agents/orchestrator.py,sha256=l5ncMbrz--Z2hqdPofcG57kDWbWlNT6vXqBEmU_0eg8,10953
16
- codex_autorunner/agents/registry.py,sha256=Q427ZkW1rnT__7nYjMS3SNShXxwcKZIUaJhc9BKcraQ,3446
17
- codex_autorunner/agents/types.py,sha256=3dzkr0Rvn2EgSiJ1k65f6MF0ZEXifGK7GhUF4Nr2GBs,727
18
- codex_autorunner/agents/codex/__init__.py,sha256=GQ9KHMVT2ggOe1jT1kHEPfJLRDzfH0doGJCNwO4a2o0,92
19
- codex_autorunner/agents/codex/harness.py,sha256=ly-KtEdd1SGJzu9bqY4BW9yCJRoGCqaX2vIfcu8n4vM,8426
20
- codex_autorunner/agents/execution/policy.py,sha256=dmwpYuAbf_sRo3g4ALkte9GhuZTeCPht5WahcQAepns,8307
21
- codex_autorunner/agents/opencode/__init__.py,sha256=nTTukw5TzOKURCTyF7CJsbx-rh-9sue79XvqsOVTTNc,478
22
- codex_autorunner/agents/opencode/agent_config.py,sha256=VO3qske0X75S8eoK6XR3NUNJq_WzGLJu1KsZdOFF-MY,2922
23
- codex_autorunner/agents/opencode/client.py,sha256=18-jorlF_oACSDxRc1i_MQy6tzx2NqbDDKAVo5waqGY,18220
24
- codex_autorunner/agents/opencode/events.py,sha256=c0OxtbfYtmYRwMyt4UOgRiAmunfT76huXBDQuybB0jg,1828
25
- codex_autorunner/agents/opencode/harness.py,sha256=0tfFWVZH2ES1SMiVVacVk3c1PGnKANvvkfL8tE8uqlA,10596
26
- codex_autorunner/agents/opencode/logging.py,sha256=QQ-rmx6ZqnIyKMAxgvoEB1O2hdfRhDQqWNcVHg8KQ_M,7654
27
- codex_autorunner/agents/opencode/run_prompt.py,sha256=IUiNc4s-aKlKQVGE3zfu5rzCIRbZkJm95Co-xag-KD4,8615
28
- codex_autorunner/agents/opencode/runtime.py,sha256=HzelqT0h4_e1dAEr83m_0CLda_-FHgaySQkkHDamPFE,57968
29
- codex_autorunner/agents/opencode/supervisor.py,sha256=Jg6uj-W7vrCh-RL_WUhVhE9Qem4zrY_8f6pO29tVVGk,18978
30
- codex_autorunner/core/__init__.py,sha256=Y_gMb4qRh0IPcHermkvGuBa0chW31hqCTZ_M_hJ901c,31
31
- codex_autorunner/core/about_car.py,sha256=hW8ulbMBCZQ3LHtMbB00nhdBr0YrS3YXU7fDMDN9GQQ,5352
32
- codex_autorunner/core/app_server_events.py,sha256=1x-ddiRo5kyFRYbFdzOe6vcgx4dCzdh18_SqGQiKIPI,6856
33
- codex_autorunner/core/app_server_logging.py,sha256=TD6qnSLMLRXpaJIiQUaDMwyBzSEiVpoDyWJKPZm2Z4s,7509
34
- codex_autorunner/core/app_server_prompts.py,sha256=EvhntNaTJ8lz_EKylBQEUhfMQbPXInhgdlNvEcfooLM,11638
35
- codex_autorunner/core/app_server_threads.py,sha256=t-INlgXQHOknlngOWGcO625FttkNbN4X0dqkUkH4BEc,6624
36
- codex_autorunner/core/circuit_breaker.py,sha256=DL8lUrZPluzvNHgCMDUJjWuYytgmVzhL30va8M3TPQ4,6205
37
- codex_autorunner/core/codex_runner.py,sha256=iWjDuu3nB8kK_9VGZ08bIkw3hTt-EXQw8SkNXp94FBg,2983
38
- codex_autorunner/core/config.py,sha256=9oGwzpqs8V7TxAZ7hheDXzYOWyCywFBwiftfokpZE_w,90688
39
- codex_autorunner/core/doc_chat.py,sha256=GdEErNM_Ix5oB8924pUTYDq5xJNYJ8TXqWDjnJgeMo4,56141
40
- codex_autorunner/core/docs.py,sha256=g654ogPFnaRYU-HVwkaQvV7c840oSYrAEFPcHaF9Zjg,3492
41
- codex_autorunner/core/engine.py,sha256=lr0H0SLGv3h6UEDXarLXwTxAbGalW4onl_L-Z81207c,101669
42
- codex_autorunner/core/exceptions.py,sha256=O1LmgvG5t70YODubg4t0xQq-JT1gyDJtnfYvNiEYfLE,1555
43
- codex_autorunner/core/git_utils.py,sha256=vLINnfCNYaZyCzJFlkn5wasTZsfAfNOM5momEIcC46M,6633
44
- codex_autorunner/core/hub.py,sha256=tURR50Z1NoOd--z7lk2BGrHNKJWwB88SfCXQMM8SF6Q,33847
45
- codex_autorunner/core/injected_context.py,sha256=HQ1VTO7E0TccBkRMQM3f0ihiGS4FNM-aCW35QX7_CXs,301
46
- codex_autorunner/core/locks.py,sha256=nVbtAPTHVov9Ii_soRN-Q1cYy1nOi9rXqLnk9lsyv0Q,8097
47
- codex_autorunner/core/logging_utils.py,sha256=fQ9rIshtE-S02-xcFJOUOAXFTrFIcv_TkHzBXU4fxHs,5063
48
- codex_autorunner/core/notifications.py,sha256=Bx-2E01vKyhxODwx2dFnmv7ns2NPKG1irdguGYx9AXU,17556
49
- codex_autorunner/core/optional_dependencies.py,sha256=sBuSnQrRhV6_JA2tVLlVnDBsED79kY81cOyWcRiynUM,1271
50
- codex_autorunner/core/patch_utils.py,sha256=H5IPB5X4EJmXw7dNV3hj6m-vV2yXNY4PMuvq12msV7o,7635
51
- codex_autorunner/core/path_utils.py,sha256=MjFTnTC-GuwR4-QS6fBJuvuicSi2E-G3Jt7KWjaFffc,3450
52
- codex_autorunner/core/prompt.py,sha256=t4l3zufoHXXA_HmLU9mOKhyoxI5VPVOsPdS2AbN6Kc0,2741
53
- codex_autorunner/core/prompts.py,sha256=LBab4SjAaAfWmWKSPkSGaCy5dWsnZr36lM3y8uFuGz4,8919
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=BJOO--fFD0L7HmGKGALXACVfTvmCiMeBesvDsi_jmSc,5090
58
- codex_autorunner/core/run_index.py,sha256=cdsBOTY78LaqxAhzU7d3lFi4YFORcY4TZOJcEwTErCo,7540
59
- codex_autorunner/core/runner_controller.py,sha256=0QfocgTIZUQ4HbUhJLtVZRyT0vxyAzdHkttG0C94w2k,7404
60
- codex_autorunner/core/runner_process.py,sha256=5Vg1NKkpk-Hev0DaEJm3MmRz3xrG2TnGa5JiK-einRY,1257
61
- codex_autorunner/core/snapshot.py,sha256=utmLMcZWheYHx6uck6sXBOrRrl8-trNeygKY8VPQvTE,18352
62
- codex_autorunner/core/sqlite_utils.py,sha256=dA_2UGXoH-TNKPeJsqrIgbRtmTdETxr6FWPM5BZm9pU,754
63
- codex_autorunner/core/state.py,sha256=9kxgS_hmkc2WrNEY6cdlECzxxoASvN_lh_t9wwB4YUk,17905
64
- codex_autorunner/core/text_delta_coalescer.py,sha256=Q1VVvWWJc7zg3RkPTIklA6ErpI74L_vQBfd5oPLkk9A,1063
65
- codex_autorunner/core/update.py,sha256=C3wpTnLBvkNBmV9O-Zfc8Msb14xmDaPLC8sHUsj-3Uo,17476
66
- codex_autorunner/core/update_runner.py,sha256=brJmOUHLPmrL-GLag8gc6tT-ucZ7TC8KY6z8q_3I7ig,1378
67
- codex_autorunner/core/usage.py,sha256=3yS50fQz_v9zWD2Gr0NudAwZSEwXqO554jKsP1ZczYE,68698
68
- codex_autorunner/core/utils.py,sha256=yStTGEHv_uDldxF9EGdcX5eu68FJtjtCKMsMWfe869E,7794
69
- codex_autorunner/integrations/__init__.py,sha256=_6PZ2Hq6DzApW4d0rrmJY05vftGmHXpHe9SOxq0J2hM,28
70
- codex_autorunner/integrations/app_server/__init__.py,sha256=Ro2hRhH9wzxQJThz1Kyo-SADxCFtyF2ZfhHNureykGk,201
71
- codex_autorunner/integrations/app_server/client.py,sha256=iAsoybT0Df4fX1Ep9Ke9teHZojp02e45Nk6Xg1CC7oI,54309
72
- codex_autorunner/integrations/app_server/env.py,sha256=nQ44YN_Q1dyAZx0DJAimXbRx9SvlLXP5NZWV53cmj9s,3372
73
- codex_autorunner/integrations/app_server/supervisor.py,sha256=tBgcigxsjK6f9SJla_AlgJti1gA00NnW9KQj6-QVulk,7858
74
- codex_autorunner/integrations/github/__init__.py,sha256=mLMQATB-B_LbgebPRCdWqUDS-cMxXfuALGh_RsWbWBk,224
75
- codex_autorunner/integrations/github/chatops.py,sha256=Qk4JjTiHqnZFw3FKuhb5LzR_O-1UOaJfZm6pwG2j0oQ,9338
76
- codex_autorunner/integrations/github/pr_flow.py,sha256=U0WJsDyvZL_nuMKEKQaCspbyjpVMzJiDM43eTAunybs,50317
77
- codex_autorunner/integrations/github/service.py,sha256=484jkhg_lnDap0jMatspuMNn04cg7uVqAG2GctF17Co,39015
78
- codex_autorunner/integrations/telegram/__init__.py,sha256=oAEE1Yb-7Ybgb79NLWqNErkSXOGBJDgcvlI7gfHlpDA,36
79
- codex_autorunner/integrations/telegram/adapter.py,sha256=sz_aoCUd8gpCu6cyCz7oUChlSxRKJlY0k0KLGOqjB_E,56668
80
- codex_autorunner/integrations/telegram/commands_registry.py,sha256=C5T6KeTUq4DmhmSe9FwNRg_kNJWKcYB4hxthVu7MbAQ,3153
81
- codex_autorunner/integrations/telegram/config.py,sha256=f64XTqVbuJFcJeNPGWWQbX3_K4Q25qdl8Euyej8pKVs,23246
82
- codex_autorunner/integrations/telegram/constants.py,sha256=RHV-MDkCuj3Sx8Bdbssbjbs1y1RBc_xAnKM4dQzB8Pc,6486
83
- codex_autorunner/integrations/telegram/dispatch.py,sha256=0xqY2s90LUKXLMcJfhta0b4267-kUsFnNxSIxRrJrSs,6303
84
- codex_autorunner/integrations/telegram/helpers.py,sha256=FZUjWgenoOufscvW2k_zS5s6ajzWr6cmojJP332dWCY,70574
85
- codex_autorunner/integrations/telegram/notifications.py,sha256=XvUdRUq5gfD9JA30PclVLrDL5Azw0Sin8Oj0i1fcVx4,23430
86
- codex_autorunner/integrations/telegram/outbox.py,sha256=5Js2Wa3m4n6gnF1xsGz3RNAZ7MmzEvqNmxO9gg9gumw,6866
87
- codex_autorunner/integrations/telegram/overflow.py,sha256=LUbPTwA2BxFV1w0sF1XAhIu_ft_eieSVYmjuftiVyO0,5384
88
- codex_autorunner/integrations/telegram/progress_stream.py,sha256=nr7c7MN9L1iBhfuli5PiiPDAtoXNxdsd5KQcANggMoA,7746
89
- codex_autorunner/integrations/telegram/rendering.py,sha256=uBhymMUQuiKJJZ0ZxSl01sC4dYFVJqoIMMMFlm1XGZc,3531
90
- codex_autorunner/integrations/telegram/retry.py,sha256=GIdMSSCVa2Sjd6-t2FC1O6AwPPSEM342rjjuI1Y7Tpk,1349
91
- codex_autorunner/integrations/telegram/runtime.py,sha256=V9P93PDl_-DrunkYYheRmvCjqNaaTwhw0D127vb0XFw,10375
92
- codex_autorunner/integrations/telegram/service.py,sha256=M1B6c3K6dfmJ5hEzIj_5buY1_SK5MPDjZBqxGqkDmrk,51041
93
- codex_autorunner/integrations/telegram/state.py,sha256=LnaD-ctOHrahtuT36bjptOKOuzIwavTx4cF_3bTfRjI,79501
94
- codex_autorunner/integrations/telegram/transport.py,sha256=-wZvnQREY-WKsTfWYt-Y1rj6FbgaB_woOKSRHws3mvA,13413
95
- codex_autorunner/integrations/telegram/types.py,sha256=SjeVaus_YtWz-06GqkSWl99cHTdu0YKd5egdlYY3tMI,1707
96
- codex_autorunner/integrations/telegram/voice.py,sha256=I3XD-Uc-egA2UVfby210-kCLhL_pBfekyaaGLf359Qs,14784
97
- codex_autorunner/integrations/telegram/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
- codex_autorunner/integrations/telegram/handlers/approvals.py,sha256=G8-FwRSyyBs9emb9eJjf4a0kD2rdqnFf25SldfHCKZ4,9365
99
- codex_autorunner/integrations/telegram/handlers/callbacks.py,sha256=bN6XudQN0ho3i7150_EWqFdV48doqBJ6vVV1sS848p0,3643
100
- codex_autorunner/integrations/telegram/handlers/commands_runtime.py,sha256=PK3xVkFkpOA9n-f5YD3jLA0efhApJPY7umFhYvDbUEQ,114477
101
- codex_autorunner/integrations/telegram/handlers/commands_spec.py,sha256=aEIvUsoM6YZq03l633uuHDrbLIGE6T4c-9qBrmT09fA,4663
102
- codex_autorunner/integrations/telegram/handlers/messages.py,sha256=Lg1jfdPQ6VKQ7Hf1r047vqWMHkgd1f6aOo_ftpPg0-w,27295
103
- codex_autorunner/integrations/telegram/handlers/questions.py,sha256=GoOZzyYPqOt9jW4T27EzjNUOQrMgf3i3F6fJ6tWILzI,15570
104
- codex_autorunner/integrations/telegram/handlers/selections.py,sha256=V0gRMc6n8aVtAhIW9QGIc3abqFN1d9UKdPli1jj3cdM,22685
105
- codex_autorunner/integrations/telegram/handlers/utils.py,sha256=T2y-2p1SNduypiNz9uq4zqRIFq47z9Lop6_s3nhUzN8,5317
106
- codex_autorunner/integrations/telegram/handlers/commands/__init__.py,sha256=MwyMNQQ3zo5Nhk87aSigHHadvPqtn2VkEbFmQp89p1o,760
107
- codex_autorunner/integrations/telegram/handlers/commands/approvals.py,sha256=uQsGQtSPjXZ5FyNldvVsZDImEI-G-YOMUwhlnth2wlc,6632
108
- codex_autorunner/integrations/telegram/handlers/commands/execution.py,sha256=oaqF7I_1iMjPjnTBWqj_ymdGCvles5P6xgFe-W3IZmI,104464
109
- codex_autorunner/integrations/telegram/handlers/commands/files.py,sha256=EZ6CSFLKsNSV6yrmD7MwPTTZJWg4OMdO6nSu94Ijk4Y,50741
110
- codex_autorunner/integrations/telegram/handlers/commands/formatting.py,sha256=xiLer6Z-OJ4EUCFdWpe9fbnJjZlejbCr8uebzn8Uhzw,3147
111
- codex_autorunner/integrations/telegram/handlers/commands/github.py,sha256=goMb8TjH4UDGQ2voIIXV-FlfgwEFLh1h1tlMn8Atc8c,89127
112
- codex_autorunner/integrations/telegram/handlers/commands/shared.py,sha256=Lam8f76yQGkTBsr0QpawOBU_eIjch8C4NzW6ifSd0sQ,6581
113
- codex_autorunner/integrations/telegram/handlers/commands/voice.py,sha256=y06N3ju4RjI1Y4r69Os-2BcR6erHjXyGOkoiLWepS0k,3955
114
- codex_autorunner/integrations/telegram/handlers/commands/workspace.py,sha256=XEtXXq8OsN-wO4UgYhMwQomZT3BHWc2zsoyBS2IMB0E,81391
115
- codex_autorunner/routes/__init__.py,sha256=qaGY5Imd62FxMUYJLqLai86Qr5zBv2Rlxy-kkCHpfkU,2270
116
- codex_autorunner/routes/agents.py,sha256=1di_lDZyjsQ4y_zNL5Nms4VDbSbG7zrn_K1BOVfkvcU,5533
117
- codex_autorunner/routes/app_server.py,sha256=OUYVzKTObaWII4I9xXhwYYLdEJ_oiYJJoHoocs7LyVc,5349
118
- codex_autorunner/routes/base.py,sha256=1ay8z9MPTn1sEdMgp6YMP5CpxA7POWY_Vs9XHYXW2yA,27499
119
- codex_autorunner/routes/docs.py,sha256=F8GVhm12xB8VE1oHwrQUTe6j422RuqQ01G3A7GSwhg4,14252
120
- codex_autorunner/routes/github.py,sha256=cjwTdVDYWg8AwuUb-CGImTkiDhDqOrehFITY05iaQ7E,12558
121
- codex_autorunner/routes/repos.py,sha256=qE_ObzKYiJap5MJyFHSoTjYzB9DnWYPWB3QiWrpDwWo,7999
122
- codex_autorunner/routes/review.py,sha256=K0g1YzEvi845QSCY8VxejZJ9mpmfOPTJ6LVWe_hBHBA,5519
123
- codex_autorunner/routes/runs.py,sha256=JrTuQnQiBaJDLoQIasXe9JBDcUEGqZ1QvrUw5kWbHt8,10601
124
- codex_autorunner/routes/sessions.py,sha256=C1FzYVC3d6U5w5vpHksjwi-O5Rk-y_hYlX5dAMM7MGw,6537
125
- codex_autorunner/routes/settings.py,sha256=f-le6apg8dtvebMs0EGgUXLWjN-gkxenr5Ahbrmoj2k,7349
126
- codex_autorunner/routes/shared.py,sha256=_UEIQrfRSpxsVz47R8EzsknNDCg5-XrTbZUz_Ah7xg0,9155
127
- codex_autorunner/routes/system.py,sha256=VARxzSFO-yn8gslqZGR-7pH4nTG6XF_yFJly9mGscmA,7316
128
- codex_autorunner/routes/terminal_images.py,sha256=0wNAIHRcN_iIzeXuVN6nqe9E7OYEoQ6C84Tcx93r1XI,3299
129
- codex_autorunner/routes/voice.py,sha256=s_eDNBc3AxjrC6cZ7IETtIb5ybkoQLCK4wjhJwDN_lc,4856
130
- codex_autorunner/static/agentControls.js,sha256=DBAmOhIhG5qBkPK6q4uNM1RP29exPY1OPGX0ksft_CU,11699
131
- codex_autorunner/static/app.js,sha256=jI2Y6u-gC3JAOstFpmo7sruculVvjP2pLyn5bckLhps,3479
132
- codex_autorunner/static/autoRefresh.js,sha256=ZrWA1WI5Tb9OQa3SO8Dij2yskrB6HLSAKh28LwYygu8,5673
133
- codex_autorunner/static/bootstrap.js,sha256=UyQ88XpNaPRzaa711Wf1NlK5UkIkV8p65CNL2E0uRKE,4771
134
- codex_autorunner/static/bus.js,sha256=3f-q0N-BP4wrsKxO-xNAeyNtq9W2Hw7MqyBApEj0rnk,568
135
- codex_autorunner/static/cache.js,sha256=kDXoFRydjyYkbin3i95fH_s0k7rgLYqciSj_4DuauNU,973
136
- codex_autorunner/static/constants.js,sha256=PZmF1Pw3KmkS-bTMrnf9W0uDuOFyVcL_YmzCwSmhGxU,1528
137
- codex_autorunner/static/dashboard.js,sha256=0z8MC-PGfmfb_ddoG46rZe4eorwVlc3rV82k7y3P0hg,29776
138
- codex_autorunner/static/docChatActions.js,sha256=_l3KK-bdTqyAUcxxIswbRB99oz2Ac7k-GxOb-Dfbvqk,9458
139
- codex_autorunner/static/docChatEvents.js,sha256=jUowaw_1qMJ9WfIrw6itaNWHI1yOhilFy7mQVA1mfsA,10797
140
- codex_autorunner/static/docChatRender.js,sha256=1bWUp0QtTuyNBW-EiYRQXZSTm0y9hL-qMRwJJ8CApOc,8371
141
- codex_autorunner/static/docChatStream.js,sha256=vBi_L2tuob38AtkrtSjwuN5QznhllwHgWvKgUf7mf-Y,13173
142
- codex_autorunner/static/docs.js,sha256=i7UsRbddYURPLu4FDgj0Pfb8jYYr88WhlmUPU43ExQ8,664
143
- codex_autorunner/static/docsClipboard.js,sha256=XQPX6Vx40PsZAxzyRknuxC15ibGhDO0x6mL5k1dghJc,2069
144
- codex_autorunner/static/docsCrud.js,sha256=aCCiFezi_fJy0EuLUI90mX6_Nw4HxcuCVKfq-v-q4Rw,8771
145
- codex_autorunner/static/docsDocUpdates.js,sha256=8tf1JXQIUxMHn94rpgSqGulIAaF9e0jP-GL0_pOWXQM,2717
146
- codex_autorunner/static/docsDrafts.js,sha256=tkl0BiwX2oQc1QEHO2zQnSvjRcG5A8bqDyevs5ZHNG4,634
147
- codex_autorunner/static/docsElements.js,sha256=ZHuwnFWpzR-uDL_52OcXSZeEYvDHT2jrwczKrjHkCx8,3691
148
- codex_autorunner/static/docsInit.js,sha256=lX8gD0Ptk0mZqdx0t-dd_b_EqOHZD3PrZiDnTmzwOmo,11376
149
- codex_autorunner/static/docsParse.js,sha256=JqzIj9n6haHrGRq8MQhXpNHvOq1X3hruDbfUgojV7iY,5532
150
- codex_autorunner/static/docsSnapshot.js,sha256=WPnAKZ8IJLDTL6qdoijqKz3pAu4jmlX0BFVPLyzcRO8,2867
151
- codex_autorunner/static/docsSpecIngest.js,sha256=fELyNYD441WYqOlVAACNorPTiTAngLHs7QsdysCAUYU,9769
152
- codex_autorunner/static/docsState.js,sha256=vaX3n8I2WtNMgNJrBEAzEb_z1DWeVjyFarWRTBte7So,3848
153
- codex_autorunner/static/docsThreadRegistry.js,sha256=yDwLESOZ-_D5MYn7KEuDbnmGEoU2rRqOYj2gqOJ_TAI,1582
154
- codex_autorunner/static/docsUi.js,sha256=tXw32uxF7k04Udpmu4CeDTIibuTW4HNmTm1w0LxOuCo,6464
155
- codex_autorunner/static/docsVoice.js,sha256=FieEbLo-dRAy_bYWKXHPwEVJnqRGBZ1H5h6ullcN6K4,1982
156
- codex_autorunner/static/env.js,sha256=U9Ws86-OkZSQnX_BZvPUZjH_2BYYb-lAUk_91UcoV50,1751
157
- codex_autorunner/static/github.js,sha256=RIHpFq_ncIzzSCJIdU8P-cfyLyYdXJ4b1iNcm8xJ4Wo,17057
158
- codex_autorunner/static/hub.js,sha256=SpBNeLGUvkaa0Gp4x71EQw3VoeZm1ek8vYr7r07okZI,51977
159
- codex_autorunner/static/index.html,sha256=777mfuky5KCAUA5UH6PSvLc0LbiFWAEJ6v-fDqKk-eo,47572
160
- codex_autorunner/static/liveUpdates.js,sha256=-qoy8EAWLpoqDWf36lPT54bOk1676FuNFGvKWhupt74,1888
161
- codex_autorunner/static/loader.js,sha256=OtZmd2f8QcbfHaxJ4km0vwWMdz0_Wf3LaNpEtqROvsI,1003
162
- codex_autorunner/static/logs.js,sha256=tLbX-s_SANcWWGvPNmp3cI7r-W0A61K6Uklyy8zweHA,25077
163
- codex_autorunner/static/mobileCompact.js,sha256=vmms8vThV8i6qciea2NcBkh9vetSDQiHuN9ei7up3cc,9375
164
- codex_autorunner/static/review.js,sha256=BoIAE77yXOTSMcSi0lZ3tzzChQVuSD6PJ8h3kHhucFI,5147
165
- codex_autorunner/static/runs.js,sha256=q19kr37afHyI8mycCu3NldJ6hrr3LlhSW-iByatguuE,14758
166
- codex_autorunner/static/settings.js,sha256=iHcfBBKxIiD68BePMftKHpG17ryN8xIZ2WExs1Zp-P4,12331
167
- codex_autorunner/static/snapshot.js,sha256=v7RuWTcfiY2uhMYPd3a_ijqKRTv7e5d_WVHcVMrt548,3511
168
- codex_autorunner/static/state.js,sha256=-MvVoPI9P8C_EPnKkmA3UbtYOumgaswhsFvPkk4mO8M,3284
169
- codex_autorunner/static/styles.css,sha256=7jvCKsyfBtho1Jouh9p_Kz5HSAUa135bmk8SdtmW9DQ,118589
170
- codex_autorunner/static/tabs.js,sha256=rc0Fh7w6YMPr-3didXemzu95kLu82lOO-DUm3_mSVIc,1454
171
- codex_autorunner/static/terminal.js,sha256=U3PPFyrkM5XxdDpNt_A_ShZlTAcK9lrNtKI78k7fk6A,310
172
- codex_autorunner/static/terminalManager.js,sha256=IeS007SjDG7QI1ifPlnXDb0pJ8L8zjkgBtsdYrHe2i0,140594
173
- codex_autorunner/static/todoPreview.js,sha256=fScVElkvFsLJPWqA0rQjNOmoVlUHAPHiVMrhO1pLksg,962
174
- codex_autorunner/static/utils.js,sha256=sL3e2g0TGylXmd148FDy-Ll_mzpCnxGnEGjX6OAPF3M,21099
175
- codex_autorunner/static/voice.js,sha256=GYkTjSpvvhI_9JXXttFn4tDRzsX4th6p8TUV6PWJRgw,20147
176
- codex_autorunner/static/vendor/LICENSE.xterm,sha256=R1kKvILKKMOnUg07hzusejoAsCy8Mik-HxQdzNJpgIc,1186
177
- codex_autorunner/static/vendor/xterm-addon-fit.js,sha256=EPMZTF8XwXhvt9XbhlweyFObZzajGAY_04var3xGhI8,1503
178
- codex_autorunner/static/vendor/xterm.css,sha256=gy8_LGA7Q61DUf8ElwFQzHqHMBQnbbEmpgZcbdgeSHI,5383
179
- codex_autorunner/static/vendor/xterm.js,sha256=8K6g919IVZATrmZDwked1zfSbaQtVSTm0rcJFa5lI8c,283404
180
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-cyrillic-ext.woff2,sha256=k0PeLKXZVJ95LnliN1r477DzIMdkO_02yIS1ow5cOW8,1664
181
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-cyrillic.woff2,sha256=SZWppDrGWewy_Ni0Y3Vc1qB7Mabms4lKahU7Zhz0kOI,8892
182
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-greek.woff2,sha256=ScPabJorJ5sPH4YPXPsfXcONiKXHvpybGDe7xOPbYRE,6800
183
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-latin-ext.woff2,sha256=nDjLLQ0tk8HubiH6eNt28T6n4V4VzGQhTHyom2qqNcQ,11596
184
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-latin.woff2,sha256=LDK5s-41jBGeIQ9vUZX5vTSJTXinhf8uldYOcY5ACvQ,31340
185
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-400-vietnamese.woff2,sha256=1E6xk2BDpWA46wLdcLJD83m-9leD-U7BLyd1UHIEEfE,5872
186
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-cyrillic-ext.woff2,sha256=k0PeLKXZVJ95LnliN1r477DzIMdkO_02yIS1ow5cOW8,1664
187
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-cyrillic.woff2,sha256=SZWppDrGWewy_Ni0Y3Vc1qB7Mabms4lKahU7Zhz0kOI,8892
188
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-greek.woff2,sha256=ScPabJorJ5sPH4YPXPsfXcONiKXHvpybGDe7xOPbYRE,6800
189
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-latin-ext.woff2,sha256=nDjLLQ0tk8HubiH6eNt28T6n4V4VzGQhTHyom2qqNcQ,11596
190
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-latin.woff2,sha256=LDK5s-41jBGeIQ9vUZX5vTSJTXinhf8uldYOcY5ACvQ,31340
191
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-500-vietnamese.woff2,sha256=1E6xk2BDpWA46wLdcLJD83m-9leD-U7BLyd1UHIEEfE,5872
192
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-cyrillic-ext.woff2,sha256=k0PeLKXZVJ95LnliN1r477DzIMdkO_02yIS1ow5cOW8,1664
193
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-cyrillic.woff2,sha256=SZWppDrGWewy_Ni0Y3Vc1qB7Mabms4lKahU7Zhz0kOI,8892
194
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-greek.woff2,sha256=ScPabJorJ5sPH4YPXPsfXcONiKXHvpybGDe7xOPbYRE,6800
195
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-latin-ext.woff2,sha256=nDjLLQ0tk8HubiH6eNt28T6n4V4VzGQhTHyom2qqNcQ,11596
196
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-latin.woff2,sha256=LDK5s-41jBGeIQ9vUZX5vTSJTXinhf8uldYOcY5ACvQ,31340
197
- codex_autorunner/static/vendor/fonts/jetbrains-mono/JetBrainsMono-600-vietnamese.woff2,sha256=1E6xk2BDpWA46wLdcLJD83m-9leD-U7BLyd1UHIEEfE,5872
198
- codex_autorunner/static/vendor/fonts/jetbrains-mono/OFL.txt,sha256=p2q_ACxJCX0UboZ0CjEFpdAEULFZLoIKEQmoxWgM1pc,4399
199
- codex_autorunner/voice/__init__.py,sha256=Z2ziy5TP4NCgNi4xld1FfRIbSJL9hpgkggYhbEtGOgQ,991
200
- codex_autorunner/voice/capture.py,sha256=UzvQvu3KaKpL4RoyXT-mq24uohAXvHIZ8vi6wObEJgQ,11435
201
- codex_autorunner/voice/config.py,sha256=BZAq90KS6aLLFto653a-PYj8Aq6b5Ty_UBBFhcrzvw0,6285
202
- codex_autorunner/voice/provider.py,sha256=zvNVuvsrZfM4bj3N2xzEgTtQ78YGWcdjUW9fJK6Ziog,1750
203
- codex_autorunner/voice/resolver.py,sha256=EC1AtmIrwRQBQE_hwreLgKhUtvzZ9Tg5vu8_MNIXES4,1130
204
- codex_autorunner/voice/service.py,sha256=_kVyuB_3928BbGHrAqF28N_nCfKPLB6K9ilG79wyzl0,9052
205
- codex_autorunner/voice/providers/__init__.py,sha256=L37XCpAHluK83m62y0_I0KGkiCdu1Keml02gS_g2Brc,200
206
- codex_autorunner/voice/providers/openai_whisper.py,sha256=HCK_GMmYFoZ4EcneGsjr4_P9JzblRO8AOguVD5pOcLk,11973
207
- codex_autorunner/web/__init__.py,sha256=fDDDTYL26__wwaWd7xtI6axymkOgYntcrlHeHptDb8I,29
208
- codex_autorunner/web/app.py,sha256=_4e-bBlW_ml0TmlZ2Js5LtBhvsIi-64KdEUJKi6uY2I,68619
209
- codex_autorunner/web/hub_jobs.py,sha256=rx4r2qFOyEwzctnabRtU1hrOwp8ETPNjarryNTE1aFg,6057
210
- codex_autorunner/web/middleware.py,sha256=lyqluvLagVsBQduhDbNmDSajFx7Hs3MwRAFXB8aduck,21461
211
- codex_autorunner/web/pty_session.py,sha256=K1_hJFYy-xh90o1hDezmsC3euP7ifsgHMzAg1E9HZA8,12791
212
- codex_autorunner/web/runner_manager.py,sha256=QCaypoNH0445bcNggpdNP-RrM0KEyxpK-LSl3AdyS64,646
213
- codex_autorunner/web/schemas.py,sha256=kPE00cFzT5unPpWHLW_p6RqBCMn5ERZNibBGKW3wwQ0,9383
214
- codex_autorunner/web/static_assets.py,sha256=ozA-Z-upneJrxXLZXyDE_mt30wJzF3PuTPTZtQaHlGE,15150
215
- codex_autorunner/web/static_refresh.py,sha256=PdJHcTJGP0cHr1FffhbIbyL6GQe_cv3jzSy4gHuDQOw,3144
216
- codex_autorunner/web/terminal_sessions.py,sha256=JHS_YsWpdQSXKIrbbkPOgugj2EdpG4RP2jl2nLizTZc,2650
217
- codex_autorunner-0.1.2.dist-info/licenses/LICENSE,sha256=gfYghezUeimFKy0hTmkOiAAwBY_QdRSXDTypbMtZU0k,1068
218
- codex_autorunner-0.1.2.dist-info/METADATA,sha256=s0YpZVM4WETn4hsslUkbL04AgBew_jOu5-t49SCh6Bg,15225
219
- codex_autorunner-0.1.2.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
220
- codex_autorunner-0.1.2.dist-info/entry_points.txt,sha256=iPTzENG1MGBhxWF4x8W7VWk3iq4XurmGXMnIch7AVTs,93
221
- codex_autorunner-0.1.2.dist-info/top_level.txt,sha256=fc2h9rEENr-ZdyLemPJbMcWmsWlz4JuyD1UOkPLLVSQ,17
222
- codex_autorunner-0.1.2.dist-info/RECORD,,