@leviyuan/lodestar 0.3.0 → 0.3.1

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.
Files changed (2) hide show
  1. package/dist/lodestar.js +1 -1
  2. package/package.json +1 -1
package/dist/lodestar.js CHANGED
@@ -132,7 +132,7 @@ ${z}`:"",G=F?RI(Z,J,Y,x)+W:"```\n"+JSON.stringify(J??{},null,2).slice(0,2000)+"\
132
132
  `+Y.slice(0,3000)+"\n```":"");return{tag:"collapsible_panel",element_id:_.tool(Q),header:{title:{tag:"plain_text",content:U}},expanded:!1,elements:[{tag:"markdown",content:G}]}}function C3(Q,Z){let J=Z.length,Y=Z.some((U)=>U.isError),X=Z.every((U)=>U.output!==null),z=Y?"❌":X?"✅":"⏳",x=J===1?(()=>{let U=F8("Read",Z[0]?.input);return U?`${z} \uD83D\uDD27 Read: ${U}`:`${z} \uD83D\uDD27 Read`})():`${z} \uD83D\uDD27 Read · ${J} 次`,v=Z.map((U)=>`\`${String(U.input.file_path??"(无 path)")}\``);return{tag:"collapsible_panel",element_id:_.tool(Q),header:{title:{tag:"plain_text",content:x}},expanded:!1,elements:[{tag:"markdown",content:v.join(`
133
133
  `)}]}}function nZ(Q,Z,J,Y){let X=F8(Z,J),z=X?`\uD83D\uDD10 等审批 · ${Z}: ${X}`:`\uD83D\uDD10 等审批 · ${Z}`,x="```\n"+JSON.stringify(J??{},null,2).slice(0,2000)+"\n```";return{tag:"collapsible_panel",element_id:_.tool(Q),header:{title:{tag:"plain_text",content:z}},expanded:!0,elements:[{tag:"markdown",content:x},{tag:"column_set",columns:[hZ("✅ 允许","primary",Y,"allow"),hZ("♾️ 始终允许","default",Y,"allow_always"),hZ("❌ 拒绝","danger",Y,"deny")]}]}}function hZ(Q,Z,J,Y){return{tag:"column",width:"weighted",weight:1,elements:[{tag:"button",text:{tag:"plain_text",content:Q},type:Z,behaviors:[{type:"callback",value:{kind:"permission",request_id:J,decision:Y}}]}]}}function BI(Q,Z,J,Y){let X=[];X.push({tag:"markdown",content:`**${Q.question}**`});for(let z=0;z<Q.options.length;z++){let x=Q.options[z],v=x.description?` · ${x.description}`:"";if(Y){let U=Y.optionIdx===z;X.push({tag:"markdown",content:U?`✅ **${x.label}**${v}`:`~~◯ ${x.label}${v}~~`})}else X.push({tag:"interactive_container",background_style:"default",has_border:!0,corner_radius:"6px",padding:"8px 12px",margin:"4px 0px 4px 0px",behaviors:[{type:"callback",value:{kind:"ask",tool_use_id:Z,question_idx:J,option_idx:z}}],elements:[{tag:"markdown",content:`**${x.label}**${v}`}]})}if(Y?.customText)X.push({tag:"markdown",content:`✏️ **自定义回答**:${Y.customText}`});return X}function SI(Q,Z){if(Z.size===0)return null;let J=[],Y=[...Z.keys()].sort((X,z)=>X-z);for(let X of Y){let z=Q[X],x=Z.get(X),v=z?.header??`Q${X+1}`,U=x.customText??(x.optionIdx!==void 0?z?.options[x.optionIdx]?.label:void 0)??"?";J.push(`- ✅ **${v}**:${U}`)}return{tag:"collapsible_panel",header:{title:{tag:"plain_text",content:`\uD83D\uDCDC 已答 ${Z.size} 题(点击展开)`}},expanded:!1,elements:[{tag:"markdown",content:J.join(`
134
134
  `)}]}}function I3(Q,Z,J,Y="\uD83E\uDD14",X){let z=J.length,x=X?.answered??new Map,v=X?.currentIdx,U=v===void 0&&x.size>0,F=[],W;if(U){if(z===1){let $=J[0],O=x.get(0),R=O?.customText??(O?.optionIdx!==void 0?$?.options[O.optionIdx]?.label:void 0)??"?",c=$?.header?` · ${$.header}`:"";W=`${Y} 已回答${c}:${R}`}else W=`${Y} 已回答 · ${z} 题`;let G=[...x.keys()].sort(($,O)=>$-O);for(let $ of G){let O=J[$],R=x.get($),c=O?.header??`Q${$+1}`,q=R.customText??(R.optionIdx!==void 0?O?.options[R.optionIdx]?.label:void 0)??"?";F.push({tag:"markdown",content:`**${c}**:${q}`})}let D=[...x.values()].reverse().find(($)=>$.user)?.user;if(D)F.push({tag:"markdown",content:`
135
- *— 由 ${D} 回答*`})}else if(v!==void 0&&J[v]){let G=J[v],D=G.header?` · ${G.header}`:"",$=z>1?` (${v+1}/${z})`:"";W=`${Y} \uD83E\uDD14 AskUserQuestion${D}${$}`;let O=SI(J,x);if(O)F.push(O);F.push(...BI(G,Z,v)),F.push({tag:"markdown",content:"_\uD83D\uDCAC 也可以直接在群里回复你的答案(裸词命令 `hi`/`kill`/`restart`/`clear` 仍然优先)_"})}else if(W=`${Y} \uD83E\uDD14 AskUserQuestion`,J[0])F.push({tag:"markdown",content:`**${J[0].question}**`});return{tag:"collapsible_panel",element_id:_.tool(Q),header:{title:{tag:"plain_text",content:W}},expanded:!U,elements:F}}var $N=Wx(()=>{b4()});function A4(Q){if(Q<1024)return`${Q}B`;if(Q<1048576)return`${(Q/1024).toFixed(0)}K`;if(Q<1073741824)return`${(Q/1048576).toFixed(0)}M`;let Z=Q/1073741824;return Z<10?`${Z.toFixed(1)}G`:`${Z.toFixed(0)}G`}function v8(Q){if(!Q)return"0";if(Q<1000)return String(Q);if(Q<1e6)return(Q/1000).toFixed(Q<1e4?1:0).replace(/\.0$/,"")+"K";return(Q/1e6).toFixed(2).replace(/\.?0+$/,"")+"M"}function cN(Q){if(Q<0.01)return`$${Q.toFixed(4)}`;return`$${Q.toFixed(2)}`}function MI(Q){if(Q<1000)return`${Q}ms`;if(Q<60000)return`${(Q/1000).toFixed(1)}s`;let Z=Math.floor(Q/60000),J=Math.round(Q%60000/1000);return`${Z}m ${J}s`}function j3(Q){if(Q<60000)return`${Math.round(Q/1000)}s`;let Z=Math.floor(Q/60000);if(Z<60)return`${Z}m`;let J=Math.floor(Z/60),Y=Z%60;if(J<24)return`${J}h ${Y}m`;return`${Math.floor(J/24)}d ${J%24}h`}function RN(Q){if(!Q)return"?";let Z=Q.getTime()-Date.now();if(Z<=0)return"已重置";if(Z<3600000)return`${Math.max(1,Math.round(Z/60000))}m`;if(Z<86400000)return`${Math.round(Z/3600000)}h`;return`${Math.round(Z/86400000)}d`}function CI(Q){let Z=Date.now()-Q;if(Z<60000)return"刚刚";if(Z<3600000)return`${Math.round(Z/60000)}m 前`;if(Z<86400000)return`${Math.round(Z/3600000)}h 前`;return`${Math.round(Z/86400000)}d 前`}function u4(Q){if(Q===void 0)return"**\uD83D\uDCCA 订阅额度** _加载中…_";switch(Q.state){case"no_credentials":return"**\uD83D\uDCCA 订阅额度** 未找到 OAuth 凭据 (`~/.claude/.credentials.json`)";case"auth_failed":return"**\uD83D\uDCCA 订阅额度** Token 已过期且刷新失败 — 重新 `claude auth login`";case"rate_limited":return"**\uD83D\uDCCA 订阅额度** API 429 限流,稍后重试";case"network":return`**\uD83D\uDCCA 订阅额度** 拉取失败${Q.reason?" — `"+Q.reason+"`":""}`}let Z=Q.stale?` _· 缓存 ${CI(Q.fetchedAt)}_`:"",J=Q.stale?"~":"",X=[Q.subscriptionType?`**\uD83D\uDCCA 订阅额度** · ${Q.subscriptionType}${Z}`:`**\uD83D\uDCCA 订阅额度**${Z}`];if(Q.fiveHour){let z=[`${Math.round(Q.fiveHour.percent)}%`];if(Q.fiveHour.resetsAt)z.push(`重置 ${J}${RN(Q.fiveHour.resetsAt)}`);X.push(` · 5h ${z.join(" · ")}`)}if(Q.weekly){let z=[`${Math.round(Q.weekly.percent)}%`];if(Q.weekly.resetsAt)z.push(`重置 ${J}${RN(Q.weekly.resetsAt)}`);X.push(` · 7d ${z.join(" · ")}`)}return X.length===1?"**\uD83D\uDCCA 订阅额度** _无数据_":X.join(`
135
+ *— 由 ${D} 回答*`})}else if(v!==void 0&&J[v]){let G=J[v],D=G.header?` · ${G.header}`:"",$=z>1?` (${v+1}/${z})`:"";W=`${Y} \uD83E\uDD14 AskUserQuestion${D}${$}`;let O=SI(J,x);if(O)F.push(O);F.push(...BI(G,Z,v)),F.push({tag:"markdown",content:"_\uD83D\uDCAC 也可以直接在群里回复你的答案(裸词命令 `hi`/`kill`/`restart`/`clear` 仍然优先)_"})}else if(W=`${Y} \uD83E\uDD14 AskUserQuestion`,J[0])F.push({tag:"markdown",content:`**${J[0].question}**`});return{tag:"collapsible_panel",element_id:_.tool(Q),header:{title:{tag:"plain_text",content:W}},expanded:!U,elements:F}}var $N=Wx(()=>{b4()});function A4(Q){if(Q<1024)return`${Q}B`;if(Q<1048576)return`${(Q/1024).toFixed(0)}K`;if(Q<1073741824)return`${(Q/1048576).toFixed(0)}M`;let Z=Q/1073741824;return Z<10?`${Z.toFixed(1)}G`:`${Z.toFixed(0)}G`}function v8(Q){if(!Q)return"0";if(Q<1000)return String(Q);if(Q<1e6)return(Q/1000).toFixed(Q<1e4?1:0).replace(/\.0$/,"")+"K";return(Q/1e6).toFixed(2).replace(/\.?0+$/,"")+"M"}function cN(Q){if(Q<0.01)return`$${Q.toFixed(4)}`;return`$${Q.toFixed(2)}`}function MI(Q){if(Q<1000)return`${Q}ms`;if(Q<60000)return`${(Q/1000).toFixed(1)}s`;let Z=Math.floor(Q/60000),J=Math.round(Q%60000/1000);return`${Z}m ${J}s`}function j3(Q){if(Q<60000)return`${Math.round(Q/1000)}s`;let Z=Math.floor(Q/60000);if(Z<60)return`${Z}m`;let J=Math.floor(Z/60),Y=Z%60;if(J<24)return`${J}h ${Y}m`;return`${Math.floor(J/24)}d ${J%24}h`}function RN(Q){if(!Q)return"?";let Z=Q.getTime()-Date.now();if(Z<=0)return"已重置";if(Z<3600000)return`${Math.max(1,Math.round(Z/60000))}m`;if(Z<86400000)return`${(Z/3600000).toFixed(1)}h`;return`${(Z/86400000).toFixed(1)}d`}function CI(Q){let Z=Date.now()-Q;if(Z<60000)return"刚刚";if(Z<3600000)return`${Math.round(Z/60000)}m 前`;if(Z<86400000)return`${Math.round(Z/3600000)}h 前`;return`${Math.round(Z/86400000)}d 前`}function u4(Q){if(Q===void 0)return"**\uD83D\uDCCA 订阅额度** _加载中…_";switch(Q.state){case"no_credentials":return"**\uD83D\uDCCA 订阅额度** _暂时只支持 Claude 订阅额度显示_";case"auth_failed":return"**\uD83D\uDCCA 订阅额度** Token 已过期且刷新失败 — 重新 `claude auth login`";case"rate_limited":return"**\uD83D\uDCCA 订阅额度** API 429 限流,稍后重试";case"network":return`**\uD83D\uDCCA 订阅额度** 拉取失败${Q.reason?" — `"+Q.reason+"`":""}`}let Z=Q.stale?` _· 缓存 ${CI(Q.fetchedAt)}_`:"",J=Q.stale?"~":"",X=[Q.subscriptionType?`**\uD83D\uDCCA 订阅额度** · ${Q.subscriptionType}${Z}`:`**\uD83D\uDCCA 订阅额度**${Z}`];if(Q.fiveHour){let z=[`${Math.round(Q.fiveHour.percent)}%`];if(Q.fiveHour.resetsAt)z.push(`重置 ${J}${RN(Q.fiveHour.resetsAt)}`);X.push(` · 5h ${z.join(" · ")}`)}if(Q.weekly){let z=[`${Math.round(Q.weekly.percent)}%`];if(Q.weekly.resetsAt)z.push(`重置 ${J}${RN(Q.weekly.resetsAt)}`);X.push(` · 7d ${z.join(" · ")}`)}return X.length===1?"**\uD83D\uDCCA 订阅额度** _无数据_":X.join(`
136
136
  `)}function TI(Q){let Z=[],J=[];if(Q.cpu){let{cores:Y,load1:X,load5:z,load15:x}=Q.cpu;J.push(`load ${X.toFixed(2)} / ${z.toFixed(2)} / ${x.toFixed(2)} (${Y}核)`)}if(Q.mem)J.push(`mem ${Q.mem.percent}% (${A4(Q.mem.usedBytes)}/${A4(Q.mem.totalBytes)})`);if(J.length>0)Z.push(`**\uD83D\uDDA5 主机** ${J.join(" · ")}`);else Z.push("**\uD83D\uDDA5 主机** _n/a_");if(Q.disks.length>0){let Y=Q.disks.map((X)=>`\`${X.label}\` ${X.percent}% (${A4(X.usedBytes)}/${A4(X.totalBytes)})`);Z.push(`**\uD83D\uDCBD 磁盘** ${Y.join(" · ")}`)}if(Q.servicesError)Z.push(`**⚙️ 服务** cc-* _${Q.servicesError}_`);else if(Q.services.length===0)Z.push("**⚙️ 服务** cc-* _无_");else{Z.push(`**⚙️ 服务** cc-* (${Q.services.length})`);for(let Y of Q.services){let X=jI[Y.active]??"·",z=Y.lastActiveAgoSec,x=Y.stateAgoSec,v=[Y.active];if(Y.active==="active"){if(x!=null)v.push(`已运行 ${j3(x*1000)}`)}else if(Y.active==="inactive"||Y.active==="failed"){if(z!=null)v.push(`上次活跃 ${j3(z*1000)}前`);else v.push("从未启动");if(x!=null){let U=Y.active==="failed"?"已挂":"已停";v.push(`${U} ${j3(x*1000)}`)}}else if(x!=null)v.push(`已 ${j3(x*1000)}`);Z.push(` · ${X} \`${Y.name}\` · ${v.join(" · ")}`)}}return Z}function _Z(Q){let{sessionName:Z,status:J,model:Y,effort:X,uptimeMs:z,peers:x,usage:v,contextTokens:U,contextLimit:F,cumStats:W,lastTurn:G,sessionId:D,sysinfo:$}=Q,O={idle:"\uD83D\uDFE2 闲",working:"⚙️ 工作中",awaiting_permission:"\uD83D\uDD10 等审批",starting:"\uD83D\uDE80 启动中",stopped:"⚪ 未运行"}[J],R=Y?`${Y}${X?`/${X}`:""}`:null,q=[[O,R].filter(Boolean).join(" · ")];if(x&&x.length>0){q.push(`**\uD83D\uDDC2 活跃项目** (${x.length})`);for(let b of x){let w=II[b.status]??"·",m=b.uptimeMs!=null&&b.uptimeMs>0?` · ${j3(b.uptimeMs)}`:"",d=b.isCurrent?" ← 当前":"";q.push(` · ${w} \`${b.name}\`${m}${d}`)}}if(U!=null&&U>0)if(F!=null&&F>0){let b=Math.round(U/F*100);q.push(`**\uD83D\uDCE6 上下文** ${v8(U)} / ${v8(F)} (${b}%)`)}else q.push(`**\uD83D\uDCE6 上下文** ${v8(U)} _窗口待 result 上报_`);if(W&&(W.tokens>0||W.costUsd>0||W.turns>0))q.push(`**\uD83D\uDCAC 累计** ${v8(W.tokens)} tokens · ${cN(W.costUsd)} · ${W.turns} turn${W.turns===1?"":"s"}`);if(G)q.push(`**\uD83D\uDD04 上一轮** +${v8(G.tokens)} · ${cN(G.costUsd)} · ${MI(G.durationMs)}`);if(D)q.push(`**\uD83C\uDD94 session** \`${D.slice(0,8)}…\``);if($)q.push(...TI($));let u=J==="working"?"blue":J==="awaiting_permission"?"orange":J==="stopped"?"grey":"green";return{schema:"2.0",config:{update_multi:!0},header:{title:{tag:"plain_text",content:`\uD83C\uDF1F Lodestar · ${Z}`},template:u},body:{elements:[{tag:"markdown",content:q.join(`
137
137
  `)},{tag:"markdown",element_id:_.consoleUsage,content:u4(v)}]}}}function E4(Q){let Z=[];if(Z.push(Q.suffix??"✅"),Q.durationSec)Z.push(`⏱ ${Q.durationSec}s`);if(Q.tokens!=null&&Q.tokens>0)Z.push(`${v8(Q.tokens)} tokens`);return{config:{streaming_mode:!1,summary:{content:Z.join(" · ")}}}}var II,jI;var BN=Wx(()=>{b4();II={idle:"\uD83D\uDFE2",working:"⚙️",awaiting_permission:"\uD83D\uDD10",starting:"\uD83D\uDE80",stopped:"⚪"};jI={active:"\uD83D\uDFE2",activating:"\uD83D\uDE80",reloading:"\uD83D\uDD04",inactive:"⚪",deactivating:"\uD83D\uDFE1",failed:"❌"}});var T3=Wx(()=>{b4();$N();BN()});import{execFile as bI}from"node:child_process";import{readFileSync as dZ,statfsSync as qI,statSync as SN}from"node:fs";import{cpus as AI,homedir as uI}from"node:os";import{promisify as EI}from"node:util";function kI(){try{let Q=dZ("/proc/loadavg","utf8").trim().split(/\s+/);return{cores:AI().length,load1:parseFloat(Q[0]??"0"),load5:parseFloat(Q[1]??"0"),load15:parseFloat(Q[2]??"0")}}catch(Q){return T(`sysinfo: read /proc/loadavg failed: ${Q}`),null}}function PI(){try{let Q=dZ("/proc/meminfo","utf8"),Z=(z)=>{let x=Q.match(new RegExp(`^${z}:\\s+(\\d+)\\s*kB`,"m"));return x?parseInt(x[1],10)*1024:0},J=Z("MemTotal"),Y=Z("MemAvailable");if(!J)return null;let X=Math.max(0,J-Y);return{totalBytes:J,availBytes:Y,usedBytes:X,percent:Math.round(X/J*100)}}catch(Q){return T(`sysinfo: read /proc/meminfo failed: ${Q}`),null}}function MN(Q,Z){try{let J=qI(Z,{bigint:!1}),Y=J.blocks*J.bsize,X=J.bavail*J.bsize,z=Math.max(0,Y-X);if(!Y)return null;return{label:Q,path:Z,totalBytes:Y,availBytes:X,usedBytes:z,percent:Math.round(z/Y*100)}}catch(J){return T(`sysinfo: statfs ${Z} failed: ${J}`),null}}function wI(){let Q=[],Z=MN("/","/");if(Z)Q.push(Z);let J=uI();if(J&&J!=="/"){let Y=!1;try{let X=SN("/"),z=SN(J);Y=X.dev===z.dev}catch{}if(!Y){let X=MN("$HOME",J);if(X)Q.push(X)}}return Q}function fI(){try{let Q=dZ("/proc/uptime","utf8").trim().split(/\s+/);return parseFloat(Q[0]??"0")}catch{return null}}async function CN(Q,Z=2000){try{let{stdout:J}=await gI("systemctl",["--user",...Q],{timeout:Z,maxBuffer:4194304});return J}catch(J){return T(`sysinfo: systemctl ${Q.join(" ")} failed: ${J}`),null}}async function yI(){let Q=await CN(["list-units","--type=service","--all","--no-legend","--plain",`${lZ}*`]);if(Q===null)return{services:[],error:"systemctl 不可用"};let Z=Q.split(`
138
138
  `).map((U)=>U.trim()).filter((U)=>U.length>0);if(Z.length===0)return{services:[],error:null};let J=[];for(let U of Z){let W=U.replace(/^●\s*/,"").split(/\s+/)[0];if(!W)continue;if(!W.startsWith(lZ))continue;if(!W.endsWith(".service"))continue;J.push(W)}if(J.length===0)return{services:[],error:null};let Y=await CN(["show",...J,"-p","Id","-p","ActiveState","-p","SubState","-p","ActiveEnterTimestampMonotonic","-p","StateChangeTimestampMonotonic"]);if(Y===null)return{services:[],error:"systemctl show 失败"};let X=fI(),z=Y.split(/\n\s*\n/),x=[],v=(U)=>{let F=parseInt(U??"0",10);if(F<=0||X===null)return null;return Math.max(0,X-F/1e6)};for(let U of z){let F={};for(let G of U.split(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leviyuan/lodestar",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },