feat(settings): 默认权限模式改为批准、消息流默认极简模式
- personalization_manager:default_permission_mode 默认与 sanitize 兜底 → approval;block_display_mode → minimal - stores/personalization.ts:同步默认值、缓存加载兜底与一次性迁移条件 - 快速模式描述「低思考」→「无思考」(中英 appCore 同步) Co-authored-by: Astrion powered by Kimi-K3 <astrion-agent@users.noreply.github.com>
This commit is contained in:
parent
a1c9ac565b
commit
fe7896e29f
@ -79,7 +79,7 @@ DEFAULT_PERSONALIZATION_CONFIG: Dict[str, Any] = {
|
|||||||
"skills_catalog_snapshot": None,
|
"skills_catalog_snapshot": None,
|
||||||
"default_run_mode": "thinking",
|
"default_run_mode": "thinking",
|
||||||
"default_reasoning_effort": None, # 默认推理强度:None=默认(不传参)
|
"default_reasoning_effort": None, # 默认推理强度:None=默认(不传参)
|
||||||
"default_permission_mode": "unrestricted",
|
"default_permission_mode": "approval",
|
||||||
"default_work_mode": "plan", # 默认运行模式:plan / ask / execute
|
"default_work_mode": "plan", # 默认运行模式:plan / ask / execute
|
||||||
"auto_generate_title": True,
|
"auto_generate_title": True,
|
||||||
"title_model": "", # 对话标题生成使用的子智能体模型条目名(空=跟随主对话默认模型)
|
"title_model": "", # 对话标题生成使用的子智能体模型条目名(空=跟随主对话默认模型)
|
||||||
@ -107,7 +107,7 @@ DEFAULT_PERSONALIZATION_CONFIG: Dict[str, Any] = {
|
|||||||
"hide_tool_approval_panel": True, # 自动审核模式下不自动打开工具审核面板(默认开启)
|
"hide_tool_approval_panel": True, # 自动审核模式下不自动打开工具审核面板(默认开启)
|
||||||
"enhanced_tool_display": True, # 增强工具显示
|
"enhanced_tool_display": True, # 增强工具显示
|
||||||
"compact_message_display": "full", # 简略消息显示:full-完整原始内容 / brief-一行概要
|
"compact_message_display": "full", # 简略消息显示:full-完整原始内容 / brief-一行概要
|
||||||
"block_display_mode": "stacked", # 堆叠块显示模式:traditional-传统列表 / stacked-堆叠动画 / minimal-极简模式
|
"block_display_mode": "minimal", # 堆叠块显示模式:traditional-传统列表 / stacked-堆叠动画 / minimal-极简模式
|
||||||
"show_status_avatar": True, # 是否显示助手状态形象
|
"show_status_avatar": True, # 是否显示助手状态形象
|
||||||
"stacked_hide_borders": False, # 堆叠块隐藏边线
|
"stacked_hide_borders": False, # 堆叠块隐藏边线
|
||||||
"minimal_expand_height_limited": True, # 极简模式展开摘要行时限制最大高度
|
"minimal_expand_height_limited": True, # 极简模式展开摘要行时限制最大高度
|
||||||
@ -366,7 +366,7 @@ def sanitize_personalization_payload(
|
|||||||
if isinstance(permission_mode, str) and permission_mode in ALLOWED_PERMISSION_MODES:
|
if isinstance(permission_mode, str) and permission_mode in ALLOWED_PERMISSION_MODES:
|
||||||
base["default_permission_mode"] = permission_mode
|
base["default_permission_mode"] = permission_mode
|
||||||
elif base.get("default_permission_mode") not in ALLOWED_PERMISSION_MODES:
|
elif base.get("default_permission_mode") not in ALLOWED_PERMISSION_MODES:
|
||||||
base["default_permission_mode"] = "unrestricted"
|
base["default_permission_mode"] = "approval"
|
||||||
|
|
||||||
work_mode = data.get("default_work_mode", base.get("default_work_mode"))
|
work_mode = data.get("default_work_mode", base.get("default_work_mode"))
|
||||||
if isinstance(work_mode, str) and work_mode.strip().lower() in ALLOWED_WORK_MODES:
|
if isinstance(work_mode, str) and work_mode.strip().lower() in ALLOWED_WORK_MODES:
|
||||||
@ -518,7 +518,7 @@ def sanitize_personalization_payload(
|
|||||||
if isinstance(block_display_mode, str) and block_display_mode.strip().lower() in ALLOWED_BLOCK_DISPLAY_MODES:
|
if isinstance(block_display_mode, str) and block_display_mode.strip().lower() in ALLOWED_BLOCK_DISPLAY_MODES:
|
||||||
base["block_display_mode"] = block_display_mode.strip().lower()
|
base["block_display_mode"] = block_display_mode.strip().lower()
|
||||||
else:
|
else:
|
||||||
base["block_display_mode"] = "stacked"
|
base["block_display_mode"] = "minimal"
|
||||||
|
|
||||||
# 堆叠块隐藏边线
|
# 堆叠块隐藏边线
|
||||||
if "stacked_hide_borders" in data:
|
if "stacked_hide_borders" in data:
|
||||||
|
|||||||
@ -27,7 +27,7 @@ export default {
|
|||||||
|
|
||||||
// Header run mode / model (computed.ts)
|
// Header run mode / model (computed.ts)
|
||||||
fastMode: 'Fast mode',
|
fastMode: 'Fast mode',
|
||||||
fastModeDesc: 'Low reasoning, faster responses',
|
fastModeDesc: 'No reasoning, faster responses',
|
||||||
thinkingModeDesc: 'Continuous reasoning for complex tasks',
|
thinkingModeDesc: 'Continuous reasoning for complex tasks',
|
||||||
modelNotSelected: 'No model selected',
|
modelNotSelected: 'No model selected',
|
||||||
// Plural forms in English; callers should pass both {n} and {count}.
|
// Plural forms in English; callers should pass both {n} and {count}.
|
||||||
|
|||||||
@ -31,7 +31,7 @@ export default {
|
|||||||
|
|
||||||
// ── 头部运行模式 / 模型(computed.ts) ──
|
// ── 头部运行模式 / 模型(computed.ts) ──
|
||||||
fastMode: '快速模式',
|
fastMode: '快速模式',
|
||||||
fastModeDesc: '低思考,响应更快',
|
fastModeDesc: '无思考,响应更快',
|
||||||
thinkingModeDesc: '持续推理,适合复杂任务',
|
thinkingModeDesc: '持续推理,适合复杂任务',
|
||||||
modelNotSelected: '未选择模型',
|
modelNotSelected: '未选择模型',
|
||||||
// 复数:英文用管道(调用方需同时传 {n} 与 {count});中文不区分
|
// 复数:英文用管道(调用方需同时传 {n} 与 {count});中文不区分
|
||||||
|
|||||||
@ -215,12 +215,12 @@ const loadCachedStackedHideBorders = (): boolean => {
|
|||||||
|
|
||||||
const loadCachedBlockDisplayMode = (): BlockDisplayMode => {
|
const loadCachedBlockDisplayMode = (): BlockDisplayMode => {
|
||||||
if (typeof window === 'undefined' || !window.localStorage) {
|
if (typeof window === 'undefined' || !window.localStorage) {
|
||||||
return 'stacked';
|
return 'minimal';
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const raw = window.localStorage.getItem(EXPERIMENT_STORAGE_KEY);
|
const raw = window.localStorage.getItem(EXPERIMENT_STORAGE_KEY);
|
||||||
if (!raw) {
|
if (!raw) {
|
||||||
return 'stacked';
|
return 'minimal';
|
||||||
}
|
}
|
||||||
const parsed = JSON.parse(raw);
|
const parsed = JSON.parse(raw);
|
||||||
if (
|
if (
|
||||||
@ -232,7 +232,7 @@ const loadCachedBlockDisplayMode = (): BlockDisplayMode => {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn('读取堆叠块显示模式缓存失败:', error);
|
console.warn('读取堆叠块显示模式缓存失败:', error);
|
||||||
}
|
}
|
||||||
return 'stacked';
|
return 'minimal';
|
||||||
};
|
};
|
||||||
|
|
||||||
const persistStackedHideBorders = (value: boolean) => {
|
const persistStackedHideBorders = (value: boolean) => {
|
||||||
@ -337,7 +337,7 @@ const defaultForm = (): PersonalForm => ({
|
|||||||
disabled_tool_categories: [],
|
disabled_tool_categories: [],
|
||||||
default_run_mode: null,
|
default_run_mode: null,
|
||||||
default_reasoning_effort: null,
|
default_reasoning_effort: null,
|
||||||
default_permission_mode: 'unrestricted',
|
default_permission_mode: 'approval',
|
||||||
default_work_mode: 'plan',
|
default_work_mode: 'plan',
|
||||||
versioning_enabled_by_default: true,
|
versioning_enabled_by_default: true,
|
||||||
versioning_backup_mode: 'shallow',
|
versioning_backup_mode: 'shallow',
|
||||||
@ -370,7 +370,7 @@ const defaultForm = (): PersonalForm => ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const defaultExperimentState = (): ExperimentState => ({
|
const defaultExperimentState = (): ExperimentState => ({
|
||||||
blockDisplayMode: 'stacked',
|
blockDisplayMode: 'minimal',
|
||||||
compactMessageDisplay: 'full'
|
compactMessageDisplay: 'full'
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -543,7 +543,7 @@ export const usePersonalizationStore = defineStore('personalization', {
|
|||||||
data.block_display_mode === 'stacked' ||
|
data.block_display_mode === 'stacked' ||
|
||||||
data.block_display_mode === 'minimal'
|
data.block_display_mode === 'minimal'
|
||||||
? data.block_display_mode
|
? data.block_display_mode
|
||||||
: 'stacked',
|
: 'minimal',
|
||||||
show_status_avatar: data.show_status_avatar !== false,
|
show_status_avatar: data.show_status_avatar !== false,
|
||||||
show_git_status_bar: data.show_git_status_bar !== false,
|
show_git_status_bar: data.show_git_status_bar !== false,
|
||||||
auto_open_terminal_panel: data.auto_open_terminal_panel !== false,
|
auto_open_terminal_panel: data.auto_open_terminal_panel !== false,
|
||||||
@ -593,7 +593,7 @@ export const usePersonalizationStore = defineStore('personalization', {
|
|||||||
data.default_permission_mode === 'auto_approval' ||
|
data.default_permission_mode === 'auto_approval' ||
|
||||||
data.default_permission_mode === 'unrestricted'
|
data.default_permission_mode === 'unrestricted'
|
||||||
? data.default_permission_mode
|
? data.default_permission_mode
|
||||||
: 'unrestricted',
|
: 'approval',
|
||||||
default_work_mode:
|
default_work_mode:
|
||||||
data.default_work_mode === 'plan' ||
|
data.default_work_mode === 'plan' ||
|
||||||
data.default_work_mode === 'ask' ||
|
data.default_work_mode === 'ask' ||
|
||||||
@ -678,9 +678,9 @@ export const usePersonalizationStore = defineStore('personalization', {
|
|||||||
this.form = { ...this.form, compact_message_display: 'brief' };
|
this.form = { ...this.form, compact_message_display: 'brief' };
|
||||||
void this.persistCompactMessageDisplay('brief');
|
void this.persistCompactMessageDisplay('brief');
|
||||||
}
|
}
|
||||||
// 一次性迁移:堆叠块显示模式旧版仅在 localStorage 保存,后端默认 stacked 时回写本地缓存值。
|
// 一次性迁移:堆叠块显示模式旧版仅在 localStorage 保存,后端默认 minimal 时回写本地缓存值。
|
||||||
const cachedBlockMode = this.experiments.blockDisplayMode;
|
const cachedBlockMode = this.experiments.blockDisplayMode;
|
||||||
if (this.form.block_display_mode === 'stacked' && cachedBlockMode !== 'stacked') {
|
if (this.form.block_display_mode === 'minimal' && cachedBlockMode !== 'minimal') {
|
||||||
this.form = { ...this.form, block_display_mode: cachedBlockMode };
|
this.form = { ...this.form, block_display_mode: cachedBlockMode };
|
||||||
}
|
}
|
||||||
this.experiments = {
|
this.experiments = {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user