codex-autorunner 1.0.0__py3-none-any.whl → 1.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- codex_autorunner/__init__.py +12 -1
- codex_autorunner/agents/codex/harness.py +1 -1
- codex_autorunner/agents/opencode/client.py +113 -4
- codex_autorunner/agents/opencode/constants.py +3 -0
- codex_autorunner/agents/opencode/harness.py +6 -1
- codex_autorunner/agents/opencode/runtime.py +59 -18
- codex_autorunner/agents/opencode/supervisor.py +4 -0
- codex_autorunner/agents/registry.py +36 -7
- codex_autorunner/bootstrap.py +226 -4
- codex_autorunner/cli.py +5 -1174
- codex_autorunner/codex_cli.py +20 -84
- codex_autorunner/core/__init__.py +20 -0
- codex_autorunner/core/about_car.py +119 -1
- codex_autorunner/core/app_server_ids.py +59 -0
- codex_autorunner/core/app_server_threads.py +17 -2
- codex_autorunner/core/app_server_utils.py +165 -0
- codex_autorunner/core/archive.py +349 -0
- codex_autorunner/core/codex_runner.py +6 -2
- codex_autorunner/core/config.py +433 -4
- codex_autorunner/core/context_awareness.py +38 -0
- codex_autorunner/core/docs.py +0 -122
- codex_autorunner/core/drafts.py +58 -4
- codex_autorunner/core/exceptions.py +4 -0
- codex_autorunner/core/filebox.py +265 -0
- codex_autorunner/core/flows/controller.py +96 -2
- codex_autorunner/core/flows/models.py +13 -0
- codex_autorunner/core/flows/reasons.py +52 -0
- codex_autorunner/core/flows/reconciler.py +134 -0
- codex_autorunner/core/flows/runtime.py +57 -4
- codex_autorunner/core/flows/store.py +142 -7
- codex_autorunner/core/flows/transition.py +27 -15
- codex_autorunner/core/flows/ux_helpers.py +272 -0
- codex_autorunner/core/flows/worker_process.py +32 -6
- codex_autorunner/core/git_utils.py +62 -0
- codex_autorunner/core/hub.py +291 -20
- codex_autorunner/core/lifecycle_events.py +253 -0
- codex_autorunner/core/notifications.py +14 -2
- codex_autorunner/core/path_utils.py +2 -1
- codex_autorunner/core/pma_audit.py +224 -0
- codex_autorunner/core/pma_context.py +496 -0
- codex_autorunner/core/pma_dispatch_interceptor.py +284 -0
- codex_autorunner/core/pma_lifecycle.py +527 -0
- codex_autorunner/core/pma_queue.py +367 -0
- codex_autorunner/core/pma_safety.py +221 -0
- codex_autorunner/core/pma_state.py +115 -0
- codex_autorunner/core/ports/__init__.py +28 -0
- codex_autorunner/{integrations/agents → core/ports}/agent_backend.py +13 -8
- codex_autorunner/core/ports/backend_orchestrator.py +41 -0
- codex_autorunner/{integrations/agents → core/ports}/run_event.py +23 -6
- codex_autorunner/core/prompt.py +0 -80
- codex_autorunner/core/prompts.py +56 -172
- codex_autorunner/core/redaction.py +0 -4
- codex_autorunner/core/review_context.py +11 -9
- codex_autorunner/core/runner_controller.py +35 -33
- codex_autorunner/core/runner_state.py +147 -0
- codex_autorunner/core/runtime.py +829 -0
- codex_autorunner/core/sqlite_utils.py +13 -4
- codex_autorunner/core/state.py +7 -10
- codex_autorunner/core/state_roots.py +62 -0
- codex_autorunner/core/supervisor_protocol.py +15 -0
- codex_autorunner/core/templates/__init__.py +39 -0
- codex_autorunner/core/templates/git_mirror.py +234 -0
- codex_autorunner/core/templates/provenance.py +56 -0
- codex_autorunner/core/templates/scan_cache.py +120 -0
- codex_autorunner/core/text_delta_coalescer.py +54 -0
- codex_autorunner/core/ticket_linter_cli.py +218 -0
- codex_autorunner/core/ticket_manager_cli.py +494 -0
- codex_autorunner/core/time_utils.py +11 -0
- codex_autorunner/core/types.py +18 -0
- codex_autorunner/core/update.py +4 -5
- codex_autorunner/core/update_paths.py +28 -0
- codex_autorunner/core/usage.py +164 -12
- codex_autorunner/core/utils.py +125 -15
- codex_autorunner/flows/review/__init__.py +17 -0
- codex_autorunner/{core/review.py → flows/review/service.py} +37 -34
- codex_autorunner/flows/ticket_flow/definition.py +52 -3
- codex_autorunner/integrations/agents/__init__.py +11 -19
- codex_autorunner/integrations/agents/backend_orchestrator.py +302 -0
- codex_autorunner/integrations/agents/codex_adapter.py +90 -0
- codex_autorunner/integrations/agents/codex_backend.py +177 -25
- codex_autorunner/integrations/agents/opencode_adapter.py +108 -0
- codex_autorunner/integrations/agents/opencode_backend.py +305 -32
- codex_autorunner/integrations/agents/runner.py +86 -0
- codex_autorunner/integrations/agents/wiring.py +279 -0
- codex_autorunner/integrations/app_server/client.py +7 -60
- codex_autorunner/integrations/app_server/env.py +2 -107
- codex_autorunner/{core/app_server_events.py → integrations/app_server/event_buffer.py} +15 -8
- codex_autorunner/integrations/telegram/adapter.py +65 -0
- codex_autorunner/integrations/telegram/config.py +46 -0
- codex_autorunner/integrations/telegram/constants.py +1 -1
- codex_autorunner/integrations/telegram/doctor.py +228 -6
- codex_autorunner/integrations/telegram/handlers/callbacks.py +7 -0
- codex_autorunner/integrations/telegram/handlers/commands/execution.py +236 -74
- codex_autorunner/integrations/telegram/handlers/commands/files.py +314 -75
- codex_autorunner/integrations/telegram/handlers/commands/flows.py +1496 -71
- codex_autorunner/integrations/telegram/handlers/commands/workspace.py +498 -37
- codex_autorunner/integrations/telegram/handlers/commands_runtime.py +206 -48
- codex_autorunner/integrations/telegram/handlers/commands_spec.py +20 -3
- codex_autorunner/integrations/telegram/handlers/messages.py +27 -1
- codex_autorunner/integrations/telegram/handlers/selections.py +61 -1
- codex_autorunner/integrations/telegram/helpers.py +22 -1
- codex_autorunner/integrations/telegram/runtime.py +9 -4
- codex_autorunner/integrations/telegram/service.py +45 -10
- codex_autorunner/integrations/telegram/state.py +38 -0
- codex_autorunner/integrations/telegram/ticket_flow_bridge.py +338 -43
- codex_autorunner/integrations/telegram/transport.py +13 -4
- codex_autorunner/integrations/templates/__init__.py +27 -0
- codex_autorunner/integrations/templates/scan_agent.py +312 -0
- codex_autorunner/routes/__init__.py +37 -76
- codex_autorunner/routes/agents.py +2 -137
- codex_autorunner/routes/analytics.py +2 -238
- codex_autorunner/routes/app_server.py +2 -131
- codex_autorunner/routes/base.py +2 -596
- codex_autorunner/routes/file_chat.py +4 -833
- codex_autorunner/routes/flows.py +4 -977
- codex_autorunner/routes/messages.py +4 -456
- codex_autorunner/routes/repos.py +2 -196
- codex_autorunner/routes/review.py +2 -147
- codex_autorunner/routes/sessions.py +2 -175
- codex_autorunner/routes/settings.py +2 -168
- codex_autorunner/routes/shared.py +2 -275
- codex_autorunner/routes/system.py +4 -193
- codex_autorunner/routes/usage.py +2 -86
- codex_autorunner/routes/voice.py +2 -119
- codex_autorunner/routes/workspace.py +2 -270
- codex_autorunner/server.py +4 -4
- codex_autorunner/static/agentControls.js +61 -16
- codex_autorunner/static/app.js +126 -14
- codex_autorunner/static/archive.js +826 -0
- codex_autorunner/static/archiveApi.js +37 -0
- codex_autorunner/static/autoRefresh.js +7 -7
- codex_autorunner/static/chatUploads.js +137 -0
- codex_autorunner/static/dashboard.js +224 -171
- codex_autorunner/static/docChatCore.js +185 -13
- codex_autorunner/static/fileChat.js +68 -40
- codex_autorunner/static/fileboxUi.js +159 -0
- codex_autorunner/static/hub.js +114 -131
- codex_autorunner/static/index.html +375 -49
- codex_autorunner/static/messages.js +568 -87
- codex_autorunner/static/notifications.js +255 -0
- codex_autorunner/static/pma.js +1167 -0
- codex_autorunner/static/preserve.js +17 -0
- codex_autorunner/static/settings.js +128 -6
- codex_autorunner/static/smartRefresh.js +52 -0
- codex_autorunner/static/streamUtils.js +57 -0
- codex_autorunner/static/styles.css +9798 -6143
- codex_autorunner/static/tabs.js +152 -11
- codex_autorunner/static/templateReposSettings.js +225 -0
- codex_autorunner/static/terminal.js +18 -0
- codex_autorunner/static/ticketChatActions.js +165 -3
- codex_autorunner/static/ticketChatStream.js +17 -119
- codex_autorunner/static/ticketEditor.js +137 -15
- codex_autorunner/static/ticketTemplates.js +798 -0
- codex_autorunner/static/tickets.js +821 -98
- codex_autorunner/static/turnEvents.js +27 -0
- codex_autorunner/static/turnResume.js +33 -0
- codex_autorunner/static/utils.js +39 -0
- codex_autorunner/static/workspace.js +389 -82
- codex_autorunner/static/workspaceFileBrowser.js +15 -13
- codex_autorunner/surfaces/__init__.py +5 -0
- codex_autorunner/surfaces/cli/__init__.py +6 -0
- codex_autorunner/surfaces/cli/cli.py +2534 -0
- codex_autorunner/surfaces/cli/codex_cli.py +20 -0
- codex_autorunner/surfaces/cli/pma_cli.py +817 -0
- codex_autorunner/surfaces/telegram/__init__.py +3 -0
- codex_autorunner/surfaces/web/__init__.py +1 -0
- codex_autorunner/surfaces/web/app.py +2223 -0
- codex_autorunner/surfaces/web/hub_jobs.py +192 -0
- codex_autorunner/surfaces/web/middleware.py +587 -0
- codex_autorunner/surfaces/web/pty_session.py +370 -0
- codex_autorunner/surfaces/web/review.py +6 -0
- codex_autorunner/surfaces/web/routes/__init__.py +82 -0
- codex_autorunner/surfaces/web/routes/agents.py +138 -0
- codex_autorunner/surfaces/web/routes/analytics.py +284 -0
- codex_autorunner/surfaces/web/routes/app_server.py +132 -0
- codex_autorunner/surfaces/web/routes/archive.py +357 -0
- codex_autorunner/surfaces/web/routes/base.py +615 -0
- codex_autorunner/surfaces/web/routes/file_chat.py +1117 -0
- codex_autorunner/surfaces/web/routes/filebox.py +227 -0
- codex_autorunner/surfaces/web/routes/flows.py +1354 -0
- codex_autorunner/surfaces/web/routes/messages.py +490 -0
- codex_autorunner/surfaces/web/routes/pma.py +1652 -0
- codex_autorunner/surfaces/web/routes/repos.py +197 -0
- codex_autorunner/surfaces/web/routes/review.py +148 -0
- codex_autorunner/surfaces/web/routes/sessions.py +176 -0
- codex_autorunner/surfaces/web/routes/settings.py +169 -0
- codex_autorunner/surfaces/web/routes/shared.py +277 -0
- codex_autorunner/surfaces/web/routes/system.py +196 -0
- codex_autorunner/surfaces/web/routes/templates.py +634 -0
- codex_autorunner/surfaces/web/routes/usage.py +89 -0
- codex_autorunner/surfaces/web/routes/voice.py +120 -0
- codex_autorunner/surfaces/web/routes/workspace.py +271 -0
- codex_autorunner/surfaces/web/runner_manager.py +25 -0
- codex_autorunner/surfaces/web/schemas.py +469 -0
- codex_autorunner/surfaces/web/static_assets.py +490 -0
- codex_autorunner/surfaces/web/static_refresh.py +86 -0
- codex_autorunner/surfaces/web/terminal_sessions.py +78 -0
- codex_autorunner/tickets/__init__.py +8 -1
- codex_autorunner/tickets/agent_pool.py +53 -4
- codex_autorunner/tickets/files.py +37 -16
- codex_autorunner/tickets/lint.py +50 -0
- codex_autorunner/tickets/models.py +6 -1
- codex_autorunner/tickets/outbox.py +50 -2
- codex_autorunner/tickets/runner.py +396 -57
- codex_autorunner/web/__init__.py +5 -1
- codex_autorunner/web/app.py +2 -1949
- codex_autorunner/web/hub_jobs.py +2 -191
- codex_autorunner/web/middleware.py +2 -586
- codex_autorunner/web/pty_session.py +2 -369
- codex_autorunner/web/runner_manager.py +2 -24
- codex_autorunner/web/schemas.py +2 -376
- codex_autorunner/web/static_assets.py +4 -441
- codex_autorunner/web/static_refresh.py +2 -85
- codex_autorunner/web/terminal_sessions.py +2 -77
- codex_autorunner/workspace/paths.py +49 -33
- codex_autorunner-1.2.0.dist-info/METADATA +150 -0
- codex_autorunner-1.2.0.dist-info/RECORD +339 -0
- codex_autorunner/core/adapter_utils.py +0 -21
- codex_autorunner/core/engine.py +0 -2653
- codex_autorunner/core/static_assets.py +0 -55
- codex_autorunner-1.0.0.dist-info/METADATA +0 -246
- codex_autorunner-1.0.0.dist-info/RECORD +0 -251
- /codex_autorunner/{routes → surfaces/web/routes}/terminal_images.py +0 -0
- {codex_autorunner-1.0.0.dist-info → codex_autorunner-1.2.0.dist-info}/WHEEL +0 -0
- {codex_autorunner-1.0.0.dist-info → codex_autorunner-1.2.0.dist-info}/entry_points.txt +0 -0
- {codex_autorunner-1.0.0.dist-info → codex_autorunner-1.2.0.dist-info}/licenses/LICENSE +0 -0
- {codex_autorunner-1.0.0.dist-info → codex_autorunner-1.2.0.dist-info}/top_level.txt +0 -0
|
@@ -23,10 +23,25 @@
|
|
|
23
23
|
</div>
|
|
24
24
|
<div class="hub-hero-actions">
|
|
25
25
|
<button class="primary sm" id="hub-new-repo">+ New</button>
|
|
26
|
-
<
|
|
27
|
-
|
|
26
|
+
<div class="notifications-bell" data-notifications-root="hub">
|
|
27
|
+
<button class="ghost sm icon-btn notifications-bell-btn" data-notifications-trigger title="Notifications"
|
|
28
|
+
aria-label="Notifications">
|
|
29
|
+
<span aria-hidden="true">🔔</span>
|
|
30
|
+
<span class="notifications-bell-badge hidden" data-notifications-badge></span>
|
|
31
|
+
</button>
|
|
32
|
+
<div class="notifications-dropdown hidden" data-notifications-dropdown role="menu"
|
|
33
|
+
aria-label="Pending dispatches"></div>
|
|
34
|
+
</div>
|
|
28
35
|
<button class="ghost sm icon-btn" id="hub-settings" title="Settings">⚙</button>
|
|
29
36
|
</div>
|
|
37
|
+
<div class="hub-mode-toggle" role="tablist" aria-label="Hub mode">
|
|
38
|
+
<button class="hub-mode-btn active" id="hub-mode-manual" data-hub-mode="manual" role="tab"
|
|
39
|
+
aria-selected="true">Manual</button>
|
|
40
|
+
<button class="hub-mode-btn" id="hub-mode-pma" data-hub-mode="pma" role="tab" aria-selected="false">
|
|
41
|
+
<span class="hub-mode-long">PM Agent</span>
|
|
42
|
+
<span class="hub-mode-short">PMA</span>
|
|
43
|
+
</button>
|
|
44
|
+
</div>
|
|
30
45
|
</header>
|
|
31
46
|
<section class="hub-stats">
|
|
32
47
|
<div class="hub-stat">
|
|
@@ -42,23 +57,6 @@
|
|
|
42
57
|
<p class="muted small">missing</p>
|
|
43
58
|
</div>
|
|
44
59
|
</section>
|
|
45
|
-
<section class="hub-inbox">
|
|
46
|
-
<div class="hub-panel-header">
|
|
47
|
-
<span class="label">Inbox</span>
|
|
48
|
-
<div class="hub-panel-actions">
|
|
49
|
-
<button class="ghost sm" id="hub-inbox-refresh">Refresh</button>
|
|
50
|
-
</div>
|
|
51
|
-
</div>
|
|
52
|
-
<div class="hub-inbox-list" id="hub-inbox-list">Loading…</div>
|
|
53
|
-
</section>
|
|
54
|
-
<section class="hub-usage-compact">
|
|
55
|
-
<div class="hub-usage-header">
|
|
56
|
-
<span class="label">Usage</span>
|
|
57
|
-
<span class="hub-usage-path" id="hub-usage-meta">–</span>
|
|
58
|
-
<button class="ghost sm icon-btn" id="hub-usage-refresh" title="Refresh usage">↻</button>
|
|
59
|
-
</div>
|
|
60
|
-
<div class="hub-usage-grid" id="hub-usage-list">Loading…</div>
|
|
61
|
-
</section>
|
|
62
60
|
<section class="hub-usage-chart">
|
|
63
61
|
<div class="hub-usage-chart-header">
|
|
64
62
|
<span class="label">Usage Trend</span>
|
|
@@ -91,15 +89,142 @@
|
|
|
91
89
|
</div>
|
|
92
90
|
</section>
|
|
93
91
|
</div>
|
|
92
|
+
<div class="hub-shell hidden" id="pma-shell">
|
|
93
|
+
<header class="hub-hero pma-hero">
|
|
94
|
+
<div class="hub-hero-text pma-hero-text">
|
|
95
|
+
<h1>Project Manager</h1>
|
|
96
|
+
<span class="pill pill-small pill-idle" id="pma-last-scan">–</span>
|
|
97
|
+
<span class="hub-version" id="pma-version">v–</span>
|
|
98
|
+
</div>
|
|
99
|
+
<div class="hub-hero-actions pma-hero-actions">
|
|
100
|
+
<div class="notifications-bell" data-notifications-root="pma">
|
|
101
|
+
<button class="ghost sm icon-btn notifications-bell-btn" data-notifications-trigger title="Notifications"
|
|
102
|
+
aria-label="Notifications">
|
|
103
|
+
<span aria-hidden="true">🔔</span>
|
|
104
|
+
<span class="notifications-bell-badge hidden" data-notifications-badge></span>
|
|
105
|
+
</button>
|
|
106
|
+
<div class="notifications-dropdown hidden" data-notifications-dropdown role="menu"
|
|
107
|
+
aria-label="Pending dispatches"></div>
|
|
108
|
+
</div>
|
|
109
|
+
<button class="ghost sm icon-btn" id="pma-settings" title="Settings">⚙</button>
|
|
110
|
+
</div>
|
|
111
|
+
<div class="hub-mode-toggle" role="tablist" aria-label="Hub mode">
|
|
112
|
+
<button class="hub-mode-btn" id="pma-mode-manual" data-hub-mode="manual" role="tab"
|
|
113
|
+
aria-selected="false">Manual</button>
|
|
114
|
+
<button class="hub-mode-btn active" id="pma-mode-pma" data-hub-mode="pma" role="tab" aria-selected="true">
|
|
115
|
+
<span class="hub-mode-long">PM Agent</span>
|
|
116
|
+
<span class="hub-mode-short">PMA</span>
|
|
117
|
+
</button>
|
|
118
|
+
</div>
|
|
119
|
+
</header>
|
|
120
|
+
<section class="pma-top-bar">
|
|
121
|
+
<div class="pma-chat-controls-row">
|
|
122
|
+
<div class="pma-chat-agent-controls">
|
|
123
|
+
<select id="pma-chat-agent-select" title="Agent"></select>
|
|
124
|
+
<select id="pma-chat-model-select" title="Model"></select>
|
|
125
|
+
<select id="pma-chat-reasoning-select" title="Reasoning"></select>
|
|
126
|
+
</div>
|
|
127
|
+
<div class="pma-chat-actions">
|
|
128
|
+
<button class="ghost sm hidden" id="pma-chat-cancel" title="Cancel">✕</button>
|
|
129
|
+
<button class="pma-new-thread-btn" id="pma-chat-new-thread" title="Start a new chat thread">New
|
|
130
|
+
thread</button>
|
|
131
|
+
<span class="pma-status-pill" id="pma-chat-status">idle</span>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
<div class="pma-thread-info hidden" id="pma-thread-info">
|
|
135
|
+
<div class="pma-thread-info-header">
|
|
136
|
+
<span class="pma-thread-info-label">Thread</span>
|
|
137
|
+
<span class="pill pill-small pill-idle" id="pma-thread-info-status">idle</span>
|
|
138
|
+
</div>
|
|
139
|
+
<div class="pma-thread-info-details">
|
|
140
|
+
<div class="pma-thread-info-row">
|
|
141
|
+
<span class="pma-thread-info-key muted">Agent</span>
|
|
142
|
+
<span class="pma-thread-info-value" id="pma-thread-info-agent">–</span>
|
|
143
|
+
</div>
|
|
144
|
+
<div class="pma-thread-info-row">
|
|
145
|
+
<span class="pma-thread-info-key muted">Thread ID</span>
|
|
146
|
+
<span class="pma-thread-info-value" id="pma-thread-info-thread-id" title="Click to copy">–</span>
|
|
147
|
+
</div>
|
|
148
|
+
<div class="pma-thread-info-row">
|
|
149
|
+
<span class="pma-thread-info-key muted">Turn ID</span>
|
|
150
|
+
<span class="pma-thread-info-value" id="pma-thread-info-turn-id" title="Click to copy">–</span>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
<div class="pma-repo-actions" id="pma-repo-actions">
|
|
155
|
+
<button class="ghost sm" id="pma-scan-repos-btn">Scan repos</button>
|
|
156
|
+
</div>
|
|
157
|
+
</section>
|
|
158
|
+
<section class="pma-chat-section">
|
|
159
|
+
<div class="pma-chat-main">
|
|
160
|
+
<div class="pma-chat-stream" id="pma-chat-stream">
|
|
161
|
+
<div class="pma-chat-error hidden" id="pma-chat-error"></div>
|
|
162
|
+
<div class="pma-history-header" id="pma-chat-history-header">
|
|
163
|
+
<span class="pma-history-label">History</span>
|
|
164
|
+
</div>
|
|
165
|
+
<div class="pma-chat-messages" id="pma-chat-messages"></div>
|
|
166
|
+
<div class="pma-chat-events hidden" id="pma-chat-events">
|
|
167
|
+
<div class="pma-events-header">
|
|
168
|
+
<span class="pma-events-label">Agent</span>
|
|
169
|
+
<span class="pma-events-count" id="pma-chat-events-count">0</span>
|
|
170
|
+
<button class="ghost sm hidden" id="pma-chat-events-toggle">more</button>
|
|
171
|
+
</div>
|
|
172
|
+
<div class="pma-chat-events-list" id="pma-chat-events-list"></div>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
<div class="pma-chat-compose">
|
|
176
|
+
<div class="pma-attachments-area" id="pma-attachments-area">
|
|
177
|
+
<div class="pma-files-row">
|
|
178
|
+
<span class="pma-files-label">In</span>
|
|
179
|
+
<div class="pma-file-list filebox-list" id="pma-inbox-files"></div>
|
|
180
|
+
</div>
|
|
181
|
+
<div class="pma-files-row">
|
|
182
|
+
<span class="pma-files-label">Out</span>
|
|
183
|
+
<div class="pma-file-list filebox-list" id="pma-outbox-files"></div>
|
|
184
|
+
<button class="pma-icon-btn-small" id="pma-outbox-refresh" title="Refresh files">↻</button>
|
|
185
|
+
</div>
|
|
186
|
+
</div>
|
|
187
|
+
<div class="pma-chat-input-row">
|
|
188
|
+
<textarea id="pma-chat-input" class="pma-chat-input" enterkeyhint="enter"
|
|
189
|
+
placeholder="Ask PMA to help coordinate work..." rows="1" spellcheck="false"></textarea>
|
|
190
|
+
<input type="file" id="pma-chat-upload-input" multiple hidden />
|
|
191
|
+
<button class="ghost sm icon-btn pma-upload-btn" id="pma-chat-upload-btn" title="Upload file">📎</button>
|
|
192
|
+
<button class="pma-send-btn" id="pma-chat-send" title="Send (Cmd+Enter)">↑</button>
|
|
193
|
+
</div>
|
|
194
|
+
<div class="pma-chat-hint">
|
|
195
|
+
<span class="muted small">⌘↵ send · ↵ newline</span>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
</section>
|
|
200
|
+
<section class="pma-docs-section hidden" id="pma-docs-section">
|
|
201
|
+
<div class="pma-docs-header">
|
|
202
|
+
<h2>PMA Docs</h2>
|
|
203
|
+
<div class="pma-docs-tabs">
|
|
204
|
+
<button class="pma-docs-tab active" data-doc="AGENTS.md">AGENTS</button>
|
|
205
|
+
<button class="pma-docs-tab" data-doc="active_context.md">Active Context</button>
|
|
206
|
+
<button class="pma-docs-tab" data-doc="context_log.md">Context Log</button>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
<div class="pma-docs-content">
|
|
210
|
+
<div class="pma-docs-meta" id="pma-docs-meta"></div>
|
|
211
|
+
<div class="pma-docs-editor-wrapper">
|
|
212
|
+
<textarea id="pma-docs-editor" class="pma-docs-editor" spellcheck="false"></textarea>
|
|
213
|
+
</div>
|
|
214
|
+
<div class="pma-docs-actions">
|
|
215
|
+
<button class="ghost sm" id="pma-docs-reset" title="Reset to default">Reset</button>
|
|
216
|
+
<button class="ghost sm" id="pma-docs-snapshot" title="Snapshot active context to log">Snapshot to log</button>
|
|
217
|
+
<button class="primary sm" id="pma-docs-save">Save</button>
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
</section>
|
|
221
|
+
</div>
|
|
94
222
|
<div class="app-shell" id="repo-shell">
|
|
95
223
|
<nav class="nav-bar">
|
|
96
224
|
<span class="nav-brand">CAR</span>
|
|
97
225
|
<div class="tabs">
|
|
98
226
|
<!-- Tabs will be injected here by tabs.js -->
|
|
99
227
|
</div>
|
|
100
|
-
<div class="nav-actions">
|
|
101
|
-
<button class="ghost sm icon-btn" id="repo-settings" title="Settings">⚙</button>
|
|
102
|
-
</div>
|
|
103
228
|
</nav>
|
|
104
229
|
<main>
|
|
105
230
|
<div class="doc-banner hidden" id="repo-health-banner">
|
|
@@ -162,6 +287,10 @@
|
|
|
162
287
|
<p class="muted">Replies</p>
|
|
163
288
|
<p class="metric" id="message-replies">–</p>
|
|
164
289
|
</div>
|
|
290
|
+
<div>
|
|
291
|
+
<p class="muted">Lines Changed</p>
|
|
292
|
+
<p class="metric diff-stats-metric" id="lines-changed">–</p>
|
|
293
|
+
</div>
|
|
165
294
|
<div>
|
|
166
295
|
<p class="muted">Run ID</p>
|
|
167
296
|
<p class="metric" id="last-run-id">–</p>
|
|
@@ -254,6 +383,13 @@
|
|
|
254
383
|
<div class="messages-thread-list" id="messages-thread-list"></div>
|
|
255
384
|
</div>
|
|
256
385
|
<div class="messages-main">
|
|
386
|
+
<div class="messages-detail-header mobile-only">
|
|
387
|
+
<button class="messages-back-btn" id="messages-back-btn">← Back</button>
|
|
388
|
+
<div class="messages-detail-meta" id="messages-detail-meta">
|
|
389
|
+
<span class="messages-detail-status pill pill-small pill-idle" id="messages-detail-status">–</span>
|
|
390
|
+
<span class="messages-detail-counts muted" id="messages-detail-counts">–</span>
|
|
391
|
+
</div>
|
|
392
|
+
</div>
|
|
257
393
|
<div class="messages-thread-detail" id="messages-thread-detail">
|
|
258
394
|
<div class="messages-empty-state">
|
|
259
395
|
<div class="messages-empty-icon">💬</div>
|
|
@@ -262,12 +398,33 @@
|
|
|
262
398
|
</div>
|
|
263
399
|
</div>
|
|
264
400
|
</div>
|
|
265
|
-
<div class="messages-
|
|
266
|
-
<
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
401
|
+
<div class="messages-compose">
|
|
402
|
+
<div class="messages-attachments">
|
|
403
|
+
<input type="file" id="messages-filebox-upload" multiple hidden />
|
|
404
|
+
<div class="chat-files-row">
|
|
405
|
+
<span class="chat-files-label">In</span>
|
|
406
|
+
<div class="filebox-list" id="messages-filebox-inbox"></div>
|
|
407
|
+
<div class="chat-filebox-actions">
|
|
408
|
+
<button class="ghost sm icon-btn chat-icon-btn" id="messages-filebox-upload-btn"
|
|
409
|
+
title="Upload to inbox">⭱</button>
|
|
410
|
+
<button class="ghost sm icon-btn chat-icon-btn" id="messages-filebox-refresh"
|
|
411
|
+
title="Refresh FileBox">↻</button>
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
414
|
+
<div class="chat-files-row">
|
|
415
|
+
<span class="chat-files-label">Out</span>
|
|
416
|
+
<div class="filebox-list" id="messages-filebox-outbox"></div>
|
|
417
|
+
</div>
|
|
418
|
+
</div>
|
|
419
|
+
<div class="messages-input-row">
|
|
420
|
+
<textarea class="messages-reply-body" id="messages-reply-body" enterkeyhint="enter"
|
|
421
|
+
placeholder="Write a reply…" rows="2" spellcheck="false"></textarea>
|
|
422
|
+
<div class="messages-input-actions">
|
|
423
|
+
<input type="file" id="messages-reply-files" multiple hidden />
|
|
424
|
+
<button class="ghost sm icon-btn messages-attach-btn" id="messages-reply-attach"
|
|
425
|
+
title="Attach files">📎</button>
|
|
426
|
+
<span class="muted small messages-attach-summary hidden" id="messages-reply-attach-summary">No
|
|
427
|
+
files</span>
|
|
271
428
|
<button class="primary sm" id="messages-reply-send">Send</button>
|
|
272
429
|
</div>
|
|
273
430
|
</div>
|
|
@@ -277,6 +434,30 @@
|
|
|
277
434
|
</div>
|
|
278
435
|
</div>
|
|
279
436
|
</section>
|
|
437
|
+
<section class="panel" id="archive">
|
|
438
|
+
<div class="cards">
|
|
439
|
+
<div class="card">
|
|
440
|
+
<div class="archive-layout">
|
|
441
|
+
<aside class="archive-sidebar">
|
|
442
|
+
<div class="archive-header">
|
|
443
|
+
<span class="label">Archive</span>
|
|
444
|
+
<button class="ghost sm" id="archive-refresh">Refresh</button>
|
|
445
|
+
</div>
|
|
446
|
+
<div class="archive-empty muted small hidden" id="archive-empty">
|
|
447
|
+
No archived snapshots found yet. Clean up a worktree to create a snapshot.
|
|
448
|
+
</div>
|
|
449
|
+
<div class="archive-list" id="archive-snapshot-list"></div>
|
|
450
|
+
</aside>
|
|
451
|
+
<div class="archive-detail" id="archive-snapshot-detail">
|
|
452
|
+
<div class="archive-empty-state">
|
|
453
|
+
<div class="archive-empty-title">Select a snapshot</div>
|
|
454
|
+
<div class="archive-empty-hint">Choose a snapshot to view metadata and summary.</div>
|
|
455
|
+
</div>
|
|
456
|
+
</div>
|
|
457
|
+
</div>
|
|
458
|
+
</div>
|
|
459
|
+
</div>
|
|
460
|
+
</section>
|
|
280
461
|
<section class="panel" id="workspace">
|
|
281
462
|
<div class="workspace-header workspace-header-desktop">
|
|
282
463
|
<div class="workspace-header-left">
|
|
@@ -288,14 +469,16 @@
|
|
|
288
469
|
<button class="ghost sm" id="workspace-upload" title="Upload to current folder">Upload</button>
|
|
289
470
|
<button class="ghost sm" id="workspace-new-folder" title="Create folder">New Folder</button>
|
|
290
471
|
<button class="ghost sm" id="workspace-new-file" title="Create markdown file">New File</button>
|
|
291
|
-
<button class="ghost sm hidden" id="workspace-generate-tickets" title="Generate tickets from spec">Generate
|
|
472
|
+
<button class="ghost sm hidden" id="workspace-generate-tickets" title="Generate tickets from spec">Generate
|
|
473
|
+
tickets</button>
|
|
292
474
|
<button class="ghost sm" id="workspace-reload">Reload</button>
|
|
293
475
|
<button class="primary sm" id="workspace-save">Save</button>
|
|
294
476
|
</div>
|
|
295
477
|
</div>
|
|
296
478
|
<div class="workspace-path-row">
|
|
297
479
|
<nav class="workspace-breadcrumbs" id="workspace-breadcrumbs"></nav>
|
|
298
|
-
<button class="ghost sm workspace-download-all-btn" id="workspace-download-all"
|
|
480
|
+
<button class="ghost sm workspace-download-all-btn" id="workspace-download-all"
|
|
481
|
+
title="Download all as ZIP">⬇</button>
|
|
299
482
|
</div>
|
|
300
483
|
<div class="workspace-grid">
|
|
301
484
|
<aside class="workspace-file-browser">
|
|
@@ -332,6 +515,18 @@
|
|
|
332
515
|
</button>
|
|
333
516
|
<div class="workspace-mobile-actions">
|
|
334
517
|
<span class="muted small" id="workspace-status-mobile"></span>
|
|
518
|
+
<div class="workspace-mobile-menu">
|
|
519
|
+
<button class="ghost sm icon-btn" id="workspace-mobile-menu-toggle"
|
|
520
|
+
title="Workspace actions">⋯</button>
|
|
521
|
+
<div class="workspace-mobile-dropdown hidden" id="workspace-mobile-dropdown">
|
|
522
|
+
<button class="workspace-mobile-item" id="workspace-mobile-upload">Upload files</button>
|
|
523
|
+
<button class="workspace-mobile-item" id="workspace-mobile-new-folder">New folder</button>
|
|
524
|
+
<button class="workspace-mobile-item" id="workspace-mobile-new-file">New file</button>
|
|
525
|
+
<button class="workspace-mobile-item" id="workspace-mobile-download">Download ZIP</button>
|
|
526
|
+
<button class="workspace-mobile-item hidden" id="workspace-mobile-generate">Generate
|
|
527
|
+
tickets</button>
|
|
528
|
+
</div>
|
|
529
|
+
</div>
|
|
335
530
|
<button class="ghost sm" id="workspace-reload-mobile" title="Reload">↻</button>
|
|
336
531
|
<button class="primary sm" id="workspace-save-mobile">Save</button>
|
|
337
532
|
</div>
|
|
@@ -400,48 +595,67 @@
|
|
|
400
595
|
<button class="ghost sm" id="ticket-flow-stop">Stop</button>
|
|
401
596
|
<button class="ghost sm" id="ticket-flow-resume">Resume</button>
|
|
402
597
|
<button class="ghost sm ticket-desktop-only" id="ticket-flow-restart" style="display:none;">Restart</button>
|
|
403
|
-
<button class="ghost sm ticket-desktop-only" id="ticket-flow-archive" style="display:none;">Archive
|
|
598
|
+
<button class="ghost sm ticket-desktop-only" id="ticket-flow-archive" style="display:none;">Archive
|
|
599
|
+
Flow</button>
|
|
404
600
|
<button class="ghost sm icon-btn" id="ticket-flow-refresh" title="Refresh ticket flow">↻</button>
|
|
405
601
|
<!-- Overflow menu for mobile -->
|
|
406
602
|
<div class="ticket-overflow-menu">
|
|
407
603
|
<button class="ghost sm icon-btn" id="ticket-overflow-toggle" title="More actions">⋯</button>
|
|
408
604
|
<div class="ticket-overflow-dropdown hidden" id="ticket-overflow-dropdown">
|
|
409
605
|
<button class="ticket-overflow-item" id="ticket-overflow-new">+ New Ticket</button>
|
|
606
|
+
<button class="ticket-overflow-item hidden" id="ticket-overflow-template">From Template</button>
|
|
410
607
|
<button class="ticket-overflow-item" id="ticket-overflow-restart" style="display:none;">Restart</button>
|
|
411
|
-
<button class="ticket-overflow-item" id="ticket-overflow-archive" style="display:none;">Archive
|
|
608
|
+
<button class="ticket-overflow-item" id="ticket-overflow-archive" style="display:none;">Archive
|
|
609
|
+
Flow</button>
|
|
610
|
+
</div>
|
|
611
|
+
</div>
|
|
612
|
+
<!-- Split button: New Ticket + Template dropdown -->
|
|
613
|
+
<div class="ticket-new-split ticket-desktop-only">
|
|
614
|
+
<button class="ghost sm" id="ticket-new-btn" title="Create new ticket">+ New Ticket</button>
|
|
615
|
+
<button class="ghost sm icon-btn ticket-new-dropdown-toggle hidden" id="ticket-new-dropdown-toggle"
|
|
616
|
+
title="Create from template">▾</button>
|
|
617
|
+
<div class="ticket-new-dropdown hidden" id="ticket-new-dropdown">
|
|
618
|
+
<button class="ticket-new-dropdown-item" id="ticket-new-from-template">From Template</button>
|
|
412
619
|
</div>
|
|
413
620
|
</div>
|
|
414
|
-
<button class="ghost sm ticket-desktop-only" id="ticket-new-btn" title="Create new ticket">+ New Ticket</button>
|
|
415
621
|
</div>
|
|
416
622
|
<div class="ticket-flow-meta" id="ticket-flow-meta">
|
|
417
|
-
<button class="ticket-meta-toggle" id="ticket-meta-toggle" title="Toggle details">
|
|
418
|
-
<span class="ticket-meta-summary" id="ticket-meta-summary">–</span>
|
|
419
|
-
<span class="ticket-meta-arrow">▾</span>
|
|
420
|
-
</button>
|
|
421
623
|
<div class="ticket-meta-details" id="ticket-meta-details">
|
|
422
|
-
<div>
|
|
624
|
+
<div class="ticket-meta-secondary">
|
|
423
625
|
<span class="muted">Current ticket</span>
|
|
424
626
|
<span class="ticket-mono" id="ticket-flow-current">–</span>
|
|
425
627
|
</div>
|
|
426
|
-
<div>
|
|
628
|
+
<div class="ticket-meta-secondary">
|
|
427
629
|
<span class="muted">Turn</span>
|
|
428
630
|
<span class="ticket-mono" id="ticket-flow-turn">–</span>
|
|
429
631
|
</div>
|
|
430
|
-
<div>
|
|
632
|
+
<div class="ticket-meta-secondary">
|
|
431
633
|
<span class="muted">Elapsed</span>
|
|
432
634
|
<span class="ticket-mono" id="ticket-flow-elapsed">–</span>
|
|
433
635
|
</div>
|
|
434
|
-
<div>
|
|
636
|
+
<div class="ticket-meta-secondary">
|
|
435
637
|
<span class="muted">Progress</span>
|
|
436
638
|
<span class="ticket-mono" id="ticket-flow-progress">–</span>
|
|
437
639
|
</div>
|
|
438
|
-
<div>
|
|
640
|
+
<div class="ticket-meta-secondary">
|
|
439
641
|
<span class="muted">Reason</span>
|
|
440
642
|
<span class="ticket-mono ticket-flow-reason" id="ticket-flow-reason">–</span>
|
|
441
643
|
</div>
|
|
442
|
-
<div>
|
|
644
|
+
<div class="ticket-meta-critical">
|
|
443
645
|
<span class="muted">Last activity</span>
|
|
444
646
|
<span class="ticket-mono" id="ticket-flow-last-activity">–</span>
|
|
647
|
+
<span class="pill pill-warn pill-small ticket-flow-pill" id="ticket-flow-stale"
|
|
648
|
+
style="display:none;">stale</span>
|
|
649
|
+
<button class="ghost sm ticket-flow-action" id="ticket-flow-reconnect"
|
|
650
|
+
style="display:none;">Reconnect</button>
|
|
651
|
+
</div>
|
|
652
|
+
<div class="ticket-meta-critical">
|
|
653
|
+
<span class="muted">Worker</span>
|
|
654
|
+
<span class="ticket-mono" id="ticket-flow-worker">–</span>
|
|
655
|
+
<span class="pill pill-error pill-small ticket-flow-pill" id="ticket-flow-worker-pill"
|
|
656
|
+
style="display:none;">dead</span>
|
|
657
|
+
<button class="ghost sm ticket-flow-action" id="ticket-flow-recover"
|
|
658
|
+
style="display:none;">Recover</button>
|
|
445
659
|
</div>
|
|
446
660
|
</div>
|
|
447
661
|
</div>
|
|
@@ -472,20 +686,26 @@
|
|
|
472
686
|
<span class="muted">Tickets</span>
|
|
473
687
|
<span class="muted small" id="ticket-flow-dir">–</span>
|
|
474
688
|
</div>
|
|
689
|
+
<div class="ticket-progress-bar" id="ticket-progress-bar">
|
|
690
|
+
<div class="ticket-progress-fill" id="ticket-progress-fill"></div>
|
|
691
|
+
</div>
|
|
475
692
|
<div class="ticket-list" id="ticket-flow-tickets">Loading tickets…</div>
|
|
476
693
|
</div>
|
|
477
694
|
<div class="ticket-panel" id="dispatch-panel">
|
|
478
695
|
<div class="ticket-panel-header">
|
|
479
696
|
<span class="muted">Dispatch history</span>
|
|
480
697
|
<span class="muted small" id="ticket-dispatch-note">–</span>
|
|
481
|
-
<button class="ticket-panel-toggle" id="dispatch-panel-toggle" aria-label="Toggle dispatch panel"
|
|
482
|
-
|
|
698
|
+
<button class="ticket-panel-toggle" id="dispatch-panel-toggle" aria-label="Toggle dispatch panel"
|
|
699
|
+
title="Collapse/expand panel">
|
|
700
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"
|
|
701
|
+
stroke-width="2">
|
|
483
702
|
<path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7" />
|
|
484
703
|
</svg>
|
|
485
704
|
</button>
|
|
486
705
|
</div>
|
|
487
706
|
<div class="dispatch-mini-list" id="dispatch-mini-list"></div>
|
|
488
|
-
<div class="ticket-list" id="ticket-dispatch-history">No dispatches yet. Agent messages will appear here
|
|
707
|
+
<div class="ticket-list" id="ticket-dispatch-history">No dispatches yet. Agent messages will appear here.
|
|
708
|
+
</div>
|
|
489
709
|
</div>
|
|
490
710
|
</div>
|
|
491
711
|
</div>
|
|
@@ -504,6 +724,10 @@
|
|
|
504
724
|
<input class="ticket-fm-input" id="ticket-fm-title" placeholder="Title (optional)" spellcheck="false"
|
|
505
725
|
type="text">
|
|
506
726
|
<div class="ticket-header-actions">
|
|
727
|
+
<button class="ghost sm icon-btn ticket-nav-btn" id="ticket-nav-prev" title="Previous ticket (Alt+←)"
|
|
728
|
+
aria-label="Previous ticket" aria-keyshortcuts="Alt+ArrowLeft">←</button>
|
|
729
|
+
<button class="ghost sm icon-btn ticket-nav-btn" id="ticket-nav-next" title="Next ticket (Alt+→)"
|
|
730
|
+
aria-label="Next ticket" aria-keyshortcuts="Alt+ArrowRight">→</button>
|
|
507
731
|
<label class="ticket-fm-toggle" title="Mark as done">
|
|
508
732
|
<input id="ticket-fm-done" type="checkbox">
|
|
509
733
|
<span class="ticket-fm-toggle-label">Done</span>
|
|
@@ -546,7 +770,7 @@
|
|
|
546
770
|
<div class="ticket-chat-panel">
|
|
547
771
|
<div class="ticket-chat-compose">
|
|
548
772
|
<div class="ticket-chat-agent-controls">
|
|
549
|
-
<select id="ticket-chat-agent-select" title="Agent"></select>
|
|
773
|
+
<select class="mobile-hide-empty" id="ticket-chat-agent-select" title="Agent"></select>
|
|
550
774
|
<select id="ticket-chat-model-select" title="Model"></select>
|
|
551
775
|
<select id="ticket-chat-reasoning-select" title="Reasoning"></select>
|
|
552
776
|
</div>
|
|
@@ -589,6 +813,60 @@
|
|
|
589
813
|
</div>
|
|
590
814
|
</div>
|
|
591
815
|
</div>
|
|
816
|
+
<!-- Template Picker Modal -->
|
|
817
|
+
<div class="modal-overlay hidden" id="ticket-template-modal">
|
|
818
|
+
<div class="modal-content ticket-template-modal-content">
|
|
819
|
+
<div class="modal-header ticket-template-header">
|
|
820
|
+
<span class="ticket-template-title">New Ticket from Template</span>
|
|
821
|
+
<button class="ghost sm icon-btn" id="ticket-template-close" title="Close">×</button>
|
|
822
|
+
</div>
|
|
823
|
+
<div class="ticket-template-body">
|
|
824
|
+
<!-- Recent templates (shown if history exists) -->
|
|
825
|
+
<div class="ticket-template-recent hidden" id="ticket-template-recent"></div>
|
|
826
|
+
|
|
827
|
+
<!-- Main input section -->
|
|
828
|
+
<div class="ticket-template-input-section">
|
|
829
|
+
<div class="ticket-template-input-wrapper">
|
|
830
|
+
<input class="ticket-template-input" id="ticket-template-ref" type="text"
|
|
831
|
+
placeholder="repo:path/to/template.md" spellcheck="false" autocomplete="off">
|
|
832
|
+
<button class="ticket-template-clear hidden" id="ticket-template-clear" type="button"
|
|
833
|
+
title="Clear">×</button>
|
|
834
|
+
<span class="ticket-template-input-hint" id="ticket-template-hint">or paste GitHub URL</span>
|
|
835
|
+
</div>
|
|
836
|
+
<div class="ticket-template-repos" id="ticket-template-repos"></div>
|
|
837
|
+
</div>
|
|
838
|
+
|
|
839
|
+
<!-- Preview -->
|
|
840
|
+
<div class="ticket-template-preview-section">
|
|
841
|
+
<div class="ticket-template-preview-header">
|
|
842
|
+
<span class="ticket-template-preview-label">Preview</span>
|
|
843
|
+
<span class="ticket-template-preview-status" id="ticket-template-preview-status"></span>
|
|
844
|
+
</div>
|
|
845
|
+
<pre class="ticket-template-preview" id="ticket-template-preview"></pre>
|
|
846
|
+
</div>
|
|
847
|
+
|
|
848
|
+
<!-- Error -->
|
|
849
|
+
<div class="ticket-template-error hidden" id="ticket-template-error"></div>
|
|
850
|
+
|
|
851
|
+
<!-- Footer -->
|
|
852
|
+
<div class="ticket-template-footer">
|
|
853
|
+
<div class="ticket-template-options">
|
|
854
|
+
<label class="ticket-template-option-label">Agent:</label>
|
|
855
|
+
<select class="ticket-template-agent-select" id="ticket-template-agent">
|
|
856
|
+
<option value="">default</option>
|
|
857
|
+
<option value="codex">codex</option>
|
|
858
|
+
<option value="opencode">opencode</option>
|
|
859
|
+
<option value="user">user</option>
|
|
860
|
+
</select>
|
|
861
|
+
</div>
|
|
862
|
+
<div class="ticket-template-actions">
|
|
863
|
+
<button class="ghost sm" id="ticket-template-cancel">Cancel</button>
|
|
864
|
+
<button class="primary sm" id="ticket-template-apply" disabled>Create</button>
|
|
865
|
+
</div>
|
|
866
|
+
</div>
|
|
867
|
+
</div>
|
|
868
|
+
</div>
|
|
869
|
+
</div>
|
|
592
870
|
</section>
|
|
593
871
|
<section class="panel" id="terminal">
|
|
594
872
|
<div class="terminal-toolbar">
|
|
@@ -832,12 +1110,60 @@
|
|
|
832
1110
|
</div>
|
|
833
1111
|
<span class="form-hint">Resetting conversations clears stored thread IDs and restarts chats.</span>
|
|
834
1112
|
</div>
|
|
1113
|
+
<div class="form-group">
|
|
1114
|
+
<label>Template Repositories</label>
|
|
1115
|
+
<div class="template-repos-list" id="template-repos-list"></div>
|
|
1116
|
+
<div class="settings-actions">
|
|
1117
|
+
<button class="ghost sm" id="template-repos-add">+ Add repository</button>
|
|
1118
|
+
</div>
|
|
1119
|
+
<div class="template-repo-form hidden" id="template-repo-form">
|
|
1120
|
+
<div class="settings-grid">
|
|
1121
|
+
<div>
|
|
1122
|
+
<label class="muted small" for="repo-id">ID</label>
|
|
1123
|
+
<input autocomplete="off" id="repo-id" placeholder="my-team" spellcheck="false" type="text" />
|
|
1124
|
+
<span class="form-hint">Used in refs like <span class="mono">id:path/to/file.md</span></span>
|
|
1125
|
+
</div>
|
|
1126
|
+
<div>
|
|
1127
|
+
<label class="muted small" for="repo-url">Git URL</label>
|
|
1128
|
+
<input autocomplete="off" id="repo-url" placeholder="https://github.com/org/repo.git" spellcheck="false"
|
|
1129
|
+
type="text" />
|
|
1130
|
+
</div>
|
|
1131
|
+
<div>
|
|
1132
|
+
<label class="muted small" for="repo-ref">Default ref</label>
|
|
1133
|
+
<input autocomplete="off" id="repo-ref" placeholder="main" spellcheck="false" type="text"
|
|
1134
|
+
value="main" />
|
|
1135
|
+
</div>
|
|
1136
|
+
<div class="settings-toggle-row">
|
|
1137
|
+
<label class="form-checkbox">
|
|
1138
|
+
<input id="repo-trusted" type="checkbox" />
|
|
1139
|
+
<span>Trusted (skip scanning)</span>
|
|
1140
|
+
</label>
|
|
1141
|
+
</div>
|
|
1142
|
+
</div>
|
|
1143
|
+
<div class="settings-actions">
|
|
1144
|
+
<button class="primary sm" id="repo-save">Save</button>
|
|
1145
|
+
<button class="ghost sm" id="repo-cancel">Cancel</button>
|
|
1146
|
+
</div>
|
|
1147
|
+
</div>
|
|
1148
|
+
<span class="form-hint">Edits are written to <span class="mono">codex-autorunner.override.yml</span>.</span>
|
|
1149
|
+
</div>
|
|
835
1150
|
</div>
|
|
836
1151
|
<div class="modal-actions">
|
|
837
1152
|
<button class="ghost" id="repo-settings-close">Close</button>
|
|
838
1153
|
</div>
|
|
839
1154
|
</div>
|
|
840
1155
|
</div>
|
|
1156
|
+
<!-- Notifications Modal -->
|
|
1157
|
+
<div class="modal-overlay hidden" id="notifications-modal">
|
|
1158
|
+
<div aria-labelledby="notifications-modal-title" aria-modal="true" class="modal-dialog notifications-modal-dialog"
|
|
1159
|
+
role="dialog" tabindex="-1">
|
|
1160
|
+
<div class="notifications-modal-header">
|
|
1161
|
+
<span class="label" id="notifications-modal-title">Pending dispatch</span>
|
|
1162
|
+
<button class="ghost sm icon-btn" id="notifications-modal-close" title="Close">×</button>
|
|
1163
|
+
</div>
|
|
1164
|
+
<div class="notifications-modal-body-wrapper" id="notifications-modal-body"></div>
|
|
1165
|
+
</div>
|
|
1166
|
+
</div>
|
|
841
1167
|
<!-- Reason Details Modal -->
|
|
842
1168
|
<div class="modal-overlay" hidden="" id="reason-modal">
|
|
843
1169
|
<div aria-describedby="reason-modal-content" aria-labelledby="reason-modal-title" aria-modal="true"
|
|
@@ -851,8 +1177,8 @@
|
|
|
851
1177
|
</div>
|
|
852
1178
|
<!-- File Picker Modal -->
|
|
853
1179
|
<div class="modal-overlay file-picker-modal" hidden="" id="file-picker-modal">
|
|
854
|
-
<div aria-labelledby="file-picker-modal-title" aria-modal="true"
|
|
855
|
-
|
|
1180
|
+
<div aria-labelledby="file-picker-modal-title" aria-modal="true" class="modal-dialog file-picker-dialog"
|
|
1181
|
+
role="dialog" tabindex="-1">
|
|
856
1182
|
<div class="file-picker-header">
|
|
857
1183
|
<span class="file-picker-title" id="file-picker-modal-title">Select File</span>
|
|
858
1184
|
<button class="file-picker-close" id="file-picker-close" aria-label="Close">×</button>
|