feat(ui): AI Tools modal, one-button lane tool picker, AgentHub settings in Overview, markdown preview

- AI Tools moves from a Settings section into a modal behind a button at the
  Settings tab bar's right edge (AiToolsModal, `actions` on PageTabs,
  /settings#ai-tools); rows get an enable switch, Default badge, and an
  Update button for every tool whose catalog names an updater (no version
  lookup on open); not-installed tools fold behind a disclosure, a finished
  job's log folds to one line; shared AiToolIcon
- codex updates through its own `codex update`, openclaw/hermes gain
  `update --yes`; update-all runs every installed updater and skips an npm
  one only when npm does not manage the binary
- Add-lane tool picker is one button showing the chosen tool that opens the
  enabled tools as buttons
- Claude Code / Codex AgentHub sub-tab folded into Overview (home editor,
  hooks, pricing); the path list drops CLAUDE_HOME/CODEX_HOME;
  HomeDirSetting shows the saved value only while the field differs
- Preview/Raw toggle for markdown files in the config FileViewer and the
  Changes panel's whole-file view (MarkdownPreview: react-markdown +
  remark-gfm, raw HTML never run, frontmatter as a code block)
- docs and the CLAUDE.md marker updated
This commit is contained in:
2026-10-01 10:11:43 +07:00
parent 058c574138
commit c5aba094bd
55 changed files with 2985 additions and 853 deletions
+4 -3
View File
@@ -24,8 +24,7 @@
"hooks": "Hooks",
"keybindings": "Keybindings",
"settings": "Settings",
"memory": "Memory",
"agenthub": "AgentHub"
"memory": "Memory"
},
"overview": {
"rootsTitle": "Roots",
@@ -51,7 +50,9 @@
"modified": "Modified",
"scopeLabel": "Scope",
"noFrontmatter": "No frontmatter",
"redactedNotice": "Values matching /token|secret|password|key|auth/i are redacted server-side."
"redactedNotice": "Values matching /token|secret|password|key|auth/i are redacted server-side.",
"preview": "Preview",
"raw": "Raw"
},
"skills": {
"name": "Name",
+1 -2
View File
@@ -18,8 +18,7 @@
"memory": "Memory",
"config": "Config",
"mcp": "MCP servers",
"plugins": "Plugins",
"agenthub": "AgentHub"
"plugins": "Plugins"
},
"overview": {
"rootsTitle": "Roots",
+3 -2
View File
@@ -53,8 +53,7 @@
"addLaneSetupTitle": "Setup",
"addLaneTitleLabel": "Title",
"addLaneTitlePlaceholder": "Optional",
"addLaneToolDefault": "Default ({{tool}})",
"addLaneToolOther": "Other…",
"addLaneToolDefaultBadge": "Default",
"addLaneNoTools": "No AI tool is installed and enabled.",
"addLaneNoToolsLink": "Open Settings → AI Tools",
"addLaneRouterNativeTool": "Native ({{tool}})",
@@ -258,6 +257,8 @@
"changes.save": "Save",
"changes.cancelEdit": "Cancel",
"changes.clickToEdit": "Click the text to edit",
"changes.preview": "Preview",
"changes.raw": "Raw",
"changes.editorLabel": "Edit {{path}}",
"changes.prevHunk": "Previous change",
"changes.nextHunk": "Next change",
+4 -4
View File
@@ -530,9 +530,7 @@
"homepageOf": "{{tool}} homepage",
"install": "Install",
"update": "Update",
"updateTools": "Update tools",
"newVersion": "v{{version}} available",
"outsideNpm": "Installed outside npm — update it the way you installed it",
"updateAll": "Update all ({{count}})",
"runScript": "Download {{url}} and run it with bash",
"confirmInstall": "Install {{tool}}?",
"confirmUpdate": "Update {{tool}}?",
@@ -542,7 +540,9 @@
"cancel": "Cancel",
"jobRunning": "Running…",
"jobOk": "Done",
"jobFailed": "Failed (exit {{code}})"
"jobFailed": "Failed (exit {{code}})",
"showLog": "Show log",
"hideLog": "Hide log"
},
"appearance": {
"title": "Appearance",
+4 -3
View File
@@ -24,8 +24,7 @@
"hooks": "Hooks",
"keybindings": "Phím tắt",
"settings": "Cài đặt",
"memory": "Bộ nhớ",
"agenthub": "AgentHub"
"memory": "Bộ nhớ"
},
"overview": {
"rootsTitle": "Thư mục gốc",
@@ -51,7 +50,9 @@
"modified": "Đã sửa",
"scopeLabel": "Phạm vi",
"noFrontmatter": "Không có frontmatter",
"redactedNotice": "Các giá trị khớp /token|secret|password|key|auth/i đã được ẩn ở phía máy chủ."
"redactedNotice": "Các giá trị khớp /token|secret|password|key|auth/i đã được ẩn ở phía máy chủ.",
"preview": "Xem trước",
"raw": "Mã nguồn"
},
"skills": {
"name": "Tên",
+1 -2
View File
@@ -18,8 +18,7 @@
"memory": "Bộ nhớ",
"config": "Cấu hình",
"mcp": "Máy chủ MCP",
"plugins": "Plugin",
"agenthub": "AgentHub"
"plugins": "Plugin"
},
"overview": {
"rootsTitle": "Thư mục gốc",
+3 -2
View File
@@ -53,8 +53,7 @@
"addLaneSetupTitle": "Thiết lập",
"addLaneTitleLabel": "Tiêu đề",
"addLaneTitlePlaceholder": "Không bắt buộc",
"addLaneToolDefault": "Mặc định ({{tool}})",
"addLaneToolOther": "Khác…",
"addLaneToolDefaultBadge": "Mặc định",
"addLaneNoTools": "Chưa có AI tool nào được cài và bật.",
"addLaneNoToolsLink": "Mở Cài đặt → AI Tools",
"addLaneRouterNativeTool": "Native ({{tool}})",
@@ -258,6 +257,8 @@
"changes.save": "Lưu",
"changes.cancelEdit": "Huỷ",
"changes.clickToEdit": "Bấm vào nội dung để sửa",
"changes.preview": "Xem trước",
"changes.raw": "Mã nguồn",
"changes.editorLabel": "Sửa {{path}}",
"changes.prevHunk": "Thay đổi trước",
"changes.nextHunk": "Thay đổi sau",
+4 -4
View File
@@ -530,9 +530,7 @@
"homepageOf": "Trang chủ {{tool}}",
"install": "Cài đặt",
"update": "Cập nhật",
"updateTools": "Cập nhật tool",
"newVersion": "Có bản v{{version}}",
"outsideNpm": "Cài ngoài npm — cập nhật theo cách bạn đã cài",
"updateAll": "Cập nhật tất cả ({{count}})",
"runScript": "Tải {{url}} và chạy bằng bash",
"confirmInstall": "Cài {{tool}}?",
"confirmUpdate": "Cập nhật {{tool}}?",
@@ -542,7 +540,9 @@
"cancel": "Huỷ",
"jobRunning": "Đang chạy…",
"jobOk": "Xong",
"jobFailed": "Lỗi (exit {{code}})"
"jobFailed": "Lỗi (exit {{code}})",
"showLog": "Xem log",
"hideLog": "Ẩn log"
},
"appearance": {
"title": "Giao diện",