@codexhost/cli-win32-x64 0.1.4 → 0.1.5
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.
- package/README.md +1 -1
- package/app/codexhost-distribution.json +1 -1
- package/app/desktop-controller.mjs +37 -2
- package/app/host-runtime.mjs +1 -2
- package/app/renderer-extension.js +59 -25
- package/bin/codexhost.exe +0 -0
- package/libexec/codexhost-shim.exe +0 -0
- package/libexec/codexhost-updater.exe +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Run Pi and Claude Code as first-class external harnesses inside Codex Desktop.
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install -g @codexhost/cli@0.1.
|
|
10
|
+
npm install -g @codexhost/cli@0.1.5
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
Do not install this package directly. npm selects it through the optional dependencies of `@codexhost/cli`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"schemaVersion":1,"version":"0.1.
|
|
1
|
+
{"schemaVersion":1,"version":"0.1.5","distribution":"npm","target":"windows-x64"}
|
|
@@ -1087,15 +1087,27 @@ var InstalledRendererControlSession = class {
|
|
|
1087
1087
|
this.inspector.close();
|
|
1088
1088
|
}
|
|
1089
1089
|
};
|
|
1090
|
+
var startupTraceStartedAt = Date.now();
|
|
1091
|
+
function startupTrace(stage) {
|
|
1092
|
+
if (process.env.CODEXHOST_STARTUP_TRACE !== "1") return;
|
|
1093
|
+
console.error(
|
|
1094
|
+
`[codexhost startup +${Date.now() - startupTraceStartedAt}ms] renderer-session: ${stage}`
|
|
1095
|
+
);
|
|
1096
|
+
}
|
|
1090
1097
|
async function createRendererControlSession(options) {
|
|
1091
1098
|
const enabledAgents = options.enabledAgents ?? ["codex", "pi"];
|
|
1092
1099
|
const timeoutMs = options.timeoutMs ?? 3e4;
|
|
1093
1100
|
const pollIntervalMs = options.pollIntervalMs ?? 250;
|
|
1094
1101
|
const operations = options.operations ?? defaultOperations;
|
|
1102
|
+
startupTrace("waiting for initial Renderer");
|
|
1095
1103
|
const initial = await waitForRenderer(options.inspector, operations, timeoutMs, pollIntervalMs);
|
|
1104
|
+
startupTrace("installing title policy");
|
|
1096
1105
|
const titlePolicy = await operations.installTitlePolicy(options.inspector, initial.id);
|
|
1106
|
+
startupTrace("reloading Renderer");
|
|
1097
1107
|
await operations.reload(options.inspector, initial.id);
|
|
1108
|
+
startupTrace("waiting for reloaded Renderer");
|
|
1098
1109
|
const selected = await waitForRenderer(options.inspector, operations, timeoutMs, pollIntervalMs);
|
|
1110
|
+
startupTrace("waiting for title policy readiness");
|
|
1099
1111
|
const titlePolicyReadiness = await waitForRendererTitlePolicyReady(
|
|
1100
1112
|
() => operations.markTitlePolicyReady(options.inspector, selected.id),
|
|
1101
1113
|
{
|
|
@@ -1103,7 +1115,9 @@ async function createRendererControlSession(options) {
|
|
|
1103
1115
|
pollIntervalMs
|
|
1104
1116
|
}
|
|
1105
1117
|
);
|
|
1118
|
+
startupTrace("injecting Renderer bundle");
|
|
1106
1119
|
await operations.execute(options.inspector, selected.id, options.rendererSource);
|
|
1120
|
+
startupTrace("waiting for Renderer binding");
|
|
1107
1121
|
const binding = await waitForBinding(
|
|
1108
1122
|
options.inspector,
|
|
1109
1123
|
operations,
|
|
@@ -1112,6 +1126,7 @@ async function createRendererControlSession(options) {
|
|
|
1112
1126
|
timeoutMs,
|
|
1113
1127
|
pollIntervalMs
|
|
1114
1128
|
);
|
|
1129
|
+
startupTrace("installing draft prewarm policy");
|
|
1115
1130
|
const draftPrewarmPolicy = await operations.installDraftPrewarmPolicy(
|
|
1116
1131
|
options.inspector,
|
|
1117
1132
|
selected.id
|
|
@@ -1135,12 +1150,15 @@ async function createRendererControlSession(options) {
|
|
|
1135
1150
|
async function installRendererControlSession(options) {
|
|
1136
1151
|
const timeoutMs = options.timeoutMs ?? 3e4;
|
|
1137
1152
|
const pollIntervalMs = options.pollIntervalMs ?? 250;
|
|
1153
|
+
startupTrace("waiting for Electron Inspector target");
|
|
1138
1154
|
const target = await waitForInspectorTarget(options.inspectorEndpoint, {
|
|
1139
1155
|
timeoutMs,
|
|
1140
1156
|
pollIntervalMs
|
|
1141
1157
|
});
|
|
1158
|
+
startupTrace("connecting to Electron Inspector");
|
|
1142
1159
|
const inspector = await CdpClient.connect(target.webSocketDebuggerUrl);
|
|
1143
1160
|
try {
|
|
1161
|
+
startupTrace("enabling Inspector Runtime domain");
|
|
1144
1162
|
await inspector.command("Runtime.enable");
|
|
1145
1163
|
return await createRendererControlSession({
|
|
1146
1164
|
...options,
|
|
@@ -1161,6 +1179,14 @@ var TRANSIENT_INSTALL_ATTEMPTS = 3;
|
|
|
1161
1179
|
var TRANSIENT_INSTALL_RETRY_MS = 250;
|
|
1162
1180
|
var RECOVERY_RETRY_INITIAL_MS = 3e4;
|
|
1163
1181
|
var RECOVERY_RETRY_MAX_MS = 3e5;
|
|
1182
|
+
var startupTraceStartedAt2 = Date.now();
|
|
1183
|
+
function startupTrace2(stage, detail) {
|
|
1184
|
+
if (process.env.CODEXHOST_STARTUP_TRACE !== "1") return;
|
|
1185
|
+
const suffix = detail === void 0 ? "" : `: ${detail instanceof Error ? detail.message : String(detail)}`;
|
|
1186
|
+
console.error(
|
|
1187
|
+
`[codexhost startup +${Date.now() - startupTraceStartedAt2}ms] controller: ${stage}${suffix}`
|
|
1188
|
+
);
|
|
1189
|
+
}
|
|
1164
1190
|
function validCompatibilityIssue(state, issue) {
|
|
1165
1191
|
const keys = Object.keys(issue);
|
|
1166
1192
|
if (state === "compatible-with-warning") {
|
|
@@ -1316,9 +1342,11 @@ async function runDesktopController(options, signal, dependencies = defaultDepen
|
|
|
1316
1342
|
recoveryDelayMs = RECOVERY_RETRY_INITIAL_MS;
|
|
1317
1343
|
};
|
|
1318
1344
|
const createSession = async () => {
|
|
1345
|
+
startupTrace2("reading Renderer bundle");
|
|
1319
1346
|
const rendererSource = await dependencies.readRenderer(options.rendererPath);
|
|
1320
1347
|
if (rendererSource.trim().length === 0) throw new Error("production Renderer Bundle is empty");
|
|
1321
|
-
|
|
1348
|
+
startupTrace2("installing Renderer Session");
|
|
1349
|
+
const installed = await installProductionSession(
|
|
1322
1350
|
{
|
|
1323
1351
|
inspectorEndpoint: options.inspectorEndpoint,
|
|
1324
1352
|
rendererSource: `${configuration}
|
|
@@ -1328,11 +1356,15 @@ ${rendererSource}`,
|
|
|
1328
1356
|
},
|
|
1329
1357
|
dependencies
|
|
1330
1358
|
);
|
|
1359
|
+
startupTrace2("Renderer Session installed");
|
|
1360
|
+
return installed;
|
|
1331
1361
|
};
|
|
1362
|
+
startupTrace2("initialization started");
|
|
1332
1363
|
try {
|
|
1333
1364
|
session = await createSession();
|
|
1334
1365
|
recordRecoverySuccess();
|
|
1335
|
-
} catch {
|
|
1366
|
+
} catch (error) {
|
|
1367
|
+
startupTrace2("initial Renderer Session unavailable", error);
|
|
1336
1368
|
session = void 0;
|
|
1337
1369
|
recordRecoveryFailure();
|
|
1338
1370
|
}
|
|
@@ -1367,6 +1399,7 @@ ${rendererSource}`,
|
|
|
1367
1399
|
};
|
|
1368
1400
|
let attachmentServer;
|
|
1369
1401
|
try {
|
|
1402
|
+
startupTrace2("starting attachment server");
|
|
1370
1403
|
attachmentServer = await dependencies.startAttachmentServer({
|
|
1371
1404
|
port: options.attachmentPort,
|
|
1372
1405
|
nonce: options.attachmentNonce,
|
|
@@ -1383,7 +1416,9 @@ ${rendererSource}`,
|
|
|
1383
1416
|
await current.quitDesktop();
|
|
1384
1417
|
})
|
|
1385
1418
|
});
|
|
1419
|
+
startupTrace2("attachment server ready");
|
|
1386
1420
|
const issues = session?.snapshot.titlePolicy.warnings ?? [];
|
|
1421
|
+
startupTrace2("publishing readiness");
|
|
1387
1422
|
dependencies.ready({
|
|
1388
1423
|
schemaVersion: 2,
|
|
1389
1424
|
state: issues.length === 0 ? "compatible" : "compatible-with-warning",
|
package/app/host-runtime.mjs
CHANGED
|
@@ -53101,8 +53101,7 @@ function createBackgroundUpdateManager(dependencies = {}) {
|
|
|
53101
53101
|
kind: "npm",
|
|
53102
53102
|
node_path: await requireRegularFile(options.nodePath, "npm Node.js executable"),
|
|
53103
53103
|
npm_cli_path: await requireRegularFile(options.npmCliPath, "npm CLI"),
|
|
53104
|
-
npm_launcher_path: await requireRegularFile(options.npmLauncherPath, "npm codexhost launcher")
|
|
53105
|
-
package_root: requireAbsolutePath(options.packageRoot, "npm platform package root")
|
|
53104
|
+
npm_launcher_path: await requireRegularFile(options.npmLauncherPath, "npm codexhost launcher")
|
|
53106
53105
|
});
|
|
53107
53106
|
} catch (error52) {
|
|
53108
53107
|
await writeFailedStatus(common.statusPath, common.version, "npm", error52);
|
|
@@ -18168,15 +18168,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18168
18168
|
locale: "en",
|
|
18169
18169
|
title: "Settings",
|
|
18170
18170
|
close: "Close settings",
|
|
18171
|
-
|
|
18172
|
-
automaticLanguage: "Automatic (follow Codex)",
|
|
18173
|
-
englishLanguage: "English",
|
|
18174
|
-
simplifiedChineseLanguage: "Simplified Chinese",
|
|
18175
|
-
otherCodexLanguage: "Other Codex language",
|
|
18176
|
-
languageUpdateFailed: "Could not update the language setting.",
|
|
18171
|
+
starOnGitHub: "Give us a Star~",
|
|
18177
18172
|
sectionsLabel: "Settings sections",
|
|
18178
18173
|
pageUnavailable: "Page unavailable",
|
|
18179
|
-
|
|
18174
|
+
inDevelopment: "In development",
|
|
18180
18175
|
notAvailable: "Not available",
|
|
18181
18176
|
runtimeCapabilityNotInstalled: "This runtime capability is not installed yet.",
|
|
18182
18177
|
openSettings: "Open codexhost settings",
|
|
@@ -18195,11 +18190,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18195
18190
|
updateChecking: "Checking for updates...",
|
|
18196
18191
|
updateDownloading: "Downloading update...",
|
|
18197
18192
|
updatePreparing: "Preparing update...",
|
|
18193
|
+
updateWaitingForExit: "Waiting for the application to close...",
|
|
18194
|
+
updateInstalling: "Installing update...",
|
|
18195
|
+
updateInstallingNpm: "Installing update through npm...",
|
|
18198
18196
|
updateRequestTimeout: "The update service did not respond. Try again.",
|
|
18199
18197
|
updateRestarting: "Restarting to finish the update...",
|
|
18200
18198
|
updateSucceeded: "Update installed successfully.",
|
|
18201
18199
|
updateFailed: "Update failed.",
|
|
18202
18200
|
updateRetry: "Retry",
|
|
18201
|
+
updateManualNpmDescription: "To update manually, quit codexhost and run this command:",
|
|
18203
18202
|
updateDownloadFromReleases: "Download from GitHub Releases",
|
|
18204
18203
|
pageLabels: Object.freeze({
|
|
18205
18204
|
connections: "Connections",
|
|
@@ -18213,15 +18212,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18213
18212
|
locale: "zh-CN",
|
|
18214
18213
|
title: "\u8BBE\u7F6E",
|
|
18215
18214
|
close: "\u5173\u95ED\u8BBE\u7F6E",
|
|
18216
|
-
|
|
18217
|
-
automaticLanguage: "\u81EA\u52A8\uFF08\u8DDF\u968F Codex\uFF09",
|
|
18218
|
-
englishLanguage: "English",
|
|
18219
|
-
simplifiedChineseLanguage: "\u7B80\u4F53\u4E2D\u6587",
|
|
18220
|
-
otherCodexLanguage: "\u5176\u4ED6 Codex \u8BED\u8A00",
|
|
18221
|
-
languageUpdateFailed: "\u65E0\u6CD5\u66F4\u65B0\u8BED\u8A00\u8BBE\u7F6E\u3002",
|
|
18215
|
+
starOnGitHub: "\u70B9\u4E2A Star~",
|
|
18222
18216
|
sectionsLabel: "\u8BBE\u7F6E\u5206\u7C7B",
|
|
18223
18217
|
pageUnavailable: "\u9875\u9762\u4E0D\u53EF\u7528",
|
|
18224
|
-
|
|
18218
|
+
inDevelopment: "\u5F00\u53D1\u4E2D",
|
|
18225
18219
|
notAvailable: "\u6682\u4E0D\u53EF\u7528",
|
|
18226
18220
|
runtimeCapabilityNotInstalled: "\u8FD0\u884C\u65F6\u5C1A\u672A\u5B89\u88C5\u8BE5\u9879\u80FD\u529B\uFF0C\u56E0\u6B64\u6682\u4E0D\u53EF\u7528\u3002",
|
|
18227
18221
|
openSettings: "\u6253\u5F00 codexhost \u8BBE\u7F6E",
|
|
@@ -18240,11 +18234,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18240
18234
|
updateChecking: "\u6B63\u5728\u68C0\u67E5\u66F4\u65B0...",
|
|
18241
18235
|
updateDownloading: "\u6B63\u5728\u4E0B\u8F7D\u66F4\u65B0...",
|
|
18242
18236
|
updatePreparing: "\u6B63\u5728\u51C6\u5907\u66F4\u65B0...",
|
|
18237
|
+
updateWaitingForExit: "\u6B63\u5728\u7B49\u5F85\u5E94\u7528\u9000\u51FA...",
|
|
18238
|
+
updateInstalling: "\u6B63\u5728\u5B89\u88C5\u66F4\u65B0...",
|
|
18239
|
+
updateInstallingNpm: "\u6B63\u5728\u901A\u8FC7 npm \u5B89\u88C5...",
|
|
18243
18240
|
updateRequestTimeout: "\u66F4\u65B0\u670D\u52A1\u672A\u54CD\u5E94\uFF0C\u8BF7\u91CD\u8BD5\u3002",
|
|
18244
18241
|
updateRestarting: "\u6B63\u5728\u91CD\u542F\u4EE5\u5B8C\u6210\u66F4\u65B0...",
|
|
18245
18242
|
updateSucceeded: "\u66F4\u65B0\u5B89\u88C5\u6210\u529F\u3002",
|
|
18246
18243
|
updateFailed: "\u66F4\u65B0\u5931\u8D25\u3002",
|
|
18247
18244
|
updateRetry: "\u91CD\u8BD5",
|
|
18245
|
+
updateManualNpmDescription: "\u5982\u9700\u624B\u52A8\u66F4\u65B0\uFF0C\u8BF7\u5728\u7EC8\u7AEF\u8FD0\u884C\u4EE5\u4E0B\u547D\u4EE4\u3002\u66F4\u65B0\u5B8C\u6210\u540E\uFF0C\u8BF7\u9000\u51FA Codex \u5E76\u901A\u8FC7 codexhost \u91CD\u65B0\u542F\u52A8\u3002",
|
|
18248
18246
|
updateDownloadFromReleases: "\u524D\u5F80 GitHub Releases \u4E0B\u8F7D",
|
|
18249
18247
|
pageLabels: Object.freeze({
|
|
18250
18248
|
connections: "\u8FDE\u63A5",
|
|
@@ -18380,6 +18378,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18380
18378
|
["circle", { cx: "12", cy: "12", r: "3" }]
|
|
18381
18379
|
];
|
|
18382
18380
|
|
|
18381
|
+
// ../../node_modules/lucide/dist/esm/icons/star.mjs
|
|
18382
|
+
var Star = [
|
|
18383
|
+
[
|
|
18384
|
+
"path",
|
|
18385
|
+
{
|
|
18386
|
+
d: "M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"
|
|
18387
|
+
}
|
|
18388
|
+
]
|
|
18389
|
+
];
|
|
18390
|
+
|
|
18383
18391
|
// ../../node_modules/lucide/dist/esm/icons/x.mjs
|
|
18384
18392
|
var X = [
|
|
18385
18393
|
["path", { d: "M18 6 6 18" }],
|
|
@@ -18393,6 +18401,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18393
18401
|
var RENDERER_SETTINGS_ICON_NAMES = [
|
|
18394
18402
|
"settings",
|
|
18395
18403
|
"close",
|
|
18404
|
+
"star",
|
|
18396
18405
|
"language",
|
|
18397
18406
|
"connections",
|
|
18398
18407
|
"model-pool",
|
|
@@ -18406,6 +18415,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18406
18415
|
var iconNodes = {
|
|
18407
18416
|
settings: Settings,
|
|
18408
18417
|
close: X,
|
|
18418
|
+
star: Star,
|
|
18409
18419
|
language: Languages,
|
|
18410
18420
|
connections: PlugZap,
|
|
18411
18421
|
"model-pool": Boxes,
|
|
@@ -18592,6 +18602,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18592
18602
|
|
|
18593
18603
|
// src/settings/pages.ts
|
|
18594
18604
|
var CODEXHOST_RELEASES_LATEST_URL = "https://github.com/BytePioneer-AI/codex-host/releases/latest";
|
|
18605
|
+
var CODEXHOST_NPM_MANUAL_UPDATE_COMMAND = "npm install -g @codexhost/cli@latest";
|
|
18595
18606
|
var DEFAULT_RENDERER_SETTINGS_PAGE_IDS = [
|
|
18596
18607
|
"connections",
|
|
18597
18608
|
"model-pool",
|
|
@@ -18600,19 +18611,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18600
18611
|
"updates"
|
|
18601
18612
|
];
|
|
18602
18613
|
function appendUnavailableStatus(content, messages) {
|
|
18603
|
-
const heading = content.ownerDocument.createElement("div");
|
|
18604
|
-
heading.className = "settings-section-label";
|
|
18605
|
-
heading.textContent = messages.availability;
|
|
18606
18614
|
const status = content.ownerDocument.createElement("div");
|
|
18607
18615
|
status.className = "settings-empty";
|
|
18608
18616
|
const copy = content.ownerDocument.createElement("div");
|
|
18609
18617
|
const title = content.ownerDocument.createElement("strong");
|
|
18610
|
-
title.textContent = messages.
|
|
18611
|
-
|
|
18612
|
-
detail.textContent = messages.runtimeCapabilityNotInstalled;
|
|
18613
|
-
copy.append(title, detail);
|
|
18618
|
+
title.textContent = messages.inDevelopment;
|
|
18619
|
+
copy.append(title);
|
|
18614
18620
|
status.append(copy);
|
|
18615
|
-
content.append(
|
|
18621
|
+
content.append(status);
|
|
18616
18622
|
}
|
|
18617
18623
|
function unavailablePage(id, messages) {
|
|
18618
18624
|
return Object.freeze({
|
|
@@ -18650,6 +18656,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18650
18656
|
if (!status) return null;
|
|
18651
18657
|
if (status.phase === "succeeded") return messages.updateSucceeded;
|
|
18652
18658
|
if (status.phase === "failed") return status.error ?? messages.updateFailed;
|
|
18659
|
+
if (status.phase === "waiting-for-exit") return messages.updateWaitingForExit;
|
|
18660
|
+
if (status.phase === "installing") {
|
|
18661
|
+
return status.installation === "npm" ? messages.updateInstallingNpm : messages.updateInstalling;
|
|
18662
|
+
}
|
|
18653
18663
|
if (status.phase === "restarting") return messages.updateRestarting;
|
|
18654
18664
|
if (status.phase === "downloading") return messages.updateDownloading;
|
|
18655
18665
|
return messages.updatePreparing;
|
|
@@ -18696,6 +18706,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18696
18706
|
const panel = document2.createElement("section");
|
|
18697
18707
|
panel.className = "settings-update-panel";
|
|
18698
18708
|
panel.setAttribute("aria-live", "polite");
|
|
18709
|
+
const manualNpm = document2.createElement("div");
|
|
18710
|
+
manualNpm.className = "settings-update-manual";
|
|
18711
|
+
manualNpm.hidden = true;
|
|
18712
|
+
const manualNpmDescription = document2.createElement("span");
|
|
18713
|
+
manualNpmDescription.textContent = messages.updateManualNpmDescription;
|
|
18714
|
+
const manualNpmCommand = document2.createElement("code");
|
|
18715
|
+
manualNpmCommand.textContent = CODEXHOST_NPM_MANUAL_UPDATE_COMMAND;
|
|
18716
|
+
manualNpm.append(manualNpmDescription, manualNpmCommand);
|
|
18699
18717
|
const actions = document2.createElement("div");
|
|
18700
18718
|
actions.className = "settings-update-actions";
|
|
18701
18719
|
const releaseLink = document2.createElement("a");
|
|
@@ -18708,7 +18726,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18708
18726
|
createRendererSettingsIcon("external-link", 14)
|
|
18709
18727
|
);
|
|
18710
18728
|
actions.append(releaseLink);
|
|
18711
|
-
context.content.append(heading, metadata, panel, actions);
|
|
18729
|
+
context.content.append(heading, metadata, panel, manualNpm, actions);
|
|
18712
18730
|
let pollTimer;
|
|
18713
18731
|
let pollAttempts = 0;
|
|
18714
18732
|
let pending = false;
|
|
@@ -18813,6 +18831,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18813
18831
|
const renderCheck = (result, client) => {
|
|
18814
18832
|
currentVersionValue.textContent = `v${result.currentVersion}`;
|
|
18815
18833
|
installationValue.textContent = installationLabel(result.installation, messages);
|
|
18834
|
+
manualNpm.hidden = result.installation !== "npm";
|
|
18816
18835
|
if (result.releaseNotesUrl) releaseLink.href = result.releaseNotesUrl;
|
|
18817
18836
|
const operationMessage = statusMessage(result.status, messages);
|
|
18818
18837
|
if (isPendingStatus(result.status)) {
|
|
@@ -18904,10 +18923,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18904
18923
|
}
|
|
18905
18924
|
|
|
18906
18925
|
// src/settings/shell.css
|
|
18907
|
-
var shell_default = ':host {\n --settings-bg: #181818;\n --settings-sidebar: #1c1c1c;\n --settings-panel: transparent;\n --settings-text: #f5f5f5;\n --settings-muted: #a1a1a1;\n --settings-border: rgb(255 255 255 / 10%);\n --settings-divider: rgb(255 255 255 / 10%);\n --settings-hover: rgb(255 255 255 / 6%);\n --settings-active: rgb(51 156 255 / 12%);\n --settings-focus: #339cff;\n color: var(--settings-text);\n color-scheme: dark;\n font:\n 14px/1.5 system-ui,\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n sans-serif;\n letter-spacing: 0;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n letter-spacing: 0;\n}\n\nbutton,\ninput,\nselect {\n font: inherit;\n}\n\nbutton {\n color: inherit;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.codexhost-settings-dialog {\n width: min(1120px, calc(100vw - 32px));\n height: min(780px, calc(100vh - 32px));\n max-width: none;\n max-height: none;\n margin: auto;\n padding: 0;\n overflow: hidden;\n color: var(--settings-text);\n background: var(--settings-bg);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n box-shadow: 0 24px 64px rgb(0 0 0 / 38%);\n}\n\n.codexhost-settings-dialog::backdrop {\n background: rgb(0 0 0 / 52%);\n}\n\n.settings-frame,\n.settings-layout {\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.settings-frame {\n display: flex;\n flex-direction: column;\n}\n\n.settings-layout {\n flex: 1;\n display: grid;\n grid-template-columns: 240px minmax(0, 1fr);\n background: var(--settings-bg);\n}\n\n.settings-sidebar {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n background: var(--settings-sidebar);\n border-right: 1px solid var(--settings-border);\n padding-top: 28px;\n}\n\n.settings-header {\n display: flex;\n align-items: center;\n min-width: 0;\n height: 64px;\n flex: none;\n padding: 0 16px;\n border-bottom: 1px solid var(--settings-border);\n}\n\n.settings-brand {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 8px;\n}\n\n.settings-brand__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n flex: none;\n color: var(--settings-text);\n}\n\n.settings-brand__mark .codexhost-settings-icon {\n width: 32px;\n height: 32px;\n object-fit: contain;\n}\n\n.settings-brand__copy {\n display: flex;\n min-width: 0;\n align-items: baseline;\n gap: 0;\n line-height: 20px;\n}\n\n.settings-brand__name {\n overflow: hidden;\n color: var(--settings-text);\n font-size: 14px;\n font-weight: 500;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-brand__title {\n margin-left: 14px;\n padding-left: 14px;\n color: var(--settings-muted);\n font-size: 14px;\n font-weight: 400;\n border-left: 1px solid var(--settings-border);\n}\n\n.settings-nav {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n gap: 4px;\n padding: 0 12px 16px;\n overflow-y: auto;\n}\n\n.settings-nav-button {\n display: grid;\n grid-template-columns: 16px minmax(0, 1fr);\n align-items: center;\n width: 100%;\n position: relative;\n min-height: 40px;\n flex: none;\n gap: 12px;\n padding: 8px 12px;\n color: var(--settings-text);\n font-size: 14px;\n line-height: 21px;\n text-align: left;\n background: transparent;\n border: 0;\n border-radius: 10px;\n cursor: pointer;\n}\n\n.settings-nav-button .codexhost-settings-icon {\n width: 18px;\n height: 18px;\n opacity: 0.9;\n}\n\n.settings-nav-button:hover {\n background: var(--settings-hover);\n}\n\n.settings-nav-button[aria-current="page"] {\n background: var(--settings-active);\n color: var(--settings-focus);\n}\n\n.settings-nav-button[aria-current="page"]::before {\n position: absolute;\n left: 0;\n width: 3px;\n height: 22px;\n content: "";\n background: var(--settings-focus);\n border-radius: 0 3px 3px 0;\n}\n\n.settings-nav-button span {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex: none;\n padding: 0;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-icon-button:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-icon-button:focus-visible,\n.settings-nav-button:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 1px;\n}\n\n.settings-page {\n display: block;\n position: relative;\n min-width: 0;\n min-height: 0;\n overflow-y: auto;\n background: var(--settings-bg);\n scrollbar-gutter: stable;\n}\n\n.settings-page__content {\n width: min(930px, calc(100% - 80px));\n margin-inline: auto;\n}\n\n.settings-page__content {\n min-width: 0;\n padding: 44px 0 56px;\n}\n\n.settings-section-label {\n min-height: auto;\n padding: 0 0 28px;\n color: var(--settings-text);\n font-size: 24px;\n font-weight: 600;\n line-height: 30px;\n}\n\n.settings-status-list,\n.settings-empty {\n overflow: hidden;\n background: var(--settings-panel);\n}\n\n.settings-status-row {\n display: grid;\n grid-template-columns: minmax(170px, 1fr) auto minmax(280px, 1.45fr);\n position: relative;\n align-items: center;\n min-height: 88px;\n gap: 28px;\n padding: 16px 0;\n}\n\n.settings-status-row:not(:last-child)::after {\n content: "";\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 1px;\n background: var(--settings-divider);\n}\n\n.settings-status-row__identity {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n color: var(--settings-text);\n gap: 14px;\n font-size: 15px;\n font-weight: 500;\n line-height: 22px;\n}\n\n.settings-status-row__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n flex: none;\n color: var(--settings-muted);\n background: rgb(255 255 255 / 7%);\n border-radius: 50%;\n}\n\n.settings-status-badge {\n flex: none;\n padding: 5px 12px;\n color: var(--settings-muted);\n font-size: 13px;\n font-weight: 500;\n line-height: 18px;\n background: rgb(255 255 255 / 9%);\n border: 1px solid rgb(255 255 255 / 6%);\n border-radius: 6px;\n}\n\n.settings-status-row__detail {\n min-width: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-empty {\n display: flex;\n align-items: center;\n min-height: 72px;\n padding: 12px 16px;\n}\n\n.settings-empty > div {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n\n.settings-empty strong {\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 500;\n line-height: 19px;\n}\n\n.settings-empty span {\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 19px;\n}\n\n.settings-page-error {\n padding: 16px;\n color: var(--settings-text);\n font-size: 13px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 20px;\n}\n\n.settings-update-metadata {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 24px;\n margin-bottom: 24px;\n padding: 0 4px 20px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-update-metadata__item {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-update-metadata__item span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-metadata__item strong {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 500;\n line-height: 22px;\n}\n\n.settings-update-panel {\n display: grid;\n gap: 16px;\n min-height: 128px;\n padding: 20px;\n color: var(--settings-text);\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-update-panel > strong,\n.settings-update-panel > span,\n.settings-update-summary,\n.settings-update-error {\n margin: 0;\n overflow-wrap: anywhere;\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-update-panel > span,\n.settings-update-summary {\n color: var(--settings-muted);\n}\n\n.settings-update-error {\n color: #ef4444;\n}\n\n.settings-update-progress {\n width: 100%;\n height: 8px;\n accent-color: #238be8;\n}\n\n.settings-update-progress-detail {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-notes {\n max-height: 240px;\n padding: 14px;\n overflow: auto;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n background: rgb(255 255 255 / 4%);\n border: 1px solid var(--settings-divider);\n border-radius: 6px;\n}\n\n.settings-update-version-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n gap: 20px;\n min-height: 32px;\n color: var(--settings-muted);\n font-size: 13px;\n}\n\n.settings-update-version-row strong {\n color: var(--settings-text);\n font-size: 15px;\n}\n\n.settings-update-actions {\n display: flex;\n min-width: 0;\n margin-top: 16px;\n}\n\n.settings-command-button,\n.settings-update-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n min-height: 36px;\n gap: 8px;\n padding: 8px 12px;\n color: white;\n font: inherit;\n font-size: 13px;\n text-decoration: none;\n background: #1677d2;\n border: 1px solid #238be8;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-command-button--secondary,\n.settings-update-link {\n color: var(--settings-text);\n background: transparent;\n border-color: var(--settings-border);\n}\n\n.settings-command-button:hover,\n.settings-update-link:hover {\n filter: brightness(1.08);\n}\n\n.settings-command-button:focus-visible,\n.settings-update-link:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.codexhost-settings-icon {\n display: block;\n flex: none;\n stroke: currentColor;\n}\n\n@media (max-width: 720px) {\n .codexhost-settings-dialog {\n width: calc(100vw - 16px);\n height: calc(100vh - 16px);\n border-radius: 10px;\n }\n\n .settings-layout {\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr);\n }\n\n .settings-sidebar {\n border-right: 0;\n border-bottom: 1px solid var(--settings-border);\n }\n\n .settings-header {\n height: 56px;\n padding-inline: 14px;\n }\n\n .settings-sidebar {\n padding-top: 20px;\n }\n\n .settings-nav {\n flex: none;\n flex-direction: row;\n gap: 4px;\n padding: 7px 8px 8px;\n overflow-x: auto;\n overflow-y: hidden;\n }\n\n .settings-nav-button {\n width: auto;\n min-width: max-content;\n min-height: 34px;\n grid-template-columns: 16px auto;\n border-radius: 10px;\n }\n\n .settings-page__content {\n width: calc(100% - 40px);\n }\n\n .settings-page__content {\n padding-top: 32px;\n padding-bottom: 32px;\n }\n\n .settings-section-label {\n padding-bottom: 20px;\n font-size: 20px;\n line-height: 26px;\n }\n\n .settings-status-row {\n grid-template-columns: minmax(0, 1fr) auto;\n gap: 16px;\n }\n\n .settings-status-row__detail {\n grid-column: 1 / -1;\n margin: -8px 0 0 58px;\n }\n}\n\n@media (forced-colors: active) {\n :host,\n :host([data-theme="dark"]) {\n --settings-bg: Canvas;\n --settings-sidebar: Canvas;\n --settings-panel: Canvas;\n --settings-text: CanvasText;\n --settings-muted: GrayText;\n --settings-border: ButtonBorder;\n --settings-divider: ButtonBorder;\n --settings-hover: Highlight;\n --settings-active: Highlight;\n --settings-focus: Highlight;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n scroll-behavior: auto !important;\n }\n}\n';
|
|
18926
|
+
var shell_default = ':host {\n --settings-bg: #181818;\n --settings-sidebar: #1c1c1c;\n --settings-panel: transparent;\n --settings-text: #f5f5f5;\n --settings-muted: #a1a1a1;\n --settings-border: rgb(255 255 255 / 10%);\n --settings-divider: rgb(255 255 255 / 10%);\n --settings-hover: rgb(255 255 255 / 6%);\n --settings-active: rgb(51 156 255 / 12%);\n --settings-focus: #339cff;\n color: var(--settings-text);\n color-scheme: dark;\n font:\n 14px/1.5 system-ui,\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n sans-serif;\n letter-spacing: 0;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n letter-spacing: 0;\n}\n\nbutton,\ninput,\nselect {\n font: inherit;\n}\n\nbutton {\n color: inherit;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.codexhost-settings-dialog {\n width: min(1120px, calc(100vw - 32px));\n height: min(780px, calc(100vh - 32px));\n max-width: none;\n max-height: none;\n margin: auto;\n padding: 0;\n overflow: hidden;\n color: var(--settings-text);\n background: var(--settings-bg);\n border: 1px solid var(--settings-border);\n border-radius: 12px;\n box-shadow: 0 24px 64px rgb(0 0 0 / 38%);\n}\n\n.codexhost-settings-dialog::backdrop {\n background: rgb(0 0 0 / 52%);\n}\n\n.settings-frame,\n.settings-layout {\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.settings-frame {\n display: flex;\n flex-direction: column;\n}\n\n.settings-layout {\n flex: 1;\n display: grid;\n grid-template-columns: 240px minmax(0, 1fr);\n background: var(--settings-bg);\n}\n\n.settings-sidebar {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n background: var(--settings-sidebar);\n border-right: 1px solid var(--settings-border);\n padding-top: 28px;\n}\n\n.settings-header {\n display: flex;\n align-items: center;\n min-width: 0;\n height: 64px;\n flex: none;\n padding: 0 16px;\n border-bottom: 1px solid var(--settings-border);\n}\n\n.settings-header-actions {\n display: flex;\n align-items: center;\n flex: none;\n gap: 12px;\n margin-left: auto;\n}\n\n.settings-icon-button.settings-star-link {\n width: auto;\n gap: 6px;\n padding-inline: 8px;\n font-size: 12px;\n line-height: 18px;\n text-decoration: none;\n border: 2px dashed #f5c542;\n white-space: nowrap;\n}\n\n.settings-star-link .codexhost-settings-icon {\n color: #f5c542;\n fill: currentColor;\n stroke: currentColor;\n}\n\n.settings-brand {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 8px;\n}\n\n.settings-brand__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n flex: none;\n color: var(--settings-text);\n}\n\n.settings-brand__mark .codexhost-settings-icon {\n width: 32px;\n height: 32px;\n object-fit: contain;\n}\n\n.settings-brand__copy {\n display: flex;\n min-width: 0;\n align-items: baseline;\n gap: 0;\n line-height: 20px;\n}\n\n.settings-brand__name {\n overflow: hidden;\n color: var(--settings-text);\n font-size: 14px;\n font-weight: 500;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-brand__title {\n margin-left: 14px;\n padding-left: 14px;\n color: var(--settings-muted);\n font-size: 14px;\n font-weight: 400;\n border-left: 1px solid var(--settings-border);\n}\n\n.settings-nav {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n gap: 4px;\n padding: 0 12px 16px;\n overflow-y: auto;\n}\n\n.settings-nav-button {\n display: grid;\n grid-template-columns: 16px minmax(0, 1fr);\n align-items: center;\n width: 100%;\n position: relative;\n min-height: 40px;\n flex: none;\n gap: 12px;\n padding: 8px 12px;\n color: var(--settings-text);\n font-size: 14px;\n line-height: 21px;\n text-align: left;\n background: transparent;\n border: 0;\n border-radius: 10px;\n cursor: pointer;\n}\n\n.settings-nav-button .codexhost-settings-icon {\n width: 18px;\n height: 18px;\n opacity: 0.9;\n}\n\n.settings-nav-button:hover {\n background: var(--settings-hover);\n}\n\n.settings-nav-button[aria-current="page"] {\n background: var(--settings-active);\n color: var(--settings-focus);\n}\n\n.settings-nav-button[aria-current="page"]::before {\n position: absolute;\n left: 0;\n width: 3px;\n height: 22px;\n content: "";\n background: var(--settings-focus);\n border-radius: 0 3px 3px 0;\n}\n\n.settings-nav-button span {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.settings-icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex: none;\n padding: 0;\n color: var(--settings-muted);\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n\n.settings-icon-button:hover {\n color: var(--settings-text);\n background: var(--settings-hover);\n}\n\n.settings-icon-button:focus-visible,\n.settings-nav-button:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 1px;\n}\n\n.settings-page {\n display: block;\n position: relative;\n min-width: 0;\n min-height: 0;\n overflow-y: auto;\n background: var(--settings-bg);\n scrollbar-gutter: stable;\n}\n\n.settings-page__content {\n width: min(930px, calc(100% - 80px));\n margin-inline: auto;\n}\n\n.settings-page__content {\n min-width: 0;\n padding: 44px 0 56px;\n}\n\n.settings-section-label {\n min-height: auto;\n padding: 0 0 28px;\n color: var(--settings-text);\n font-size: 24px;\n font-weight: 600;\n line-height: 30px;\n}\n\n.settings-status-list,\n.settings-empty {\n overflow: hidden;\n background: var(--settings-panel);\n}\n\n.settings-status-row {\n display: grid;\n grid-template-columns: minmax(170px, 1fr) auto minmax(280px, 1.45fr);\n position: relative;\n align-items: center;\n min-height: 88px;\n gap: 28px;\n padding: 16px 0;\n}\n\n.settings-status-row:not(:last-child)::after {\n content: "";\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 1px;\n background: var(--settings-divider);\n}\n\n.settings-status-row__identity {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n color: var(--settings-text);\n gap: 14px;\n font-size: 15px;\n font-weight: 500;\n line-height: 22px;\n}\n\n.settings-status-row__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n flex: none;\n color: var(--settings-muted);\n background: rgb(255 255 255 / 7%);\n border-radius: 50%;\n}\n\n.settings-status-badge {\n flex: none;\n padding: 5px 12px;\n color: var(--settings-muted);\n font-size: 13px;\n font-weight: 500;\n line-height: 18px;\n background: rgb(255 255 255 / 9%);\n border: 1px solid rgb(255 255 255 / 6%);\n border-radius: 6px;\n}\n\n.settings-status-row__detail {\n min-width: 0;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-empty {\n display: flex;\n align-items: center;\n min-height: 72px;\n padding: 12px 16px;\n}\n\n.settings-empty > div {\n display: grid;\n min-width: 0;\n gap: 2px;\n}\n\n.settings-empty strong {\n color: var(--settings-text);\n font-size: 13px;\n font-weight: 500;\n line-height: 19px;\n}\n\n.settings-empty span {\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 19px;\n}\n\n.settings-page-error {\n padding: 16px;\n color: var(--settings-text);\n font-size: 13px;\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 20px;\n}\n\n.settings-update-metadata {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 24px;\n margin-bottom: 24px;\n padding: 0 4px 20px;\n border-bottom: 1px solid var(--settings-divider);\n}\n\n.settings-update-metadata__item {\n display: grid;\n min-width: 0;\n gap: 4px;\n}\n\n.settings-update-metadata__item span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-metadata__item strong {\n min-width: 0;\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-size: 15px;\n font-weight: 500;\n line-height: 22px;\n}\n\n.settings-update-panel {\n display: grid;\n gap: 16px;\n min-height: 128px;\n padding: 20px;\n color: var(--settings-text);\n background: var(--settings-panel);\n border: 1px solid var(--settings-border);\n border-radius: 8px;\n}\n\n.settings-update-panel > strong,\n.settings-update-panel > span,\n.settings-update-summary,\n.settings-update-error {\n margin: 0;\n overflow-wrap: anywhere;\n font-size: 13px;\n line-height: 20px;\n}\n\n.settings-update-panel > span,\n.settings-update-summary {\n color: var(--settings-muted);\n}\n\n.settings-update-error {\n color: #ef4444;\n}\n\n.settings-update-progress {\n width: 100%;\n height: 8px;\n accent-color: #238be8;\n}\n\n.settings-update-progress-detail {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-notes {\n max-height: 240px;\n padding: 14px;\n overflow: auto;\n color: var(--settings-muted);\n font-size: 13px;\n line-height: 20px;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n background: rgb(255 255 255 / 4%);\n border: 1px solid var(--settings-divider);\n border-radius: 6px;\n}\n\n.settings-update-version-row {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n gap: 20px;\n min-height: 32px;\n color: var(--settings-muted);\n font-size: 13px;\n}\n\n.settings-update-version-row strong {\n color: var(--settings-text);\n font-size: 15px;\n}\n\n.settings-update-manual {\n display: grid;\n min-width: 0;\n gap: 6px;\n margin-top: 14px;\n padding-inline: 4px;\n}\n\n.settings-update-manual[hidden] {\n display: none;\n}\n\n.settings-update-manual span {\n color: var(--settings-muted);\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-manual code {\n overflow-wrap: anywhere;\n color: var(--settings-text);\n font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n line-height: 18px;\n}\n\n.settings-update-actions {\n display: flex;\n min-width: 0;\n margin-top: 16px;\n}\n\n.settings-command-button,\n.settings-update-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n min-height: 36px;\n gap: 8px;\n padding: 8px 12px;\n color: white;\n font: inherit;\n font-size: 13px;\n text-decoration: none;\n background: #1677d2;\n border: 1px solid #238be8;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.settings-command-button--secondary,\n.settings-update-link {\n color: var(--settings-text);\n background: transparent;\n border-color: var(--settings-border);\n}\n\n.settings-command-button:hover,\n.settings-update-link:hover {\n filter: brightness(1.08);\n}\n\n.settings-command-button:focus-visible,\n.settings-update-link:focus-visible {\n outline: 2px solid var(--settings-focus);\n outline-offset: 2px;\n}\n\n.codexhost-settings-icon {\n display: block;\n flex: none;\n stroke: currentColor;\n}\n\n@media (max-width: 720px) {\n .codexhost-settings-dialog {\n width: calc(100vw - 16px);\n height: calc(100vh - 16px);\n border-radius: 10px;\n }\n\n .settings-layout {\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr);\n }\n\n .settings-sidebar {\n border-right: 0;\n border-bottom: 1px solid var(--settings-border);\n }\n\n .settings-header {\n height: 56px;\n padding-inline: 14px;\n }\n\n .settings-icon-button.settings-star-link {\n width: 28px;\n padding: 0;\n }\n\n .settings-star-link span {\n display: none;\n }\n\n .settings-sidebar {\n padding-top: 20px;\n }\n\n .settings-nav {\n flex: none;\n flex-direction: row;\n gap: 4px;\n padding: 7px 8px 8px;\n overflow-x: auto;\n overflow-y: hidden;\n }\n\n .settings-nav-button {\n width: auto;\n min-width: max-content;\n min-height: 34px;\n grid-template-columns: 16px auto;\n border-radius: 10px;\n }\n\n .settings-page__content {\n width: calc(100% - 40px);\n }\n\n .settings-page__content {\n padding-top: 32px;\n padding-bottom: 32px;\n }\n\n .settings-section-label {\n padding-bottom: 20px;\n font-size: 20px;\n line-height: 26px;\n }\n\n .settings-status-row {\n grid-template-columns: minmax(0, 1fr) auto;\n gap: 16px;\n }\n\n .settings-status-row__detail {\n grid-column: 1 / -1;\n margin: -8px 0 0 58px;\n }\n}\n\n@media (forced-colors: active) {\n :host,\n :host([data-theme="dark"]) {\n --settings-bg: Canvas;\n --settings-sidebar: Canvas;\n --settings-panel: Canvas;\n --settings-text: CanvasText;\n --settings-muted: GrayText;\n --settings-border: ButtonBorder;\n --settings-divider: ButtonBorder;\n --settings-hover: Highlight;\n --settings-active: Highlight;\n --settings-focus: Highlight;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n scroll-behavior: auto !important;\n }\n}\n';
|
|
18908
18927
|
|
|
18909
18928
|
// src/settings/shell.ts
|
|
18910
18929
|
var SETTINGS_SHELL_ATTRIBUTE = "data-codexhost-settings-shell";
|
|
18930
|
+
var CODEXHOST_GITHUB_REPOSITORY_URL = "https://github.com/BytePioneer-AI/codex-host";
|
|
18911
18931
|
function isRendererSettingsDialogSupported(dialog) {
|
|
18912
18932
|
return typeof dialog.showModal === "function" && typeof dialog.close === "function";
|
|
18913
18933
|
}
|
|
@@ -18952,13 +18972,26 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18952
18972
|
brandTitle.textContent = messages.title;
|
|
18953
18973
|
brandCopy.append(brandName, brandTitle);
|
|
18954
18974
|
brand.append(brandMark, brandCopy);
|
|
18975
|
+
const headerActions = ownerDocument.createElement("div");
|
|
18976
|
+
headerActions.className = "settings-header-actions";
|
|
18977
|
+
const starLink = ownerDocument.createElement("a");
|
|
18978
|
+
starLink.className = "settings-icon-button settings-star-link";
|
|
18979
|
+
starLink.href = CODEXHOST_GITHUB_REPOSITORY_URL;
|
|
18980
|
+
starLink.target = "_blank";
|
|
18981
|
+
starLink.rel = "noopener noreferrer";
|
|
18982
|
+
starLink.setAttribute("aria-label", messages.starOnGitHub);
|
|
18983
|
+
starLink.title = messages.starOnGitHub;
|
|
18984
|
+
const starLabel = ownerDocument.createElement("span");
|
|
18985
|
+
starLabel.textContent = messages.starOnGitHub;
|
|
18986
|
+
starLink.append(createRendererSettingsIcon("star", 16), starLabel);
|
|
18955
18987
|
const closeButton = ownerDocument.createElement("button");
|
|
18956
18988
|
closeButton.type = "button";
|
|
18957
18989
|
closeButton.className = "settings-icon-button";
|
|
18958
18990
|
closeButton.setAttribute("aria-label", messages.close);
|
|
18959
18991
|
closeButton.title = messages.close;
|
|
18960
18992
|
closeButton.append(createRendererSettingsIcon("close", 18));
|
|
18961
|
-
|
|
18993
|
+
headerActions.append(starLink, closeButton);
|
|
18994
|
+
header.append(brand, headerActions);
|
|
18962
18995
|
const layout = ownerDocument.createElement("div");
|
|
18963
18996
|
layout.className = "settings-layout";
|
|
18964
18997
|
const sidebar = ownerDocument.createElement("aside");
|
|
@@ -20874,6 +20907,7 @@ lucide/dist/esm/icons/plug-zap.mjs:
|
|
|
20874
20907
|
lucide/dist/esm/icons/refresh-cw.mjs:
|
|
20875
20908
|
lucide/dist/esm/icons/route.mjs:
|
|
20876
20909
|
lucide/dist/esm/icons/settings.mjs:
|
|
20910
|
+
lucide/dist/esm/icons/star.mjs:
|
|
20877
20911
|
lucide/dist/esm/icons/x.mjs:
|
|
20878
20912
|
(**
|
|
20879
20913
|
* @license lucide v1.28.0 - ISC
|
package/bin/codexhost.exe
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|