codex-autorunner 0.1.2__py3-none-any.whl → 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- codex_autorunner/__main__.py +4 -0
- codex_autorunner/agents/opencode/client.py +68 -35
- codex_autorunner/agents/opencode/logging.py +21 -5
- codex_autorunner/agents/opencode/run_prompt.py +1 -0
- codex_autorunner/agents/opencode/runtime.py +118 -30
- codex_autorunner/agents/opencode/supervisor.py +36 -48
- codex_autorunner/agents/registry.py +136 -8
- codex_autorunner/api.py +25 -0
- codex_autorunner/bootstrap.py +16 -35
- codex_autorunner/cli.py +157 -139
- codex_autorunner/core/about_car.py +44 -32
- codex_autorunner/core/adapter_utils.py +21 -0
- codex_autorunner/core/app_server_logging.py +7 -3
- codex_autorunner/core/app_server_prompts.py +27 -260
- codex_autorunner/core/app_server_threads.py +15 -26
- codex_autorunner/core/codex_runner.py +6 -0
- codex_autorunner/core/config.py +390 -100
- codex_autorunner/core/docs.py +10 -2
- codex_autorunner/core/drafts.py +82 -0
- codex_autorunner/core/engine.py +278 -262
- codex_autorunner/core/flows/__init__.py +25 -0
- codex_autorunner/core/flows/controller.py +178 -0
- codex_autorunner/core/flows/definition.py +82 -0
- codex_autorunner/core/flows/models.py +75 -0
- codex_autorunner/core/flows/runtime.py +351 -0
- codex_autorunner/core/flows/store.py +485 -0
- codex_autorunner/core/flows/transition.py +133 -0
- codex_autorunner/core/flows/worker_process.py +242 -0
- codex_autorunner/core/hub.py +15 -9
- codex_autorunner/core/locks.py +4 -0
- codex_autorunner/core/prompt.py +15 -7
- codex_autorunner/core/redaction.py +29 -0
- codex_autorunner/core/review_context.py +5 -8
- codex_autorunner/core/run_index.py +6 -0
- codex_autorunner/core/runner_process.py +5 -2
- codex_autorunner/core/state.py +0 -88
- codex_autorunner/core/static_assets.py +55 -0
- codex_autorunner/core/supervisor_utils.py +67 -0
- codex_autorunner/core/update.py +20 -11
- codex_autorunner/core/update_runner.py +2 -0
- codex_autorunner/core/utils.py +29 -2
- codex_autorunner/discovery.py +2 -4
- codex_autorunner/flows/ticket_flow/__init__.py +3 -0
- codex_autorunner/flows/ticket_flow/definition.py +91 -0
- codex_autorunner/integrations/agents/__init__.py +27 -0
- codex_autorunner/integrations/agents/agent_backend.py +142 -0
- codex_autorunner/integrations/agents/codex_backend.py +307 -0
- codex_autorunner/integrations/agents/opencode_backend.py +325 -0
- codex_autorunner/integrations/agents/run_event.py +71 -0
- codex_autorunner/integrations/app_server/client.py +576 -92
- codex_autorunner/integrations/app_server/supervisor.py +59 -33
- codex_autorunner/integrations/telegram/adapter.py +141 -167
- codex_autorunner/integrations/telegram/api_schemas.py +120 -0
- codex_autorunner/integrations/telegram/config.py +175 -0
- codex_autorunner/integrations/telegram/constants.py +16 -1
- codex_autorunner/integrations/telegram/dispatch.py +17 -0
- codex_autorunner/integrations/telegram/doctor.py +47 -0
- codex_autorunner/integrations/telegram/handlers/callbacks.py +0 -4
- codex_autorunner/integrations/telegram/handlers/commands/__init__.py +2 -0
- codex_autorunner/integrations/telegram/handlers/commands/execution.py +53 -57
- codex_autorunner/integrations/telegram/handlers/commands/files.py +2 -6
- codex_autorunner/integrations/telegram/handlers/commands/flows.py +227 -0
- codex_autorunner/integrations/telegram/handlers/commands/formatting.py +1 -1
- codex_autorunner/integrations/telegram/handlers/commands/github.py +41 -582
- codex_autorunner/integrations/telegram/handlers/commands/workspace.py +8 -8
- codex_autorunner/integrations/telegram/handlers/commands_runtime.py +133 -475
- codex_autorunner/integrations/telegram/handlers/commands_spec.py +11 -4
- codex_autorunner/integrations/telegram/handlers/messages.py +120 -9
- codex_autorunner/integrations/telegram/helpers.py +88 -16
- codex_autorunner/integrations/telegram/outbox.py +208 -37
- codex_autorunner/integrations/telegram/progress_stream.py +3 -10
- codex_autorunner/integrations/telegram/service.py +214 -40
- codex_autorunner/integrations/telegram/state.py +100 -2
- codex_autorunner/integrations/telegram/ticket_flow_bridge.py +322 -0
- codex_autorunner/integrations/telegram/transport.py +36 -3
- codex_autorunner/integrations/telegram/trigger_mode.py +53 -0
- codex_autorunner/manifest.py +2 -0
- codex_autorunner/plugin_api.py +22 -0
- codex_autorunner/routes/__init__.py +23 -14
- codex_autorunner/routes/analytics.py +239 -0
- codex_autorunner/routes/base.py +81 -109
- codex_autorunner/routes/file_chat.py +836 -0
- codex_autorunner/routes/flows.py +980 -0
- codex_autorunner/routes/messages.py +459 -0
- codex_autorunner/routes/system.py +6 -1
- codex_autorunner/routes/usage.py +87 -0
- codex_autorunner/routes/workspace.py +271 -0
- codex_autorunner/server.py +2 -1
- codex_autorunner/static/agentControls.js +1 -0
- codex_autorunner/static/agentEvents.js +248 -0
- codex_autorunner/static/app.js +25 -22
- codex_autorunner/static/autoRefresh.js +29 -1
- codex_autorunner/static/bootstrap.js +1 -0
- codex_autorunner/static/bus.js +1 -0
- codex_autorunner/static/cache.js +1 -0
- codex_autorunner/static/constants.js +20 -4
- codex_autorunner/static/dashboard.js +162 -196
- codex_autorunner/static/diffRenderer.js +37 -0
- codex_autorunner/static/docChatCore.js +324 -0
- codex_autorunner/static/docChatStorage.js +65 -0
- codex_autorunner/static/docChatVoice.js +65 -0
- codex_autorunner/static/docEditor.js +133 -0
- codex_autorunner/static/env.js +1 -0
- codex_autorunner/static/eventSummarizer.js +166 -0
- codex_autorunner/static/fileChat.js +182 -0
- codex_autorunner/static/health.js +155 -0
- codex_autorunner/static/hub.js +41 -118
- codex_autorunner/static/index.html +787 -858
- codex_autorunner/static/liveUpdates.js +1 -0
- codex_autorunner/static/loader.js +1 -0
- codex_autorunner/static/messages.js +470 -0
- codex_autorunner/static/mobileCompact.js +2 -1
- codex_autorunner/static/settings.js +24 -211
- codex_autorunner/static/styles.css +7567 -3865
- codex_autorunner/static/tabs.js +28 -5
- codex_autorunner/static/terminal.js +14 -0
- codex_autorunner/static/terminalManager.js +34 -59
- codex_autorunner/static/ticketChatActions.js +333 -0
- codex_autorunner/static/ticketChatEvents.js +16 -0
- codex_autorunner/static/ticketChatStorage.js +16 -0
- codex_autorunner/static/ticketChatStream.js +264 -0
- codex_autorunner/static/ticketEditor.js +750 -0
- codex_autorunner/static/ticketVoice.js +9 -0
- codex_autorunner/static/tickets.js +1315 -0
- codex_autorunner/static/utils.js +32 -3
- codex_autorunner/static/voice.js +1 -0
- codex_autorunner/static/workspace.js +672 -0
- codex_autorunner/static/workspaceApi.js +53 -0
- codex_autorunner/static/workspaceFileBrowser.js +504 -0
- codex_autorunner/tickets/__init__.py +20 -0
- codex_autorunner/tickets/agent_pool.py +377 -0
- codex_autorunner/tickets/files.py +85 -0
- codex_autorunner/tickets/frontmatter.py +55 -0
- codex_autorunner/tickets/lint.py +102 -0
- codex_autorunner/tickets/models.py +95 -0
- codex_autorunner/tickets/outbox.py +232 -0
- codex_autorunner/tickets/replies.py +179 -0
- codex_autorunner/tickets/runner.py +823 -0
- codex_autorunner/tickets/spec_ingest.py +77 -0
- codex_autorunner/web/app.py +269 -91
- codex_autorunner/web/middleware.py +3 -4
- codex_autorunner/web/schemas.py +89 -109
- codex_autorunner/web/static_assets.py +1 -44
- codex_autorunner/workspace/__init__.py +40 -0
- codex_autorunner/workspace/paths.py +319 -0
- {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.0.0.dist-info}/METADATA +18 -21
- codex_autorunner-1.0.0.dist-info/RECORD +251 -0
- {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.0.0.dist-info}/WHEEL +1 -1
- codex_autorunner/agents/execution/policy.py +0 -292
- codex_autorunner/agents/factory.py +0 -52
- codex_autorunner/agents/orchestrator.py +0 -358
- codex_autorunner/core/doc_chat.py +0 -1446
- codex_autorunner/core/snapshot.py +0 -580
- codex_autorunner/integrations/github/chatops.py +0 -268
- codex_autorunner/integrations/github/pr_flow.py +0 -1314
- codex_autorunner/routes/docs.py +0 -381
- codex_autorunner/routes/github.py +0 -327
- codex_autorunner/routes/runs.py +0 -250
- codex_autorunner/spec_ingest.py +0 -812
- codex_autorunner/static/docChatActions.js +0 -287
- codex_autorunner/static/docChatEvents.js +0 -300
- codex_autorunner/static/docChatRender.js +0 -205
- codex_autorunner/static/docChatStream.js +0 -361
- codex_autorunner/static/docs.js +0 -20
- codex_autorunner/static/docsClipboard.js +0 -69
- codex_autorunner/static/docsCrud.js +0 -257
- codex_autorunner/static/docsDocUpdates.js +0 -62
- codex_autorunner/static/docsDrafts.js +0 -16
- codex_autorunner/static/docsElements.js +0 -69
- codex_autorunner/static/docsInit.js +0 -285
- codex_autorunner/static/docsParse.js +0 -160
- codex_autorunner/static/docsSnapshot.js +0 -87
- codex_autorunner/static/docsSpecIngest.js +0 -263
- codex_autorunner/static/docsState.js +0 -127
- codex_autorunner/static/docsThreadRegistry.js +0 -44
- codex_autorunner/static/docsUi.js +0 -153
- codex_autorunner/static/docsVoice.js +0 -56
- codex_autorunner/static/github.js +0 -504
- codex_autorunner/static/logs.js +0 -678
- codex_autorunner/static/review.js +0 -157
- codex_autorunner/static/runs.js +0 -418
- codex_autorunner/static/snapshot.js +0 -124
- codex_autorunner/static/state.js +0 -94
- codex_autorunner/static/todoPreview.js +0 -27
- codex_autorunner/workspace.py +0 -16
- codex_autorunner-0.1.2.dist-info/RECORD +0 -222
- {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.0.0.dist-info}/entry_points.txt +0 -0
- {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.0.0.dist-info}/licenses/LICENSE +0 -0
- {codex_autorunner-0.1.2.dist-info → codex_autorunner-1.0.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-autorunner
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: Codex autorunner CLI per DESIGN-V1
|
|
5
5
|
Author: Codex
|
|
6
6
|
License: MIT License
|
|
@@ -65,11 +65,17 @@ Dynamic: license-file
|
|
|
65
65
|
# codex-autorunner
|
|
66
66
|
[](https://pypi.org/project/codex-autorunner/)
|
|
67
67
|
|
|
68
|
-
An opinionated autorunner that uses the Codex
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
An opinionated autorunner that uses the Codex app-server as the primary execution backend with OpenCode support to work on large tasks via a simple loop. On each loop we feed the Codex instance the last one's final output along with core documents.
|
|
69
|
+
|
|
70
|
+
In the current model, the primary work surface is **tickets**:
|
|
71
|
+
|
|
72
|
+
- `.codex-autorunner/tickets/TICKET-###.md`
|
|
73
|
+
|
|
74
|
+
Optionally, you can maintain lightweight **workspace docs** (auto-created on write; missing is OK):
|
|
75
|
+
|
|
76
|
+
- `.codex-autorunner/workspace/active_context.md`
|
|
77
|
+
- `.codex-autorunner/workspace/decisions.md`
|
|
78
|
+
- `.codex-autorunner/workspace/spec.md`
|
|
73
79
|
|
|
74
80
|
## Sneak Peak
|
|
75
81
|
Run multiple agents on many repositories, with git worktree support
|
|
@@ -81,8 +87,7 @@ See the progress of your long running tasks with a high level overview
|
|
|
81
87
|
Dive deep into specific agent execution with a rich but readable log
|
|
82
88
|

|
|
83
89
|
|
|
84
|
-
|
|
85
|
-

|
|
90
|
+
Tickets and workspace docs are markdown files. Edit them directly or use the web UI’s file chat to iterate with the agent.
|
|
86
91
|
|
|
87
92
|
Use codex CLI directly for multi-shot problem solving or `/review`
|
|
88
93
|

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