tg-agent 1.2.10 → 1.2.11

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/cli.js +1 -1
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -74,7 +74,7 @@ Be warm, empathetic, and encouraging. Write as if you are writing a private jour
74
74
  [truncated]`,truncated:!0}}async function Hr(e,t){let n="Working...",r=(await vn(e,n,void 0,t)).message_id,s=n,l=0,c=Promise.resolve(),a=(i,m=!1)=>{let g=Date.now();!m&&g-l<Wr||i!==s&&(s=i,l=g,c=c.then(async()=>{await Sn(e,r,i,void 0,t)}).catch(p=>{console.warn("[tg-agent] status edit failed",p)}))},u=i=>{s=i,l=Date.now(),c=c.then(async()=>{await Lr(e,r,i,t)}).catch(m=>{console.warn("[tg-agent] status edit failed",m)})};return{update:(i,m=!1)=>{let g=Ge(i).text;a(g,m)},finalize:async i=>{let m=Ge(i).text;u(m),await c},fail:async i=>{let m=Ge(i).text;u(m),await c}}}function Kr(e){switch(e.type){case"agent_start":return"Working...";case"tool_start":return`Running tool: ${e.name}
75
75
  args: ${qr(e.args)}`;case"tool_end":return e.ok?`Tool finished: ${e.name} (${e.durationMs}ms)`:`Tool failed: ${e.name} (${e.durationMs}ms)`;case"message_start":return e.role==="assistant"?"Generating reply...":null;case"message_end":return e.role==="assistant"?"Finalizing reply...":null;case"heartbeat":return`Working... ${Math.max(1,Math.round(e.elapsedMs/1e3))}s`;default:return null}}function qr(e){try{let t=new WeakSet,n=200,o=12,r=12,s=3,l=(u,i)=>{if(u==null)return u;if(typeof u=="string")return u.length>n?`${u.slice(0,n)}...`:u;if(typeof u=="number"||typeof u=="boolean")return u;if(typeof u=="bigint")return u.toString();if(typeof u=="function")return"[function]";if(typeof u!="object")return String(u);if(t.has(u))return"[circular]";if(i>=s)return"[truncated]";if(t.add(u),Array.isArray(u)){let p=u.slice(0,r).map(h=>l(h,i+1));return u.length>r&&p.push("[truncated]"),p}let m=Object.entries(u),g={};for(let[p,h]of m.slice(0,o))g[p]=l(h,i+1);return m.length>o&&(g._truncated=!0),g},c=l(e,0),a=JSON.stringify(c);return a?a.length>700?`${a.slice(0,700)}...`:a:"null"}catch{return"[unavailable]"}}function ce(e){let t=e instanceof Error?e.message:String(e),n=e?.cause;return n instanceof Error?`${t} (${n.message})`:n?`${t} (${String(n)})`:t}function Jr(e,t=140){return e.length<=t?e:`${e.slice(0,t-3)}...`}async function Yr(){let e=await de(d.agentDir);if(e.length===0)return"No MCP servers configured. Add [mcp_servers.*] to ~/.tg-agent/config.toml.";let t=await Promise.all(e.map(o=>Rt(o))),n=["MCP servers:"];for(let o=0;o<e.length;o+=1){let r=e[o],s=t[o],l=s.ok?"ok":`error: ${Jr(s.error??"unknown")}`;n.push(`- ${r.name} (${r.type}) ${te(r)} status=${l} (${s.durationMs}ms)`)}return n.join(`
76
76
  `)}async function Ze(e,t,n,o,r){let s=r,c=De(e,s,s!==void 0);if(!c)return;let a=await Pe(c),u=Be(a);switch(u.length>0&&(await O(a),await Promise.all(u.map(i=>ie(c,i).catch(m=>{console.warn(`[tg-agent] cleanup session file failed id=${i}`,m)})))),n){case"start":case"help":{let i=["Commands:","/new [title] - create a new session","/list - list sessions","/use <id> - switch active session","/close [id] - close a session (default: active)","/reset - clear active session history","/workspace [path] - view or set workspace directory","/providers - list available providers","/models [provider] - list models for provider","/provider <name> - set provider for current session","/model <provider>/<model> - set model for current session","/mcp - list configured MCP servers","/mcp refresh - reload MCP catalog","/status - show session and workspace settings","/login <provider> - login to OAuth provider","/logout <provider> - logout from provider","/stop - stop the current running request","/approve - approve a pending security audit confirmation","","Tips:","Send images or files to attach them to the prompt."].join(`
77
- `);await f(e,i,r);return}case"new":{try{let i=o||"",m=ne(a),g=m?.modelProvider,p=m?.modelId,h=Te(a,i);g&&(h.modelProvider=g,p&&(h.modelId=p)),await O(a),await f(e,`Created session ${h.id} (${h.title}).`,r)}catch(i){await f(e,i.message,r)}return}case"list":{await O(a),await f(e,Or(Ue(a)),r);return}case"use":{if(!o){await f(e,"Usage: /use <id>",r);return}if(!Kt(a,o)){await f(e,`Session not found: ${o}`,r);return}await O(a),await f(e,`Active session set to ${o}.`,r);return}case"close":{let i=o||a.activeSessionId;if(!i){await f(e,"No active session to close.",r);return}let m=a.sessions[i];if(m&&m.messages.length>0)try{await f(e,"Reflecting on session memory...",r);let{authStorage:v,modelRegistry:k}=await Q(),S=m.modelProvider||d.modelProvider,P=m.modelId||(d.modelRef.includes("/")?d.modelRef.split("/")[1]:d.modelRef),$=S||d.modelProvider,_=k.find($,P);if(!_){let E=k.getAll().filter(w=>w.provider===$);E.length>0&&(_=E[0])}if(_){let E=v.getRuntimeApiKey($);await Je(m,_.model,E),await f(e,"Memory archived successfully.",r)}else console.warn(`[tg-agent] could not find model for reflection: ${$}`)}catch(v){console.warn("[tg-agent] memory reflection failed",v),await f(e,`Memory reflection failed: ${ce(v)}`,r)}let g=ye.get(c);if(g){if(g.cancelRequested=!0,g.abortRequested=!0,g.status&&g.status.update("Cancelled by user.",!0),g.abort)try{g.abort()}catch(v){console.warn("[tg-agent] abort callback failed during force close",v)}Xe(c)}if(!We(a,i)){await f(e,`Session not found: ${i}`,r);return}await O(a),await ie(c,i).catch(v=>{console.warn(`[tg-agent] delete session file failed id=${i}`,v)});let h=g?`Force-closed session ${i} (interrupted running task).`:`Closed session ${i}.`;await f(e,h,r);return}case"reset":{let i=ne(a);if(!i){await f(e,"No active session.",r);return}if(i.messages.length>0)try{await f(e,"Reflecting on session memory...",r);let{authStorage:m,modelRegistry:g}=await Q(),p=i.modelProvider||d.modelProvider,h=i.modelId||(d.modelRef.includes("/")?d.modelRef.split("/")[1]:d.modelRef),v=p||d.modelProvider,k=g.find(v,h);if(!k){let S=g.getAll().filter(P=>P.provider===v);S.length>0&&(k=S[0])}if(k){let S=m.getRuntimeApiKey(v);await Je(i,k.model,S),await f(e,"Memory archived successfully.",r)}}catch(m){console.warn("[tg-agent] memory reflection failed",m),await f(e,`Memory reflection failed: ${ce(m)}`,r)}qt(i),await O(a),await ie(c,i.id).catch(m=>{console.warn(`[tg-agent] reset session file failed id=${i.id}`,m)}),await f(e,`Reset session ${i.id}.`,r);return}case"workspace":{if(!o){let m=Ve(c,a),g=a.workspaceDir?"chat":d.workspaceMappings.has(c)?"config":"default";await f(e,`Workspace: ${m} (source: ${g})`,r);return}let i=Ee.resolve(H(o.trim()));Jt(a,i),await O(a),await f(e,`Workspace set to: ${i}`,r);return}case"providers":{let{authStorage:i,modelRegistry:m}=await Q(),g=m.getError(),p=Tr(m,i);if(p.length===0){let v=g?`Warning: ${g}
77
+ `);await f(e,i,r);return}case"new":{try{let i=o||"",m=ne(a),g=m?.modelProvider,p=m?.modelId,h=Te(a,i);g&&(h.modelProvider=g,p&&(h.modelId=p)),await O(a),await f(e,`Created session ${h.id} (${h.title}).`,r)}catch(i){await f(e,i.message,r)}return}case"list":{await O(a),await f(e,Or(Ue(a)),r);return}case"use":{if(!o){await f(e,"Usage: /use <id>",r);return}if(!Kt(a,o)){await f(e,`Session not found: ${o}`,r);return}await O(a),await f(e,`Active session set to ${o}.`,r);return}case"close":{let i=o||a.activeSessionId;if(!i){await f(e,"No active session to close.",r);return}let m=a.sessions[i];if(m&&m.messages.length>0)try{await f(e,"Reflecting on session memory...",r);let{authStorage:v,modelRegistry:k}=await Q(),S=m.modelProvider||d.modelProvider,P=m.modelId||(d.modelRef.includes("/")?d.modelRef.split("/")[1]:d.modelRef),$=S||d.modelProvider,_=k.find($,P);if(!_){let E=k.getAll().filter(w=>w.provider===$);E.length>0&&(_=E[0])}if(_){let E=await v.getApiKey($);await Je(m,_.model,E),await f(e,"Memory archived successfully.",r)}else console.warn(`[tg-agent] could not find model for reflection: ${$}`)}catch(v){console.warn("[tg-agent] memory reflection failed",v),await f(e,`Memory reflection failed: ${ce(v)}`,r)}let g=ye.get(c);if(g){if(g.cancelRequested=!0,g.abortRequested=!0,g.status&&g.status.update("Cancelled by user.",!0),g.abort)try{g.abort()}catch(v){console.warn("[tg-agent] abort callback failed during force close",v)}Xe(c)}if(!We(a,i)){await f(e,`Session not found: ${i}`,r);return}await O(a),await ie(c,i).catch(v=>{console.warn(`[tg-agent] delete session file failed id=${i}`,v)});let h=g?`Force-closed session ${i} (interrupted running task).`:`Closed session ${i}.`;await f(e,h,r);return}case"reset":{let i=ne(a);if(!i){await f(e,"No active session.",r);return}if(i.messages.length>0)try{await f(e,"Reflecting on session memory...",r);let{authStorage:m,modelRegistry:g}=await Q(),p=i.modelProvider||d.modelProvider,h=i.modelId||(d.modelRef.includes("/")?d.modelRef.split("/")[1]:d.modelRef),v=p||d.modelProvider,k=g.find(v,h);if(!k){let S=g.getAll().filter(P=>P.provider===v);S.length>0&&(k=S[0])}if(k){let S=await m.getApiKey(v);await Je(i,k.model,S),await f(e,"Memory archived successfully.",r)}}catch(m){console.warn("[tg-agent] memory reflection failed",m),await f(e,`Memory reflection failed: ${ce(m)}`,r)}qt(i),await O(a),await ie(c,i.id).catch(m=>{console.warn(`[tg-agent] reset session file failed id=${i.id}`,m)}),await f(e,`Reset session ${i.id}.`,r);return}case"workspace":{if(!o){let m=Ve(c,a),g=a.workspaceDir?"chat":d.workspaceMappings.has(c)?"config":"default";await f(e,`Workspace: ${m} (source: ${g})`,r);return}let i=Ee.resolve(H(o.trim()));Jt(a,i),await O(a),await f(e,`Workspace set to: ${i}`,r);return}case"providers":{let{authStorage:i,modelRegistry:m}=await Q(),g=m.getError(),p=Tr(m,i);if(p.length===0){let v=g?`Warning: ${g}
78
78
 
79
79
  No providers found.`:"No providers found.";await f(e,v,r);return}let h=[];g&&h.push(`Warning: ${g}`),h.push("Providers:"),await mn(e,h.join(`
80
80
  `),p,{perRow:1,footer:"Tap a provider to set it. Use /models <provider> to list models.",messageThreadId:r});return}case"models":{let{authStorage:i,modelRegistry:m}=await Q(),g=o?ae(o):"";if(!g){let k=ne(a);if(!k?.modelProvider){await f(e,"Usage: /models <provider>",r);return}g=k.modelProvider}let p=i.hasAuth(g),h=Rr(a,g),v=Cr(m,g,h);if(v.length===0){await f(e,`No models found for provider ${g}.`,r);return}await mn(e,`Models for ${g} (auth: ${p?"ok":"missing"}):`,v,{perRow:1,footer:"Tap a model to set it.",messageThreadId:r});return}case"provider":{if(!o){await f(e,"Usage: /provider <name>",r);return}let i=ae(o),{modelRegistry:m}=await Q();if(!m.getAll().some(h=>h.provider===i)){await f(e,`Unknown provider: ${i}`,r);return}let p=await ln(a,e,r);p.modelProvider=i,p.modelId=void 0,p.updatedAt=z(),await O(a),await f(e,`Session ${p.id} provider set to ${i}.`,r),await Ze(e,t,"models",i,r);return}case"model":{let i=Er(o);if(!i){await f(e,"Usage: /model <provider>/<model>",r);return}let m=await ln(a,e,r),g=ae(i.provider??m.modelProvider??"");if(!g){await f(e,"Usage: /model <provider>/<model>",r);return}let{modelRegistry:p}=await Q(),h=$r(g,i.modelId);if(!p.find(g,h)){await f(e,`Model not found: ${g}/${h}`,r);return}m.modelProvider=g,m.modelId=h,m.updatedAt=z(),await O(a),await f(e,`Session ${m.id} model set to ${g}/${h}.`,r);return}case"status":{let i=ne(a);if(!i){await f(e,"No active session.",r);return}let m=d.modelRef.includes("/")?d.modelRef:`${d.modelProvider}/${d.modelRef}`,g=i.modelProvider||i.modelId?`Model: ${i.modelProvider??"?"}/${i.modelId??"?"}`:`Model: ${m} (default)`,p=Ve(c,a),h=a.workspaceDir?"chat":d.workspaceMappings.has(c)?"config":"default",v=[`Session: ${i.id} (${i.title})`,g,`Workspace: ${p} (${h})`].join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tg-agent",
3
- "version": "1.2.10",
3
+ "version": "1.2.11",
4
4
  "description": "Telegram Agent Bot",
5
5
  "type": "module",
6
6
  "bin": {