@geminilight/mindos 0.6.38 → 0.6.39
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 +14 -2
- package/README_zh.md +14 -2
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +17 -17
- package/_standalone/.next/build-manifest.json +2 -2
- package/_standalone/.next/cache/.previewinfo +1 -1
- package/_standalone/.next/cache/.rscinfo +1 -1
- package/_standalone/.next/cache/config.json +3 -3
- package/_standalone/.next/prerender-manifest.json +3 -3
- package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error.html +2 -2
- package/_standalone/.next/server/app/_global-error.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +1 -1
- package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +1 -1
- package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +29 -29
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +1 -1
- package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +1 -1
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +1 -1
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +1 -1
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/login/page.js +1 -1
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +1 -1
- package/_standalone/.next/server/app/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/setup/page.js +1 -1
- package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/trash/page.js +2 -2
- package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app-paths-manifest.json +17 -17
- package/_standalone/.next/server/chunks/{8407.js → 1473.js} +2 -2
- package/_standalone/.next/server/chunks/4931.js +24 -24
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/chunks/{1263-79beb8734dee7bbd.js → 1263-6df1734e4273adb1.js} +2 -2
- package/_standalone/.next/static/chunks/app/{layout-aab90c2b4faf8d57.js → layout-d91cdbe2ecf135e1.js} +20 -20
- package/_standalone/.next/static/chunks/app/{page-9a15cf85f0962c59.js → page-718fdf170428b43c.js} +2 -2
- package/_standalone/.next/static/chunks/app/trash/page-89b1430cc8a16f18.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/{page-35811d7e49e08157.js → page-6e3dc47699a01de1.js} +2 -2
- package/_standalone/.next/trace +53 -53
- package/_standalone/components/ask/AskContent.tsx +6 -6
- package/_standalone/components/settings/UpdateTab.tsx +371 -107
- package/_standalone/data/skills/mindos/SKILL.md +24 -9
- package/_standalone/data/skills/mindos-zh/SKILL.md +24 -9
- package/_standalone/lib/i18n/modules/settings.ts +32 -0
- package/app/app/api/ask/route.ts +12 -2
- package/app/components/ask/AskContent.tsx +6 -6
- package/app/components/settings/UpdateTab.tsx +371 -107
- package/app/data/skills/mindos/SKILL.md +24 -9
- package/app/data/skills/mindos-zh/SKILL.md +24 -9
- package/app/lib/i18n/modules/settings.ts +32 -0
- package/package.json +1 -1
- package/scripts/build-runtime-archive.sh +113 -0
- package/skills/mindos/SKILL.md +24 -9
- package/skills/mindos/references/write-supplement.md +46 -4
- package/skills/mindos-zh/SKILL.md +24 -9
- package/skills/mindos-zh/references/write-supplement.md +47 -5
- package/_standalone/.next/static/chunks/app/trash/page-7df0139c6b0f87e0.js +0 -1
- /package/_standalone/.next/static/{VAb8MoUUpoXjVJalRJogO → ushZ_NJ8rE3rG5hZfaYOX}/_buildManifest.js +0 -0
- /package/_standalone/.next/static/{VAb8MoUUpoXjVJalRJogO → ushZ_NJ8rE3rG5hZfaYOX}/_ssgManifest.js +0 -0
|
@@ -6,11 +6,15 @@ description: >
|
|
|
6
6
|
update notes, search knowledge base, organize, SOP, retrospective, CSV, handoff, route notes, distill experience.
|
|
7
7
|
仅 mindRoot 知识库内任务。不用于:改代码仓库/项目文档/KB 外路径。
|
|
8
8
|
核心概念:空间、指令(INSTRUCTION.md)、技能(SKILL.md);笔记可承载指令与技能。
|
|
9
|
+
当用户说"帮我记下来"、"搜一下我的笔记"、"更新知识库"、"整理文件"、"执行工作流"、
|
|
10
|
+
"记录这次会议的决策"、"追加到表格"、"交接给下一个 Agent" 时触发。
|
|
11
|
+
也适用于:save/record a note, search KB, update/edit files, run SOP, capture decisions,
|
|
12
|
+
append CSV rows, cross-agent handoff — 所有 mindRoot 知识库内的读写操作。
|
|
9
13
|
---
|
|
10
14
|
|
|
11
15
|
# MindOS Skill
|
|
12
16
|
|
|
13
|
-
<!-- version: 1.3.
|
|
17
|
+
<!-- version: 1.3.2 -->
|
|
14
18
|
|
|
15
19
|
**每次任务前,内化这 5 条规则:**
|
|
16
20
|
|
|
@@ -82,8 +86,7 @@ description: >
|
|
|
82
86
|
└─ 先问清楚。基于 KB 状态提出 2-3 个具体选项。不要开始编辑。
|
|
83
87
|
```
|
|
84
88
|
|
|
85
|
-
**以上任何写入 / SOP / 结构路径 →
|
|
86
|
-
包含:启动协议、写工具选型、各路径详细执行步骤。
|
|
89
|
+
**以上任何写入 / SOP / 结构路径 → 写入补充已加载到上下文(见下方或下一个上下文块中的 `## 写入与工作流补充` 章节)。**
|
|
87
90
|
|
|
88
91
|
---
|
|
89
92
|
|
|
@@ -96,7 +99,7 @@ description: >
|
|
|
96
99
|
| 找文件 | `mindos_search_notes`(2-4 条并行关键词变体)| 单关键词搜索 |
|
|
97
100
|
| 读内容 | `mindos_read_file` 或 `mindos_read_lines`(大文件) | 只需 10 行却读整文件 |
|
|
98
101
|
|
|
99
|
-
写入、结构变更、历史工具 →
|
|
102
|
+
写入、结构变更、历史工具 → 见写入与工作流补充(已加载到下方或下一个上下文块)。
|
|
100
103
|
|
|
101
104
|
### 回退
|
|
102
105
|
|
|
@@ -111,15 +114,27 @@ description: >
|
|
|
111
114
|
|------|----------|----------|
|
|
112
115
|
| **只读问答** | 查找 / 总结 / 引用 | 目录树推断 → 搜索 → 读取 → 标注来源 → 明确说信息缺口 |
|
|
113
116
|
|
|
114
|
-
写入模式详细执行步骤 →
|
|
117
|
+
写入模式详细执行步骤 → 见写入与工作流补充(已加载到下方或下一个上下文块)。
|
|
115
118
|
|
|
116
119
|
---
|
|
117
120
|
|
|
118
|
-
##
|
|
121
|
+
## 判断启发式规则
|
|
119
122
|
|
|
120
|
-
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
+
**保存意图 — 读写边界识别**
|
|
124
|
+
- "帮我记下来" / "记录一下" / "保存这个" = 写入
|
|
125
|
+
- "搜一下有没有关于 X 的笔记" / "总结上周的工作" = 只读
|
|
126
|
+
- 模糊边界("整理一下这些内容")→ 先问:是读取展示,还是写回 KB?
|
|
127
|
+
|
|
128
|
+
**文件位置不确定时**
|
|
129
|
+
- 扫目录树 5 秒内定不下来 → 不要自创新目录;放语义最近的已有目录,告知用户
|
|
130
|
+
- 用户说"随便放个地方" → 放 inbox 或最顶层通用目录,任务后提议归类(触发 Structure classification hook)
|
|
131
|
+
|
|
132
|
+
**范围蔓延信号**
|
|
133
|
+
- 单条输入导致路由表 > 5 个文件 → 暂停,先确认范围;用户鲜少意图批量重写
|
|
134
|
+
- "把这些都更新一下" + 内容跨越多个主题 → 拆成批次确认,不一次性执行
|
|
135
|
+
|
|
136
|
+
**引用纪律**
|
|
137
|
+
- KB 中引用的事实必须附带文件路径,便于用户核查
|
|
123
138
|
|
|
124
139
|
---
|
|
125
140
|
|
|
@@ -271,6 +271,22 @@ export const settingsEn = {
|
|
|
271
271
|
desktopReady: 'Update downloaded. Restart to apply.',
|
|
272
272
|
desktopRestart: 'Restart Now',
|
|
273
273
|
desktopHint: 'Updates are delivered through the Desktop app auto-updater.',
|
|
274
|
+
// Core Hot Update (Desktop only)
|
|
275
|
+
coreTitle: 'MindOS Core',
|
|
276
|
+
coreUpToDate: 'Core is up to date',
|
|
277
|
+
coreAvailable: (size: string) => `Update available (${size})`,
|
|
278
|
+
coreDownloading: 'Downloading...',
|
|
279
|
+
coreCancel: 'Cancel',
|
|
280
|
+
coreReady: 'Ready — restart services to apply',
|
|
281
|
+
coreRestartServices: 'Restart Services',
|
|
282
|
+
coreApplying: 'Applying update...',
|
|
283
|
+
coreApplied: 'Updated! Reloading...',
|
|
284
|
+
coreError: 'Core update failed.',
|
|
285
|
+
coreRetry: 'Retry',
|
|
286
|
+
coreDesktopTooOld: (version: string) => `v${version} requires a newer Desktop version.`,
|
|
287
|
+
coreDesktopTooOldHint: 'Please update MindOS Desktop first.',
|
|
288
|
+
coreHint: 'Core updates only restart services — no app restart needed.',
|
|
289
|
+
shellTitle: 'MindOS Desktop',
|
|
274
290
|
},
|
|
275
291
|
uninstall: {
|
|
276
292
|
title: 'Uninstall MindOS',
|
|
@@ -569,6 +585,22 @@ export const settingsZh = {
|
|
|
569
585
|
desktopReady: '更新已下载,重启后生效。',
|
|
570
586
|
desktopRestart: '立即重启',
|
|
571
587
|
desktopHint: '更新通过桌面端自动更新推送。',
|
|
588
|
+
// Core Hot Update
|
|
589
|
+
coreTitle: 'MindOS Core',
|
|
590
|
+
coreUpToDate: 'Core 已是最新',
|
|
591
|
+
coreAvailable: (size: string) => `有新版本可用(${size})`,
|
|
592
|
+
coreDownloading: '下载中...',
|
|
593
|
+
coreCancel: '取消',
|
|
594
|
+
coreReady: '已就绪 — 重启服务即可生效',
|
|
595
|
+
coreRestartServices: '重启服务',
|
|
596
|
+
coreApplying: '正在应用更新...',
|
|
597
|
+
coreApplied: '更新成功!正在刷新...',
|
|
598
|
+
coreError: 'Core 更新失败。',
|
|
599
|
+
coreRetry: '重试',
|
|
600
|
+
coreDesktopTooOld: (version: string) => `v${version} 需要更新版本的 Desktop。`,
|
|
601
|
+
coreDesktopTooOldHint: '请先更新 MindOS Desktop。',
|
|
602
|
+
coreHint: 'Core 更新只需重启服务,无需重启应用。',
|
|
603
|
+
shellTitle: 'MindOS Desktop',
|
|
572
604
|
},
|
|
573
605
|
uninstall: {
|
|
574
606
|
title: '卸载 MindOS',
|
package/app/app/api/ask/route.ts
CHANGED
|
@@ -383,7 +383,11 @@ export async function POST(req: NextRequest) {
|
|
|
383
383
|
? path.join(process.env.MINDOS_PROJECT_ROOT, 'app')
|
|
384
384
|
: process.cwd();
|
|
385
385
|
const skillPath = path.join(appDir, `data/skills/${skillDirName}/SKILL.md`);
|
|
386
|
+
const skillWritePath = path.join(appDir, `data/skills/${skillDirName}/references/write-supplement.md`);
|
|
386
387
|
const skill = readAbsoluteFile(skillPath);
|
|
388
|
+
const skillWrite = readAbsoluteFile(skillWritePath);
|
|
389
|
+
|
|
390
|
+
console.log(`[ask] SKILL skill=${skill.ok}, write-supplement=${skillWrite.ok}`);
|
|
387
391
|
|
|
388
392
|
const userSkillRules = readKnowledgeFile('user-skill-rules.md');
|
|
389
393
|
|
|
@@ -423,11 +427,12 @@ export async function POST(req: NextRequest) {
|
|
|
423
427
|
if (tm.ok && tm.content.trim().length > MIN_USEFUL_CONTENT_LENGTH) bootstrap.target_config_md = tm;
|
|
424
428
|
}
|
|
425
429
|
|
|
426
|
-
// Only report failures + truncation warnings for loaded files
|
|
427
430
|
const initFailures: string[] = [];
|
|
428
431
|
const truncationWarnings: string[] = [];
|
|
429
432
|
if (!skill.ok) initFailures.push(`skill.mindos: failed (${skill.error})`);
|
|
430
433
|
if (skill.ok && skill.truncated) truncationWarnings.push('skill.mindos was truncated');
|
|
434
|
+
if (!skillWrite.ok) initFailures.push(`skill.mindos-write-supplement: failed (${skillWrite.error})`);
|
|
435
|
+
if (skillWrite.ok && skillWrite.truncated) truncationWarnings.push('skill.mindos-write-supplement was truncated');
|
|
431
436
|
if (userSkillRules.ok && userSkillRules.truncated) truncationWarnings.push('user-skill-rules.md was truncated');
|
|
432
437
|
if (!bootstrap.instruction.ok) initFailures.push(`bootstrap.instruction: failed (${bootstrap.instruction.error})`);
|
|
433
438
|
if (bootstrap.instruction.ok && bootstrap.instruction.truncated) truncationWarnings.push('bootstrap.instruction was truncated');
|
|
@@ -445,7 +450,12 @@ export async function POST(req: NextRequest) {
|
|
|
445
450
|
: `Initialization issues:\n${initFailures.join('\n')}\nmind_root=${getMindRoot()}${targetDir ? `, target_dir=${targetDir}` : ''}${truncationWarnings.length > 0 ? `\n⚠️ Warnings:\n${truncationWarnings.join('\n')}` : ''}`;
|
|
446
451
|
|
|
447
452
|
const initContextBlocks: string[] = [];
|
|
448
|
-
|
|
453
|
+
const skillParts: string[] = [];
|
|
454
|
+
if (skill.ok) skillParts.push(skill.content);
|
|
455
|
+
if (skillWrite.ok) skillParts.push(skillWrite.content);
|
|
456
|
+
if (skillParts.length > 0) {
|
|
457
|
+
initContextBlocks.push(`## mindos_skill_md\n\n${skillParts.join('\n\n---\n\n')}`);
|
|
458
|
+
}
|
|
449
459
|
if (userSkillRules.ok && !userSkillRules.truncated && userSkillRules.content.trim()) {
|
|
450
460
|
initContextBlocks.push(`## user_skill_rules\n\nUser personalization rules (user-skill-rules.md):\n\n${userSkillRules.content}`);
|
|
451
461
|
}
|
|
@@ -544,25 +544,25 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
|
|
|
544
544
|
{isPanel ? 'MindOS Agent' : t.ask.title}
|
|
545
545
|
</span>
|
|
546
546
|
</div>
|
|
547
|
-
<div className="flex items-center gap-1">
|
|
548
|
-
<button type="button" onClick={() => setShowHistory(v => !v)} aria-pressed={showHistory} className={`p-
|
|
547
|
+
<div className="flex items-center gap-1 shrink-0">
|
|
548
|
+
<button type="button" onClick={(e) => { e.stopPropagation(); setShowHistory(v => !v); }} aria-pressed={showHistory} className={`p-2 rounded transition-colors ${showHistory ? 'bg-muted text-foreground' : 'text-muted-foreground hover:text-foreground hover:bg-muted'}`} title={t.hints.sessionHistory}>
|
|
549
549
|
<History size={iconSize} />
|
|
550
550
|
</button>
|
|
551
|
-
<button type="button" onClick={handleResetSession} disabled={isLoading} className="p-
|
|
551
|
+
<button type="button" onClick={(e) => { e.stopPropagation(); handleResetSession(); }} disabled={isLoading} className="p-2 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors disabled:opacity-40" title={t.hints.newSession}>
|
|
552
552
|
<SquarePen size={iconSize} />
|
|
553
553
|
</button>
|
|
554
554
|
{isPanel && onMaximize && (
|
|
555
|
-
<button type="button" onClick={onMaximize} className="p-
|
|
555
|
+
<button type="button" onClick={(e) => { e.stopPropagation(); onMaximize(); }} className="p-2 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors" title={maximized ? t.hints.restorePanel : t.hints.maximizePanel}>
|
|
556
556
|
{maximized ? <Minimize2 size={iconSize} /> : <Maximize2 size={iconSize} />}
|
|
557
557
|
</button>
|
|
558
558
|
)}
|
|
559
559
|
{onModeSwitch && (
|
|
560
|
-
<button type="button" onClick={onModeSwitch} className="p-
|
|
560
|
+
<button type="button" onClick={(e) => { e.stopPropagation(); onModeSwitch(); }} className="p-2 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors" title={askMode === 'popup' ? t.hints.dockToSide : t.hints.openAsPopup}>
|
|
561
561
|
{askMode === 'popup' ? <PanelRight size={iconSize} /> : <AppWindow size={iconSize} />}
|
|
562
562
|
</button>
|
|
563
563
|
)}
|
|
564
564
|
{onClose && (
|
|
565
|
-
<button type="button" onClick={onClose} className="p-
|
|
565
|
+
<button type="button" onClick={(e) => { e.stopPropagation(); onClose(); }} className="p-2 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors" title={t.hints.closePanel} aria-label="Close">
|
|
566
566
|
<X size={isPanel ? iconSize : 15} />
|
|
567
567
|
</button>
|
|
568
568
|
)}
|