fix(agents): clarify configuration guidance and restore model list settings
- Move Codex model list settings back to Basic configuration in both modes - Clarify the ezcpa template's purpose for repairing agent configurations - Separate template application from clearing configuration - Point OAuth sign-in guidance to Configuration management - Update translations and UI regression checks
This commit is contained in:
1 parent
df3e10b350
commit
db4ac1dfe4
8 files changed
+60
-45
No files matched your search
+8
-8
@@ -847,10 +847,9 @@ export const jaOverrides = {
|
||||
"agents.run.title": "起動操作",
|
||||
"agents.management.backups": "バックアップと復元",
|
||||
"agents.management.backupsDescription": "ディスク上の設定を保存するか、手動バックアップから復元します。未適用の変更はバックアップに含まれません。",
|
||||
"agents.management.models": "モデル一覧",
|
||||
"agents.management.modelsDescription": "Codex に表示するモデルとその属性を管理します。",
|
||||
"agents.management.reset": "設定のリセット",
|
||||
"agents.management.resetDescription": "テンプレートはカスタム設定を上書きし、クリア操作は設定ファイルを削除します。実行前に手動バックアップを作成できます。",
|
||||
"agents.management.template": "ezcpa 設定テンプレート",
|
||||
"agents.management.templateDescription": "ezcpa 内蔵テンプレートを使い、問題のあるエージェント設定をすばやく修復します。",
|
||||
"agents.management.clearDescription": "Codex のログイン認証情報と接続設定を消去し、再ログインや再設定を行えるようにします。自動バックアップは作成されません。",
|
||||
"agents.management.plugin": "プラグイン管理",
|
||||
"agents.management.pluginVersion": "インストール済みのバージョン:{version}",
|
||||
"agents.management.pluginInstalled": "Pi プラグインをインストールしました。",
|
||||
@@ -980,6 +979,7 @@ export const jaOverrides = {
|
||||
'agents.claudeMapping.context1mHint': '1M コンテキストとして設定します。選択した上流モデルが対応していることを確認してください。',
|
||||
'agents.oauthLoginRequired.title': 'Codex へのログインが必要です',
|
||||
'agents.oauthLoginRequired.enableDescription': '有効な Codex のログイン認証情報が見つからないため、OAuth 設定方式を有効にできません。Codex アプリで ChatGPT アカウントにログインしてください。Codex アプリでログインを開始できない場合は、先に',
|
||||
'agents.oauthLoginRequired.enableManagementConnector': 'の',
|
||||
'agents.oauthLoginRequired.enableClearConfiguration': '設定を消去',
|
||||
'agents.oauthLoginRequired.enableDescriptionSuffix': 'を使用してください。',
|
||||
'agents.oauthLoginRequired.applyDescription': '有効な Codex のログイン認証情報が見つからないため、OAuth 設定を適用できません。Codex で ChatGPT アカウントにログインしてから、設定を適用してください。',
|
||||
@@ -988,9 +988,9 @@ export const jaOverrides = {
|
||||
'agents.modify.apply': '設定変更を適用',
|
||||
'agents.modify.update': '設定を更新',
|
||||
'agents.modify.close': '設定変更を終了',
|
||||
"agents.modify.default": "基本設定テンプレート",
|
||||
"agents.modify.default": "ezcpa テンプレートを適用",
|
||||
'agents.modify.clear': '設定を消去',
|
||||
"agents.modify.invalid": "通常の更新は停止しています。設定ファイルを修正するか、「設定を再構築」で再生成してください。",
|
||||
"agents.modify.invalid": "通常の更新は停止しています。設定ファイルを修正するか、「設定管理」の「ezcpa テンプレートを適用」で接続設定を再生成してください。",
|
||||
"agents.modify.zcodeRestart": "設定更新後、ZCode を完全終了して再起動してください。デフォルトモデルとコンテキスト長は新しいセッションで有効になります。",
|
||||
'agents.pi.installTitle': 'Pi CLIProxyAPI プロバイダー',
|
||||
'agents.pi.installDescription': 'プラグインをインストールまたは更新し、CPA 認証情報、既定のプロバイダー、既定のモデルを修復します',
|
||||
@@ -1004,8 +1004,8 @@ export const jaOverrides = {
|
||||
'agents.pi.repairing': '設定を適用中',
|
||||
'agents.pi.uninstall': 'Pi プラグインをアンインストール',
|
||||
'agents.pi.uninstalling': 'プラグインをアンインストール中',
|
||||
"agents.default.title": "基本設定テンプレートを適用",
|
||||
"agents.default.description": "現在の CPA 接続先、キー、モデルと認証方式で {name} の下記ファイルをすべて上書きします。独自設定は消去され、自動バックアップは作成しません。Pi は設定と必要なプラグイン参照のみを書き込み、パッケージのインストールや削除は行いません。",
|
||||
"agents.default.title": "ezcpa 設定テンプレートを適用",
|
||||
"agents.default.description": "ezcpa 内蔵テンプレートと現在の接続先、キー、選択したモデル、認証方式を使い、{name} の接続設定一式を生成して下記のファイルを上書きします。独自設定は置き換えられ、自動バックアップは作成されません。保存したい場合はキャンセルして手動バックアップを作成してください。",
|
||||
"agents.default.confirm": "上書きを確定",
|
||||
'agents.clear.title': 'Codex 設定を消去',
|
||||
"agents.clear.description": "Codex の auth.json と config.toml を削除します。自動バックアップは作成しません。既存の手動バックアップから全ファイルと独自設定を復元できます。",
|
||||
|
||||
+10
-10
@@ -847,10 +847,9 @@ export const en: Record<MessageKey, string> = {
|
||||
"agents.run.title": "Run controls",
|
||||
"agents.management.backups": "Backup and restore",
|
||||
"agents.management.backupsDescription": "Save the configuration on disk, or restore a manual backup. Pending edits are not included in backups.",
|
||||
"agents.management.models": "Model list",
|
||||
"agents.management.modelsDescription": "Manage the models shown in Codex and their properties.",
|
||||
"agents.management.reset": "Reset configuration",
|
||||
"agents.management.resetDescription": "Templates replace custom configuration; clearing deletes configuration files. You can create a manual backup first.",
|
||||
"agents.management.template": "ezcpa configuration template",
|
||||
"agents.management.templateDescription": "Use the built-in ezcpa template to quickly repair problematic agent configurations.",
|
||||
"agents.management.clearDescription": "Clear Codex sign-in credentials and connection settings to sign in or configure access again. No automatic backup is created.",
|
||||
"agents.management.plugin": "Plugin management",
|
||||
"agents.management.pluginVersion": "Installed plugin version: {version}",
|
||||
"agents.management.pluginInstalled": "The Pi plugin is installed.",
|
||||
@@ -979,18 +978,19 @@ export const en: Record<MessageKey, string> = {
|
||||
"agents.modify.title": "Write {name} Configuration",
|
||||
'agents.modify.oauthConfiguration': 'OAuth sign-in configuration mode',
|
||||
'agents.oauthLoginRequired.title': 'Codex sign-in required',
|
||||
'agents.oauthLoginRequired.enableDescription': 'No valid Codex sign-in credentials were found, so OAuth configuration mode cannot be enabled. Sign in to your ChatGPT account in the Codex app. If the Codex app cannot trigger sign-in, use',
|
||||
'agents.oauthLoginRequired.enableDescription': 'No valid Codex sign-in credentials were found, so OAuth configuration mode cannot be enabled. Sign in to your ChatGPT account in the Codex app. If the Codex app cannot trigger sign-in, first open ',
|
||||
'agents.oauthLoginRequired.enableManagementConnector': ', then use ',
|
||||
'agents.oauthLoginRequired.enableClearConfiguration': 'Clear Configuration',
|
||||
'agents.oauthLoginRequired.enableDescriptionSuffix': 'first.',
|
||||
'agents.oauthLoginRequired.enableDescriptionSuffix': '.',
|
||||
'agents.oauthLoginRequired.applyDescription': 'OAuth configuration cannot be applied because no valid Codex sign-in credentials were found. Sign in to your ChatGPT account in Codex, then apply the configuration.',
|
||||
'agents.oauthLoginRequired.launchDescription': 'Codex cannot be started because no valid sign-in credentials were found. Sign in to your ChatGPT account in the Codex app first.',
|
||||
'agents.oauthLoginRequired.confirm': 'Got it',
|
||||
'agents.modify.apply': 'Apply Configuration Changes',
|
||||
'agents.modify.update': 'Update Configuration',
|
||||
'agents.modify.close': 'Close Configuration Changes',
|
||||
"agents.modify.default": "Basic Configuration Template",
|
||||
"agents.modify.default": "Apply ezcpa template",
|
||||
'agents.modify.clear': 'Clear Configuration',
|
||||
"agents.modify.invalid": "Normal updates are stopped. Fix the configuration file, or regenerate it using Rebuild Configuration.",
|
||||
"agents.modify.invalid": "Normal updates are stopped. Fix the configuration file, or use Apply ezcpa template in Configuration management to regenerate the connection configuration.",
|
||||
"agents.modify.zcodeRestart": "Fully quit and restart ZCode after updating configuration; the default model and context length take effect in new sessions.",
|
||||
'agents.pi.installTitle': 'Pi CLIProxyAPI provider',
|
||||
'agents.pi.installDescription': 'Install or update the plugin and repair CPA credentials, the default provider, and the default model.',
|
||||
@@ -1004,8 +1004,8 @@ export const en: Record<MessageKey, string> = {
|
||||
'agents.pi.repairing': 'Applying configuration',
|
||||
'agents.pi.uninstall': 'Uninstall Pi Plugin',
|
||||
'agents.pi.uninstalling': 'Uninstalling plugin',
|
||||
"agents.default.title": "Apply Basic Configuration Template",
|
||||
"agents.default.description": "Overwrite all listed {name} configuration files using the current CPA address, key, selected models and authentication options. Custom contents will be cleared and no automatic backup is created. For Pi, this writes configuration and required plugin references without installing or uninstalling packages.",
|
||||
"agents.default.title": "Apply ezcpa configuration template",
|
||||
"agents.default.description": "Use the built-in ezcpa template with the current server address, key, selected models, and authentication method to generate a complete connection configuration for {name}, overwriting the files listed below. Custom contents will be replaced and no automatic backup is created. To keep them, cancel and create a manual backup first.",
|
||||
"agents.default.confirm": "Confirm Overwrite",
|
||||
'agents.clear.title': 'Clear Codex Configuration',
|
||||
"agents.clear.description": "This deletes auth.json and config.toml from the Codex configuration directory. No automatic backup is created. An existing manual backup can restore the entire file set and custom contents.",
|
||||
|
||||
+10
-10
@@ -846,10 +846,9 @@ export const zhCN = {
|
||||
"agents.run.title": "运行控制",
|
||||
"agents.management.backups": "备份与恢复",
|
||||
"agents.management.backupsDescription": "保存当前磁盘配置,或从手动备份恢复。备份不包含待应用的修改。",
|
||||
"agents.management.models": "模型列表",
|
||||
"agents.management.modelsDescription": "管理 Codex 中显示的模型及其属性。",
|
||||
"agents.management.reset": "重置配置",
|
||||
"agents.management.resetDescription": "模板会覆盖自定义配置;清空操作会删除配置文件。执行前可先手动备份。",
|
||||
"agents.management.template": "ezcpa 配置模板",
|
||||
"agents.management.templateDescription": "使用 ezcpa 内置模板,用于快速修复出现问题的智能体配置",
|
||||
"agents.management.clearDescription": "清除 Codex 的登录凭据和接入设置,用于重新登录或重新配置。不会自动备份。",
|
||||
"agents.management.plugin": "插件管理",
|
||||
"agents.management.pluginVersion": "当前插件版本:{version}",
|
||||
"agents.management.pluginInstalled": "Pi 插件已安装。",
|
||||
@@ -978,18 +977,19 @@ export const zhCN = {
|
||||
"agents.modify.title": "写入 {name} 配置",
|
||||
'agents.modify.oauthConfiguration': 'OAuth登录配置方式',
|
||||
'agents.oauthLoginRequired.title': '需要登录 Codex',
|
||||
'agents.oauthLoginRequired.enableDescription': '未检测到有效的 Codex 登录凭据,无法开启 OAuth 配置模式。请先在 Codex 应用中登录 ChatGPT 账号,如果 Codex 应用无法触发登录,请先使用',
|
||||
'agents.oauthLoginRequired.enableDescription': '未检测到有效的 Codex 登录凭据,无法开启 OAuth 配置模式。请先在 Codex 应用中登录 ChatGPT 账号,如果 Codex 应用无法触发登录,请先在',
|
||||
'agents.oauthLoginRequired.enableManagementConnector': '中',
|
||||
'agents.oauthLoginRequired.enableClearConfiguration': '清空配置',
|
||||
'agents.oauthLoginRequired.enableDescriptionSuffix': '功能。',
|
||||
'agents.oauthLoginRequired.enableDescriptionSuffix': '。',
|
||||
'agents.oauthLoginRequired.applyDescription': '无法应用 OAuth 配置:未检测到有效的 Codex 登录凭据。请先在 Codex 中登录 ChatGPT 账号,然后再应用配置。',
|
||||
'agents.oauthLoginRequired.launchDescription': '无法启动 Codex:未检测到有效的登录凭据。请先在 Codex 应用中登录 ChatGPT 账号。',
|
||||
'agents.oauthLoginRequired.confirm': '我知道了',
|
||||
'agents.modify.apply': '应用配置修改',
|
||||
'agents.modify.update': '更新配置',
|
||||
'agents.modify.close': '关闭配置修改',
|
||||
"agents.modify.default": "基础配置模板",
|
||||
"agents.modify.default": "应用 ezcpa 模板",
|
||||
'agents.modify.clear': '清空配置',
|
||||
"agents.modify.invalid": "普通更新已停止。请修复配置文件,或通过“重建配置”重新生成。",
|
||||
"agents.modify.invalid": "普通更新已停止。请修复配置文件,或在“配置管理”中通过“应用 ezcpa 模板”重新生成接入配置。",
|
||||
"agents.modify.zcodeRestart": "更新配置后,请完全退出并重新启动 ZCode;默认模型和上下文长度会在新会话中生效。",
|
||||
'agents.pi.installTitle': 'Pi CLIProxyAPI 提供方',
|
||||
'agents.pi.installDescription': '安装或更新插件,并修复 CPA 凭据、默认提供方与默认模型',
|
||||
@@ -1003,8 +1003,8 @@ export const zhCN = {
|
||||
'agents.pi.repairing': '正在应用配置',
|
||||
'agents.pi.uninstall': '卸载 Pi 插件',
|
||||
'agents.pi.uninstalling': '正在卸载插件',
|
||||
"agents.default.title": "应用基础配置模板",
|
||||
"agents.default.description": "使用当前 CPA 地址、密钥、所选模型及认证选项覆盖 {name} 的下列全部配置文件。自定义内容会被清除,且不会自动备份。Pi 仅写入配置和必要插件引用,不安装或卸载插件包。",
|
||||
"agents.default.title": "应用 ezcpa 配置模板",
|
||||
"agents.default.description": "将使用 ezcpa 内置模板,结合当前服务地址、密钥、所选模型和认证方式,为 {name} 生成完整的接入配置,并覆盖下列配置文件。现有自定义内容会被替换,且不会自动备份;如需保留,请先取消并手动备份。",
|
||||
"agents.default.confirm": "确认覆盖",
|
||||
'agents.clear.title': '清空 Codex 配置',
|
||||
"agents.clear.description": "这会删除 Codex 配置目录中的 auth.json 和 config.toml,不会自动备份。已有手动备份可恢复整组原始文件及自定义内容。",
|
||||
|
||||
@@ -75,12 +75,12 @@ export function AgentConfigurationFeedback({ pending, notice, error, description
|
||||
|
||||
export function AgentConfigManagementPanel({
|
||||
pi, codex, busyAction, canTemplate, canUpdatePi, canUninstallPi, pluginInstalled, pluginVersion, updateLabel,
|
||||
onBackup, onRestore, onTemplate, onClear, onCatalog, onUpdatePi, onUninstallPi,
|
||||
onBackup, onRestore, onTemplate, onClear, onUpdatePi, onUninstallPi,
|
||||
}: {
|
||||
pi: boolean; codex: boolean; busyAction: string | null; canTemplate: boolean;
|
||||
canUpdatePi: boolean; canUninstallPi: boolean; pluginInstalled: boolean; pluginVersion: string | null; updateLabel: string;
|
||||
onBackup: () => void; onRestore: () => void; onTemplate: () => void; onClear: () => void;
|
||||
onCatalog: () => void; onUpdatePi: () => void; onUninstallPi: () => void;
|
||||
onUpdatePi: () => void; onUninstallPi: () => void;
|
||||
}) {
|
||||
const { t } = useI18n();
|
||||
const busy = busyAction !== null;
|
||||
@@ -94,15 +94,16 @@ export function AgentConfigManagementPanel({
|
||||
<button type="button" className="secondary-button" onClick={onRestore} disabled={busy}>{t('agents.backup.button')}</button>
|
||||
</div>
|
||||
</section> : null}
|
||||
{codex ? <section className="agent-management-row">
|
||||
<div><h3>{t('agents.management.models')}</h3><p>{t('agents.management.modelsDescription')}</p></div>
|
||||
<div className="agent-management-actions"><button type="button" className="secondary-button" onClick={onCatalog} disabled={busy}>{t('agents.catalog.button')}</button></div>
|
||||
</section> : null}
|
||||
{!pi ? <section className="agent-management-row agent-management-reset">
|
||||
<div><h3>{t('agents.management.reset')}</h3><p>{t('agents.management.resetDescription')}</p></div>
|
||||
{!pi ? <section className="agent-management-row agent-management-template">
|
||||
<div><h3>{t('agents.management.template')}</h3><p>{t('agents.management.templateDescription')}</p></div>
|
||||
<div className="agent-management-actions">
|
||||
<button type="button" className="secondary-button" onClick={onTemplate} disabled={busy || !canTemplate}>{t('agents.modify.default')}</button>
|
||||
{codex ? <button type="button" className="danger-button" onClick={onClear} disabled={busy}><Trash2 size={16} />{t('agents.modify.clear')}</button> : null}
|
||||
</div>
|
||||
</section> : null}
|
||||
{codex ? <section className="agent-management-row">
|
||||
<div><h3>{t('agents.modify.clear')}</h3><p>{t('agents.management.clearDescription')}</p></div>
|
||||
<div className="agent-management-actions">
|
||||
<button type="button" className="danger-button" onClick={onClear} disabled={busy}><Trash2 size={16} />{t('agents.modify.clear')}</button>
|
||||
</div>
|
||||
</section> : null}
|
||||
{pi ? <section className="agent-management-row">
|
||||
|
||||
@@ -20,6 +20,7 @@ import {
|
||||
LoaderCircle,
|
||||
RefreshCw,
|
||||
Search,
|
||||
SlidersHorizontal,
|
||||
Trash2,
|
||||
X,
|
||||
} from 'lucide-react';
|
||||
@@ -1632,11 +1633,21 @@ export function AgentsPage({ embedded = false, onConfigurationApplied }: AgentsP
|
||||
const oauthLoginRequiredDescription = oauthLoginRequiredAction === 'enable' ? (
|
||||
<>
|
||||
{t('agents.oauthLoginRequired.enableDescription')}
|
||||
<strong>{t('agents.tabs.management')}</strong>
|
||||
{t('agents.oauthLoginRequired.enableManagementConnector')}
|
||||
<strong>{t('agents.oauthLoginRequired.enableClearConfiguration')}</strong>
|
||||
{t('agents.oauthLoginRequired.enableDescriptionSuffix')}
|
||||
</>
|
||||
) : oauthLoginRequiredAction ? t(`agents.oauthLoginRequired.${oauthLoginRequiredAction}Description`) : '';
|
||||
|
||||
const codexCatalogButton = selected === 'codex' ? (
|
||||
<button type="button" className="secondary-button agent-codex-catalog-button"
|
||||
onClick={() => setCodexCatalogDialogOpen(true)} disabled={busy}>
|
||||
<SlidersHorizontal size={16} />
|
||||
{t('agents.catalog.button')}
|
||||
</button>
|
||||
) : null;
|
||||
|
||||
return (
|
||||
<section className={`page management-page agents-page${embedded ? ' agents-page-embedded' : ''}`}>
|
||||
<header className="management-header">
|
||||
@@ -1760,6 +1771,7 @@ export function AgentsPage({ embedded = false, onConfigurationApplied }: AgentsP
|
||||
onChange={selectEmbeddedModel}
|
||||
onRefresh={refreshModels}
|
||||
/>
|
||||
{codexCatalogButton}
|
||||
</div>
|
||||
|
||||
<div className="agent-minimal-actions">
|
||||
@@ -1885,6 +1897,7 @@ export function AgentsPage({ embedded = false, onConfigurationApplied }: AgentsP
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{codexCatalogButton}
|
||||
<div id="agent-signin-hint" className="agent-signin-explanation" hidden={!connectionHelpOpen}>
|
||||
<dl>
|
||||
<div><dt>{t('agents.modify.authApiKey')}</dt><dd>{t('agents.modify.authApiKeyHint')}</dd></div>
|
||||
@@ -2064,7 +2077,7 @@ export function AgentsPage({ embedded = false, onConfigurationApplied }: AgentsP
|
||||
updateLabel={piPluginUpdateAvailable ? piPluginUpdateTitle ?? '' : ''}
|
||||
onBackup={() => void createManualBackup()} onRestore={() => setBackupsOpen(true)}
|
||||
onTemplate={() => void openDefaultConfirmation()} onClear={openClearConfirmation}
|
||||
onCatalog={() => setCodexCatalogDialogOpen(true)} onUpdatePi={() => void updatePiProvider()}
|
||||
onUpdatePi={() => void updatePiProvider()}
|
||||
onUninstallPi={() => void uninstallPiProvider()} />
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
@@ -22,7 +22,7 @@ const assert = require('node:assert/strict');
|
||||
assert.equal((await calls('create_agent_config_backup')).length, 0);
|
||||
await backup();
|
||||
assert.deepEqual((await calls('create_agent_config_backup'))[0].args, { client: 'codex' });
|
||||
await page.getByRole('button', { name: '基础配置模板', exact: true }).click();
|
||||
await page.getByRole('button', { name: '应用 ezcpa 模板', exact: true }).click();
|
||||
await page.getByRole('button', { name: '确认覆盖', exact: true }).waitFor();
|
||||
assert.equal(await page.locator('.agent-template-files li').count(), 3);
|
||||
assert.equal((await calls('apply_agent_config_template')).length, 0);
|
||||
@@ -51,7 +51,7 @@ const assert = require('node:assert/strict');
|
||||
await open('state=invalid');
|
||||
assert.ok(await page.getByRole('button', { name: '更新配置', exact: true }).isDisabled());
|
||||
await manage();
|
||||
assert.ok(await page.getByRole('button', { name: '基础配置模板', exact: true }).isEnabled());
|
||||
assert.ok(await page.getByRole('button', { name: '应用 ezcpa 模板', exact: true }).isEnabled());
|
||||
await backup(); await choose();
|
||||
assert.ok(await page.getByRole('button', { name: '恢复此版本', exact: true }).isDisabled());
|
||||
assert.ok(await page.getByRole('button', { name: '删除此版本', exact: true }).isEnabled());
|
||||
@@ -71,7 +71,7 @@ const assert = require('node:assert/strict');
|
||||
await page.goto('http://localhost:1421/tests/fixtures/agent-backups.html?' + query);
|
||||
await page.getByRole('button', { name: '更新配置', exact: true }).waitFor();
|
||||
await manage();
|
||||
for (const name of ['手动备份', '恢复备份', '基础配置模板']) {
|
||||
for (const name of ['手动备份', '恢复备份', '应用 ezcpa 模板']) {
|
||||
assert.equal(await page.getByRole('button', { name, exact: true }).count(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,8 +29,8 @@ const path = require('node:path');
|
||||
for (const mode of ['', 'embedded&']) {
|
||||
await open(mode + 'defer-restart');
|
||||
assert.equal(await button('手动备份').count(), 0);
|
||||
assert.equal(await button('基础配置模板').count(), 0);
|
||||
assert.equal(await button('模型列表设置').count(), 0);
|
||||
assert.equal(await button('应用 ezcpa 模板').count(), 0);
|
||||
assert.ok(await page.locator('#agent-subpage-panel-core').getByRole('button', { name: '模型列表设置', exact: true }).isVisible());
|
||||
assert.equal(await page.locator('.agent-launch-actions button').count(), 3);
|
||||
assert.equal(await tab('会话管理').count(), mode ? 0 : 1);
|
||||
await page.locator('.agent-model-trigger').click();
|
||||
@@ -51,7 +51,8 @@ const path = require('node:path');
|
||||
await pending();
|
||||
assert.equal(await page.locator('.agent-launch-actions').count(), 0);
|
||||
assert.equal(await button('更新配置').count(), 0);
|
||||
for (const name of ['手动备份', '恢复备份', '基础配置模板', '清空配置', '模型列表设置']) {
|
||||
assert.equal(await button('模型列表设置').count(), 0);
|
||||
for (const name of ['手动备份', '恢复备份', '应用 ezcpa 模板', '清空配置']) {
|
||||
assert.ok(await button(name).isVisible());
|
||||
}
|
||||
await tab('配置管理').press('ArrowLeft');
|
||||
|
||||
@@ -119,7 +119,7 @@ const assert = require('node:assert/strict');
|
||||
await page.getByRole('button', { name: '确认恢复', exact: true }).click();
|
||||
await page.locator('.agent-backup-modal').waitFor({ state: 'detached' });
|
||||
} else {
|
||||
await page.getByRole('button', { name: '基础配置模板', exact: true }).click();
|
||||
await page.getByRole('button', { name: '应用 ezcpa 模板', exact: true }).click();
|
||||
await page.getByRole('button', { name: '确认覆盖', exact: true }).click();
|
||||
await page.getByRole('button', { name: '确认覆盖', exact: true }).waitFor({ state: 'detached' });
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user