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:
@@ -247,17 +247,19 @@ async function start(id, action) {
|
||||
return view(j);
|
||||
}
|
||||
|
||||
/** One job that updates every npm-managed tool with a newer version and every self-updater. */
|
||||
/**
|
||||
* One job that runs every installed tool's updater — its own, or npm's when
|
||||
* npm manages it (one installed another way is skipped). No version lookup:
|
||||
* each updater knows whether it has anything to do.
|
||||
*/
|
||||
async function startUpdateAll() {
|
||||
claim();
|
||||
let steps = [];
|
||||
try {
|
||||
const v = await versions.versions();
|
||||
for (const t of aiTools.list()) {
|
||||
if (!aiTools.detect(t.id).installed || !t.update) continue;
|
||||
if (t.update.kind === "self" || (t.update.kind === "npm" && v[t.id]?.updateAvailable)) {
|
||||
steps.push(...(await stepsFor(t.id, "update")));
|
||||
}
|
||||
if (t.update.kind === "npm" && !(await versions.npmManaged(t.id))) continue;
|
||||
steps.push(...(await stepsFor(t.id, "update")));
|
||||
}
|
||||
if (!steps.length) throw makeErr("ENOTHING", "no AI tool has an update to run");
|
||||
} finally {
|
||||
|
||||
Reference in New Issue
Block a user