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,190 +1,13 @@
|
|
|
1
|
+
// GENERATED FILE - do not edit directly. Source: static_src/
|
|
1
2
|
import { api, confirmModal, flash, resolvePath } from "./utils.js";
|
|
2
|
-
let modelsCache = [];
|
|
3
|
-
let currentSettings = null;
|
|
4
3
|
const ui = {
|
|
5
4
|
settingsBtn: document.getElementById("repo-settings"),
|
|
6
|
-
modelSelect: document.getElementById("autorunner-model-select"),
|
|
7
|
-
effortSelect: document.getElementById("autorunner-effort-select"),
|
|
8
|
-
approvalSelect: document.getElementById("autorunner-approval-select"),
|
|
9
|
-
sandboxSelect: document.getElementById("autorunner-sandbox-select"),
|
|
10
|
-
maxRunsInput: document.getElementById("autorunner-max-runs-input"),
|
|
11
|
-
networkToggle: document.getElementById("autorunner-network-toggle"),
|
|
12
|
-
networkRow: document.getElementById("autorunner-network-row"),
|
|
13
|
-
saveBtn: document.getElementById("autorunner-settings-save"),
|
|
14
|
-
reloadBtn: document.getElementById("autorunner-settings-reload"),
|
|
15
|
-
warning: document.getElementById("autorunner-settings-warning"),
|
|
16
5
|
threadList: document.getElementById("thread-tools-list"),
|
|
17
6
|
threadNew: document.getElementById("thread-new-autorunner"),
|
|
18
7
|
threadArchive: document.getElementById("thread-archive-autorunner"),
|
|
19
8
|
threadResetAll: document.getElementById("thread-reset-all"),
|
|
20
9
|
threadDownload: document.getElementById("thread-backup-download"),
|
|
21
10
|
};
|
|
22
|
-
const DEFAULT_EFFORTS = ["low", "medium", "high"];
|
|
23
|
-
function getModelId(model) {
|
|
24
|
-
if (!model || typeof model !== "object")
|
|
25
|
-
return null;
|
|
26
|
-
const modelObj = model;
|
|
27
|
-
const keys = ["id", "model", "name", "model_id", "modelId"];
|
|
28
|
-
for (const key of keys) {
|
|
29
|
-
const value = modelObj[key];
|
|
30
|
-
if (typeof value === "string" && value.trim()) {
|
|
31
|
-
return value.trim();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
function getModelEfforts(model) {
|
|
37
|
-
if (!model || typeof model !== "object")
|
|
38
|
-
return null;
|
|
39
|
-
const modelObj = model;
|
|
40
|
-
const keys = [
|
|
41
|
-
"supported_reasoning_efforts",
|
|
42
|
-
"supportedReasoningEfforts",
|
|
43
|
-
"reasoning_efforts",
|
|
44
|
-
"reasoningEfforts",
|
|
45
|
-
"supported_efforts",
|
|
46
|
-
"supportedEfforts",
|
|
47
|
-
"efforts",
|
|
48
|
-
];
|
|
49
|
-
for (const key of keys) {
|
|
50
|
-
const value = modelObj[key];
|
|
51
|
-
if (Array.isArray(value) && value.length) {
|
|
52
|
-
return value.map((entry) => String(entry));
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
function normalizeModels(raw) {
|
|
58
|
-
if (Array.isArray(raw))
|
|
59
|
-
return raw;
|
|
60
|
-
if (raw && typeof raw === "object") {
|
|
61
|
-
const rawObj = raw;
|
|
62
|
-
if (Array.isArray(rawObj.models))
|
|
63
|
-
return rawObj.models;
|
|
64
|
-
if (Array.isArray(rawObj.data))
|
|
65
|
-
return rawObj.data;
|
|
66
|
-
if (Array.isArray(rawObj.items))
|
|
67
|
-
return rawObj.items;
|
|
68
|
-
if (Array.isArray(rawObj.results))
|
|
69
|
-
return rawObj.results;
|
|
70
|
-
}
|
|
71
|
-
return [];
|
|
72
|
-
}
|
|
73
|
-
function setOptions(select, options, selected, placeholder) {
|
|
74
|
-
if (!select)
|
|
75
|
-
return;
|
|
76
|
-
select.innerHTML = "";
|
|
77
|
-
const empty = document.createElement("option");
|
|
78
|
-
empty.value = "";
|
|
79
|
-
empty.textContent = placeholder;
|
|
80
|
-
select.appendChild(empty);
|
|
81
|
-
options.forEach((opt) => {
|
|
82
|
-
const option = document.createElement("option");
|
|
83
|
-
option.value = opt.value;
|
|
84
|
-
option.textContent = opt.label;
|
|
85
|
-
select.appendChild(option);
|
|
86
|
-
});
|
|
87
|
-
if (selected) {
|
|
88
|
-
const exists = options.some((opt) => opt.value === selected);
|
|
89
|
-
if (!exists) {
|
|
90
|
-
const custom = document.createElement("option");
|
|
91
|
-
custom.value = selected;
|
|
92
|
-
custom.textContent = `${selected} (custom)`;
|
|
93
|
-
select.appendChild(custom);
|
|
94
|
-
}
|
|
95
|
-
select.value = selected;
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
select.value = "";
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
function updateNetworkVisibility() {
|
|
102
|
-
if (!ui.networkRow || !ui.sandboxSelect)
|
|
103
|
-
return;
|
|
104
|
-
const show = ui.sandboxSelect.value === "workspaceWrite";
|
|
105
|
-
ui.networkRow.classList.toggle("hidden", !show);
|
|
106
|
-
}
|
|
107
|
-
async function loadModels() {
|
|
108
|
-
try {
|
|
109
|
-
const data = await api("/api/app-server/models");
|
|
110
|
-
modelsCache = normalizeModels(data);
|
|
111
|
-
}
|
|
112
|
-
catch (err) {
|
|
113
|
-
modelsCache = [];
|
|
114
|
-
const error = err;
|
|
115
|
-
flash(error.message || "Failed to load models", "error");
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
async function loadSessionSettings() {
|
|
119
|
-
const data = await api("/api/session/settings");
|
|
120
|
-
currentSettings = data;
|
|
121
|
-
return data;
|
|
122
|
-
}
|
|
123
|
-
function renderSettings(settings) {
|
|
124
|
-
if (!settings)
|
|
125
|
-
return;
|
|
126
|
-
const modelOptions = modelsCache
|
|
127
|
-
.map((model) => {
|
|
128
|
-
const id = getModelId(model);
|
|
129
|
-
return id ? { value: id, label: id } : null;
|
|
130
|
-
})
|
|
131
|
-
.filter((opt) => opt !== null);
|
|
132
|
-
setOptions(ui.modelSelect, modelOptions, settings.autorunner_model_override, "Default model");
|
|
133
|
-
const selectedModelId = ui.modelSelect?.value || settings.autorunner_model_override;
|
|
134
|
-
const selectedModel = modelsCache.find((model) => getModelId(model) === selectedModelId) || null;
|
|
135
|
-
const efforts = getModelEfforts(selectedModel) || [...DEFAULT_EFFORTS];
|
|
136
|
-
const effortOptions = efforts.map((effort) => ({
|
|
137
|
-
value: effort,
|
|
138
|
-
label: effort,
|
|
139
|
-
}));
|
|
140
|
-
setOptions(ui.effortSelect, effortOptions, settings.autorunner_effort_override, "Default effort");
|
|
141
|
-
setOptions(ui.approvalSelect, [
|
|
142
|
-
{ value: "never", label: "Never" },
|
|
143
|
-
{ value: "unlessTrusted", label: "Unless trusted" },
|
|
144
|
-
], settings.autorunner_approval_policy, "Default approval");
|
|
145
|
-
setOptions(ui.sandboxSelect, [
|
|
146
|
-
{ value: "dangerFullAccess", label: "Full access" },
|
|
147
|
-
{ value: "workspaceWrite", label: "Workspace write" },
|
|
148
|
-
], settings.autorunner_sandbox_mode, "Default sandbox");
|
|
149
|
-
if (ui.networkToggle) {
|
|
150
|
-
ui.networkToggle.checked = Boolean(settings.autorunner_workspace_write_network);
|
|
151
|
-
}
|
|
152
|
-
if (ui.maxRunsInput) {
|
|
153
|
-
const maxRuns = settings.runner_stop_after_runs;
|
|
154
|
-
ui.maxRunsInput.value = maxRuns ? String(maxRuns) : "";
|
|
155
|
-
}
|
|
156
|
-
updateNetworkVisibility();
|
|
157
|
-
}
|
|
158
|
-
async function saveSettings() {
|
|
159
|
-
if (!ui.saveBtn)
|
|
160
|
-
return;
|
|
161
|
-
ui.saveBtn.disabled = true;
|
|
162
|
-
ui.saveBtn.classList.add("loading");
|
|
163
|
-
try {
|
|
164
|
-
const payload = {
|
|
165
|
-
autorunner_model_override: ui.modelSelect?.value || null,
|
|
166
|
-
autorunner_effort_override: ui.effortSelect?.value || null,
|
|
167
|
-
autorunner_approval_policy: ui.approvalSelect?.value || null,
|
|
168
|
-
autorunner_sandbox_mode: ui.sandboxSelect?.value || null,
|
|
169
|
-
autorunner_workspace_write_network: Boolean(ui.networkToggle?.checked),
|
|
170
|
-
runner_stop_after_runs: ui.maxRunsInput?.value ? parseInt(ui.maxRunsInput.value, 10) : null,
|
|
171
|
-
};
|
|
172
|
-
const data = await api("/api/session/settings", {
|
|
173
|
-
method: "POST",
|
|
174
|
-
body: payload,
|
|
175
|
-
});
|
|
176
|
-
currentSettings = data;
|
|
177
|
-
flash("Autorunner settings saved", "success");
|
|
178
|
-
}
|
|
179
|
-
catch (err) {
|
|
180
|
-
const error = err;
|
|
181
|
-
flash(error.message || "Failed to save settings", "error");
|
|
182
|
-
}
|
|
183
|
-
finally {
|
|
184
|
-
ui.saveBtn.disabled = false;
|
|
185
|
-
ui.saveBtn.classList.remove("loading");
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
11
|
function renderThreadTools(data) {
|
|
189
12
|
if (!ui.threadList)
|
|
190
13
|
return;
|
|
@@ -197,17 +20,25 @@ function renderThreadTools(data) {
|
|
|
197
20
|
if (data.autorunner !== undefined) {
|
|
198
21
|
entries.push({ label: "Autorunner", value: data.autorunner || "—" });
|
|
199
22
|
}
|
|
200
|
-
if (data.
|
|
201
|
-
entries.push({ label: "
|
|
23
|
+
if (data.file_chat !== undefined) {
|
|
24
|
+
entries.push({ label: "File chat", value: data.file_chat || "—" });
|
|
202
25
|
}
|
|
203
|
-
if (data.
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
value: data.doc_chat[key] || "—",
|
|
208
|
-
});
|
|
26
|
+
if (data.file_chat_opencode !== undefined) {
|
|
27
|
+
entries.push({
|
|
28
|
+
label: "File chat (opencode)",
|
|
29
|
+
value: data.file_chat_opencode || "—",
|
|
209
30
|
});
|
|
210
31
|
}
|
|
32
|
+
// Render any additional string/number keys to avoid hiding future entries.
|
|
33
|
+
Object.keys(data).forEach((key) => {
|
|
34
|
+
if (["autorunner", "file_chat", "file_chat_opencode", "corruption"].includes(key)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const value = data[key];
|
|
38
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
39
|
+
entries.push({ label: key, value: value || "—" });
|
|
40
|
+
}
|
|
41
|
+
});
|
|
211
42
|
if (!entries.length) {
|
|
212
43
|
ui.threadList.textContent = "No threads recorded.";
|
|
213
44
|
return;
|
|
@@ -239,9 +70,6 @@ async function loadThreadTools() {
|
|
|
239
70
|
}
|
|
240
71
|
}
|
|
241
72
|
async function refreshSettings() {
|
|
242
|
-
await loadModels();
|
|
243
|
-
const settings = await loadSessionSettings();
|
|
244
|
-
renderSettings(settings);
|
|
245
73
|
await loadThreadTools();
|
|
246
74
|
}
|
|
247
75
|
export function initRepoSettingsPanel() {
|
|
@@ -250,28 +78,6 @@ export function initRepoSettingsPanel() {
|
|
|
250
78
|
refreshSettings();
|
|
251
79
|
});
|
|
252
80
|
}
|
|
253
|
-
if (ui.modelSelect) {
|
|
254
|
-
ui.modelSelect.addEventListener("change", () => {
|
|
255
|
-
if (!currentSettings)
|
|
256
|
-
return;
|
|
257
|
-
const currentEffort = ui.effortSelect?.value || null;
|
|
258
|
-
const updated = {
|
|
259
|
-
...currentSettings,
|
|
260
|
-
autorunner_model_override: ui.modelSelect.value || null,
|
|
261
|
-
autorunner_effort_override: currentEffort || currentSettings.autorunner_effort_override,
|
|
262
|
-
};
|
|
263
|
-
renderSettings(updated);
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
if (ui.sandboxSelect) {
|
|
267
|
-
ui.sandboxSelect.addEventListener("change", updateNetworkVisibility);
|
|
268
|
-
}
|
|
269
|
-
if (ui.saveBtn) {
|
|
270
|
-
ui.saveBtn.addEventListener("click", () => saveSettings());
|
|
271
|
-
}
|
|
272
|
-
if (ui.reloadBtn) {
|
|
273
|
-
ui.reloadBtn.addEventListener("click", () => refreshSettings());
|
|
274
|
-
}
|
|
275
81
|
if (ui.threadNew) {
|
|
276
82
|
ui.threadNew.addEventListener("click", async () => {
|
|
277
83
|
try {
|
|
@@ -338,4 +144,11 @@ export function initRepoSettingsPanel() {
|
|
|
338
144
|
window.location.href = resolvePath("/api/app-server/threads/backup");
|
|
339
145
|
});
|
|
340
146
|
}
|
|
147
|
+
// Clear cached logs since log loading is no longer available
|
|
148
|
+
try {
|
|
149
|
+
localStorage.removeItem("logs:tail");
|
|
150
|
+
}
|
|
151
|
+
catch (_err) {
|
|
152
|
+
// ignore
|
|
153
|
+
}
|
|
341
154
|
}
|