@codexhost/cli-linux-arm64 0.11.0 → 0.12.0
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/console-server.mjs +44 -2
- package/app/console-web.js +2216 -492
- package/app/desktop-controller.mjs +391 -189
- package/app/host-runtime.mjs +3917 -625
- package/app/plugins/antigravity/plugin.mjs +15634 -15526
- package/app/plugins/claude-code/plugin.mjs +215 -70
- package/app/plugins/codebuddy/plugin.mjs +1260 -827
- package/app/plugins/cursor-cli/plugin.mjs +529 -370
- package/app/plugins/deepseek-harness/plugin.mjs +25467 -26242
- package/app/plugins/enabled.json +2 -1
- package/app/plugins/grok/plugin.mjs +936 -505
- package/app/plugins/hermes/plugin.mjs +18659 -23012
- package/app/plugins/kimi-code/plugin.mjs +1046 -703
- package/app/plugins/kiro-cli/plugin.mjs +959 -590
- package/app/plugins/omp/plugin.mjs +1038 -576
- package/app/plugins/opencode/plugin.mjs +961 -700
- package/app/plugins/pi/plugin.mjs +15911 -15724
- package/app/plugins/qoder/plugin.mjs +679 -375
- package/app/plugins/qoder-cn/plugin.mjs +345 -39
- package/app/plugins/workbuddy/plugin.mjs +417 -40
- package/app/plugins/zcode/assets/icon.svg +8 -0
- package/app/plugins/zcode/manifest.json +14 -0
- package/app/plugins/zcode/plugin.mjs +19202 -0
- package/app/renderer-extension.js +2495 -486
- package/bin/codexhost +0 -0
- package/libexec/codexhost-shim +0 -0
- package/libexec/codexhost-updater +0 -0
- package/package.json +1 -1
package/app/console-web.js
CHANGED
|
@@ -14678,6 +14678,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
14678
14678
|
"codexhost/harness/display-settings/get",
|
|
14679
14679
|
"codexhost/harness/display-settings/set",
|
|
14680
14680
|
"codexhost/harness/inspect",
|
|
14681
|
+
"codexhost/harness/installation",
|
|
14681
14682
|
"codexhost/harness/launch-settings/get",
|
|
14682
14683
|
"codexhost/harness/launch-settings/set",
|
|
14683
14684
|
"codexhost/harness/web-ui/open",
|
|
@@ -15330,14 +15331,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15330
15331
|
var HARNESS_INSTALLATION_METHOD = "codexhost/harness/installation";
|
|
15331
15332
|
var harnessInstallationParamsSchema = external_exports.object({
|
|
15332
15333
|
harnessId: harnessIdSchema,
|
|
15333
|
-
action: external_exports.enum(["check", "update"])
|
|
15334
|
+
action: external_exports.enum(["check", "update", "install"])
|
|
15334
15335
|
}).strict();
|
|
15335
15336
|
var harnessInstallationStateSchema = external_exports.object({
|
|
15336
15337
|
currentVersion: external_exports.string().min(1).max(128),
|
|
15337
15338
|
latestVersion: external_exports.string().min(1).max(128),
|
|
15338
15339
|
updateAvailable: external_exports.boolean(),
|
|
15339
15340
|
canUpdate: external_exports.boolean(),
|
|
15340
|
-
|
|
15341
|
+
// Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
|
|
15342
|
+
message: external_exports.string().max(2048).optional(),
|
|
15343
|
+
messageCode: external_exports.string().min(1).max(128).optional(),
|
|
15344
|
+
latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
|
|
15341
15345
|
}).strict();
|
|
15342
15346
|
|
|
15343
15347
|
// ../shared-contracts/dist/codex-accounts.js
|
|
@@ -15636,6 +15640,41 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15636
15640
|
status: updateStatusSchema.nullable()
|
|
15637
15641
|
});
|
|
15638
15642
|
|
|
15643
|
+
// ../shared-contracts/dist/remote-runtime.js
|
|
15644
|
+
var RUNTIME_STATUS_METHOD = "codexhost/runtime/status";
|
|
15645
|
+
var REMOTE_UPDATE_METHOD = "codexhost/remote/update";
|
|
15646
|
+
var remoteUpdatePhaseSchema = external_exports.enum([
|
|
15647
|
+
"idle",
|
|
15648
|
+
"installing",
|
|
15649
|
+
"restarting",
|
|
15650
|
+
"succeeded",
|
|
15651
|
+
"failed"
|
|
15652
|
+
]);
|
|
15653
|
+
var runtimeStatusSchema = external_exports.object({
|
|
15654
|
+
runningVersion: external_exports.string().nullable(),
|
|
15655
|
+
installedVersion: external_exports.string().nullable(),
|
|
15656
|
+
restartRequired: external_exports.boolean(),
|
|
15657
|
+
remote: external_exports.boolean(),
|
|
15658
|
+
updateSupported: external_exports.boolean(),
|
|
15659
|
+
update: external_exports.object({
|
|
15660
|
+
phase: remoteUpdatePhaseSchema,
|
|
15661
|
+
targetVersion: external_exports.string().nullable(),
|
|
15662
|
+
error: external_exports.string().nullable()
|
|
15663
|
+
})
|
|
15664
|
+
});
|
|
15665
|
+
var remoteUpdateParamsSchema = external_exports.object({
|
|
15666
|
+
version: external_exports.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u)
|
|
15667
|
+
}).strict();
|
|
15668
|
+
var REMOTE_SSH_SETUP_METHOD = "codexhost/remote/ssh-setup";
|
|
15669
|
+
var remoteSshSetupParamsSchema = external_exports.object({
|
|
15670
|
+
hostname: external_exports.string().min(1).max(1024).refine((value) => !value.startsWith("-") && !/\s/u.test(value)),
|
|
15671
|
+
port: external_exports.number().int().min(1).max(65535).nullable(),
|
|
15672
|
+
identity: external_exports.string().max(4096).nullable(),
|
|
15673
|
+
action: external_exports.enum(["inspect", "install", "update", "repair"]),
|
|
15674
|
+
version: external_exports.string().regex(/^\d+\.\d+\.\d+$/u).nullable()
|
|
15675
|
+
}).strict();
|
|
15676
|
+
var remoteSshSetupResultSchema = external_exports.object({ state: external_exports.enum(["installed", "not-installed"]) }).strict();
|
|
15677
|
+
|
|
15639
15678
|
// ../shared-contracts/dist/index.js
|
|
15640
15679
|
var workspaceContractVersionSchema = external_exports.literal(WORKSPACE_CONTRACT_VERSION);
|
|
15641
15680
|
|
|
@@ -16373,7 +16412,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16373
16412
|
"hermes",
|
|
16374
16413
|
"qoder",
|
|
16375
16414
|
"qoder-cn",
|
|
16376
|
-
"kimi-code"
|
|
16415
|
+
"kimi-code",
|
|
16416
|
+
"zcode"
|
|
16377
16417
|
];
|
|
16378
16418
|
|
|
16379
16419
|
// src/agent-group-preference.ts
|
|
@@ -16542,7 +16582,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16542
16582
|
return pending;
|
|
16543
16583
|
};
|
|
16544
16584
|
let started = false;
|
|
16585
|
+
const installation = client.installation?.bind(client);
|
|
16545
16586
|
return {
|
|
16587
|
+
...installation ? {
|
|
16588
|
+
installation: async (hostId, agent, action) => {
|
|
16589
|
+
if (hostId !== "local") {
|
|
16590
|
+
throw new Error("Web console installation only supports the local Host");
|
|
16591
|
+
}
|
|
16592
|
+
return installation({ harnessId: harnessIdSchema.parse(agent), action });
|
|
16593
|
+
}
|
|
16594
|
+
} : {},
|
|
16546
16595
|
snapshot() {
|
|
16547
16596
|
if (!started) {
|
|
16548
16597
|
started = true;
|
|
@@ -17375,6 +17424,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
17375
17424
|
};
|
|
17376
17425
|
}
|
|
17377
17426
|
|
|
17427
|
+
// src/renderer-native-thread.ts
|
|
17428
|
+
function isRecord(value) {
|
|
17429
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
17430
|
+
}
|
|
17431
|
+
async function verifyNativeCodexThread(sendRequest, threadId) {
|
|
17432
|
+
const native = await sendRequest("thread/read", { threadId, includeTurns: false });
|
|
17433
|
+
const thread = isRecord(native) ? native.thread : null;
|
|
17434
|
+
if (!isRecord(thread) || thread.id !== threadId || typeof thread.modelProvider !== "string" || !thread.modelProvider || thread.modelProvider === "codexhost" || typeof thread.cliVersion !== "string" || !thread.cliVersion || thread.cliVersion === "codexhost") {
|
|
17435
|
+
throw new Error("Native Thread response cannot establish Codex ownership");
|
|
17436
|
+
}
|
|
17437
|
+
}
|
|
17438
|
+
|
|
17378
17439
|
// src/renderer-session-import-client.ts
|
|
17379
17440
|
var RendererSessionImportUnavailableError = class extends Error {
|
|
17380
17441
|
constructor() {
|
|
@@ -17449,15 +17510,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
17449
17510
|
var CODEX_ACCOUNT_LIST_METHOD = "codexhost/account/list";
|
|
17450
17511
|
var CODEX_ACCOUNT_REFRESH_METHOD = "codexhost/account/refresh";
|
|
17451
17512
|
var CODEX_ACCOUNT_CHANGED_METHOD = "codexhost/account/changed";
|
|
17452
|
-
function
|
|
17513
|
+
function isRecord2(value) {
|
|
17453
17514
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
17454
17515
|
}
|
|
17455
17516
|
function notifiedThreadId(notification) {
|
|
17456
|
-
if (!
|
|
17517
|
+
if (!isRecord2(notification) || !THREAD_USAGE_REFRESH_METHODS.includes(notification.method)) {
|
|
17457
17518
|
return null;
|
|
17458
17519
|
}
|
|
17459
17520
|
const params = notification.params;
|
|
17460
|
-
if (!
|
|
17521
|
+
if (!isRecord2(params)) return null;
|
|
17461
17522
|
const parsed = hostThreadIdSchema.safeParse(params.threadId);
|
|
17462
17523
|
return parsed.success ? parsed.data : null;
|
|
17463
17524
|
}
|
|
@@ -17588,14 +17649,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
17588
17649
|
result = await manager.sendRequest(THREAD_INSPECT_METHOD, params);
|
|
17589
17650
|
} catch (error51) {
|
|
17590
17651
|
if (!(error51 instanceof RendererMethodUnavailableError)) throw error51;
|
|
17591
|
-
|
|
17592
|
-
threadId: params.threadId,
|
|
17593
|
-
includeTurns: false
|
|
17594
|
-
});
|
|
17595
|
-
const thread = isRecord(native) ? native.thread : null;
|
|
17596
|
-
if (!isRecord(thread) || thread.id !== params.threadId || typeof thread.modelProvider !== "string" || !thread.modelProvider || thread.modelProvider === "codexhost" || typeof thread.cliVersion !== "string" || !thread.cliVersion || thread.cliVersion === "codexhost") {
|
|
17597
|
-
throw new Error("Native Thread response cannot establish Codex ownership");
|
|
17598
|
-
}
|
|
17652
|
+
await verifyNativeCodexThread(manager.sendRequest, params.threadId);
|
|
17599
17653
|
return { owner: "codex", locked: true };
|
|
17600
17654
|
}
|
|
17601
17655
|
return threadInspectionSchema.parse(result);
|
|
@@ -17642,6 +17696,24 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
17642
17696
|
selectThreadModel,
|
|
17643
17697
|
selectThreadThinking,
|
|
17644
17698
|
selectThreadPermissionMode,
|
|
17699
|
+
async setupSsh(input) {
|
|
17700
|
+
return remoteSshSetupResultSchema.parse(
|
|
17701
|
+
await manager.sendRequest(REMOTE_SSH_SETUP_METHOD, remoteSshSetupParamsSchema.parse(input))
|
|
17702
|
+
);
|
|
17703
|
+
},
|
|
17704
|
+
async runtimeStatus() {
|
|
17705
|
+
try {
|
|
17706
|
+
return runtimeStatusSchema.parse(await source.sendRequest(RUNTIME_STATUS_METHOD, {}));
|
|
17707
|
+
} catch (error51) {
|
|
17708
|
+
if (!isUnsupportedMethod(error51, RUNTIME_STATUS_METHOD)) throw error51;
|
|
17709
|
+
throw new RendererMethodUnavailableError(RUNTIME_STATUS_METHOD, error51);
|
|
17710
|
+
}
|
|
17711
|
+
},
|
|
17712
|
+
async updateRemote(version2) {
|
|
17713
|
+
return runtimeStatusSchema.parse(
|
|
17714
|
+
await manager.sendRequest(REMOTE_UPDATE_METHOD, { version: version2 })
|
|
17715
|
+
);
|
|
17716
|
+
},
|
|
17645
17717
|
async checkUpdate() {
|
|
17646
17718
|
const result = await manager.sendRequest(
|
|
17647
17719
|
UPDATE_CHECK_METHOD,
|
|
@@ -17720,7 +17792,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
17720
17792
|
throw new Error("Renderer Account notification callback is unavailable");
|
|
17721
17793
|
}
|
|
17722
17794
|
return notifications.addNotificationCallback(CODEX_ACCOUNT_CHANGED_METHOD, (notification) => {
|
|
17723
|
-
if (!
|
|
17795
|
+
if (!isRecord2(notification) || notification.method !== CODEX_ACCOUNT_CHANGED_METHOD) return;
|
|
17724
17796
|
const state = codexAccountChangedSchema.safeParse(notification.params);
|
|
17725
17797
|
if (state.success) listener(state.data);
|
|
17726
17798
|
});
|
|
@@ -18575,6 +18647,54 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18575
18647
|
close: "\u5B8C\u6210"
|
|
18576
18648
|
};
|
|
18577
18649
|
|
|
18650
|
+
// src/settings/harness-version-messages.ts
|
|
18651
|
+
var harnessVersionEnglish = Object.freeze({
|
|
18652
|
+
unknown: "Unknown",
|
|
18653
|
+
trackingBranch: "Tracking branch (new commits)",
|
|
18654
|
+
notes: Object.freeze({
|
|
18655
|
+
"original-installer": "Use the original installer, package manager, or launcher to update this installation.",
|
|
18656
|
+
"claude-policy-restricted": "Claude updates are restricted by the installation's settings or policy.",
|
|
18657
|
+
"codebuddy-npm-required": "Use CodeBuddy's native updater or original package manager. Latest-version checks here require an identified npm installation.",
|
|
18658
|
+
"deepseek-original-installer": "Update with the original installer. Python, desktop, and project-local installations are not upgraded through global npm.",
|
|
18659
|
+
"kiro-native-updater": "Use Kiro CLI's original installer or native updater to check for and install updates.",
|
|
18660
|
+
"zcode-desktop-updater": "The CLI ships inside ZCode Desktop. Update ZCode Desktop itself to update it.",
|
|
18661
|
+
"qoder-check-unavailable": "This Qoder China release does not expose a non-installing update check. Use its original installer.",
|
|
18662
|
+
"hermes-update-plan-unavailable": "This Hermes release does not expose a safe update plan. Use the original installer.",
|
|
18663
|
+
"hermes-externally-managed": "This Hermes installation is managed externally. Update it through its desktop app, container, or original package manager.",
|
|
18664
|
+
"hermes-update-channel": "Uses Hermes's configured update channel. Gateway restarts are deferred; existing processes keep their running code.",
|
|
18665
|
+
"hermes-manual-update": "Use the native updater manually. Safe non-interactive updates require a clean source checkout, commit identity, and Gateway restart deferral."
|
|
18666
|
+
})
|
|
18667
|
+
});
|
|
18668
|
+
var harnessVersionChinese = Object.freeze({
|
|
18669
|
+
unknown: "\u672A\u77E5",
|
|
18670
|
+
trackingBranch: "\u8DDF\u8E2A\u5206\u652F\uFF08\u6709\u65B0\u63D0\u4EA4\uFF09",
|
|
18671
|
+
notes: Object.freeze({
|
|
18672
|
+
"original-installer": "\u8BF7\u4F7F\u7528\u539F\u5B89\u88C5\u7A0B\u5E8F\u3001\u5305\u7BA1\u7406\u5668\u6216\u542F\u52A8\u5668\u66F4\u65B0\u6B64\u5B89\u88C5\u3002",
|
|
18673
|
+
"claude-policy-restricted": "\u6B64 Claude \u5B89\u88C5\u7684\u8BBE\u7F6E\u6216\u7B56\u7565\u9650\u5236\u4E86\u66F4\u65B0\u3002",
|
|
18674
|
+
"codebuddy-npm-required": "\u8BF7\u4F7F\u7528 CodeBuddy \u539F\u751F\u66F4\u65B0\u5668\u6216\u539F\u5305\u7BA1\u7406\u5668\u66F4\u65B0\u3002\u6B64\u5904\u4EC5\u80FD\u67E5\u8BE2\u5DF2\u8BC6\u522B\u7684 npm \u5B89\u88C5\u7684\u6700\u65B0\u7248\u672C\u3002",
|
|
18675
|
+
"deepseek-original-installer": "\u8BF7\u4F7F\u7528\u539F\u5B89\u88C5\u65B9\u5F0F\u66F4\u65B0\u3002Python\u3001\u684C\u9762\u5E94\u7528\u53CA\u9879\u76EE\u5185\u5B89\u88C5\u4E0D\u4F1A\u901A\u8FC7\u5168\u5C40 npm \u66F4\u65B0\u3002",
|
|
18676
|
+
"kiro-native-updater": "\u8BF7\u4F7F\u7528 Kiro CLI \u539F\u5B89\u88C5\u7A0B\u5E8F\u6216\u539F\u751F\u66F4\u65B0\u5668\u68C0\u67E5\u5E76\u5B89\u88C5\u66F4\u65B0\u3002",
|
|
18677
|
+
"zcode-desktop-updater": "CLI \u968F ZCode Desktop \u4E00\u8D77\u53D1\u5E03\uFF0C\u8BF7\u76F4\u63A5\u66F4\u65B0 ZCode Desktop\u3002",
|
|
18678
|
+
"qoder-check-unavailable": "\u6B64 Qoder \u4E2D\u56FD\u7248\u5C1A\u4E0D\u652F\u6301\u53EA\u68C0\u67E5\u3001\u4E0D\u5B89\u88C5\u7684\u66F4\u65B0\u67E5\u8BE2\uFF0C\u8BF7\u4F7F\u7528\u539F\u5B89\u88C5\u65B9\u5F0F\u66F4\u65B0\u3002",
|
|
18679
|
+
"hermes-update-plan-unavailable": "\u6B64 Hermes \u7248\u672C\u4E0D\u63D0\u4F9B\u5B89\u5168\u7684\u66F4\u65B0\u8BA1\u5212\uFF0C\u8BF7\u4F7F\u7528\u539F\u5B89\u88C5\u65B9\u5F0F\u66F4\u65B0\u3002",
|
|
18680
|
+
"hermes-externally-managed": "\u6B64 Hermes \u5B89\u88C5\u7531\u5916\u90E8\u5DE5\u5177\u7BA1\u7406\uFF0C\u8BF7\u901A\u8FC7\u5176\u684C\u9762\u5E94\u7528\u3001\u5BB9\u5668\u6216\u539F\u5305\u7BA1\u7406\u5668\u66F4\u65B0\u3002",
|
|
18681
|
+
"hermes-update-channel": "\u4F7F\u7528 Hermes \u914D\u7F6E\u7684\u66F4\u65B0\u6E20\u9053\uFF0C\u6682\u4E0D\u91CD\u542F Gateway\uFF1B\u73B0\u6709\u8FDB\u7A0B\u7EE7\u7EED\u8FD0\u884C\u539F\u6709\u4EE3\u7801\u3002",
|
|
18682
|
+
"hermes-manual-update": "\u8BF7\u624B\u52A8\u4F7F\u7528\u539F\u751F\u66F4\u65B0\u5668\u3002\u5B89\u5168\u7684\u975E\u4EA4\u4E92\u66F4\u65B0\u8981\u6C42\u6E90\u7801\u76EE\u5F55\u65E0\u672A\u63D0\u4EA4\u4FEE\u6539\u3001\u53EF\u8BC6\u522B\u5F53\u524D\u63D0\u4EA4\uFF0C\u5E76\u652F\u6301\u63A8\u8FDF Gateway \u91CD\u542F\u3002"
|
|
18683
|
+
})
|
|
18684
|
+
});
|
|
18685
|
+
function harnessVersionLabel(state, messages) {
|
|
18686
|
+
if (!state) return "\u2014";
|
|
18687
|
+
if (state.latestVersionKind === "unknown" || state.latestVersion === "Unknown")
|
|
18688
|
+
return messages.unknown;
|
|
18689
|
+
if (state.latestVersionKind === "tracking-branch" || state.latestVersion === "Tracking branch (new commits)")
|
|
18690
|
+
return messages.trackingBranch;
|
|
18691
|
+
return state.latestVersion;
|
|
18692
|
+
}
|
|
18693
|
+
function harnessVersionNote(state, messages) {
|
|
18694
|
+
const code = state?.messageCode;
|
|
18695
|
+
return code && Object.hasOwn(messages.notes, code) ? messages.notes[code] : void 0;
|
|
18696
|
+
}
|
|
18697
|
+
|
|
18578
18698
|
// src/settings/localization.ts
|
|
18579
18699
|
var ENGLISH_MESSAGES = Object.freeze({
|
|
18580
18700
|
credentialImports: credentialImportEnglish,
|
|
@@ -18712,19 +18832,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18712
18832
|
connectionCopyDetails: "Copy diagnostics",
|
|
18713
18833
|
connectionCopied: "Copied",
|
|
18714
18834
|
connectionCopyFailed: "Copy failed",
|
|
18715
|
-
connectionErrorCode: "Error code",
|
|
18716
18835
|
connectionErrorMessage: "Error message",
|
|
18717
|
-
connectionRetryable: "Retryable",
|
|
18718
|
-
connectionFailureStage: "Failure stage",
|
|
18719
|
-
connectionDuration: "Duration",
|
|
18720
|
-
connectionDiagnostic: "Diagnostic",
|
|
18721
18836
|
connectionNoRuntime: "The renderer request bridge is not available yet.",
|
|
18722
18837
|
connectionStatusReady: "Ready",
|
|
18838
|
+
connectionStatusConnected: "Connected",
|
|
18839
|
+
connectionLoginRequired: "Login required",
|
|
18840
|
+
connectionConfigurationRequired: "Setup required",
|
|
18841
|
+
connectionConfigurationDescription: "Configure a Provider and its required credentials in this Harness on the selected Host, then check the connection again.",
|
|
18842
|
+
connectionLoginDescription: "Complete login or authentication setup in this Harness on the selected Host, then check the connection again.",
|
|
18723
18843
|
connectionStatusChecking: "Checking",
|
|
18724
18844
|
connectionStatusNotInstalled: "Not installed",
|
|
18725
18845
|
connectionStatusUnavailable: "Unavailable",
|
|
18726
18846
|
connectionStatusError: "Error",
|
|
18727
18847
|
connectionStatusInstalling: "Installing",
|
|
18848
|
+
connectionStatusUpdating: "Updating",
|
|
18728
18849
|
connectionStatusUnsupported: "Unsupported",
|
|
18729
18850
|
connectionComponent: "Component",
|
|
18730
18851
|
connectionStatus: "Status",
|
|
@@ -18733,6 +18854,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18733
18854
|
launchPathLabel: "Installed application path",
|
|
18734
18855
|
launchPathPlaceholder: "Installation folder, e.g. D:\\program\\WorkBuddy",
|
|
18735
18856
|
launchPathWorkbuddyHelp: "This integration requires the WorkBuddy app. If it is not detected automatically, enter its installation folder. codexhost locates the required files inside it. Restart codexhost after saving to apply.",
|
|
18857
|
+
launchPathZcodePlaceholder: "Application path, e.g. /Applications/ZCode.app or D:\\program\\ZCode",
|
|
18858
|
+
launchPathZcodeHelp: "This integration requires the ZCode Desktop app. If it is not detected automatically, enter its application path (the .app bundle on macOS, the installation folder on Windows and Linux). codexhost locates the required files inside it. Restart codexhost after saving to apply.",
|
|
18736
18859
|
launchPathSave: "Save path",
|
|
18737
18860
|
launchPathReset: "Clear override",
|
|
18738
18861
|
launchPathRestart: "Saved. Restart codexhost to apply; running sessions are unchanged.",
|
|
@@ -18742,11 +18865,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18742
18865
|
launchPathLoading: "Loading launch settings\u2026",
|
|
18743
18866
|
launchPathLoadError: "Could not load launch settings. Reopen this detail panel to retry.",
|
|
18744
18867
|
launchPathSaveError: "Could not save. Enter an existing absolute installation folder on this Host and check configuration permissions.",
|
|
18745
|
-
|
|
18868
|
+
connectionOfficialWebsite: "Visit official website",
|
|
18746
18869
|
connectionOpenHarnessWeb: "Open DeepSeek Harness Web",
|
|
18747
|
-
connectionDeepSeekTestedVersions: "Supported DSH versions: 0.1.
|
|
18870
|
+
connectionDeepSeekTestedVersions: "Supported DSH versions: 0.1.7-rc.1, 0.1.7-rc.2, 0.2.0-rc.1 and 0.2.0-rc.2. Versions newer than 0.2.0-rc.2 can be tried, but compatibility may be limited; versions older than 0.1.7-rc.1 must be upgraded first.",
|
|
18748
18871
|
connectionInstall: "Install",
|
|
18749
18872
|
connectionInstallDescription: "This Harness was not detected.",
|
|
18873
|
+
connectionInstallRunning: "Installing on the selected Host. You can leave this page; login or setup may still be required afterward.",
|
|
18874
|
+
harnessVersion: harnessVersionEnglish,
|
|
18750
18875
|
harnessVersionTitle: "Harness CLI version",
|
|
18751
18876
|
harnessVersionCurrent: "Current version",
|
|
18752
18877
|
harnessVersionLatest: "Latest version",
|
|
@@ -18833,6 +18958,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18833
18958
|
aboutConsoleFailed: "The console could not be opened",
|
|
18834
18959
|
pageLabels: Object.freeze({
|
|
18835
18960
|
connections: "Connections",
|
|
18961
|
+
"remote-connections": "Remote connections",
|
|
18836
18962
|
appearance: "General",
|
|
18837
18963
|
accounts: "Accounts",
|
|
18838
18964
|
"session-import": "Session Import",
|
|
@@ -18976,19 +19102,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18976
19102
|
connectionCopyDetails: "\u590D\u5236\u8BCA\u65AD\u4FE1\u606F",
|
|
18977
19103
|
connectionCopied: "\u5DF2\u590D\u5236",
|
|
18978
19104
|
connectionCopyFailed: "\u590D\u5236\u5931\u8D25",
|
|
18979
|
-
connectionErrorCode: "\u9519\u8BEF\u7801",
|
|
18980
19105
|
connectionErrorMessage: "\u9519\u8BEF\u4FE1\u606F",
|
|
18981
|
-
connectionRetryable: "\u53EF\u91CD\u8BD5",
|
|
18982
|
-
connectionFailureStage: "\u5931\u8D25\u9636\u6BB5",
|
|
18983
|
-
connectionDuration: "\u68C0\u67E5\u8017\u65F6",
|
|
18984
|
-
connectionDiagnostic: "\u8BCA\u65AD\u4FE1\u606F",
|
|
18985
19106
|
connectionNoRuntime: "Renderer \u8BF7\u6C42\u6865\u5C1A\u672A\u53EF\u7528\u3002",
|
|
18986
19107
|
connectionStatusReady: "\u6B63\u5E38",
|
|
19108
|
+
connectionStatusConnected: "\u5DF2\u8FDE\u63A5",
|
|
19109
|
+
connectionLoginRequired: "\u9700\u8981\u767B\u5F55",
|
|
19110
|
+
connectionConfigurationRequired: "\u9700\u8981\u914D\u7F6E",
|
|
19111
|
+
connectionConfigurationDescription: "\u8BF7\u5728\u6240\u9009 Host \u4E0A\u914D\u7F6E\u8BE5 Harness \u7684 Provider \u53CA\u6240\u9700\u8BA4\u8BC1\u4FE1\u606F\uFF0C\u7136\u540E\u91CD\u65B0\u68C0\u6D4B\u8FDE\u63A5\u3002",
|
|
19112
|
+
connectionLoginDescription: "\u8BF7\u5728\u6240\u9009 Host \u4E0A\u5B8C\u6210\u8BE5 Harness \u7684\u767B\u5F55\u6216\u8BA4\u8BC1\u914D\u7F6E\uFF0C\u7136\u540E\u91CD\u65B0\u68C0\u6D4B\u8FDE\u63A5\u3002",
|
|
18987
19113
|
connectionStatusChecking: "\u68C0\u67E5\u4E2D",
|
|
18988
19114
|
connectionStatusNotInstalled: "\u672A\u5B89\u88C5",
|
|
18989
19115
|
connectionStatusUnavailable: "\u4E0D\u53EF\u7528",
|
|
18990
19116
|
connectionStatusError: "\u9519\u8BEF",
|
|
18991
19117
|
connectionStatusInstalling: "\u5B89\u88C5\u4E2D",
|
|
19118
|
+
connectionStatusUpdating: "\u66F4\u65B0\u4E2D",
|
|
18992
19119
|
connectionStatusUnsupported: "\u4E0D\u652F\u6301",
|
|
18993
19120
|
connectionComponent: "\u7EC4\u4EF6",
|
|
18994
19121
|
connectionStatus: "\u72B6\u6001",
|
|
@@ -18997,6 +19124,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18997
19124
|
launchPathLabel: "\u5E94\u7528\u5B89\u88C5\u8DEF\u5F84",
|
|
18998
19125
|
launchPathPlaceholder: "\u586B\u5199\u5B89\u88C5\u76EE\u5F55\uFF0C\u4F8B\u5982 D:\\program\\WorkBuddy",
|
|
18999
19126
|
launchPathWorkbuddyHelp: "\u6B64\u63A5\u5165\u4F9D\u8D56 WorkBuddy \u5E94\u7528\u3002\u82E5\u672A\u81EA\u52A8\u8BC6\u522B\uFF0C\u8BF7\u586B\u5199\u5E94\u7528\u5B89\u88C5\u76EE\u5F55\uFF0Ccodexhost \u4F1A\u81EA\u52A8\u5B9A\u4F4D\u6240\u9700\u6587\u4EF6\u3002\u4FDD\u5B58\u540E\u91CD\u542F codexhost \u751F\u6548\u3002",
|
|
19127
|
+
launchPathZcodePlaceholder: "\u586B\u5199\u5E94\u7528\u8DEF\u5F84\uFF0C\u4F8B\u5982 /Applications/ZCode.app \u6216 D:\\program\\ZCode",
|
|
19128
|
+
launchPathZcodeHelp: "\u6B64\u63A5\u5165\u4F9D\u8D56 ZCode Desktop \u5E94\u7528\u3002\u82E5\u672A\u81EA\u52A8\u8BC6\u522B\uFF0C\u8BF7\u586B\u5199\u5E94\u7528\u8DEF\u5F84\uFF08macOS \u4E3A .app\uFF0CWindows \u548C Linux \u4E3A\u5B89\u88C5\u76EE\u5F55\uFF09\uFF0Ccodexhost \u4F1A\u81EA\u52A8\u5B9A\u4F4D\u6240\u9700\u6587\u4EF6\u3002\u4FDD\u5B58\u540E\u91CD\u542F codexhost \u751F\u6548\u3002",
|
|
19000
19129
|
launchPathSave: "\u4FDD\u5B58\u8DEF\u5F84",
|
|
19001
19130
|
launchPathReset: "\u6E05\u9664\u81EA\u5B9A\u4E49\u8DEF\u5F84",
|
|
19002
19131
|
launchPathRestart: "\u5DF2\u4FDD\u5B58\uFF0C\u91CD\u542F codexhost \u540E\u751F\u6548\uFF1B\u5F53\u524D\u8FD0\u884C\u4E2D\u7684\u4F1A\u8BDD\u4E0D\u53D7\u5F71\u54CD\u3002",
|
|
@@ -19006,11 +19135,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19006
19135
|
launchPathLoading: "\u6B63\u5728\u8BFB\u53D6\u542F\u52A8\u8BBE\u7F6E\u2026",
|
|
19007
19136
|
launchPathLoadError: "\u65E0\u6CD5\u8BFB\u53D6\u542F\u52A8\u8BBE\u7F6E\uFF0C\u8BF7\u91CD\u65B0\u6253\u5F00\u6B64\u8BE6\u60C5\u9762\u677F\u91CD\u8BD5\u3002",
|
|
19008
19137
|
launchPathSaveError: "\u4FDD\u5B58\u5931\u8D25\u3002\u8BF7\u586B\u5199\u6B64 Host \u4E0A\u5B9E\u9645\u5B58\u5728\u7684\u5B89\u88C5\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u5E76\u786E\u8BA4\u914D\u7F6E\u76EE\u5F55\u53EF\u5199\u3002",
|
|
19009
|
-
|
|
19138
|
+
connectionOfficialWebsite: "\u8BBF\u95EE\u5B98\u7F51",
|
|
19010
19139
|
connectionOpenHarnessWeb: "\u6253\u5F00 DeepSeek Harness Web",
|
|
19011
|
-
connectionDeepSeekTestedVersions: "\u652F\u6301 DSH \u7248\u672C\uFF1A0.1.
|
|
19140
|
+
connectionDeepSeekTestedVersions: "\u652F\u6301 DSH \u7248\u672C\uFF1A0.1.7-rc.1\u30010.1.7-rc.2\u30010.2.0-rc.1 \u548C 0.2.0-rc.2\u3002\u9AD8\u4E8E 0.2.0-rc.2 \u7684\u7248\u672C\u53EF\u4EE5\u5C1D\u8BD5\u8FDE\u63A5\uFF0C\u4F46\u9002\u914D\u5EA6\u53EF\u80FD\u6709\u9650\uFF1B\u4F4E\u4E8E 0.1.7-rc.1 \u7684\u7248\u672C\u9700\u8981\u5148\u5347\u7EA7\u3002",
|
|
19012
19141
|
connectionInstall: "\u5B89\u88C5",
|
|
19013
19142
|
connectionInstallDescription: "\u5C1A\u672A\u68C0\u6D4B\u5230\u8BE5 Harness\u3002",
|
|
19143
|
+
connectionInstallRunning: "\u6B63\u5728\u6240\u9009 Host \u4E0A\u5B89\u88C5\uFF0C\u79BB\u5F00\u9875\u9762\u4E0D\u4F1A\u4E2D\u65AD\u3002\u5B89\u88C5\u540E\u53EF\u80FD\u4ECD\u9700\u767B\u5F55\u6216\u914D\u7F6E\u3002",
|
|
19144
|
+
harnessVersion: harnessVersionChinese,
|
|
19014
19145
|
harnessVersionTitle: "Harness CLI \u7248\u672C",
|
|
19015
19146
|
harnessVersionCurrent: "\u5F53\u524D\u7248\u672C",
|
|
19016
19147
|
harnessVersionLatest: "\u6700\u65B0\u7248\u672C",
|
|
@@ -19097,6 +19228,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19097
19228
|
aboutConsoleFailed: "\u63A7\u5236\u53F0\u6253\u5F00\u5931\u8D25",
|
|
19098
19229
|
pageLabels: Object.freeze({
|
|
19099
19230
|
connections: "\u8FDE\u63A5",
|
|
19231
|
+
"remote-connections": "\u8FDC\u7A0B\u8FDE\u63A5",
|
|
19100
19232
|
appearance: "\u901A\u7528",
|
|
19101
19233
|
accounts: "\u8D26\u53F7",
|
|
19102
19234
|
"session-import": "\u4F1A\u8BDD\u5BFC\u5165",
|
|
@@ -19124,206 +19256,1280 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19124
19256
|
return locale === "zh-CN" ? CHINESE_MESSAGES : ENGLISH_MESSAGES;
|
|
19125
19257
|
}
|
|
19126
19258
|
|
|
19127
|
-
// src/
|
|
19128
|
-
|
|
19129
|
-
|
|
19130
|
-
|
|
19131
|
-
var codex_agent_default = "data:image/png;base64,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";
|
|
19132
|
-
|
|
19133
|
-
|
|
19134
|
-
|
|
19135
|
-
|
|
19136
|
-
|
|
19137
|
-
var hermes_agent_default = "data:image/png;base64,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";
|
|
19138
|
-
|
|
19139
|
-
|
|
19140
|
-
|
|
19141
|
-
|
|
19142
|
-
// src/assets/kiro-agent.svg
|
|
19143
|
-
var kiro_agent_default = 'data:image/svg+xml,<svg width="1200" height="1200" viewBox="0 0 1200 1200" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<rect width="1200" height="1200" rx="260" fill="%239046FF"/>%0A<mask id="mask0_1106_4856" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="272" y="202" width="655" height="796">%0A<path d="M926.578 202.793H272.637V997.857H926.578V202.793Z" fill="white"/>%0A</mask>%0A<g mask="url(%23mask0_1106_4856)">%0A<path d="M398.554 818.914C316.315 1001.03 491.477 1046.74 620.672 940.156C658.687 1059.66 801.052 970.473 852.234 877.795C964.787 673.567 919.318 465.357 907.64 422.374C827.637 129.443 427.623 128.946 358.8 423.865C342.651 475.544 342.402 534.18 333.458 595.051C328.986 625.86 325.507 645.488 313.83 677.785C306.873 696.424 297.68 712.819 282.773 740.645C259.915 783.881 269.604 867.113 387.87 823.883L399.051 818.914H398.554Z" fill="white"/>%0A<path d="M636.123 549.353C603.328 549.353 598.359 510.097 598.359 486.742C598.359 465.623 602.086 448.977 609.293 438.293C615.504 428.852 624.697 424.131 636.123 424.131C647.555 424.131 657.492 428.852 664.447 438.541C672.398 449.474 676.623 466.12 676.623 486.742C676.623 525.998 661.471 549.353 636.375 549.353H636.123Z" fill="black"/>%0A<path d="M771.24 549.353C738.445 549.353 733.477 510.097 733.477 486.742C733.477 465.623 737.203 448.977 744.41 438.293C750.621 428.852 759.814 424.131 771.24 424.131C782.672 424.131 792.609 428.852 799.564 438.541C807.516 449.474 811.74 466.12 811.74 486.742C811.74 525.998 796.588 549.353 771.492 549.353H771.24Z" fill="black"/>%0A</g>%0A</svg>%0A';
|
|
19144
|
-
|
|
19145
|
-
// src/assets/codebuddy-agent.svg
|
|
19146
|
-
var codebuddy_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none"><g clip-path="url(%23clip0_4958_10776)"><rect x="-0.00146484" width="40" height="40" rx="8.63158" fill="%236C4DFF"></rect><path d="M30.5918 3.12856C30.984 2.77679 31.0078 2.7632 31.2955 2.74593C31.7615 2.71193 32.1882 2.93586 32.9147 3.59728C34.6119 5.13959 36.9755 8.30995 38.4449 11.0177L39.0125 12.0691L39.8143 12.4677C40.5885 12.8589 41.8587 13.6611 42.389 14.0913C42.6286 14.2894 42.6626 14.2934 42.912 14.1964C44.0375 13.7583 45.6494 14.3393 47.0714 15.7033C48.3516 16.9303 49.5781 19.0269 50.0478 20.7767C50.1164 21.0582 50.2074 21.6636 50.2405 22.1144C50.3477 23.6973 49.84 24.9617 48.8624 25.5341C48.6628 25.6493 48.6492 25.6807 48.6548 26.1783C48.6998 28.5492 48.0606 30.9165 46.7768 33.2244C45.3276 35.8156 42.7467 38.496 39.2544 41.0214C37.3789 42.3862 32.9421 44.9717 30.9361 45.8792C26.1304 48.0428 22.278 48.8718 18.9316 48.4618C16.9356 48.22 14.6761 47.4417 13.3392 46.5373C12.9873 46.294 12.9318 46.2791 12.6629 46.3561C11.2318 46.7671 9.35752 45.9219 7.76528 44.1544C7.13027 43.448 6.10508 41.7136 5.77273 40.7853C5.00409 38.6128 5.15721 36.6516 6.18105 35.4808C6.44522 35.1797 6.4538 35.1667 6.39603 34.6598C6.30065 33.8298 6.25703 32.6017 6.30061 31.809L6.33535 31.0683L5.22371 29.1019C3.50212 26.0386 2.40857 23.4663 1.98661 21.501C1.76389 20.4233 1.77734 19.9446 2.05091 19.5908C2.21741 19.3773 2.76347 19.1568 3.42155 19.0352C5.07869 18.7442 8.69327 19.0065 12.7142 19.7165L13.1316 19.789L14.0497 18.977C15.5733 17.6274 16.5858 16.8705 18.4518 15.707C20.3967 14.4901 22.5922 13.4895 25.064 12.6968L25.8564 12.4423L26.2926 11.2974C27.8535 7.17701 29.452 4.13917 30.5918 3.12856ZM17.5169 24.2439C15.7528 25.2625 14.8705 25.7716 14.2223 26.3423C11.5975 28.6536 10.6172 32.3151 11.7346 35.6292C12.0106 36.4475 12.5193 37.3301 13.5378 39.0941C14.5563 40.8582 15.0662 41.7401 15.637 42.3882C17.9483 45.0128 21.6091 45.9938 24.923 44.8764C25.7414 44.6004 26.6233 44.0909 28.3875 43.0724L38.5362 37.213C40.3004 36.1945 41.1826 35.6854 41.8308 35.1147C44.4555 32.8034 45.4363 29.1426 44.319 25.8286C44.043 25.0103 43.5343 24.1277 42.5158 22.3637C41.4974 20.5997 40.9873 19.7177 40.4166 19.0696C38.1053 16.4448 34.4441 15.4631 31.1301 16.5806C30.3118 16.8565 29.4297 17.3661 27.6656 18.3846L17.5169 24.2439Z" fill="white"></path><rect x="18.4944" y="31.334" width="4.00904" height="8.32646" rx="2.00452" transform="rotate(-30 18.4944 31.334)" fill="white"></rect><rect x="29.311" y="25.0898" width="4.00904" height="8.32646" rx="2.00452" transform="rotate(-30 29.311 25.0898)" fill="white"></rect></g><defs><clipPath id="clip0_4958_10776"><rect x="-0.00146484" width="40" height="40" rx="8.63158" fill="white"></rect></clipPath></defs></svg>';
|
|
19147
|
-
|
|
19148
|
-
// src/assets/workbuddy-agent.svg
|
|
19149
|
-
var workbuddy_agent_default = 'data:image/svg+xml,<svg width="130" height="130" viewBox="0 0 130 130" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<g clip-path="url(%23clip0_283_481)">%0A<rect width="130" height="130" rx="28.0526" fill="url(%23paint0_linear_283_481)"/>%0A<g filter="url(%23filter0_f_283_481)">%0A<circle cx="108.36" cy="141.759" r="41.8289" fill="%23FFE355" fill-opacity="0.49" style="fill:%23FFE355;fill:color(display-p3 1.0000 0.8891 0.3348);fill-opacity:0.49;"/>%0A</g>%0A<path fill-rule="evenodd" clip-rule="evenodd" d="M99.4282 10.1638C100.703 9.02064 100.78 8.97669 101.714 8.92058C103.229 8.80992 104.616 9.53654 106.977 11.6861C112.493 16.6987 120.175 27.0043 124.95 35.8049L126.795 39.2201L129.401 40.5162C131.917 41.7875 136.044 44.394 137.767 45.7919C138.547 46.4365 138.657 46.4497 139.467 46.1344C143.125 44.7098 148.365 46.5984 152.987 51.0325C157.148 55.0201 161.133 61.833 162.659 67.5195C162.882 68.4346 163.178 70.4028 163.286 71.8681C163.634 77.013 161.984 81.1226 158.806 82.9826C158.158 83.3572 158.115 83.4591 158.133 85.0776C158.279 92.7829 156.202 100.474 152.03 107.974C147.32 116.396 138.933 125.107 127.583 133.315C121.488 137.751 107.067 146.153 100.547 149.102C84.9287 156.134 72.4081 158.831 61.5321 157.498C55.0448 156.712 47.7017 154.18 43.357 151.241C42.2133 150.45 42.0324 150.402 41.1585 150.652C36.5074 151.988 30.4158 149.242 25.241 143.498C23.177 141.202 19.8464 135.564 18.7664 132.547C16.2684 125.487 16.7648 119.115 20.0922 115.31C20.952 114.33 20.9796 114.289 20.7918 112.641C20.4817 109.943 20.3406 105.951 20.4823 103.375L20.5947 100.968L16.9813 94.5763C11.3858 84.6202 7.8314 76.2603 6.46025 69.8729C5.7364 66.3704 5.78144 64.8166 6.67051 63.6668C7.21161 62.9725 8.98625 62.2531 11.1257 61.858C16.5115 60.9125 28.2577 61.7685 41.3255 64.0757L42.6832 64.3101L45.6662 61.6722C50.6181 57.2859 53.9074 54.8262 59.9722 51.0446C66.2933 47.0897 73.4271 43.8362 81.4607 41.26L84.0384 40.4337L85.4554 36.7142C90.5286 23.3221 95.7238 13.4483 99.4282 10.1638ZM56.9346 78.7893C51.2012 82.0995 48.3345 83.7553 46.228 85.6101C37.6975 93.1218 34.5094 105.02 38.1411 115.791C39.038 118.45 40.6927 121.318 44.0029 127.051C47.3132 132.785 48.9688 135.651 50.8238 137.758C58.3355 146.288 70.2338 149.476 81.0044 145.845C83.664 144.948 86.5308 143.292 92.2642 139.982L125.248 120.939C130.981 117.629 133.848 115.974 135.955 114.119C144.485 106.607 147.673 94.7089 144.042 83.9384C143.145 81.2787 141.489 78.412 138.179 72.6785C134.869 66.9451 133.214 64.078 131.359 61.9714C123.847 53.4409 111.949 50.2528 101.178 53.8845C98.5186 54.7814 95.6515 56.4361 89.918 59.7463L56.9346 78.7893Z" fill="url(%23paint1_linear_283_481)"/>%0A<rect x="60.1133" y="101.836" width="13.0294" height="27.061" rx="6.51468" transform="rotate(-30 60.1133 101.836)" fill="white" style="fill:white;fill-opacity:1;"/>%0A<rect x="95.2666" y="81.54" width="13.0294" height="27.061" rx="6.51468" transform="rotate(-30 95.2666 81.54)" fill="white" style="fill:white;fill-opacity:1;"/>%0A</g>%0A<defs>%0A<filter id="filter0_f_283_481" x="30.78" y="64.179" width="155.161" height="155.16" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">%0A<feFlood flood-opacity="0" result="BackgroundImageFix"/>%0A<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>%0A<feGaussianBlur stdDeviation="17.8756" result="effect1_foregroundBlur_283_481"/>%0A</filter>%0A<linearGradient id="paint0_linear_283_481" x1="65" y1="0" x2="65" y2="130" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%230EC8A9" style="stop-color:%230EC8A9;stop-color:color(display-p3 0.0565 0.7837 0.6625);stop-opacity:1;"/>%0A<stop offset="1" stop-color="%2301C886" style="stop-color:%2301C886;stop-color:color(display-p3 0.0021 0.7858 0.5246);stop-opacity:1;"/>%0A</linearGradient>%0A<linearGradient id="paint1_linear_283_481" x1="54.1591" y1="36.0036" x2="114.973" y2="141.337" gradientUnits="userSpaceOnUse">%0A<stop stop-color="white" stop-opacity="0.8" style="stop-color:white;stop-opacity:0.8;"/>%0A<stop offset="0.437689" stop-color="white" style="stop-color:white;stop-opacity:1;"/>%0A</linearGradient>%0A<clipPath id="clip0_283_481">%0A<rect width="130" height="130" rx="28.0526" fill="white" style="fill:white;fill-opacity:1;"/>%0A</clipPath>%0A</defs>%0A</svg>%0A';
|
|
19150
|
-
|
|
19151
|
-
// src/assets/cursor-agent.svg
|
|
19152
|
-
var cursor_agent_default = 'data:image/svg+xml,<svg fill="none" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m512 325.5c0 7.124 0 14.24-.041 21.364-.034 5.999-.103 11.998-.268 17.99-.356 13.068-1.124 26.245-3.448 39.169-2.359 13.109-6.205 25.306-12.266 37.222-5.958 11.703-13.746 22.419-23.029 31.709-9.29 9.29-20 17.072-31.71 23.03-11.909 6.061-24.113 9.907-37.222 12.266-12.923 2.324-26.101 3.092-39.169 3.448-5.999.165-11.991.233-17.99.268-7.123.048-14.24.041-21.364.041h-139c-7.124 0-14.24 0-21.364-.041-5.999-.035-11.998-.103-17.99-.268-13.068-.356-26.245-1.124-39.169-3.448-13.109-2.359-25.306-6.205-37.2219-12.266-11.7033-5.958-22.4194-13.746-31.7095-23.03-9.29-9.29-17.0717-19.999-23.0296-31.709-6.0608-11.909-9.90707-24.113-12.26557-37.222-2.32422-12.924-3.0921-26.101-3.448618-39.169-.164546-5.999-.2331071-11.991-.2673876-17.99-.0274244-7.124-.0274244-14.24-.0274244-21.364v-139c0-7.124 0-14.24.0411366-21.364.0342805-5.999.1028414-11.998.2673884-17.99.356517-13.068 1.124405-26.245 3.448615-39.169 2.3585-13.1091 6.20478-25.3061 12.26556-37.222 5.958-11.7034 13.7465-22.4195 23.0297-31.7095 9.29-9.29 19.9992-17.0717 31.7094-23.0296 11.9091-6.06084 24.1129-9.90711 37.2222-12.26561 12.923-2.32422 26.101-3.092104 39.169-3.448622 5.999-.164546 11.991-.233107 17.99-.2673875 7.117-.0342805 14.233-.0342805 21.357-.0342805h139c7.124 0 14.24 0 21.364.0411366 5.999.0342805 11.998.1028414 17.99.2673884 13.068.356517 26.245 1.124405 39.169 3.448615 13.109 2.3585 25.306 6.20478 37.222 12.26556 11.703 5.958 22.419 13.7465 31.709 23.0297 9.29 9.29 17.072 19.9992 23.03 31.7094 6.061 11.9091 9.907 24.1129 12.266 37.2222 2.324 12.923 3.092 26.101 3.448 39.169.165 5.999.233 11.991.268 17.99.048 7.123.041 14.24.041 21.364v139z" fill="%2314120b"/><path d="m186.5 4h139c7.125 0 14.231-.00004 21.341.04102 5.985.0342 11.952.10221 17.903.26562h.001c13.003.35475 25.943 1.11709 38.569 3.3877 12.775 2.29827 24.592 6.03146 36.118 11.89356v-.001c10.974 5.5867 21.052 12.8384 29.848 21.457l.847.8379c8.993 8.993 16.525 19.3594 22.292 30.6934v.001c5.678 11.1575 9.36 22.6023 11.674 34.9208l.219 1.195c2.129 11.837 2.932 23.95 3.316 36.132l.072 2.438c.164 5.958.232 11.919.266 17.904v.004c.048 7.107.041 14.207.041 21.337v129.344l-.007-.007v9.656c0 7.125 0 14.231-.041 21.341-.034 5.985-.102 11.952-.266 17.903v.001c-.354 13.003-1.117 25.943-3.387 38.569-2.227 12.376-5.8 23.853-11.351 35.037l-.543 1.08c-5.766 11.327-13.306 21.701-22.293 30.695-8.993 8.993-19.361 16.526-30.695 22.293-11.518 5.861-23.342 9.595-36.116 11.893-11.837 2.129-23.95 2.932-36.132 3.316l-2.438.072c-5.958.164-11.919.232-17.904.266h-.004c-7.107.048-14.207.041-21.337.041h-139c-7.125 0-14.231 0-21.341-.041-5.985-.034-11.952-.102-17.903-.266h-.001c-13.003-.355-25.944-1.117-38.57-3.388-12.7742-2.298-24.5914-6.031-36.1165-11.893h.001c-10.974-5.587-21.0534-12.837-29.8496-21.456l-.8467-.838c-8.7118-8.712-16.0531-18.713-21.7461-29.634l-.5459-1.06-.5439-1.081c-5.371-10.816-8.8905-21.919-11.12991-33.84l-.21973-1.196c-2.27061-12.626-3.03294-25.566-3.38769-38.569v-.001c-.16341-5.958-.23142-11.918-.26563-17.903-.02736-7.112-.02734-14.219-.02734-21.341v-139c0-7.125-.00004-14.231.04102-21.341.0342-5.985.10221-11.952.26562-17.903v-.001c.35476-13.003 1.117-25.944 3.3877-38.57 2.29828-12.7744 6.03156-24.5916 11.89356-36.1166l-.001-.001c5.7666-11.327 13.3073-21.6999 22.294-30.6934 8.9933-8.9933 19.3607-16.5261 30.6953-22.2929 11.5173-5.8615 23.3406-9.59619 36.1148-11.89458 11.837-2.12877 23.951-2.93016 36.133-3.31445l2.438-.07227c5.958-.16342 11.919-.23142 17.904-.26562l-.001-.00098c7.104-.03421 14.211-.0332 21.335-.0332z" stroke="%23edecec" stroke-opacity=".2" stroke-width="8"/><path d="m415.035 156.35-151.503-87.4695c-4.865-2.8094-10.868-2.8094-15.733 0l-151.4969 87.4695c-4.0897 2.362-6.6146 6.729-6.6146 11.459v176.383c0 4.73 2.5249 9.097 6.6146 11.458l151.5039 87.47c4.865 2.809 10.868 2.809 15.733 0l151.504-87.47c4.089-2.361 6.614-6.728 6.614-11.458v-176.383c0-4.73-2.525-9.097-6.614-11.459zm-9.516 18.528-146.255 253.32c-.988 1.707-3.599 1.01-3.599-.967v-165.872c0-3.314-1.771-6.379-4.644-8.044l-143.645-82.932c-1.707-.988-1.01-3.599.968-3.599h292.509c4.154 0 6.75 4.503 4.673 8.101h-.007z" fill="%23edecec"/></svg>';
|
|
19153
|
-
|
|
19154
|
-
// src/assets/omp-agent.svg
|
|
19155
|
-
var omp_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">%0A <defs>%0A <linearGradient id="omp-gradient" x1="0" y1="0" x2="1" y2="1">%0A <stop offset="0" stop-color="%23ed4abf" />%0A <stop offset=".5" stop-color="%239b4dff" />%0A <stop offset="1" stop-color="%235ad8e6" />%0A </linearGradient>%0A </defs>%0A <path%0A fill="url(%23omp-gradient)"%0A transform="translate(-14.4 -20.2) scale(1.45)"%0A d="M14 16h36v8H40v32h-8V24h-6v22h-8V24h-4z"%0A />%0A</svg>%0A';
|
|
19156
|
-
|
|
19157
|
-
// src/assets/opencode-agent.png
|
|
19158
|
-
var opencode_agent_default = "data:image/png;base64,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";
|
|
19159
|
-
|
|
19160
|
-
// src/assets/qoder-agent.svg
|
|
19161
|
-
var qoder_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="206" height="206" fill="none" viewBox="0 0 206 206"><rect width="206" height="206" fill="%23f3f3f3" rx="52"/><path fill="%230f0d0c" fill-rule="evenodd" d="M104.003 35.836q.178.08.305.145.4.2.629.321l49.944 26.33.019.01q.139.073.273.155 8.37 4.521 12.99 13.05 4.587 8.466 4.587 19.301v22.489q0 .238-.022.474v40.14q0 7.99-6.72 12.312-6.719 4.323-13.987 1.01l-8.542-3.891-.03.017-.17.097-.12.071q-.849.502-1.319.758-.077.043-.308.165l-.106.056-.252.133q-.622.337-1.213.631l-.619.301-.15.071a79 79 0 0 1-1.167.542l-.773.336q-.387.17-1.115.46l-.135.054-.11.046-.167.068a13 13 0 0 1-.588.228q-.398.146-1.256.444l-.002.001-.164.058q-.249.091-.55.188-.89.294-2.014.605l-3.505.961q-.975.27-1.813.459l-.396.083-.398.081q-.564.12-.9.186a11 11 0 0 1-.52.092l-.509.082-.066.011q-.472.08-.74.118-.189.029-.577.074l-.396.05-.657.076q-.221.025-.494.045l-.114.011-.051.004a42 42 0 0 1-1.407.098l.037-.004q-.223.02-.447.02h-.061q-.6.028-1.016.028h-.666l-.111-.001-.222-.003a24 24 0 0 1-1.27-.049l-.028-.002-.17-.006-.381-.019q-.092-.005-.185-.013l-.7-.062q-.66-.063-1.264-.142l-.199-.024q-.065-.007-.129-.017a50 50 0 0 1-1.393-.228l-.502-.094-.03-.006a12 12 0 0 1-.601-.123l-.046-.011-.066-.015-.121-.028a31 31 0 0 1-1.381-.343l-.027-.007a10 10 0 0 1-.428-.113h-.001a31 31 0 0 1-1.737-.547 5 5 0 0 1-.459-.168l-.12-.046a39 39 0 0 1-1.209-.472 11 11 0 0 1-.333-.144l-.087-.038-.171-.074a29 29 0 0 1-1.098-.502l-.08-.038-.015-.007a6 6 0 0 1-.251-.12q-.104-.052-.209-.107l-.062-.032a5 5 0 0 1-.357-.17l-.003-.001-49.452-26.07a5 5 0 0 1-.972-.517 31 31 0 0 1-6.12-4.384l-.003-.003-.011-.011-.045-.04a32 32 0 0 1-2.374-2.438l-.022-.026-.005-.006a36 36 0 0 1-1.448-1.788q-7.307-9.666-7.307-23.449V90.495q0-.996.043-2.303a20 20 0 0 1 .06-.904q.05-.84.119-1.563a19 19 0 0 1 .11-.975l.035-.301q.083-.72.14-1.117a57 57 0 0 1 .167-1.031l.038-.234q.115-.71.192-1.108v-.005l-.003.017q.023-.15.044-.258a49 49 0 0 1 .389-1.818q.18-.803.45-1.817.051-.2.132-.493l.023-.08a75 75 0 0 1 .604-2.032q.047-.15.12-.356l.012-.032q.359-1.105.677-1.972a35 35 0 0 1 .313-.821l.08-.21q.333-.864.526-1.323l-.004.007q.056-.147.107-.266a16 16 0 0 1 .31-.713q.327-.75.5-1.132a55 55 0 0 1 .668-1.404q.244-.502.382-.772l.032-.065q.075-.157.136-.278a15 15 0 0 1 .36-.676l.137-.257a58 58 0 0 1 .995-1.79 30 30 0 0 1 .642-1.095l-.004.005.007-.011-.007.011q.078-.137.131-.227.155-.257.429-.682.27-.44.588-.93.231-.356.671-1.004l.314-.456.297-.43.063-.09v-.002q.12-.18.211-.306.09-.128.296-.403l.13-.174q.471-.645.726-.979l.357-.456.331-.424a36 36 0 0 1 .837-1.05 17 17 0 0 1 .63-.75l.327-.378q.358-.417.556-.64l.696-.767a74 74 0 0 1 1.015-1.086l.011-.015a11 11 0 0 1 .54-.555l.104-.102a78 78 0 0 1 1.898-1.84 50 50 0 0 1 1.59-1.424l-.011.008q.148-.137.256-.232a5 5 0 0 1 .275-.223l.027-.02.017-.014a77 77 0 0 1 1.496-1.217q.303-.24.475-.37a83 83 0 0 1 1.224-.92q.126-.088.424-.306.585-.423 1.403-.976l-.002.001.045-.032a13 13 0 0 1 .466-.315q.992-.647 1.703-1.075.141-.088.456-.268l.103-.061a47 47 0 0 1 1.32-.758l.632-.337.033-.017q.623-.336 1.213-.631.273-.136.774-.374.509-.243 1.163-.539l.415-.182.358-.155q.448-.193 1.248-.514l.225-.088q.365-.143.565-.218a88 88 0 0 1 1.515-.536q.339-.12.556-.19.924-.302 1.993-.6l3.509-.96a37 37 0 0 1 1.807-.46q.248-.057.627-.133.482-.11 1.1-.228a17 17 0 0 1 .743-.126l.298-.05a33 33 0 0 1 .862-.135l.33-.04.331-.04.248-.032q.424-.054.664-.08.165-.016.33-.023l.324-.024q.695-.06 1.128-.081.21-.013.655-.026h.016l.336-.01a23 23 0 0 1 1.147-.017l.185.001.314.005a26 26 0 0 1 1.376.048l.23.013.344.018q.18.01.524.046l.306.027q.609.058 1.245.14l.014.002h.001q.165.018.29.036.642.086 1.428.228.098.018.194.04l.003-.001.303.059q.336.06.554.11.115.024.294.073l.072.016q.328.073.682.162.293.073.6.157l-.004-.002.033.008q.165.04.304.078l.045.013q.09.024.168.049l.012.003a31 31 0 0 1 1.731.553q.2.067.444.166.697.252 1.267.491l.148.064.459.2q.515.23 1.045.485zm-2.971-1.263h-.002q.004 0 .008.002zm3.871 127.988.763.402q.077.042.269.139l.09.046q.1.045.12.057l.136.064q.41.198.771.353l.011.005q.127.053.317.138l.072.032q.341.141.956.372l.05.02.183.068.014.006q.599.21 1.264.398l-.084-.018q.104.023.206.05l.208.054q.52.14 1.057.261l.073.017.072.016.113.026.108.019.031.006.436.082q.536.095 1.052.173l.2.025q.44.057.878.098l.611.055.186.01.376.016.028.002q.261.017.429.023.098.004.368.008l.239.003h.615q.208 0 .643-.021a4 4 0 0 1 .251-.007h.022l.137-.007-.018.003.178-.013q.25-.012.835-.061l.156-.014.154-.012.07-.006.539-.061.504-.064q.204-.024.312-.04a20 20 0 0 0 .618-.099l.402-.066.199-.032-.009.004q.057-.013.116-.024.252-.048.838-.172l.33-.067.255-.053q.608-.138 1.377-.35l3.477-.953a37 37 0 0 0 1.655-.499l.104-.034.127-.047.239-.084h.002q.78-.27 1.191-.421l.146-.059.135-.055.22-.091.141-.056q.579-.231.832-.342l.639-.278q.57-.257.997-.461l.089-.042.509-.247q.458-.228 1.02-.532l.158-.083.218-.116q.096-.049.178-.095.317-.174 1.018-.587l.207-.122.128-.074h.001q.124-.073.226-.13a39 39 0 0 0 1.26-.793l.358-.245a4.95 4.95 0 0 1 4.843-.416l10.977 5.001q2.352 1.073 4.527-.327t2.176-3.986v-40.637q0-.237.022-.474V95.148q0-17.112-12.596-23.755l-.295-.156-.163-.079-.176-.086a19 19 0 0 0-.767-.354q-.265-.12-.385-.168-.35-.148-.871-.337l-.182-.067-.102-.04q-.56-.194-1.217-.383l-.097-.026-.222-.058a38 38 0 0 0-1.026-.253l-.122-.026a31 31 0 0 0-.681-.144l-.118-.023a25 25 0 0 0-1.016-.163 6 6 0 0 1-.225-.027 29 29 0 0 0-.873-.1h-.006l-.327-.03a37 37 0 0 0-1.369-.078q-.12-.008-.523-.008h-.509a44 44 0 0 0-1.116.038l-.18.007q-.256.013-.859.063l-.046.004-.204.014-.135.01a20 20 0 0 0-.454.053 35 35 0 0 1-.636.075l-.206.025q-.145.022-.496.082l-.612.1q-.197.03-.279.046-.171.032-.602.125l-.237.051a22 22 0 0 1-.524.112q-.735.168-1.382.346l-3.476.953a36 36 0 0 0-1.54.46l-.291.102-.355.122a27 27 0 0 0-1.659.61q-.613.242-.941.383l-.648.284-.42.193V91.28q0 1.152-.056 2.307-.01.223-.037.576l-.001.004-.019.28-.001.026a43 43 0 0 1-.113 1.478 25 25 0 0 1-.076.68l-.052.433-.03.249a32 32 0 0 1-.234 1.677l-.056.354v.002q-.138.833-.221 1.265-.19.999-.399 1.935l-.027.11a45 45 0 0 1-.46 1.83l-.141.512a62 62 0 0 1-.542 1.831l-.151.467a54 54 0 0 1-.663 1.928 19 19 0 0 1-.2.526l-.017.042.004-.01-.112.295-.073.188q-.326.841-.495 1.251a27 27 0 0 1-.354.834l-.063.152q-.269.631-.492 1.106-.124.28-.359.772l-.135.283-.098.204a46 46 0 0 1-.971 1.916l-.314.587-.216.397q-.188.339-.563.993l-.076.132a32 32 0 0 1-.507.856q-.284.475-.6.969l-.084.133a42 42 0 0 1-.965 1.488l-.22.327-.021.032-.58.845-.066.092-.58.805a53 53 0 0 1-1.41 1.856l-.212.268q-.316.401-.48.601-.234.29-.674.806l-.04.046-.005.005q-.386.461-.854.988-.237.266-.69.767a46.143 46.143 0 0 1-1.393 1.477l-.219.223a55 55 0 0 1-1.216 1.193l-.18.174-.202.193-.258.247q-.778.722-1.567 1.402l-.099.086-.08.071-.08.072q-.067.06-.137.117l-.198.165a76 76 0 0 1-1.308 1.071l-.006.005q-.134.11-.339.266l-.147.113-.083.063a58 58 0 0 1-1.375 1.031q-.198.147-.307.225-.66.473-1.278.885l-.32.222-.103.07q-.884.584-1.833 1.157l-.009.005q.348 15.759 11.753 22.249zM85.109 152.14q-1.87-5.93-1.874-12.803v-22.492q0-1.2.056-2.394a20 20 0 0 1 .058-.825l.023-.336q.054-.795.098-1.255.019-.19.059-.524.029-.237.047-.42l.036-.309q.084-.721.145-1.146.06-.399.16-.987l.025-.153q.126-.756.202-1.176a50 50 0 0 1 .435-2.086l.011-.046a61 61 0 0 1 .594-2.337q.275-.996.552-1.867l.01-.028q.022-.074.045-.144.054-.17.132-.387l.006-.016q.387-1.18.662-1.928a36 36 0 0 1 .307-.805 52 52 0 0 1 1.037-2.544q.32-.736.5-1.132.162-.36.48-1.016l.003-.01q.271-.57.547-1.11.136-.273.4-.78l.138-.267a54 54 0 0 1 1.136-2.052l.267-.46.298-.51q.215-.36.604-.977.152-.248.443-.703l.177-.278q.228-.352.645-.965.386-.578.667-.969.323-.46.674-.931.465-.637.71-.958.275-.36.721-.922l.345-.434.39-.49q.232-.281.686-.819l.023-.028.204-.239a51 51 0 0 1 1.37-1.552q.31-.343.926-.994.368-.388.717-.737.525-.533 1.23-1.206.44-.428.662-.63a61 61 0 0 1 1.657-1.483l.013-.012.011-.01-.011.01a8 8 0 0 1 .61-.519q.738-.615 1.302-1.06.203-.159.561-.432.655-.507 1.155-.872l.542-.397q.627-.453 1.35-.938l.049-.034q.216-.15.395-.265a59 59 0 0 1 1.883-1.19q.193-.11.295-.171a50 50 0 0 1 1.797-1.02l.208-.11.148-.076a44 44 0 0 1 1.986-1.005q.645-.307 1.169-.545l.754-.331q.534-.23 1.292-.529.481-.192.76-.297.6-.228 1.397-.494l.247-.086.292-.1a49 49 0 0 1 2.128-.645l3.508-.961q.325-.09.667-.178L100.3 45.05a21 21 0 0 0-.393-.201l-.006-.003.007.004a10 10 0 0 1-.29-.137 28 28 0 0 0-1.186-.536l-.002-.001a16 16 0 0 0-.783-.3 7 7 0 0 1-.282-.107l-.036-.013a24 24 0 0 0-1.27-.405l-.086-.023q-.12-.03-.197-.05a19 19 0 0 0-.981-.242 6 6 0 0 1-.354-.085l-.111-.021-.36-.07h-.003l-.182-.035a23 23 0 0 0-.95-.152 9 9 0 0 1-.291-.035q-.405-.052-.83-.093l-.354-.032-.067-.007h-.004l-.103-.01-.207-.011-.344-.019a18 18 0 0 0-.918-.031l-.311-.005h-.146a8 8 0 0 0-.357 0q-.087 0-.354.01-.25.009-.403.012-.29.009-.396.015-.315.017-.895.066l-.284.021-.23.017-.033.003a39 39 0 0 0-.608.077l-.34.04-.262.032-.46.075a64 64 0 0 1-.811.134q-.489.094-.942.196-.327.066-.456.096-.654.149-1.381.351l-3.516.964q-.838.233-1.604.483-.09.03-.25.086l-.276.097q-.762.265-1.128.399l-.385.15-.207.08a44 44 0 0 0-.952.391l-.33.144-.358.156a58 58 0 0 0-.93.432l-.005.002q-.41.195-.594.287-.456.228-.983.512l-.034.018-.595.317a39 39 0 0 0-1.145.664q-.223.128-.268.156a50 50 0 0 0-1.574.997l-.056.04-.174.12a47 47 0 0 0-2.596 1.874q-.14.106-.374.291-.059.046-.088.07-.623.495-1.143.93-.09.079-.264.216a9 9 0 0 1-.21.188 43 43 0 0 0-1.92 1.752q-.45.432-1.045 1.027a22 22 0 0 1-.308.302l-.011.014a12 12 0 0 1-.269.287q-.51.543-.75.806l-.666.734q-.11.125-.411.474l-.466.54a13 13 0 0 0-.433.522q-.323.395-.572.72l-.357.457-.332.424q-.156.204-.557.754l-.206.277-.162.22-.03.045q-.094.14-.169.246l-.275.4-.297.43q-.362.534-.532.796a41 41 0 0 0-.556.88q-.205.317-.282.444l-.02.037q-.117.205-.217.365-.232.385-.415.714a55 55 0 0 0-.87 1.564l-.133.248a19 19 0 0 1-.221.408l-.068.134-.004.01q-.098.205-.173.349-.07.138-.276.563l-.17.348q-.266.552-.384.811a91 91 0 0 0-.435.988q-.044.103-.131.295a8 8 0 0 0-.142.329l-.002.006.008-.018q-.05.13-.087.219-.147.352-.425 1.075l-.086.222-.068.175q-.13.337-.184.482a46 46 0 0 0-.57 1.663l-.07.209a5 5 0 0 1-.098.3q-.155.493-.44 1.494l-.016.053a9 9 0 0 0-.095.36 38 38 0 0 0-.407 1.643l-.008.036q-.135.582-.274 1.29v.005l.003-.018q-.023.15-.044.257-.054.277-.145.844l-.047.283q-.09.54-.138.847-.032.225-.099.802l-.07.586a12 12 0 0 0-.047.422q-.06.62-.101 1.342l-.026.35q-.019.23-.023.307-.034 1.072-.034 1.906v22.489q0 10.089 4.938 16.98.183.257.372.507.45.599 1.037 1.278a22 22 0 0 0 1.648 1.689l.04.037a21.4 21.4 0 0 0 4.484 3.147l.03.015.051.027zm8.026-23.904q.47-.383.73-.601l.197-.164.014-.012.08-.071.173-.153q.705-.608 1.35-1.206l.146-.142.203-.193.15-.146a48 48 0 0 0 1.62-1.612 59 59 0 0 0 1.356-1.483 37 37 0 0 0 .788-.91l.019-.022a29 29 0 0 0 .899-1.097l.232-.293a40 40 0 0 0 1.143-1.505l.562-.78.022-.031.49-.716.002-.003.188-.28q.254-.377.359-.542.16-.245.432-.677l.088-.141a26 26 0 0 0 .564-.911q.104-.166.347-.589l.082-.143q.33-.574.485-.853l.171-.315.279-.523a41 41 0 0 0 .786-1.549l.104-.217.113-.238a37.223 37.223 0 0 0 .679-1.496l.016-.042.149-.347q.131-.303.181-.426.154-.374.439-1.112l.076-.194.081-.217.07-.178.082-.21q.297-.815.567-1.649l.156-.479q.189-.607.426-1.45l.122-.445q.199-.726.36-1.428l.053-.221q.135-.61.296-1.46.064-.33.177-1.021l.001-.002.046-.294.016-.1q.049-.3.065-.418a30 30 0 0 0 .134-1.055l.05-.421q.037-.296.049-.425.04-.385.089-1.179l.002-.027.024-.358.007-.092.015-.195q.047-.981.047-1.896V79.333l-.311.259-.116.094-.117.094-.003.003.012-.009a8 8 0 0 1-.256.227q-.683.59-1.382 1.24-.145.133-.507.483a50 50 0 0 0-3.576 3.782l-.197.231q-.412.488-.551.655l-.345.435-.341.428a53 53 0 0 0-.596.762q-.19.248-.608.82a43 43 0 0 0-1.103 1.563q-.38.56-.525.783l-.164.258q-.247.388-.385.61-.358.57-.484.778l-.267.46-.264.453a47 47 0 0 0-1.392 2.579q-.235.463-.466.947v.002q-.272.565-.387.817a85 85 0 0 0-.799 1.835q-.228.55-.508 1.289l-.066.171q-.13.338-.19.5-.225.614-.6 1.755l-.048.134-.003.001-.035.112-.05.159a40 40 0 0 0-.547 1.889 51 51 0 0 0-.407 1.643l-.004.014a39 39 0 0 0-.314 1.518q-.059.325-.173 1.015l-.028.171q-.088.512-.13.791-.036.254-.103.831l-.03.251q-.018.192-.059.525l-.035.301q-.028.303-.073.97l-.026.366-.022.287q-.018.23-.022.308-.046.959-.046 1.923z" clip-rule="evenodd"/><path stroke="%230f0d0c" stroke-width="3.5" d="m41.782 61.323.004-.005-.07.114q-.34.561-.572.98a55 55 0 0 0-1.133 2.048l-.075.138a15 15 0 0 0-.42.816l-.032.065q-.139.27-.382.772l-.178.365q-.32.665-.49 1.039a100 100 0 0 0-.57 1.289 16 16 0 0 0-.347.822l.004-.008a50 50 0 0 0-.606 1.534l-.06.156q-.17.435-.253.665a54 54 0 0 0-.677 1.972l-.012.032a10 10 0 0 0-.177.536 75 75 0 0 0-.547 1.851l-.023.08q-.081.293-.131.494a47 47 0 0 0-.492 1.99 49 49 0 0 0-.348 1.645q-.02.108-.044.258l.003-.017v.005q-.077.397-.192 1.108l-.038.234a57 57 0 0 0-.167 1.03 42 42 0 0 0-.175 1.419l-.024.19q-.066.536-.086.785a43 43 0 0 0-.118 1.563l-.016.2q-.03.392-.045.704a72 72 0 0 0-.043 2.303v22.488q0 13.783 7.307 23.449l.277.363a36 36 0 0 0 1.176 1.431l.022.026q1.169 1.332 2.374 2.438l.045.04.011.011.004.003a31 31 0 0 0 6.119 4.384q.458.313.972.517l49.452 26.07.003.001q.177.093.357.17l.062.032q.105.055.209.107.112.057.251.12l.015.007.08.038q.606.29 1.098.502l.171.074.087.038q.19.085.333.144.49.203 1.209.472l.12.046q.225.096.459.168a31 31 0 0 0 1.737.547h.001q.235.067.428.113l.027.007q.74.2 1.381.343l.121.028.066.015.046.011q.239.057.601.123l.03.006.502.094q.708.126 1.393.228.065.01.129.017l.199.024q.604.08 1.264.142l.7.062q.093.008.185.013l.381.019.17.006.028.002q.42.026.609.032a24 24 0 0 0 .994.021h.666q.416 0 1.016-.028h.061q.224 0 .447-.02l-.037.004q.163-.007.295-.017a42 42 0 0 0 1.112-.081l.051-.004.114-.011q.273-.02.494-.045l.657-.076.396-.05q.388-.045.577-.074a35 35 0 0 0 .806-.129l.509-.082.062-.01q.26-.042.458-.082.336-.066.9-.186l.398-.081.396-.083a39 39 0 0 0 1.813-.459l3.505-.961q1.123-.31 2.014-.605.301-.097.55-.188l.164-.058.002-.001q.858-.298 1.256-.444.236-.083.588-.228l.167-.068.11-.046.135-.054q.728-.29 1.115-.46l.773-.336a79 79 0 0 0 1.167-.542l.15-.071.619-.301q.59-.294 1.213-.631l.252-.133.106-.056q.231-.121.308-.165.47-.256 1.319-.758l.12-.071.17-.097.03-.017 8.542 3.891q7.268 3.313 13.987-1.01 6.72-4.322 6.72-12.312v-40.14q.022-.236.022-.474V95.148q0-10.834-4.587-19.302-4.62-8.528-12.99-13.049a5 5 0 0 0-.273-.155l-.019-.01-49.944-26.33a30 30 0 0 0-.629-.322 9 9 0 0 0-.305-.144l-.04-.02a39 39 0 0 0-1.504-.684l-.148-.064q-.57-.24-1.267-.491a8 8 0 0 0-.522-.192 31 31 0 0 0-1.653-.527l-.012-.003-.168-.05-.045-.012-.304-.078-.033-.008.005.002a32 32 0 0 0-1.283-.319l-.072-.016a5 5 0 0 0-.294-.073 14 14 0 0 0-.645-.127l-.212-.042h-.003l-.194-.039q-.786-.142-1.427-.228a9 9 0 0 0-.29-.036h-.002l-.014-.002a37 37 0 0 0-1.245-.14l-.306-.027q-.344-.036-.524-.046l-.344-.018-.23-.013a26 26 0 0 0-1.376-.048l-.314-.005-.185-.001a23.248 23.248 0 0 0-1.147.016q-.2.007-.336.01h-.016q-.445.014-.655.027-.433.023-1.128.081l-.325.024a5 5 0 0 0-.33.024 28 28 0 0 0-.911.111l-.33.04-.33.04-.12.016a33 33 0 0 0-.743.12l-.46.075q-.36.057-.58.1-.62.12-1.102.228-.378.075-.626.133a37 37 0 0 0-1.807.46l-3.509.96q-1.069.299-1.993.6-.217.07-.556.19l-.176.062a88 88 0 0 0-1.339.474q-.2.075-.565.218l-.225.089q-.8.32-1.248.513l-.358.155-.415.182a68 68 0 0 0-1.937.913q-.59.295-1.213.63l-.033.018-.632.337a47 47 0 0 0-1.423.82q-.315.18-.456.267a58 58 0 0 0-1.842 1.167q-.137.09-.327.223l-.044.032.001-.001a55 55 0 0 0-1.949 1.37 83 83 0 0 0-1.686 1.288q-.735.585-1.387 1.13l-.017.014-.027.021-.08.063a5 5 0 0 0-.195.16q-.108.094-.256.232l.01-.008-.002.002a50 50 0 0 0-2.254 2.056 78 78 0 0 0-1.335 1.308q-.128.123-.203.2-.144.142-.337.355l-.01.015-.101.103q-.603.639-.915.983l-.696.767q-.198.223-.556.64l-.438.507a22 22 0 0 0-.601.722q-.435.53-.755.949l-.331.424-.357.456q-.255.334-.727.979l-.129.174a18 18 0 0 0-.507.71l-.063.09-.297.43-.314.457q-.44.648-.67 1.004-.318.49-.589.93-.274.424-.429.682-.054.09-.13.227Zm0 0 .007-.011zm62.786 11.145-.013.012q-.87.75-1.657 1.483-.222.203-.662.63a58 58 0 0 0-4.243 4.49l-.203.238-.024.028q-.454.537-.686.819l-.39.49-.345.434q-.446.56-.72.922-.247.322-.711.958a51 51 0 0 0-1.341 1.9q-.417.613-.645.965l-.177.278q-.291.456-.443.703-.389.618-.604.976l-.298.51-.267.46a57 57 0 0 0-1.674 3.1q-.276.54-.547 1.11l-.004.01q-.315.656-.48 1.016a101 101 0 0 0-.937 2.157 52 52 0 0 0-.647 1.64q-.17.438-.259.684a59 59 0 0 0-.662 1.928l-.006.016a13 13 0 0 0-.178.531l-.009.028a49 49 0 0 0-.67 2.306 61 61 0 0 0-.476 1.898l-.01.046q-.025.099-.044.188a50 50 0 0 0-.392 1.898q-.075.42-.202 1.176l-.025.153q-.1.588-.16.987a41 41 0 0 0-.18 1.455l-.048.42a30 30 0 0 0-.06.524 51 51 0 0 0-.12 1.591l-.015.196q-.031.391-.043.629a50 50 0 0 0-.057 2.394v20.581l.001.095v1.816q.003 6.873 1.874 12.803l-29.357-15.476-.052-.027-.03-.015-.047-.025q-.74-.391-1.444-.837a21.4 21.4 0 0 1-2.992-2.285l-.041-.037-.01-.009a21.6 21.6 0 0 1-2.675-2.958q-.189-.25-.372-.507-4.938-6.891-4.938-16.98V90.495q0-.834.034-1.906.004-.077.023-.308l.026-.349q.042-.722.1-1.342.009-.104.049-.422l.07-.586q.066-.578.098-.801.046-.309.138-.848l.047-.283q.091-.567.145-.844.02-.107.044-.257l-.004.018.001-.006q.14-.706.274-1.289l.008-.036.046-.196a38 38 0 0 1 .392-1.567l.064-.24.015-.053a67 67 0 0 1 .457-1.544q.045-.124.082-.25.037-.105.07-.209.312-.96.57-1.663.054-.146.184-.482l.068-.175.086-.222q.278-.723.425-1.075.037-.09.087-.22l-.008.02.002-.007.06-.145.082-.184q.087-.192.131-.295.294-.675.435-.988a45 45 0 0 1 .554-1.16q.206-.424.276-.562.075-.144.173-.348l.004-.011q.035-.066.067-.134l.083-.152.14-.256.132-.248a46 46 0 0 1 .87-1.564q.183-.33.415-.714.1-.16.216-.365l.021-.037a19 19 0 0 1 .342-.539q.225-.365.496-.785.17-.262.532-.796l.297-.43.275-.4q.075-.106.168-.246l.03-.045.163-.22q.136-.18.206-.277.401-.55.557-.754l.332-.424.357-.456q.25-.327.572-.72a17 17 0 0 0 .244-.302 13 13 0 0 1 .309-.36l.346-.4q.3-.35.41-.475l.666-.733q.24-.264.752-.807a12 12 0 0 0 .268-.287l.011-.014.104-.102.204-.2a66 66 0 0 1 1.63-1.582q.553-.52 1.336-1.197.09-.079.209-.188.174-.137.264-.215.52-.435 1.143-.932l.088-.069q.233-.185.374-.29.305-.237.946-.716.202-.142.505-.365.43-.31 1.145-.793l.174-.121.056-.04q.06-.038.12-.08a50 50 0 0 1 1.454-.917q.046-.03.267-.156l.168-.1q.699-.413.978-.564l.596-.317.033-.018q.527-.285.983-.512.184-.092.594-.287l.005-.002q.427-.204.93-.432l.357-.156.331-.144a44 44 0 0 1 1.544-.621 80 80 0 0 1 1.404-.496q.16-.056.25-.086.765-.25 1.604-.483l3.516-.964q.727-.203 1.381-.35.129-.03.456-.097.453-.102.942-.196.05-.01.235-.038a28 28 0 0 0 .577-.096q.304-.052.46-.075l.262-.032.339-.04a45 45 0 0 0 .608-.078l.033-.002.23-.017.284-.021q.58-.05.895-.066.106-.006.396-.015.153-.003.403-.012a13 13 0 0 1 .711-.01h.146l.31.005a20 20 0 0 1 .919.031 22 22 0 0 0 .55.03l.104.01h.004l.067.007.355.032q.423.04.828.093.126.017.293.035a23 23 0 0 1 1.13.187h.004l.133.028.338.063q.207.056.354.085.387.082.981.243l.197.05.086.022q.596.171 1.27.405l.036.013a7 7 0 0 0 .282.108 22 22 0 0 1 .783.299l.002.001.098.042a33 33 0 0 1 1.377.63l-.006-.003.006.003q.264.132.393.2l28.763 15.164q-.342.088-.667.178l-3.508.961q-1.07.297-2.128.644l-.292.101-.247.086a36 36 0 0 0-2.157.791q-.758.299-1.292.529l-.754.331q-.524.238-1.169.545a44.262 44.262 0 0 0-2.134 1.082l-.208.109q-.06.03-.12.062-.148.08-.28.155-.435.236-1.397.803-.102.06-.295.171-.065.037-.129.077a59 59 0 0 0-2.149 1.378l-.049.034q-.723.485-1.35.938l-.542.397q-.5.365-1.155.872-.359.272-.561.432-.564.445-1.302 1.06-.202.16-.341.279a8 8 0 0 0-.269.24Zm0 0 .011-.01zm-3.536-37.895h-.002q.004 0 .008.002zm3.871 127.988.763.402q.077.042.269.139l.09.046q.1.045.12.057l.136.064q.41.198.771.353l.011.005q.127.053.317.138l.072.032q.341.141.956.372l.05.02.183.068.014.006q.599.21 1.264.398l-.084-.018q.104.023.206.05l.208.054q.52.14 1.057.261l.073.017.072.016.113.026.108.019.031.006.436.082q.536.095 1.052.173l.2.025q.44.057.878.098l.611.055.186.01.376.016.028.002q.261.017.429.023.098.004.368.008l.239.003h.615q.208 0 .643-.021a4 4 0 0 1 .251-.007h.022l.137-.007-.018.003.178-.013q.25-.012.835-.061l.156-.014.154-.012.07-.006.539-.061.504-.064q.204-.024.312-.04a20 20 0 0 0 .618-.099l.402-.066.199-.032-.009.004q.057-.013.116-.024.252-.048.838-.172l.33-.067.255-.053q.608-.138 1.377-.35l3.477-.953a37 37 0 0 0 1.655-.499l.104-.034.127-.047.239-.084h.002q.78-.27 1.191-.421l.146-.059.135-.055.22-.091.141-.056q.579-.231.832-.342l.639-.278q.57-.257.997-.461l.089-.042.509-.247q.458-.228 1.02-.532l.158-.083.218-.116q.096-.049.178-.095.317-.174 1.018-.587l.207-.122.128-.074h.001q.124-.073.226-.13a39 39 0 0 0 1.26-.793l.358-.245a4.95 4.95 0 0 1 4.843-.416l10.977 5.001q2.352 1.073 4.527-.327t2.176-3.986v-40.637q0-.237.022-.474V95.148q0-17.112-12.596-23.755l-.295-.156-.163-.079-.176-.086a19 19 0 0 0-.767-.354q-.265-.12-.385-.168-.35-.148-.871-.337l-.182-.067-.102-.04q-.56-.194-1.217-.383l-.097-.026-.222-.058a38 38 0 0 0-1.026-.253l-.122-.026a31 31 0 0 0-.681-.144l-.118-.023a25 25 0 0 0-1.016-.163 6 6 0 0 1-.225-.027 29 29 0 0 0-.873-.1h-.006l-.327-.03a37 37 0 0 0-1.369-.078q-.12-.008-.523-.008h-.509a44 44 0 0 0-1.116.038l-.18.007q-.256.013-.859.063l-.046.004-.204.014-.135.01a20 20 0 0 0-.454.053 35 35 0 0 1-.636.075l-.206.025q-.145.022-.496.082l-.612.1q-.197.03-.279.046-.171.032-.602.125l-.237.051a22 22 0 0 1-.524.112q-.735.168-1.382.346l-3.476.953a36 36 0 0 0-1.54.46l-.291.102-.355.122a27 27 0 0 0-1.659.61q-.613.242-.941.383l-.648.284-.42.193V91.28q0 1.152-.056 2.307-.01.223-.037.576l-.001.004-.019.28-.001.026a43 43 0 0 1-.113 1.478 25 25 0 0 1-.076.68l-.052.433-.03.249a32 32 0 0 1-.234 1.677l-.056.354v.002q-.138.833-.221 1.265-.19.999-.399 1.935l-.027.11a45 45 0 0 1-.46 1.83l-.141.512a62 62 0 0 1-.542 1.831l-.151.467a54 54 0 0 1-.663 1.928 19 19 0 0 1-.2.526l-.017.042.004-.01-.112.295-.073.188q-.326.841-.495 1.251a27 27 0 0 1-.354.834l-.063.152q-.269.631-.492 1.106-.124.28-.359.772l-.135.283-.098.204a46 46 0 0 1-.971 1.916l-.314.587-.216.397q-.188.339-.563.993l-.076.132a32 32 0 0 1-.507.856q-.284.475-.6.969l-.084.133a42 42 0 0 1-.965 1.488l-.22.327-.021.032-.58.845-.066.092-.58.805a53 53 0 0 1-1.41 1.856l-.212.268q-.316.401-.48.601-.234.29-.674.806l-.04.046-.005.005q-.386.461-.854.988-.237.266-.69.767a46.143 46.143 0 0 1-1.393 1.477l-.219.223a55 55 0 0 1-1.216 1.193l-.18.174-.202.193-.258.247q-.778.722-1.567 1.402l-.099.086-.08.071-.08.072q-.067.06-.137.117l-.198.165a76 76 0 0 1-1.308 1.071l-.006.005q-.134.11-.339.266l-.147.113-.083.063a58 58 0 0 1-1.375 1.031q-.198.147-.307.225-.66.473-1.278.885l-.32.222-.103.07q-.884.584-1.833 1.157l-.009.005q.348 15.759 11.753 22.249zm-11.768-34.325q.47-.383.73-.601l.197-.164.014-.012.08-.071.173-.153q.705-.608 1.35-1.206l.146-.142.203-.193.15-.146a48 48 0 0 0 1.62-1.612 59 59 0 0 0 1.356-1.483 37 37 0 0 0 .788-.91l.019-.022a29 29 0 0 0 .899-1.097l.232-.293a40 40 0 0 0 1.143-1.505l.562-.78.022-.031.49-.716.002-.003.188-.28q.254-.377.359-.542.16-.245.432-.677l.088-.141a26 26 0 0 0 .564-.911q.104-.166.347-.589l.082-.143q.33-.574.485-.853l.171-.315.279-.523a41 41 0 0 0 .786-1.549l.104-.217.113-.238a37.223 37.223 0 0 0 .679-1.496l.016-.042.149-.347q.131-.303.181-.426.154-.374.439-1.112l.076-.194.081-.217.07-.178.082-.21q.297-.815.567-1.649l.156-.479q.189-.607.426-1.45l.122-.445q.199-.726.36-1.428l.053-.221q.135-.61.296-1.46.064-.33.177-1.021l.001-.002.046-.294.016-.1q.049-.3.065-.418a30 30 0 0 0 .134-1.055l.05-.421q.037-.296.049-.425.04-.385.089-1.179l.002-.027.024-.358.007-.092.015-.195q.047-.981.047-1.896V79.333l-.311.259-.116.094-.117.094-.003.003.012-.009a8 8 0 0 1-.256.227q-.683.59-1.382 1.24-.145.133-.507.483a50 50 0 0 0-3.576 3.782l-.197.231q-.412.488-.551.655l-.345.435-.341.428a53 53 0 0 0-.596.762q-.19.248-.608.82a43 43 0 0 0-1.103 1.563q-.38.56-.525.783l-.164.258q-.247.388-.385.61-.358.57-.484.778l-.267.46-.264.453a47 47 0 0 0-1.392 2.579q-.235.463-.466.947v.002q-.272.565-.387.817a85 85 0 0 0-.799 1.835 45 45 0 0 0-.508 1.289l-.066.171q-.13.338-.19.5-.225.614-.6 1.755l-.048.134-.003.001-.035.112-.05.159a40 40 0 0 0-.547 1.889 51 51 0 0 0-.407 1.643l-.004.014a39 39 0 0 0-.314 1.518q-.059.325-.173 1.015l-.028.171q-.088.512-.13.791-.036.254-.103.831l-.03.251q-.018.192-.059.525l-.035.301q-.028.303-.073.97l-.026.366-.022.287q-.018.23-.022.308-.046.959-.046 1.923z"/></svg>';
|
|
19259
|
+
// src/remote-connections-control.ts
|
|
19260
|
+
function remoteUpdateTarget(local, remote) {
|
|
19261
|
+
if (!remote.updateSupported || !remote.remote || !remote.installedVersion || !local?.runningVersion)
|
|
19262
|
+
return null;
|
|
19263
|
+
if (["installing", "restarting", "failed"].includes(remote.update.phase)) return null;
|
|
19264
|
+
const stable = /^(\d+)\.(\d+)\.(\d+)$/u;
|
|
19265
|
+
if (!stable.test(local.runningVersion) || !stable.test(remote.installedVersion)) return null;
|
|
19266
|
+
const left = local.runningVersion.split(".").map(Number);
|
|
19267
|
+
const right = remote.installedVersion.split(".").map(Number);
|
|
19268
|
+
const index = left.findIndex((part, index2) => part !== right[index2]);
|
|
19269
|
+
if (index >= 0 && (left[index] ?? 0) > (right[index] ?? 0)) return local.runningVersion;
|
|
19270
|
+
if (index < 0 && remote.restartRequired) return remote.installedVersion;
|
|
19271
|
+
return null;
|
|
19272
|
+
}
|
|
19162
19273
|
|
|
19163
|
-
// src/
|
|
19164
|
-
var
|
|
19165
|
-
|
|
19166
|
-
|
|
19167
|
-
"
|
|
19168
|
-
"
|
|
19169
|
-
|
|
19170
|
-
|
|
19171
|
-
|
|
19172
|
-
|
|
19173
|
-
"
|
|
19174
|
-
|
|
19175
|
-
|
|
19176
|
-
"
|
|
19177
|
-
|
|
19178
|
-
|
|
19179
|
-
"
|
|
19180
|
-
"
|
|
19181
|
-
|
|
19182
|
-
|
|
19183
|
-
|
|
19184
|
-
|
|
19185
|
-
|
|
19186
|
-
|
|
19187
|
-
|
|
19188
|
-
|
|
19189
|
-
|
|
19190
|
-
|
|
19191
|
-
|
|
19192
|
-
|
|
19193
|
-
|
|
19194
|
-
|
|
19195
|
-
|
|
19196
|
-
|
|
19197
|
-
|
|
19198
|
-
|
|
19199
|
-
|
|
19200
|
-
|
|
19201
|
-
|
|
19202
|
-
|
|
19203
|
-
|
|
19204
|
-
|
|
19205
|
-
|
|
19206
|
-
|
|
19274
|
+
// src/settings/remote-failure-messages.ts
|
|
19275
|
+
var REMOTE_FAILURE_CHINESE = Object.freeze({
|
|
19276
|
+
// SSH helper: installing, updating and repairing over SSH.
|
|
19277
|
+
"Invalid SSH address or port": "SSH \u5730\u5740\u6216\u7AEF\u53E3\u65E0\u6548",
|
|
19278
|
+
"Install requires a published stable version": "\u53EA\u80FD\u5B89\u88C5\u5DF2\u53D1\u5E03\u7684\u6B63\u5F0F\u7248\u672C",
|
|
19279
|
+
"SSH operation timed out; check the remote computer before retrying": "SSH \u64CD\u4F5C\u8D85\u65F6\uFF0C\u8BF7\u68C0\u67E5\u8FDC\u7A0B\u7535\u8111\u540E\u91CD\u8BD5",
|
|
19280
|
+
"Remote service is already installed. Connect and use its update button": "\u8FDC\u7A0B\u670D\u52A1\u5DF2\u7ECF\u5B89\u88C5\uFF0C\u8BF7\u8FDE\u63A5\u540E\u4F7F\u7528\u66F4\u65B0\u6309\u94AE",
|
|
19281
|
+
"Remote service is not installed. Use Install and connect instead": "\u8FDC\u7A0B\u670D\u52A1\u5C1A\u672A\u5B89\u88C5\uFF0C\u8BF7\u4F7F\u7528\u300C\u5B89\u88C5\u5E76\u8FDE\u63A5\u300D",
|
|
19282
|
+
"This release is not published on npm, or the remote computer cannot reach the registry": "\u8BE5\u7248\u672C\u5C1A\u672A\u53D1\u5E03\u5230 npm\uFF0C\u6216\u8FDC\u7A0B\u7535\u8111\u65E0\u6CD5\u8BBF\u95EE npm \u4ED3\u5E93",
|
|
19283
|
+
"codexhost was installed but is not on the remote PATH. Update this remote manually": "codexhost \u5DF2\u5B89\u88C5\uFF0C\u4F46\u4E0D\u5728\u8FDC\u7A0B\u7535\u8111\u7684 PATH \u4E2D\uFF0C\u8BF7\u5728\u8FDC\u7A0B\u7535\u8111\u4E0A\u624B\u52A8\u66F4\u65B0",
|
|
19284
|
+
"Only Mac and Linux remote computers are supported": "\u53EA\u652F\u6301 Mac \u548C Linux \u8FDC\u7A0B\u7535\u8111",
|
|
19285
|
+
"Node.js, npm or Codex CLI was not found over SSH. Install them on the remote computer and make sure non-interactive SSH sessions have them on PATH": "\u901A\u8FC7 SSH \u627E\u4E0D\u5230 Node.js\u3001npm \u6216 Codex CLI\u3002\u8BF7\u5728\u8FDC\u7A0B\u7535\u8111\u4E0A\u5B89\u88C5\u5B83\u4EEC\uFF0C\u5E76\u786E\u4FDD\u975E\u4EA4\u4E92\u5F0F SSH \u4F1A\u8BDD\u7684 PATH \u4E2D\u5305\u542B\u5B83\u4EEC",
|
|
19286
|
+
"npm installation failed. Check network access and global installation permissions": "npm \u5B89\u88C5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u548C\u5168\u5C40\u5B89\u88C5\u6743\u9650",
|
|
19287
|
+
"Remote service configuration failed. Check Codex CLI and the remote desktop login": "\u8FDC\u7A0B\u670D\u52A1\u914D\u7F6E\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5 Codex CLI \u4EE5\u53CA\u8FDC\u7A0B\u7535\u8111\u7684\u684C\u9762\u767B\u5F55\u72B6\u6001",
|
|
19288
|
+
"Remote service could not stop. Check the remote service before retrying": "\u8FDC\u7A0B\u670D\u52A1\u65E0\u6CD5\u505C\u6B62\uFF0C\u8BF7\u68C0\u67E5\u8FDC\u7A0B\u670D\u52A1\u540E\u91CD\u8BD5",
|
|
19289
|
+
"Remote connection configuration could not be removed. Check file permissions": "\u65E0\u6CD5\u79FB\u9664\u8FDC\u7A0B\u8FDE\u63A5\u914D\u7F6E\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6743\u9650",
|
|
19290
|
+
"Another remote installation is in progress. Wait and check again": "\u53E6\u4E00\u9879\u8FDC\u7A0B\u5B89\u88C5\u6B63\u5728\u8FDB\u884C\uFF0C\u8BF7\u7A0D\u540E\u91CD\u65B0\u68C0\u6D4B",
|
|
19291
|
+
"Remote service was installed but could not start. Check the remote service and retry connecting": "\u8FDC\u7A0B\u670D\u52A1\u5DF2\u5B89\u88C5\u4F46\u65E0\u6CD5\u542F\u52A8\uFF0C\u8BF7\u68C0\u67E5\u8FDC\u7A0B\u670D\u52A1\u540E\u91CD\u65B0\u8FDE\u63A5",
|
|
19292
|
+
"SSH failed. Check the address, key authentication and trusted host key": "SSH \u8FDE\u63A5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u5730\u5740\u3001\u5BC6\u94A5\u8BA4\u8BC1\u4EE5\u53CA\u4E3B\u673A\u5BC6\u94A5\u662F\u5426\u5DF2\u4FE1\u4EFB",
|
|
19293
|
+
"Unexpected SSH inspection response": "SSH \u68C0\u6D4B\u8FD4\u56DE\u4E86\u65E0\u6CD5\u8BC6\u522B\u7684\u7ED3\u679C",
|
|
19294
|
+
"SSH installation failed; check the remote computer and retry": "SSH \u5B89\u88C5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u8FDC\u7A0B\u7535\u8111\u540E\u91CD\u8BD5",
|
|
19295
|
+
"SSH installation helper is unavailable. Update local codexhost and restart.": "SSH \u5B89\u88C5\u7EC4\u4EF6\u4E0D\u53EF\u7528\uFF0C\u8BF7\u66F4\u65B0\u672C\u673A codexhost \u540E\u91CD\u542F",
|
|
19296
|
+
"SSH installation must run from the local computer": "SSH \u5B89\u88C5\u53EA\u80FD\u4ECE\u672C\u673A\u53D1\u8D77",
|
|
19297
|
+
"An SSH operation is already running for this connection": "\u8FD9\u4E2A\u8FDE\u63A5\u5DF2\u6709 SSH \u64CD\u4F5C\u6B63\u5728\u8FDB\u884C",
|
|
19298
|
+
// Remote service: updating or restarting itself.
|
|
19299
|
+
"Another codexhost update is active; finish it before retrying": "\u53E6\u4E00\u9879 codexhost \u66F4\u65B0\u6B63\u5728\u8FDB\u884C\uFF0C\u8BF7\u7B49\u5B83\u5B8C\u6210\u540E\u91CD\u8BD5",
|
|
19300
|
+
"The remote installation changed before the update acquired its lock; refresh and retry": "\u66F4\u65B0\u5F00\u59CB\u524D\u8FDC\u7A0B\u5B89\u88C5\u53D1\u751F\u4E86\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5",
|
|
19301
|
+
"Could not identify the global npm installation": "\u65E0\u6CD5\u8BC6\u522B\u8FDC\u7A0B\u7535\u8111\u7684\u5168\u5C40 npm \u5B89\u88C5",
|
|
19302
|
+
"npm uses a different global installation; update this remote manually": "\u8FDC\u7A0B\u7535\u8111\u7684 npm \u4F7F\u7528\u4E86\u53E6\u4E00\u5904\u5168\u5C40\u5B89\u88C5\uFF0C\u8BF7\u5728\u8FDC\u7A0B\u7535\u8111\u4E0A\u624B\u52A8\u66F4\u65B0",
|
|
19303
|
+
"The requested release is unavailable or npm cannot reach the registry": "\u76EE\u6807\u7248\u672C\u4E0D\u5B58\u5728\uFF0C\u6216\u8FDC\u7A0B\u7535\u8111\u65E0\u6CD5\u8BBF\u95EE npm \u4ED3\u5E93",
|
|
19304
|
+
"npm installation failed; check remote network access and write permissions": "npm \u5B89\u88C5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u8FDC\u7A0B\u7535\u8111\u7684\u7F51\u7EDC\u548C\u5199\u5165\u6743\u9650",
|
|
19305
|
+
"Installed remote version does not match the requested version": "\u8FDC\u7A0B\u5B89\u88C5\u7684\u7248\u672C\u4E0E\u8BF7\u6C42\u7684\u7248\u672C\u4E0D\u4E00\u81F4",
|
|
19306
|
+
"Remote stop failed": "\u66F4\u65B0\u5DF2\u5B89\u88C5\uFF0C\u4F46\u505C\u6B62\u65E7\u670D\u52A1\u5931\u8D25",
|
|
19307
|
+
"Remote install failed": "\u66F4\u65B0\u5DF2\u5B89\u88C5\uFF0C\u4F46\u91CD\u65B0\u914D\u7F6E\u8FDC\u7A0B\u670D\u52A1\u5931\u8D25",
|
|
19308
|
+
"Remote start failed": "\u66F4\u65B0\u5DF2\u5B89\u88C5\uFF0C\u4F46\u542F\u52A8\u8FDC\u7A0B\u670D\u52A1\u5931\u8D25",
|
|
19309
|
+
"The previous remote update was interrupted; retry the update": "\u4E0A\u4E00\u6B21\u8FDC\u7A0B\u66F4\u65B0\u88AB\u4E2D\u65AD\uFF0C\u8BF7\u91CD\u8BD5",
|
|
19310
|
+
"Remote updater did not start": "\u8FDC\u7A0B\u66F4\u65B0\u7A0B\u5E8F\u672A\u80FD\u542F\u52A8",
|
|
19311
|
+
"Remote updater could not be started": "\u65E0\u6CD5\u542F\u52A8\u8FDC\u7A0B\u66F4\u65B0\u7A0B\u5E8F",
|
|
19312
|
+
"Remote updater is unavailable": "\u8FDC\u7A0B\u66F4\u65B0\u7A0B\u5E8F\u4E0D\u53EF\u7528",
|
|
19313
|
+
"Another remote update is already pending": "\u5DF2\u6709\u53E6\u4E00\u9879\u8FDC\u7A0B\u66F4\u65B0\u5728\u7B49\u5F85\u6267\u884C",
|
|
19314
|
+
"Remote update requires an npm installation with the current updater": "\u8FDC\u7A0B\u66F4\u65B0\u9700\u8981\u901A\u8FC7 npm \u5B89\u88C5\u5E76\u5E26\u6709\u5F53\u524D\u7248\u672C\u7684\u66F4\u65B0\u7A0B\u5E8F",
|
|
19315
|
+
"Remote downgrades are not automatic; update this computer first": "\u4E0D\u4F1A\u81EA\u52A8\u964D\u4F4E\u8FDC\u7A0B\u7248\u672C\uFF0C\u8BF7\u5148\u66F4\u65B0\u672C\u673A",
|
|
19316
|
+
"The remote installation changed; refresh versions before retrying": "\u8FDC\u7A0B\u5B89\u88C5\u53D1\u751F\u4E86\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u7248\u672C\u540E\u91CD\u8BD5",
|
|
19317
|
+
"Remote service is updating; reconnect shortly": "\u8FDC\u7A0B\u670D\u52A1\u6B63\u5728\u66F4\u65B0\uFF0C\u8BF7\u7A0D\u540E\u91CD\u65B0\u8FDE\u63A5",
|
|
19318
|
+
"Runtime version management is unavailable in this build": "\u5F53\u524D\u6784\u5EFA\u4E0D\u652F\u6301\u7248\u672C\u7BA1\u7406",
|
|
19319
|
+
// This window's bridge to the remote service.
|
|
19320
|
+
"Remote service did not respond; reconnect and retry": "\u8FDC\u7A0B\u670D\u52A1\u6CA1\u6709\u54CD\u5E94\uFF0C\u8BF7\u91CD\u65B0\u8FDE\u63A5\u540E\u91CD\u8BD5",
|
|
19321
|
+
"SSH installation is unavailable; update local codexhost and restart": "SSH \u5B89\u88C5\u4E0D\u53EF\u7528\uFF0C\u8BF7\u66F4\u65B0\u672C\u673A codexhost \u540E\u91CD\u542F",
|
|
19322
|
+
"Version management is unavailable; update codexhost on this host and reconnect": "\u7248\u672C\u7BA1\u7406\u4E0D\u53EF\u7528\uFF0C\u8BF7\u66F4\u65B0\u8FD9\u53F0\u7535\u8111\u4E0A\u7684 codexhost \u540E\u91CD\u65B0\u8FDE\u63A5",
|
|
19323
|
+
"Remote update is unavailable; update this remote once and reconnect": "\u8FDC\u7A0B\u66F4\u65B0\u4E0D\u53EF\u7528\uFF0C\u8BF7\u5148\u624B\u52A8\u66F4\u65B0\u4E00\u6B21\u8FD9\u53F0\u8FDC\u7A0B\u7535\u8111\u518D\u91CD\u65B0\u8FDE\u63A5",
|
|
19324
|
+
// Codex SSH bridge: reading and saving connections.
|
|
19325
|
+
"Codex SSH settings are unavailable in this window": "\u6B64\u7A97\u53E3\u65E0\u6CD5\u4F7F\u7528 Codex SSH \u8BBE\u7F6E",
|
|
19326
|
+
"Codex SSH request failed; check the native Connections settings": "Codex SSH \u8BF7\u6C42\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u539F\u751F\u7684\u8FDE\u63A5\u8BBE\u7F6E",
|
|
19327
|
+
"Invalid Codex SSH response": "Codex SSH \u8FD4\u56DE\u4E86\u65E0\u6CD5\u8BC6\u522B\u7684\u7ED3\u679C",
|
|
19328
|
+
"Codex SSH request timed out; refresh before retrying": "Codex SSH \u8BF7\u6C42\u8D85\u65F6\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5",
|
|
19329
|
+
"Invalid Codex SSH connection list": "Codex \u8FD4\u56DE\u7684 SSH \u8FDE\u63A5\u5217\u8868\u65E0\u6CD5\u8BC6\u522B",
|
|
19330
|
+
"This Codex version uses an unsupported SSH configuration; open native settings": "\u5F53\u524D Codex \u7248\u672C\u7684 SSH \u914D\u7F6E\u683C\u5F0F\u4E0D\u53D7\u652F\u6301\uFF0C\u8BF7\u5728\u539F\u751F\u8BBE\u7F6E\u4E2D\u7BA1\u7406",
|
|
19331
|
+
"This connection changed in Codex. Refresh and edit it again.": "\u8FD9\u4E2A\u8FDE\u63A5\u5DF2\u5728 Codex \u4E2D\u88AB\u4FEE\u6539\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u65B0\u7F16\u8F91",
|
|
19332
|
+
"Enter a name, SSH hostname (or alias), and a port between 1 and 65535": "\u8BF7\u586B\u5199\u540D\u79F0\u3001SSH \u4E3B\u673A\u540D\uFF08\u6216\u522B\u540D\uFF09\uFF0C\u7AEF\u53E3\u9700\u5728 1 \u5230 65535 \u4E4B\u95F4",
|
|
19333
|
+
"A connection with this name already exists": "\u5DF2\u5B58\u5728\u540C\u540D\u7684\u8FDE\u63A5",
|
|
19334
|
+
"Edit SSH-config connection details in native Codex settings": "\u6765\u81EA SSH \u914D\u7F6E\u7684\u8FDE\u63A5\uFF0C\u8BF7\u5728 Codex \u539F\u751F\u8BBE\u7F6E\u4E2D\u4FEE\u6539\u8BE6\u7EC6\u4FE1\u606F",
|
|
19335
|
+
"Invalid Codex connection state": "Codex \u8FD4\u56DE\u7684\u8FDE\u63A5\u72B6\u6001\u65E0\u6CD5\u8BC6\u522B"
|
|
19336
|
+
});
|
|
19337
|
+
function localizeRemoteFailure(message, t) {
|
|
19338
|
+
const text = message.replace(/^Error:\s*/u, "");
|
|
19339
|
+
const detail = text.indexOf(": ");
|
|
19340
|
+
const chinese = REMOTE_FAILURE_CHINESE[text] ?? (detail > 0 ? REMOTE_FAILURE_CHINESE[text.slice(0, detail)] : void 0);
|
|
19341
|
+
return chinese ? t(chinese, text) : text;
|
|
19342
|
+
}
|
|
19343
|
+
|
|
19344
|
+
// src/settings/remote-connections-card.ts
|
|
19345
|
+
var STABLE_VERSION = /^\d+\.\d+\.\d+$/u;
|
|
19346
|
+
function remoteErrorMessage(error51) {
|
|
19347
|
+
return error51 instanceof Error && error51.message ? error51.message : String(error51);
|
|
19348
|
+
}
|
|
19349
|
+
function remoteVersionIssue(error51) {
|
|
19350
|
+
const outdated = typeof error51 === "object" && error51 !== null && "code" in error51 && error51.code === -32601;
|
|
19351
|
+
return { outdated, message: remoteErrorMessage(error51) };
|
|
19352
|
+
}
|
|
19353
|
+
function remoteElement(document2, tag, className = "", text = "") {
|
|
19354
|
+
const result = document2.createElement(tag);
|
|
19355
|
+
if (className) result.className = className;
|
|
19356
|
+
if (text) result.textContent = text;
|
|
19357
|
+
return result;
|
|
19207
19358
|
}
|
|
19208
|
-
function
|
|
19209
|
-
|
|
19210
|
-
|
|
19211
|
-
|
|
19212
|
-
|
|
19213
|
-
|
|
19214
|
-
|
|
19215
|
-
|
|
19216
|
-
|
|
19217
|
-
|
|
19218
|
-
|
|
19219
|
-
|
|
19220
|
-
|
|
19221
|
-
|
|
19222
|
-
|
|
19223
|
-
|
|
19224
|
-
if (
|
|
19225
|
-
|
|
19226
|
-
|
|
19227
|
-
|
|
19228
|
-
|
|
19229
|
-
|
|
19230
|
-
"
|
|
19359
|
+
function remoteInstallVersion(local) {
|
|
19360
|
+
const version2 = local?.runningVersion;
|
|
19361
|
+
return version2 && STABLE_VERSION.test(version2) ? version2 : null;
|
|
19362
|
+
}
|
|
19363
|
+
function remoteMaintenanceTarget(local, remote) {
|
|
19364
|
+
if (!remote.updateSupported) return null;
|
|
19365
|
+
return newerLocalVersion(local, remote) ?? (remote.restartRequired ? remote.installedVersion : null);
|
|
19366
|
+
}
|
|
19367
|
+
function newerLocalVersion(local, remote) {
|
|
19368
|
+
return remoteUpdateTarget(local, { ...remote, update: { ...remote.update, phase: "idle" } });
|
|
19369
|
+
}
|
|
19370
|
+
function remoteBusy(remote) {
|
|
19371
|
+
return !!remote && ["installing", "restarting"].includes(remote.update.phase);
|
|
19372
|
+
}
|
|
19373
|
+
function remoteTroubled(row) {
|
|
19374
|
+
if (row.remote) return row.remote.update.phase === "failed";
|
|
19375
|
+
if (row.state === "connecting") return false;
|
|
19376
|
+
return !(row.state === "disconnected" && !row.connection.autoConnect);
|
|
19377
|
+
}
|
|
19378
|
+
function connectionState(row, t) {
|
|
19379
|
+
switch (row.state) {
|
|
19380
|
+
case null:
|
|
19381
|
+
return ["progress", t("\u68C0\u6D4B\u4E2D\u2026", "Checking\u2026")];
|
|
19382
|
+
case "connected":
|
|
19383
|
+
return ["success", t("\u5DF2\u8FDE\u63A5", "Connected")];
|
|
19384
|
+
case "connecting":
|
|
19385
|
+
return ["progress", t("\u8FDE\u63A5\u4E2D\u2026", "Connecting\u2026")];
|
|
19386
|
+
case "disconnected":
|
|
19387
|
+
return ["neutral", t("\u672A\u8FDE\u63A5", "Disconnected")];
|
|
19388
|
+
case "error":
|
|
19389
|
+
return ["danger", t("\u8FDE\u63A5\u5931\u8D25", "Connection failed")];
|
|
19390
|
+
default:
|
|
19391
|
+
return ["neutral", t("\u72B6\u6001\u672A\u77E5", "Unknown state")];
|
|
19392
|
+
}
|
|
19393
|
+
}
|
|
19394
|
+
function serviceSummary(row, local, t) {
|
|
19395
|
+
const { remote } = row;
|
|
19396
|
+
const hints = [];
|
|
19397
|
+
if (!remote) {
|
|
19398
|
+
if (row.probing) return { title: t("\u6B63\u5728\u68C0\u6D4B\u8FDC\u7A0B\u670D\u52A1\u2026", "Checking remote service\u2026"), hints };
|
|
19399
|
+
if (row.installation === "not-installed") {
|
|
19400
|
+
const version2 = remoteInstallVersion(local);
|
|
19401
|
+
hints.push(
|
|
19402
|
+
version2 ? [
|
|
19403
|
+
"neutral",
|
|
19404
|
+
t(
|
|
19405
|
+
`\u5C06\u5B89\u88C5\u4E0E\u672C\u673A\u76F8\u540C\u7684\u7248\u672C ${version2}`,
|
|
19406
|
+
`Installs version ${version2}, matching this computer`
|
|
19407
|
+
)
|
|
19408
|
+
] : [
|
|
19409
|
+
"warning",
|
|
19410
|
+
t(
|
|
19411
|
+
"\u672C\u673A\u7248\u672C\u4E0D\u53EF\u7528\u4E8E\u5B89\u88C5\uFF0C\u8BF7\u4F7F\u7528\u6B63\u5F0F\u53D1\u5E03\u7248\u672C\u3002",
|
|
19412
|
+
"Install from a published local release."
|
|
19413
|
+
)
|
|
19414
|
+
]
|
|
19415
|
+
);
|
|
19416
|
+
return { title: t("\u9700\u8981\u5B89\u88C5\u8FDC\u7A0B\u670D\u52A1", "Remote service needs installation"), hints };
|
|
19417
|
+
}
|
|
19418
|
+
if (row.remoteIssue?.outdated) {
|
|
19419
|
+
const version2 = remoteInstallVersion(local);
|
|
19420
|
+
hints.push(
|
|
19421
|
+
version2 ? [
|
|
19422
|
+
"neutral",
|
|
19423
|
+
t(
|
|
19424
|
+
`\u66F4\u65B0\u5230\u672C\u673A\u7248\u672C ${version2} \u540E\u53EF\u5728\u8FD9\u91CC\u67E5\u770B\u548C\u7BA1\u7406\u7248\u672C\u3002`,
|
|
19425
|
+
`Update to this computer's version ${version2} to manage versions here.`
|
|
19426
|
+
)
|
|
19427
|
+
] : [
|
|
19428
|
+
"warning",
|
|
19429
|
+
t(
|
|
19430
|
+
"\u672C\u673A\u4E0D\u662F\u6B63\u5F0F\u53D1\u5E03\u7248\u672C\uFF0C\u65E0\u6CD5\u4ECE\u8FD9\u91CC\u66F4\u65B0\uFF1B\u8BF7\u5728\u8FDC\u7A0B\u7535\u8111\u4E0A\u624B\u52A8\u66F4\u65B0 codexhost\u3002",
|
|
19431
|
+
"This computer is not running a published release, so it cannot update the remote. Update codexhost on the remote computer manually."
|
|
19432
|
+
)
|
|
19433
|
+
]
|
|
19434
|
+
);
|
|
19435
|
+
return { title: t("\u8FDC\u7A0B\u670D\u52A1\u9700\u8981\u66F4\u65B0", "Remote service needs an update"), hints };
|
|
19436
|
+
}
|
|
19437
|
+
hints.push([
|
|
19438
|
+
"neutral",
|
|
19439
|
+
row.state === "connecting" || row.state === "disconnected" && !row.connection.autoConnect ? t("\u8FDE\u63A5\u540E\u663E\u793A\u8FDC\u7A0B\u670D\u52A1\u7248\u672C\u3002", "Connect to see the remote service version.") : t(
|
|
19440
|
+
"\u6682\u65F6\u65E0\u6CD5\u8BFB\u53D6\u8FDC\u7A0B\u7248\u672C\uFF0C\u53EF\u5237\u65B0\u6216\u91CD\u65B0\u8FDE\u63A5\u540E\u518D\u8BD5\u3002",
|
|
19441
|
+
"Remote version information is temporarily unavailable. Refresh or reconnect to retry."
|
|
19442
|
+
)
|
|
19443
|
+
]);
|
|
19444
|
+
if (row.remoteIssue)
|
|
19445
|
+
hints.push([
|
|
19446
|
+
"danger",
|
|
19447
|
+
`${t("\u539F\u56E0", "Reason")}: ${localizeRemoteFailure(row.remoteIssue.message, t)}`
|
|
19448
|
+
]);
|
|
19449
|
+
return { title: t("\u8FDC\u7A0B\u670D\u52A1", "Remote service"), hints };
|
|
19450
|
+
}
|
|
19451
|
+
const busy = remoteBusy(remote);
|
|
19452
|
+
const installed = (busy ? remote.runningVersion : remote.installedVersion) ?? remote.runningVersion ?? "\u2014";
|
|
19453
|
+
const title = !busy && remote.runningVersion && remote.runningVersion !== remote.installedVersion ? t(
|
|
19454
|
+
`\u8FDC\u7A0B\u670D\u52A1 ${installed} \xB7 \u8FD0\u884C\u4E2D ${remote.runningVersion}`,
|
|
19455
|
+
`Remote service ${installed} \xB7 running ${remote.runningVersion}`
|
|
19456
|
+
) : t(`\u8FDC\u7A0B\u670D\u52A1 ${installed}`, `Remote service ${installed}`);
|
|
19457
|
+
const phases = {
|
|
19458
|
+
idle: null,
|
|
19459
|
+
installing: ["progress", t("\u6B63\u5728\u66F4\u65B0\u8FDC\u7A0B\u670D\u52A1\u2026", "Updating remote service\u2026")],
|
|
19460
|
+
restarting: ["progress", t("\u6B63\u5728\u91CD\u542F\uFF0C\u8BF7\u7A0D\u5019\u91CD\u8FDE\u2026", "Restarting; reconnecting shortly\u2026")],
|
|
19461
|
+
// The record outlives the update; the version line already shows the result.
|
|
19462
|
+
succeeded: null,
|
|
19463
|
+
failed: ["danger", t("\u66F4\u65B0\u5931\u8D25\uFF0C\u53EF\u4EE5\u91CD\u8BD5", "Update failed; you can retry")]
|
|
19464
|
+
};
|
|
19465
|
+
const phase = phases[remote.update.phase];
|
|
19466
|
+
if (phase) hints.push(phase);
|
|
19467
|
+
if (remote.update.error) hints.push(["danger", localizeRemoteFailure(remote.update.error, t)]);
|
|
19468
|
+
if (remote.restartRequired && !busy)
|
|
19469
|
+
hints.push([
|
|
19470
|
+
"warning",
|
|
19471
|
+
t("\u9700\u8981\u91CD\u542F\u4EE5\u4F7F\u7528\u5DF2\u5B89\u88C5\u7684\u7248\u672C", "Restart needed to use the installed version")
|
|
19472
|
+
]);
|
|
19473
|
+
const newer = newerLocalVersion(local, remote);
|
|
19474
|
+
const localVersion = local?.runningVersion;
|
|
19475
|
+
if (remoteBusy(remote)) {
|
|
19476
|
+
} else if (newer && remote.installedVersion !== localVersion)
|
|
19477
|
+
hints.push([
|
|
19478
|
+
"warning",
|
|
19479
|
+
t(`\u6709\u66F4\u65B0\u53EF\u7528 \xB7 \u672C\u673A\u4E3A ${newer}`, `Update available \xB7 this computer runs ${newer}`)
|
|
19480
|
+
]);
|
|
19481
|
+
else if (localVersion && remote.installedVersion === localVersion && !remote.restartRequired)
|
|
19482
|
+
hints.push(["success", t("\u4E0E\u672C\u673A\u7248\u672C\u4E00\u81F4", "Matches this computer")]);
|
|
19483
|
+
if (localVersion && remote.installedVersion && localVersion !== remote.installedVersion && !newer)
|
|
19484
|
+
hints.push([
|
|
19485
|
+
"warning",
|
|
19486
|
+
t(
|
|
19487
|
+
"\u7248\u672C\u4E0D\u540C\uFF0C\u8BF7\u5148\u68C0\u67E5\u672C\u673A\u66F4\u65B0\uFF1B\u4E0D\u4F1A\u81EA\u52A8\u964D\u4F4E\u8FDC\u7A0B\u7248\u672C\u3002",
|
|
19488
|
+
"Versions differ. Check for a local update; the remote version will not be downgraded."
|
|
19489
|
+
)
|
|
19490
|
+
]);
|
|
19491
|
+
return { title, hints };
|
|
19492
|
+
}
|
|
19493
|
+
function renderRemoteCard(document2, row, local, t, onAction) {
|
|
19494
|
+
const { connection, remote } = row;
|
|
19495
|
+
const locked = row.pending !== null;
|
|
19496
|
+
const command = (action, label, primary = false) => {
|
|
19497
|
+
const button2 = remoteElement(
|
|
19498
|
+
document2,
|
|
19499
|
+
"button",
|
|
19500
|
+
primary ? "settings-command-button" : "settings-command-button settings-command-button--secondary",
|
|
19501
|
+
label
|
|
19502
|
+
);
|
|
19503
|
+
button2.type = "button";
|
|
19504
|
+
button2.dataset.action = action;
|
|
19505
|
+
button2.disabled = locked;
|
|
19506
|
+
button2.addEventListener("click", () => onAction(action));
|
|
19507
|
+
return button2;
|
|
19508
|
+
};
|
|
19509
|
+
const card = remoteElement(document2, "section", "settings-remote-card");
|
|
19510
|
+
card.dataset.hostId = connection.hostId;
|
|
19511
|
+
card.setAttribute("aria-label", connection.displayName);
|
|
19512
|
+
card.setAttribute("aria-busy", String(locked));
|
|
19513
|
+
const head = remoteElement(document2, "div", "settings-remote-card__head");
|
|
19514
|
+
const identity = remoteElement(document2, "div", "settings-remote-card__identity");
|
|
19515
|
+
const titleLine = remoteElement(document2, "div", "settings-remote-card__title");
|
|
19516
|
+
const [tone, stateLabel] = connectionState(row, t);
|
|
19517
|
+
const state = remoteElement(document2, "span", "settings-remote-card__state", stateLabel);
|
|
19518
|
+
state.dataset.tone = tone;
|
|
19519
|
+
titleLine.append(remoteElement(document2, "h3", "", connection.displayName), state);
|
|
19520
|
+
const address = `${connection.sshAlias ?? connection.sshHost}${connection.sshPort ? `:${connection.sshPort}` : ""}`;
|
|
19521
|
+
const addressLine = remoteElement(document2, "div", "settings-remote-card__address", address);
|
|
19522
|
+
addressLine.title = address;
|
|
19523
|
+
if (connection.source === "discovered")
|
|
19524
|
+
addressLine.append(
|
|
19525
|
+
remoteElement(document2, "span", "settings-status-badge", t("SSH \u914D\u7F6E", "SSH config"))
|
|
19526
|
+
);
|
|
19527
|
+
identity.append(titleLine, addressLine);
|
|
19528
|
+
const headActions = remoteElement(document2, "div", "settings-remote-card__actions");
|
|
19529
|
+
if (row.installation !== "not-installed" && !row.probing) {
|
|
19530
|
+
if (row.state === "error" && connection.autoConnect)
|
|
19531
|
+
headActions.append(command("reconnect", t("\u91CD\u65B0\u8FDE\u63A5", "Reconnect")));
|
|
19532
|
+
headActions.append(
|
|
19533
|
+
command("toggle", connection.autoConnect ? t("\u65AD\u5F00", "Disconnect") : t("\u8FDE\u63A5", "Connect"))
|
|
19231
19534
|
);
|
|
19232
19535
|
}
|
|
19233
|
-
|
|
19234
|
-
|
|
19235
|
-
|
|
19236
|
-
|
|
19237
|
-
|
|
19238
|
-
|
|
19239
|
-
|
|
19240
|
-
|
|
19241
|
-
|
|
19242
|
-
|
|
19243
|
-
|
|
19244
|
-
|
|
19245
|
-
|
|
19246
|
-
|
|
19247
|
-
|
|
19248
|
-
|
|
19249
|
-
|
|
19250
|
-
|
|
19251
|
-
|
|
19252
|
-
|
|
19253
|
-
|
|
19254
|
-
|
|
19255
|
-
|
|
19256
|
-
|
|
19257
|
-
|
|
19258
|
-
|
|
19259
|
-
|
|
19260
|
-
|
|
19261
|
-
|
|
19262
|
-
|
|
19263
|
-
|
|
19264
|
-
|
|
19265
|
-
|
|
19266
|
-
|
|
19267
|
-
|
|
19268
|
-
|
|
19269
|
-
|
|
19270
|
-
|
|
19271
|
-
|
|
19272
|
-
|
|
19273
|
-
|
|
19274
|
-
|
|
19275
|
-
|
|
19276
|
-
|
|
19277
|
-
|
|
19278
|
-
|
|
19279
|
-
|
|
19280
|
-
|
|
19281
|
-
|
|
19282
|
-
|
|
19283
|
-
|
|
19284
|
-
|
|
19285
|
-
|
|
19286
|
-
|
|
19287
|
-
|
|
19288
|
-
|
|
19289
|
-
|
|
19290
|
-
|
|
19291
|
-
|
|
19536
|
+
headActions.append(command("edit", t("\u7F16\u8F91", "Edit")));
|
|
19537
|
+
const remove = remoteElement(
|
|
19538
|
+
document2,
|
|
19539
|
+
"button",
|
|
19540
|
+
"settings-icon-button settings-remote-card__remove"
|
|
19541
|
+
);
|
|
19542
|
+
remove.type = "button";
|
|
19543
|
+
remove.dataset.action = "remove";
|
|
19544
|
+
remove.disabled = locked;
|
|
19545
|
+
remove.title = t("\u79FB\u9664", "Remove");
|
|
19546
|
+
remove.setAttribute("aria-label", t("\u79FB\u9664", "Remove"));
|
|
19547
|
+
remove.append(createRendererSettingsIcon("trash", 15));
|
|
19548
|
+
remove.addEventListener("click", () => onAction("remove"));
|
|
19549
|
+
headActions.append(remove);
|
|
19550
|
+
head.append(identity, headActions);
|
|
19551
|
+
card.append(head);
|
|
19552
|
+
if (row.stateError) {
|
|
19553
|
+
const detail = remoteElement(
|
|
19554
|
+
document2,
|
|
19555
|
+
"p",
|
|
19556
|
+
"settings-remote-card__detail",
|
|
19557
|
+
localizeRemoteFailure(row.stateError, t)
|
|
19558
|
+
);
|
|
19559
|
+
detail.dataset.tone = "danger";
|
|
19560
|
+
card.append(detail);
|
|
19561
|
+
}
|
|
19562
|
+
const service = remoteElement(document2, "div", "settings-remote-card__service");
|
|
19563
|
+
const copy = remoteElement(document2, "div", "settings-remote-card__service-copy");
|
|
19564
|
+
const hint = (hintTone, text, live = false) => {
|
|
19565
|
+
const line = remoteElement(document2, "p", "settings-remote-card__hint");
|
|
19566
|
+
line.dataset.tone = hintTone;
|
|
19567
|
+
if (hintTone === "progress")
|
|
19568
|
+
line.append(remoteElement(document2, "span", "settings-remote-spinner"));
|
|
19569
|
+
line.append(text);
|
|
19570
|
+
if (live) line.setAttribute("role", hintTone === "danger" ? "alert" : "status");
|
|
19571
|
+
return line;
|
|
19572
|
+
};
|
|
19573
|
+
const summary = serviceSummary(row, local, t);
|
|
19574
|
+
copy.append(remoteElement(document2, "div", "settings-remote-card__service-title", summary.title));
|
|
19575
|
+
if (row.pending) copy.append(hint("progress", row.pending, true));
|
|
19576
|
+
else {
|
|
19577
|
+
for (const [hintTone, text] of summary.hints) copy.append(hint(hintTone, text));
|
|
19578
|
+
if (row.notice)
|
|
19579
|
+
copy.append(hint(row.notice.tone, localizeRemoteFailure(row.notice.text, t), true));
|
|
19580
|
+
}
|
|
19581
|
+
const serviceActions = remoteElement(document2, "div", "settings-remote-card__actions");
|
|
19582
|
+
if (!row.probing) {
|
|
19583
|
+
const outdated = !remote && !!row.remoteIssue?.outdated && row.installation !== "not-installed";
|
|
19584
|
+
if (outdated) {
|
|
19585
|
+
const upgrade = command("upgrade", t("\u66F4\u65B0\u8FDC\u7A0B\u670D\u52A1", "Update remote service"), true);
|
|
19586
|
+
upgrade.disabled ||= !remoteInstallVersion(local);
|
|
19587
|
+
serviceActions.append(upgrade);
|
|
19588
|
+
} else if (remoteTroubled(row)) {
|
|
19589
|
+
if (row.installation !== "not-installed") {
|
|
19590
|
+
const repair = command("repair", t("\u4FEE\u590D\u8FDC\u7A0B\u670D\u52A1", "Repair remote service"));
|
|
19591
|
+
repair.title = t(
|
|
19592
|
+
"\u505C\u6B62\u5E76\u91CD\u65B0\u914D\u7F6E\u8FDC\u7A0B\u670D\u52A1\uFF0C\u4E0D\u4F1A\u66F4\u65B0\u7248\u672C\u3002",
|
|
19593
|
+
"Stops and reconfigures the remote service. It does not change the version."
|
|
19594
|
+
);
|
|
19595
|
+
serviceActions.append(repair);
|
|
19596
|
+
}
|
|
19597
|
+
if (!remote) serviceActions.append(command("recheck", t("\u91CD\u65B0\u68C0\u6D4B", "Check again")));
|
|
19598
|
+
}
|
|
19599
|
+
const target = remote ? remoteMaintenanceTarget(local, remote) : null;
|
|
19600
|
+
if (row.installation === "not-installed") {
|
|
19601
|
+
const install = command("install", t("\u5B89\u88C5\u5E76\u8FDE\u63A5", "Install and connect"), true);
|
|
19602
|
+
install.disabled ||= !remoteInstallVersion(local);
|
|
19603
|
+
serviceActions.append(install);
|
|
19604
|
+
} else if (remote && target && !remoteBusy(remote)) {
|
|
19605
|
+
const update = command(
|
|
19606
|
+
"update",
|
|
19607
|
+
target === remote.installedVersion ? t("\u91CD\u542F\u5E76\u8FDE\u63A5", "Restart and connect") : t("\u66F4\u65B0\u5230\u672C\u673A\u7248\u672C", "Match local version"),
|
|
19608
|
+
true
|
|
19609
|
+
);
|
|
19610
|
+
serviceActions.append(update);
|
|
19611
|
+
}
|
|
19292
19612
|
}
|
|
19293
|
-
|
|
19294
|
-
|
|
19295
|
-
|
|
19296
|
-
mark.draggable = false;
|
|
19297
|
-
mark.style.width = `${size}px`;
|
|
19298
|
-
mark.style.height = `${size}px`;
|
|
19299
|
-
mark.style.objectFit = "contain";
|
|
19300
|
-
mark.style.borderRadius = "22.37%";
|
|
19301
|
-
mark.style.flex = "none";
|
|
19302
|
-
return mark;
|
|
19613
|
+
service.append(copy, serviceActions);
|
|
19614
|
+
card.append(service);
|
|
19615
|
+
return card;
|
|
19303
19616
|
}
|
|
19304
19617
|
|
|
19305
|
-
// src/settings/
|
|
19306
|
-
|
|
19307
|
-
|
|
19308
|
-
|
|
19309
|
-
|
|
19310
|
-
|
|
19311
|
-
|
|
19312
|
-
const
|
|
19313
|
-
|
|
19314
|
-
|
|
19315
|
-
|
|
19316
|
-
|
|
19317
|
-
|
|
19318
|
-
|
|
19319
|
-
|
|
19320
|
-
|
|
19321
|
-
const
|
|
19322
|
-
|
|
19323
|
-
|
|
19324
|
-
|
|
19325
|
-
|
|
19326
|
-
|
|
19618
|
+
// src/settings/preference-ui.ts
|
|
19619
|
+
var nextPreferenceId = 0;
|
|
19620
|
+
function preferenceId(prefix) {
|
|
19621
|
+
nextPreferenceId += 1;
|
|
19622
|
+
return `codexhost-${prefix}-${nextPreferenceId}`;
|
|
19623
|
+
}
|
|
19624
|
+
function createPreferenceGroup(document2, title) {
|
|
19625
|
+
const group = document2.createElement("section");
|
|
19626
|
+
group.className = "mt-7 first-of-type:mt-0";
|
|
19627
|
+
const header = document2.createElement("div");
|
|
19628
|
+
header.className = "mb-2 flex min-h-6 items-center gap-2 px-1";
|
|
19629
|
+
const heading = document2.createElement("h3");
|
|
19630
|
+
heading.id = preferenceId("preference-group");
|
|
19631
|
+
heading.className = "m-0 text-[13px] leading-5 font-semibold text-settings-text";
|
|
19632
|
+
heading.textContent = title;
|
|
19633
|
+
header.append(heading);
|
|
19634
|
+
const card = document2.createElement("div");
|
|
19635
|
+
card.className = "rounded-[10px] border border-settings-border bg-settings-panel";
|
|
19636
|
+
group.setAttribute("aria-labelledby", heading.id);
|
|
19637
|
+
group.append(header, card);
|
|
19638
|
+
return { group, header, card };
|
|
19639
|
+
}
|
|
19640
|
+
function createPreferenceItem(document2, input) {
|
|
19641
|
+
const item = document2.createElement("div");
|
|
19642
|
+
item.className = "flex min-h-[60px] items-center justify-between gap-6 border-t border-settings-divider px-4 py-3 first:border-t-0";
|
|
19643
|
+
const copy = document2.createElement("div");
|
|
19644
|
+
copy.className = "flex min-w-0 flex-col gap-0.5";
|
|
19645
|
+
const heading = document2.createElement("div");
|
|
19646
|
+
heading.className = "flex items-center gap-1.5";
|
|
19647
|
+
const title = document2.createElement("label");
|
|
19648
|
+
title.htmlFor = input.controlId;
|
|
19649
|
+
title.className = "cursor-pointer text-[13px] leading-5 font-medium text-settings-text";
|
|
19650
|
+
title.textContent = input.title;
|
|
19651
|
+
heading.append(title);
|
|
19652
|
+
if (input.help) heading.append(createHelpTooltip(document2, input.help.label, input.help.lines));
|
|
19653
|
+
const description = document2.createElement("div");
|
|
19654
|
+
description.id = preferenceId("preference-description");
|
|
19655
|
+
description.className = "text-xs leading-[18px] text-settings-muted data-[invalid=true]:text-settings-danger";
|
|
19656
|
+
description.textContent = input.description;
|
|
19657
|
+
copy.append(heading, description);
|
|
19658
|
+
item.append(copy);
|
|
19659
|
+
return { item, description };
|
|
19660
|
+
}
|
|
19661
|
+
function createHelpTooltip(document2, label, lines) {
|
|
19662
|
+
const wrapper = document2.createElement("span");
|
|
19663
|
+
wrapper.className = "group relative inline-flex";
|
|
19664
|
+
const button2 = document2.createElement("button");
|
|
19665
|
+
button2.type = "button";
|
|
19666
|
+
button2.className = "inline-flex size-4 cursor-help items-center justify-center rounded-full border-0 bg-transparent p-0 text-settings-subtle transition-colors hover:text-settings-text focus-visible:text-settings-text focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-settings-focus";
|
|
19667
|
+
button2.setAttribute("aria-label", label);
|
|
19668
|
+
button2.append(createRendererSettingsIcon("help", 14));
|
|
19669
|
+
const tooltip = document2.createElement("div");
|
|
19670
|
+
tooltip.id = preferenceId("preference-tooltip");
|
|
19671
|
+
tooltip.setAttribute("role", "tooltip");
|
|
19672
|
+
tooltip.className = "pointer-events-none invisible absolute top-full left-0 z-20 mt-2 w-80 rounded-lg border border-settings-border bg-settings-panel px-3 py-2.5 text-xs leading-[18px] font-normal text-settings-text opacity-0 shadow-[0_10px_30px_rgb(0_0_0/0.22)] transition-opacity duration-150 group-hover:visible group-hover:opacity-100 group-focus-within:visible group-focus-within:opacity-100";
|
|
19673
|
+
const list = document2.createElement("ul");
|
|
19674
|
+
list.className = "m-0 grid list-disc gap-1 pl-4 marker:text-settings-subtle";
|
|
19675
|
+
for (const line of lines) {
|
|
19676
|
+
const item = document2.createElement("li");
|
|
19677
|
+
item.textContent = line;
|
|
19678
|
+
list.append(item);
|
|
19679
|
+
}
|
|
19680
|
+
tooltip.append(list);
|
|
19681
|
+
button2.setAttribute("aria-describedby", tooltip.id);
|
|
19682
|
+
button2.addEventListener("keydown", (event) => {
|
|
19683
|
+
if (event.key === "Escape") button2.blur();
|
|
19684
|
+
});
|
|
19685
|
+
wrapper.append(button2, tooltip);
|
|
19686
|
+
return wrapper;
|
|
19687
|
+
}
|
|
19688
|
+
function createPreferenceSwitch(document2, id, describedBy) {
|
|
19689
|
+
const input = document2.createElement("input");
|
|
19690
|
+
input.type = "checkbox";
|
|
19691
|
+
input.id = id;
|
|
19692
|
+
input.setAttribute("role", "switch");
|
|
19693
|
+
input.setAttribute("aria-describedby", describedBy);
|
|
19694
|
+
input.className = "relative m-0 h-5 w-9 shrink-0 cursor-pointer appearance-none rounded-full bg-settings-surface-hover ring-1 ring-settings-border transition-colors ring-inset before:absolute before:top-0.5 before:left-0.5 before:size-4 before:rounded-full before:bg-white before:shadow-[0_1px_2px_rgb(0_0_0/0.3)] before:transition-transform checked:bg-settings-focus checked:ring-transparent checked:before:translate-x-4 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-settings-focus";
|
|
19695
|
+
return input;
|
|
19696
|
+
}
|
|
19697
|
+
function createNumberField(document2, input) {
|
|
19698
|
+
const field = document2.createElement("div");
|
|
19699
|
+
field.className = "flex h-8 shrink-0 items-center gap-1.5 rounded-md border border-settings-border bg-settings-surface px-2.5 transition-colors focus-within:border-settings-focus data-[invalid=true]:border-settings-danger";
|
|
19700
|
+
const control = document2.createElement("input");
|
|
19701
|
+
control.type = "number";
|
|
19702
|
+
control.id = input.id;
|
|
19703
|
+
control.min = String(input.min);
|
|
19704
|
+
control.max = String(input.max);
|
|
19705
|
+
control.step = "1";
|
|
19706
|
+
control.setAttribute("aria-describedby", input.describedBy);
|
|
19707
|
+
control.className = "w-14 border-0 bg-transparent p-0 text-right text-[13px] leading-5 text-settings-text tabular-nums outline-none";
|
|
19708
|
+
const unit = document2.createElement("span");
|
|
19709
|
+
unit.className = "text-xs text-settings-muted";
|
|
19710
|
+
unit.setAttribute("aria-hidden", "true");
|
|
19711
|
+
unit.textContent = input.unit;
|
|
19712
|
+
field.append(control, unit);
|
|
19713
|
+
return { field, control };
|
|
19714
|
+
}
|
|
19715
|
+
|
|
19716
|
+
// src/settings/remote-connections-dialogs.ts
|
|
19717
|
+
function createRemoteDialog({ container, signal, t }, title) {
|
|
19718
|
+
if (signal.aborted || container.querySelector("dialog")) return null;
|
|
19719
|
+
const document2 = container.ownerDocument;
|
|
19720
|
+
const modal = remoteElement(
|
|
19721
|
+
document2,
|
|
19722
|
+
"dialog",
|
|
19723
|
+
"settings-account-dialog settings-credential-dialog settings-remote-dialog"
|
|
19724
|
+
);
|
|
19725
|
+
const form = remoteElement(document2, "form");
|
|
19726
|
+
const heading = remoteElement(document2, "h2", "", title);
|
|
19727
|
+
heading.id = preferenceId("remote-dialog-title");
|
|
19728
|
+
modal.setAttribute("aria-labelledby", heading.id);
|
|
19729
|
+
const body = remoteElement(document2, "div", "settings-credential-dialog__body");
|
|
19730
|
+
const error51 = remoteElement(document2, "p", "settings-credential-dialog__error");
|
|
19731
|
+
error51.setAttribute("role", "alert");
|
|
19732
|
+
const actions = remoteElement(document2, "div", "settings-credential-dialog__actions");
|
|
19733
|
+
const cancel = remoteElement(
|
|
19734
|
+
document2,
|
|
19735
|
+
"button",
|
|
19736
|
+
"settings-command-button settings-command-button--secondary",
|
|
19737
|
+
t("\u53D6\u6D88", "Cancel")
|
|
19738
|
+
);
|
|
19739
|
+
cancel.type = "button";
|
|
19740
|
+
const confirm = remoteElement(document2, "button", "settings-command-button");
|
|
19741
|
+
confirm.type = "submit";
|
|
19742
|
+
actions.append(cancel, confirm);
|
|
19743
|
+
form.append(heading, body, error51, actions);
|
|
19744
|
+
modal.append(form);
|
|
19745
|
+
let busy = false;
|
|
19746
|
+
let labels = { idle: "", busy: "" };
|
|
19747
|
+
const setBusy = (next) => {
|
|
19748
|
+
busy = next;
|
|
19749
|
+
cancel.disabled = confirm.disabled = next;
|
|
19750
|
+
confirm.textContent = next ? labels.busy : labels.idle;
|
|
19751
|
+
modal.setAttribute("aria-busy", String(next));
|
|
19752
|
+
};
|
|
19753
|
+
const dispose = () => modal.remove();
|
|
19754
|
+
cancel.addEventListener("click", () => modal.close());
|
|
19755
|
+
modal.addEventListener("cancel", (event) => {
|
|
19756
|
+
if (busy) event.preventDefault();
|
|
19757
|
+
});
|
|
19758
|
+
modal.addEventListener("close", () => {
|
|
19759
|
+
signal.removeEventListener("abort", dispose);
|
|
19760
|
+
dispose();
|
|
19761
|
+
});
|
|
19762
|
+
signal.addEventListener("abort", dispose, { once: true });
|
|
19763
|
+
return {
|
|
19764
|
+
form,
|
|
19765
|
+
body,
|
|
19766
|
+
submit(operation) {
|
|
19767
|
+
if (busy) return;
|
|
19768
|
+
error51.textContent = "";
|
|
19769
|
+
setBusy(true);
|
|
19770
|
+
operation().then(
|
|
19771
|
+
() => modal.close(),
|
|
19772
|
+
(failure) => {
|
|
19773
|
+
if (signal.aborted) return;
|
|
19774
|
+
setBusy(false);
|
|
19775
|
+
error51.textContent = localizeRemoteFailure(remoteErrorMessage(failure), t);
|
|
19776
|
+
}
|
|
19777
|
+
);
|
|
19778
|
+
},
|
|
19779
|
+
show(confirmLabel, busyLabel, danger = false) {
|
|
19780
|
+
labels = { idle: confirmLabel, busy: busyLabel };
|
|
19781
|
+
confirm.textContent = confirmLabel;
|
|
19782
|
+
if (danger)
|
|
19783
|
+
confirm.className = "settings-command-button settings-command-button--secondary settings-command-button--danger";
|
|
19784
|
+
container.append(modal);
|
|
19785
|
+
modal.showModal();
|
|
19786
|
+
}
|
|
19787
|
+
};
|
|
19788
|
+
}
|
|
19789
|
+
function openRemoteConnectionEditor(options) {
|
|
19790
|
+
const { t, previous } = options;
|
|
19791
|
+
const dialog = createRemoteDialog(
|
|
19792
|
+
options,
|
|
19793
|
+
previous ? t("\u7F16\u8F91\u8FDE\u63A5", "Edit connection") : t("\u6DFB\u52A0 SSH \u8FDE\u63A5", "Add SSH connection")
|
|
19794
|
+
);
|
|
19795
|
+
if (!dialog) return;
|
|
19796
|
+
const document2 = options.container.ownerDocument;
|
|
19797
|
+
const field = (label, value, placeholder = "", hint = "") => {
|
|
19798
|
+
const wrapper = remoteElement(document2, "div", "settings-credential-dialog__field");
|
|
19799
|
+
const input = remoteElement(document2, "input");
|
|
19800
|
+
input.id = preferenceId("remote-field");
|
|
19801
|
+
input.value = value;
|
|
19802
|
+
input.placeholder = placeholder;
|
|
19803
|
+
input.autocomplete = "off";
|
|
19804
|
+
input.spellcheck = false;
|
|
19805
|
+
const caption = remoteElement(document2, "label", "", label);
|
|
19806
|
+
caption.htmlFor = input.id;
|
|
19807
|
+
wrapper.append(caption, input);
|
|
19808
|
+
if (hint) {
|
|
19809
|
+
const description = remoteElement(document2, "small", "", hint);
|
|
19810
|
+
description.id = `${input.id}-hint`;
|
|
19811
|
+
input.setAttribute("aria-describedby", description.id);
|
|
19812
|
+
wrapper.append(description);
|
|
19813
|
+
}
|
|
19814
|
+
dialog.body.append(wrapper);
|
|
19815
|
+
return input;
|
|
19816
|
+
};
|
|
19817
|
+
const name = field(t("\u540D\u79F0", "Name"), previous?.displayName ?? "");
|
|
19818
|
+
name.required = true;
|
|
19819
|
+
const addressHint = t(
|
|
19820
|
+
"user@hostname\uFF0C\u6216 ~/.ssh/config \u4E2D\u7684\u4E3B\u673A\u522B\u540D",
|
|
19821
|
+
"user@hostname, or a host alias from ~/.ssh/config"
|
|
19822
|
+
);
|
|
19823
|
+
const hostname3 = field(
|
|
19824
|
+
t("SSH \u5730\u5740", "SSH address"),
|
|
19825
|
+
previous?.sshHost ?? "",
|
|
19826
|
+
"user@hostname",
|
|
19827
|
+
addressHint
|
|
19828
|
+
);
|
|
19829
|
+
hostname3.required = true;
|
|
19830
|
+
hostname3.pattern = "[^\\s\\-]\\S*";
|
|
19831
|
+
hostname3.title = addressHint;
|
|
19832
|
+
const port = field(
|
|
19833
|
+
t("\u7AEF\u53E3\uFF08\u53EF\u9009\uFF09", "Port (optional)"),
|
|
19834
|
+
previous?.sshPort?.toString() ?? "",
|
|
19835
|
+
"22"
|
|
19836
|
+
);
|
|
19837
|
+
port.type = "number";
|
|
19838
|
+
port.min = "1";
|
|
19839
|
+
port.max = "65535";
|
|
19840
|
+
port.step = "1";
|
|
19841
|
+
const identity = field(
|
|
19842
|
+
t("\u79C1\u94A5\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09", "Identity file (optional)"),
|
|
19843
|
+
previous?.identity ?? "",
|
|
19844
|
+
"~/.ssh/id_ed25519"
|
|
19845
|
+
);
|
|
19846
|
+
if (previous?.source === "discovered") {
|
|
19847
|
+
hostname3.disabled = port.disabled = identity.disabled = true;
|
|
19848
|
+
dialog.body.append(
|
|
19849
|
+
remoteElement(
|
|
19850
|
+
document2,
|
|
19851
|
+
"p",
|
|
19852
|
+
"",
|
|
19853
|
+
t(
|
|
19854
|
+
"\u6B64\u8FDE\u63A5\u6765\u81EA SSH \u914D\u7F6E\uFF0C\u8FD9\u91CC\u53EA\u80FD\u4FEE\u6539\u540D\u79F0\uFF1B\u5176\u4F59\u914D\u7F6E\u8BF7\u5728\u539F\u751F\u8BBE\u7F6E\u4E2D\u7F16\u8F91\u3002",
|
|
19855
|
+
"This connection comes from SSH config, so only its name can change here. Edit other details in native settings."
|
|
19856
|
+
)
|
|
19857
|
+
)
|
|
19858
|
+
);
|
|
19859
|
+
}
|
|
19860
|
+
dialog.form.addEventListener("submit", (event) => {
|
|
19861
|
+
event.preventDefault();
|
|
19862
|
+
dialog.submit(
|
|
19863
|
+
() => options.save({
|
|
19864
|
+
displayName: name.value,
|
|
19865
|
+
hostname: hostname3.value,
|
|
19866
|
+
sshPort: port.value ? Number(port.value) : null,
|
|
19867
|
+
identity: identity.value.trim() || null
|
|
19868
|
+
})
|
|
19869
|
+
);
|
|
19870
|
+
});
|
|
19871
|
+
dialog.show(t("\u4FDD\u5B58", "Save"), t("\u4FDD\u5B58\u4E2D\u2026", "Saving\u2026"));
|
|
19872
|
+
name.focus();
|
|
19873
|
+
name.select();
|
|
19874
|
+
}
|
|
19875
|
+
function openRemoteConnectionRemoval(options) {
|
|
19876
|
+
const { t, connection } = options;
|
|
19877
|
+
const dialog = createRemoteDialog(
|
|
19878
|
+
options,
|
|
19879
|
+
t(`\u79FB\u9664\u201C${connection.displayName}\u201D\uFF1F`, `Remove "${connection.displayName}"?`)
|
|
19880
|
+
);
|
|
19881
|
+
if (!dialog) return;
|
|
19882
|
+
dialog.body.append(
|
|
19883
|
+
remoteElement(
|
|
19884
|
+
options.container.ownerDocument,
|
|
19885
|
+
"p",
|
|
19886
|
+
"",
|
|
19887
|
+
t(
|
|
19888
|
+
"\u79FB\u9664\u8FDE\u63A5\u4E0D\u4F1A\u5220\u9664\u8FDC\u7A0B\u6587\u4EF6\u6216\u4F1A\u8BDD\u3002",
|
|
19889
|
+
"Removing a connection does not delete remote files or chats."
|
|
19890
|
+
)
|
|
19891
|
+
)
|
|
19892
|
+
);
|
|
19893
|
+
dialog.form.addEventListener("submit", (event) => {
|
|
19894
|
+
event.preventDefault();
|
|
19895
|
+
dialog.submit(options.remove);
|
|
19896
|
+
});
|
|
19897
|
+
dialog.show(t("\u79FB\u9664", "Remove"), t("\u79FB\u9664\u4E2D\u2026", "Removing\u2026"), true);
|
|
19898
|
+
}
|
|
19899
|
+
|
|
19900
|
+
// src/settings/remote-connections-page.ts
|
|
19901
|
+
var POLL_INTERVAL_MS = 5e3;
|
|
19902
|
+
var SUCCESS_NOTICE_MS = 6e3;
|
|
19903
|
+
var INSPECT_RETRY_MS = 6e4;
|
|
19904
|
+
var RESTART_GRACE_MS = 9e4;
|
|
19905
|
+
var CONNECT_REQUEST_WAIT_MS = 3e3;
|
|
19906
|
+
function createRemoteConnectionsPage(messages, getControl) {
|
|
19907
|
+
const zh = messages.locale === "zh-CN";
|
|
19908
|
+
const t = (cn, en) => zh ? cn : en;
|
|
19909
|
+
return Object.freeze({
|
|
19910
|
+
id: "remote-connections",
|
|
19911
|
+
label: messages.pageLabels["remote-connections"],
|
|
19912
|
+
icon: "gateway",
|
|
19913
|
+
mount({ content, signal }) {
|
|
19914
|
+
const document2 = content.ownerDocument;
|
|
19915
|
+
const el = (tag, className = "", text = "") => remoteElement(document2, tag, className, text);
|
|
19916
|
+
const emptyPanel = (title, detail) => {
|
|
19917
|
+
const panel = el("div", "settings-remote__empty");
|
|
19918
|
+
const copy = el("div");
|
|
19919
|
+
copy.append(el("strong", "", title), el("span", "", detail));
|
|
19920
|
+
panel.append(copy);
|
|
19921
|
+
return panel;
|
|
19922
|
+
};
|
|
19923
|
+
const root = el("div", "settings-remote");
|
|
19924
|
+
const header = el("div", "settings-remote__header");
|
|
19925
|
+
const headerCopy = el("div");
|
|
19926
|
+
const localVersion = el("p", "settings-remote__meta");
|
|
19927
|
+
headerCopy.append(
|
|
19928
|
+
el("h1", "settings-section-label", messages.pageLabels["remote-connections"]),
|
|
19929
|
+
el(
|
|
19930
|
+
"p",
|
|
19931
|
+
"settings-page-description",
|
|
19932
|
+
t(
|
|
19933
|
+
"\u901A\u8FC7 SSH \u8FDE\u63A5\u4F60\u7684 Mac \u6216 Linux \u7535\u8111\u3002\u8FDE\u63A5\u914D\u7F6E\u4E0E Codex \u5171\u7528\u3002",
|
|
19934
|
+
"Connect to a Mac or Linux computer over SSH. Connection settings are shared with Codex."
|
|
19935
|
+
)
|
|
19936
|
+
),
|
|
19937
|
+
localVersion
|
|
19938
|
+
);
|
|
19939
|
+
header.append(headerCopy);
|
|
19940
|
+
root.append(header);
|
|
19941
|
+
content.append(root);
|
|
19942
|
+
const availableControl = getControl();
|
|
19943
|
+
if (!availableControl) {
|
|
19944
|
+
root.append(
|
|
19945
|
+
emptyPanel(
|
|
19946
|
+
t("\u6B64\u7A97\u53E3\u65E0\u6CD5\u7BA1\u7406 SSH \u8FDE\u63A5", "SSH connections are unavailable in this window"),
|
|
19947
|
+
t("\u8BF7\u5728 Codex \u684C\u9762\u7A0B\u5E8F\u4E2D\u7BA1\u7406 SSH \u8FDE\u63A5\u3002", "Manage SSH connections in Codex Desktop.")
|
|
19948
|
+
)
|
|
19949
|
+
);
|
|
19950
|
+
return;
|
|
19951
|
+
}
|
|
19952
|
+
const control = availableControl;
|
|
19953
|
+
const toolbar = el("div", "settings-remote__toolbar");
|
|
19954
|
+
const refreshButton = el("button", "settings-icon-button settings-remote__refresh");
|
|
19955
|
+
refreshButton.type = "button";
|
|
19956
|
+
refreshButton.title = t("\u5237\u65B0", "Refresh");
|
|
19957
|
+
refreshButton.setAttribute("aria-label", t("\u5237\u65B0", "Refresh"));
|
|
19958
|
+
refreshButton.append(createRendererSettingsIcon("refresh", 16));
|
|
19959
|
+
const addButton = el("button", "settings-command-button");
|
|
19960
|
+
addButton.type = "button";
|
|
19961
|
+
addButton.append(createRendererSettingsIcon("add", 14), t("\u6DFB\u52A0\u8FDE\u63A5", "Add connection"));
|
|
19962
|
+
toolbar.append(refreshButton, addButton);
|
|
19963
|
+
header.append(toolbar);
|
|
19964
|
+
const banner = el("div", "settings-remote__banner");
|
|
19965
|
+
banner.setAttribute("role", "alert");
|
|
19966
|
+
banner.hidden = true;
|
|
19967
|
+
const bannerText = el("span");
|
|
19968
|
+
const retry = el(
|
|
19969
|
+
"button",
|
|
19970
|
+
"settings-command-button settings-command-button--secondary",
|
|
19971
|
+
t("\u91CD\u8BD5", "Retry")
|
|
19972
|
+
);
|
|
19973
|
+
retry.type = "button";
|
|
19974
|
+
banner.append(bannerText, retry);
|
|
19975
|
+
const placeholder = el("div", "settings-remote__placeholder");
|
|
19976
|
+
const list = el("div", "settings-remote__list");
|
|
19977
|
+
root.append(banner, placeholder, list);
|
|
19978
|
+
let local = null;
|
|
19979
|
+
let localLoaded = false;
|
|
19980
|
+
let loaded = false;
|
|
19981
|
+
let loadError = null;
|
|
19982
|
+
let order = [];
|
|
19983
|
+
let polling = false;
|
|
19984
|
+
const rows = /* @__PURE__ */ new Map();
|
|
19985
|
+
const cards = /* @__PURE__ */ new Map();
|
|
19986
|
+
const installations = /* @__PURE__ */ new Map();
|
|
19987
|
+
const probeTokens = /* @__PURE__ */ new Map();
|
|
19988
|
+
const inspectFailures = /* @__PURE__ */ new Map();
|
|
19989
|
+
const restarting = /* @__PURE__ */ new Map();
|
|
19990
|
+
const focusedElement = () => {
|
|
19991
|
+
const active = root.getRootNode().activeElement;
|
|
19992
|
+
return active instanceof HTMLElement ? active : null;
|
|
19993
|
+
};
|
|
19994
|
+
function renderPlaceholder() {
|
|
19995
|
+
if (!loaded) {
|
|
19996
|
+
const loading = el("p", "settings-remote__loading");
|
|
19997
|
+
loading.append(
|
|
19998
|
+
el("span", "settings-remote-spinner"),
|
|
19999
|
+
t("\u6B63\u5728\u8BFB\u53D6\u8FDE\u63A5\u2026", "Loading connections\u2026")
|
|
20000
|
+
);
|
|
20001
|
+
placeholder.replaceChildren(...loadError ? [] : [loading]);
|
|
20002
|
+
} else if (!order.length) {
|
|
20003
|
+
const empty = emptyPanel(
|
|
20004
|
+
t("\u8FD8\u6CA1\u6709 SSH \u8FDE\u63A5", "No SSH connections yet"),
|
|
20005
|
+
t(
|
|
20006
|
+
"\u6DFB\u52A0\u4E00\u53F0 Mac \u6216 Linux \u7535\u8111\uFF0C\u5728\u4E0A\u9762\u8FD0\u884C\u4F1A\u8BDD\u3002",
|
|
20007
|
+
"Add a Mac or Linux computer to run conversations on it."
|
|
20008
|
+
)
|
|
20009
|
+
);
|
|
20010
|
+
const add = el(
|
|
20011
|
+
"button",
|
|
20012
|
+
"settings-command-button settings-command-button--secondary",
|
|
20013
|
+
t("\u6DFB\u52A0\u8FDE\u63A5", "Add connection")
|
|
20014
|
+
);
|
|
20015
|
+
add.type = "button";
|
|
20016
|
+
add.addEventListener("click", () => edit(null));
|
|
20017
|
+
empty.append(add);
|
|
20018
|
+
placeholder.replaceChildren(empty);
|
|
20019
|
+
} else placeholder.replaceChildren();
|
|
20020
|
+
}
|
|
20021
|
+
function render() {
|
|
20022
|
+
if (signal.aborted) return;
|
|
20023
|
+
localVersion.textContent = localLoaded ? `${t("\u672C\u673A codexhost", "Local codexhost")} ${local?.runningVersion ?? t("\u7248\u672C\u6682\u65F6\u65E0\u6CD5\u8BFB\u53D6", "version is temporarily unavailable")}` : "";
|
|
20024
|
+
banner.hidden = !loadError;
|
|
20025
|
+
bannerText.textContent = loadError ? `${t("\u8BFB\u53D6\u8FDE\u63A5\u5931\u8D25", "Could not load connections")}: ${localizeRemoteFailure(loadError, t)}` : "";
|
|
20026
|
+
renderPlaceholder();
|
|
20027
|
+
for (const [hostId, card] of cards) {
|
|
20028
|
+
if (rows.has(hostId)) continue;
|
|
20029
|
+
card.element.remove();
|
|
20030
|
+
cards.delete(hostId);
|
|
20031
|
+
}
|
|
20032
|
+
const active = focusedElement();
|
|
20033
|
+
order.forEach((hostId, index) => {
|
|
20034
|
+
const row = rows.get(hostId);
|
|
20035
|
+
if (!row) return;
|
|
20036
|
+
const signature = JSON.stringify([row, local]);
|
|
20037
|
+
let card = cards.get(hostId);
|
|
20038
|
+
if (card?.signature !== signature) {
|
|
20039
|
+
const element = renderRemoteCard(
|
|
20040
|
+
document2,
|
|
20041
|
+
row,
|
|
20042
|
+
local,
|
|
20043
|
+
t,
|
|
20044
|
+
(action) => handle(row, action)
|
|
20045
|
+
);
|
|
20046
|
+
const focusedAction = active && card?.element.contains(active) ? active.dataset.action : void 0;
|
|
20047
|
+
if (card) card.element.replaceWith(element);
|
|
20048
|
+
card = { element, signature };
|
|
20049
|
+
cards.set(hostId, card);
|
|
20050
|
+
if (focusedAction) focusAction(element, focusedAction);
|
|
20051
|
+
}
|
|
20052
|
+
if (list.children[index] !== card.element)
|
|
20053
|
+
list.insertBefore(card.element, list.children[index] ?? null);
|
|
20054
|
+
});
|
|
20055
|
+
}
|
|
20056
|
+
function focusAction(card, action) {
|
|
20057
|
+
const target = card.querySelector(`[data-action="${action}"]:not(:disabled)`) ?? card.querySelector("button:not(:disabled)");
|
|
20058
|
+
target?.focus();
|
|
20059
|
+
}
|
|
20060
|
+
async function probe(row) {
|
|
20061
|
+
const { hostId } = row.connection;
|
|
20062
|
+
const token = (probeTokens.get(hostId) ?? 0) + 1;
|
|
20063
|
+
probeTokens.set(hostId, token);
|
|
20064
|
+
const state = await control.ssh.state(hostId, signal).catch((error51) => ({ state: "unknown", error: remoteErrorMessage(error51) }));
|
|
20065
|
+
let remote = null;
|
|
20066
|
+
let remoteIssue = null;
|
|
20067
|
+
if (state.state === "connected")
|
|
20068
|
+
remote = await control.runtime(hostId).catch((error51) => {
|
|
20069
|
+
remoteIssue = remoteVersionIssue(error51);
|
|
20070
|
+
return null;
|
|
20071
|
+
});
|
|
20072
|
+
let expectedGap = false;
|
|
20073
|
+
if (remote && remoteBusy(remote)) restarting.set(hostId, Date.now() + RESTART_GRACE_MS);
|
|
20074
|
+
else if (remote || (restarting.get(hostId) ?? 0) <= Date.now()) restarting.delete(hostId);
|
|
20075
|
+
else if (row.remote) {
|
|
20076
|
+
expectedGap = true;
|
|
20077
|
+
remote = { ...row.remote, update: { ...row.remote.update, phase: "restarting" } };
|
|
20078
|
+
remoteIssue = null;
|
|
20079
|
+
}
|
|
20080
|
+
if (remote) installations.set(hostId, "installed");
|
|
20081
|
+
else if (!installations.has(hostId) && Date.now() - (inspectFailures.get(hostId) ?? -INSPECT_RETRY_MS) >= INSPECT_RETRY_MS) {
|
|
20082
|
+
const inspected = await control.setup(row.connection, "inspect").catch(() => null);
|
|
20083
|
+
if (inspected) installations.set(hostId, inspected.state);
|
|
20084
|
+
else inspectFailures.set(hostId, Date.now());
|
|
20085
|
+
}
|
|
20086
|
+
if (signal.aborted || rows.get(hostId) !== row || probeTokens.get(hostId) !== token) return;
|
|
20087
|
+
row.probing = false;
|
|
20088
|
+
row.state = expectedGap ? "connecting" : state.state;
|
|
20089
|
+
row.stateError = expectedGap ? null : state.error;
|
|
20090
|
+
row.remote = remote;
|
|
20091
|
+
row.remoteIssue = remoteIssue;
|
|
20092
|
+
row.installation = installations.get(hostId) ?? "unknown";
|
|
20093
|
+
render();
|
|
20094
|
+
}
|
|
20095
|
+
async function refresh(actingHostId, wait = "acting") {
|
|
20096
|
+
if (signal.aborted) return;
|
|
20097
|
+
const localTask = control.runtime("local").catch(() => null).then((status) => {
|
|
20098
|
+
if (signal.aborted) return;
|
|
20099
|
+
local = status;
|
|
20100
|
+
localLoaded = true;
|
|
20101
|
+
render();
|
|
20102
|
+
});
|
|
20103
|
+
let connections;
|
|
20104
|
+
try {
|
|
20105
|
+
connections = await control.ssh.list(signal);
|
|
20106
|
+
} catch (error51) {
|
|
20107
|
+
if (signal.aborted) return;
|
|
20108
|
+
loadError = remoteErrorMessage(error51);
|
|
20109
|
+
render();
|
|
20110
|
+
return;
|
|
20111
|
+
}
|
|
20112
|
+
if (signal.aborted) return;
|
|
20113
|
+
loadError = null;
|
|
20114
|
+
loaded = true;
|
|
20115
|
+
order = connections.map((connection) => connection.hostId);
|
|
20116
|
+
for (const connection of connections) {
|
|
20117
|
+
const row = rows.get(connection.hostId);
|
|
20118
|
+
if (row) row.connection = connection;
|
|
20119
|
+
else
|
|
20120
|
+
rows.set(connection.hostId, {
|
|
20121
|
+
connection,
|
|
20122
|
+
probing: true,
|
|
20123
|
+
state: null,
|
|
20124
|
+
stateError: null,
|
|
20125
|
+
remote: null,
|
|
20126
|
+
remoteIssue: null,
|
|
20127
|
+
installation: null,
|
|
20128
|
+
pending: null,
|
|
20129
|
+
notice: null
|
|
20130
|
+
});
|
|
20131
|
+
}
|
|
20132
|
+
for (const hostId of [...rows.keys()]) {
|
|
20133
|
+
if (order.includes(hostId)) continue;
|
|
20134
|
+
rows.delete(hostId);
|
|
20135
|
+
installations.delete(hostId);
|
|
20136
|
+
probeTokens.delete(hostId);
|
|
20137
|
+
inspectFailures.delete(hostId);
|
|
20138
|
+
restarting.delete(hostId);
|
|
20139
|
+
}
|
|
20140
|
+
render();
|
|
20141
|
+
const probes = [...rows.values()].filter((row) => !row.pending || row.connection.hostId === actingHostId).map((row) => ({ hostId: row.connection.hostId, done: probe(row) }));
|
|
20142
|
+
const awaited = wait === "all" ? probes : probes.filter((p) => p.hostId === actingHostId);
|
|
20143
|
+
await Promise.all([localTask, ...awaited.map((p) => p.done)]);
|
|
20144
|
+
}
|
|
20145
|
+
async function act(row, action, label, operation) {
|
|
20146
|
+
const { hostId } = row.connection;
|
|
20147
|
+
row.pending = label;
|
|
20148
|
+
row.notice = null;
|
|
20149
|
+
render();
|
|
20150
|
+
try {
|
|
20151
|
+
const done = await operation();
|
|
20152
|
+
await refresh(hostId);
|
|
20153
|
+
if (typeof done === "string") {
|
|
20154
|
+
const notice = { tone: "success", text: done };
|
|
20155
|
+
row.notice = notice;
|
|
20156
|
+
setTimeout(() => {
|
|
20157
|
+
if (row.notice !== notice) return;
|
|
20158
|
+
row.notice = null;
|
|
20159
|
+
render();
|
|
20160
|
+
}, SUCCESS_NOTICE_MS);
|
|
20161
|
+
}
|
|
20162
|
+
} catch (error51) {
|
|
20163
|
+
row.notice = { tone: "danger", text: remoteErrorMessage(error51) };
|
|
20164
|
+
installations.delete(hostId);
|
|
20165
|
+
inspectFailures.delete(hostId);
|
|
20166
|
+
void refresh(hostId);
|
|
20167
|
+
} finally {
|
|
20168
|
+
row.pending = null;
|
|
20169
|
+
if (!signal.aborted) {
|
|
20170
|
+
render();
|
|
20171
|
+
const card = cards.get(hostId)?.element;
|
|
20172
|
+
if (card && !focusedElement()) focusAction(card, action);
|
|
20173
|
+
}
|
|
20174
|
+
}
|
|
20175
|
+
}
|
|
20176
|
+
function edit(previous) {
|
|
20177
|
+
openRemoteConnectionEditor({
|
|
20178
|
+
container: root,
|
|
20179
|
+
signal,
|
|
20180
|
+
t,
|
|
20181
|
+
previous,
|
|
20182
|
+
async save(draft) {
|
|
20183
|
+
await control.ssh.save(draft, previous, signal);
|
|
20184
|
+
if (previous) {
|
|
20185
|
+
installations.delete(previous.hostId);
|
|
20186
|
+
inspectFailures.delete(previous.hostId);
|
|
20187
|
+
restarting.delete(previous.hostId);
|
|
20188
|
+
}
|
|
20189
|
+
await refresh();
|
|
20190
|
+
}
|
|
20191
|
+
});
|
|
20192
|
+
}
|
|
20193
|
+
function handle(row, action) {
|
|
20194
|
+
if (row.pending) return;
|
|
20195
|
+
const { connection } = row;
|
|
20196
|
+
const { hostId } = connection;
|
|
20197
|
+
const setConnected = async (enabled) => {
|
|
20198
|
+
const request = control.ssh.connect(hostId, enabled, signal);
|
|
20199
|
+
request.catch(() => void 0);
|
|
20200
|
+
await Promise.race([
|
|
20201
|
+
request,
|
|
20202
|
+
new Promise((resolve) => setTimeout(resolve, CONNECT_REQUEST_WAIT_MS))
|
|
20203
|
+
]);
|
|
20204
|
+
};
|
|
20205
|
+
const reconnect = async () => {
|
|
20206
|
+
installations.delete(hostId);
|
|
20207
|
+
inspectFailures.delete(hostId);
|
|
20208
|
+
await setConnected(true);
|
|
20209
|
+
};
|
|
20210
|
+
switch (action) {
|
|
20211
|
+
case "edit":
|
|
20212
|
+
edit(connection);
|
|
20213
|
+
break;
|
|
20214
|
+
case "remove":
|
|
20215
|
+
openRemoteConnectionRemoval({
|
|
20216
|
+
container: root,
|
|
20217
|
+
signal,
|
|
20218
|
+
t,
|
|
20219
|
+
connection,
|
|
20220
|
+
async remove() {
|
|
20221
|
+
await control.ssh.remove(connection, signal);
|
|
20222
|
+
await refresh();
|
|
20223
|
+
}
|
|
20224
|
+
});
|
|
20225
|
+
break;
|
|
20226
|
+
case "toggle":
|
|
20227
|
+
void act(
|
|
20228
|
+
row,
|
|
20229
|
+
action,
|
|
20230
|
+
connection.autoConnect ? t("\u6B63\u5728\u65AD\u5F00\u2026", "Disconnecting\u2026") : t("\u6B63\u5728\u8FDE\u63A5\u2026", "Connecting\u2026"),
|
|
20231
|
+
() => setConnected(!connection.autoConnect)
|
|
20232
|
+
);
|
|
20233
|
+
break;
|
|
20234
|
+
case "reconnect":
|
|
20235
|
+
void act(row, action, t("\u6B63\u5728\u91CD\u65B0\u8FDE\u63A5\u2026", "Reconnecting\u2026"), async () => {
|
|
20236
|
+
await setConnected(false);
|
|
20237
|
+
await setConnected(true);
|
|
20238
|
+
});
|
|
20239
|
+
break;
|
|
20240
|
+
case "recheck":
|
|
20241
|
+
void act(row, action, t("\u6B63\u5728\u91CD\u65B0\u68C0\u6D4B\u2026", "Checking again\u2026"), async () => {
|
|
20242
|
+
installations.delete(hostId);
|
|
20243
|
+
inspectFailures.delete(hostId);
|
|
20244
|
+
});
|
|
20245
|
+
break;
|
|
20246
|
+
case "install": {
|
|
20247
|
+
const version2 = remoteInstallVersion(local);
|
|
20248
|
+
if (!version2) break;
|
|
20249
|
+
void act(
|
|
20250
|
+
row,
|
|
20251
|
+
action,
|
|
20252
|
+
t("\u6B63\u5728\u5B89\u88C5\u8FDC\u7A0B\u670D\u52A1\uFF0C\u8BF7\u7A0D\u5019\u2026", "Installing remote service, please wait\u2026"),
|
|
20253
|
+
async () => {
|
|
20254
|
+
await control.setup(connection, "install", version2);
|
|
20255
|
+
await reconnect();
|
|
20256
|
+
return t("\u8FDC\u7A0B\u670D\u52A1\u5DF2\u5B89\u88C5\uFF0C\u6B63\u5728\u8FDE\u63A5", "Remote service installed; connecting");
|
|
20257
|
+
}
|
|
20258
|
+
);
|
|
20259
|
+
break;
|
|
20260
|
+
}
|
|
20261
|
+
case "upgrade": {
|
|
20262
|
+
const version2 = remoteInstallVersion(local);
|
|
20263
|
+
if (!version2) break;
|
|
20264
|
+
void act(
|
|
20265
|
+
row,
|
|
20266
|
+
action,
|
|
20267
|
+
t("\u6B63\u5728\u66F4\u65B0\u8FDC\u7A0B\u670D\u52A1\uFF0C\u8BF7\u7A0D\u5019\u2026", "Updating remote service, please wait\u2026"),
|
|
20268
|
+
async () => {
|
|
20269
|
+
await control.setup(connection, "update", version2);
|
|
20270
|
+
await reconnect();
|
|
20271
|
+
return t("\u8FDC\u7A0B\u670D\u52A1\u5DF2\u66F4\u65B0\uFF0C\u6B63\u5728\u8FDE\u63A5", "Remote service updated; connecting");
|
|
20272
|
+
}
|
|
20273
|
+
);
|
|
20274
|
+
break;
|
|
20275
|
+
}
|
|
20276
|
+
case "repair":
|
|
20277
|
+
void act(
|
|
20278
|
+
row,
|
|
20279
|
+
action,
|
|
20280
|
+
t("\u6B63\u5728\u91CD\u65B0\u914D\u7F6E\u8FDC\u7A0B\u670D\u52A1\u2026", "Reconfiguring remote service\u2026"),
|
|
20281
|
+
async () => {
|
|
20282
|
+
await control.setup(connection, "repair");
|
|
20283
|
+
await reconnect();
|
|
20284
|
+
return t("\u8FDC\u7A0B\u670D\u52A1\u5DF2\u4FEE\u590D\uFF0C\u6B63\u5728\u8FDE\u63A5", "Remote service repaired; connecting");
|
|
20285
|
+
}
|
|
20286
|
+
);
|
|
20287
|
+
break;
|
|
20288
|
+
case "update": {
|
|
20289
|
+
const target = row.remote ? remoteMaintenanceTarget(local, row.remote) : null;
|
|
20290
|
+
if (!target) break;
|
|
20291
|
+
const restart = target === row.remote?.installedVersion;
|
|
20292
|
+
void act(
|
|
20293
|
+
row,
|
|
20294
|
+
action,
|
|
20295
|
+
restart ? t("\u6B63\u5728\u91CD\u542F\u8FDC\u7A0B\u670D\u52A1\u2026", "Restarting remote service\u2026") : t("\u6B63\u5728\u63D0\u4EA4\u66F4\u65B0\u2026", "Starting update\u2026"),
|
|
20296
|
+
async () => {
|
|
20297
|
+
await control.update(hostId, target);
|
|
20298
|
+
await setConnected(true);
|
|
20299
|
+
}
|
|
20300
|
+
);
|
|
20301
|
+
break;
|
|
20302
|
+
}
|
|
20303
|
+
}
|
|
20304
|
+
}
|
|
20305
|
+
const reload = () => {
|
|
20306
|
+
if (refreshButton.getAttribute("aria-busy") === "true") return;
|
|
20307
|
+
refreshButton.setAttribute("aria-busy", "true");
|
|
20308
|
+
installations.clear();
|
|
20309
|
+
inspectFailures.clear();
|
|
20310
|
+
void refresh(void 0, "all").finally(() => refreshButton.removeAttribute("aria-busy"));
|
|
20311
|
+
};
|
|
20312
|
+
refreshButton.addEventListener("click", reload);
|
|
20313
|
+
retry.addEventListener("click", reload);
|
|
20314
|
+
addButton.addEventListener("click", () => edit(null));
|
|
20315
|
+
render();
|
|
20316
|
+
void refresh();
|
|
20317
|
+
const timer = setInterval(() => {
|
|
20318
|
+
if (polling) return;
|
|
20319
|
+
polling = true;
|
|
20320
|
+
void refresh(void 0, "all").finally(() => {
|
|
20321
|
+
polling = false;
|
|
20322
|
+
});
|
|
20323
|
+
}, POLL_INTERVAL_MS);
|
|
20324
|
+
return () => clearInterval(timer);
|
|
20325
|
+
}
|
|
20326
|
+
});
|
|
20327
|
+
}
|
|
20328
|
+
|
|
20329
|
+
// src/assets/zcode-agent.svg
|
|
20330
|
+
var zcode_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30">%0A <path fill="%232D2D2D" stroke="%23FFFFFF" stroke-width="0.6317" stroke-miterlimit="10" d="M24.51,28.51H5.49c-2.21,0-4-1.79-4-4V5.49c0-2.21,1.79-4,4-4h19.03c2.21,0,4,1.79,4,4v19.03C28.51,26.72,26.72,28.51,24.51,28.51z"/>%0A <g fill="%23FFFFFF">%0A <path d="M15.47,7.1l-1.3,1.85c-0.2,0.29-0.54,0.47-0.9,0.47h-7.1V7.09C6.16,7.1,15.47,7.1,15.47,7.1z"/>%0A <polygon points="24.3,7.1 13.14,22.91 5.7,22.91 16.86,7.1"/>%0A <path d="M14.53,22.91l1.31-1.86c0.2-0.29,0.54-0.47,0.9-0.47h7.09v2.33H14.53z"/>%0A </g>%0A</svg>%0A';
|
|
20331
|
+
|
|
20332
|
+
// src/assets/kimi-agent.svg
|
|
20333
|
+
var kimi_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none">%0A <rect width="40" height="40" rx="10" fill="%23000000"/>%0A <path d="M31.6957 7.11414C32.8305 7.11414 33.7505 8.0341 33.7505 9.16893V9.16893C33.7505 10.3038 32.8305 11.2237 31.6957 11.2237L29.8826 11.2237C29.7491 11.2237 29.6409 11.1155 29.6409 10.982L29.6409 9.16893C29.6409 8.0341 30.5609 7.11414 31.6957 7.11414Z" fill="%231783FF"/>%0A <path d="M20.1757 19.0798L27.9302 11.3864C28.0761 11.2413 27.9939 10.9498 27.8056 10.9498H23.633C23.5877 10.9498 23.5438 10.9683 23.5084 11.0038L15.1533 19.2911C15.023 19.4192 14.8304 19.305 14.8304 19.0998V11.1951C14.8304 11.0593 14.7411 10.9498 14.6321 10.9498H11.7569C11.6478 10.9498 11.5586 11.0593 11.5586 11.1951V28.2387C11.5586 28.3745 11.6478 28.484 11.7569 28.484H14.6321C14.7411 28.484 14.8304 28.3745 14.8304 28.2387V24.7661C14.8304 24.6921 14.8573 24.6211 14.904 24.5748L17.4945 22.0047C17.5568 21.943 17.6432 21.9337 17.7126 21.98L24.6414 27.0786C25.7759 27.8423 27.0436 28.3112 28.331 28.4501C28.4458 28.4624 28.5449 28.3483 28.5449 28.2048V24.9343C28.5449 24.8093 28.4698 24.7075 28.3693 24.6921C27.6115 24.5733 26.8722 24.2802 26.2037 23.8297L20.2054 19.487C20.0808 19.4037 20.0652 19.1893 20.1757 19.0798Z" fill="%23FFFFFF"/>%0A</svg>%0A';
|
|
20334
|
+
|
|
20335
|
+
// src/assets/codex-agent.png
|
|
20336
|
+
var codex_agent_default = "data:image/png;base64,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";
|
|
20337
|
+
|
|
20338
|
+
// src/assets/grok-agent.png
|
|
20339
|
+
var grok_agent_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAEk9JREFUeNrtnQdsHEUXx5fee40xnQiQ6b23IAiJAWHACV10AQHRRG8GDJgSOggEGAEBg6gGhAIBQknoppjeezGE3kybb3+je6f1fVdm93Z2Zy870iPmfN67mffmzSv/98bzLIxZZpml2ad2n7p86vWp36cBnwZ9UjlVpcHCWvUX1q6rsJbNnsvD/4ItPnX41Jcz0Rr1Fda4xSXGt/k0MWdO4sSat6XJ+FafpuaMSJ3gQWuSjG/yaUK+8M4RPGmyzfyxPk3LF9tZgjdjbTG/M1/gzFBn3Mzvzhc1c9QdF/N78sXMLPXkO386o5lnnllT3ZogP/OzRzPNNJOac8451bBhw0qFoDOKtZ8vasZ2Pv/uuOOOaoklltDCUPKesWH8/NzVyxjzfdapcePGqa222kr/XMFFbDIRgDzIkzGC4Yceeqg6/fTTKzG/GCwyCe/mi5ox5u+3337q4YcfVvPNN1851V9KrdUEII/tZ4z5e++9t/rmm2/UeuutV2v3F3MH1bJ6+cJmiPnt7e3q77//VieccIIp84XayglAntLNEPO33XZb9dtvv2nVP9tss5mo/iGp5HJgjnxxM8L8TTbZRKv9adOmqVVWWSXs7hdqCQpAR7642WD+hhtuqD777DPFOProo6MyH+oICkAO48oY8ydNmqTmmmuusKp/CLwsCOCcbgImLBg044wz6kUtpRlmmKH4npJwaqrMX3PNNdXHH3+smf/zzz+HsfqrUbNXQJw2dIQsyFx2zSKLLKKWWWYZtfrqq+uFFFpttdXUsssuqxZeeGE199xz6/cH/z4NgeBzV1hhBfX2228rGeecc04czIfavQLsuKESIsIwmI2RNGbMGHX++eere++9V73wwgvq888/Vz/88IP69ddf1e+//16kX375Rb+Omn3xxRf1+y+44AK1++67q1VXXVU/T55dh+oNxfyll15avfzyy0XmIwiLLbaY1mAxfEaXV8CeN8QZCS244IJq9OjR6tJLL1V9fX2aqeXGf//9p+nff/8tkrxWbvCcV155RV1++eVq1KhR+nPkM23NZ6mlllLPPfec/nz5fvvvv3+cn9nrFQoQMq3iUdXrrLOOuuiii9S77747hIn8/M8//9RNpc9855139Oet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";
|
|
20340
|
+
|
|
20341
|
+
// src/assets/hermes-agent.png
|
|
20342
|
+
var hermes_agent_default = "data:image/png;base64,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";
|
|
20343
|
+
|
|
20344
|
+
// src/assets/antigravity-agent.svg
|
|
20345
|
+
var antigravity_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -1 28 28"><path d="M21.751 22.607c1.34 1.005 3.35.335 1.508-1.508C17.73 15.74 18.904 1 12.037 1 5.17 1 6.342 15.74.815 21.1c-2.01 2.009.167 2.511 1.507 1.506 5.192-3.517 4.857-9.714 9.715-9.714 4.857 0 4.522 6.197 9.714 9.715z" fill="url(%23ag)"/><defs><linearGradient id="ag" x1="2" y1="12" x2="22" y2="12" gradientUnits="userSpaceOnUse"><stop stop-color="%234285F4"/><stop offset=".33" stop-color="%23EA4335"/><stop offset=".66" stop-color="%23FBBC04"/><stop offset="1" stop-color="%2334A853"/></linearGradient></defs></svg>%0A';
|
|
20346
|
+
|
|
20347
|
+
// src/assets/kiro-agent.svg
|
|
20348
|
+
var kiro_agent_default = 'data:image/svg+xml,<svg width="1200" height="1200" viewBox="0 0 1200 1200" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<rect width="1200" height="1200" rx="260" fill="%239046FF"/>%0A<mask id="mask0_1106_4856" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="272" y="202" width="655" height="796">%0A<path d="M926.578 202.793H272.637V997.857H926.578V202.793Z" fill="white"/>%0A</mask>%0A<g mask="url(%23mask0_1106_4856)">%0A<path d="M398.554 818.914C316.315 1001.03 491.477 1046.74 620.672 940.156C658.687 1059.66 801.052 970.473 852.234 877.795C964.787 673.567 919.318 465.357 907.64 422.374C827.637 129.443 427.623 128.946 358.8 423.865C342.651 475.544 342.402 534.18 333.458 595.051C328.986 625.86 325.507 645.488 313.83 677.785C306.873 696.424 297.68 712.819 282.773 740.645C259.915 783.881 269.604 867.113 387.87 823.883L399.051 818.914H398.554Z" fill="white"/>%0A<path d="M636.123 549.353C603.328 549.353 598.359 510.097 598.359 486.742C598.359 465.623 602.086 448.977 609.293 438.293C615.504 428.852 624.697 424.131 636.123 424.131C647.555 424.131 657.492 428.852 664.447 438.541C672.398 449.474 676.623 466.12 676.623 486.742C676.623 525.998 661.471 549.353 636.375 549.353H636.123Z" fill="black"/>%0A<path d="M771.24 549.353C738.445 549.353 733.477 510.097 733.477 486.742C733.477 465.623 737.203 448.977 744.41 438.293C750.621 428.852 759.814 424.131 771.24 424.131C782.672 424.131 792.609 428.852 799.564 438.541C807.516 449.474 811.74 466.12 811.74 486.742C811.74 525.998 796.588 549.353 771.492 549.353H771.24Z" fill="black"/>%0A</g>%0A</svg>%0A';
|
|
20349
|
+
|
|
20350
|
+
// src/assets/codebuddy-agent.svg
|
|
20351
|
+
var codebuddy_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none"><g clip-path="url(%23clip0_4958_10776)"><rect x="-0.00146484" width="40" height="40" rx="8.63158" fill="%236C4DFF"></rect><path d="M30.5918 3.12856C30.984 2.77679 31.0078 2.7632 31.2955 2.74593C31.7615 2.71193 32.1882 2.93586 32.9147 3.59728C34.6119 5.13959 36.9755 8.30995 38.4449 11.0177L39.0125 12.0691L39.8143 12.4677C40.5885 12.8589 41.8587 13.6611 42.389 14.0913C42.6286 14.2894 42.6626 14.2934 42.912 14.1964C44.0375 13.7583 45.6494 14.3393 47.0714 15.7033C48.3516 16.9303 49.5781 19.0269 50.0478 20.7767C50.1164 21.0582 50.2074 21.6636 50.2405 22.1144C50.3477 23.6973 49.84 24.9617 48.8624 25.5341C48.6628 25.6493 48.6492 25.6807 48.6548 26.1783C48.6998 28.5492 48.0606 30.9165 46.7768 33.2244C45.3276 35.8156 42.7467 38.496 39.2544 41.0214C37.3789 42.3862 32.9421 44.9717 30.9361 45.8792C26.1304 48.0428 22.278 48.8718 18.9316 48.4618C16.9356 48.22 14.6761 47.4417 13.3392 46.5373C12.9873 46.294 12.9318 46.2791 12.6629 46.3561C11.2318 46.7671 9.35752 45.9219 7.76528 44.1544C7.13027 43.448 6.10508 41.7136 5.77273 40.7853C5.00409 38.6128 5.15721 36.6516 6.18105 35.4808C6.44522 35.1797 6.4538 35.1667 6.39603 34.6598C6.30065 33.8298 6.25703 32.6017 6.30061 31.809L6.33535 31.0683L5.22371 29.1019C3.50212 26.0386 2.40857 23.4663 1.98661 21.501C1.76389 20.4233 1.77734 19.9446 2.05091 19.5908C2.21741 19.3773 2.76347 19.1568 3.42155 19.0352C5.07869 18.7442 8.69327 19.0065 12.7142 19.7165L13.1316 19.789L14.0497 18.977C15.5733 17.6274 16.5858 16.8705 18.4518 15.707C20.3967 14.4901 22.5922 13.4895 25.064 12.6968L25.8564 12.4423L26.2926 11.2974C27.8535 7.17701 29.452 4.13917 30.5918 3.12856ZM17.5169 24.2439C15.7528 25.2625 14.8705 25.7716 14.2223 26.3423C11.5975 28.6536 10.6172 32.3151 11.7346 35.6292C12.0106 36.4475 12.5193 37.3301 13.5378 39.0941C14.5563 40.8582 15.0662 41.7401 15.637 42.3882C17.9483 45.0128 21.6091 45.9938 24.923 44.8764C25.7414 44.6004 26.6233 44.0909 28.3875 43.0724L38.5362 37.213C40.3004 36.1945 41.1826 35.6854 41.8308 35.1147C44.4555 32.8034 45.4363 29.1426 44.319 25.8286C44.043 25.0103 43.5343 24.1277 42.5158 22.3637C41.4974 20.5997 40.9873 19.7177 40.4166 19.0696C38.1053 16.4448 34.4441 15.4631 31.1301 16.5806C30.3118 16.8565 29.4297 17.3661 27.6656 18.3846L17.5169 24.2439Z" fill="white"></path><rect x="18.4944" y="31.334" width="4.00904" height="8.32646" rx="2.00452" transform="rotate(-30 18.4944 31.334)" fill="white"></rect><rect x="29.311" y="25.0898" width="4.00904" height="8.32646" rx="2.00452" transform="rotate(-30 29.311 25.0898)" fill="white"></rect></g><defs><clipPath id="clip0_4958_10776"><rect x="-0.00146484" width="40" height="40" rx="8.63158" fill="white"></rect></clipPath></defs></svg>';
|
|
20352
|
+
|
|
20353
|
+
// src/assets/workbuddy-agent.svg
|
|
20354
|
+
var workbuddy_agent_default = 'data:image/svg+xml,<svg width="130" height="130" viewBox="0 0 130 130" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<g clip-path="url(%23clip0_283_481)">%0A<rect width="130" height="130" rx="28.0526" fill="url(%23paint0_linear_283_481)"/>%0A<g filter="url(%23filter0_f_283_481)">%0A<circle cx="108.36" cy="141.759" r="41.8289" fill="%23FFE355" fill-opacity="0.49" style="fill:%23FFE355;fill:color(display-p3 1.0000 0.8891 0.3348);fill-opacity:0.49;"/>%0A</g>%0A<path fill-rule="evenodd" clip-rule="evenodd" d="M99.4282 10.1638C100.703 9.02064 100.78 8.97669 101.714 8.92058C103.229 8.80992 104.616 9.53654 106.977 11.6861C112.493 16.6987 120.175 27.0043 124.95 35.8049L126.795 39.2201L129.401 40.5162C131.917 41.7875 136.044 44.394 137.767 45.7919C138.547 46.4365 138.657 46.4497 139.467 46.1344C143.125 44.7098 148.365 46.5984 152.987 51.0325C157.148 55.0201 161.133 61.833 162.659 67.5195C162.882 68.4346 163.178 70.4028 163.286 71.8681C163.634 77.013 161.984 81.1226 158.806 82.9826C158.158 83.3572 158.115 83.4591 158.133 85.0776C158.279 92.7829 156.202 100.474 152.03 107.974C147.32 116.396 138.933 125.107 127.583 133.315C121.488 137.751 107.067 146.153 100.547 149.102C84.9287 156.134 72.4081 158.831 61.5321 157.498C55.0448 156.712 47.7017 154.18 43.357 151.241C42.2133 150.45 42.0324 150.402 41.1585 150.652C36.5074 151.988 30.4158 149.242 25.241 143.498C23.177 141.202 19.8464 135.564 18.7664 132.547C16.2684 125.487 16.7648 119.115 20.0922 115.31C20.952 114.33 20.9796 114.289 20.7918 112.641C20.4817 109.943 20.3406 105.951 20.4823 103.375L20.5947 100.968L16.9813 94.5763C11.3858 84.6202 7.8314 76.2603 6.46025 69.8729C5.7364 66.3704 5.78144 64.8166 6.67051 63.6668C7.21161 62.9725 8.98625 62.2531 11.1257 61.858C16.5115 60.9125 28.2577 61.7685 41.3255 64.0757L42.6832 64.3101L45.6662 61.6722C50.6181 57.2859 53.9074 54.8262 59.9722 51.0446C66.2933 47.0897 73.4271 43.8362 81.4607 41.26L84.0384 40.4337L85.4554 36.7142C90.5286 23.3221 95.7238 13.4483 99.4282 10.1638ZM56.9346 78.7893C51.2012 82.0995 48.3345 83.7553 46.228 85.6101C37.6975 93.1218 34.5094 105.02 38.1411 115.791C39.038 118.45 40.6927 121.318 44.0029 127.051C47.3132 132.785 48.9688 135.651 50.8238 137.758C58.3355 146.288 70.2338 149.476 81.0044 145.845C83.664 144.948 86.5308 143.292 92.2642 139.982L125.248 120.939C130.981 117.629 133.848 115.974 135.955 114.119C144.485 106.607 147.673 94.7089 144.042 83.9384C143.145 81.2787 141.489 78.412 138.179 72.6785C134.869 66.9451 133.214 64.078 131.359 61.9714C123.847 53.4409 111.949 50.2528 101.178 53.8845C98.5186 54.7814 95.6515 56.4361 89.918 59.7463L56.9346 78.7893Z" fill="url(%23paint1_linear_283_481)"/>%0A<rect x="60.1133" y="101.836" width="13.0294" height="27.061" rx="6.51468" transform="rotate(-30 60.1133 101.836)" fill="white" style="fill:white;fill-opacity:1;"/>%0A<rect x="95.2666" y="81.54" width="13.0294" height="27.061" rx="6.51468" transform="rotate(-30 95.2666 81.54)" fill="white" style="fill:white;fill-opacity:1;"/>%0A</g>%0A<defs>%0A<filter id="filter0_f_283_481" x="30.78" y="64.179" width="155.161" height="155.16" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">%0A<feFlood flood-opacity="0" result="BackgroundImageFix"/>%0A<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>%0A<feGaussianBlur stdDeviation="17.8756" result="effect1_foregroundBlur_283_481"/>%0A</filter>%0A<linearGradient id="paint0_linear_283_481" x1="65" y1="0" x2="65" y2="130" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%230EC8A9" style="stop-color:%230EC8A9;stop-color:color(display-p3 0.0565 0.7837 0.6625);stop-opacity:1;"/>%0A<stop offset="1" stop-color="%2301C886" style="stop-color:%2301C886;stop-color:color(display-p3 0.0021 0.7858 0.5246);stop-opacity:1;"/>%0A</linearGradient>%0A<linearGradient id="paint1_linear_283_481" x1="54.1591" y1="36.0036" x2="114.973" y2="141.337" gradientUnits="userSpaceOnUse">%0A<stop stop-color="white" stop-opacity="0.8" style="stop-color:white;stop-opacity:0.8;"/>%0A<stop offset="0.437689" stop-color="white" style="stop-color:white;stop-opacity:1;"/>%0A</linearGradient>%0A<clipPath id="clip0_283_481">%0A<rect width="130" height="130" rx="28.0526" fill="white" style="fill:white;fill-opacity:1;"/>%0A</clipPath>%0A</defs>%0A</svg>%0A';
|
|
20355
|
+
|
|
20356
|
+
// src/assets/cursor-agent.svg
|
|
20357
|
+
var cursor_agent_default = 'data:image/svg+xml,<svg fill="none" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m512 325.5c0 7.124 0 14.24-.041 21.364-.034 5.999-.103 11.998-.268 17.99-.356 13.068-1.124 26.245-3.448 39.169-2.359 13.109-6.205 25.306-12.266 37.222-5.958 11.703-13.746 22.419-23.029 31.709-9.29 9.29-20 17.072-31.71 23.03-11.909 6.061-24.113 9.907-37.222 12.266-12.923 2.324-26.101 3.092-39.169 3.448-5.999.165-11.991.233-17.99.268-7.123.048-14.24.041-21.364.041h-139c-7.124 0-14.24 0-21.364-.041-5.999-.035-11.998-.103-17.99-.268-13.068-.356-26.245-1.124-39.169-3.448-13.109-2.359-25.306-6.205-37.2219-12.266-11.7033-5.958-22.4194-13.746-31.7095-23.03-9.29-9.29-17.0717-19.999-23.0296-31.709-6.0608-11.909-9.90707-24.113-12.26557-37.222-2.32422-12.924-3.0921-26.101-3.448618-39.169-.164546-5.999-.2331071-11.991-.2673876-17.99-.0274244-7.124-.0274244-14.24-.0274244-21.364v-139c0-7.124 0-14.24.0411366-21.364.0342805-5.999.1028414-11.998.2673884-17.99.356517-13.068 1.124405-26.245 3.448615-39.169 2.3585-13.1091 6.20478-25.3061 12.26556-37.222 5.958-11.7034 13.7465-22.4195 23.0297-31.7095 9.29-9.29 19.9992-17.0717 31.7094-23.0296 11.9091-6.06084 24.1129-9.90711 37.2222-12.26561 12.923-2.32422 26.101-3.092104 39.169-3.448622 5.999-.164546 11.991-.233107 17.99-.2673875 7.117-.0342805 14.233-.0342805 21.357-.0342805h139c7.124 0 14.24 0 21.364.0411366 5.999.0342805 11.998.1028414 17.99.2673884 13.068.356517 26.245 1.124405 39.169 3.448615 13.109 2.3585 25.306 6.20478 37.222 12.26556 11.703 5.958 22.419 13.7465 31.709 23.0297 9.29 9.29 17.072 19.9992 23.03 31.7094 6.061 11.9091 9.907 24.1129 12.266 37.2222 2.324 12.923 3.092 26.101 3.448 39.169.165 5.999.233 11.991.268 17.99.048 7.123.041 14.24.041 21.364v139z" fill="%2314120b"/><path d="m186.5 4h139c7.125 0 14.231-.00004 21.341.04102 5.985.0342 11.952.10221 17.903.26562h.001c13.003.35475 25.943 1.11709 38.569 3.3877 12.775 2.29827 24.592 6.03146 36.118 11.89356v-.001c10.974 5.5867 21.052 12.8384 29.848 21.457l.847.8379c8.993 8.993 16.525 19.3594 22.292 30.6934v.001c5.678 11.1575 9.36 22.6023 11.674 34.9208l.219 1.195c2.129 11.837 2.932 23.95 3.316 36.132l.072 2.438c.164 5.958.232 11.919.266 17.904v.004c.048 7.107.041 14.207.041 21.337v129.344l-.007-.007v9.656c0 7.125 0 14.231-.041 21.341-.034 5.985-.102 11.952-.266 17.903v.001c-.354 13.003-1.117 25.943-3.387 38.569-2.227 12.376-5.8 23.853-11.351 35.037l-.543 1.08c-5.766 11.327-13.306 21.701-22.293 30.695-8.993 8.993-19.361 16.526-30.695 22.293-11.518 5.861-23.342 9.595-36.116 11.893-11.837 2.129-23.95 2.932-36.132 3.316l-2.438.072c-5.958.164-11.919.232-17.904.266h-.004c-7.107.048-14.207.041-21.337.041h-139c-7.125 0-14.231 0-21.341-.041-5.985-.034-11.952-.102-17.903-.266h-.001c-13.003-.355-25.944-1.117-38.57-3.388-12.7742-2.298-24.5914-6.031-36.1165-11.893h.001c-10.974-5.587-21.0534-12.837-29.8496-21.456l-.8467-.838c-8.7118-8.712-16.0531-18.713-21.7461-29.634l-.5459-1.06-.5439-1.081c-5.371-10.816-8.8905-21.919-11.12991-33.84l-.21973-1.196c-2.27061-12.626-3.03294-25.566-3.38769-38.569v-.001c-.16341-5.958-.23142-11.918-.26563-17.903-.02736-7.112-.02734-14.219-.02734-21.341v-139c0-7.125-.00004-14.231.04102-21.341.0342-5.985.10221-11.952.26562-17.903v-.001c.35476-13.003 1.117-25.944 3.3877-38.57 2.29828-12.7744 6.03156-24.5916 11.89356-36.1166l-.001-.001c5.7666-11.327 13.3073-21.6999 22.294-30.6934 8.9933-8.9933 19.3607-16.5261 30.6953-22.2929 11.5173-5.8615 23.3406-9.59619 36.1148-11.89458 11.837-2.12877 23.951-2.93016 36.133-3.31445l2.438-.07227c5.958-.16342 11.919-.23142 17.904-.26562l-.001-.00098c7.104-.03421 14.211-.0332 21.335-.0332z" stroke="%23edecec" stroke-opacity=".2" stroke-width="8"/><path d="m415.035 156.35-151.503-87.4695c-4.865-2.8094-10.868-2.8094-15.733 0l-151.4969 87.4695c-4.0897 2.362-6.6146 6.729-6.6146 11.459v176.383c0 4.73 2.5249 9.097 6.6146 11.458l151.5039 87.47c4.865 2.809 10.868 2.809 15.733 0l151.504-87.47c4.089-2.361 6.614-6.728 6.614-11.458v-176.383c0-4.73-2.525-9.097-6.614-11.459zm-9.516 18.528-146.255 253.32c-.988 1.707-3.599 1.01-3.599-.967v-165.872c0-3.314-1.771-6.379-4.644-8.044l-143.645-82.932c-1.707-.988-1.01-3.599.968-3.599h292.509c4.154 0 6.75 4.503 4.673 8.101h-.007z" fill="%23edecec"/></svg>';
|
|
20358
|
+
|
|
20359
|
+
// src/assets/omp-agent.svg
|
|
20360
|
+
var omp_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">%0A <defs>%0A <linearGradient id="omp-gradient" x1="0" y1="0" x2="1" y2="1">%0A <stop offset="0" stop-color="%23ed4abf" />%0A <stop offset=".5" stop-color="%239b4dff" />%0A <stop offset="1" stop-color="%235ad8e6" />%0A </linearGradient>%0A </defs>%0A <path%0A fill="url(%23omp-gradient)"%0A transform="translate(-14.4 -20.2) scale(1.45)"%0A d="M14 16h36v8H40v32h-8V24h-6v22h-8V24h-4z"%0A />%0A</svg>%0A';
|
|
20361
|
+
|
|
20362
|
+
// src/assets/opencode-agent.png
|
|
20363
|
+
var opencode_agent_default = "data:image/png;base64,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";
|
|
20364
|
+
|
|
20365
|
+
// src/assets/qoder-agent.svg
|
|
20366
|
+
var qoder_agent_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="206" height="206" fill="none" viewBox="0 0 206 206"><rect width="206" height="206" fill="%23f3f3f3" rx="52"/><path fill="%230f0d0c" fill-rule="evenodd" d="M104.003 35.836q.178.08.305.145.4.2.629.321l49.944 26.33.019.01q.139.073.273.155 8.37 4.521 12.99 13.05 4.587 8.466 4.587 19.301v22.489q0 .238-.022.474v40.14q0 7.99-6.72 12.312-6.719 4.323-13.987 1.01l-8.542-3.891-.03.017-.17.097-.12.071q-.849.502-1.319.758-.077.043-.308.165l-.106.056-.252.133q-.622.337-1.213.631l-.619.301-.15.071a79 79 0 0 1-1.167.542l-.773.336q-.387.17-1.115.46l-.135.054-.11.046-.167.068a13 13 0 0 1-.588.228q-.398.146-1.256.444l-.002.001-.164.058q-.249.091-.55.188-.89.294-2.014.605l-3.505.961q-.975.27-1.813.459l-.396.083-.398.081q-.564.12-.9.186a11 11 0 0 1-.52.092l-.509.082-.066.011q-.472.08-.74.118-.189.029-.577.074l-.396.05-.657.076q-.221.025-.494.045l-.114.011-.051.004a42 42 0 0 1-1.407.098l.037-.004q-.223.02-.447.02h-.061q-.6.028-1.016.028h-.666l-.111-.001-.222-.003a24 24 0 0 1-1.27-.049l-.028-.002-.17-.006-.381-.019q-.092-.005-.185-.013l-.7-.062q-.66-.063-1.264-.142l-.199-.024q-.065-.007-.129-.017a50 50 0 0 1-1.393-.228l-.502-.094-.03-.006a12 12 0 0 1-.601-.123l-.046-.011-.066-.015-.121-.028a31 31 0 0 1-1.381-.343l-.027-.007a10 10 0 0 1-.428-.113h-.001a31 31 0 0 1-1.737-.547 5 5 0 0 1-.459-.168l-.12-.046a39 39 0 0 1-1.209-.472 11 11 0 0 1-.333-.144l-.087-.038-.171-.074a29 29 0 0 1-1.098-.502l-.08-.038-.015-.007a6 6 0 0 1-.251-.12q-.104-.052-.209-.107l-.062-.032a5 5 0 0 1-.357-.17l-.003-.001-49.452-26.07a5 5 0 0 1-.972-.517 31 31 0 0 1-6.12-4.384l-.003-.003-.011-.011-.045-.04a32 32 0 0 1-2.374-2.438l-.022-.026-.005-.006a36 36 0 0 1-1.448-1.788q-7.307-9.666-7.307-23.449V90.495q0-.996.043-2.303a20 20 0 0 1 .06-.904q.05-.84.119-1.563a19 19 0 0 1 .11-.975l.035-.301q.083-.72.14-1.117a57 57 0 0 1 .167-1.031l.038-.234q.115-.71.192-1.108v-.005l-.003.017q.023-.15.044-.258a49 49 0 0 1 .389-1.818q.18-.803.45-1.817.051-.2.132-.493l.023-.08a75 75 0 0 1 .604-2.032q.047-.15.12-.356l.012-.032q.359-1.105.677-1.972a35 35 0 0 1 .313-.821l.08-.21q.333-.864.526-1.323l-.004.007q.056-.147.107-.266a16 16 0 0 1 .31-.713q.327-.75.5-1.132a55 55 0 0 1 .668-1.404q.244-.502.382-.772l.032-.065q.075-.157.136-.278a15 15 0 0 1 .36-.676l.137-.257a58 58 0 0 1 .995-1.79 30 30 0 0 1 .642-1.095l-.004.005.007-.011-.007.011q.078-.137.131-.227.155-.257.429-.682.27-.44.588-.93.231-.356.671-1.004l.314-.456.297-.43.063-.09v-.002q.12-.18.211-.306.09-.128.296-.403l.13-.174q.471-.645.726-.979l.357-.456.331-.424a36 36 0 0 1 .837-1.05 17 17 0 0 1 .63-.75l.327-.378q.358-.417.556-.64l.696-.767a74 74 0 0 1 1.015-1.086l.011-.015a11 11 0 0 1 .54-.555l.104-.102a78 78 0 0 1 1.898-1.84 50 50 0 0 1 1.59-1.424l-.011.008q.148-.137.256-.232a5 5 0 0 1 .275-.223l.027-.02.017-.014a77 77 0 0 1 1.496-1.217q.303-.24.475-.37a83 83 0 0 1 1.224-.92q.126-.088.424-.306.585-.423 1.403-.976l-.002.001.045-.032a13 13 0 0 1 .466-.315q.992-.647 1.703-1.075.141-.088.456-.268l.103-.061a47 47 0 0 1 1.32-.758l.632-.337.033-.017q.623-.336 1.213-.631.273-.136.774-.374.509-.243 1.163-.539l.415-.182.358-.155q.448-.193 1.248-.514l.225-.088q.365-.143.565-.218a88 88 0 0 1 1.515-.536q.339-.12.556-.19.924-.302 1.993-.6l3.509-.96a37 37 0 0 1 1.807-.46q.248-.057.627-.133.482-.11 1.1-.228a17 17 0 0 1 .743-.126l.298-.05a33 33 0 0 1 .862-.135l.33-.04.331-.04.248-.032q.424-.054.664-.08.165-.016.33-.023l.324-.024q.695-.06 1.128-.081.21-.013.655-.026h.016l.336-.01a23 23 0 0 1 1.147-.017l.185.001.314.005a26 26 0 0 1 1.376.048l.23.013.344.018q.18.01.524.046l.306.027q.609.058 1.245.14l.014.002h.001q.165.018.29.036.642.086 1.428.228.098.018.194.04l.003-.001.303.059q.336.06.554.11.115.024.294.073l.072.016q.328.073.682.162.293.073.6.157l-.004-.002.033.008q.165.04.304.078l.045.013q.09.024.168.049l.012.003a31 31 0 0 1 1.731.553q.2.067.444.166.697.252 1.267.491l.148.064.459.2q.515.23 1.045.485zm-2.971-1.263h-.002q.004 0 .008.002zm3.871 127.988.763.402q.077.042.269.139l.09.046q.1.045.12.057l.136.064q.41.198.771.353l.011.005q.127.053.317.138l.072.032q.341.141.956.372l.05.02.183.068.014.006q.599.21 1.264.398l-.084-.018q.104.023.206.05l.208.054q.52.14 1.057.261l.073.017.072.016.113.026.108.019.031.006.436.082q.536.095 1.052.173l.2.025q.44.057.878.098l.611.055.186.01.376.016.028.002q.261.017.429.023.098.004.368.008l.239.003h.615q.208 0 .643-.021a4 4 0 0 1 .251-.007h.022l.137-.007-.018.003.178-.013q.25-.012.835-.061l.156-.014.154-.012.07-.006.539-.061.504-.064q.204-.024.312-.04a20 20 0 0 0 .618-.099l.402-.066.199-.032-.009.004q.057-.013.116-.024.252-.048.838-.172l.33-.067.255-.053q.608-.138 1.377-.35l3.477-.953a37 37 0 0 0 1.655-.499l.104-.034.127-.047.239-.084h.002q.78-.27 1.191-.421l.146-.059.135-.055.22-.091.141-.056q.579-.231.832-.342l.639-.278q.57-.257.997-.461l.089-.042.509-.247q.458-.228 1.02-.532l.158-.083.218-.116q.096-.049.178-.095.317-.174 1.018-.587l.207-.122.128-.074h.001q.124-.073.226-.13a39 39 0 0 0 1.26-.793l.358-.245a4.95 4.95 0 0 1 4.843-.416l10.977 5.001q2.352 1.073 4.527-.327t2.176-3.986v-40.637q0-.237.022-.474V95.148q0-17.112-12.596-23.755l-.295-.156-.163-.079-.176-.086a19 19 0 0 0-.767-.354q-.265-.12-.385-.168-.35-.148-.871-.337l-.182-.067-.102-.04q-.56-.194-1.217-.383l-.097-.026-.222-.058a38 38 0 0 0-1.026-.253l-.122-.026a31 31 0 0 0-.681-.144l-.118-.023a25 25 0 0 0-1.016-.163 6 6 0 0 1-.225-.027 29 29 0 0 0-.873-.1h-.006l-.327-.03a37 37 0 0 0-1.369-.078q-.12-.008-.523-.008h-.509a44 44 0 0 0-1.116.038l-.18.007q-.256.013-.859.063l-.046.004-.204.014-.135.01a20 20 0 0 0-.454.053 35 35 0 0 1-.636.075l-.206.025q-.145.022-.496.082l-.612.1q-.197.03-.279.046-.171.032-.602.125l-.237.051a22 22 0 0 1-.524.112q-.735.168-1.382.346l-3.476.953a36 36 0 0 0-1.54.46l-.291.102-.355.122a27 27 0 0 0-1.659.61q-.613.242-.941.383l-.648.284-.42.193V91.28q0 1.152-.056 2.307-.01.223-.037.576l-.001.004-.019.28-.001.026a43 43 0 0 1-.113 1.478 25 25 0 0 1-.076.68l-.052.433-.03.249a32 32 0 0 1-.234 1.677l-.056.354v.002q-.138.833-.221 1.265-.19.999-.399 1.935l-.027.11a45 45 0 0 1-.46 1.83l-.141.512a62 62 0 0 1-.542 1.831l-.151.467a54 54 0 0 1-.663 1.928 19 19 0 0 1-.2.526l-.017.042.004-.01-.112.295-.073.188q-.326.841-.495 1.251a27 27 0 0 1-.354.834l-.063.152q-.269.631-.492 1.106-.124.28-.359.772l-.135.283-.098.204a46 46 0 0 1-.971 1.916l-.314.587-.216.397q-.188.339-.563.993l-.076.132a32 32 0 0 1-.507.856q-.284.475-.6.969l-.084.133a42 42 0 0 1-.965 1.488l-.22.327-.021.032-.58.845-.066.092-.58.805a53 53 0 0 1-1.41 1.856l-.212.268q-.316.401-.48.601-.234.29-.674.806l-.04.046-.005.005q-.386.461-.854.988-.237.266-.69.767a46.143 46.143 0 0 1-1.393 1.477l-.219.223a55 55 0 0 1-1.216 1.193l-.18.174-.202.193-.258.247q-.778.722-1.567 1.402l-.099.086-.08.071-.08.072q-.067.06-.137.117l-.198.165a76 76 0 0 1-1.308 1.071l-.006.005q-.134.11-.339.266l-.147.113-.083.063a58 58 0 0 1-1.375 1.031q-.198.147-.307.225-.66.473-1.278.885l-.32.222-.103.07q-.884.584-1.833 1.157l-.009.005q.348 15.759 11.753 22.249zM85.109 152.14q-1.87-5.93-1.874-12.803v-22.492q0-1.2.056-2.394a20 20 0 0 1 .058-.825l.023-.336q.054-.795.098-1.255.019-.19.059-.524.029-.237.047-.42l.036-.309q.084-.721.145-1.146.06-.399.16-.987l.025-.153q.126-.756.202-1.176a50 50 0 0 1 .435-2.086l.011-.046a61 61 0 0 1 .594-2.337q.275-.996.552-1.867l.01-.028q.022-.074.045-.144.054-.17.132-.387l.006-.016q.387-1.18.662-1.928a36 36 0 0 1 .307-.805 52 52 0 0 1 1.037-2.544q.32-.736.5-1.132.162-.36.48-1.016l.003-.01q.271-.57.547-1.11.136-.273.4-.78l.138-.267a54 54 0 0 1 1.136-2.052l.267-.46.298-.51q.215-.36.604-.977.152-.248.443-.703l.177-.278q.228-.352.645-.965.386-.578.667-.969.323-.46.674-.931.465-.637.71-.958.275-.36.721-.922l.345-.434.39-.49q.232-.281.686-.819l.023-.028.204-.239a51 51 0 0 1 1.37-1.552q.31-.343.926-.994.368-.388.717-.737.525-.533 1.23-1.206.44-.428.662-.63a61 61 0 0 1 1.657-1.483l.013-.012.011-.01-.011.01a8 8 0 0 1 .61-.519q.738-.615 1.302-1.06.203-.159.561-.432.655-.507 1.155-.872l.542-.397q.627-.453 1.35-.938l.049-.034q.216-.15.395-.265a59 59 0 0 1 1.883-1.19q.193-.11.295-.171a50 50 0 0 1 1.797-1.02l.208-.11.148-.076a44 44 0 0 1 1.986-1.005q.645-.307 1.169-.545l.754-.331q.534-.23 1.292-.529.481-.192.76-.297.6-.228 1.397-.494l.247-.086.292-.1a49 49 0 0 1 2.128-.645l3.508-.961q.325-.09.667-.178L100.3 45.05a21 21 0 0 0-.393-.201l-.006-.003.007.004a10 10 0 0 1-.29-.137 28 28 0 0 0-1.186-.536l-.002-.001a16 16 0 0 0-.783-.3 7 7 0 0 1-.282-.107l-.036-.013a24 24 0 0 0-1.27-.405l-.086-.023q-.12-.03-.197-.05a19 19 0 0 0-.981-.242 6 6 0 0 1-.354-.085l-.111-.021-.36-.07h-.003l-.182-.035a23 23 0 0 0-.95-.152 9 9 0 0 1-.291-.035q-.405-.052-.83-.093l-.354-.032-.067-.007h-.004l-.103-.01-.207-.011-.344-.019a18 18 0 0 0-.918-.031l-.311-.005h-.146a8 8 0 0 0-.357 0q-.087 0-.354.01-.25.009-.403.012-.29.009-.396.015-.315.017-.895.066l-.284.021-.23.017-.033.003a39 39 0 0 0-.608.077l-.34.04-.262.032-.46.075a64 64 0 0 1-.811.134q-.489.094-.942.196-.327.066-.456.096-.654.149-1.381.351l-3.516.964q-.838.233-1.604.483-.09.03-.25.086l-.276.097q-.762.265-1.128.399l-.385.15-.207.08a44 44 0 0 0-.952.391l-.33.144-.358.156a58 58 0 0 0-.93.432l-.005.002q-.41.195-.594.287-.456.228-.983.512l-.034.018-.595.317a39 39 0 0 0-1.145.664q-.223.128-.268.156a50 50 0 0 0-1.574.997l-.056.04-.174.12a47 47 0 0 0-2.596 1.874q-.14.106-.374.291-.059.046-.088.07-.623.495-1.143.93-.09.079-.264.216a9 9 0 0 1-.21.188 43 43 0 0 0-1.92 1.752q-.45.432-1.045 1.027a22 22 0 0 1-.308.302l-.011.014a12 12 0 0 1-.269.287q-.51.543-.75.806l-.666.734q-.11.125-.411.474l-.466.54a13 13 0 0 0-.433.522q-.323.395-.572.72l-.357.457-.332.424q-.156.204-.557.754l-.206.277-.162.22-.03.045q-.094.14-.169.246l-.275.4-.297.43q-.362.534-.532.796a41 41 0 0 0-.556.88q-.205.317-.282.444l-.02.037q-.117.205-.217.365-.232.385-.415.714a55 55 0 0 0-.87 1.564l-.133.248a19 19 0 0 1-.221.408l-.068.134-.004.01q-.098.205-.173.349-.07.138-.276.563l-.17.348q-.266.552-.384.811a91 91 0 0 0-.435.988q-.044.103-.131.295a8 8 0 0 0-.142.329l-.002.006.008-.018q-.05.13-.087.219-.147.352-.425 1.075l-.086.222-.068.175q-.13.337-.184.482a46 46 0 0 0-.57 1.663l-.07.209a5 5 0 0 1-.098.3q-.155.493-.44 1.494l-.016.053a9 9 0 0 0-.095.36 38 38 0 0 0-.407 1.643l-.008.036q-.135.582-.274 1.29v.005l.003-.018q-.023.15-.044.257-.054.277-.145.844l-.047.283q-.09.54-.138.847-.032.225-.099.802l-.07.586a12 12 0 0 0-.047.422q-.06.62-.101 1.342l-.026.35q-.019.23-.023.307-.034 1.072-.034 1.906v22.489q0 10.089 4.938 16.98.183.257.372.507.45.599 1.037 1.278a22 22 0 0 0 1.648 1.689l.04.037a21.4 21.4 0 0 0 4.484 3.147l.03.015.051.027zm8.026-23.904q.47-.383.73-.601l.197-.164.014-.012.08-.071.173-.153q.705-.608 1.35-1.206l.146-.142.203-.193.15-.146a48 48 0 0 0 1.62-1.612 59 59 0 0 0 1.356-1.483 37 37 0 0 0 .788-.91l.019-.022a29 29 0 0 0 .899-1.097l.232-.293a40 40 0 0 0 1.143-1.505l.562-.78.022-.031.49-.716.002-.003.188-.28q.254-.377.359-.542.16-.245.432-.677l.088-.141a26 26 0 0 0 .564-.911q.104-.166.347-.589l.082-.143q.33-.574.485-.853l.171-.315.279-.523a41 41 0 0 0 .786-1.549l.104-.217.113-.238a37.223 37.223 0 0 0 .679-1.496l.016-.042.149-.347q.131-.303.181-.426.154-.374.439-1.112l.076-.194.081-.217.07-.178.082-.21q.297-.815.567-1.649l.156-.479q.189-.607.426-1.45l.122-.445q.199-.726.36-1.428l.053-.221q.135-.61.296-1.46.064-.33.177-1.021l.001-.002.046-.294.016-.1q.049-.3.065-.418a30 30 0 0 0 .134-1.055l.05-.421q.037-.296.049-.425.04-.385.089-1.179l.002-.027.024-.358.007-.092.015-.195q.047-.981.047-1.896V79.333l-.311.259-.116.094-.117.094-.003.003.012-.009a8 8 0 0 1-.256.227q-.683.59-1.382 1.24-.145.133-.507.483a50 50 0 0 0-3.576 3.782l-.197.231q-.412.488-.551.655l-.345.435-.341.428a53 53 0 0 0-.596.762q-.19.248-.608.82a43 43 0 0 0-1.103 1.563q-.38.56-.525.783l-.164.258q-.247.388-.385.61-.358.57-.484.778l-.267.46-.264.453a47 47 0 0 0-1.392 2.579q-.235.463-.466.947v.002q-.272.565-.387.817a85 85 0 0 0-.799 1.835q-.228.55-.508 1.289l-.066.171q-.13.338-.19.5-.225.614-.6 1.755l-.048.134-.003.001-.035.112-.05.159a40 40 0 0 0-.547 1.889 51 51 0 0 0-.407 1.643l-.004.014a39 39 0 0 0-.314 1.518q-.059.325-.173 1.015l-.028.171q-.088.512-.13.791-.036.254-.103.831l-.03.251q-.018.192-.059.525l-.035.301q-.028.303-.073.97l-.026.366-.022.287q-.018.23-.022.308-.046.959-.046 1.923z" clip-rule="evenodd"/><path stroke="%230f0d0c" stroke-width="3.5" d="m41.782 61.323.004-.005-.07.114q-.34.561-.572.98a55 55 0 0 0-1.133 2.048l-.075.138a15 15 0 0 0-.42.816l-.032.065q-.139.27-.382.772l-.178.365q-.32.665-.49 1.039a100 100 0 0 0-.57 1.289 16 16 0 0 0-.347.822l.004-.008a50 50 0 0 0-.606 1.534l-.06.156q-.17.435-.253.665a54 54 0 0 0-.677 1.972l-.012.032a10 10 0 0 0-.177.536 75 75 0 0 0-.547 1.851l-.023.08q-.081.293-.131.494a47 47 0 0 0-.492 1.99 49 49 0 0 0-.348 1.645q-.02.108-.044.258l.003-.017v.005q-.077.397-.192 1.108l-.038.234a57 57 0 0 0-.167 1.03 42 42 0 0 0-.175 1.419l-.024.19q-.066.536-.086.785a43 43 0 0 0-.118 1.563l-.016.2q-.03.392-.045.704a72 72 0 0 0-.043 2.303v22.488q0 13.783 7.307 23.449l.277.363a36 36 0 0 0 1.176 1.431l.022.026q1.169 1.332 2.374 2.438l.045.04.011.011.004.003a31 31 0 0 0 6.119 4.384q.458.313.972.517l49.452 26.07.003.001q.177.093.357.17l.062.032q.105.055.209.107.112.057.251.12l.015.007.08.038q.606.29 1.098.502l.171.074.087.038q.19.085.333.144.49.203 1.209.472l.12.046q.225.096.459.168a31 31 0 0 0 1.737.547h.001q.235.067.428.113l.027.007q.74.2 1.381.343l.121.028.066.015.046.011q.239.057.601.123l.03.006.502.094q.708.126 1.393.228.065.01.129.017l.199.024q.604.08 1.264.142l.7.062q.093.008.185.013l.381.019.17.006.028.002q.42.026.609.032a24 24 0 0 0 .994.021h.666q.416 0 1.016-.028h.061q.224 0 .447-.02l-.037.004q.163-.007.295-.017a42 42 0 0 0 1.112-.081l.051-.004.114-.011q.273-.02.494-.045l.657-.076.396-.05q.388-.045.577-.074a35 35 0 0 0 .806-.129l.509-.082.062-.01q.26-.042.458-.082.336-.066.9-.186l.398-.081.396-.083a39 39 0 0 0 1.813-.459l3.505-.961q1.123-.31 2.014-.605.301-.097.55-.188l.164-.058.002-.001q.858-.298 1.256-.444.236-.083.588-.228l.167-.068.11-.046.135-.054q.728-.29 1.115-.46l.773-.336a79 79 0 0 0 1.167-.542l.15-.071.619-.301q.59-.294 1.213-.631l.252-.133.106-.056q.231-.121.308-.165.47-.256 1.319-.758l.12-.071.17-.097.03-.017 8.542 3.891q7.268 3.313 13.987-1.01 6.72-4.322 6.72-12.312v-40.14q.022-.236.022-.474V95.148q0-10.834-4.587-19.302-4.62-8.528-12.99-13.049a5 5 0 0 0-.273-.155l-.019-.01-49.944-26.33a30 30 0 0 0-.629-.322 9 9 0 0 0-.305-.144l-.04-.02a39 39 0 0 0-1.504-.684l-.148-.064q-.57-.24-1.267-.491a8 8 0 0 0-.522-.192 31 31 0 0 0-1.653-.527l-.012-.003-.168-.05-.045-.012-.304-.078-.033-.008.005.002a32 32 0 0 0-1.283-.319l-.072-.016a5 5 0 0 0-.294-.073 14 14 0 0 0-.645-.127l-.212-.042h-.003l-.194-.039q-.786-.142-1.427-.228a9 9 0 0 0-.29-.036h-.002l-.014-.002a37 37 0 0 0-1.245-.14l-.306-.027q-.344-.036-.524-.046l-.344-.018-.23-.013a26 26 0 0 0-1.376-.048l-.314-.005-.185-.001a23.248 23.248 0 0 0-1.147.016q-.2.007-.336.01h-.016q-.445.014-.655.027-.433.023-1.128.081l-.325.024a5 5 0 0 0-.33.024 28 28 0 0 0-.911.111l-.33.04-.33.04-.12.016a33 33 0 0 0-.743.12l-.46.075q-.36.057-.58.1-.62.12-1.102.228-.378.075-.626.133a37 37 0 0 0-1.807.46l-3.509.96q-1.069.299-1.993.6-.217.07-.556.19l-.176.062a88 88 0 0 0-1.339.474q-.2.075-.565.218l-.225.089q-.8.32-1.248.513l-.358.155-.415.182a68 68 0 0 0-1.937.913q-.59.295-1.213.63l-.033.018-.632.337a47 47 0 0 0-1.423.82q-.315.18-.456.267a58 58 0 0 0-1.842 1.167q-.137.09-.327.223l-.044.032.001-.001a55 55 0 0 0-1.949 1.37 83 83 0 0 0-1.686 1.288q-.735.585-1.387 1.13l-.017.014-.027.021-.08.063a5 5 0 0 0-.195.16q-.108.094-.256.232l.01-.008-.002.002a50 50 0 0 0-2.254 2.056 78 78 0 0 0-1.335 1.308q-.128.123-.203.2-.144.142-.337.355l-.01.015-.101.103q-.603.639-.915.983l-.696.767q-.198.223-.556.64l-.438.507a22 22 0 0 0-.601.722q-.435.53-.755.949l-.331.424-.357.456q-.255.334-.727.979l-.129.174a18 18 0 0 0-.507.71l-.063.09-.297.43-.314.457q-.44.648-.67 1.004-.318.49-.589.93-.274.424-.429.682-.054.09-.13.227Zm0 0 .007-.011zm62.786 11.145-.013.012q-.87.75-1.657 1.483-.222.203-.662.63a58 58 0 0 0-4.243 4.49l-.203.238-.024.028q-.454.537-.686.819l-.39.49-.345.434q-.446.56-.72.922-.247.322-.711.958a51 51 0 0 0-1.341 1.9q-.417.613-.645.965l-.177.278q-.291.456-.443.703-.389.618-.604.976l-.298.51-.267.46a57 57 0 0 0-1.674 3.1q-.276.54-.547 1.11l-.004.01q-.315.656-.48 1.016a101 101 0 0 0-.937 2.157 52 52 0 0 0-.647 1.64q-.17.438-.259.684a59 59 0 0 0-.662 1.928l-.006.016a13 13 0 0 0-.178.531l-.009.028a49 49 0 0 0-.67 2.306 61 61 0 0 0-.476 1.898l-.01.046q-.025.099-.044.188a50 50 0 0 0-.392 1.898q-.075.42-.202 1.176l-.025.153q-.1.588-.16.987a41 41 0 0 0-.18 1.455l-.048.42a30 30 0 0 0-.06.524 51 51 0 0 0-.12 1.591l-.015.196q-.031.391-.043.629a50 50 0 0 0-.057 2.394v20.581l.001.095v1.816q.003 6.873 1.874 12.803l-29.357-15.476-.052-.027-.03-.015-.047-.025q-.74-.391-1.444-.837a21.4 21.4 0 0 1-2.992-2.285l-.041-.037-.01-.009a21.6 21.6 0 0 1-2.675-2.958q-.189-.25-.372-.507-4.938-6.891-4.938-16.98V90.495q0-.834.034-1.906.004-.077.023-.308l.026-.349q.042-.722.1-1.342.009-.104.049-.422l.07-.586q.066-.578.098-.801.046-.309.138-.848l.047-.283q.091-.567.145-.844.02-.107.044-.257l-.004.018.001-.006q.14-.706.274-1.289l.008-.036.046-.196a38 38 0 0 1 .392-1.567l.064-.24.015-.053a67 67 0 0 1 .457-1.544q.045-.124.082-.25.037-.105.07-.209.312-.96.57-1.663.054-.146.184-.482l.068-.175.086-.222q.278-.723.425-1.075.037-.09.087-.22l-.008.02.002-.007.06-.145.082-.184q.087-.192.131-.295.294-.675.435-.988a45 45 0 0 1 .554-1.16q.206-.424.276-.562.075-.144.173-.348l.004-.011q.035-.066.067-.134l.083-.152.14-.256.132-.248a46 46 0 0 1 .87-1.564q.183-.33.415-.714.1-.16.216-.365l.021-.037a19 19 0 0 1 .342-.539q.225-.365.496-.785.17-.262.532-.796l.297-.43.275-.4q.075-.106.168-.246l.03-.045.163-.22q.136-.18.206-.277.401-.55.557-.754l.332-.424.357-.456q.25-.327.572-.72a17 17 0 0 0 .244-.302 13 13 0 0 1 .309-.36l.346-.4q.3-.35.41-.475l.666-.733q.24-.264.752-.807a12 12 0 0 0 .268-.287l.011-.014.104-.102.204-.2a66 66 0 0 1 1.63-1.582q.553-.52 1.336-1.197.09-.079.209-.188.174-.137.264-.215.52-.435 1.143-.932l.088-.069q.233-.185.374-.29.305-.237.946-.716.202-.142.505-.365.43-.31 1.145-.793l.174-.121.056-.04q.06-.038.12-.08a50 50 0 0 1 1.454-.917q.046-.03.267-.156l.168-.1q.699-.413.978-.564l.596-.317.033-.018q.527-.285.983-.512.184-.092.594-.287l.005-.002q.427-.204.93-.432l.357-.156.331-.144a44 44 0 0 1 1.544-.621 80 80 0 0 1 1.404-.496q.16-.056.25-.086.765-.25 1.604-.483l3.516-.964q.727-.203 1.381-.35.129-.03.456-.097.453-.102.942-.196.05-.01.235-.038a28 28 0 0 0 .577-.096q.304-.052.46-.075l.262-.032.339-.04a45 45 0 0 0 .608-.078l.033-.002.23-.017.284-.021q.58-.05.895-.066.106-.006.396-.015.153-.003.403-.012a13 13 0 0 1 .711-.01h.146l.31.005a20 20 0 0 1 .919.031 22 22 0 0 0 .55.03l.104.01h.004l.067.007.355.032q.423.04.828.093.126.017.293.035a23 23 0 0 1 1.13.187h.004l.133.028.338.063q.207.056.354.085.387.082.981.243l.197.05.086.022q.596.171 1.27.405l.036.013a7 7 0 0 0 .282.108 22 22 0 0 1 .783.299l.002.001.098.042a33 33 0 0 1 1.377.63l-.006-.003.006.003q.264.132.393.2l28.763 15.164q-.342.088-.667.178l-3.508.961q-1.07.297-2.128.644l-.292.101-.247.086a36 36 0 0 0-2.157.791q-.758.299-1.292.529l-.754.331q-.524.238-1.169.545a44.262 44.262 0 0 0-2.134 1.082l-.208.109q-.06.03-.12.062-.148.08-.28.155-.435.236-1.397.803-.102.06-.295.171-.065.037-.129.077a59 59 0 0 0-2.149 1.378l-.049.034q-.723.485-1.35.938l-.542.397q-.5.365-1.155.872-.359.272-.561.432-.564.445-1.302 1.06-.202.16-.341.279a8 8 0 0 0-.269.24Zm0 0 .011-.01zm-3.536-37.895h-.002q.004 0 .008.002zm3.871 127.988.763.402q.077.042.269.139l.09.046q.1.045.12.057l.136.064q.41.198.771.353l.011.005q.127.053.317.138l.072.032q.341.141.956.372l.05.02.183.068.014.006q.599.21 1.264.398l-.084-.018q.104.023.206.05l.208.054q.52.14 1.057.261l.073.017.072.016.113.026.108.019.031.006.436.082q.536.095 1.052.173l.2.025q.44.057.878.098l.611.055.186.01.376.016.028.002q.261.017.429.023.098.004.368.008l.239.003h.615q.208 0 .643-.021a4 4 0 0 1 .251-.007h.022l.137-.007-.018.003.178-.013q.25-.012.835-.061l.156-.014.154-.012.07-.006.539-.061.504-.064q.204-.024.312-.04a20 20 0 0 0 .618-.099l.402-.066.199-.032-.009.004q.057-.013.116-.024.252-.048.838-.172l.33-.067.255-.053q.608-.138 1.377-.35l3.477-.953a37 37 0 0 0 1.655-.499l.104-.034.127-.047.239-.084h.002q.78-.27 1.191-.421l.146-.059.135-.055.22-.091.141-.056q.579-.231.832-.342l.639-.278q.57-.257.997-.461l.089-.042.509-.247q.458-.228 1.02-.532l.158-.083.218-.116q.096-.049.178-.095.317-.174 1.018-.587l.207-.122.128-.074h.001q.124-.073.226-.13a39 39 0 0 0 1.26-.793l.358-.245a4.95 4.95 0 0 1 4.843-.416l10.977 5.001q2.352 1.073 4.527-.327t2.176-3.986v-40.637q0-.237.022-.474V95.148q0-17.112-12.596-23.755l-.295-.156-.163-.079-.176-.086a19 19 0 0 0-.767-.354q-.265-.12-.385-.168-.35-.148-.871-.337l-.182-.067-.102-.04q-.56-.194-1.217-.383l-.097-.026-.222-.058a38 38 0 0 0-1.026-.253l-.122-.026a31 31 0 0 0-.681-.144l-.118-.023a25 25 0 0 0-1.016-.163 6 6 0 0 1-.225-.027 29 29 0 0 0-.873-.1h-.006l-.327-.03a37 37 0 0 0-1.369-.078q-.12-.008-.523-.008h-.509a44 44 0 0 0-1.116.038l-.18.007q-.256.013-.859.063l-.046.004-.204.014-.135.01a20 20 0 0 0-.454.053 35 35 0 0 1-.636.075l-.206.025q-.145.022-.496.082l-.612.1q-.197.03-.279.046-.171.032-.602.125l-.237.051a22 22 0 0 1-.524.112q-.735.168-1.382.346l-3.476.953a36 36 0 0 0-1.54.46l-.291.102-.355.122a27 27 0 0 0-1.659.61q-.613.242-.941.383l-.648.284-.42.193V91.28q0 1.152-.056 2.307-.01.223-.037.576l-.001.004-.019.28-.001.026a43 43 0 0 1-.113 1.478 25 25 0 0 1-.076.68l-.052.433-.03.249a32 32 0 0 1-.234 1.677l-.056.354v.002q-.138.833-.221 1.265-.19.999-.399 1.935l-.027.11a45 45 0 0 1-.46 1.83l-.141.512a62 62 0 0 1-.542 1.831l-.151.467a54 54 0 0 1-.663 1.928 19 19 0 0 1-.2.526l-.017.042.004-.01-.112.295-.073.188q-.326.841-.495 1.251a27 27 0 0 1-.354.834l-.063.152q-.269.631-.492 1.106-.124.28-.359.772l-.135.283-.098.204a46 46 0 0 1-.971 1.916l-.314.587-.216.397q-.188.339-.563.993l-.076.132a32 32 0 0 1-.507.856q-.284.475-.6.969l-.084.133a42 42 0 0 1-.965 1.488l-.22.327-.021.032-.58.845-.066.092-.58.805a53 53 0 0 1-1.41 1.856l-.212.268q-.316.401-.48.601-.234.29-.674.806l-.04.046-.005.005q-.386.461-.854.988-.237.266-.69.767a46.143 46.143 0 0 1-1.393 1.477l-.219.223a55 55 0 0 1-1.216 1.193l-.18.174-.202.193-.258.247q-.778.722-1.567 1.402l-.099.086-.08.071-.08.072q-.067.06-.137.117l-.198.165a76 76 0 0 1-1.308 1.071l-.006.005q-.134.11-.339.266l-.147.113-.083.063a58 58 0 0 1-1.375 1.031q-.198.147-.307.225-.66.473-1.278.885l-.32.222-.103.07q-.884.584-1.833 1.157l-.009.005q.348 15.759 11.753 22.249zm-11.768-34.325q.47-.383.73-.601l.197-.164.014-.012.08-.071.173-.153q.705-.608 1.35-1.206l.146-.142.203-.193.15-.146a48 48 0 0 0 1.62-1.612 59 59 0 0 0 1.356-1.483 37 37 0 0 0 .788-.91l.019-.022a29 29 0 0 0 .899-1.097l.232-.293a40 40 0 0 0 1.143-1.505l.562-.78.022-.031.49-.716.002-.003.188-.28q.254-.377.359-.542.16-.245.432-.677l.088-.141a26 26 0 0 0 .564-.911q.104-.166.347-.589l.082-.143q.33-.574.485-.853l.171-.315.279-.523a41 41 0 0 0 .786-1.549l.104-.217.113-.238a37.223 37.223 0 0 0 .679-1.496l.016-.042.149-.347q.131-.303.181-.426.154-.374.439-1.112l.076-.194.081-.217.07-.178.082-.21q.297-.815.567-1.649l.156-.479q.189-.607.426-1.45l.122-.445q.199-.726.36-1.428l.053-.221q.135-.61.296-1.46.064-.33.177-1.021l.001-.002.046-.294.016-.1q.049-.3.065-.418a30 30 0 0 0 .134-1.055l.05-.421q.037-.296.049-.425.04-.385.089-1.179l.002-.027.024-.358.007-.092.015-.195q.047-.981.047-1.896V79.333l-.311.259-.116.094-.117.094-.003.003.012-.009a8 8 0 0 1-.256.227q-.683.59-1.382 1.24-.145.133-.507.483a50 50 0 0 0-3.576 3.782l-.197.231q-.412.488-.551.655l-.345.435-.341.428a53 53 0 0 0-.596.762q-.19.248-.608.82a43 43 0 0 0-1.103 1.563q-.38.56-.525.783l-.164.258q-.247.388-.385.61-.358.57-.484.778l-.267.46-.264.453a47 47 0 0 0-1.392 2.579q-.235.463-.466.947v.002q-.272.565-.387.817a85 85 0 0 0-.799 1.835 45 45 0 0 0-.508 1.289l-.066.171q-.13.338-.19.5-.225.614-.6 1.755l-.048.134-.003.001-.035.112-.05.159a40 40 0 0 0-.547 1.889 51 51 0 0 0-.407 1.643l-.004.014a39 39 0 0 0-.314 1.518q-.059.325-.173 1.015l-.028.171q-.088.512-.13.791-.036.254-.103.831l-.03.251q-.018.192-.059.525l-.035.301q-.028.303-.073.97l-.026.366-.022.287q-.018.23-.022.308-.046.959-.046 1.923z"/></svg>';
|
|
20367
|
+
|
|
20368
|
+
// src/renderer-agent-icon.ts
|
|
20369
|
+
var RENDERER_AGENT_LABELS = {
|
|
20370
|
+
codex: "Codex",
|
|
20371
|
+
pi: "Pi",
|
|
20372
|
+
"claude-code": "Claude Code",
|
|
20373
|
+
"deepseek-harness": "DeepSeek Harness",
|
|
20374
|
+
opencode: "OpenCode",
|
|
20375
|
+
grok: "Grok",
|
|
20376
|
+
omp: "Oh My Pi",
|
|
20377
|
+
antigravity: "Antigravity CLI",
|
|
20378
|
+
"kiro-cli": "Kiro CLI",
|
|
20379
|
+
codebuddy: "CodeBuddy",
|
|
20380
|
+
workbuddy: "WorkBuddy",
|
|
20381
|
+
"cursor-cli": "Cursor CLI",
|
|
20382
|
+
hermes: "Hermes",
|
|
20383
|
+
qoder: "Qoder",
|
|
20384
|
+
"qoder-cn": "Qoder CN",
|
|
20385
|
+
"kimi-code": "Kimi Code",
|
|
20386
|
+
zcode: "ZCode"
|
|
20387
|
+
};
|
|
20388
|
+
var PI_PATHS = [
|
|
20389
|
+
{
|
|
20390
|
+
d: "M1 1h16.5v11H12v5.5H6.5V23H1V1zm5.5 5.5V12H12V6.5H6.5z",
|
|
20391
|
+
fillRule: "evenodd"
|
|
20392
|
+
},
|
|
20393
|
+
{ d: "M17.5 12H23v11h-5.5V12z" }
|
|
20394
|
+
];
|
|
20395
|
+
var DEEPSEEK_HARNESS_WHALE_PATH = "M22.9168 1.43018C22.6713 1.31018 22.5658 1.53918 22.4223 1.65519C22.3733 1.69269 22.3318 1.74169 22.2903 1.78669C21.9317 2.1697 21.5127 2.42121 20.9657 2.39121C20.1657 2.34621 19.4827 2.59771 18.8787 3.20973C18.7502 2.45521 18.3236 2.0047 17.6746 1.71569C17.3351 1.56568 16.9916 1.41518 16.7536 1.08867C16.5876 0.856163 16.5421 0.597155 16.4591 0.341647C16.4061 0.187643 16.3536 0.0301382 16.1761 0.00363739C15.9836 -0.0263635 15.9081 0.135141 15.8326 0.270145C15.5306 0.822162 15.4136 1.43018 15.4251 2.0462C15.4516 3.43174 16.0366 4.53527 17.1991 5.3203C17.3311 5.4103 17.3651 5.5003 17.3236 5.63181C17.2441 5.90231 17.1501 6.16482 17.0671 6.43533C17.0141 6.60784 16.9351 6.64584 16.7501 6.57033C16.1121 6.30383 15.5611 5.90931 15.074 5.4328C14.2475 4.63328 13.5 3.75075 12.568 3.05973C12.349 2.89822 12.13 2.74822 11.9034 2.60522C10.9524 1.68169 12.028 0.923165 12.277 0.833162C12.5375 0.739159 12.3675 0.41615 11.5259 0.42015C10.6844 0.42365 9.91439 0.705658 8.93286 1.08117C8.78935 1.13767 8.63835 1.17867 8.48384 1.21267C7.59332 1.04367 6.66829 1.00617 5.70226 1.11517C3.88321 1.31768 2.43016 2.1777 1.36213 3.64575C0.0790928 5.4103 -0.222916 7.41536 0.146595 9.50642C0.535106 11.7105 1.66014 13.535 3.38869 14.9616C5.18125 16.4406 7.24581 17.1657 9.60138 17.0266C11.0319 16.9441 12.6245 16.7526 14.421 15.2321C14.874 15.4576 15.3496 15.5476 16.1381 15.6151C16.7456 15.6716 17.3306 15.5851 17.7836 15.4911C18.4931 15.3411 18.4441 14.6841 18.1876 14.5636C16.1081 13.595 16.5646 13.9891 16.1496 13.67C17.2061 12.42 18.8202 10.1979 19.3182 7.17235C19.3672 6.83834 19.4297 6.36783 19.4222 6.09732C19.4182 5.93231 19.4562 5.86831 19.6447 5.84931C20.1657 5.78931 20.6712 5.64681 21.1357 5.3913C22.4833 4.65528 23.0268 3.44624 23.1548 1.9972C23.1738 1.77569 23.1508 1.54668 22.9168 1.43018ZM11.1749 14.4736C9.15936 12.889 8.18184 12.3675 7.77832 12.39C7.40081 12.4125 7.46881 12.8445 7.55182 13.126C7.63882 13.404 7.75182 13.5955 7.91033 13.8396C8.01983 14.0011 8.09533 14.2411 7.80083 14.4216C7.15181 14.8231 6.02327 14.2866 5.97027 14.2601C4.65673 13.4865 3.5587 12.4655 2.78467 11.069C2.03715 9.72493 1.60314 8.28289 1.53164 6.74384C1.51264 6.37233 1.62214 6.24082 1.99215 6.17332C2.47916 6.08332 2.98118 6.06432 3.46769 6.13582C5.52476 6.43633 7.27581 7.35586 8.74385 8.8129C9.58188 9.64243 10.2159 10.634 10.8689 11.6025C11.5634 12.631 12.3105 13.611 13.262 14.4146C13.598 14.6961 13.866 14.9101 14.1225 15.0681C13.349 15.1546 12.058 15.1731 11.1749 14.4746L11.1749 14.4736ZM12.141 8.25988C12.141 8.09488 12.273 7.96338 12.439 7.96338C12.4765 7.96338 12.5105 7.97088 12.541 7.98188C12.5825 7.99688 12.6205 8.01938 12.6505 8.05338C12.7035 8.10588 12.7335 8.18088 12.7335 8.25988C12.7335 8.42489 12.6015 8.55639 12.4355 8.55639C12.2695 8.55639 12.141 8.42489 12.141 8.25988ZM15.1415 9.79893C14.949 9.87793 14.7565 9.94544 14.5715 9.95294C14.2845 9.96794 13.9715 9.85143 13.8015 9.70893C13.5375 9.48742 13.3485 9.36342 13.2695 8.97691C13.2355 8.8119 13.2545 8.55639 13.2845 8.40989C13.3525 8.09438 13.277 7.89187 13.0545 7.70787C12.8735 7.55786 12.643 7.51636 12.39 7.51636C12.2955 7.51636 12.209 7.47486 12.1445 7.44136C12.039 7.38886 11.9519 7.25735 12.035 7.09585C12.0615 7.04335 12.19 6.91584 12.22 6.89334C12.5635 6.69784 12.9595 6.76184 13.326 6.90834C13.6655 7.04735 13.9225 7.30236 14.292 7.66287C14.6695 8.09838 14.7375 8.21838 14.9525 8.54539C15.1225 8.8009 15.277 9.06341 15.3831 9.36392C15.4471 9.55142 15.3641 9.70493 15.1415 9.79893Z";
|
|
20396
|
+
var CLAUDE_PATH = "M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z";
|
|
20397
|
+
function createSvgIcon(paths, color, size, ownerDocument, viewBox = "0 0 24 24") {
|
|
20398
|
+
const svg = ownerDocument.createElementNS("http://www.w3.org/2000/svg", "svg");
|
|
20399
|
+
svg.setAttribute("viewBox", viewBox);
|
|
20400
|
+
svg.setAttribute("aria-hidden", "true");
|
|
20401
|
+
svg.style.width = `${size}px`;
|
|
20402
|
+
svg.style.height = `${size}px`;
|
|
20403
|
+
svg.style.flex = "none";
|
|
20404
|
+
svg.style.fill = color;
|
|
20405
|
+
for (const definition of paths) {
|
|
20406
|
+
const path = ownerDocument.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
20407
|
+
path.setAttribute("d", definition.d);
|
|
20408
|
+
if (definition.fillRule) path.setAttribute("fill-rule", definition.fillRule);
|
|
20409
|
+
if (definition.fill) path.setAttribute("fill", definition.fill);
|
|
20410
|
+
svg.append(path);
|
|
20411
|
+
}
|
|
20412
|
+
return svg;
|
|
20413
|
+
}
|
|
20414
|
+
function createRendererAgentIcon(agent, size = 20, ownerDocument = document) {
|
|
20415
|
+
if (agent === "codex") {
|
|
20416
|
+
const image = ownerDocument.createElement("img");
|
|
20417
|
+
image.src = codex_agent_default;
|
|
20418
|
+
image.alt = "";
|
|
20419
|
+
image.draggable = false;
|
|
20420
|
+
image.style.width = `${size}px`;
|
|
20421
|
+
image.style.height = `${size}px`;
|
|
20422
|
+
image.style.objectFit = "contain";
|
|
20423
|
+
image.style.flex = "none";
|
|
20424
|
+
return image;
|
|
20425
|
+
}
|
|
20426
|
+
if (agent === "pi") return createSvgIcon(PI_PATHS, "currentColor", size, ownerDocument);
|
|
20427
|
+
if (agent === "claude-code") {
|
|
20428
|
+
return createSvgIcon([{ d: CLAUDE_PATH }], "#d97757", size, ownerDocument);
|
|
20429
|
+
}
|
|
20430
|
+
if (agent === "deepseek-harness") {
|
|
20431
|
+
return createSvgIcon(
|
|
20432
|
+
[{ d: DEEPSEEK_HARNESS_WHALE_PATH }],
|
|
20433
|
+
"#4D6BFE",
|
|
20434
|
+
size,
|
|
20435
|
+
ownerDocument,
|
|
20436
|
+
"0 0 23.16 17.04"
|
|
20437
|
+
);
|
|
20438
|
+
}
|
|
20439
|
+
if (agent === "opencode") {
|
|
20440
|
+
const image = ownerDocument.createElement("img");
|
|
20441
|
+
image.src = opencode_agent_default;
|
|
20442
|
+
image.alt = "";
|
|
20443
|
+
image.draggable = false;
|
|
20444
|
+
image.style.width = `${size}px`;
|
|
20445
|
+
image.style.height = `${size}px`;
|
|
20446
|
+
image.style.objectFit = "contain";
|
|
20447
|
+
image.style.flex = "none";
|
|
20448
|
+
return image;
|
|
20449
|
+
}
|
|
20450
|
+
if (agent === "omp") {
|
|
20451
|
+
const image = ownerDocument.createElement("img");
|
|
20452
|
+
image.src = omp_agent_default;
|
|
20453
|
+
image.alt = "";
|
|
20454
|
+
image.draggable = false;
|
|
20455
|
+
image.style.width = `${size}px`;
|
|
20456
|
+
image.style.height = `${size}px`;
|
|
20457
|
+
image.style.objectFit = "contain";
|
|
20458
|
+
image.style.borderRadius = "22.37%";
|
|
20459
|
+
image.style.flex = "none";
|
|
20460
|
+
return image;
|
|
20461
|
+
}
|
|
20462
|
+
if (agent === "antigravity" || agent === "kiro-cli" || agent === "codebuddy" || agent === "workbuddy" || agent === "cursor-cli" || agent === "kimi-code" || agent === "zcode") {
|
|
20463
|
+
const image = ownerDocument.createElement("img");
|
|
20464
|
+
image.src = agent === "zcode" ? zcode_agent_default : agent === "kimi-code" ? kimi_agent_default : agent === "codebuddy" ? codebuddy_agent_default : agent === "workbuddy" ? workbuddy_agent_default : agent === "cursor-cli" ? cursor_agent_default : agent === "kiro-cli" ? kiro_agent_default : antigravity_agent_default;
|
|
20465
|
+
image.alt = "";
|
|
20466
|
+
image.draggable = false;
|
|
20467
|
+
image.style.width = `${size}px`;
|
|
20468
|
+
image.style.height = `${size}px`;
|
|
20469
|
+
image.style.objectFit = "contain";
|
|
20470
|
+
image.style.flex = "none";
|
|
20471
|
+
return image;
|
|
20472
|
+
}
|
|
20473
|
+
if (agent === "hermes") {
|
|
20474
|
+
const image = ownerDocument.createElement("img");
|
|
20475
|
+
image.src = hermes_agent_default;
|
|
20476
|
+
image.alt = "";
|
|
20477
|
+
image.draggable = false;
|
|
20478
|
+
image.style.width = `${size}px`;
|
|
20479
|
+
image.style.height = `${size}px`;
|
|
20480
|
+
image.style.objectFit = "contain";
|
|
20481
|
+
image.style.boxSizing = "border-box";
|
|
20482
|
+
image.style.padding = `${Math.max(1, Math.round(size / 16))}px`;
|
|
20483
|
+
image.style.borderRadius = "22.37%";
|
|
20484
|
+
image.style.background = "#d8d8e8";
|
|
20485
|
+
image.style.flex = "none";
|
|
20486
|
+
return image;
|
|
20487
|
+
}
|
|
20488
|
+
if (agent === "qoder" || agent === "qoder-cn") {
|
|
20489
|
+
const image = ownerDocument.createElement("img");
|
|
20490
|
+
image.src = qoder_agent_default;
|
|
20491
|
+
image.alt = "";
|
|
20492
|
+
image.draggable = false;
|
|
20493
|
+
image.style.width = `${size}px`;
|
|
20494
|
+
image.style.height = `${size}px`;
|
|
20495
|
+
image.style.objectFit = "contain";
|
|
20496
|
+
image.style.flex = "none";
|
|
20497
|
+
return image;
|
|
20498
|
+
}
|
|
20499
|
+
const mark = ownerDocument.createElement("img");
|
|
20500
|
+
mark.src = grok_agent_default;
|
|
20501
|
+
mark.alt = "";
|
|
20502
|
+
mark.draggable = false;
|
|
20503
|
+
mark.style.width = `${size}px`;
|
|
20504
|
+
mark.style.height = `${size}px`;
|
|
20505
|
+
mark.style.objectFit = "contain";
|
|
20506
|
+
mark.style.borderRadius = "22.37%";
|
|
20507
|
+
mark.style.flex = "none";
|
|
20508
|
+
return mark;
|
|
20509
|
+
}
|
|
20510
|
+
|
|
20511
|
+
// src/settings/harness-launch-controls.ts
|
|
20512
|
+
function createHarnessLaunchControls(document2, messages, agent, settings) {
|
|
20513
|
+
const section = document2.createElement("section");
|
|
20514
|
+
section.className = "settings-harness-launch";
|
|
20515
|
+
section.dataset.harnessLaunch = agent;
|
|
20516
|
+
const label = document2.createElement("label");
|
|
20517
|
+
label.textContent = messages.launchPathLabel;
|
|
20518
|
+
const input = document2.createElement("input");
|
|
20519
|
+
input.type = "text";
|
|
20520
|
+
input.autocomplete = "off";
|
|
20521
|
+
input.spellcheck = false;
|
|
20522
|
+
input.placeholder = agent === "zcode" ? messages.launchPathZcodePlaceholder : messages.launchPathPlaceholder;
|
|
20523
|
+
input.setAttribute("aria-label", messages.launchPathLabel);
|
|
20524
|
+
label.append(input);
|
|
20525
|
+
const help = document2.createElement("p");
|
|
20526
|
+
help.textContent = agent === "zcode" ? messages.launchPathZcodeHelp : messages.launchPathWorkbuddyHelp;
|
|
20527
|
+
const actions = document2.createElement("div");
|
|
20528
|
+
actions.className = "settings-harness-launch__actions";
|
|
20529
|
+
const save = document2.createElement("button");
|
|
20530
|
+
save.type = "button";
|
|
20531
|
+
save.className = "settings-command-button";
|
|
20532
|
+
save.textContent = messages.launchPathSave;
|
|
19327
20533
|
const reset = document2.createElement("button");
|
|
19328
20534
|
reset.type = "button";
|
|
19329
20535
|
reset.className = "settings-command-button settings-command-button--secondary";
|
|
@@ -19396,6 +20602,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19396
20602
|
];
|
|
19397
20603
|
var node = ["Requires Node.js (including npm).", "\u9700\u5148\u5B89\u88C5 Node.js\uFF08\u5305\u542B npm\uFF09\u3002"];
|
|
19398
20604
|
var guides = {
|
|
20605
|
+
zcode: {
|
|
20606
|
+
// codexhost runs the Agent CLI bundled with the installed ZCode Desktop.
|
|
20607
|
+
url: "https://github.com/BytePioneer-AI/codex-host/blob/main/docs/harnesses/zcode/zcode-harness-integration.md#%E5%AE%89%E8%A3%85",
|
|
20608
|
+
commands: [],
|
|
20609
|
+
before: [
|
|
20610
|
+
"Install ZCode Desktop and sign in with a Start Plan account. If ZCode is not in the default location (/Applications/ZCode.app on macOS, %LOCALAPPDATA%\\Programs\\ZCode on Windows, /opt/ZCode on Linux), set its path in the connection settings.",
|
|
20611
|
+
"\u8BF7\u5B89\u88C5 ZCode Desktop \u5E76\u767B\u5F55 Start Plan \u8D26\u53F7\u3002ZCode \u4E0D\u5728\u9ED8\u8BA4\u5B89\u88C5\u4F4D\u7F6E\uFF08macOS \u4E3A /Applications/ZCode.app\uFF0CWindows \u4E3A %LOCALAPPDATA%\\Programs\\ZCode\uFF0CLinux \u4E3A /opt/ZCode\uFF09\u65F6\uFF0C\u53EF\u5728\u8FDE\u63A5\u8BBE\u7F6E\u4E2D\u586B\u5199\u5176\u8DEF\u5F84\u3002"
|
|
20612
|
+
],
|
|
20613
|
+
downloads: [{ label: "ZCode", url: "https://zcode.z.ai/" }],
|
|
20614
|
+
after: [
|
|
20615
|
+
"Check again after signing in. The ZCode Desktop window does not need to stay open.",
|
|
20616
|
+
"\u767B\u5F55\u540E\u91CD\u65B0\u68C0\u6D4B\uFF1B\u4F7F\u7528\u65F6\u4E0D\u9700\u8981\u4FDD\u6301 ZCode \u7A97\u53E3\u6253\u5F00\u3002"
|
|
20617
|
+
]
|
|
20618
|
+
},
|
|
19399
20619
|
pi: {
|
|
19400
20620
|
url: "https://pi.dev/",
|
|
19401
20621
|
commands: shells(
|
|
@@ -19414,11 +20634,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19414
20634
|
},
|
|
19415
20635
|
"deepseek-harness": {
|
|
19416
20636
|
url: "https://github.com/deepseek-ai/deepseek-harness#run",
|
|
19417
|
-
|
|
19418
|
-
commands: npm("@deepseek-ai/dsh@0.1.5-rc.1"),
|
|
20637
|
+
commands: npm("@deepseek-ai/dsh@latest"),
|
|
19419
20638
|
before: [
|
|
19420
|
-
"Requires Node.js. Installs
|
|
19421
|
-
"\u9700\u5148\u5B89\u88C5 Node.js\u3002\
|
|
20639
|
+
"Requires Node.js. Installs npm's latest version; connection still requires native protocol validation.",
|
|
20640
|
+
"\u9700\u5148\u5B89\u88C5 Node.js\u3002\u5B89\u88C5 npm \u6700\u65B0\u7248\u672C\uFF1B\u8FDE\u63A5\u4ECD\u9700\u901A\u8FC7\u539F\u751F\u534F\u8BAE\u6821\u9A8C\u3002"
|
|
19422
20641
|
],
|
|
19423
20642
|
after: [
|
|
19424
20643
|
"Check again, then open Web UI to configure your provider. Stop any manually started dsh web first.",
|
|
@@ -19477,17 +20696,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19477
20696
|
url: "https://www.workbuddy.ai/docs/workbuddy/Quickstart",
|
|
19478
20697
|
commands: [],
|
|
19479
20698
|
before: [
|
|
19480
|
-
"
|
|
19481
|
-
"\u8BF7\u5B89\u88C5 WorkBuddy \u684C\u9762\u5E94\u7528\
|
|
20699
|
+
"Download and install the WorkBuddy desktop app.",
|
|
20700
|
+
"\u8BF7\u4E0B\u8F7D\u5E76\u5B89\u88C5 WorkBuddy \u684C\u9762\u5E94\u7528\u3002"
|
|
19482
20701
|
],
|
|
19483
20702
|
downloads: [
|
|
19484
20703
|
{
|
|
19485
|
-
label: "
|
|
19486
|
-
url: "https://www.workbuddy.ai/
|
|
19487
|
-
},
|
|
19488
|
-
{
|
|
19489
|
-
label: "Windows",
|
|
19490
|
-
url: "https://www.workbuddy.ai/docs/workbuddy/From-Beginner-to-Expert-Guide/Installation-Win-Guide"
|
|
20704
|
+
label: "WorkBuddy",
|
|
20705
|
+
url: "https://www.workbuddy.ai/"
|
|
19491
20706
|
}
|
|
19492
20707
|
],
|
|
19493
20708
|
after: [
|
|
@@ -19541,6 +20756,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19541
20756
|
after: start("kimi")
|
|
19542
20757
|
}
|
|
19543
20758
|
};
|
|
20759
|
+
function harnessHasInstallCommands(agent) {
|
|
20760
|
+
return guides[agent].commands.length > 0;
|
|
20761
|
+
}
|
|
19544
20762
|
function harnessInstallationGuide(agent, locale) {
|
|
19545
20763
|
const guide = guides[agent];
|
|
19546
20764
|
const index = locale === "zh-CN" ? 1 : 0;
|
|
@@ -19548,7 +20766,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19548
20766
|
}
|
|
19549
20767
|
|
|
19550
20768
|
// src/settings/harness-installation-panel.ts
|
|
19551
|
-
function createHarnessInstallationPanel(document2, agent, hostId, messages, copy,
|
|
20769
|
+
function createHarnessInstallationPanel(document2, agent, hostId, messages, copy, installation) {
|
|
19552
20770
|
const zh = messages.locale === "zh-CN";
|
|
19553
20771
|
const guide = harnessInstallationGuide(agent, messages.locale);
|
|
19554
20772
|
const panel = document2.createElement("div");
|
|
@@ -19562,6 +20780,21 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19562
20780
|
paragraph(zh ? "\u8BF7\u5728\u8FDC\u7A0B Host \u4E0A\u5B89\u88C5\u3002" : "Install on the remote Host.");
|
|
19563
20781
|
}
|
|
19564
20782
|
if (guide.before) paragraph(guide.before);
|
|
20783
|
+
const install = installation && guide.commands.length > 0 ? document2.createElement("button") : null;
|
|
20784
|
+
if (install && installation) {
|
|
20785
|
+
install.type = "button";
|
|
20786
|
+
install.className = "settings-command-button";
|
|
20787
|
+
install.dataset.connectionAction = "install";
|
|
20788
|
+
install.disabled = installation.status !== "idle";
|
|
20789
|
+
install.textContent = installation.status === "installing" ? messages.connectionStatusInstalling : installation.status === "checking" ? messages.connectionStatusChecking : zh ? "\u4E00\u952E\u5B89\u88C5" : "Install automatically";
|
|
20790
|
+
install.addEventListener("click", () => {
|
|
20791
|
+
if (install.disabled) return;
|
|
20792
|
+
install.disabled = true;
|
|
20793
|
+
install.textContent = messages.connectionStatusInstalling;
|
|
20794
|
+
installation.run();
|
|
20795
|
+
});
|
|
20796
|
+
if (guide.commands.length > 1) panel.append(install);
|
|
20797
|
+
}
|
|
19565
20798
|
for (const { terminal, command } of guide.commands) {
|
|
19566
20799
|
const block = document2.createElement("div");
|
|
19567
20800
|
block.className = "settings-harness-installation-command";
|
|
@@ -19579,38 +20812,103 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19579
20812
|
button2.setAttribute("aria-label", `${copyLabel}: ${terminal}`);
|
|
19580
20813
|
button2.append(createRendererSettingsIcon("copy", 16), copyLabel);
|
|
19581
20814
|
button2.addEventListener("click", () => copy(button2, command, copyLabel));
|
|
19582
|
-
|
|
20815
|
+
const actions = document2.createElement("div");
|
|
20816
|
+
actions.className = "settings-harness-installation-actions";
|
|
20817
|
+
if (install && guide.commands.length === 1) actions.append(install);
|
|
20818
|
+
actions.append(button2);
|
|
20819
|
+
block.append(label, pre, actions);
|
|
19583
20820
|
panel.append(block);
|
|
19584
20821
|
}
|
|
19585
|
-
const
|
|
19586
|
-
const
|
|
19587
|
-
|
|
19588
|
-
|
|
19589
|
-
|
|
19590
|
-
|
|
19591
|
-
|
|
19592
|
-
|
|
20822
|
+
for (const download of guide.downloads ?? []) {
|
|
20823
|
+
const link = document2.createElement("a");
|
|
20824
|
+
link.className = "settings-command-button settings-command-button--secondary";
|
|
20825
|
+
link.href = download.url;
|
|
20826
|
+
link.target = "_blank";
|
|
20827
|
+
link.rel = "noopener noreferrer";
|
|
20828
|
+
link.textContent = zh ? "\u4E0B\u8F7D" : "Download";
|
|
20829
|
+
link.setAttribute("aria-label", `${link.textContent} ${download.label}`);
|
|
20830
|
+
panel.append(link);
|
|
20831
|
+
}
|
|
20832
|
+
paragraph(guide.after);
|
|
20833
|
+
return panel;
|
|
20834
|
+
}
|
|
20835
|
+
|
|
20836
|
+
// src/settings/harness-official-websites.ts
|
|
20837
|
+
var HARNESS_OFFICIAL_WEBSITES = {
|
|
20838
|
+
pi: "https://pi.dev/",
|
|
20839
|
+
"claude-code": "https://code.claude.com/",
|
|
20840
|
+
"deepseek-harness": "https://github.com/deepseek-ai/deepseek-harness",
|
|
20841
|
+
opencode: "https://opencode.ai/",
|
|
20842
|
+
grok: "https://www.npmjs.com/package/@xai-official/grok",
|
|
20843
|
+
omp: "https://github.com/can1357/oh-my-pi",
|
|
20844
|
+
antigravity: "https://antigravity.google/",
|
|
20845
|
+
"kiro-cli": "https://kiro.dev/",
|
|
20846
|
+
codebuddy: "https://www.codebuddy.ai/",
|
|
20847
|
+
workbuddy: "https://www.workbuddy.ai/",
|
|
20848
|
+
"cursor-cli": "https://cursor.com/",
|
|
20849
|
+
hermes: "https://hermes-agent.nousresearch.com/",
|
|
20850
|
+
qoder: "https://qoder.com/",
|
|
20851
|
+
"qoder-cn": "https://qoder.cn/",
|
|
20852
|
+
"kimi-code": "https://code.kimi.com/",
|
|
20853
|
+
zcode: "https://zcode.z.ai/"
|
|
20854
|
+
};
|
|
20855
|
+
|
|
20856
|
+
// src/settings/harness-install-store.ts
|
|
20857
|
+
function errorMessage2(error51) {
|
|
20858
|
+
return typeof error51 === "object" && error51 !== null && "message" in error51 && typeof error51.message === "string" ? error51.message.slice(0, 2048) : "Could not install the Harness. Check the official installation guide and retry.";
|
|
20859
|
+
}
|
|
20860
|
+
var stores = /* @__PURE__ */ new WeakMap();
|
|
20861
|
+
function createStore(diagnostics) {
|
|
20862
|
+
const states = /* @__PURE__ */ new Map();
|
|
20863
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
20864
|
+
const key = (host, agent) => JSON.stringify([host, agent]);
|
|
20865
|
+
const notify = () => listeners.forEach((listener) => listener());
|
|
20866
|
+
return {
|
|
20867
|
+
get: (host, agent) => states.get(key(host, agent)),
|
|
20868
|
+
clearErrors() {
|
|
20869
|
+
for (const [id, state] of states) if (state.status === "error") states.delete(id);
|
|
20870
|
+
notify();
|
|
20871
|
+
},
|
|
20872
|
+
subscribe(listener) {
|
|
20873
|
+
listeners.add(listener);
|
|
20874
|
+
return () => {
|
|
20875
|
+
listeners.delete(listener);
|
|
20876
|
+
};
|
|
20877
|
+
},
|
|
20878
|
+
async install(host, agent) {
|
|
20879
|
+
const id = key(host, agent);
|
|
20880
|
+
const previous = states.get(id);
|
|
20881
|
+
if (!diagnostics.installation || previous && previous.status !== "error") return;
|
|
20882
|
+
states.set(id, { status: "installing" });
|
|
20883
|
+
notify();
|
|
20884
|
+
let failure;
|
|
20885
|
+
try {
|
|
20886
|
+
await diagnostics.installation(host, agent, "install");
|
|
20887
|
+
states.set(id, { status: "checking" });
|
|
20888
|
+
notify();
|
|
20889
|
+
} catch (error51) {
|
|
20890
|
+
failure = errorMessage2(error51);
|
|
20891
|
+
}
|
|
20892
|
+
try {
|
|
20893
|
+
await diagnostics.refresh(host);
|
|
20894
|
+
const refreshed = diagnostics.snapshot().hosts.find((candidate) => candidate.hostId === host)?.agents.find((candidate) => candidate.agent === agent);
|
|
20895
|
+
if (refreshed?.availability === "ready") failure = void 0;
|
|
20896
|
+
} catch (error51) {
|
|
20897
|
+
failure ??= errorMessage2(error51);
|
|
20898
|
+
}
|
|
20899
|
+
if (failure) states.set(id, { status: "error", error: failure });
|
|
20900
|
+
else states.delete(id);
|
|
20901
|
+
notify();
|
|
20902
|
+
}
|
|
19593
20903
|
};
|
|
19594
|
-
|
|
19595
|
-
|
|
19596
|
-
|
|
19597
|
-
|
|
19598
|
-
);
|
|
20904
|
+
}
|
|
20905
|
+
function harnessInstallStore(diagnostics) {
|
|
20906
|
+
let store = stores.get(diagnostics);
|
|
20907
|
+
if (!store) {
|
|
20908
|
+
store = createStore(diagnostics);
|
|
20909
|
+
stores.set(diagnostics, store);
|
|
19599
20910
|
}
|
|
19600
|
-
|
|
19601
|
-
const check2 = document2.createElement("button");
|
|
19602
|
-
check2.type = "button";
|
|
19603
|
-
check2.className = "settings-command-button";
|
|
19604
|
-
check2.dataset.connectionAction = "check-install";
|
|
19605
|
-
check2.textContent = zh ? "\u91CD\u65B0\u68C0\u6D4B" : "Check again";
|
|
19606
|
-
check2.addEventListener("click", () => {
|
|
19607
|
-
check2.disabled = true;
|
|
19608
|
-
check2.textContent = messages.connectionRefreshing;
|
|
19609
|
-
refresh();
|
|
19610
|
-
});
|
|
19611
|
-
panel.append(check2);
|
|
19612
|
-
link(guide.url, zh ? "\u67E5\u770B\u5B98\u65B9\u5B89\u88C5\u8BF4\u660E" : "View official installation instructions");
|
|
19613
|
-
return panel;
|
|
20911
|
+
return store;
|
|
19614
20912
|
}
|
|
19615
20913
|
|
|
19616
20914
|
// src/settings/harness-version-panel.ts
|
|
@@ -19633,29 +20931,21 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19633
20931
|
update.type = "button";
|
|
19634
20932
|
update.className = "settings-command-button settings-command-button--secondary";
|
|
19635
20933
|
update.dataset.harnessVersionAction = "update";
|
|
19636
|
-
const guide = document2.createElement("a");
|
|
19637
|
-
guide.className = update.className;
|
|
19638
|
-
guide.href = harnessInstallationGuide(agent, messages.locale).url;
|
|
19639
|
-
guide.target = "_blank";
|
|
19640
|
-
guide.rel = "noopener noreferrer";
|
|
19641
|
-
guide.append(
|
|
19642
|
-
messages.connectionOpenInstallation,
|
|
19643
|
-
createRendererSettingsIcon("external-link", 14)
|
|
19644
|
-
);
|
|
19645
20934
|
const note = document2.createElement("p");
|
|
19646
20935
|
note.className = "settings-connection-issue-note";
|
|
19647
20936
|
note.textContent = messages.harnessVersionNote;
|
|
19648
|
-
actions.append(update
|
|
20937
|
+
actions.append(update);
|
|
19649
20938
|
panel.append(heading, versions, status, actions, note);
|
|
19650
20939
|
let state;
|
|
19651
20940
|
let busy = false;
|
|
19652
20941
|
let unsupported = false;
|
|
19653
20942
|
const render = () => {
|
|
19654
20943
|
current.textContent = `${messages.harnessVersionCurrent}: ${state?.currentVersion ?? "\u2014"}`;
|
|
19655
|
-
latest.textContent = `${messages.harnessVersionLatest}: ${state
|
|
20944
|
+
latest.textContent = `${messages.harnessVersionLatest}: ${harnessVersionLabel(state, messages.harnessVersion)}`;
|
|
19656
20945
|
update.disabled = busy || signal.aborted || !state?.canUpdate || !state.updateAvailable;
|
|
19657
20946
|
update.textContent = state?.canUpdate && state.latestVersion !== "Unknown" && !state.updateAvailable ? messages.harnessVersionUpToDate : messages.harnessVersionUpdate;
|
|
19658
|
-
|
|
20947
|
+
const detail = harnessVersionNote(state, messages.harnessVersion);
|
|
20948
|
+
note.textContent = detail ? `${detail} ${messages.harnessVersionNote}` : messages.harnessVersionNote;
|
|
19659
20949
|
};
|
|
19660
20950
|
const run = async (action) => {
|
|
19661
20951
|
if (busy || unsupported || signal.aborted) return;
|
|
@@ -19688,6 +20978,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19688
20978
|
// src/settings/connections-page.ts
|
|
19689
20979
|
var CODEXHOST_GITHUB_ISSUES_NEW_URL = "https://github.com/BytePioneer-AI/codex-host/issues/new";
|
|
19690
20980
|
function connectionStatusLabel(availability, messages, hasError = false) {
|
|
20981
|
+
if (availability === "updating") return messages.connectionStatusUpdating;
|
|
19691
20982
|
if (hasError && availability !== "notInstalled") return messages.connectionStatusError;
|
|
19692
20983
|
if (availability === "ready") return messages.connectionStatusReady;
|
|
19693
20984
|
if (availability === "checking") return messages.connectionStatusChecking;
|
|
@@ -19698,6 +20989,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19698
20989
|
return availability === "installing" ? messages.connectionStatusInstalling : messages.connectionStatusUnsupported;
|
|
19699
20990
|
}
|
|
19700
20991
|
function connectionStatusTone(availability, hasError = false) {
|
|
20992
|
+
if (availability === "updating") return "checking";
|
|
19701
20993
|
if (hasError && availability !== "notInstalled") return "failed";
|
|
19702
20994
|
if (availability === "ready") return "ready";
|
|
19703
20995
|
if (availability === "checking" || availability === "installing") return "checking";
|
|
@@ -19723,16 +21015,6 @@ ${error51.stderrTail}`] : []
|
|
|
19723
21015
|
] : []
|
|
19724
21016
|
].join("\n");
|
|
19725
21017
|
}
|
|
19726
|
-
function detailLine(document2, label, value) {
|
|
19727
|
-
const line = document2.createElement("div");
|
|
19728
|
-
line.className = "settings-connection-detail-line";
|
|
19729
|
-
const name = document2.createElement("span");
|
|
19730
|
-
name.textContent = label;
|
|
19731
|
-
const content = document2.createElement("code");
|
|
19732
|
-
content.textContent = value;
|
|
19733
|
-
line.append(name, content);
|
|
19734
|
-
return line;
|
|
19735
|
-
}
|
|
19736
21018
|
function setCopyButtonLabel(button2, label) {
|
|
19737
21019
|
button2.replaceChildren(createRendererSettingsIcon("copy", 16), label);
|
|
19738
21020
|
}
|
|
@@ -19855,20 +21137,23 @@ ${error51.stderrTail}`] : []
|
|
|
19855
21137
|
status.className = "settings-connection-row__status";
|
|
19856
21138
|
status.dataset.connectionTone = connectionStatusTone(item.availability, item.error !== null);
|
|
19857
21139
|
status.setAttribute("role", "cell");
|
|
19858
|
-
status.textContent = connectionStatusLabel(item.availability, messages, item.error !== null);
|
|
21140
|
+
status.textContent = item.error?.code === "authenticationRequired" ? messages.connectionLoginRequired : item.error?.code === "configurationRequired" ? messages.connectionConfigurationRequired : connectionStatusLabel(item.availability, messages, item.error !== null);
|
|
19859
21141
|
const action = document2.createElement("div");
|
|
19860
21142
|
action.className = "settings-connection-row__action";
|
|
19861
21143
|
action.setAttribute("role", "cell");
|
|
19862
|
-
if (item.agentSnapshot?.availability === "notInstalled") {
|
|
21144
|
+
if (item.agentSnapshot?.availability === "notInstalled" && item.install) {
|
|
19863
21145
|
const install = document2.createElement("button");
|
|
19864
21146
|
install.type = "button";
|
|
19865
21147
|
install.className = "settings-connection-install-link";
|
|
19866
21148
|
install.addEventListener("click", (event) => {
|
|
19867
21149
|
event.stopPropagation();
|
|
19868
21150
|
select();
|
|
21151
|
+
item.install?.();
|
|
19869
21152
|
});
|
|
19870
|
-
install.
|
|
19871
|
-
|
|
21153
|
+
install.disabled = item.availability === "installing" || item.availability === "checking";
|
|
21154
|
+
const installLabel = messages.connectionInstall;
|
|
21155
|
+
install.setAttribute("aria-label", `${installLabel}: ${item.name}`);
|
|
21156
|
+
install.title = installLabel;
|
|
19872
21157
|
install.append(createRendererSettingsIcon("download", 17));
|
|
19873
21158
|
action.append(install);
|
|
19874
21159
|
} else if (item.error) {
|
|
@@ -19904,6 +21189,7 @@ ${error51.stderrTail}`] : []
|
|
|
19904
21189
|
select();
|
|
19905
21190
|
});
|
|
19906
21191
|
row.addEventListener("keydown", (event) => {
|
|
21192
|
+
if (event.target?.closest?.("button, a")) return;
|
|
19907
21193
|
if (event.key !== "Enter" && event.key !== " ") return;
|
|
19908
21194
|
event.preventDefault();
|
|
19909
21195
|
select();
|
|
@@ -19928,10 +21214,22 @@ ${error51.stderrTail}`] : []
|
|
|
19928
21214
|
const title = document2.createElement("strong");
|
|
19929
21215
|
title.textContent = item.name;
|
|
19930
21216
|
identity.append(createConnectionIdentityIcon(document2, item, 20), title);
|
|
21217
|
+
if (item.agentSnapshot) {
|
|
21218
|
+
const website = document2.createElement("a");
|
|
21219
|
+
website.className = "settings-connection-website";
|
|
21220
|
+
website.href = HARNESS_OFFICIAL_WEBSITES[item.agentSnapshot.agent];
|
|
21221
|
+
website.target = "_blank";
|
|
21222
|
+
website.rel = "noopener noreferrer";
|
|
21223
|
+
website.title = messages.connectionOfficialWebsite;
|
|
21224
|
+
website.setAttribute("aria-label", `${messages.connectionOfficialWebsite}: ${item.name}`);
|
|
21225
|
+
website.append(createRendererSettingsIcon("external-link", 13));
|
|
21226
|
+
website.addEventListener("click", (event) => event.stopPropagation());
|
|
21227
|
+
identity.append(website);
|
|
21228
|
+
}
|
|
19931
21229
|
const status = document2.createElement("span");
|
|
19932
21230
|
status.className = "settings-connection-row__status";
|
|
19933
21231
|
status.dataset.connectionTone = connectionStatusTone(item.availability, item.error !== null);
|
|
19934
|
-
status.textContent = connectionStatusLabel(item.availability, messages, item.error !== null);
|
|
21232
|
+
status.textContent = item.error?.code === "authenticationRequired" ? messages.connectionLoginRequired : item.error?.code === "configurationRequired" ? messages.connectionConfigurationRequired : item.agentSnapshot && item.availability === "ready" && !item.error ? messages.connectionStatusConnected : connectionStatusLabel(item.availability, messages, item.error !== null);
|
|
19935
21233
|
header.append(identity, status);
|
|
19936
21234
|
return header;
|
|
19937
21235
|
}
|
|
@@ -19939,6 +21237,13 @@ ${error51.stderrTail}`] : []
|
|
|
19939
21237
|
inspector.replaceChildren(createInspectorHeader(document2, item, messages));
|
|
19940
21238
|
const body = document2.createElement("div");
|
|
19941
21239
|
body.className = "settings-connection-inspector__body";
|
|
21240
|
+
if (item.installError) {
|
|
21241
|
+
const error51 = document2.createElement("div");
|
|
21242
|
+
error51.className = "settings-connection-error-summary";
|
|
21243
|
+
error51.setAttribute("role", "alert");
|
|
21244
|
+
error51.textContent = item.installError;
|
|
21245
|
+
body.append(error51);
|
|
21246
|
+
}
|
|
19942
21247
|
if (item.agentSnapshot?.agent === "deepseek-harness") {
|
|
19943
21248
|
const compatibility = document2.createElement("p");
|
|
19944
21249
|
compatibility.className = "settings-connection-compatibility";
|
|
@@ -19946,52 +21251,49 @@ ${error51.stderrTail}`] : []
|
|
|
19946
21251
|
body.append(compatibility);
|
|
19947
21252
|
}
|
|
19948
21253
|
if (item.agentSnapshot?.availability === "notInstalled") {
|
|
19949
|
-
const
|
|
19950
|
-
|
|
19951
|
-
const
|
|
19952
|
-
|
|
19953
|
-
|
|
19954
|
-
|
|
19955
|
-
|
|
19956
|
-
|
|
19957
|
-
|
|
19958
|
-
|
|
19959
|
-
|
|
19960
|
-
|
|
19961
|
-
|
|
19962
|
-
|
|
19963
|
-
|
|
19964
|
-
|
|
19965
|
-
|
|
19966
|
-
|
|
19967
|
-
|
|
21254
|
+
const zh = messages.locale === "zh-CN";
|
|
21255
|
+
const busy = item.availability === "installing" || item.availability === "checking";
|
|
21256
|
+
const note = (text) => {
|
|
21257
|
+
const paragraph = document2.createElement("p");
|
|
21258
|
+
paragraph.textContent = text;
|
|
21259
|
+
body.append(paragraph);
|
|
21260
|
+
};
|
|
21261
|
+
if (busy) note(messages.connectionInstallRunning);
|
|
21262
|
+
body.append(
|
|
21263
|
+
createHarnessInstallationPanel(
|
|
21264
|
+
document2,
|
|
21265
|
+
item.agentSnapshot.agent,
|
|
21266
|
+
hostId,
|
|
21267
|
+
messages,
|
|
21268
|
+
(button2, command, label) => copyDiagnosticsToClipboard(document2, button2, command, messages, label),
|
|
21269
|
+
item.install ? {
|
|
21270
|
+
run: item.install,
|
|
21271
|
+
status: busy ? item.availability : "idle"
|
|
21272
|
+
} : void 0
|
|
21273
|
+
)
|
|
19968
21274
|
);
|
|
19969
|
-
|
|
21275
|
+
const check2 = document2.createElement("button");
|
|
21276
|
+
check2.type = "button";
|
|
21277
|
+
check2.className = "settings-command-button";
|
|
21278
|
+
check2.dataset.connectionAction = "check-install";
|
|
21279
|
+
check2.textContent = zh ? "\u91CD\u65B0\u68C0\u6D4B" : "Check again";
|
|
21280
|
+
check2.disabled = busy;
|
|
21281
|
+
check2.addEventListener("click", () => {
|
|
21282
|
+
check2.disabled = true;
|
|
21283
|
+
check2.textContent = messages.connectionRefreshing;
|
|
21284
|
+
refresh();
|
|
21285
|
+
});
|
|
21286
|
+
body.append(check2);
|
|
19970
21287
|
} else if (item.error) {
|
|
19971
21288
|
const summary = document2.createElement("div");
|
|
19972
21289
|
summary.className = "settings-connection-error-summary";
|
|
19973
21290
|
const title = document2.createElement("strong");
|
|
19974
|
-
|
|
21291
|
+
const needsLogin = item.error.code === "authenticationRequired";
|
|
21292
|
+
const needsConfiguration = item.error.code === "configurationRequired";
|
|
21293
|
+
title.textContent = needsLogin ? messages.connectionLoginRequired : needsConfiguration ? messages.connectionConfigurationRequired : messages.connectionErrorTitle;
|
|
19975
21294
|
const description = document2.createElement("p");
|
|
19976
|
-
description.textContent = item.error.message;
|
|
21295
|
+
description.textContent = needsLogin ? messages.connectionLoginDescription : needsConfiguration ? messages.connectionConfigurationDescription : item.error.message;
|
|
19977
21296
|
summary.append(title, description);
|
|
19978
|
-
const metadata = document2.createElement("div");
|
|
19979
|
-
metadata.className = "settings-connection-error-metadata";
|
|
19980
|
-
metadata.append(
|
|
19981
|
-
detailLine(document2, messages.connectionErrorCode, item.error.code),
|
|
19982
|
-
detailLine(document2, messages.connectionRetryable, String(item.error.retryable))
|
|
19983
|
-
);
|
|
19984
|
-
if (item.error.stage) {
|
|
19985
|
-
metadata.append(detailLine(document2, messages.connectionFailureStage, item.error.stage));
|
|
19986
|
-
}
|
|
19987
|
-
if (item.error.durationMs !== void 0) {
|
|
19988
|
-
metadata.append(
|
|
19989
|
-
detailLine(document2, messages.connectionDuration, `${item.error.durationMs} ms`)
|
|
19990
|
-
);
|
|
19991
|
-
}
|
|
19992
|
-
if (item.error.diagnostic) {
|
|
19993
|
-
metadata.append(detailLine(document2, messages.connectionDiagnostic, item.error.diagnostic));
|
|
19994
|
-
}
|
|
19995
21297
|
const logHeader = document2.createElement("div");
|
|
19996
21298
|
logHeader.className = "settings-connection-error-log-header";
|
|
19997
21299
|
const logTitle = document2.createElement("strong");
|
|
@@ -20007,7 +21309,7 @@ ${error51.stderrTail}`] : []
|
|
|
20007
21309
|
logHeader.append(logTitle, copy);
|
|
20008
21310
|
const log = document2.createElement("pre");
|
|
20009
21311
|
log.className = "settings-connection-stderr";
|
|
20010
|
-
log.textContent =
|
|
21312
|
+
log.textContent = report;
|
|
20011
21313
|
const actions = document2.createElement("div");
|
|
20012
21314
|
actions.className = "settings-connection-error-actions";
|
|
20013
21315
|
const issue2 = document2.createElement("a");
|
|
@@ -20020,16 +21322,16 @@ ${error51.stderrTail}`] : []
|
|
|
20020
21322
|
const issueNote = document2.createElement("p");
|
|
20021
21323
|
issueNote.className = "settings-connection-issue-note";
|
|
20022
21324
|
issueNote.textContent = messages.connectionIssueDescription;
|
|
20023
|
-
body.append(summary,
|
|
21325
|
+
body.append(summary, logHeader, log, actions, issueNote);
|
|
20024
21326
|
} else {
|
|
20025
21327
|
const status = document2.createElement("div");
|
|
20026
21328
|
status.className = "settings-connection-state-summary";
|
|
20027
21329
|
const title = document2.createElement("strong");
|
|
20028
21330
|
title.textContent = connectionStatusLabel(item.availability, messages);
|
|
20029
21331
|
const description = document2.createElement("p");
|
|
20030
|
-
description.textContent = item.availability === "ready" ? messages.connectionReadyDescription : messages.connectionUnavailableDescription;
|
|
21332
|
+
description.textContent = item.availability === "updating" ? messages.harnessVersionUpdating : item.availability === "ready" ? messages.connectionReadyDescription : messages.connectionUnavailableDescription;
|
|
20031
21333
|
status.append(title, description);
|
|
20032
|
-
body.append(status);
|
|
21334
|
+
if (!item.agentSnapshot || item.availability !== "ready") body.append(status);
|
|
20033
21335
|
if (item.openWebUi) {
|
|
20034
21336
|
const open = document2.createElement("button");
|
|
20035
21337
|
open.type = "button";
|
|
@@ -20053,7 +21355,7 @@ ${error51.stderrTail}`] : []
|
|
|
20053
21355
|
const agent = item.agentSnapshot?.agent;
|
|
20054
21356
|
const getLaunchSettings = diagnostics?.getLaunchSettings?.bind(diagnostics);
|
|
20055
21357
|
const setLaunchSettings = diagnostics?.setLaunchSettings?.bind(diagnostics);
|
|
20056
|
-
if (hostId === "local" && agent === "workbuddy" && getLaunchSettings && setLaunchSettings) {
|
|
21358
|
+
if (hostId === "local" && (agent === "zcode" || agent === "workbuddy") && getLaunchSettings && setLaunchSettings) {
|
|
20057
21359
|
launchControls = existingLaunchControls ?? createHarnessLaunchControls(document2, messages, agent, {
|
|
20058
21360
|
get: () => getLaunchSettings(hostId, agent),
|
|
20059
21361
|
set: (path) => setLaunchSettings(hostId, agent, path)
|
|
@@ -20144,9 +21446,11 @@ ${error51.stderrTail}`] : []
|
|
|
20144
21446
|
let selectedItemKey = null;
|
|
20145
21447
|
let launchControls = null;
|
|
20146
21448
|
const versionPanels = /* @__PURE__ */ new Map();
|
|
21449
|
+
const updatingVersions = /* @__PURE__ */ new Set();
|
|
20147
21450
|
let latestSnapshot = null;
|
|
20148
21451
|
let disposeHostScroller = () => void 0;
|
|
20149
21452
|
const diagnostics = getDiagnostics();
|
|
21453
|
+
const installs = diagnostics ? harnessInstallStore(diagnostics) : null;
|
|
20150
21454
|
const runRefresh = () => {
|
|
20151
21455
|
if (pending || !diagnostics) return;
|
|
20152
21456
|
pending = true;
|
|
@@ -20157,6 +21461,7 @@ ${error51.stderrTail}`] : []
|
|
|
20157
21461
|
);
|
|
20158
21462
|
void context.runLatest(() => diagnostics.refresh(), {
|
|
20159
21463
|
success() {
|
|
21464
|
+
installs?.clearErrors();
|
|
20160
21465
|
pending = false;
|
|
20161
21466
|
refresh.disabled = false;
|
|
20162
21467
|
refresh.replaceChildren(
|
|
@@ -20200,12 +21505,11 @@ ${error51.stderrTail}`] : []
|
|
|
20200
21505
|
latestSnapshot = snapshot;
|
|
20201
21506
|
disposeHostScroller();
|
|
20202
21507
|
disposeHostScroller = () => void 0;
|
|
20203
|
-
content.replaceChildren();
|
|
20204
21508
|
if (!snapshot) {
|
|
20205
21509
|
const empty = document2.createElement("div");
|
|
20206
21510
|
empty.className = "settings-empty";
|
|
20207
21511
|
empty.textContent = messages.connectionNoRuntime;
|
|
20208
|
-
content.
|
|
21512
|
+
content.replaceChildren(empty);
|
|
20209
21513
|
return;
|
|
20210
21514
|
}
|
|
20211
21515
|
const selectedHost = (selectedHostId ? snapshot.hosts.find((host) => host.hostId === selectedHostId) : void 0) ?? snapshot.hosts.find((host) => host.active) ?? snapshot.hosts.find((host) => host.hostId === "local") ?? snapshot.hosts[0];
|
|
@@ -20277,7 +21581,24 @@ ${error51.stderrTail}`] : []
|
|
|
20277
21581
|
const inspector = document2.createElement("aside");
|
|
20278
21582
|
inspector.className = "settings-connection-inspector";
|
|
20279
21583
|
inspector.setAttribute("aria-live", "polite");
|
|
20280
|
-
const items = connectionItems(snapshot, selectedHost, messages, diagnostics)
|
|
21584
|
+
const items = connectionItems(snapshot, selectedHost, messages, diagnostics).map(
|
|
21585
|
+
(item) => {
|
|
21586
|
+
const agent = item.agentSnapshot?.agent;
|
|
21587
|
+
if (!agent) return item;
|
|
21588
|
+
const state = installs?.get(selectedHost.hostId, agent);
|
|
21589
|
+
return {
|
|
21590
|
+
...item,
|
|
21591
|
+
...state ? { availability: state.status } : {},
|
|
21592
|
+
...updatingVersions.has(JSON.stringify([selectedHost.hostId, agent])) ? { availability: "updating" } : {},
|
|
21593
|
+
...state?.error ? { installError: state.error } : {},
|
|
21594
|
+
...diagnostics?.installation && harnessHasInstallCommands(agent) ? {
|
|
21595
|
+
install: () => {
|
|
21596
|
+
void installs?.install(selectedHost.hostId, agent);
|
|
21597
|
+
}
|
|
21598
|
+
} : {}
|
|
21599
|
+
};
|
|
21600
|
+
}
|
|
21601
|
+
);
|
|
20281
21602
|
if (!items.some((item) => item.key === selectedItemKey)) {
|
|
20282
21603
|
const requestedFocus = pendingFocusAgent;
|
|
20283
21604
|
pendingFocusAgent = null;
|
|
@@ -20307,13 +21628,23 @@ ${error51.stderrTail}`] : []
|
|
|
20307
21628
|
launchControls = { hostId: selectedHost.hostId, itemKey: item.key, element };
|
|
20308
21629
|
const agent = item.agentSnapshot?.agent;
|
|
20309
21630
|
const installation = diagnostics?.installation?.bind(diagnostics);
|
|
20310
|
-
if (agent && item.availability !== "notInstalled" && item.availability !== "checking" && installation) {
|
|
21631
|
+
if (agent && item.agentSnapshot?.availability !== "notInstalled" && item.availability !== "installing" && item.availability !== "checking" && installation) {
|
|
20311
21632
|
const key = JSON.stringify([selectedHost.hostId, agent]);
|
|
20312
21633
|
let panel = versionPanels.get(key);
|
|
20313
21634
|
if (!panel) {
|
|
20314
21635
|
const hostId = selectedHost.hostId;
|
|
20315
21636
|
panel = createHarnessVersionPanel(document2, messages, context.signal, agent, {
|
|
20316
|
-
run
|
|
21637
|
+
async run(action) {
|
|
21638
|
+
if (action !== "update") return installation(hostId, agent, action);
|
|
21639
|
+
updatingVersions.add(key);
|
|
21640
|
+
if (diagnostics) render(diagnostics.snapshot());
|
|
21641
|
+
try {
|
|
21642
|
+
return await installation(hostId, agent, action);
|
|
21643
|
+
} finally {
|
|
21644
|
+
updatingVersions.delete(key);
|
|
21645
|
+
if (!context.signal.aborted && diagnostics) render(diagnostics.snapshot());
|
|
21646
|
+
}
|
|
21647
|
+
}
|
|
20317
21648
|
});
|
|
20318
21649
|
versionPanels.set(key, panel);
|
|
20319
21650
|
}
|
|
@@ -20338,7 +21669,7 @@ ${error51.stderrTail}`] : []
|
|
|
20338
21669
|
const agentByKey = new Map(groupableItems.map((item) => [item.key, item]));
|
|
20339
21670
|
const preferenceOrder = groupPreference.list(
|
|
20340
21671
|
new Set(
|
|
20341
|
-
groupableItems.filter((item) => item.availability === "notInstalled").map((item) => item.agentSnapshot.agent)
|
|
21672
|
+
groupableItems.filter((item) => item.agentSnapshot.availability === "notInstalled").map((item) => item.agentSnapshot.agent)
|
|
20342
21673
|
)
|
|
20343
21674
|
).filter((entry) => agentByKey.has(entry.agent));
|
|
20344
21675
|
for (const item of groupableItems) {
|
|
@@ -20479,7 +21810,7 @@ ${error51.stderrTail}`] : []
|
|
|
20479
21810
|
if (selectedItem) selectItem(selectedItem);
|
|
20480
21811
|
list.append(hostStrip, tableHeader, rows);
|
|
20481
21812
|
layout.append(list, inspector);
|
|
20482
|
-
content.
|
|
21813
|
+
content.replaceChildren(layout);
|
|
20483
21814
|
disposeHostScroller = configureHostScroller(
|
|
20484
21815
|
document2,
|
|
20485
21816
|
hostStrip,
|
|
@@ -20490,7 +21821,14 @@ ${error51.stderrTail}`] : []
|
|
|
20490
21821
|
const selectedTab = [...tabs.children].find(
|
|
20491
21822
|
(child) => child.getAttribute("aria-selected") === "true"
|
|
20492
21823
|
);
|
|
20493
|
-
selectedTab
|
|
21824
|
+
if (selectedTab) {
|
|
21825
|
+
const left = selectedTab.offsetLeft;
|
|
21826
|
+
const right = left + selectedTab.offsetWidth;
|
|
21827
|
+
if (left < tabs.scrollLeft) tabs.scrollLeft = left;
|
|
21828
|
+
else if (right > tabs.scrollLeft + tabs.clientWidth) {
|
|
21829
|
+
tabs.scrollLeft = right - tabs.clientWidth;
|
|
21830
|
+
}
|
|
21831
|
+
}
|
|
20494
21832
|
};
|
|
20495
21833
|
render(diagnostics?.snapshot() ?? null);
|
|
20496
21834
|
const unsubscribeGroup = groupPreference.subscribe(
|
|
@@ -20505,8 +21843,10 @@ ${error51.stderrTail}`] : []
|
|
|
20505
21843
|
}
|
|
20506
21844
|
refresh.addEventListener("click", runRefresh);
|
|
20507
21845
|
const unsubscribe = diagnostics.subscribe(() => render(diagnostics.snapshot()));
|
|
21846
|
+
const unsubscribeInstalls = installs?.subscribe(() => render(diagnostics.snapshot()));
|
|
20508
21847
|
return () => {
|
|
20509
21848
|
disposeHostScroller();
|
|
21849
|
+
unsubscribeInstalls?.();
|
|
20510
21850
|
unsubscribe();
|
|
20511
21851
|
unsubscribeGroup();
|
|
20512
21852
|
};
|
|
@@ -20514,6 +21854,74 @@ ${error51.stderrTail}`] : []
|
|
|
20514
21854
|
});
|
|
20515
21855
|
}
|
|
20516
21856
|
|
|
21857
|
+
// src/settings/horizontal-scroll-hint.ts
|
|
21858
|
+
function createHorizontalScrollHint(document2, scroller, className) {
|
|
21859
|
+
const element = document2.createElement("div");
|
|
21860
|
+
element.className = className;
|
|
21861
|
+
element.setAttribute("aria-hidden", "true");
|
|
21862
|
+
const thumb = document2.createElement("span");
|
|
21863
|
+
element.append(thumb);
|
|
21864
|
+
const limit = () => Math.max(0, scroller.scrollWidth - scroller.clientWidth);
|
|
21865
|
+
const scrollTo = (left) => {
|
|
21866
|
+
scroller.scrollLeft = Math.min(limit(), Math.max(0, left));
|
|
21867
|
+
update();
|
|
21868
|
+
};
|
|
21869
|
+
const update = () => {
|
|
21870
|
+
const { clientWidth, scrollLeft, scrollWidth } = scroller;
|
|
21871
|
+
const overflowing = scrollWidth > clientWidth + 1;
|
|
21872
|
+
element.dataset.overflowing = String(overflowing);
|
|
21873
|
+
if (!overflowing) return;
|
|
21874
|
+
thumb.style.width = `${clientWidth / scrollWidth * 100}%`;
|
|
21875
|
+
thumb.style.left = `${scrollLeft / scrollWidth * 100}%`;
|
|
21876
|
+
};
|
|
21877
|
+
scroller.addEventListener("scroll", update, { passive: true });
|
|
21878
|
+
scroller.addEventListener(
|
|
21879
|
+
"wheel",
|
|
21880
|
+
(event) => {
|
|
21881
|
+
if (event.deltaX !== 0 || event.deltaY === 0 || event.ctrlKey) return;
|
|
21882
|
+
const next = Math.min(limit(), Math.max(0, scroller.scrollLeft + event.deltaY));
|
|
21883
|
+
if (Math.abs(next - scroller.scrollLeft) < 1) return;
|
|
21884
|
+
event.preventDefault();
|
|
21885
|
+
scrollTo(next);
|
|
21886
|
+
},
|
|
21887
|
+
{ passive: false }
|
|
21888
|
+
);
|
|
21889
|
+
let drag = null;
|
|
21890
|
+
element.addEventListener("pointerdown", (event) => {
|
|
21891
|
+
if (event.button !== 0 || limit() <= 1) return;
|
|
21892
|
+
const track = element.getBoundingClientRect();
|
|
21893
|
+
if (track.width <= 0) return;
|
|
21894
|
+
if (event.target !== thumb) {
|
|
21895
|
+
const pointed = (event.clientX - track.left) / track.width * scroller.scrollWidth;
|
|
21896
|
+
scrollTo(pointed - scroller.clientWidth / 2);
|
|
21897
|
+
}
|
|
21898
|
+
drag = {
|
|
21899
|
+
pointerId: event.pointerId,
|
|
21900
|
+
startX: event.clientX,
|
|
21901
|
+
startLeft: scroller.scrollLeft,
|
|
21902
|
+
// One pixel along the line is this many pixels of row content.
|
|
21903
|
+
scale: scroller.scrollWidth / track.width
|
|
21904
|
+
};
|
|
21905
|
+
element.dataset.dragging = "true";
|
|
21906
|
+
element.setPointerCapture(event.pointerId);
|
|
21907
|
+
event.preventDefault();
|
|
21908
|
+
});
|
|
21909
|
+
element.addEventListener("pointermove", (event) => {
|
|
21910
|
+
if (drag?.pointerId !== event.pointerId) return;
|
|
21911
|
+
scrollTo(drag.startLeft + (event.clientX - drag.startX) * drag.scale);
|
|
21912
|
+
});
|
|
21913
|
+
const release = (event) => {
|
|
21914
|
+
if (drag?.pointerId !== event.pointerId) return;
|
|
21915
|
+
drag = null;
|
|
21916
|
+
delete element.dataset.dragging;
|
|
21917
|
+
};
|
|
21918
|
+
element.addEventListener("pointerup", release);
|
|
21919
|
+
element.addEventListener("pointercancel", release);
|
|
21920
|
+
const ResizeObserverClass = document2.defaultView?.ResizeObserver;
|
|
21921
|
+
if (ResizeObserverClass) new ResizeObserverClass(update).observe(scroller);
|
|
21922
|
+
return { element, update };
|
|
21923
|
+
}
|
|
21924
|
+
|
|
20517
21925
|
// src/settings/session-import-list-controls.ts
|
|
20518
21926
|
function createSessionImportListControls(document2, messages, onChange) {
|
|
20519
21927
|
let query = "";
|
|
@@ -20647,7 +22055,7 @@ ${error51.stderrTail}`] : []
|
|
|
20647
22055
|
text.textContent = message;
|
|
20648
22056
|
return text;
|
|
20649
22057
|
}
|
|
20650
|
-
function createSessionImportSettingsPage(messages, getClient, openImportedThread) {
|
|
22058
|
+
function createSessionImportSettingsPage(messages, getClient, openImportedThread, getDiagnostics = () => null) {
|
|
20651
22059
|
return Object.freeze({
|
|
20652
22060
|
id: "session-import",
|
|
20653
22061
|
label: messages.pageLabels["session-import"],
|
|
@@ -20680,10 +22088,19 @@ ${error51.stderrTail}`] : []
|
|
|
20680
22088
|
harnessOptions.dataset.sessionImportHarness = "selector";
|
|
20681
22089
|
harnessOptions.setAttribute("role", "group");
|
|
20682
22090
|
harnessOptions.setAttribute("aria-label", messages.sessionImportHarness);
|
|
22091
|
+
const harnessScroller = document2.createElement("div");
|
|
22092
|
+
harnessScroller.className = "settings-session-import-harness__scroller";
|
|
22093
|
+
const harnessHint = createHorizontalScrollHint(
|
|
22094
|
+
document2,
|
|
22095
|
+
harnessOptions,
|
|
22096
|
+
"settings-session-import-harness__indicator"
|
|
22097
|
+
);
|
|
22098
|
+
harnessScroller.append(harnessOptions, harnessHint.element);
|
|
20683
22099
|
let selectedHarness = null;
|
|
20684
22100
|
let sources = [];
|
|
20685
22101
|
const sourceButtons = [];
|
|
20686
22102
|
const renderHarnessOptions = () => {
|
|
22103
|
+
const scrolled = harnessOptions.scrollLeft;
|
|
20687
22104
|
harnessOptions.replaceChildren();
|
|
20688
22105
|
sourceButtons.length = 0;
|
|
20689
22106
|
for (const source of sources) {
|
|
@@ -20704,8 +22121,11 @@ ${error51.stderrTail}`] : []
|
|
|
20704
22121
|
sourceButtons.push(option);
|
|
20705
22122
|
harnessOptions.append(option);
|
|
20706
22123
|
}
|
|
22124
|
+
harnessOptions.scrollLeft = scrolled;
|
|
22125
|
+
harnessOptions.querySelector('[aria-pressed="true"]')?.scrollIntoView?.({ block: "nearest", inline: "nearest" });
|
|
22126
|
+
harnessHint.update();
|
|
20707
22127
|
};
|
|
20708
|
-
harness.append(harnessLabel,
|
|
22128
|
+
harness.append(harnessLabel, harnessScroller);
|
|
20709
22129
|
const description = document2.createElement("p");
|
|
20710
22130
|
description.className = "settings-page-description";
|
|
20711
22131
|
description.textContent = messages.sessionImportDescription;
|
|
@@ -20994,10 +22414,15 @@ ${error51.stderrTail}`] : []
|
|
|
20994
22414
|
const pageParams = listControls.params();
|
|
20995
22415
|
void context.runLatest(
|
|
20996
22416
|
async (signal) => {
|
|
20997
|
-
const
|
|
20998
|
-
|
|
22417
|
+
const missing = new Set(
|
|
22418
|
+
getDiagnostics()?.snapshot().hosts.find(({ hostId }) => hostId === "local")?.agents.filter(({ availability }) => availability === "notInstalled").map(({ agent }) => agent)
|
|
22419
|
+
);
|
|
22420
|
+
const harnesses = (await client.listSessionImportSources()).harnesses.filter(
|
|
22421
|
+
({ harnessId }) => !missing.has(harnessId)
|
|
22422
|
+
);
|
|
22423
|
+
const selected = harnesses.find(({ harnessId }) => harnessId === requestedHarness)?.harnessId ?? harnesses[0]?.harnessId ?? null;
|
|
20999
22424
|
if (signal.aborted) throw new Error("Session import selection changed");
|
|
21000
|
-
sources =
|
|
22425
|
+
sources = harnesses;
|
|
21001
22426
|
selectedHarness = selected;
|
|
21002
22427
|
if (selected !== requestedHarness) {
|
|
21003
22428
|
listControls.reset();
|
|
@@ -21174,104 +22599,6 @@ ${error51.stderrTail}`] : []
|
|
|
21174
22599
|
};
|
|
21175
22600
|
}
|
|
21176
22601
|
|
|
21177
|
-
// src/settings/preference-ui.ts
|
|
21178
|
-
var nextPreferenceId = 0;
|
|
21179
|
-
function preferenceId(prefix) {
|
|
21180
|
-
nextPreferenceId += 1;
|
|
21181
|
-
return `codexhost-${prefix}-${nextPreferenceId}`;
|
|
21182
|
-
}
|
|
21183
|
-
function createPreferenceGroup(document2, title) {
|
|
21184
|
-
const group = document2.createElement("section");
|
|
21185
|
-
group.className = "mt-7 first-of-type:mt-0";
|
|
21186
|
-
const header = document2.createElement("div");
|
|
21187
|
-
header.className = "mb-2 flex min-h-6 items-center gap-2 px-1";
|
|
21188
|
-
const heading = document2.createElement("h3");
|
|
21189
|
-
heading.id = preferenceId("preference-group");
|
|
21190
|
-
heading.className = "m-0 text-[13px] leading-5 font-semibold text-settings-text";
|
|
21191
|
-
heading.textContent = title;
|
|
21192
|
-
header.append(heading);
|
|
21193
|
-
const card = document2.createElement("div");
|
|
21194
|
-
card.className = "rounded-[10px] border border-settings-border bg-settings-panel";
|
|
21195
|
-
group.setAttribute("aria-labelledby", heading.id);
|
|
21196
|
-
group.append(header, card);
|
|
21197
|
-
return { group, header, card };
|
|
21198
|
-
}
|
|
21199
|
-
function createPreferenceItem(document2, input) {
|
|
21200
|
-
const item = document2.createElement("div");
|
|
21201
|
-
item.className = "flex min-h-[60px] items-center justify-between gap-6 border-t border-settings-divider px-4 py-3 first:border-t-0";
|
|
21202
|
-
const copy = document2.createElement("div");
|
|
21203
|
-
copy.className = "flex min-w-0 flex-col gap-0.5";
|
|
21204
|
-
const heading = document2.createElement("div");
|
|
21205
|
-
heading.className = "flex items-center gap-1.5";
|
|
21206
|
-
const title = document2.createElement("label");
|
|
21207
|
-
title.htmlFor = input.controlId;
|
|
21208
|
-
title.className = "cursor-pointer text-[13px] leading-5 font-medium text-settings-text";
|
|
21209
|
-
title.textContent = input.title;
|
|
21210
|
-
heading.append(title);
|
|
21211
|
-
if (input.help) heading.append(createHelpTooltip(document2, input.help.label, input.help.lines));
|
|
21212
|
-
const description = document2.createElement("div");
|
|
21213
|
-
description.id = preferenceId("preference-description");
|
|
21214
|
-
description.className = "text-xs leading-[18px] text-settings-muted data-[invalid=true]:text-settings-danger";
|
|
21215
|
-
description.textContent = input.description;
|
|
21216
|
-
copy.append(heading, description);
|
|
21217
|
-
item.append(copy);
|
|
21218
|
-
return { item, description };
|
|
21219
|
-
}
|
|
21220
|
-
function createHelpTooltip(document2, label, lines) {
|
|
21221
|
-
const wrapper = document2.createElement("span");
|
|
21222
|
-
wrapper.className = "group relative inline-flex";
|
|
21223
|
-
const button2 = document2.createElement("button");
|
|
21224
|
-
button2.type = "button";
|
|
21225
|
-
button2.className = "inline-flex size-4 cursor-help items-center justify-center rounded-full border-0 bg-transparent p-0 text-settings-subtle transition-colors hover:text-settings-text focus-visible:text-settings-text focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-settings-focus";
|
|
21226
|
-
button2.setAttribute("aria-label", label);
|
|
21227
|
-
button2.append(createRendererSettingsIcon("help", 14));
|
|
21228
|
-
const tooltip = document2.createElement("div");
|
|
21229
|
-
tooltip.id = preferenceId("preference-tooltip");
|
|
21230
|
-
tooltip.setAttribute("role", "tooltip");
|
|
21231
|
-
tooltip.className = "pointer-events-none invisible absolute top-full left-0 z-20 mt-2 w-80 rounded-lg border border-settings-border bg-settings-panel px-3 py-2.5 text-xs leading-[18px] font-normal text-settings-text opacity-0 shadow-[0_10px_30px_rgb(0_0_0/0.22)] transition-opacity duration-150 group-hover:visible group-hover:opacity-100 group-focus-within:visible group-focus-within:opacity-100";
|
|
21232
|
-
const list = document2.createElement("ul");
|
|
21233
|
-
list.className = "m-0 grid list-disc gap-1 pl-4 marker:text-settings-subtle";
|
|
21234
|
-
for (const line of lines) {
|
|
21235
|
-
const item = document2.createElement("li");
|
|
21236
|
-
item.textContent = line;
|
|
21237
|
-
list.append(item);
|
|
21238
|
-
}
|
|
21239
|
-
tooltip.append(list);
|
|
21240
|
-
button2.setAttribute("aria-describedby", tooltip.id);
|
|
21241
|
-
button2.addEventListener("keydown", (event) => {
|
|
21242
|
-
if (event.key === "Escape") button2.blur();
|
|
21243
|
-
});
|
|
21244
|
-
wrapper.append(button2, tooltip);
|
|
21245
|
-
return wrapper;
|
|
21246
|
-
}
|
|
21247
|
-
function createPreferenceSwitch(document2, id, describedBy) {
|
|
21248
|
-
const input = document2.createElement("input");
|
|
21249
|
-
input.type = "checkbox";
|
|
21250
|
-
input.id = id;
|
|
21251
|
-
input.setAttribute("role", "switch");
|
|
21252
|
-
input.setAttribute("aria-describedby", describedBy);
|
|
21253
|
-
input.className = "relative m-0 h-5 w-9 shrink-0 cursor-pointer appearance-none rounded-full bg-settings-surface-hover ring-1 ring-settings-border transition-colors ring-inset before:absolute before:top-0.5 before:left-0.5 before:size-4 before:rounded-full before:bg-white before:shadow-[0_1px_2px_rgb(0_0_0/0.3)] before:transition-transform checked:bg-settings-focus checked:ring-transparent checked:before:translate-x-4 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-settings-focus";
|
|
21254
|
-
return input;
|
|
21255
|
-
}
|
|
21256
|
-
function createNumberField(document2, input) {
|
|
21257
|
-
const field = document2.createElement("div");
|
|
21258
|
-
field.className = "flex h-8 shrink-0 items-center gap-1.5 rounded-md border border-settings-border bg-settings-surface px-2.5 transition-colors focus-within:border-settings-focus data-[invalid=true]:border-settings-danger";
|
|
21259
|
-
const control = document2.createElement("input");
|
|
21260
|
-
control.type = "number";
|
|
21261
|
-
control.id = input.id;
|
|
21262
|
-
control.min = String(input.min);
|
|
21263
|
-
control.max = String(input.max);
|
|
21264
|
-
control.step = "1";
|
|
21265
|
-
control.setAttribute("aria-describedby", input.describedBy);
|
|
21266
|
-
control.className = "w-14 border-0 bg-transparent p-0 text-right text-[13px] leading-5 text-settings-text tabular-nums outline-none";
|
|
21267
|
-
const unit = document2.createElement("span");
|
|
21268
|
-
unit.className = "text-xs text-settings-muted";
|
|
21269
|
-
unit.setAttribute("aria-hidden", "true");
|
|
21270
|
-
unit.textContent = input.unit;
|
|
21271
|
-
field.append(control, unit);
|
|
21272
|
-
return { field, control };
|
|
21273
|
-
}
|
|
21274
|
-
|
|
21275
22602
|
// src/settings/idle-release-controls.ts
|
|
21276
22603
|
function mountIdleReleaseControls(context, messages, getLoadedSessionsClient) {
|
|
21277
22604
|
const { content } = context;
|
|
@@ -22688,7 +24015,7 @@ ${error51.stderrTail}`] : []
|
|
|
22688
24015
|
}
|
|
22689
24016
|
|
|
22690
24017
|
// src/settings/accounts-page.ts
|
|
22691
|
-
function
|
|
24018
|
+
function errorMessage3(error51, fallback) {
|
|
22692
24019
|
return error51 instanceof Error && error51.message ? error51.message : fallback;
|
|
22693
24020
|
}
|
|
22694
24021
|
function createAccountsSettingsPage(messages, getClient) {
|
|
@@ -22930,7 +24257,7 @@ ${error51.stderrTail}`] : []
|
|
|
22930
24257
|
refreshInBackground();
|
|
22931
24258
|
},
|
|
22932
24259
|
failure(error51) {
|
|
22933
|
-
loadMessage =
|
|
24260
|
+
loadMessage = errorMessage3(error51, messages.accountLoadFailed);
|
|
22934
24261
|
render();
|
|
22935
24262
|
}
|
|
22936
24263
|
});
|
|
@@ -23505,11 +24832,17 @@ ${error51.stderrTail}`] : []
|
|
|
23505
24832
|
}
|
|
23506
24833
|
});
|
|
23507
24834
|
}
|
|
23508
|
-
function createDefaultRendererSettingsPages(messages = DEFAULT_RENDERER_SETTINGS_MESSAGES, getUpdateClient = () => null, getDiagnostics = () => null, getAccountClient = () => null, getSessionImportClient = () => null, openImportedThread = () => Promise.reject(new Error("Imported Thread navigation is unavailable")), getLoadedSessionsClient = () => null) {
|
|
24835
|
+
function createDefaultRendererSettingsPages(messages = DEFAULT_RENDERER_SETTINGS_MESSAGES, getUpdateClient = () => null, getDiagnostics = () => null, getAccountClient = () => null, getSessionImportClient = () => null, openImportedThread = () => Promise.reject(new Error("Imported Thread navigation is unavailable")), getLoadedSessionsClient = () => null, getRemoteConnections = () => null) {
|
|
23509
24836
|
return Object.freeze([
|
|
23510
24837
|
createConnectionsSettingsPage(messages, getDiagnostics),
|
|
24838
|
+
createRemoteConnectionsPage(messages, getRemoteConnections),
|
|
23511
24839
|
createAccountsSettingsPage(messages, getAccountClient),
|
|
23512
|
-
createSessionImportSettingsPage(
|
|
24840
|
+
createSessionImportSettingsPage(
|
|
24841
|
+
messages,
|
|
24842
|
+
getSessionImportClient,
|
|
24843
|
+
openImportedThread,
|
|
24844
|
+
getDiagnostics
|
|
24845
|
+
),
|
|
23513
24846
|
createAppearanceSettingsPage(messages, getLoadedSessionsClient),
|
|
23514
24847
|
updatesPage(messages, getUpdateClient),
|
|
23515
24848
|
aboutPage(messages, getUpdateClient)
|
|
@@ -23942,26 +25275,32 @@ ${error51.stderrTail}`] : []
|
|
|
23942
25275
|
|
|
23943
25276
|
.settings-session-import-harness {
|
|
23944
25277
|
display: flex;
|
|
23945
|
-
|
|
25278
|
+
/* The label lines up with the options whether or not the scroll indicator is shown. */
|
|
25279
|
+
align-items: flex-start;
|
|
23946
25280
|
min-width: 0;
|
|
23947
25281
|
gap: 12px;
|
|
23948
|
-
margin: -12px 0
|
|
25282
|
+
margin: -12px 0 10px;
|
|
23949
25283
|
color: var(--settings-muted);
|
|
23950
25284
|
font-size: 13px;
|
|
23951
25285
|
}
|
|
23952
25286
|
|
|
23953
25287
|
.settings-session-import-harness > span {
|
|
23954
25288
|
flex: none;
|
|
25289
|
+
line-height: 32px;
|
|
25290
|
+
}
|
|
25291
|
+
|
|
25292
|
+
.settings-session-import-harness__scroller {
|
|
25293
|
+
min-width: 0;
|
|
25294
|
+
flex: 1;
|
|
23955
25295
|
}
|
|
23956
25296
|
|
|
23957
25297
|
.settings-session-import-harness__options {
|
|
23958
25298
|
display: flex;
|
|
23959
25299
|
align-items: center;
|
|
23960
|
-
min-width: 0;
|
|
23961
|
-
flex: 1;
|
|
23962
25300
|
gap: 6px;
|
|
23963
25301
|
overflow-x: auto;
|
|
23964
25302
|
overflow-y: hidden;
|
|
25303
|
+
/* Replaced by the hairline below: a native overlay scrollbar covers the options. */
|
|
23965
25304
|
scrollbar-width: none;
|
|
23966
25305
|
}
|
|
23967
25306
|
|
|
@@ -23969,6 +25308,59 @@ ${error51.stderrTail}`] : []
|
|
|
23969
25308
|
display: none;
|
|
23970
25309
|
}
|
|
23971
25310
|
|
|
25311
|
+
/*
|
|
25312
|
+
* Always occupies 6px so the page does not shift; drawn only while the options overflow. The box
|
|
25313
|
+
* is taller than the 2px line it draws so the line can be grabbed with a mouse.
|
|
25314
|
+
*/
|
|
25315
|
+
.settings-session-import-harness__indicator {
|
|
25316
|
+
position: relative;
|
|
25317
|
+
height: 12px;
|
|
25318
|
+
margin-bottom: -6px;
|
|
25319
|
+
cursor: grab;
|
|
25320
|
+
touch-action: none;
|
|
25321
|
+
visibility: hidden;
|
|
25322
|
+
}
|
|
25323
|
+
|
|
25324
|
+
.settings-session-import-harness__indicator[data-overflowing="true"] {
|
|
25325
|
+
visibility: visible;
|
|
25326
|
+
}
|
|
25327
|
+
|
|
25328
|
+
.settings-session-import-harness__indicator[data-dragging="true"] {
|
|
25329
|
+
cursor: grabbing;
|
|
25330
|
+
}
|
|
25331
|
+
|
|
25332
|
+
.settings-session-import-harness__indicator::before,
|
|
25333
|
+
.settings-session-import-harness__indicator > span {
|
|
25334
|
+
position: absolute;
|
|
25335
|
+
top: 4px;
|
|
25336
|
+
height: 2px;
|
|
25337
|
+
border-radius: 1px;
|
|
25338
|
+
}
|
|
25339
|
+
|
|
25340
|
+
.settings-session-import-harness__indicator::before {
|
|
25341
|
+
right: 0;
|
|
25342
|
+
left: 0;
|
|
25343
|
+
background: var(--settings-divider);
|
|
25344
|
+
content: "";
|
|
25345
|
+
}
|
|
25346
|
+
|
|
25347
|
+
.settings-session-import-harness__indicator > span {
|
|
25348
|
+
/* Quieter than text: a hint that there is more, not a control competing with the options. */
|
|
25349
|
+
background: light-dark(rgb(13 13 13 / 24%), rgb(255 255 255 / 26%));
|
|
25350
|
+
}
|
|
25351
|
+
|
|
25352
|
+
/* The thumb takes the press across the whole grab area, not only on its 2px line. */
|
|
25353
|
+
.settings-session-import-harness__indicator > span::before {
|
|
25354
|
+
position: absolute;
|
|
25355
|
+
inset: -4px 0 -6px;
|
|
25356
|
+
content: "";
|
|
25357
|
+
}
|
|
25358
|
+
|
|
25359
|
+
.settings-session-import-harness__indicator:hover > span,
|
|
25360
|
+
.settings-session-import-harness__indicator[data-dragging="true"] > span {
|
|
25361
|
+
background: light-dark(rgb(13 13 13 / 42%), rgb(255 255 255 / 46%));
|
|
25362
|
+
}
|
|
25363
|
+
|
|
23972
25364
|
.settings-session-import-harness__option {
|
|
23973
25365
|
min-height: 32px;
|
|
23974
25366
|
flex: none;
|
|
@@ -24605,6 +25997,12 @@ ${error51.stderrTail}`] : []
|
|
|
24605
25997
|
border-radius: 10px;
|
|
24606
25998
|
}
|
|
24607
25999
|
|
|
26000
|
+
.settings-harness-installation-actions {
|
|
26001
|
+
display: flex;
|
|
26002
|
+
flex-wrap: wrap;
|
|
26003
|
+
gap: 8px;
|
|
26004
|
+
}
|
|
26005
|
+
|
|
24608
26006
|
.settings-harness-installation-command pre {
|
|
24609
26007
|
white-space: pre-wrap;
|
|
24610
26008
|
overflow-wrap: anywhere;
|
|
@@ -24612,6 +26010,27 @@ ${error51.stderrTail}`] : []
|
|
|
24612
26010
|
font-size: 12px;
|
|
24613
26011
|
}
|
|
24614
26012
|
|
|
26013
|
+
.settings-connection-website {
|
|
26014
|
+
display: inline-flex;
|
|
26015
|
+
align-items: center;
|
|
26016
|
+
justify-content: center;
|
|
26017
|
+
flex: none;
|
|
26018
|
+
width: 22px;
|
|
26019
|
+
height: 22px;
|
|
26020
|
+
color: var(--settings-muted);
|
|
26021
|
+
border-radius: 4px;
|
|
26022
|
+
}
|
|
26023
|
+
|
|
26024
|
+
.settings-connection-website:hover {
|
|
26025
|
+
color: var(--settings-focus);
|
|
26026
|
+
background: var(--settings-hover);
|
|
26027
|
+
}
|
|
26028
|
+
|
|
26029
|
+
.settings-connection-website:focus-visible {
|
|
26030
|
+
outline: 2px solid var(--settings-focus);
|
|
26031
|
+
outline-offset: 1px;
|
|
26032
|
+
}
|
|
26033
|
+
|
|
24615
26034
|
.settings-connection-install-link {
|
|
24616
26035
|
display: inline-flex;
|
|
24617
26036
|
align-items: center;
|
|
@@ -24623,13 +26042,11 @@ ${error51.stderrTail}`] : []
|
|
|
24623
26042
|
background: transparent;
|
|
24624
26043
|
border: 1px solid transparent;
|
|
24625
26044
|
border-radius: 7px;
|
|
24626
|
-
opacity: 0;
|
|
24627
|
-
transition: opacity 120ms ease;
|
|
24628
26045
|
}
|
|
24629
26046
|
|
|
24630
|
-
.settings-connection-
|
|
24631
|
-
|
|
24632
|
-
|
|
26047
|
+
.settings-connection-install-link:disabled {
|
|
26048
|
+
opacity: 0.45;
|
|
26049
|
+
cursor: wait;
|
|
24633
26050
|
}
|
|
24634
26051
|
|
|
24635
26052
|
.settings-connection-install-link:hover {
|
|
@@ -24678,6 +26095,10 @@ ${error51.stderrTail}`] : []
|
|
|
24678
26095
|
padding: 12px;
|
|
24679
26096
|
}
|
|
24680
26097
|
|
|
26098
|
+
.settings-connection-inspector__body:empty {
|
|
26099
|
+
display: none;
|
|
26100
|
+
}
|
|
26101
|
+
|
|
24681
26102
|
.settings-harness-version {
|
|
24682
26103
|
display: grid;
|
|
24683
26104
|
gap: 10px;
|
|
@@ -24793,40 +26214,13 @@ ${error51.stderrTail}`] : []
|
|
|
24793
26214
|
width: fit-content;
|
|
24794
26215
|
}
|
|
24795
26216
|
|
|
24796
|
-
.settings-connection-error-summary {
|
|
24797
|
-
overflow-wrap: anywhere;
|
|
24798
|
-
padding: 13px 14px;
|
|
24799
|
-
color: var(--settings-danger);
|
|
24800
|
-
background: var(--settings-danger-bg);
|
|
24801
|
-
border: 1px solid var(--settings-danger-border);
|
|
24802
|
-
border-radius: 10px;
|
|
24803
|
-
}
|
|
24804
|
-
|
|
24805
|
-
.settings-connection-error-metadata {
|
|
24806
|
-
display: grid;
|
|
24807
|
-
gap: 7px;
|
|
24808
|
-
padding: 12px;
|
|
24809
|
-
background: var(--settings-inset);
|
|
24810
|
-
border: 1px solid var(--settings-border);
|
|
24811
|
-
border-radius: 9px;
|
|
24812
|
-
}
|
|
24813
|
-
|
|
24814
|
-
.settings-connection-detail-line {
|
|
24815
|
-
display: grid;
|
|
24816
|
-
grid-template-columns: 92px minmax(0, 1fr);
|
|
24817
|
-
gap: 10px;
|
|
24818
|
-
min-width: 0;
|
|
24819
|
-
color: var(--settings-muted);
|
|
24820
|
-
font-size: 10px;
|
|
24821
|
-
line-height: 16px;
|
|
24822
|
-
}
|
|
24823
|
-
|
|
24824
|
-
.settings-connection-detail-line code {
|
|
24825
|
-
min-width: 0;
|
|
26217
|
+
.settings-connection-error-summary {
|
|
24826
26218
|
overflow-wrap: anywhere;
|
|
24827
|
-
|
|
24828
|
-
|
|
24829
|
-
|
|
26219
|
+
padding: 13px 14px;
|
|
26220
|
+
color: var(--settings-danger);
|
|
26221
|
+
background: var(--settings-danger-bg);
|
|
26222
|
+
border: 1px solid var(--settings-danger-border);
|
|
26223
|
+
border-radius: 10px;
|
|
24830
26224
|
}
|
|
24831
26225
|
|
|
24832
26226
|
.settings-connection-error-log-header {
|
|
@@ -25645,10 +27039,340 @@ ${error51.stderrTail}`] : []
|
|
|
25645
27039
|
transition-duration: 0s !important;
|
|
25646
27040
|
}
|
|
25647
27041
|
}
|
|
27042
|
+
|
|
27043
|
+
.settings-remote {
|
|
27044
|
+
display: grid;
|
|
27045
|
+
gap: 14px;
|
|
27046
|
+
min-width: 0;
|
|
27047
|
+
}
|
|
27048
|
+
|
|
27049
|
+
.settings-remote__header {
|
|
27050
|
+
display: flex;
|
|
27051
|
+
align-items: flex-start;
|
|
27052
|
+
justify-content: space-between;
|
|
27053
|
+
gap: 18px;
|
|
27054
|
+
margin-bottom: 4px;
|
|
27055
|
+
}
|
|
27056
|
+
|
|
27057
|
+
.settings-remote__header .settings-section-label {
|
|
27058
|
+
padding-bottom: 0;
|
|
27059
|
+
}
|
|
27060
|
+
|
|
27061
|
+
.settings-remote__header .settings-page-description {
|
|
27062
|
+
margin: 5px 0 0;
|
|
27063
|
+
}
|
|
27064
|
+
|
|
27065
|
+
.settings-remote__meta {
|
|
27066
|
+
margin: 2px 0 0;
|
|
27067
|
+
color: var(--settings-subtle);
|
|
27068
|
+
font-size: 12px;
|
|
27069
|
+
line-height: 18px;
|
|
27070
|
+
font-variant-numeric: tabular-nums;
|
|
27071
|
+
}
|
|
27072
|
+
|
|
27073
|
+
.settings-remote__meta:empty {
|
|
27074
|
+
display: none;
|
|
27075
|
+
}
|
|
27076
|
+
|
|
27077
|
+
.settings-remote__toolbar,
|
|
27078
|
+
.settings-remote-card__actions {
|
|
27079
|
+
display: flex;
|
|
27080
|
+
align-items: center;
|
|
27081
|
+
flex: none;
|
|
27082
|
+
gap: 6px;
|
|
27083
|
+
}
|
|
27084
|
+
|
|
27085
|
+
.settings-remote__toolbar {
|
|
27086
|
+
gap: 8px;
|
|
27087
|
+
}
|
|
27088
|
+
|
|
27089
|
+
.settings-remote__banner {
|
|
27090
|
+
display: flex;
|
|
27091
|
+
align-items: center;
|
|
27092
|
+
justify-content: space-between;
|
|
27093
|
+
gap: 12px;
|
|
27094
|
+
padding: 8px 8px 8px 12px;
|
|
27095
|
+
color: var(--settings-danger);
|
|
27096
|
+
font-size: 12px;
|
|
27097
|
+
line-height: 18px;
|
|
27098
|
+
overflow-wrap: anywhere;
|
|
27099
|
+
background: var(--settings-danger-bg);
|
|
27100
|
+
border: 1px solid var(--settings-danger-border);
|
|
27101
|
+
border-radius: 10px;
|
|
27102
|
+
}
|
|
27103
|
+
|
|
27104
|
+
.settings-remote__loading {
|
|
27105
|
+
display: flex;
|
|
27106
|
+
align-items: center;
|
|
27107
|
+
gap: 8px;
|
|
27108
|
+
margin: 0;
|
|
27109
|
+
padding: 16px 2px;
|
|
27110
|
+
color: var(--settings-muted);
|
|
27111
|
+
font-size: 12px;
|
|
27112
|
+
}
|
|
27113
|
+
|
|
27114
|
+
.settings-remote__empty {
|
|
27115
|
+
display: flex;
|
|
27116
|
+
align-items: center;
|
|
27117
|
+
justify-content: space-between;
|
|
27118
|
+
gap: 16px;
|
|
27119
|
+
padding: 16px;
|
|
27120
|
+
background: var(--settings-panel);
|
|
27121
|
+
border: 1px dashed var(--settings-border);
|
|
27122
|
+
border-radius: 10px;
|
|
27123
|
+
}
|
|
27124
|
+
|
|
27125
|
+
.settings-remote__empty > div {
|
|
27126
|
+
display: grid;
|
|
27127
|
+
min-width: 0;
|
|
27128
|
+
gap: 2px;
|
|
27129
|
+
}
|
|
27130
|
+
|
|
27131
|
+
.settings-remote__empty strong {
|
|
27132
|
+
color: var(--settings-text);
|
|
27133
|
+
font-size: 13px;
|
|
27134
|
+
font-weight: 500;
|
|
27135
|
+
line-height: 19px;
|
|
27136
|
+
}
|
|
27137
|
+
|
|
27138
|
+
.settings-remote__empty span {
|
|
27139
|
+
color: var(--settings-muted);
|
|
27140
|
+
font-size: 12px;
|
|
27141
|
+
line-height: 18px;
|
|
27142
|
+
}
|
|
27143
|
+
|
|
27144
|
+
.settings-remote__list {
|
|
27145
|
+
display: grid;
|
|
27146
|
+
gap: 12px;
|
|
27147
|
+
}
|
|
27148
|
+
|
|
27149
|
+
.settings-remote__placeholder:empty,
|
|
27150
|
+
.settings-remote__list:empty {
|
|
27151
|
+
display: none;
|
|
27152
|
+
}
|
|
27153
|
+
|
|
27154
|
+
.settings-remote-card {
|
|
27155
|
+
min-width: 0;
|
|
27156
|
+
overflow: hidden;
|
|
27157
|
+
background: var(--settings-panel);
|
|
27158
|
+
border: 1px solid var(--settings-border);
|
|
27159
|
+
border-radius: 10px;
|
|
27160
|
+
}
|
|
27161
|
+
|
|
27162
|
+
.settings-remote-card__head {
|
|
27163
|
+
display: flex;
|
|
27164
|
+
align-items: center;
|
|
27165
|
+
gap: 12px;
|
|
27166
|
+
padding: 12px 10px 12px 14px;
|
|
27167
|
+
}
|
|
27168
|
+
|
|
27169
|
+
.settings-remote-card__identity {
|
|
27170
|
+
display: grid;
|
|
27171
|
+
flex: 1;
|
|
27172
|
+
min-width: 0;
|
|
27173
|
+
gap: 2px;
|
|
27174
|
+
}
|
|
27175
|
+
|
|
27176
|
+
.settings-remote-card__title {
|
|
27177
|
+
display: flex;
|
|
27178
|
+
align-items: center;
|
|
27179
|
+
min-width: 0;
|
|
27180
|
+
gap: 10px;
|
|
27181
|
+
}
|
|
27182
|
+
|
|
27183
|
+
.settings-remote-card h3 {
|
|
27184
|
+
min-width: 0;
|
|
27185
|
+
margin: 0;
|
|
27186
|
+
overflow: hidden;
|
|
27187
|
+
color: var(--settings-text);
|
|
27188
|
+
font-size: 13px;
|
|
27189
|
+
font-weight: 600;
|
|
27190
|
+
line-height: 20px;
|
|
27191
|
+
text-overflow: ellipsis;
|
|
27192
|
+
white-space: nowrap;
|
|
27193
|
+
}
|
|
27194
|
+
|
|
27195
|
+
.settings-remote-card__state {
|
|
27196
|
+
display: inline-flex;
|
|
27197
|
+
align-items: center;
|
|
27198
|
+
flex: none;
|
|
27199
|
+
gap: 6px;
|
|
27200
|
+
color: var(--settings-muted);
|
|
27201
|
+
font-size: 12px;
|
|
27202
|
+
line-height: 18px;
|
|
27203
|
+
}
|
|
27204
|
+
|
|
27205
|
+
.settings-remote-card__state::before {
|
|
27206
|
+
width: 7px;
|
|
27207
|
+
height: 7px;
|
|
27208
|
+
content: "";
|
|
27209
|
+
background: var(--settings-subtle);
|
|
27210
|
+
border-radius: 50%;
|
|
27211
|
+
}
|
|
27212
|
+
|
|
27213
|
+
.settings-remote-card__state[data-tone="success"]::before {
|
|
27214
|
+
background: var(--settings-success);
|
|
27215
|
+
}
|
|
27216
|
+
|
|
27217
|
+
.settings-remote-card__state[data-tone="danger"]::before {
|
|
27218
|
+
background: var(--settings-danger);
|
|
27219
|
+
}
|
|
27220
|
+
|
|
27221
|
+
.settings-remote-card__state[data-tone="progress"]::before {
|
|
27222
|
+
animation: settings-remote-pulse 1.2s ease-in-out infinite;
|
|
27223
|
+
}
|
|
27224
|
+
|
|
27225
|
+
.settings-remote-card__address {
|
|
27226
|
+
display: flex;
|
|
27227
|
+
align-items: center;
|
|
27228
|
+
min-width: 0;
|
|
27229
|
+
gap: 8px;
|
|
27230
|
+
overflow: hidden;
|
|
27231
|
+
color: var(--settings-muted);
|
|
27232
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
27233
|
+
font-size: 12px;
|
|
27234
|
+
line-height: 18px;
|
|
27235
|
+
text-overflow: ellipsis;
|
|
27236
|
+
white-space: nowrap;
|
|
27237
|
+
}
|
|
27238
|
+
|
|
27239
|
+
.settings-remote-card__address .settings-status-badge {
|
|
27240
|
+
padding: 0 6px;
|
|
27241
|
+
font-family: system-ui, sans-serif;
|
|
27242
|
+
}
|
|
27243
|
+
|
|
27244
|
+
.settings-remote-card__actions {
|
|
27245
|
+
flex-wrap: wrap;
|
|
27246
|
+
justify-content: flex-end;
|
|
27247
|
+
}
|
|
27248
|
+
|
|
27249
|
+
.settings-remote-card__remove:hover:not(:disabled) {
|
|
27250
|
+
color: var(--settings-danger);
|
|
27251
|
+
background: var(--settings-danger-bg);
|
|
27252
|
+
}
|
|
27253
|
+
|
|
27254
|
+
.settings-remote .settings-icon-button:disabled {
|
|
27255
|
+
cursor: not-allowed;
|
|
27256
|
+
opacity: 0.55;
|
|
27257
|
+
}
|
|
27258
|
+
|
|
27259
|
+
.settings-remote-card__detail {
|
|
27260
|
+
margin: -4px 14px 12px;
|
|
27261
|
+
font-size: 12px;
|
|
27262
|
+
line-height: 18px;
|
|
27263
|
+
overflow-wrap: anywhere;
|
|
27264
|
+
}
|
|
27265
|
+
|
|
27266
|
+
.settings-remote-card__service {
|
|
27267
|
+
display: flex;
|
|
27268
|
+
align-items: center;
|
|
27269
|
+
justify-content: space-between;
|
|
27270
|
+
gap: 12px;
|
|
27271
|
+
padding: 10px 10px 10px 14px;
|
|
27272
|
+
background: var(--settings-surface);
|
|
27273
|
+
border-top: 1px solid var(--settings-divider);
|
|
27274
|
+
}
|
|
27275
|
+
|
|
27276
|
+
.settings-remote-card__service-copy {
|
|
27277
|
+
display: grid;
|
|
27278
|
+
min-width: 0;
|
|
27279
|
+
gap: 2px;
|
|
27280
|
+
font-size: 12px;
|
|
27281
|
+
line-height: 18px;
|
|
27282
|
+
}
|
|
27283
|
+
|
|
27284
|
+
.settings-remote-card__service-title {
|
|
27285
|
+
color: var(--settings-text);
|
|
27286
|
+
font-weight: 500;
|
|
27287
|
+
font-variant-numeric: tabular-nums;
|
|
27288
|
+
}
|
|
27289
|
+
|
|
27290
|
+
.settings-remote-card__hint {
|
|
27291
|
+
display: flex;
|
|
27292
|
+
align-items: center;
|
|
27293
|
+
gap: 6px;
|
|
27294
|
+
margin: 0;
|
|
27295
|
+
color: var(--settings-muted);
|
|
27296
|
+
overflow-wrap: anywhere;
|
|
27297
|
+
}
|
|
27298
|
+
|
|
27299
|
+
.settings-remote [data-tone="success"] {
|
|
27300
|
+
color: var(--settings-success);
|
|
27301
|
+
}
|
|
27302
|
+
|
|
27303
|
+
.settings-remote [data-tone="warning"] {
|
|
27304
|
+
color: var(--settings-warning);
|
|
27305
|
+
}
|
|
27306
|
+
|
|
27307
|
+
.settings-remote [data-tone="danger"] {
|
|
27308
|
+
color: var(--settings-danger);
|
|
27309
|
+
}
|
|
27310
|
+
|
|
27311
|
+
.settings-remote-spinner {
|
|
27312
|
+
width: 12px;
|
|
27313
|
+
height: 12px;
|
|
27314
|
+
flex: none;
|
|
27315
|
+
border: 1.5px solid var(--settings-border);
|
|
27316
|
+
border-top-color: var(--settings-muted);
|
|
27317
|
+
border-radius: 50%;
|
|
27318
|
+
animation: settings-remote-spin 0.8s linear infinite;
|
|
27319
|
+
}
|
|
27320
|
+
|
|
27321
|
+
.settings-remote__refresh[aria-busy="true"] svg {
|
|
27322
|
+
animation: settings-remote-spin 0.8s linear infinite;
|
|
27323
|
+
}
|
|
27324
|
+
|
|
27325
|
+
.settings-remote-dialog .settings-credential-dialog__field small {
|
|
27326
|
+
color: var(--settings-subtle);
|
|
27327
|
+
font-size: 11px;
|
|
27328
|
+
line-height: 16px;
|
|
27329
|
+
}
|
|
27330
|
+
|
|
27331
|
+
.settings-remote-dialog input:disabled {
|
|
27332
|
+
color: var(--settings-muted);
|
|
27333
|
+
cursor: not-allowed;
|
|
27334
|
+
}
|
|
27335
|
+
|
|
27336
|
+
.settings-remote-dialog input:focus-visible {
|
|
27337
|
+
border-color: var(--settings-focus);
|
|
27338
|
+
outline-offset: -1px;
|
|
27339
|
+
}
|
|
27340
|
+
|
|
27341
|
+
@keyframes settings-remote-spin {
|
|
27342
|
+
to {
|
|
27343
|
+
transform: rotate(360deg);
|
|
27344
|
+
}
|
|
27345
|
+
}
|
|
27346
|
+
|
|
27347
|
+
@keyframes settings-remote-pulse {
|
|
27348
|
+
50% {
|
|
27349
|
+
opacity: 0.3;
|
|
27350
|
+
}
|
|
27351
|
+
}
|
|
27352
|
+
|
|
27353
|
+
@container (max-width: 620px) {
|
|
27354
|
+
.settings-remote-card__head,
|
|
27355
|
+
.settings-remote-card__service {
|
|
27356
|
+
align-items: stretch;
|
|
27357
|
+
flex-direction: column;
|
|
27358
|
+
}
|
|
27359
|
+
|
|
27360
|
+
.settings-remote-card__actions {
|
|
27361
|
+
justify-content: flex-start;
|
|
27362
|
+
}
|
|
27363
|
+
}
|
|
27364
|
+
|
|
27365
|
+
@media (prefers-reduced-motion: reduce) {
|
|
27366
|
+
.settings-remote-spinner,
|
|
27367
|
+
.settings-remote__refresh svg,
|
|
27368
|
+
.settings-remote-card__state::before {
|
|
27369
|
+
animation: none !important;
|
|
27370
|
+
}
|
|
27371
|
+
}
|
|
25648
27372
|
`;
|
|
25649
27373
|
|
|
25650
27374
|
// src/settings/tailwind.css
|
|
25651
|
-
var tailwind_default = '@layer properties, theme, base, components, utilities;\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.relative{position:relative}.top-full{top:100%}.left-0{left:0}.z-20{z-index:20}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:0}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:var(--spacing)}.ml-\\[45px\\]{margin-left:45px}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-8{height:calc(var(--spacing) * 8)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-\\[60px\\]{min-height:60px}.w-9{width:calc(var(--spacing) * 9)}.w-14{width:calc(var(--spacing) * 14)}.w-80{width:calc(var(--spacing) * 80)}.w-full{width:100%}.w-px{width:1px}.max-w-64{max-width:calc(var(--spacing) * 64)}.min-w-0{min-width:0}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-disc{list-style-type:disc}.appearance-none{appearance:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.overflow-x-auto{overflow-x:auto}.rounded-\\[10px\\]{border-radius:10px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-settings-border{border-color:var(--settings-border)}.border-settings-divider{border-color:var(--settings-divider)}.bg-settings-panel{background-color:var(--settings-panel)}.bg-settings-subtle{background-color:var(--settings-subtle)}.bg-settings-surface{background-color:var(--settings-surface)}.bg-settings-surface-hover{background-color:var(--settings-surface-hover)}.bg-transparent{background-color:#0000}.p-0{padding:0}.p-4{padding:calc(var(--spacing) * 4)}.\\!px-0{padding-inline:0!important}.px-1{padding-inline:var(--spacing)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pl-4{padding-left:calc(var(--spacing) * 4)}.\\!text-right{text-align:right!important}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-settings-muted{color:var(--settings-muted)}.text-settings-subtle{color:var(--settings-subtle)}.text-settings-text{color:var(--settings-text)}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\\[0_10px_30px_rgb\\(0_0_0\\/0\\.22\\)\\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000038);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-settings-border{--tw-ring-color:var(--settings-border)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.ring-inset{--tw-ring-inset:inset}.group-focus-within\\:visible:is(:where(.group):focus-within *){visibility:visible}.group-focus-within\\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-data-\\[state\\=failed\\]\\/status\\:bg-settings-danger:is(:where(.group\\/status)[data-state=failed] *){background-color:var(--settings-danger)}.group-data-\\[state\\=unavailable\\]\\/status\\:bg-settings-warning:is(:where(.group\\/status)[data-state=unavailable] *){background-color:var(--settings-warning)}.marker\\:text-settings-subtle ::marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle::marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle ::-webkit-details-marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle::-webkit-details-marker{color:var(--settings-subtle)}.before\\:absolute:before{content:var(--tw-content);position:absolute}.before\\:top-0\\.5:before{content:var(--tw-content);top:calc(var(--spacing) * .5)}.before\\:left-0\\.5:before{content:var(--tw-content);left:calc(var(--spacing) * .5)}.before\\:size-4:before{content:var(--tw-content);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.before\\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\\:bg-white:before{content:var(--tw-content);background-color:#fff}.before\\:shadow-\\[0_1px_2px_rgb\\(0_0_0\\/0\\.3\\)\\]:before{content:var(--tw-content);--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.before\\:transition-transform:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.first\\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.first-of-type\\:mt-0:first-of-type{margin-top:0}.checked\\:bg-settings-focus:checked{background-color:var(--settings-focus)}.checked\\:ring-transparent:checked{--tw-ring-color:transparent}.checked\\:before\\:translate-x-4:checked:before{content:var(--tw-content);--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.focus-within\\:border-settings-focus:focus-within{border-color:var(--settings-focus)}@media (hover:hover){.hover\\:text-settings-text:hover{color:var(--settings-text)}}.focus-visible\\:text-settings-text:focus-visible{color:var(--settings-text)}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-settings-focus:focus-visible{outline-color:var(--settings-focus)}.data-\\[invalid\\=true\\]\\:border-settings-danger[data-invalid=true]{border-color:var(--settings-danger)}.data-\\[invalid\\=true\\]\\:text-settings-danger[data-invalid=true],.data-\\[state\\=failed\\]\\:text-settings-danger[data-state=failed]{color:var(--settings-danger)}.data-\\[state\\=unavailable\\]\\:text-settings-warning[data-state=unavailable]{color:var(--settings-warning)}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@layer properties{\n *, ::before, ::after, ::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-alpha:100%;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-width:0;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-drop-shadow-alpha:100%;--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}\n';
|
|
27375
|
+
var tailwind_default = '@layer properties, theme, base, components, utilities;\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.top-full{top:100%}.left-0{left:0}.z-20{z-index:20}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:0}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:var(--spacing)}.ml-\\[45px\\]{margin-left:45px}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-8{height:calc(var(--spacing) * 8)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-\\[60px\\]{min-height:60px}.w-9{width:calc(var(--spacing) * 9)}.w-14{width:calc(var(--spacing) * 14)}.w-80{width:calc(var(--spacing) * 80)}.w-full{width:100%}.w-px{width:1px}.max-w-64{max-width:calc(var(--spacing) * 64)}.min-w-0{min-width:0}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-disc{list-style-type:disc}.appearance-none{appearance:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.overflow-x-auto{overflow-x:auto}.rounded-\\[10px\\]{border-radius:10px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-settings-border{border-color:var(--settings-border)}.border-settings-divider{border-color:var(--settings-divider)}.bg-settings-panel{background-color:var(--settings-panel)}.bg-settings-subtle{background-color:var(--settings-subtle)}.bg-settings-surface{background-color:var(--settings-surface)}.bg-settings-surface-hover{background-color:var(--settings-surface-hover)}.bg-transparent{background-color:#0000}.p-0{padding:0}.p-4{padding:calc(var(--spacing) * 4)}.\\!px-0{padding-inline:0!important}.px-1{padding-inline:var(--spacing)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pl-4{padding-left:calc(var(--spacing) * 4)}.\\!text-right{text-align:right!important}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-settings-muted{color:var(--settings-muted)}.text-settings-subtle{color:var(--settings-subtle)}.text-settings-text{color:var(--settings-text)}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\\[0_10px_30px_rgb\\(0_0_0\\/0\\.22\\)\\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000038);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-settings-border{--tw-ring-color:var(--settings-border)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.ring-inset{--tw-ring-inset:inset}.group-focus-within\\:visible:is(:where(.group):focus-within *){visibility:visible}.group-focus-within\\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-data-\\[state\\=failed\\]\\/status\\:bg-settings-danger:is(:where(.group\\/status)[data-state=failed] *){background-color:var(--settings-danger)}.group-data-\\[state\\=unavailable\\]\\/status\\:bg-settings-warning:is(:where(.group\\/status)[data-state=unavailable] *){background-color:var(--settings-warning)}.marker\\:text-settings-subtle ::marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle::marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle ::-webkit-details-marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle::-webkit-details-marker{color:var(--settings-subtle)}.before\\:absolute:before{content:var(--tw-content);position:absolute}.before\\:top-0\\.5:before{content:var(--tw-content);top:calc(var(--spacing) * .5)}.before\\:left-0\\.5:before{content:var(--tw-content);left:calc(var(--spacing) * .5)}.before\\:size-4:before{content:var(--tw-content);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.before\\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\\:bg-white:before{content:var(--tw-content);background-color:#fff}.before\\:shadow-\\[0_1px_2px_rgb\\(0_0_0\\/0\\.3\\)\\]:before{content:var(--tw-content);--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.before\\:transition-transform:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.first\\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.first-of-type\\:mt-0:first-of-type{margin-top:0}.checked\\:bg-settings-focus:checked{background-color:var(--settings-focus)}.checked\\:ring-transparent:checked{--tw-ring-color:transparent}.checked\\:before\\:translate-x-4:checked:before{content:var(--tw-content);--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.focus-within\\:border-settings-focus:focus-within{border-color:var(--settings-focus)}@media (hover:hover){.hover\\:text-settings-text:hover{color:var(--settings-text)}}.focus-visible\\:text-settings-text:focus-visible{color:var(--settings-text)}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-settings-focus:focus-visible{outline-color:var(--settings-focus)}.data-\\[invalid\\=true\\]\\:border-settings-danger[data-invalid=true]{border-color:var(--settings-danger)}.data-\\[invalid\\=true\\]\\:text-settings-danger[data-invalid=true],.data-\\[state\\=failed\\]\\:text-settings-danger[data-state=failed]{color:var(--settings-danger)}.data-\\[state\\=unavailable\\]\\:text-settings-warning[data-state=unavailable]{color:var(--settings-warning)}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@layer properties{\n *, ::before, ::after, ::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-alpha:100%;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-width:0;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-drop-shadow-alpha:100%;--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}\n';
|
|
25652
27376
|
|
|
25653
27377
|
// src/console/app.ts
|
|
25654
27378
|
function required2(pages, id) {
|