@saluzi/saluzi-edu 0.2.36 → 0.2.37

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.
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/streamdown-nMT_aKRc.js","assets/rolldown-runtime-S-ySWqyJ.js","assets/shiki-CMaUdEs0.js"])))=>i.map(i=>d[i]);
2
- import{c as e,l as t,o as n,s as r}from"./streamdown-nMT_aKRc.js";import{t as i}from"./vendor-BU1MXatO.js";import{Ja as a}from"./shiki-CMaUdEs0.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var o=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),s=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),c=e=>{let t=s(e);return t.charAt(0).toUpperCase()+t.slice(1)},l=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),u=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0},d={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},f=t(),p=(0,f.forwardRef)(({color:e=`currentColor`,size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>(0,f.createElement)(`svg`,{ref:c,...d,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:l(`lucide`,i),...!a&&!u(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,f.createElement)(e,t)),...Array.isArray(a)?a:[a]])),m=(e,t)=>{let n=(0,f.forwardRef)(({className:n,...r},i)=>(0,f.createElement)(p,{ref:i,iconNode:t,className:l(`lucide-${o(c(e))}`,`lucide-${e}`,n),...r}));return n.displayName=c(e),n},h=m(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),g=m(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),_=m(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),v=m(`monitor`,[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`,key:`48i651`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`,key:`1svkeh`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`,key:`vw1qmm`}]]),y=m(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),b=m(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),x=i();function S(...t){return r(e(t))}var C=n();function w({navigation:e,selected:t,onSelect:n}){return(0,C.jsxs)(`nav`,{className:`flex h-full w-64 flex-col border-r border-border bg-card`,children:[(0,C.jsxs)(`div`,{className:`border-b border-border px-4 py-3`,children:[(0,C.jsx)(`h1`,{className:`font-display text-lg font-bold text-primary`,children:`Saluzi Guide`}),(0,C.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`使用指南`})]}),(0,C.jsxs)(`div`,{className:`flex-1 overflow-y-auto px-2 py-2`,children:[(0,C.jsx)(T,{label:`命令字典`,isActive:t===`__commands__`,onClick:()=>n(`__commands__`)}),(0,C.jsx)(`div`,{className:`my-2 border-t border-border-light`}),e.map(e=>(0,C.jsx)(E,{group:e,selected:t,onSelect:n},e.group))]})]})}function T({label:e,isActive:t,onClick:n}){return(0,C.jsx)(`button`,{type:`button`,onClick:n,className:S(`w-full rounded-md px-3 py-1.5 text-left text-sm transition-colors`,t?`bg-primary text-primary-foreground`:`text-foreground hover:bg-muted`),children:e})}function E({group:e,selected:t,onSelect:n}){let[r,i]=(0,f.useState)(!0);return(0,C.jsxs)(`div`,{className:`mb-1`,children:[(0,C.jsxs)(`button`,{type:`button`,onClick:()=>i(e=>!e),className:`flex w-full items-center gap-1 px-2 py-1.5 text-left text-xs font-semibold uppercase text-muted-foreground hover:text-foreground`,children:[r?(0,C.jsx)(g,{className:`h-3 w-3`}):(0,C.jsx)(_,{className:`h-3 w-3`}),e.group]}),r?(0,C.jsx)(`div`,{className:`ml-2 border-l border-border-light pl-2`,children:D(e.pages).map(e=>(0,C.jsx)(T,{label:e.title??e.path??``,isActive:t===e.path,onClick:()=>e.path&&n(e.path)},e.path))}):null]})}function D(e){let t=[];for(let n of e)n.path?t.push({title:n.title??n.path,path:n.path}):n.pages?t.push(...D(n.pages)):n.group&&t.push({title:n.group,path:void 0});return t}var O=`saluzi-guide-theme`;function k(){return typeof window>`u`?`light`:window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function A(){return typeof window>`u`?`system`:localStorage.getItem(O)??`system`}function j(e){let t=e===`system`?k():e,n=document.documentElement;n.classList.remove(`light`,`dark`),n.classList.add(t)}function M(){let[e,t]=(0,f.useState)(A);return(0,f.useEffect)(()=>{j(e),e===`system`?localStorage.removeItem(O):localStorage.setItem(O,e)},[e]),(0,f.useEffect)(()=>{if(e!==`system`)return;let t=window.matchMedia(`(prefers-color-scheme: dark)`),n=()=>j(`system`);return t.addEventListener(`change`,n),()=>t.removeEventListener(`change`,n)},[e]),{theme:e,setTheme:t,resolved:e===`system`?k():e}}function N(){let{theme:e,setTheme:t}=M();return(0,C.jsx)(`div`,{className:`inline-flex items-center gap-1 rounded-md border border-border bg-card p-1`,children:[{id:`light`,icon:b,label:`Light`},{id:`dark`,icon:y,label:`Dark`},{id:`system`,icon:v,label:`Auto`}].map(({id:n,icon:r,label:i})=>(0,C.jsx)(`button`,{type:`button`,onClick:()=>t(n),"aria-label":i,"aria-pressed":e===n,className:S(`inline-flex h-7 w-7 items-center justify-center rounded-sm transition-colors`,e===n?`bg-primary text-primary-foreground`:`text-muted-foreground hover:text-foreground`),children:(0,C.jsx)(r,{className:`h-4 w-4`})},n))})}var P=[{id:`login`,step:1,title:`首次登录`,commands:[`/login`],description:`登录 Saluzi 账户或设置 API Key`,chapterPath:`docs/guide/getting-started`},{id:`model`,step:2,title:`选择与切换模型`,commands:[`/model`,`/effort`,`/mom`],description:`切换 Max/Pro/Std,调节推理深度,使用 MOM 混合模型`,chapterPath:`docs/guide/model-selection`},{id:`conversation`,step:3,title:`对话基础与多轮交互`,commands:[`/compact`,`/resume`,`/rewind`,`/export`],description:`第一次提问、多轮对话、流式输出、对话压缩与导出恢复`,chapterPath:`docs/guide/conversation-basics`},{id:`commit`,step:4,title:`查看与提交代码`,commands:[`/diff`,`/commit`,`/commit-push-pr`],description:`预览改动、提交、推送并创建 PR 一条龙`,chapterPath:`docs/guide/commit-workflow`},{id:`context`,step:5,title:`上下文与项目记忆`,commands:[`/add-dir`,`/memory`,`/compact`],description:`挂载目录、SALUZI.md 项目记忆、个人偏好,让 AI 更懂你的项目`,chapterPath:`docs/guide/context-tips`},{id:`cost`,step:6,title:`查看消耗`,commands:[`/cost`,`/usage`,`/stats`],description:`当前会话花费、账户配额、历史统计`,chapterPath:`docs/guide/cost-usage`},{id:`troubleshoot`,step:7,title:`排障`,commands:[`/doctor`,`/help`,`/permissions`,`/plan`],description:`诊断安装、查命令、调整权限、规划模式`,chapterPath:`docs/guide/troubleshooting`},{id:`advanced`,step:8,title:`进阶探索:CodeGraph`,commands:[`/codegraph`],description:`本地代码知识图谱,符号搜索、调用链追踪、影响分析`,chapterPath:`docs/guide/codegraph`}];function F({workflow:e,onSelect:t}){return(0,C.jsxs)(`button`,{type:`button`,onClick:()=>e.chapterPath&&t?.(e.chapterPath),className:S(`group flex w-full flex-col gap-2 rounded-xl border border-border bg-card p-5 text-left`,`transition-shadow hover:shadow-md`,!e.chapterPath&&`cursor-default`),disabled:!e.chapterPath,children:[(0,C.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,C.jsx)(`span`,{className:`inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-primary text-sm font-semibold text-primary-foreground`,children:e.step}),(0,C.jsx)(`h3`,{className:`font-display text-base font-semibold text-foreground`,children:e.title}),e.chapterPath&&(0,C.jsx)(h,{className:`ml-auto h-4 w-4 text-muted-foreground transition-transform group-hover:translate-x-1`})]}),(0,C.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,C.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.commands.map(e=>(0,C.jsx)(`code`,{className:`rounded-md border border-border-light bg-background px-2 py-0.5 font-mono text-xs text-foreground`,children:e},e))})]})}function I({command:e}){let t=e.descriptionZh||e.description||`—`;return(0,C.jsxs)(`div`,{className:`flex flex-col gap-1.5 rounded-lg border border-border bg-card p-4`,children:[(0,C.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,C.jsxs)(`code`,{className:`font-mono text-sm font-semibold text-primary`,children:[`/`,e.name]}),e.aliases?.length?(0,C.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`alias: `,e.aliases.map(e=>`/${e}`).join(`, `)]}):null]}),(0,C.jsx)(`p`,{className:`text-sm text-foreground`,children:t})]})}function L(){return(0,C.jsxs)(`div`,{className:`parade-preview-root`,style:{margin:`24px 0`},children:[(0,C.jsx)(`style`,{children:R}),(0,C.jsxs)(`div`,{className:`pp-window`,children:[(0,C.jsx)(`div`,{className:`pp-cube-stage`,children:(0,C.jsx)(`div`,{className:`pp-cube`})}),(0,C.jsxs)(`div`,{className:`pp-panel`,children:[(0,C.jsxs)(`div`,{className:`pp-counts-row`,children:[(0,C.jsx)(`span`,{className:`pp-running-count`,children:`2`}),(0,C.jsx)(`span`,{className:`pp-counts-sep`,children:`/`}),(0,C.jsxs)(`span`,{className:`pp-waiting-pill`,children:[(0,C.jsx)(`span`,{className:`pp-dot`}),`1`]})]}),(0,C.jsxs)(`div`,{className:`pp-sessions`,children:[(0,C.jsx)(`div`,{className:`pp-session-row`,children:`cli · coding auth module`}),(0,C.jsx)(`div`,{className:`pp-session-row`,children:`cli · review PR #42`}),(0,C.jsx)(`div`,{className:`pp-session-row pp-blocked`,children:`cli · waiting approval`})]}),(0,C.jsx)(`div`,{className:`pp-ws-status`})]})]}),(0,C.jsx)(`div`,{className:`pp-caption`,children:`示意图 · 实际数据来自当前会话`})]})}var R=`
2
+ import{c as e,l as t,o as n,s as r}from"./streamdown-nMT_aKRc.js";import{t as i}from"./vendor-BU1MXatO.js";import{Ja as a}from"./shiki-CMaUdEs0.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var o=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),s=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),c=e=>{let t=s(e);return t.charAt(0).toUpperCase()+t.slice(1)},l=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),u=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0},d={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},f=t(),p=(0,f.forwardRef)(({color:e=`currentColor`,size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>(0,f.createElement)(`svg`,{ref:c,...d,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:l(`lucide`,i),...!a&&!u(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,f.createElement)(e,t)),...Array.isArray(a)?a:[a]])),m=(e,t)=>{let n=(0,f.forwardRef)(({className:n,...r},i)=>(0,f.createElement)(p,{ref:i,iconNode:t,className:l(`lucide-${o(c(e))}`,`lucide-${e}`,n),...r}));return n.displayName=c(e),n},h=m(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),g=m(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),_=m(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),v=m(`monitor`,[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`,key:`48i651`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`,key:`1svkeh`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`,key:`vw1qmm`}]]),y=m(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),b=m(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),x=i();function S(...t){return r(e(t))}var C=n();function w({navigation:e,selected:t,onSelect:n}){return(0,C.jsxs)(`nav`,{className:`flex h-full w-64 flex-col border-r border-border bg-card`,children:[(0,C.jsxs)(`div`,{className:`border-b border-border px-4 py-3`,children:[(0,C.jsx)(`h1`,{className:`font-display text-lg font-bold text-primary`,children:`Saluzi Guide`}),(0,C.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`使用指南`})]}),(0,C.jsxs)(`div`,{className:`flex-1 overflow-y-auto px-2 py-2`,children:[(0,C.jsx)(T,{label:`命令字典`,isActive:t===`__commands__`,onClick:()=>n(`__commands__`)}),(0,C.jsx)(`div`,{className:`my-2 border-t border-border-light`}),e.map(e=>(0,C.jsx)(E,{group:e,selected:t,onSelect:n},e.group))]})]})}function T({label:e,isActive:t,onClick:n}){return(0,C.jsx)(`button`,{type:`button`,onClick:n,className:S(`w-full rounded-md px-3 py-1.5 text-left text-sm transition-colors`,t?`bg-primary text-primary-foreground`:`text-foreground hover:bg-muted`),children:e})}function E({group:e,selected:t,onSelect:n}){let[r,i]=(0,f.useState)(!0);return(0,C.jsxs)(`div`,{className:`mb-1`,children:[(0,C.jsxs)(`button`,{type:`button`,onClick:()=>i(e=>!e),className:`flex w-full items-center gap-1 px-2 py-1.5 text-left text-xs font-semibold uppercase text-muted-foreground hover:text-foreground`,children:[r?(0,C.jsx)(g,{className:`h-3 w-3`}):(0,C.jsx)(_,{className:`h-3 w-3`}),e.group]}),r?(0,C.jsx)(`div`,{className:`ml-2 border-l border-border-light pl-2`,children:D(e.pages).map(e=>(0,C.jsx)(T,{label:e.title??e.path??``,isActive:t===e.path,onClick:()=>e.path&&n(e.path)},e.path))}):null]})}function D(e){let t=[];for(let n of e)n.path?t.push({title:n.title??n.path,path:n.path}):n.pages?t.push(...D(n.pages)):n.group&&t.push({title:n.group,path:void 0});return t}var O=`saluzi-guide-theme`;function k(){return typeof window>`u`?`light`:window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function A(){return typeof window>`u`?`system`:localStorage.getItem(O)??`system`}function j(e){let t=e===`system`?k():e,n=document.documentElement;n.classList.remove(`light`,`dark`),n.classList.add(t)}function M(){let[e,t]=(0,f.useState)(A);return(0,f.useEffect)(()=>{j(e),e===`system`?localStorage.removeItem(O):localStorage.setItem(O,e)},[e]),(0,f.useEffect)(()=>{if(e!==`system`)return;let t=window.matchMedia(`(prefers-color-scheme: dark)`),n=()=>j(`system`);return t.addEventListener(`change`,n),()=>t.removeEventListener(`change`,n)},[e]),{theme:e,setTheme:t,resolved:e===`system`?k():e}}function N(){let{theme:e,setTheme:t}=M();return(0,C.jsx)(`div`,{className:`inline-flex items-center gap-1 rounded-md border border-border bg-card p-1`,children:[{id:`light`,icon:b,label:`Light`},{id:`dark`,icon:y,label:`Dark`},{id:`system`,icon:v,label:`Auto`}].map(({id:n,icon:r,label:i})=>(0,C.jsx)(`button`,{type:`button`,onClick:()=>t(n),"aria-label":i,"aria-pressed":e===n,className:S(`inline-flex h-7 w-7 items-center justify-center rounded-sm transition-colors`,e===n?`bg-primary text-primary-foreground`:`text-muted-foreground hover:text-foreground`),children:(0,C.jsx)(r,{className:`h-4 w-4`})},n))})}var P=[{id:`login`,step:1,title:`首次登录`,commands:[`/login`],description:`登录 Saluzi 账户或设置 API Key`,chapterPath:`docs/guide/getting-started`},{id:`model`,step:2,title:`选择与切换模型`,commands:[`/model`,`/effort`,`/mom`],description:`切换 Max/Pro/Std,调节推理深度,使用 MOM 混合模型`,chapterPath:`docs/guide/model-selection`},{id:`conversation`,step:3,title:`对话基础与多轮交互`,commands:[`/compact`,`/resume`,`/rewind`,`/export`],description:`第一次提问、多轮对话、流式输出、对话压缩与导出恢复`,chapterPath:`docs/guide/conversation-basics`},{id:`commit`,step:4,title:`查看与提交代码`,commands:[`/diff`,`/commit`,`/commit-push-pr`],description:`预览改动、提交、推送并创建 PR 一条龙`,chapterPath:`docs/guide/commit-workflow`},{id:`context`,step:5,title:`上下文与项目记忆`,commands:[`/add-dir`,`/memory`,`/compact`],description:`挂载目录、SALUZI.md 项目记忆、个人偏好,让 AI 更懂你的项目`,chapterPath:`docs/guide/context-tips`},{id:`cost`,step:6,title:`查看消耗`,commands:[`/cost`,`/stats`],description:`当前会话花费与历史统计`,chapterPath:`docs/guide/cost-usage`},{id:`troubleshoot`,step:7,title:`排障`,commands:[`/doctor`,`/help`,`/permissions`,`/plan`],description:`诊断安装、查命令、调整权限、规划模式`,chapterPath:`docs/guide/troubleshooting`},{id:`advanced`,step:8,title:`进阶探索:CodeGraph`,commands:[`/codegraph`],description:`本地代码知识图谱,符号搜索、调用链追踪、影响分析`,chapterPath:`docs/guide/codegraph`}];function F({workflow:e,onSelect:t}){return(0,C.jsxs)(`button`,{type:`button`,onClick:()=>e.chapterPath&&t?.(e.chapterPath),className:S(`group flex w-full flex-col gap-2 rounded-xl border border-border bg-card p-5 text-left`,`transition-shadow hover:shadow-md`,!e.chapterPath&&`cursor-default`),disabled:!e.chapterPath,children:[(0,C.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,C.jsx)(`span`,{className:`inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-primary text-sm font-semibold text-primary-foreground`,children:e.step}),(0,C.jsx)(`h3`,{className:`font-display text-base font-semibold text-foreground`,children:e.title}),e.chapterPath&&(0,C.jsx)(h,{className:`ml-auto h-4 w-4 text-muted-foreground transition-transform group-hover:translate-x-1`})]}),(0,C.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description}),(0,C.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.commands.map(e=>(0,C.jsx)(`code`,{className:`rounded-md border border-border-light bg-background px-2 py-0.5 font-mono text-xs text-foreground`,children:e},e))})]})}function I({command:e}){let t=e.descriptionZh||e.description||`—`;return(0,C.jsxs)(`div`,{className:`flex flex-col gap-1.5 rounded-lg border border-border bg-card p-4`,children:[(0,C.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,C.jsxs)(`code`,{className:`font-mono text-sm font-semibold text-primary`,children:[`/`,e.name]}),e.aliases?.length?(0,C.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`alias: `,e.aliases.map(e=>`/${e}`).join(`, `)]}):null]}),(0,C.jsx)(`p`,{className:`text-sm text-foreground`,children:t})]})}function L(){return(0,C.jsxs)(`div`,{className:`parade-preview-root`,style:{margin:`24px 0`},children:[(0,C.jsx)(`style`,{children:R}),(0,C.jsxs)(`div`,{className:`pp-window`,children:[(0,C.jsx)(`div`,{className:`pp-cube-stage`,children:(0,C.jsx)(`div`,{className:`pp-cube`})}),(0,C.jsxs)(`div`,{className:`pp-panel`,children:[(0,C.jsxs)(`div`,{className:`pp-counts-row`,children:[(0,C.jsx)(`span`,{className:`pp-running-count`,children:`2`}),(0,C.jsx)(`span`,{className:`pp-counts-sep`,children:`/`}),(0,C.jsxs)(`span`,{className:`pp-waiting-pill`,children:[(0,C.jsx)(`span`,{className:`pp-dot`}),`1`]})]}),(0,C.jsxs)(`div`,{className:`pp-sessions`,children:[(0,C.jsx)(`div`,{className:`pp-session-row`,children:`cli · coding auth module`}),(0,C.jsx)(`div`,{className:`pp-session-row`,children:`cli · review PR #42`}),(0,C.jsx)(`div`,{className:`pp-session-row pp-blocked`,children:`cli · waiting approval`})]}),(0,C.jsx)(`div`,{className:`pp-ws-status`})]})]}),(0,C.jsx)(`div`,{className:`pp-caption`,children:`示意图 · 实际数据来自当前会话`})]})}var R=`
3
3
  .parade-preview-root .pp-window {
4
4
  width: 100%;
5
5
  max-width: 320px;
@@ -2872,19 +2872,16 @@
2872
2872
  },
2873
2873
  "docs/guide/cost-usage": {
2874
2874
  "frontmatter": {
2875
- "title": "查看消耗 - 会话花费与账户配额",
2876
- "description": "使用 /cost、/usage、/stats、/extra-usage 查看当前会话花费、账户配额与历史统计。",
2875
+ "title": "查看消耗 - 会话花费与历史统计",
2876
+ "description": "使用 /cost、/stats 查看当前会话花费与历史统计。",
2877
2877
  "keywords": [
2878
2878
  "cost",
2879
- "usage",
2880
2879
  "stats",
2881
- "extra-usage",
2882
2880
  "消耗",
2883
- "配额",
2884
2881
  "统计"
2885
2882
  ]
2886
2883
  },
2887
- "content": "\n## 当前会话花费\n\n`/cost` 显示本次会话的 token 消耗与费用明细。适合在长对话中随时检查开销:\n\n```\n> /cost\n```\n\n输出包含输入 token、输出 token 以及折算后的费用。会话结束后计数清零,下次对话重新累计。\n\n## 账户配额\n\n`/usage` 查看账户级别的剩余额度与订阅信息:\n\n```\n> /usage\n```\n\n| 信息 | 说明 |\n|------|------|\n| 剩余额度 | 当前周期内还可使用的用量 |\n| 订阅计划 | 当前生效的套餐名称 |\n| 周期截止 | 配额重置的日期 |\n\n当额度接近用尽时,可考虑购买额外用量(见下方\"额外额度\")。\n\n## 历史统计\n\n`/stats` 展示跨会话的累计数据,包括总对话次数、总 token 消耗等:\n\n```\n> /stats\n```\n\n与 `/cost` 的区别在于:`/cost` 只看当前会话,`/stats` 汇总所有历史记录。\n\n## 额外额度\n\n当订阅额度用完时,`/extra-usage` 可以购买额外用量继续使用:\n\n```\n> /extra-usage\n```\n\n按提示选择额度包即可完成购买,无需切换账户或等待配额重置。\n\n## 命令速查\n\n| 命令 | 作用范围 | 用途 |\n|------|---------|------|\n| `/cost` | 当前会话 | 本次对话的 token 与费用 |\n| `/usage` | 账户级别 | 剩余额度与订阅信息 |\n| `/stats` | 全部历史 | 累计消耗与会话统计 |\n| `/extra-usage` | 账户级别 | 购买额外用量 |\n\n## 下一步\n\n- [故障排查](./troubleshooting) — 常见问题与解决方案\n- [代码图谱](./codegraph) — 用 CodeGraph 探索项目结构\n- [模型选择与切换](./model-selection) — 调整模型以控制成本\n"
2884
+ "content": "\n## 当前会话花费\n\n`/cost` 显示本次会话的 token 消耗与费用明细。适合在长对话中随时检查开销:\n\n```\n> /cost\n```\n\n输出包含输入 token、输出 token 以及折算后的费用。会话结束后计数清零,下次对话重新累计。\n\n## 历史统计\n\n`/stats` 展示跨会话的累计数据,包括总对话次数、总 token 消耗等:\n\n```\n> /stats\n```\n\n与 `/cost` 的区别在于:`/cost` 只看当前会话,`/stats` 汇总所有历史记录。\n\n## 命令速查\n\n| 命令 | 作用范围 | 用途 |\n|------|---------|------|\n| `/cost` | 当前会话 | 本次对话的 token 与费用 |\n| `/stats` | 全部历史 | 累计消耗与会话统计 |\n\n## 下一步\n\n- [故障排查](./troubleshooting) — 常见问题与解决方案\n- [代码图谱](./codegraph) — 用 CodeGraph 探索项目结构\n- [模型选择与切换](./model-selection) — 调整模型以控制成本\n"
2888
2885
  },
2889
2886
  "docs/guide/getting-started": {
2890
2887
  "frontmatter": {
@@ -2898,12 +2895,12 @@
2898
2895
  "commit"
2899
2896
  ]
2900
2897
  },
2901
- "content": "\n## 安装 Saluzi CLI\n\nSaluzi 是终端原生的 agentic coding system,通过 npm 全局安装:\n\n```bash\nnpm install -g @saluzi/saluzi-edu\n```\n\n安装后验证:\n\n```bash\nslz --version\n```\n\n## 首次登录\n\n启动 CLI 后输入 `/login` 命令:\n\n```\nslz\n> /login\n```\n\n支持两种登录方式:\n\n| 方式 | 适用场景 | 说明 |\n|------|---------|------|\n| Saluzi 账户 | 个人开发者 | 通过账户登录,最常用 |\n| API Key | API 用户 | 设置 `ANTHROPIC_API_KEY` 环境变量后自动检测 |\n\n## 添加项目目录\n\n进入项目后用 `/add-dir` 挂载工作目录:\n\n```\n> /add-dir\n```\n\nSaluzi 会扫描目录结构,后续对话即可基于代码上下文回答。\n\n## 第一次对话\n\n直接输入需求:\n\n```\n> 帮我看看这个项目的目录结构,有没有潜在问题\n```\n\nSaluzi 会:\n1. 调用 `Read`、`Glob`、`Grep` 工具探索代码\n2. 分析后给出建议\n3. 若需修改,会请求权限后调用 `Edit`、`Write` 工具\n\n每次工具调用前会弹出权限确认(除非已 Allow)。\n\n## 提交代码工作流\n\n完成修改后:\n\n```\n> /diff # 预览改动\n> /commit # 提交(自动生成 commit message)\n> /commit-push-pr # 一条龙:提交 + 推送 + 创建 PR\n```\n\n## 下一步\n\n- [模型选择与切换](./model-selection) — 了解 `/model`、`/effort`、`/mom`\n- [对话基础](./conversation-basics) — 多轮对话与流式输出\n- [上下文管理](./context-tips) — 让 AI 更好理解你的项目\n"
2898
+ "content": "\n## 安装 Saluzi CLI\n\nSaluzi 是终端原生的 agentic coding system,通过 npm 全局安装:\n\n```bash\nnpm install -g @saluzi/saluzi-edu\n```\n\n安装后验证:\n\n```bash\nslz --version\n```\n\n## 首次登录\n\n启动 CLI 后输入 `/login` 命令:\n\n```\nslz\n> /login\n```\n\n弹出 `Login` 对话框,首先提示 `Select login method:`,共 6 个 Provider 选项。按 `↑/↓` 选择,`Enter` 确认:\n\n| # | 选项 | 副标题 | 适用场景 |\n|---|------|--------|---------|\n| 1 | Anthropic Compatible | Configure your own API endpoint | 自建/代理的 Anthropic 格式端点(如反代、中转) |\n| 2 | OpenAI Compatible | Ollama, DeepSeek, vLLM, One API, etc. | OpenAI Chat Completions 格式的本地或第三方模型 |\n| 3 | Gemini API | Google Gemini native REST/SSE | Google 原生 Gemini 接口 |\n| 4 | Saluzi account with subscription | Pro, Max, Team, or Enterprise | 订阅账户(个人/团队最常用) |\n| 5 | Anthropic Console account | API usage billing | Anthropic Console 按 API 用量计费 |\n| 6 | 3rd-party platform | Amazon Bedrock, Microsoft Foundry, or Vertex AI | 云厂商托管入口 |\n\n> 如果已设置 `ANTHROPIC_API_KEY` 环境变量,Saluzi 会自动检测并跳过登录,`/login` 此时显示为 \"Switch Saluzi accounts\"。\n\n### 选项 1-3:API 表单登录\n\n选择前三个选项(Anthropic / OpenAI / Gemini Compatible)后进入对应的字段表单。三者字段完全一致,只是写入的环境变量不同:\n\n| 字段 | 标签 | 说明 | 是否必填 |\n|------|------|------|---------|\n| baseUrl | Base URL | API 端点地址,需含协议(如 `https://api.example.com`) | 否(留空走默认) |\n| apiKey | API Key | 密钥,输入时掩码显示 | 否 |\n| stdModel | Std | standard 模型名(如 `claude-sonnet-4-5`) | 否 |\n| proModel | Pro | pro 模型名 | 否 |\n| maxModel | Max | max 模型名 | 否 |\n| maxOutputTokens | Out Tok | 单次响应最大 token 数 | 否 |\n| autoCompactWindow | AC Win | 自动压缩上下文的窗口大小 | 否 |\n| autoCompactPctOverride | AC Pct% | 自动压缩触发阈值百分比 | 否 |\n\n操作方式:`↑/↓` 或 `Tab` 切换字段,`Enter` 在最后一个字段提交保存,`Esc` 返回选项菜单。保存后表单中的值会写入 `~/.saluzi/settings.json` 的 `env` 段(对应 `ANTHROPIC_BASE_URL`/`OPENAI_BASE_URL`/`GEMINI_BASE_URL` 等环境变量),下次启动自动加载。\n\n### 选项 4-5:OAuth 浏览器登录\n\n选择 Saluzi 账户或 Anthropic Console 后进入 OAuth 流程:\n\n1. 终端显示 `Opening browser to sign in…`(带加载图标),自动打开浏览器\n2. 在浏览器完成账户登录与授权\n3. 浏览器返回一串授权码,复制后回到终端\n4. 终端提示 `Paste code here if prompted >`(掩码输入),粘贴授权码并 `Enter`\n5. 终端显示 `Creating API key for Saluzi…`,完成后提示 `Login successful. Press Enter to continue…`\n\n如果浏览器没有自动打开,终端会展示 URL 和复制提示,按 `c` 可复制 URL 手动打开。\n\n### 选项 6:第三方平台\n\n选择 3rd-party platform 后只显示提示信息:Saluzi 支持 Amazon Bedrock、Microsoft Foundry、Vertex AI,需要先设置对应的环境变量再重启 Saluzi。按 `Enter` 返回选项菜单,不在 CLI 内直接配置。企业用户需联系管理员获取配置参数。\n\n### 登录后\n\n登录成功后 Saluzi 会自动刷新策略配额、GrowthBook 特性开关、远程受管设置,并为本机注册 trusted device(用于 Remote Control)。无需额外操作,直接开始对话即可。\n\n## 添加项目目录\n\n进入项目后用 `/add-dir` 挂载工作目录:\n\n```\n> /add-dir\n```\n\nSaluzi 会扫描目录结构,后续对话即可基于代码上下文回答。\n\n## 第一次对话\n\n直接输入需求:\n\n```\n> 帮我看看这个项目的目录结构,有没有潜在问题\n```\n\nSaluzi 会:\n1. 调用 `Read`、`Glob`、`Grep` 工具探索代码\n2. 分析后给出建议\n3. 若需修改,会请求权限后调用 `Edit`、`Write` 工具\n\n每次工具调用前会弹出权限确认(除非已 Allow)。\n\n## 提交代码工作流\n\n完成修改后:\n\n```\n> /diff # 预览改动\n> /commit # 提交(自动生成 commit message)\n> /commit-push-pr # 一条龙:提交 + 推送 + 创建 PR\n```\n\n## 下一步\n\n- [模型选择与切换](./model-selection) — 了解 `/model`、`/effort`、`/mom`\n- [对话基础](./conversation-basics) — 多轮对话与流式输出\n- [上下文管理](./context-tips) — 让 AI 更好理解你的项目\n"
2902
2899
  },
2903
2900
  "docs/guide/model-selection": {
2904
2901
  "frontmatter": {
2905
2902
  "title": "模型选择与切换 - Max/Pro/Std 与推理深度",
2906
- "description": "使用 /model 切换模型,/effort 调节推理深度,/mom 配置混合模型,/fast 启用快速模式。",
2903
+ "description": "使用 /model 切换模型,/effort 调节推理深度,/mom 配置混合模型。",
2907
2904
  "keywords": [
2908
2905
  "model",
2909
2906
  "effort",
@@ -2914,7 +2911,7 @@
2914
2911
  "推理深度"
2915
2912
  ]
2916
2913
  },
2917
- "content": "\n## 模型选择\n\nSaluzi 支持多个模型,按能力与成本分级:\n\n| 模型 | 能力 | 速度 | 成本 | 适用场景 |\n|------|------|------|------|---------|\n| Max | 最强 | 慢 | 高 | 复杂架构、深度推理 |\n| Pro | 均衡 | 中 | 中 | 日常开发(默认) |\n| Std | 快 | 快 | 低 | 简单任务、快速验证 |\n\n## /model 切换\n\n```\n> /model\n```\n\n打开模型选择面板,可切换当前会话的模型。也可直接指定:\n\n```\n> /model max\n> /model pro\n> /model std\n```\n\n支持模型别名:`best`、`max[1m]`(1M 上下文)、`pro[1m]`、`maxplan` 等。\n\n## /effort 推理深度\n\n`/effort` 调节推理链长度(仅支持推理模型的 extended thinking):\n\n```\n> /effort low # 快速响应\n> /effort medium # 中等(默认)\n> /effort high # 深度推理\n> /effort xhigh # 极深度推理\n> /effort max # 最大推理深度\n> /effort auto # 清除手动设置,使用自动\n```\n\n也可通过环境变量设置:`SALUZI_EFFORT_LEVEL=high slz`\n\n深度推理适合:\n\n- 复杂 bug 分析\n- 架构设计\n- 多步骤规划\n- 代码审查\n\n## /fast 快速模式\n\n```\n> /fast\n```\n\n切换快速模式。如果当前模型不支持 Fast 模式,会自动切换到支持 Fast 的模型。Fast 模式有独立的速率限制,按额外用量计费。\n\n也可直接指定:`/fast on` 或 `/fast off`。\n\n## /mom 混合模型\n\n见 [MOM 混合模型章节](./mom-mixed-models)。MOM 允许多模型协同:主机 + 顾问。\n\n- `/mom` 打开配置面板\n- `/mom \"内容\"` 执行一次性 MOM 回合\n- `/mom-<mode> \"内容\"` 使用特定 MOM 模式(如 `/mom-avg`)\n\n## /poor 节约模式\n\n```\n> /poor\n```\n\n切换节约模式,关闭**记忆提取**(extract_memories)和**提示建议**(prompt_suggestion),减少 token 消耗。\n\n## Provider 选择\n\nSaluzi 自动选择最优 Provider。如需指定:\n- 通过环境变量(如 `ANTHROPIC_API_KEY`)指定\n- 通过 `/keys` 绑定特定 provider 的 Key\n- 通过 `/model` 切换当前会话模型\n\n## 推荐配置\n\n| 场景 | 推荐 |\n|------|------|\n| 日常开发 | Pro + medium effort |\n| 复杂重构 | Max + high effort |\n| 快速原型 | Std + low effort |\n| 关键决策 | MOM(Pro 主机 + Max 顾问) |\n| 节约模式 | `/poor`(关闭记忆提取与提示建议) |\n\n## 成本监控\n\n用 `/cost` 查看当前会话消耗,`/usage` 查看账户配额,`/stats` 查看历史统计。\n"
2914
+ "content": "\n## 模型选择\n\nSaluzi 支持多个模型,按能力与成本分级:\n\n| 模型 | 能力 | 速度 | 成本 | 适用场景 |\n|------|------|------|------|---------|\n| Max | 最强 | 慢 | 高 | 复杂架构、深度推理 |\n| Pro | 均衡 | 中 | 中 | 日常开发(默认) |\n| Std | 快 | 快 | 低 | 简单任务、快速验证 |\n\n## /model 切换\n\n```\n> /model\n```\n\n打开模型选择面板,可切换当前会话的模型。也可直接指定:\n\n```\n> /model max\n> /model pro\n> /model std\n```\n\n支持模型别名:`best`、`max[1m]`(1M 上下文)、`pro[1m]`、`maxplan` 等。\n\n## /effort 推理深度\n\n`/effort` 调节推理链长度(仅支持推理模型的 extended thinking):\n\n```\n> /effort low # 快速响应\n> /effort medium # 中等(默认)\n> /effort high # 深度推理\n> /effort xhigh # 极深度推理\n> /effort max # 最大推理深度\n> /effort auto # 清除手动设置,使用自动\n```\n\n也可通过环境变量设置:`SALUZI_EFFORT_LEVEL=high slz`\n\n深度推理适合:\n\n- 复杂 bug 分析\n- 架构设计\n- 多步骤规划\n- 代码审查\n\n## /mom 混合模型\n\n见 [MOM 混合模型章节](./mom-mixed-models)。MOM 允许多模型协同:主机 + 顾问。\n\n- `/mom` 打开配置面板\n- `/mom \"内容\"` 执行一次性 MOM 回合\n- `/mom-<mode> \"内容\"` 使用特定 MOM 模式(如 `/mom-avg`)\n\n## /poor 节约模式\n\n```\n> /poor\n```\n\n切换节约模式,关闭**记忆提取**(extract_memories)和**提示建议**(prompt_suggestion),减少 token 消耗。\n\n## Provider 选择\n\nSaluzi 自动选择最优 Provider。如需指定:\n- 通过环境变量(如 `ANTHROPIC_API_KEY`)指定\n- 通过 `/keys` 绑定特定 provider 的 Key\n- 通过 `/model` 切换当前会话模型\n\n## 推荐配置\n\n| 场景 | 推荐 |\n|------|------|\n| 日常开发 | Pro + medium effort |\n| 复杂重构 | Max + high effort |\n| 快速原型 | Std + low effort |\n| 关键决策 | MOM(Pro 主机 + Max 顾问) |\n| 节约模式 | `/poor`(关闭记忆提取与提示建议) |\n\n## 成本监控\n\n用 `/cost` 查看当前会话消耗,`/stats` 查看历史统计。\n"
2918
2915
  },
2919
2916
  "docs/guide/mom-mixed-models": {
2920
2917
  "frontmatter": {
@@ -11,7 +11,7 @@
11
11
  href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap"
12
12
  rel="stylesheet"
13
13
  />
14
- <script type="module" crossorigin src="/assets/main-Bw909R4p.js"></script>
14
+ <script type="module" crossorigin src="/assets/main-ByTnlrKT.js"></script>
15
15
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-S-ySWqyJ.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/shiki-CMaUdEs0.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/streamdown-nMT_aKRc.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saluzi/saluzi-edu",
3
- "version": "0.2.36",
3
+ "version": "0.2.37",
4
4
  "description": "Saluzi CLI - interactive AI coding assistant in the terminal",
5
5
  "license": "MIT",
6
6
  "type": "module",