@entrydesk/cli 1.12.3 → 1.12.5
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.
- package/dist/{agents-YIPPGKPY.js → agents-LH72PV75.js} +1 -1
- package/dist/{budget-ZZG44RXO.js → budget-H6TPEP7L.js} +1 -1
- package/dist/chunk-TMGYB7VH.js +2 -0
- package/dist/{config-JU3KJETZ.js → config-K4LWCVKI.js} +1 -1
- package/dist/{config-CTC4CBIG.js → config-PU4F4DUN.js} +1 -1
- package/dist/{config-help-HHCW7XFB.js → config-help-CQU7TWYL.js} +1 -1
- package/dist/{connectors-ZGWBL6TL.js → connectors-EL2MGWQH.js} +1 -1
- package/dist/{help-NESOCXU4.js → help-GFQ2C2W7.js} +0 -2
- package/dist/index.js +1 -1
- package/dist/{login-FVBYXP32.js → login-KQLBWHJV.js} +1 -1
- package/dist/{logout-PNYLTJQN.js → logout-6O2MCYH3.js} +1 -1
- package/dist/{mcp-DC7H7XHP.js → mcp-Q542ORLI.js} +1 -1
- package/dist/{models-W6IJTX2A.js → models-4MPS2WTX.js} +1 -1
- package/dist/profile-CTU277UB.js +17 -0
- package/dist/{schedules-A6QPLBMI.js → schedules-4FHISXOZ.js} +1 -1
- package/dist/skills-GTPHDGCX.js +17 -0
- package/dist/status-D4ZYB6RT.js +2 -0
- package/dist/task-JEAKVQHM.js +182 -0
- package/dist/{tasks-BWEMFPPU.js → tasks-UZDKOIBA.js} +1 -1
- package/dist/{tool-VDBXLXT4.js → tool-S5UWP5F3.js} +1 -1
- package/dist/{usage-TGX24GRZ.js → usage-WAIXKONS.js} +1 -1
- package/dist/version-AOVZU3EQ.js +2 -0
- package/dist/{workspaces-ZAQAF3RJ.js → workspaces-CGLSQ5MI.js} +1 -1
- package/package.json +6 -6
- package/dist/chunk-HHCG7UQG.js +0 -2
- package/dist/profile-JOKK2XKJ.js +0 -17
- package/dist/skills-OM2KB43P.js +0 -17
- package/dist/status-QVELZ6DI.js +0 -2
- package/dist/task-BFJ2RB7C.js +0 -182
- package/dist/version-G574O2IC.js +0 -2
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{a as ie,b as de,c as Bt,g as rt,h as pe,l as Je,o as ln,p as We,r as an}from"./chunk-TMGYB7VH.js";import{render as cr}from"ink";import{v4 as Nt}from"uuid";import{exec as co}from"child_process";import uo from"fs";import Fe from"fs/promises";import cn from"os";import Ot from"path";import{promisify as fo}from"util";import{glob as po}from"glob";var mo=fo(co),go=`## Filesystem Tool Instructions
|
|
3
|
+
|
|
4
|
+
You have access to filesystem tools that allow you to interact with the user's local filesystem.
|
|
5
|
+
|
|
6
|
+
### Available Operations
|
|
7
|
+
|
|
8
|
+
- **Read File**: Read the contents of a file
|
|
9
|
+
- **Read Multiple Files**: Read multiple files at once (max 10)
|
|
10
|
+
- **Write File**: Create or overwrite a file
|
|
11
|
+
- **Create Directory**: Create a new directory (including parent directories)
|
|
12
|
+
- **List Directory**: List files and subdirectories
|
|
13
|
+
- **Search Files**: Search for files matching a glob pattern
|
|
14
|
+
- **Get File Info**: Get metadata about a file or directory
|
|
15
|
+
- **Move File**: Move or rename a file or directory
|
|
16
|
+
- **Execute Command**: Run shell commands on the user's machine
|
|
17
|
+
|
|
18
|
+
### Important Notes
|
|
19
|
+
|
|
20
|
+
- Always use absolute paths when possible
|
|
21
|
+
- Be mindful of file permissions and access restrictions
|
|
22
|
+
- Large files will be truncated in responses
|
|
23
|
+
- Search results are limited to prevent overwhelming responses
|
|
24
|
+
- Execute Command has a default timeout of 30 seconds (max 5 minutes)
|
|
25
|
+
- The current working directory is: ${process.cwd()}
|
|
26
|
+
- The user's home directory is: ${cn.homedir()}
|
|
27
|
+
`,ho=[{name:"filesystem__read_file",description:"Read the contents of a file from the local filesystem.",inputSchema:{type:"object",properties:{path:{type:"string",description:"The absolute path to the file to read."}},required:["path"]}},{name:"filesystem__read_multiple_files",description:"Read multiple files at once (max 10 files).",inputSchema:{type:"object",properties:{paths:{type:"array",items:{type:"string"},description:"Array of absolute file paths to read."}},required:["paths"]}},{name:"filesystem__write_file",description:"Create or overwrite a file with the given content.",inputSchema:{type:"object",properties:{path:{type:"string",description:"The absolute path to the file to write."},content:{type:"string",description:"The content to write to the file."}},required:["path","content"]}},{name:"filesystem__create_directory",description:"Create a new directory (including parent directories if needed).",inputSchema:{type:"object",properties:{path:{type:"string",description:"The absolute path of the directory to create."}},required:["path"]}},{name:"filesystem__list_directory",description:"List files and subdirectories in a directory.",inputSchema:{type:"object",properties:{path:{type:"string",description:"The absolute path of the directory to list."}},required:["path"]}},{name:"filesystem__search_files",description:"Search for files matching a glob pattern.",inputSchema:{type:"object",properties:{pattern:{type:"string",description:'Glob pattern to match files (e.g., "**/*.ts").'},cwd:{type:"string",description:"Base directory to search in (optional)."}},required:["pattern"]}},{name:"filesystem__get_file_info",description:"Get metadata about a file or directory.",inputSchema:{type:"object",properties:{path:{type:"string",description:"The absolute path to get info for."}},required:["path"]}},{name:"filesystem__move_file",description:"Move or rename a file or directory.",inputSchema:{type:"object",properties:{source:{type:"string",description:"The source path."},destination:{type:"string",description:"The destination path."}},required:["source","destination"]}},{name:"filesystem__execute_command",description:"Execute a shell command on the local machine.",inputSchema:{type:"object",properties:{command:{type:"string",description:"The command to execute."},cwd:{type:"string",description:"Working directory for the command (optional)."},timeout:{type:"number",description:"Timeout in milliseconds (default: 30000, max: 300000)."}},required:["command"]}}];function un(){return{name:"filesystem",systemPrompt:go,tools:ho}}function Ae(e){return e.startsWith("~/")?Ot.join(cn.homedir(),e.slice(2)):e}function yt(e,t=1e5){return e.length<=t?e:e.slice(0,t)+`
|
|
28
|
+
|
|
29
|
+
... (truncated, ${e.length-t} more characters)`}async function dn(e,t){try{switch(e){case"filesystem__read_file":{let n=Ae(t.path),r=await Fe.readFile(n,"utf-8");return{success:!0,result:yt(r)}}case"filesystem__read_multiple_files":{let n=t.paths.slice(0,10),r={};for(let a of n){let c=Ae(a);try{let p=await Fe.readFile(c,"utf-8");r[a]=yt(p,5e4)}catch(p){r[a]={error:p instanceof Error?p.message:String(p)}}}return{success:!0,result:r}}case"filesystem__write_file":{let n=Ae(t.path),r=t.content;return await Fe.mkdir(Ot.dirname(n),{recursive:!0}),await Fe.writeFile(n,r,"utf-8"),{success:!0,result:{written:n}}}case"filesystem__create_directory":{let n=Ae(t.path);return await Fe.mkdir(n,{recursive:!0}),{success:!0,result:{created:n}}}case"filesystem__list_directory":{let n=Ae(t.path);return{success:!0,result:(await Fe.readdir(n,{withFileTypes:!0})).map(c=>({name:c.name,type:c.isDirectory()?"directory":c.isFile()?"file":c.isSymbolicLink()?"symlink":"other"}))}}case"filesystem__search_files":{let n=t.pattern,r=t.cwd?Ae(t.cwd):process.cwd(),a=await po(n,{cwd:r,nodir:!0,maxDepth:10});return{success:!0,result:{files:a.slice(0,100),total:a.length,truncated:a.length>100}}}case"filesystem__get_file_info":{let n=Ae(t.path),r=await Fe.stat(n);return{success:!0,result:{path:n,type:r.isDirectory()?"directory":r.isFile()?"file":"other",size:r.size,created:r.birthtime.toISOString(),modified:r.mtime.toISOString(),accessed:r.atime.toISOString(),mode:r.mode.toString(8)}}}case"filesystem__move_file":{let n=Ae(t.source),r=Ae(t.destination);return await Fe.mkdir(Ot.dirname(r),{recursive:!0}),await Fe.rename(n,r),{success:!0,result:{moved:{from:n,to:r}}}}case"filesystem__execute_command":{let n=t.command,r=t.cwd?Ae(t.cwd):process.cwd(),a=Math.min(t.timeout||3e4,3e5);if(!uo.existsSync(r))return{success:!1,error:`Working directory does not exist: ${r}`};let{stdout:c,stderr:p}=await mo(n,{cwd:r,timeout:a,maxBuffer:10*1024*1024});return{success:!0,result:{stdout:yt(c,5e4),stderr:yt(p,5e4)}}}default:return{success:!1,error:`Unknown tool: ${e}`}}}catch(n){return{success:!1,error:n instanceof Error?n.message:String(n)}}}function Ut(e){return e.startsWith("filesystem__")}function fn(){return[un()]}function xt(){return fn().flatMap(e=>e.tools)}function wt(){return fn().map(e=>e.systemPrompt).filter(Boolean).join(`
|
|
30
|
+
|
|
31
|
+
`)}function Be(e){return Ut(e)}async function Tt(e,t){return Ut(e)?dn(e,t):{success:!1,error:`Unknown client tool: ${e}`}}import{Box as he,Text as B,useInput as tn}from"ink";import nn from"ink-spinner";import{useCallback as on,useEffect as Et,useRef as no,useState as tr}from"react";import{Box as kt,Text as st}from"ink";import{jsx as Ct,jsxs as it}from"react/jsx-runtime";function pn(e,t){return e.length<=t?e:t<=3?".".repeat(t):e.slice(0,t-3)+"..."}function mn({items:e,activeIndex:t,selectedIds:n,multiSelect:r=!1,visible:a,title:c,pageSize:p=10}){if(!a||e.length===0)return null;let h=process.stdout.columns??80,y=r?4:0,g=Math.max(20,h-2-2-y),O=Math.max(1,p),$=Math.floor(t/O)*O,v=Math.min(e.length,$+O),Y=e.slice($,v);return it(kt,{flexDirection:"column",marginBottom:1,children:[Ct(st,{bold:!0,color:"cyan",children:c}),Ct(kt,{borderStyle:"single",borderColor:"gray",flexDirection:"column",children:Y.map((T,b)=>{let A=$+b===t,W=n?.has(T.id),Z=pn(T.name,g),j=T.description?pn(T.description,Math.max(0,g-y)):"",K=r?" ".repeat(y):"";return it(kt,{paddingX:1,flexDirection:"column",children:[it(kt,{children:[r&&Ct(st,{color:W?"green":"gray",children:W?"[\u2713] ":"[ ] "}),Ct(st,{backgroundColor:A?"cyan":void 0,color:A?"black":W?"green":"white",bold:!0,children:Z})]}),j&&it(st,{dimColor:!0,children:[K,"\xB7 ",j]})]},T.id)})}),it(st,{dimColor:!0,children:[r?"\u2191\u2193 Navigate \xB7 Space Toggle \xB7 a All \xB7 n None \xB7 Enter Confirm \xB7 Esc Cancel":"\u2191\u2193 Navigate \xB7 Enter Select \xB7 Esc Cancel",e.length>O?` \xB7 Showing ${$+1}-${v} of ${e.length}`:""]})]})}import{Box as jt,Text as lt}from"ink";import{jsx as at,jsxs as Wt}from"react/jsx-runtime";function gn({suggestions:e,activeIndex:t,visible:n}){return!n||e.length===0?null:Wt(jt,{flexDirection:"column",marginBottom:1,children:[at(jt,{borderStyle:"single",borderColor:"gray",flexDirection:"column",children:e.map((r,a)=>{let c=a===t,p=r.aliases.length>0?` (${r.aliases.join(", ")})`:"";return Wt(jt,{paddingX:1,children:[Wt(lt,{backgroundColor:c?"cyan":void 0,color:c?"black":"cyan",bold:c,children:["/",r.name]}),at(lt,{dimColor:!0,children:p}),at(lt,{children:" - "}),at(lt,{color:c?"white":"gray",children:r.description})]},r.name)})}),at(lt,{dimColor:!0,children:"\u2191\u2193 Navigate \xB7 Tab/Enter Select \xB7 Esc Cancel"})]})}import{Box as yo,Text as hn,useInput as xo,useStdout as wo}from"ink";import{useCallback as yn,useEffect as xn,useMemo as Mt,useRef as wn,useState as Tn}from"react";import{jsx as Ht}from"react/jsx-runtime";function bt(e,t){return e<0?0:e>t?t:e}function Gt(e){return Array.from(e)}function $t(e){return/\s/.test(e)}function qt(e,t){let n=t;for(;n>0&&$t(e[n-1]??"");)n-=1;for(;n>0&&!$t(e[n-1]??"");)n-=1;return n}function kn(e,t){let n=t;for(;n<e.length&&$t(e[n]??"");)n+=1;for(;n<e.length&&!$t(e[n]??"");)n+=1;return n}function To(e){let t=[],n=[],r=[],a=0;n.push(0),e.forEach((p,h)=>{if(p===`
|
|
32
|
+
`){t.push(r),r=[],a=h+1,n.push(a);return}r.push(p)}),t.push(r);let c=t.map(p=>p.length);return{lines:t,lineStarts:n,lineLengths:c}}function Cn(e,t,n){for(let a=0;a<t.length;a+=1){let c=t[a]??0,p=n[a]??0,h=c+p;if(e<=h)return{row:a,col:e-c}}let r=Math.max(0,t.length-1);return{row:r,col:n[r]??0}}var ko=2;function bn({value:e,onChange:t,onSubmit:n,onPaste:r,focus:a=!0,leadingOffset:c=0,multiline:p=!1}){let[h,y]=Tn(()=>Gt(e).length),g=wn(null),[O,$]=Tn(0),v=wn(null),{stdout:Y}=wo(),T=Mt(()=>Gt(e),[e]),{lines:b,lineStarts:E,lineLengths:A}=Mt(()=>To(T),[T]),{row:W,col:Z}=Mt(()=>Cn(h,E,A),[h,E,A]),j=Math.max(1,(Y?.columns??80)-c);xn(()=>{g.current!==e?(y(T.length),v.current=null):y(l=>bt(l,T.length)),g.current=e},[e,T.length]),xn(()=>{$(l=>{let d=l;Z<d?d=Z:Z>=d+j&&(d=Z-j+1);let P=A[W]??0,U=Z===P?P+1:P,C=Math.max(0,U-j);return d>C&&(d=C),d<0&&(d=0),d})},[j,Z,W,A]);let K=yn((l,d)=>{g.current=l,t(l),y(d),v.current=null},[t]),le=yn(async(l,d)=>{if(!a)return;let{row:P,col:U}=Cn(h,E,A),C=b[P]??[],fe=A[P]??0,te=b.length>1;if(p&&(d.meta&&d.return||d.ctrl&&l==="j"||d.shift&&d.return)){let w=[...T.slice(0,h),`
|
|
33
|
+
`,...T.slice(h)].join("");K(w,h+1);return}if(d.return){n(e);return}if(d.leftArrow){d.ctrl||d.meta?(U===0&&P>0?y(E[P]-1):y(E[P]+qt(C,U)),v.current=null):(U===0&&P>0?y(E[P]-1):y(w=>bt(w-1,T.length)),v.current=null);return}if(d.rightArrow){d.ctrl||d.meta?(U>=fe&&P<b.length-1?y(E[P+1]):y(E[P]+kn(C,U)),v.current=null):(U>=fe&&P<b.length-1?y(E[P+1]):y(w=>bt(w+1,T.length)),v.current=null);return}if(p&&te&&d.upArrow){let w=v.current??U,L=Math.max(0,P-1),D=Math.min(w,A[L]??0);y((E[L]??0)+D),v.current=w;return}if(p&&te&&d.downArrow){let w=v.current??U,L=Math.min(b.length-1,P+1),D=Math.min(w,A[L]??0);y((E[L]??0)+D),v.current=w;return}if(d.ctrl){if(l==="a"){y(E[P]??0),v.current=null;return}if(l==="e"){y((E[P]??0)+fe),v.current=null;return}if(l==="u"){if(U>0){let w=E[P]??0,L=[...T.slice(0,w),...T.slice(h)].join("");K(L,w)}return}if(l==="k"){if(U<fe){let w=(E[P]??0)+fe,L=[...T.slice(0,h),...T.slice(w)].join("");K(L,h)}return}if(l==="w"){if(U===0&&P>0){let L=[...T.slice(0,h-1),...T.slice(h)].join("");K(L,h-1);return}let w=qt(C,U);if(w!==U){let L=(E[P]??0)+w,D=[...T.slice(0,L),...T.slice(h)].join("");K(D,L)}return}if(l==="d"){if(h<T.length){let w=[...T.slice(0,h),...T.slice(h+1)].join("");K(w,h)}return}return}if(d.meta){l==="b"?(U===0&&P>0?y(E[P]-1):y(E[P]+qt(C,U)),v.current=null):l==="f"&&(U>=fe&&P<b.length-1?y(E[P+1]):y(E[P]+kn(C,U)),v.current=null);return}if(d.backspace||d.delete){if(h<=0)return;let w=[...T.slice(0,h-1),...T.slice(h)].join("");K(w,h-1);return}if(!(d.tab||d.escape)&&l.length>0){let w=p?l.replace(/\r\n/g,`
|
|
34
|
+
`).replace(/\r/g,`
|
|
35
|
+
`):l.replace(/\r?\n/g,"");if(!w||(w=w.replace(/^\x1b?\[200~/,"").replace(/\x1b?\[201~$/,""),!w))return;if((w.length>=ko||w.includes(`
|
|
36
|
+
`))&&r){let Q=!1,ee={text:w,preventDefault:()=>{Q=!0}};if(await Promise.resolve(r(ee)),Q)return}let D=Gt(w),M=[...T.slice(0,h),...D,...T.slice(h)].join("");K(M,h+D.length)}},[T,h,a,A,E,b,p,r,n,K,e]);return xo(le,{isActive:a}),Ht(yo,{flexDirection:"column",children:b.map((l,d)=>{let P=d===W,C=(P&&Z===l.length?[...l," "]:l).slice(O,O+j),fe=C.join("");if(!P)return Ht(hn,{children:fe||" "},d);let te=bt(Z-O,Math.max(0,C.length-1)),w=C.slice(0,te).join(""),L=C[te]??" ",D=C.slice(te+1).join(""),ee=`${w}\x1B[7m${L}\x1B[27m${D}`;return Ht(hn,{children:ee},d)})})}import{Box as De,Text as Me}from"ink";import Vt from"react";import{Text as $e}from"ink";import Co from"react";import{Fragment as Io,jsx as Pe,jsxs as vn}from"react/jsx-runtime";var Jt=2,Yt=1,Kt=2,bo=1,$n=3,In=4,$o=({text:e,defaultColor:t,linkColor:n,codeColor:r})=>{let a=t;if(!/[*_~`<[https?:]/.test(e))return Pe($e,{color:a,children:e});let c=[],p=0,h=/(\*\*.*?\*\*|\*.*?\*|_.*?_|~~.*?~~|\[.*?\]\(.*?\)|`+.+?`+|<u>.*?<\/u>|https?:\/\/\S+)/g,y;for(;(y=h.exec(e))!==null;){y.index>p&&c.push(Pe($e,{color:a,children:e.slice(p,y.index)},`t-${p}`));let g=y[0],O=null,$=`m-${y.index}`;try{if(g.startsWith("**")&&g.endsWith("**")&&g.length>Jt*2)O=Pe($e,{bold:!0,color:a,children:g.slice(Jt,-Jt)},$);else if(g.length>Yt*2&&(g.startsWith("*")&&g.endsWith("*")||g.startsWith("_")&&g.endsWith("_"))&&!/\w/.test(e.substring(y.index-1,y.index))&&!/\w/.test(e.substring(h.lastIndex,h.lastIndex+1))&&!/\S[./\\]/.test(e.substring(y.index-2,y.index))&&!/[./\\]\S/.test(e.substring(h.lastIndex,h.lastIndex+2)))O=Pe($e,{italic:!0,color:a,children:g.slice(Yt,-Yt)},$);else if(g.startsWith("~~")&&g.endsWith("~~")&&g.length>Kt*2)O=Pe($e,{strikethrough:!0,color:a,children:g.slice(Kt,-Kt)},$);else if(g.startsWith("`")&&g.endsWith("`")&&g.length>bo){let v=g.match(/^(`+)(.+?)\1$/s);v&&v[2]&&(O=Pe($e,{color:r,children:v[2]},$))}else if(g.startsWith("[")&&g.includes("](")&&g.endsWith(")")){let v=g.match(/\[(.*?)\]\((.*?)\)/);if(v){let Y=v[1],T=v[2];O=vn($e,{color:a,children:[Y,vn($e,{color:n,children:[" (",T,")"]})]},$)}}else g.startsWith("<u>")&&g.endsWith("</u>")&&g.length>$n+In-1?O=Pe($e,{underline:!0,color:a,children:g.slice($n,-In)},$):g.match(/^https?:\/\//)&&(O=Pe($e,{color:n,children:g},$))}catch{O=null}c.push(O??Pe($e,{color:a,children:g},$)),p=h.lastIndex}return p<e.length&&c.push(Pe($e,{color:a,children:e.slice(p)},`t-${p}`)),Pe(Io,{children:c.filter(g=>g!==null)})},ct=Co.memo($o);import{Fragment as Ao,jsx as ae,jsxs as En}from"react/jsx-runtime";var vo=1,_n=1,So=1,Po=1,_o=({content:e})=>{let t=e.join(`
|
|
37
|
+
`);return ae(De,{paddingLeft:_n,flexDirection:"column",children:ae(Me,{color:"yellow",children:t})})},Sn=Vt.memo(_o),Eo=({itemText:e,type:t,marker:n,leadingWhitespace:r=""})=>{let a=t==="ol"?`${n}. `:`${n} `,c=a.length,p=r.length;return En(De,{paddingLeft:p+So,flexDirection:"row",children:[ae(De,{width:c,children:ae(Me,{children:a})}),ae(De,{flexGrow:Po,children:ae(Me,{wrap:"wrap",children:ae(ct,{text:e,defaultColor:void 0,linkColor:"cyan",codeColor:"yellow"})})})]})},Pn=Vt.memo(Eo),No=({text:e,renderMarkdown:t=!0})=>{if(!e)return null;if(!t)return ae(De,{paddingLeft:_n,flexDirection:"column",children:ae(Me,{wrap:"wrap",children:e})});let n=e.split(/\r?\n/),r=/^ *(#{1,4}) +(.*)/,a=/^ *(`{3,}|~{3,}) *(\w*?) *$/,c=/^([ \t]*)([-*+]) +(.*)/,p=/^([ \t]*)(\d+)\. +(.*)/,h=/^ *([-*_] *){3,} *$/,y=/^ *> ?(.*)/,g=[],O=!1,$=!0,v=[],Y="";function T(b){b&&(g.push(b),$=!1)}return n.forEach((b,E)=>{let A=`line-${E}`;if(O){let d=b.match(a);d&&d[1].startsWith(Y[0])&&d[1].length>=Y.length?(T(ae(Sn,{content:v},A)),O=!1,v=[],Y=""):v.push(b);return}let W=b.match(a),Z=b.match(r),j=b.match(c),K=b.match(p),le=b.match(h),l=b.match(y);if(W)O=!0,Y=W[1];else if(le)T(ae(De,{children:ae(Me,{dimColor:!0,children:"---"})},A));else if(Z){let d=Z[1].length,P=Z[2],U=d<=2?"cyan":"blue";T(ae(De,{children:ae(Me,{color:U,...(d===4?"italic":"bold")==="italic"?{italic:!0}:{bold:!0},children:ae(ct,{text:P,defaultColor:U,linkColor:"cyan",codeColor:"yellow"})})},A))}else if(l){let d=l[1];T(ae(De,{paddingLeft:1,children:En(Me,{dimColor:!0,children:["> ",ae(ct,{text:d,defaultColor:"gray",linkColor:"cyan",codeColor:"yellow"})]})},A))}else if(j){let d=j[1],P=j[2],U=j[3];T(ae(Pn,{itemText:U,type:"ul",marker:P,leadingWhitespace:d},A))}else if(K){let d=K[1],P=K[2],U=K[3];T(ae(Pn,{itemText:U,type:"ol",marker:P,leadingWhitespace:d},A))}else b.trim().length===0?$||(g.push(ae(De,{height:vo},`spacer-${E}`)),$=!0):T(ae(De,{children:ae(Me,{wrap:"wrap",children:ae(ct,{text:b,defaultColor:void 0,linkColor:"cyan",codeColor:"yellow"})})},A))}),O&&T(ae(Sn,{content:v},"line-eof")),ae(Ao,{children:g})},zt=Vt.memo(No);import{execFile as Do}from"child_process";import Ro from"fs";import Qe from"fs/promises";import Nn from"os";import vt from"path";import{promisify as Lo}from"util";var It=Lo(Do);async function Fo(){let e=vt.join(Nn.tmpdir(),`entrydesk-clipboard-${Date.now()}.png`);try{let t=`
|
|
38
|
+
set imageData to the clipboard as "PNGf"
|
|
39
|
+
set fileRef to open for access POSIX file "${e}" with write permission
|
|
40
|
+
set eof fileRef to 0
|
|
41
|
+
write imageData to fileRef
|
|
42
|
+
close access fileRef
|
|
43
|
+
`;return await It("osascript",["-e",t]),(await Qe.stat(e)).size===0?void 0:{buffer:await Qe.readFile(e),mime:"image/png"}}catch{return}finally{try{Ro.existsSync(e)&&await Qe.unlink(e)}catch{}}}async function Bo(){try{let e=`
|
|
44
|
+
Add-Type -AssemblyName System.Windows.Forms
|
|
45
|
+
$img = [System.Windows.Forms.Clipboard]::GetImage()
|
|
46
|
+
if ($img) {
|
|
47
|
+
$ms = New-Object System.IO.MemoryStream
|
|
48
|
+
$img.Save($ms, [System.Drawing.Imaging.ImageFormat]::Png)
|
|
49
|
+
[System.Convert]::ToBase64String($ms.ToArray())
|
|
50
|
+
}
|
|
51
|
+
`,{stdout:t}=await It("powershell.exe",["-command",e]),n=t.trim();if(!n)return;let r=Buffer.from(n,"base64");return r.length===0?void 0:{buffer:r,mime:"image/png"}}catch{return}}async function Oo(){try{let{stdout:e}=await It("wl-paste",["-t","image/png"],{encoding:"buffer",maxBuffer:52428800});if(e&&e.length>0)return{buffer:e,mime:"image/png"}}catch{}try{let{stdout:e}=await It("xclip",["-selection","clipboard","-t","image/png","-o"],{encoding:"buffer",maxBuffer:52428800});if(e&&e.length>0)return{buffer:e,mime:"image/png"}}catch{}}async function An(){let e=Nn.platform();if(e==="darwin")return Fo();if(e==="win32")return Bo();if(e==="linux")return Oo()}var Uo=new Set([".png",".jpg",".jpeg",".gif",".webp",".bmp",".ico",".heic",".heif",".pdf",".txt",".md",".rtf",".csv",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".key",".pages",".numbers",".odt",".ods",".odp",".json",".xml",".yaml",".yml"]);function Dn(e){let t=vt.extname(e).toLowerCase();return Uo.has(t)}function jo(e){let t=vt.extname(e).toLowerCase();return{".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".bmp":"image/bmp",".ico":"image/x-icon",".heic":"image/heic",".heif":"image/heif",".txt":"text/plain",".md":"text/markdown",".pdf":"application/pdf",".csv":"text/csv",".rtf":"application/rtf",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".ppt":"application/vnd.ms-powerpoint",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".key":"application/vnd.apple.keynote",".pages":"application/vnd.apple.pages",".numbers":"application/vnd.apple.numbers",".odt":"application/vnd.oasis.opendocument.text",".ods":"application/vnd.oasis.opendocument.spreadsheet",".odp":"application/vnd.oasis.opendocument.presentation",".json":"application/json",".xml":"application/xml",".yaml":"text/yaml",".yml":"text/yaml"}[t]||"application/octet-stream"}function St(e){let t=e.trim();return t.startsWith("file://")&&(t=decodeURIComponent(t.slice(7))),(t.startsWith("'")&&t.endsWith("'")||t.startsWith('"')&&t.endsWith('"'))&&(t=t.slice(1,-1)),t=t.replace(/\\(.)/g,"$1"),t}async function Rn(e){let t=St(e);if(/^https?:\/\//.test(t))return!1;try{return await Qe.access(t),!0}catch{return!1}}async function Ln(e){let t=St(e);try{if(!(await Qe.stat(t)).isFile())return;let r=await Qe.readFile(t),a=jo(t),c=vt.basename(t);return{buffer:r,mimeType:a,filename:c}}catch{return}}var Ie="\x1B[2m",X="\x1B[0m",ge="\x1B[36m",Ze="\x1B[32m",Fn="\x1B[31m",Ye="\x1B[38;2;59;91;204m",Xt="\x1B[38;2;126;200;248m",Qt="\x1B[38;2;244;196;78m";import{useState as Oe}from"react";import{v4 as Bn}from"uuid";function On(e,t){let[n,r]=Oe({status:"loading"}),[a,c]=Oe([]),[p,h]=Oe(""),[y,g]=Oe(()=>e||Bn()),[O,$]=Oe(t),[v,Y]=Oe(!!e),[T,b]=Oe(null),[E,A]=Oe(""),[W,Z]=Oe(!1),j=le=>{c(l=>[...l,{role:"system",content:le}])};return{state:n,setState:r,messages:a,setMessages:c,input:p,setInput:h,taskId:y,setTaskId:g,currentTaskTitle:O,setCurrentTaskTitle:$,hasPersistedTask:v,setHasPersistedTask:Y,credentials:T,setCredentials:b,currentResponse:E,setCurrentResponse:A,fullOutput:W,setFullOutput:Z,addSystemMessage:j,startNewTask:le=>{let l=Bn();g(l),$(void 0),Y(!1),c([]),le&&j(le)}}}import{useEffect as Wo,useState as Un}from"react";function jn(e){let[t,n]=Un(null),[r,a]=Un(!0);return Wo(()=>{let c=!1;async function p(){try{let h=await We();if(c)return;n({accessToken:h.accessToken,workspaceId:h.workspaceId}),a(!1)}catch(h){if(c)return;if(h instanceof Je){if(h.code==="not-logged-in"){e({status:"not-logged-in"}),a(!1);return}if(h.code==="no-workspace"){e({status:"no-workspace"}),a(!1);return}}let y=h instanceof Error?h.message:"Failed to authenticate";e({status:"error",message:y}),a(!1)}}return p(),()=>{c=!0}},[e]),{credentials:t,loading:r}}import{useEffect as Mo,useState as ut}from"react";function Wn(e){let[t,n]=ut([]),[r,a]=ut([]),[c,p]=ut([]),[h,y]=ut([]),[g,O]=ut(!1);return Mo(()=>{if(!e)return;let $=!1;O(!0);async function v(){if(e)try{let Y=new pe,[T,b,E,A]=await Promise.all([Y.getConnectors(e.accessToken,e.workspaceId),Y.getModels(e.accessToken,e.workspaceId),Y.getAgents(e.accessToken,e.workspaceId),Y.getModelProviders(e.accessToken,e.workspaceId)]);if($)return;n(T.connectors),a(b.models),p(E.agents),y(A.providers??[])}catch{}finally{$||O(!1)}}return v(),()=>{$=!0}},[e]),{availableConnectors:t,availableModels:r,availableAgents:c,modelProviders:h,loading:g}}import et from"fs";import Gn from"path";import{useCallback as Go}from"react";import{v4 as qo}from"uuid";function Mn(e,t){if(!e)return"(no result)";if(typeof e!="object"){let a=String(e);return t||a.length<=200?a:a.slice(0,200)+"..."}let n=e;if("structuredContent"in n&&n.structuredContent){let a=n.structuredContent;if(a.stdout&&typeof a.stdout=="string"){let c=a.stdout.trim();return t||c.length<=200?c:c.slice(0,200)+"..."}}if("content"in n&&Array.isArray(n.content)){let a=n.content.filter(c=>c.type==="text"&&c.text).map(c=>c.text).join(`
|
|
52
|
+
`);return a?t||a.length<=200?a:a.slice(0,200)+"...":"(result)"}let r=JSON.stringify(e,null,t?2:void 0);return t||r.length<=200?r:r.slice(0,200)+"..."}function Ke(e,t=!1){let n=[];for(let r of e)if(r.type==="text"&&r.text)n.push(r.text);else if(r.type==="reasoning"&&r.text)t?n.push(`${Ie}[Thinking]
|
|
53
|
+
${r.text}${X}`):n.push(`${Ie}[Thinking...]${X}`);else if(r.type==="tool-call"&&r.toolName){let a=[];if(a.push(`${ge}\u250C\u2500 Tool: ${r.toolName}${X}`),r.args){let c=JSON.stringify(r.args,null,t?2:void 0),p=t||c.length<=100?c:c.slice(0,100)+"...";a.push(`${Ie}\u2502 Args: ${p}${X}`)}r.result!==void 0?(a.push(`${Ze}\u2502 Result: ${Mn(r.result,t)}${X}`),a.push(`${ge}\u2514\u2500 completed${X}`)):a.push(`${ge}\u2514\u2500${X}`),n.push(a.join(`
|
|
54
|
+
`))}else if(r.type.startsWith("tool-")&&r.type!=="tool-call"){let a=r.title||r.type.slice(5).replace(/__/g," "),c=[];if(c.push(`${ge}\u250C\u2500 Tool: ${a}${X}`),r.input){let p=JSON.stringify(r.input,null,t?2:void 0),h=t||p.length<=100?p:p.slice(0,100)+"...";c.push(`${Ie}\u2502 Input: ${h}${X}`)}r.output!==void 0&&r.state==="output-available"?(c.push(`${Ze}\u2502 Output: ${Mn(r.output,t)}${X}`),c.push(`${ge}\u2514\u2500 completed${X}`)):r.state==="error"?c.push(`${ge}\u2514\u2500 failed${X}`):c.push(`${ge}\u2514\u2500${X}`),n.push(c.join(`
|
|
55
|
+
`))}return n.join(`
|
|
56
|
+
|
|
57
|
+
`).trim()}var Pt=class{pendingToolCalls=new Map;hasPending(){return this.pendingToolCalls.size>0}hasExecuting(){for(let t of this.pendingToolCalls.values())if(t.status==="executing")return!0;return!1}clear(t){this.pendingToolCalls.delete(t)}buildToolDisplay(){if(this.pendingToolCalls.size===0)return"";let t=[];for(let[,n]of this.pendingToolCalls){let r=n.toolName.replace(/__/g," "),a=`
|
|
58
|
+
|
|
59
|
+
${ge}\u250C\u2500 Tool: ${r}${X}`;if(n.args){let c=n.args.length>100?n.args.slice(0,100)+"...":n.args;a+=`
|
|
60
|
+
${Ie}\u2502 Input: ${c}${X}`}if(n.output){let c=n.output.length>150?n.output.slice(0,150)+"...":n.output;a+=`
|
|
61
|
+
${Ze}\u2502 Output: ${c}${X}`}else if(n.status==="executing"){let c=n.startedAt??Date.now(),p=Math.floor((Date.now()-c)/1e3);a+=`
|
|
62
|
+
${ge}\u2502${X} (executing... ${p}s)`}else n.status==="preparing"&&(a+=`
|
|
63
|
+
${ge}\u2502${X} (preparing...)`);t.push(a)}return t.join("")}flushPending(t){if(this.pendingToolCalls.size===0)return t;for(let[n,r]of this.pendingToolCalls){let a=r.toolName.replace(/__/g," "),c=typeof r.args=="string"&&r.args.length>100?r.args.slice(0,100)+"...":r.args||"";t+=`
|
|
64
|
+
|
|
65
|
+
${ge}\u250C\u2500 Tool: ${a}${X}`,c&&(t+=`
|
|
66
|
+
${Ie}\u2502 Input: ${c}${X}`),t+=`
|
|
67
|
+
${ge}\u2514\u2500 completed${X}
|
|
68
|
+
`,this.pendingToolCalls.delete(n)}return t}handleToolInputStart(t){return t.toolCallId&&t.toolName?(this.pendingToolCalls.set(t.toolCallId,{toolName:t.toolName,args:"",status:"preparing"}),this.buildToolDisplay()):null}handleToolInputDelta(t){if(t.toolCallId&&t.inputTextDelta){let n=this.pendingToolCalls.get(t.toolCallId);if(n)return n.args=(n.args||"")+t.inputTextDelta,n.status="executing",n.startedAt??=Date.now(),this.buildToolDisplay()}return null}handleToolOutputStart(t){if(t.toolCallId){let n=this.pendingToolCalls.get(t.toolCallId);if(n)return n.output="",n.status="output",this.buildToolDisplay()}return null}handleToolOutputDelta(t){if(t.toolCallId&&t.outputTextDelta){let n=this.pendingToolCalls.get(t.toolCallId);if(n)return n.output=(n.output||"")+t.outputTextDelta,this.buildToolDisplay()}return null}handleToolOutputEnd(t,n){if(!t.toolCallId)return null;let r=this.pendingToolCalls.get(t.toolCallId);if(!r)return null;let a=r.toolName.replace(/__/g," "),c=typeof r.args=="string"&&r.args.length>100?r.args.slice(0,100)+"...":r.args||"",p=(r.output||"").length>200?(r.output||"").slice(0,200)+"...":r.output||"";return n+=`
|
|
69
|
+
|
|
70
|
+
${ge}\u250C\u2500 Tool: ${a}${X}`,c&&(n+=`
|
|
71
|
+
${Ie}\u2502 Input: ${c}${X}`),n+=`
|
|
72
|
+
${Ze}\u2502 Output: ${p}${X}`,n+=`
|
|
73
|
+
${ge}\u2514\u2500 completed${X}
|
|
74
|
+
`,this.pendingToolCalls.delete(t.toolCallId),{fullResponse:n,toolDisplay:this.buildToolDisplay()}}handleToolError(t,n){if(!t.toolCallId)return null;let a=(this.pendingToolCalls.get(t.toolCallId)?.toolName||t.toolName||"Tool").replace(/__/g," "),c=t.errorText||"Unknown error",p=c.length>200?c.slice(0,200)+"...":c;return n+=`
|
|
75
|
+
|
|
76
|
+
${ge}\u250C\u2500 Tool: ${a}${X}`,n+=`
|
|
77
|
+
${Fn}\u2502 Error: ${p}${X}`,n+=`
|
|
78
|
+
${ge}\u2514\u2500 failed${X}
|
|
79
|
+
`,this.pendingToolCalls.delete(t.toolCallId),{fullResponse:n,toolDisplay:this.buildToolDisplay()}}};var dt=Gn.join(process.env.HOME||"/tmp",".entrydesk","stream-debug.log");function ne(e,t){if(!process.env.DEBUG)return;let r=`[${new Date().toISOString()}] ${e}`;t!==void 0&&(r+=`
|
|
80
|
+
DATA: ${JSON.stringify(t,null,2)}`),r+=`
|
|
81
|
+
`;try{et.appendFileSync(dt,r)}catch{}}function Ho(){try{if(et.existsSync(dt)&&et.unlinkSync(dt),process.env.DEBUG){let e=Gn.dirname(dt);et.existsSync(e)||et.mkdirSync(e,{recursive:!0}),et.writeFileSync(dt,`=== Debug session started at ${new Date().toISOString()} ===
|
|
82
|
+
`)}}catch{}}function _t(e){if(!e)return{};if(typeof e=="string")try{return JSON.parse(e)}catch{return{}}return typeof e=="object"?e:{}}function qn({taskId:e,credentials:t,currentAgentId:n,currentModel:r,activeConnectorIds:a,localTools:c,fullOutput:p,setMessages:h,setState:y,setCurrentResponse:g,setCredentials:O,setHasPersistedTask:$,getFileIds:v,clearFiles:Y}){let T=c?xt():void 0,b=c?wt():void 0;return{sendMessage:Go(async(A,W,Z)=>{Ho(),ne("=== sendMessage called ===",{text:A,localTools:c,clientToolsCount:T?.length});let j=W||t?.accessToken,K=Z||t?.workspaceId;if(!j||!K)try{let d=await We();j=d.accessToken,K=d.workspaceId,O(d)}catch(d){if(d instanceof Je){if(d.code==="not-logged-in"){y({status:"not-logged-in"});return}if(d.code==="no-workspace"){y({status:"no-workspace"});return}}let P=d instanceof Error?d.message:"Authentication failed";y({status:"error",message:P});return}else try{let d=await ln();d!==j&&(j=d,O({accessToken:d,workspaceId:K}))}catch(d){if(d instanceof Je&&d.code==="not-logged-in"){y({status:"not-logged-in"});return}let P=d instanceof Error?d.message:"Authentication failed";y({status:"error",message:P});return}h(d=>[...d,{role:"user",content:A}]),y({status:"sending"}),g("");let le=null,l=null;try{let d=new pe,P=v?.()??[],U={id:e,message:{id:qo(),createdAt:new Date,role:"user",parts:[{type:"text",text:A}]}};P.length>0&&(U.fileIds=P),n?U.agentId=n:(r&&(U.model=r),U.connectorIds=a??[]),T&&(U.clientTools=T),b&&(U.clientToolSystemPrompt=b);let C=await d.task(j,K,U);if(!C.ok){let S=await C.text();throw new Error(`API error ${C.status}: ${S}`)}if(!C.body)throw new Error("No response body from server");le=C.body.getReader();let fe=new TextDecoder,te="",w="",L="",D="",M="",Q="",ee="",R=new Pt,H=[],V=[],oe=[],F=()=>{let S=R.hasExecuting();S&&!l?l=setInterval(()=>{if(!R.hasExecuting()){l&&(clearInterval(l),l=null);return}g(w+R.buildToolDisplay())},1e3):!S&&l&&(clearInterval(l),l=null)};for(;;){let{done:S,value:N}=await le.read();if(S)break;te+=fe.decode(N,{stream:!0});let I=te.split(`
|
|
83
|
+
`);te=I.pop()||"";for(let u of I)if(u.trim()!=="data: [DONE]"&&u.startsWith("data: "))try{let m=JSON.parse(u.slice(6));switch(ne(`SSE event received: ${m.type}`,m),m.type){case"reasoning-start":D=m.id||"0",L="";break;case"reasoning-delta":m.delta&&(L+=m.delta,g(`${Ie}[Thinking...]${X}
|
|
84
|
+
${L}`)),m.providerMetadata?.anthropic?.signature&&(M=m.providerMetadata.anthropic.signature);break;case"reasoning-end":if(L){let _={type:"reasoning",id:D,text:L,state:"done"};M&&(_.providerMetadata={anthropic:{signature:M}}),V.push(_),ne("Added reasoning to messageParts",{reasoningLength:L.length,hasSignature:!!M,messagePartsCount:V.length})}L="",M="",g("");break;case"text-delta":m.delta&&(R.hasPending()&&(w=R.flushPending(w)),w+=m.delta,Q+=m.delta,g(w));break;case"tool-input-start":{let _=R.handleToolInputStart(m);_&&g(w+_),F();break}case"tool-input-delta":{let _=R.handleToolInputDelta(m);_&&g(w+_),F();break}case"tool-call":case"tool-input-available":{if(ne(`=== Tool event: ${m.type} ===`,{toolCallId:m.toolCallId,toolName:m.toolName,localTools:c,isClientToolResult:m.toolName?Be(m.toolName):"no toolName",args:m.args,input:m.input}),m.toolCallId&&m.toolName){let _=_t(m.args??m.input);V.push({type:m.type,toolCallId:m.toolCallId,toolName:m.toolName,args:_}),ne("Added tool to messageParts",{messagePartsCount:V.length})}if(c&&m.toolCallId&&m.toolName&&Be(m.toolName)){let _=_t(m.args??m.input);H.push({toolCallId:m.toolCallId,toolName:m.toolName,args:_}),ne("Added to pendingClientTools",{pendingCount:H.length,pendingClientTools:H}),g(w+R.buildToolDisplay()+`
|
|
85
|
+
[Executing ${m.toolName} locally...]`)}else ne("NOT added to pendingClientTools - conditions not met",{localTools:c,hasToolCallId:!!m.toolCallId,hasToolName:!!m.toolName,isClientTool:m.toolName?Be(m.toolName):!1});break}case"tool-output-start":{let _=R.handleToolOutputStart(m);_&&g(w+_),F();break}case"tool-output-delta":{let _=R.handleToolOutputDelta(m);_&&g(w+_),F();break}case"tool-output-end":{let _=R.handleToolOutputEnd(m,w);_&&(w=_.fullResponse,g(w+_.toolDisplay)),F();break}case"tool-input-error":case"tool-output-error":{let _=R.handleToolError(m,w);_&&(w=_.fullResponse,g(w+_.toolDisplay)),F();break}case"start":m.messageId&&(ee=m.messageId,ne("Captured messageId from start event",{messageId:ee}));break;case"start-step":case"text-start":case"text-end":case"finish-step":case"message-metadata":case"finish":break;case"error":m.errorText&&console.error("Stream error:",m.errorText);break}}catch{}}if(Q){let S=V.findIndex(I=>I.type!=="reasoning"),N=S===-1?V.length:S;V.splice(N,0,{type:"text",text:Q}),ne("Added accumulated text to messageParts",{textLength:Q.length,insertIndex:N})}for(ne("=== Initial stream ended ===",{pendingClientToolsCount:H.length,pendingClientTools:H,messagePartsCount:V.length,messageParts:V.map(S=>({type:S.type,toolCallId:S.toolCallId,toolName:S.toolName}))});H.length>0;){ne("=== Starting pending tools execution loop ===",{pendingCount:H.length});let S=[];for(let u of H){ne(`Executing tool: ${u.toolName}`,{toolCallId:u.toolCallId,args:u.args}),R.handleToolInputStart({toolCallId:u.toolCallId,toolName:u.toolName}),R.handleToolInputDelta({toolCallId:u.toolCallId,inputTextDelta:JSON.stringify(u.args)}),g(w+R.buildToolDisplay()),F();let m=await Tt(u.toolName,u.args);ne(`Tool execution result: ${u.toolName}`,{success:m.success,resultPreview:m.success?JSON.stringify(m.result).slice(0,200):m.error});let _=m.success?JSON.stringify(m.result):m.error||"Unknown error";if(S.push({toolCallId:u.toolCallId,toolName:u.toolName,content:[{type:"text",text:_}],isError:!m.success}),m.success){R.handleToolOutputStart({toolCallId:u.toolCallId}),R.handleToolOutputDelta({toolCallId:u.toolCallId,outputTextDelta:JSON.stringify(m.result).slice(0,200)});let ce=R.handleToolOutputEnd({toolCallId:u.toolCallId},w);ce&&(w=ce.fullResponse)}else{let ce=R.handleToolError({toolCallId:u.toolCallId,errorText:m.error},w);ce&&(w=ce.fullResponse)}g(w+R.buildToolDisplay()),F()}H.length=0;for(let u of S){let m=V.find(_=>(_.type==="tool-input-available"||_.type==="tool-call")&&_.toolCallId===u.toolCallId);if(m){let _=[];for(let G of u.content)G.type==="text"?_.push(G.text):G.type==="image"?_.push("[Image]"):G.type==="audio"?_.push("[Audio]"):(G.type==="resource"||G.type==="resource_link")&&_.push("[Resource]");let ce=_.join(`
|
|
86
|
+
`);oe.push({type:`tool-${m.toolName}`,toolName:m.toolName,toolCallId:m.toolCallId,input:m.args,output:ce,isError:u.isError})}}if(ne("=== Sending clientToolResults for continuation ===",{toolResultsCount:S.length,toolResults:S.map(u=>({toolCallId:u.toolCallId,toolName:u.toolName,isError:u.isError}))}),le)try{le.releaseLock()}catch{}let N={id:e,clientToolResults:S};n?N.agentId=n:(r&&(N.model=r),N.connectorIds=a??[]),T&&(N.clientTools=T),b&&(N.clientToolSystemPrompt=b),ne("=== Sending continuation request ===",{taskId:e,hasAgentId:!!N.agentId,hasModel:!!N.model,clientToolResultsCount:S.length});let I=await d.task(j,K,N);if(ne("=== Continuation response received ===",{ok:I.ok,status:I.status}),!I.ok){let u=await I.text();throw new Error(`Continuation failed: ${I.status}: ${u}`)}if(!I.body)break;for(ne("=== Processing continuation stream ==="),le=I.body.getReader(),V.length=0,Q="",L="",D="",M="";;){let{done:u,value:m}=await le.read();if(u){ne("=== Continuation stream done ===");break}te+=fe.decode(m,{stream:!0});let _=te.split(`
|
|
87
|
+
`);te=_.pop()||"";for(let ce of _)if(ce.trim()!=="data: [DONE]"&&ce.startsWith("data: "))try{let G=JSON.parse(ce.slice(6));switch(ne(`Continuation SSE: ${G.type}`,G),G.type){case"reasoning-start":D=G.id||"0",L="";break;case"reasoning-delta":G.delta&&(L+=G.delta,g(`${Ie}[Thinking...]${X}
|
|
88
|
+
${L}`)),G.providerMetadata?.anthropic?.signature&&(M=G.providerMetadata.anthropic.signature);break;case"reasoning-end":if(L){let xe={type:"reasoning",id:D,text:L,state:"done"};M&&(xe.providerMetadata={anthropic:{signature:M}}),V.push(xe),ne("Continuation: Added reasoning to messageParts",{reasoningLength:L.length,hasSignature:!!M,messagePartsCount:V.length})}L="",M="",g(w);break;case"text-delta":G.delta&&(w+=G.delta,Q+=G.delta,g(w));break;case"tool-call":case"tool-input-available":if(G.toolCallId&&G.toolName){let xe=_t(G.args??G.input);V.push({type:G.type,toolCallId:G.toolCallId,toolName:G.toolName,args:xe})}if(c&&G.toolCallId&&G.toolName&&Be(G.toolName)){let xe=_t(G.args??G.input);H.push({toolCallId:G.toolCallId,toolName:G.toolName,args:xe}),ne("Continuation: Added to pendingClientTools",{pendingCount:H.length})}break;case"finish":ne("Continuation finish event",G);break}}catch{}}if(Q){let u=V.findIndex(_=>_.type!=="reasoning"),m=u===-1?V.length:u;V.splice(m,0,{type:"text",text:Q})}ne("=== Continuation stream processing complete ===",{pendingClientToolsCount:H.length,messagePartsCount:V.length,fullResponseLength:w.length})}if(c&&T&&T.length>0){let S=[];for(let I of oe)S.push({type:String(I.type),title:String(I.toolName).replace(/__/g," "),input:I.input,output:I.output,state:I.isError?"error":"output-available"});for(let I of V)I.type==="text"&&I.text&&S.push({type:"text",text:I.text});let N=Ke(S,p);ne("=== Using formatted parts for local tools ===",{executedToolsCount:oe.length,textPartsCount:V.filter(I=>I.type==="text").length,contentLength:N.length}),h(I=>[...I,{role:"assistant",content:N,parts:S}])}else{ne("=== Fetching message from API ===",{fullResponseLength:w.length,fullResponsePreview:w.slice(0,200)});try{let{messages:S}=await d.getMessages(j,K,e,10);ne("=== API messages received ===",{count:S.length,roles:S.map(I=>I.role)});let N=S.find(I=>I.role==="assistant");if(N){let I=N.parts,u=Ke(I,p);ne("=== Setting message from API ===",{partsCount:I.length,partTypes:I.map(m=>m.type),contentLength:u.length,contentPreview:u.slice(0,200)}),h(m=>[...m,{role:"assistant",content:u,parts:I}])}else ne("=== No assistant message found, using fallback ==="),h(I=>[...I,{role:"assistant",content:w}])}catch(S){ne("=== API fetch failed, using fallback ===",{error:S instanceof Error?S.message:String(S)}),h(N=>[...N,{role:"assistant",content:w}])}}ne("=== Message handling complete ==="),g(""),y({status:"ready"}),$(!0),P.length>0&&Y?.()}catch(d){ne("=== ERROR ===",{message:d instanceof Error?d.message:String(d),stack:d instanceof Error?d.stack:void 0});let P=d instanceof Error?d.message:"Failed to send message";y({status:"error",message:P})}finally{if(l&&(clearInterval(l),l=null),le)try{le.releaseLock()}catch{}}},[t,e,n,r,a,c,T,b,p,h,y,g,O,$,v,Y])}}import{useState as Jo}from"react";var Hn=new Map([["sandbox","Sandbox"],["web_search","Web Search"],["image_generation","Image Generation"],["chart","Chart"],["file_system","FileSystem"]]);function Jn(e){let[t,n]=Jo(e);return{fileSystem:t,setFileSystem:n,capabilityLabelMap:Hn}}import{useEffect as Yo,useState as Ko}from"react";function Yn(e,t){let[n,r]=Ko(null);return Yo(()=>{let a=!1;async function c(){if(!e||!t){r(null);return}try{let h=await new pe().getAgent(t.accessToken,t.workspaceId,e);a||r(h)}catch{a||r(null)}}return c(),()=>{a=!0}},[e,t]),{currentAgentDetails:n}}import{useState as Zt}from"react";function Kn(e,t,n){let[r,a]=Zt(e),[c,p]=Zt(t),[h,y]=Zt(n);return{currentModel:r,setCurrentModel:a,currentAgentId:c,setCurrentAgentId:p,activeConnectorIds:h,setActiveConnectorIds:y}}import{useApp as zo,useInput as Xo}from"ink";import{useCallback as Ue,useRef as Qo,useState as Te}from"react";import{spawn as Vo}from"child_process";function Vn(e){return new Promise((t,n)=>{let r,a;process.platform==="darwin"?(r="open",a=[e]):process.platform==="win32"?(r="cmd",a=["/c","start","",e]):(r="xdg-open",a=[e]);let c=Vo(r,a,{stdio:"ignore",detached:!0});c.once("error",p=>{n(p)}),c.once("spawn",()=>{c.unref(),t()})})}var zn=[{name:"help",aliases:["h","?"],description:"Show available commands"},{name:"clear",aliases:["cls","new"],description:"Start a new task"},{name:"model",aliases:["m"],description:"Show/switch model",hasArgs:!0},{name:"agent",aliases:["a"],description:"Show/switch agent",hasArgs:!0},{name:"skills",aliases:["sk"],description:"List skills",hasArgs:!0},{name:"schedules",aliases:["sch"],description:"List schedules",hasArgs:!0},{name:"connectors",aliases:["conn"],description:"Select connectors"},{name:"capabilities",aliases:["cap"],description:"Toggle client capabilities"},{name:"tasks",aliases:["c"],description:"Switch to another task"},{name:"workspace",aliases:["ws"],description:"List/switch workspace",hasArgs:!0},{name:"budget",aliases:["bg"],description:"View/set workspace budget",hasArgs:!0},{name:"usage",aliases:["u"],description:"View current month usage"},{name:"status",aliases:["s"],description:"Show session status"},{name:"profile",aliases:["p"],description:"Manage profiles",hasArgs:!0},{name:"open-in-browser",aliases:[],description:"Open current task in browser"},{name:"share",aliases:[],description:"Get share link for current task"},{name:"delete",aliases:["del"],description:"Delete current task"},{name:"quit",aliases:["exit","q"],description:"Exit task"}];function Xn(e){if(!e.startsWith("/"))return[];let t=e.slice(1).toLowerCase();return t?zn.filter(n=>n.name.startsWith(t)||n.aliases.some(r=>r.startsWith(t))):zn}function Qn(e){let t=e.trim();if(!t.startsWith("/"))return null;let n=t.slice(1).split(/\s+/),r=n[0]?.toLowerCase(),a=n.slice(1).join(" ");switch(r){case"help":case"h":case"?":return{type:"help"};case"clear":case"cls":case"new":return{type:"clear"};case"model":case"m":return{type:"model",value:a||void 0};case"agent":case"a":return{type:"agent",value:a||void 0};case"skills":case"sk":return{type:"skills",value:a||void 0};case"schedules":case"sch":return{type:"schedules",value:a||void 0};case"connectors":case"conn":return{type:"connectors"};case"capabilities":case"cap":return{type:"capabilities"};case"tasks":case"c":return{type:"tasks"};case"workspace":case"ws":return{type:"workspace",value:a||void 0};case"budget":case"bg":return{type:"budget",value:a||void 0};case"usage":case"u":return{type:"usage"};case"status":case"s":return{type:"status"};case"profile":case"p":return{type:"profile",value:a||void 0};case"open-in-browser":return{type:"open-in-browser"};case"share":return{type:"share"};case"delete":case"del":return{type:"delete"};case"quit":case"exit":case"q":return{type:"quit"};default:return{type:"unknown",input:t}}}var Zn=`Available commands:
|
|
89
|
+
/help, /h, /? Show this help message
|
|
90
|
+
/clear, /cls, /new Start a new task
|
|
91
|
+
/model [name], /m Show current model or switch to [name]
|
|
92
|
+
/agent [name], /a Show current agent or switch to [name]
|
|
93
|
+
/skills [name], /sk List skills or show details for [name]
|
|
94
|
+
/schedules [id], /sch List schedules or show details for [id]
|
|
95
|
+
/connectors, /conn Select active connectors
|
|
96
|
+
/capabilities, /cap Toggle client capabilities (FileSystem)
|
|
97
|
+
/tasks, /c Switch to another task
|
|
98
|
+
/workspace [id], /ws List or switch workspace
|
|
99
|
+
/budget [amount], /bg View or set workspace budget
|
|
100
|
+
/usage, /u View current month usage (top 10 by cost)
|
|
101
|
+
/status, /s Show current session status
|
|
102
|
+
/profile [args], /p Manage profiles (list/show/use/create/delete/rename/clone)
|
|
103
|
+
/open-in-browser Open current task in browser
|
|
104
|
+
/share Get share link for current task
|
|
105
|
+
/delete, /del Delete current task
|
|
106
|
+
/quit, /exit, /q Exit interactive mode
|
|
107
|
+
|
|
108
|
+
Note: For detailed usage with sorting/limits, use: entrydesk usage --help
|
|
109
|
+
|
|
110
|
+
Keyboard shortcuts:
|
|
111
|
+
Ctrl+O Toggle full output mode
|
|
112
|
+
Ctrl+C Exit`;function en(e){if(e.type==="no-repeat")return"No repeat";let{interval:t}=e;switch(t.unit){case"minutes":return`Every ${t.every} min`;case"hours":return`Every ${t.every} hr`;case"days":return`Every ${t.every} day at ${String(t.time.hour).padStart(2,"0")}:${String(t.time.minute).padStart(2,"0")}`;case"weeks":return`Every ${t.every} week`;case"months":return`Every ${t.every} month`;default:return"Unknown"}}function eo({input:e,setInput:t,taskId:n,setTaskId:r,currentTaskTitle:a,setCurrentTaskTitle:c,currentModel:p,setCurrentModel:h,currentAgentId:y,setCurrentAgentId:g,currentAgentDetails:O,setCurrentAgentDetails:$,activeConnectorIds:v,setActiveConnectorIds:Y,fileSystem:T,setFileSystem:b,availableModels:E,availableAgents:A,availableConnectors:W,messages:Z,hasPersistedTask:j,setHasPersistedTask:K,setMessages:le,addSystemMessage:l,startNewTask:d,sendMessage:P,setFullOutput:U,credentials:C,setCredentials:fe,setState:te,defaultCapabilities:w,capabilityLabelMap:L,hasUploadingFiles:D=!1}){let{exit:M}=zo(),[Q,ee]=Te([]),[R,H]=Te(0),[V,oe]=Te(!1),[F,S]=Te(null),[N,I]=Te([]),[u,m]=Te(0),[_,ce]=Te(new Set),[G,xe]=Te(new Set),[sn,pt]=Te([]),[_e,Lt]=Te([]),[ve,mt]=Te([]),[Re,gt]=Te([]),[Ee,je]=Te(null),[Ft,nt]=Te(""),Ve=Qo(!1),[Le,ye]=Te(!1),ze=Ue(async()=>{if(!C)return[];let k=new pe,f=[],o;do{let s=await k.listAvailableSkills(C.accessToken,C.workspaceId,{limit:100,nextKey:o});f.push(...s.skills),o=s.nextKey}while(o);return Lt(f),f},[C]),Xe=Ue(async()=>{if(!C)return[];let k=new pe,f=[],o;do{let s=await k.getSchedules(C.accessToken,C.workspaceId,{limit:100,nextKey:o});f.push(...s.schedules),o=s.nextKey}while(o);return mt(f),f},[C]),we=Ue(async k=>{if(k==="model"){if(E.length===0){l("No models available.");return}let f=E.map(s=>({id:s.id,name:s.name,description:s.description}));I(f);let o=p?f.findIndex(s=>s.id===p):-1;m(Math.max(o,0)),S("model")}else if(k==="agent"){if(A.length===0){l("No agents available.");return}let f=A.map(s=>({id:s.id,name:s.name,description:s.description}));I(f);let o=y?f.findIndex(s=>s.id===y):-1;m(Math.max(o,0)),S("agent")}else if(k==="skills"){let f=_e;if(f.length===0)try{f=await ze()}catch{l("Failed to load skills.");return}if(f.length===0){l("No skills available.");return}let o=f.map(s=>({id:s.id,name:s.name,description:s.description}));I(o),m(0),S("skills")}else if(k==="schedules"){let f=ve;if(f.length===0)try{f=await Xe()}catch{l("Failed to load schedules.");return}if(f.length===0){l("No schedules found.");return}let o=f.map(s=>({id:s.id,name:s.name,description:`${s.agent.name} - ${s.isActive?"Active":"Paused"}`}));I(o),m(0),S("schedules")}else if(k==="connectors"){if(W.length===0){l("No connectors available.");return}let f=W.map(o=>({id:o.id,name:o.name}));I(f),m(0),ce(new Set(v??[])),S("connectors")}else if(k==="capabilities"){I([{id:"fileSystem",name:"FileSystem",description:"Local file operations"}]),m(0);let o=new Set;T&&o.add("fileSystem"),xe(o),S("capabilities")}else if(k==="tasks"){if(!C){l("Not authenticated.");return}try{let f=new pe,{tasks:o}=await f.getTasks(C.accessToken,C.workspaceId,20);if(o.length===0){l("No tasks available.");return}pt(o);let s=o.map(x=>({id:x.id,name:x.title||"Untitled",description:new Date(x.createdAt).toLocaleDateString()}));I(s);let i=s.findIndex(x=>x.id===n);m(Math.max(i,0)),S("tasks")}catch{l("Failed to load tasks.")}}else if(k==="profile"){let f=ie.getProfileNames(),o=ie.getCurrentProfileName(),s=f.map(x=>({id:x,name:x,description:x===o?"(current)":void 0}));I(s);let i=s.findIndex(x=>x.id===o);m(Math.max(i,0)),S("profile")}oe(!1),ee([])},[E,A,_e,ve,W,v,p,y,T,ze,Xe,C,n,l]),Se=Ue(k=>{let f=de.getAll(k);h(f.model?.default),g(void 0),$(null);let o=f.connectors?.defaults;Y(o&&o.length>0?o:void 0);let s=f.localTools;b(s?.fileSystem??w.fileSystem)},[h,g,$,Y,b,w]),Ne=Ue(async()=>{try{let k=await We();fe({accessToken:k.accessToken,workspaceId:k.workspaceId}),te({status:"ready"})}catch(k){if(fe(null),k instanceof Je){if(k.code==="not-logged-in"){te({status:"not-logged-in"});return}if(k.code==="no-workspace"){te({status:"no-workspace"});return}}let f=k instanceof Error?k.message:"Failed to authenticate";te({status:"error",message:f})}},[fe,te]),Ge=Ue(async k=>{switch(k.type){case"help":return l(Zn),!0;case"clear":return d("Started a new task."),!0;case"model":{if(k.value){let f=k.value.toLowerCase(),o=E.find(s=>s.id.toLowerCase()===f||s.name.toLowerCase().includes(f));if(o)y?d(`Switched to model: ${o.name} (new task)`):l(`Switched to model: ${o.name}`),h(o.id),g(void 0),$(null),de.setDefaultModel(o.id);else{let s=E.map(i=>i.name).join(", ");l(`Model "${k.value}" not found.
|
|
113
|
+
Available: ${s||"none"}`)}}else{let f=E.find(o=>o.id===p)?.name||p;l(p?`Current model: ${f}`:"No model selected. Using agent mode.")}return!0}case"agent":{if(!k.value)return A.length===0?(l("No agents available."),!0):(we("agent"),!0);let f=k.value.toLowerCase(),o=A.find(s=>s.id.toLowerCase()===f||s.name.toLowerCase().includes(f));if(o)o.id!==y?d(`Switched to agent: ${o.name} (new task)`):l(`Switched to agent: ${o.name}`),g(o.id),h(void 0);else{let s=A.map(i=>i.name).join(", ");l(`Agent "${k.value}" not found.
|
|
114
|
+
Available: ${s||"none"}`)}return!0}case"skills":{if(!k.value)return we("skills"),!0;let f=k.value.toLowerCase();return(_e.length>0?Promise.resolve(_e):ze().catch(()=>[])).then(s=>{let i=s.find(x=>x.id.toLowerCase()===f||x.name.toLowerCase().includes(f));l(i?`Skill: ${i.name}
|
|
115
|
+
${i.description}
|
|
116
|
+
Provider: ${i.provider}
|
|
117
|
+
Author: ${i.author.name}
|
|
118
|
+
ID: ${i.id}`:`Skill "${k.value}" not found.`)}),!0}case"schedules":{if(!k.value)return we("schedules"),!0;let f=k.value.toLowerCase();return(ve.length>0?Promise.resolve(ve):Xe().catch(()=>[])).then(s=>{let i=s.find(x=>x.id.toLowerCase()===f||x.name.toLowerCase().includes(f));if(i){let x=i.nextRunAt?new Date(i.nextRunAt).toLocaleString():"-";l(`Schedule: ${i.name}
|
|
119
|
+
Agent: ${i.agent.name}
|
|
120
|
+
Status: ${i.isActive?"Active":"Paused"}
|
|
121
|
+
Repeat: ${en(i.config)}
|
|
122
|
+
Next Run: ${x}
|
|
123
|
+
ID: ${i.id}`)}else l(`Schedule "${k.value}" not found.`)}),!0}case"connectors":{if(y){let o=O?.connectors??[];if(o.length===0)l("No agent connectors.");else{let s=o.map(i=>` - ${i.name}`).join(`
|
|
124
|
+
`);l(`Agent connectors:
|
|
125
|
+
${s}`)}return!0}let f=W.filter(o=>v?.includes(o.id));if(f.length===0)l("No active connectors.");else{let o=f.map(s=>` - ${s.name}`).join(`
|
|
126
|
+
`);l(`Active connectors:
|
|
127
|
+
${o}`)}return!0}case"capabilities":{if(y){let s=(O?.capabilities??[]).map(i=>L.get(i)??i);return l(s.length>0?`Agent capabilities:
|
|
128
|
+
${s.map(i=>` - ${i}`).join(`
|
|
129
|
+
`)}`:"No agent capabilities."),!0}let f=[];return T&&f.push("FileSystem"),l(f.length>0?`Active capabilities:
|
|
130
|
+
${f.map(o=>` - ${o}`).join(`
|
|
131
|
+
`)}`:"No capabilities enabled."),!0}case"tasks":return l(a?`Current task: ${a}`:`Current task: ${n.slice(0,8)}...`),!0;case"workspace":{if(!C)return l("Not authenticated."),!0;let f=new pe;if(!k.value){try{let{workspaces:s}=await f.getWorkspaces(C.accessToken);if(s.length===0)l("No workspaces found.");else{let i=s.map(x=>` ${x.id===C.workspaceId?"* ":" "}${x.name}
|
|
132
|
+
ID: ${x.id}`);l(`Workspaces:
|
|
133
|
+
${i.join(`
|
|
134
|
+
`)}`)}}catch(s){l(`Failed to load workspaces: ${s instanceof Error?s.message:"Unknown error"}`)}return!0}let o=k.value;try{let{workspaces:s}=await f.getWorkspaces(C.accessToken),i=s.find(x=>x.id===o);if(!i)return l(`Workspace not found: ${o}`),!0;await rt.saveWorkspaceId(o),l(`Switched to workspace: ${i.name}`),l("Please restart the task to apply changes.")}catch(s){l(`Failed to switch workspace: ${s instanceof Error?s.message:"Unknown error"}`)}return!0}case"budget":{if(!C)return l("Not authenticated."),!0;let f=new pe;if(!k.value){try{let i=await f.getBudget(C.accessToken,C.workspaceId);i.budget===null?l("No budget set for this workspace."):l(`Current budget: $${i.budget}`)}catch(i){l(`Failed to get budget: ${i instanceof Error?i.message:"Unknown error"}`)}return!0}let o=k.value.toLowerCase();if(o==="clear"||o==="null"){try{await f.updateBudget(C.accessToken,C.workspaceId,null),l("Budget cleared.")}catch(i){l(`Failed to clear budget: ${i instanceof Error?i.message:"Unknown error"}`)}return!0}let s=parseFloat(o);if(isNaN(s)||s<0)return l("Invalid budget amount. Must be a positive number."),!0;try{await f.updateBudget(C.accessToken,C.workspaceId,o),l(`Budget set to: $${o}`)}catch(i){l(`Failed to set budget: ${i instanceof Error?i.message:"Unknown error"}`)}return!0}case"usage":{if(!C)return l("Not authenticated."),!0;let f=new pe;try{let o=[],s,i=0,x=10;do{let me=await f.getMonthlyUsages(C.accessToken,C.workspaceId,{nextKey:s,limit:20});if(o.push(...me.monthlyUsages),s=me.nextKey,i++,i>=x){l(`Warning: Showing first ${o.length} entries (pagination limit reached)`);break}}while(s);if(o.length===0)return l("No usage data found for this workspace."),!0;let J=0,re=0;for(let me of o)J+=parseFloat(me.totalCost),re+=me.operationCount;let be=[...o].toSorted((me,He)=>parseFloat(He.totalCost)-parseFloat(me.totalCost)),z=10,ue=be.slice(0,z),Ce=[`Total Cost: $${J.toFixed(2)}`,`Total Operations: ${re.toLocaleString()}`,`Users: ${o.length}`,"",`Top ${ue.length} Users by Cost:`,...ue.map(me=>` ${me.user.name}: $${parseFloat(me.totalCost).toFixed(2)} (${me.operationCount.toLocaleString()} ops)`)];o.length>z&&(Ce.push("",`... and ${o.length-z} more users`),Ce.push("Use CLI command for full list: entrydesk usage --limit <n> --sort-by <cost|operations>")),l(Ce.join(`
|
|
135
|
+
`))}catch(o){l(`Failed to get usage: ${o instanceof Error?o.message:"Unknown error"}`)}return!0}case"status":{let f=ie.getCurrentProfileName(),o=p?E.find(J=>J.id===p)?.name||p:null,s=y?A.find(J=>J.id===y)?.name||y:null,i=v?W.filter(J=>v.includes(J.id)).map(J=>J.name):[],x=[];return T&&x.push("FileSystem"),rt.getEmail().then(J=>{let re=[`Profile: ${f}${f!=="default"?" (non-default)":""}`,J?`Logged in as: ${J}`:"Not logged in",C?.workspaceId?`Workspace: ${C.workspaceId}`:null,j?`Task ID: ${n}`:null,o?`Model: ${o}`:null,s?`Agent: ${s}`:null,`Connectors: ${i.length>0?i.join(", "):"none"}`,`Capabilities: ${x.length>0?x.join(", "):"none"}`].filter(Boolean);l(re.join(`
|
|
136
|
+
`))}).catch(()=>{let J=[`Profile: ${f}`,"Not logged in",j?`Task ID: ${n}`:null,o?`Model: ${o}`:null,s?`Agent: ${s}`:null,`Connectors: ${i.length>0?i.join(", "):"none"}`,`Capabilities: ${x.length>0?x.join(", "):"none"}`].filter(Boolean);l(J.join(`
|
|
137
|
+
`))}),!0}case"profile":{let f=k.value?k.value.split(/\s+/).filter(Boolean):[];if(f.length===0)return we("profile"),!0;let o=f[0]?.toLowerCase()||"list",s=f[1],i=f[2],x=ie.getProfileNames(),J=ie.getCurrentProfileName(),re=ie.getOverrideProfile(),be=(z,ue=!1)=>{if(z)return z;if(ue&&x.length===1)return x[0];throw new Error("Profile name is required when multiple profiles exist.")};try{if(o==="list"){let z=[`Profiles (${x.length}):`];for(let ue of x){let Ce=ue===J?" (current)":"";z.push(` ${ue}${Ce}`)}return l(z.join(`
|
|
138
|
+
`)),!0}if(o==="current")return l(`Current profile: ${J}`),!0;if(o==="show"){let z=be(s,!0),ue=de.getAll(z),Ce=await rt.getAll(z),me=!!Ce?.accessToken,He=ue.connectors?.defaults&&ue.connectors.defaults.length>0?ue.connectors.defaults.join(", "):"unset",ao=[`Profile: ${z}${z===J?" (current)":""}`,`API URL: ${ue.apiUrl??"default"}`,`Hub URL: ${ue.hubUrl??"default"}`,`Model: ${ue.model?.default??"unset"}`,`Connectors: ${He}`,me?`Logged in as: ${Ce?.email??"unknown"}`:"Not logged in",me&&Ce?.workspaceId?`Workspace ID: ${Ce.workspaceId}`:null].filter(Boolean);return l(ao.join(`
|
|
139
|
+
`)),!0}if(o==="create"){let z=s||ie.DEFAULT_PROFILE;return ie.createProfile(z),l(`Profile created: ${z}`),!0}if(o==="use"||o==="switch"){let z=be(s,!0);return ie.setOverrideProfile(z),ie.setCurrentProfile(z),Se(z),await Ne(),d(`Switched to profile: ${z} (new task)`),!0}if(o==="delete"||o==="remove"||o==="rm"){let z=be(s,!0),ue=z===J,Ce=ie.deleteProfile(z),me=`Profile deleted: ${z}`;if(ue)ie.setOverrideProfile(Ce.currentProfile),Se(Ce.currentProfile),await Ne(),d(`${me}
|
|
140
|
+
Switched to profile: ${Ce.currentProfile} (new task)`);else if(re===z){let He=ie.getCurrentProfileName();ie.setOverrideProfile(He),Se(He),await Ne(),d(`${me}
|
|
141
|
+
Switched to profile: ${He} (new task)`)}else l(me);return!0}if(o==="rename"||o==="move"||o==="mv"){let z=be(s,!0);if(!i)throw new Error("New profile name is required.");let ue=ie.renameProfile(z,i);return l(`Profile renamed: ${z} -> ${i}`),re===z?(ie.setOverrideProfile(i),Se(i)):ue.currentProfile===i&&Se(i),!0}if(o==="clone"||o==="copy"){let z=be(s,!0);if(!i)throw new Error("Target profile name is required.");let ue=de.getAll(z);return ie.createProfile(i),de.setAll(ue,i),await rt.clear(i),l(`Profile cloned: ${z} -> ${i}`),!0}l(`Unknown profile command: ${o}`)}catch(z){let ue=z instanceof Error?z.message:"Unknown error";l(`Profile error: ${ue}`)}return!0}case"open-in-browser":{let f=Bt().hubUrl.replace(/\/$/,""),o=j||Z.some(re=>re.role!=="system"),s=C?`/${C.workspaceId}`:"",i=o?`${s}/task/${n}`:`${s}/task/new`,x=y?`?agentId=${encodeURIComponent(y)}`:"",J=`${f}${i}${x}`;try{await Vn(J),l(`Opened in browser: ${J}`)}catch(re){l(`Failed to open browser: ${re instanceof Error?re.message:"Unknown error"}
|
|
142
|
+
URL: ${J}`)}return!0}case"share":{if(!C)return l("Not authenticated."),!0;if(!(j||Z.some(o=>o.role!=="system")))return l("No conversation to share. Start a task first."),!0;try{let s=await new pe().createTaskShare(C.accessToken,C.workspaceId,n,"public"),x=`${Bt().hubUrl.replace(/\/$/,"")}/share/${s.id}`;l(`Share link: ${x}`)}catch(o){l(`Failed to create share link: ${o instanceof Error?o.message:"Unknown error"}`)}return!0}case"delete":return C?j?(ye(!0),l("Delete this task? (y/N)"),!0):(l("No task to delete."),!0):(l("Not authenticated."),!0);case"quit":return M(),!0;case"unknown":return l(`Unknown command: ${k.input}
|
|
143
|
+
Type /help for available commands.`),!0;default:return!1}},[l,E,A,W,_e,ve,p,y,v,T,n,a,M,we,d,L,O,j,Z,ze,Xe,le,h,g,$,h,Se,Ne]),ht=Ue(k=>{if(Ve.current=!1,Le){(k===""||k.startsWith("/"))&&(t(k),k.startsWith("/")&&ye(!1));return}if(t(k),nt(k),Ee!==null&&je(null),F&&(S(null),I([])),k.startsWith("/")&&!k.includes(" ")){let f=Xn(k);ee(f),H(0),oe(f.length>0)}else oe(!1),ee([])},[F,Ee,Le,t]),ot=Ue((k,f=!1)=>{if(k>=0&&k<Q.length){let o=Q[k];oe(!1),ee([]),o.name==="model"?(t("/model "),we("model")):o.name==="agent"?(t("/agent "),we("agent")):o.name==="skills"?(t("/skills "),we("skills")):o.name==="schedules"?(t("/schedules "),we("schedules")):o.name==="connectors"?(t("/connectors "),we("connectors")):o.name==="capabilities"?(t("/capabilities "),we("capabilities")):o.name==="tasks"?(t("/tasks "),we("tasks")):o.name==="profile"?(t("/profile "),we("profile")):f?(t(""),Ge({type:o.name})):t(`/${o.name}`)}},[Q,we,t,Ge]),qe=Ue(async k=>{Ve.current=!1;let f=k.trim();if(!f||Le)return;if(F==="model"&&N.length>0){let s=N[u];s&&(y?d(`Switched to model: ${s.name} (new task)`):l(`Switched to model: ${s.name}`),h(s.id),g(void 0),$(null)),S(null),I([]),t("");return}if(F==="agent"&&N.length>0){let s=N[u];s&&(s.id!==y?d(`Switched to agent: ${s.name} (new task)`):l(`Switched to agent: ${s.name}`),g(s.id),h(void 0)),S(null),I([]),t("");return}if(F==="skills"&&N.length>0){let s=N[u];if(s){let i=_e.find(x=>x.id===s.id);i&&l(`Skill: ${i.name}
|
|
144
|
+
${i.description}
|
|
145
|
+
Provider: ${i.provider}
|
|
146
|
+
Author: ${i.author.name}
|
|
147
|
+
ID: ${i.id}`)}S(null),I([]),t("");return}if(F==="schedules"&&N.length>0){let s=N[u];if(s){let i=ve.find(x=>x.id===s.id);if(i){let x=i.nextRunAt?new Date(i.nextRunAt).toLocaleString():"-";l(`Schedule: ${i.name}
|
|
148
|
+
Agent: ${i.agent.name}
|
|
149
|
+
Status: ${i.isActive?"Active":"Paused"}
|
|
150
|
+
Repeat: ${en(i.config)}
|
|
151
|
+
Next Run: ${x}
|
|
152
|
+
ID: ${i.id}`)}}S(null),I([]),t("");return}if(F==="connectors"){let s=Array.from(_);Y(s.length>0?s:void 0),de.setDefaultConnectorIds(s);let i=W.filter(x=>_.has(x.id)).map(x=>x.name);l(i.length>0?`Active connectors: ${i.join(", ")}`:"All connectors disabled."),S(null),I([]),t("");return}if(F==="capabilities"){let s=G.has("fileSystem");b(s),de.setLocalTools({fileSystem:s});let i=[];s&&i.push("FileSystem"),l(i.length>0?`Active capabilities: ${i.join(", ")}`:"All capabilities disabled."),S(null),I([]),t("");return}if(F==="profile"&&N.length>0){let s=N[u];if(s){let i=ie.getCurrentProfileName();s.id!==i?(ie.setOverrideProfile(s.id),ie.setCurrentProfile(s.id),Se(s.id),Ne(),d(`Switched to profile: ${s.name}`)):l(`Already using profile: ${s.name}`)}S(null),I([]),t("");return}if(V&&Q.length>0){ot(R,!0);return}je(null),nt(""),gt(s=>s.length>0&&s.at(-1)===f?s:[...s,f]);let o=Qn(f);if(o){await Ge(o),t(""),oe(!1);return}if(D){l("Please wait for file uploads to complete.");return}t(""),oe(!1),P(f)},[P,Ge,V,Q,R,ot,F,N,u,_,G,W,_e,ve,l,t,y,d,h,g,$,Y,b,D,Se,Ne,Le,C,j,n]);return Xo((k,f)=>{if(f.ctrl&&k==="c"){if(e.length>0){ht(""),Ve.current=!0,l("Press Ctrl+C again to exit.");return}if(Ve.current){M();return}M();return}if(f.ctrl&&k==="o"){U(o=>!o);return}if(Le){if(f.escape||f.return||k==="n"||k==="N"){ye(!1),t(""),l("Task deletion cancelled.");return}if(k==="y"||k==="Y"){ye(!1),t(""),C&&j&&new pe().deleteTask(C.accessToken,C.workspaceId,n).then(()=>{d("Task deleted. Started a new task.")}).catch(s=>{l(`Failed to delete task: ${s.message||"Unknown error"}`)});return}return}if(F&&N.length>0){if(f.upArrow){m(o=>o<=0?N.length-1:o-1);return}if(f.downArrow){m(o=>o>=N.length-1?0:o+1);return}if(f.escape){S(null),I([]),t("");return}if(f.return){if(F==="model"){let o=N[u];o&&(y?d(`Switched to model: ${o.name} (new task)`):l(`Switched to model: ${o.name}`),h(o.id),g(void 0),$(null),de.setDefaultModel(o.id))}else if(F==="agent"){let o=N[u];o&&(o.id!==y?d(`Switched to agent: ${o.name} (new task)`):l(`Switched to agent: ${o.name}`),g(o.id),h(void 0))}else if(F==="skills"){let o=N[u];if(o){let s=_e.find(i=>i.id===o.id);s&&l(`Skill: ${s.name}
|
|
153
|
+
${s.description}
|
|
154
|
+
Provider: ${s.provider}
|
|
155
|
+
Author: ${s.author.name}
|
|
156
|
+
ID: ${s.id}`)}}else if(F==="schedules"){let o=N[u];if(o){let s=ve.find(i=>i.id===o.id);if(s){let i=s.nextRunAt?new Date(s.nextRunAt).toLocaleString():"-";l(`Schedule: ${s.name}
|
|
157
|
+
Agent: ${s.agent.name}
|
|
158
|
+
Status: ${s.isActive?"Active":"Paused"}
|
|
159
|
+
Repeat: ${en(s.config)}
|
|
160
|
+
Next Run: ${i}
|
|
161
|
+
ID: ${s.id}`)}}}else if(F==="connectors"){let o=Array.from(_);Y(o.length>0?o:void 0),de.setDefaultConnectorIds(o);let s=W.filter(i=>_.has(i.id)).map(i=>i.name);l(s.length>0?`Active connectors: ${s.join(", ")}`:"All connectors disabled.")}else if(F==="capabilities"){let o=G.has("fileSystem");b(o),de.setLocalTools({fileSystem:o});let s=[];o&&s.push("FileSystem"),l(s.length>0?`Active capabilities: ${s.join(", ")}`:"All capabilities disabled.")}else if(F==="tasks"){let o=N[u];if(o){let s=sn.find(i=>i.id===o.id);s&&C&&(r(s.id),c(s.title||void 0),K(!0),new pe().getMessages(C.accessToken,C.workspaceId,s.id,20).then(({messages:x})=>{let J=x.filter(re=>re.role==="user"||re.role==="assistant").map(re=>({role:re.role,content:Ke(re.parts,!1),parts:re.parts})).filter(re=>re.content).toReversed();le(J),l(`Switched to: ${s.title||"Untitled"}`)}).catch(()=>{l("Failed to load task messages.")}))}}else if(F==="profile"){let o=N[u];if(o){let s=ie.getCurrentProfileName();o.id!==s?(ie.setOverrideProfile(o.id),ie.setCurrentProfile(o.id),Se(o.id),Ne(),d(`Switched to profile: ${o.name}`)):l(`Already using profile: ${o.name}`)}}S(null),I([]),t("");return}if(k===" "&&(F==="connectors"||F==="capabilities")){let o=N[u];o&&(F==="connectors"?ce:xe)(i=>{let x=new Set(i);return x.has(o.id)?x.delete(o.id):x.add(o.id),x});return}if(k==="a"&&(F==="connectors"||F==="capabilities")){(F==="connectors"?ce:xe)(new Set(N.map(s=>s.id)));return}if(k==="n"&&(F==="connectors"||F==="capabilities")){(F==="connectors"?ce:xe)(new Set);return}return}if(V&&Q.length>0){if(f.upArrow){H(o=>o<=0?Q.length-1:o-1);return}if(f.downArrow){H(o=>o>=Q.length-1?0:o+1);return}if(f.escape){oe(!1),ee([]);return}if(f.tab){ot(R);return}}if(f.upArrow){if(e.includes(`
|
|
162
|
+
`)||Re.length===0)return;if(Ee===null){nt(e);let s=Re.length-1;je(s),t(Re[s]);return}let o=Math.max(0,Ee-1);je(o),t(Re[o]);return}if(f.downArrow){if(e.includes(`
|
|
163
|
+
`)||Ee===null)return;if(Ee>=Re.length-1){je(null),t(Ft);return}let o=Ee+1;je(o),t(Re[o])}}),{suggestions:Q,suggestionIndex:R,showSuggestions:V,argMode:F,argItems:N,argIndex:u,selectedConnectorIds:_,selectedCapabilities:G,deleteConfirmMode:Le,handleInputChange:ht,handleSubmit:qe}}import{useCallback as ft,useRef as Zo,useState as er}from"react";function to({credentials:e,currentModel:t,modelProviders:n,onUploadSuccess:r,onUploadError:a}){let[c,p]=er([]),h=Zo(0),y=ft(b=>{if(!(!Array.isArray(n)||n.length===0)){for(let E of n)if(E.models.some(W=>W.id===b))return E.id;return n[0]?.id}},[n]),g=ft(async b=>{if(!e){a?.(b.filename,"Not logged in");return}if(!Array.isArray(n)||n.length===0){a?.(b.filename,"Model providers not loaded yet. Please wait and try again.");return}let E=t?y(t):n[0]?.id;if(!E){a?.(b.filename,"No model provider available");return}let A=`file-${++h.current}`;p(W=>[...W,{id:A,filename:b.filename,mimeType:b.mimeType,status:"uploading"}]);try{let Z=await new pe().uploadFile(e.accessToken,e.workspaceId,b,E);p(j=>j.map(K=>K.id===A?{...K,status:"uploaded",fileId:Z.id}:K)),r?.(b.filename)}catch(W){let Z=W instanceof Error?W.message:"Upload failed";p(j=>j.map(K=>K.id===A?{...K,status:"error",error:Z}:K)),a?.(b.filename,Z)}},[e,t,y,n,r,a]),O=ft(b=>{p(E=>E.filter(A=>A.id!==b))},[]),$=ft(()=>{p([])},[]),v=ft(()=>c.filter(b=>b.status==="uploaded"&&b.fileId).map(b=>b.fileId),[c]),Y=c.some(b=>b.status==="uploading"),T=c.length>0;return{pendingFiles:c,addFile:g,removeFile:O,clearFiles:$,getUploadedFileIds:v,hasUploadingFiles:Y,hasFiles:T}}import{jsx as q,jsxs as se}from"react/jsx-runtime";var nr=[" ______ _ ____ _","| ____| | | | _ \\ | |","| |__ _ __ | |_ _ __ _ _ | | | | ___ ___| | __","| __| | '_ \\| __| '__| | | || | | |/ _ \\/ __| |/ /","| |____| | | | |_| | | |_| || |_| | __/\\__ \\ <","|______|_| |_|\\__|_| \\__, ||____/ \\___||___/_|\\_\\"," __/ |"," |___/"],or=[Qt,Qt,Xt,Xt,Ye,Ye,Ye,Ye],oo=nr.map((e,t)=>`${or[t]??Ye}${e}${X}`).join(`
|
|
164
|
+
`),rr=`${Ye}EntryDesk${X}`,sr=500;function ir(e){let t="",n=0;for(;n<e.length;){if(e.charCodeAt(n)===27&&e[n+1]==="["){for(n+=2;n<e.length;){let r=e.charCodeAt(n);if(r>=64&&r<=126){n+=1;break}n+=1}continue}t+=e[n],n+=1}return t}function lr(e){let t=ir(e);return Math.max(...t.split(`
|
|
165
|
+
`).map(n=>n.length))}function ar(e){let t=lr(oo);return e>=t?oo:rr}function ro({agentId:e,model:t,message:n,taskId:r,taskTitle:a,connectorIds:c,enableFileSystem:p=!0}){let h=process.stdout.columns??80,y=ar(h),g=no(null),O=On(r,a),{state:$,setState:v,messages:Y,setMessages:T,input:b,setInput:E,taskId:A,setTaskId:W,currentTaskTitle:Z,setCurrentTaskTitle:j,hasPersistedTask:K,setHasPersistedTask:le,credentials:l,setCredentials:d,currentResponse:P,setCurrentResponse:U,fullOutput:C,setFullOutput:fe,addSystemMessage:te,startNewTask:w}=O,{credentials:L}=jn(v);Et(()=>{L&&!l&&d(L)},[L,l,d]);let{availableConnectors:D,availableModels:M,availableAgents:Q,modelProviders:ee,loading:R}=Wn(l),{currentModel:H,setCurrentModel:V,currentAgentId:oe,setCurrentAgentId:F,activeConnectorIds:S,setActiveConnectorIds:N}=Kn(t,e,c),I=no(!1);Et(()=>{if(!I.current){if(I.current=!0,!t&&!e){let i=de.getDefaultModel();i&&V(i)}if(!c&&!e){let i=de.getDefaultConnectorIds();i&&N(i.length>0?i:void 0)}}},[t,e,c,V,N]);let{currentAgentDetails:u}=Yn(oe,l),{fileSystem:m,setFileSystem:_,capabilityLabelMap:ce}=Jn(p),{pendingFiles:G,addFile:xe,removeFile:sn,clearFiles:pt,getUploadedFileIds:_e,hasUploadingFiles:Lt,hasFiles:ve}=to({credentials:l,currentModel:H,modelProviders:ee,onUploadSuccess:i=>{te(`\u2713 Attached: ${i}`)},onUploadError:(i,x)=>{te(`\u2717 Failed to upload ${i}: ${x}`)}}),{sendMessage:mt}=qn({taskId:A,credentials:l,currentAgentId:oe,currentModel:H,activeConnectorIds:S,localTools:m,fullOutput:C,setMessages:T,setState:v,setCurrentResponse:U,setCredentials:d,setHasPersistedTask:le,getFileIds:_e,clearFiles:pt}),Re=on(i=>{w(i),U("")},[w]),[gt,Ee]=tr(!1),je=on(async i=>{let x=i.text.trim(),J=St(x);if(/^https?:\/\//.test(J))return;if(await Rn(x)&&Dn(J)){let be=await Ln(x);be&&(i.preventDefault(),await xe(be))}},[xe]),Ft=on(async()=>{if(!(gt||$.status!=="ready")){if(R||ee.length===0){te("Please wait for resources to load before pasting images.");return}te("Reading clipboard..."),Ee(!0);try{let i=await An();if(i){let x=`clipboard-${Date.now()}.png`;te(`Uploading: ${x} (${Math.round(i.buffer.length/1024)}KB)`),await xe({buffer:i.buffer,filename:x,mimeType:i.mime})}else te("No image found in clipboard. Copy an image first.")}catch(i){let x=i instanceof Error?i.message:"Failed to read clipboard";te(`Clipboard error: ${x}`)}finally{Ee(!1)}}},[xe,te,gt,$.status,R,ee.length]),{suggestions:nt,suggestionIndex:Ve,showSuggestions:Le,argMode:ye,argItems:ze,argIndex:Xe,selectedConnectorIds:we,selectedCapabilities:Se,deleteConfirmMode:Ne,handleInputChange:Ge,handleSubmit:ht}=eo({input:b,setInput:E,taskId:A,setTaskId:W,currentTaskTitle:Z,setCurrentTaskTitle:j,currentModel:H,setCurrentModel:V,currentAgentId:oe,setCurrentAgentId:F,currentAgentDetails:u,setCurrentAgentDetails:()=>{},activeConnectorIds:S,setActiveConnectorIds:N,fileSystem:m,setFileSystem:_,availableModels:M,availableAgents:Q,availableConnectors:D,messages:Y,hasPersistedTask:K,setHasPersistedTask:le,setMessages:T,addSystemMessage:te,startNewTask:Re,sendMessage:mt,setFullOutput:fe,credentials:l,setCredentials:d,setState:v,defaultCapabilities:{fileSystem:p},capabilityLabelMap:ce,hasUploadingFiles:Lt});if(tn((i,x)=>{(x.ctrl||x.meta)&&i==="v"&&Ft()},{isActive:$.status==="ready"&&!ye}),tn((i,x)=>{if(!x.escape)return;let J=Date.now(),re=g.current;g.current=J,!(!re||J-re>sr)&&(ye||Le||(g.current=null,ve&&pt(),b.length>0&&Ge("")))},{isActive:$.status==="ready"}),tn((i,x)=>{x.return&&(Re("Started a new task."),v({status:"ready"}))},{isActive:$.status==="error"}),Et(()=>{if(l&&!R&&$.status==="loading")if(!H&&!oe){let i=de.getDefaultModel(),x=i&&M.some(re=>re.id===i),J=x?i:M[0]?.id;J?(x||de.setDefaultModel(J),V(J),v({status:"ready"})):Q.length===0?v({status:"no-model"}):v({status:"ready"})}else v({status:"ready"})},[l,R,H,oe,M,Q,$.status,V,v]),Et(()=>{n&&l&&$.status==="ready"&&mt(n)},[l,n]),$.status==="loading")return se(he,{flexDirection:"column",children:[q(B,{children:y}),se(he,{children:[q(B,{color:"cyan",children:q(nn,{type:"dots"})}),q(B,{children:" Initializing task..."})]})]});if($.status==="not-logged-in")return se(he,{flexDirection:"column",children:[q(B,{children:y}),q(B,{color:"yellow",children:"Not logged in"}),q(B,{dimColor:!0,children:"Run `entrydesk login` to authenticate first."})]});if($.status==="no-workspace")return se(he,{flexDirection:"column",children:[q(B,{children:y}),q(B,{color:"yellow",children:"No workspace selected"}),q(B,{dimColor:!0,children:"Run `entrydesk workspaces` to select a workspace first."})]});if($.status==="no-model")return se(he,{flexDirection:"column",children:[q(B,{children:y}),q(B,{color:"yellow",children:"No model or agent specified"}),r&&q(B,{dimColor:!0,children:"Could not determine the model used in this task."}),q(B,{dimColor:!0,children:"Please specify a model with --model or use an agent with -a."}),q(B,{dimColor:!0,children:"Example: entrydesk task -c 1 -i --model gemini-2.5-flash-lite"})]});if($.status==="error")return se(he,{flexDirection:"column",children:[q(B,{children:y}),se(B,{color:"red",children:["Error: ",$.message]}),q(B,{dimColor:!0,children:"Press Enter to start a new task, or Ctrl+C to exit"})]});let ot=oe?u?u.connectors&&u.connectors.length>0?u.connectors.map(i=>i.name).join(", "):"none":"loading...":S&&S.length>0?D.filter(i=>S.includes(i.id)).map(i=>i.name).join(", ")||`${S.length} connector(s)`:"none",qe=[];if(oe)if(u?.capabilities)for(let i of u.capabilities)qe.push(ce.get(i)??i);else qe.push("loading...");m&&qe.push("FileSystem");let k=ie.getCurrentProfileName(),f=k!=="default",o=(()=>{switch(ye){case"model":return"Select model:";case"agent":return"Select agent:";case"skills":return"Select skill:";case"connectors":return"Select connectors:";case"capabilities":return"Select capabilities:";default:return"Select task:"}})(),s=(()=>{if(ye==="connectors")return we;if(ye==="capabilities")return Se})();return se(he,{flexDirection:"column",children:[se(he,{marginBottom:1,flexDirection:"column",children:[q(B,{children:y}),se(he,{children:[q(B,{bold:!0,color:"cyan",children:Z?`Continuing: ${Z}`:"EntryDesk CLI"}),se(B,{dimColor:!0,children:[" v","1.12.5"]}),f&&se(B,{color:"magenta",children:[" [",k,"]"]}),q(B,{dimColor:!0,children:" (type /help for commands)"})]})]}),Y.map((i,x)=>{let J=i.parts&&C?Ke(i.parts,!0):i.content,re=i.role==="user"?"green":i.role==="system"?"yellow":"blue",be=i.role==="user"?"You":i.role==="system"?"System":"Assistant";return se(he,{flexDirection:"column",marginBottom:1,children:[se(B,{bold:!0,color:re,children:[be,":"]}),q(zt,{text:J})]},x)}),P&&se(he,{flexDirection:"column",marginBottom:1,children:[q(B,{bold:!0,color:"blue",children:"Assistant:"}),q(zt,{text:P})]}),$.status==="ready"&&q(gn,{suggestions:nt,activeIndex:Ve,visible:Le}),$.status==="ready"&&ye&&q(mn,{items:ze,activeIndex:Xe,pageSize:ye==="agent"||ye==="skills"||ye==="model"?5:10,selectedIds:s,multiSelect:ye==="connectors"||ye==="capabilities",visible:!0,title:o}),$.status==="sending"&&!P?se(he,{children:[q(B,{color:"cyan",children:q(nn,{type:"dots"})}),q(B,{children:" Thinking..."})]}):$.status==="ready"&&!ye?se(he,{flexDirection:"column",children:[Ne&&q(he,{marginBottom:1,children:q(B,{color:"yellow",children:"\u26A0\uFE0F Delete this task? (y/N) "})}),ve&&!Ne&&se(he,{marginBottom:1,flexDirection:"row",gap:1,children:[q(B,{dimColor:!0,children:"Attachments:"}),G.map((i,x)=>se(B,{children:[i.status==="uploading"?se(B,{color:"yellow",children:[q(nn,{type:"dots"})," ",i.filename]}):i.status==="error"?se(B,{color:"red",children:["\u2717 ",i.filename]}):se(B,{color:"green",children:["\u2713 ",i.filename]}),x<G.length-1&&q(B,{children:", "})]},i.id))]}),se(he,{children:[q(B,{color:"green",children:"> "}),q(bn,{value:b,onChange:Ge,onSubmit:ht,onPaste:je,leadingOffset:2,multiline:!0})]})]}):null,se(he,{marginTop:1,flexDirection:"column",children:[se(he,{gap:2,children:[se(B,{children:[q(B,{dimColor:!0,children:"Model: "}),q(B,{color:"magenta",children:oe?u?.model?.name||"loading...":M.find(i=>i.id===H)?.name||H||"none"})]}),se(B,{children:[q(B,{dimColor:!0,children:"Connectors: "}),q(B,{color:"cyan",children:ot})]}),se(B,{children:[q(B,{dimColor:!0,children:"Capabilities: "}),q(B,{color:"green",children:qe.length>0?qe.join(", "):"none"})]})]}),se(B,{dimColor:!0,children:["Esc Esc: Clear input & attachments | Ctrl+V: Paste image | Ctrl+O: Toggle full output ",C?"(ON)":"(OFF)"," | Ctrl+C: Exit"]})]})]})}import{jsx as mr}from"react/jsx-runtime";async function ur(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf8").trim()}async function dr(e,t,n,r){if(r<1)return console.error("Task number must be 1 or greater"),null;let{tasks:a}=await e.getTasks(t,n,20);if(a.length===0)return console.error("No tasks found. Start a new task first."),null;if(r>a.length)return console.error(`Task number ${r} not found. You have ${a.length} recent tasks.`),console.error("Use `entrydesk tasks` to see available tasks."),null;let c=a[r-1],p;if(!c.agentId){let{messages:h}=await e.getMessages(t,n,c.id,10);p=h.find(g=>g.role==="assistant"&&g.modelId)?.modelId}return{task:c,modelId:p}}var tt="\x1B[2m",ke="\x1B[0m",rn="\x1B[36m",lo="\x1B[33m",At="\x1B[32m",so="stream-json";function fr(e,t,n,r){e&&t&&(console.error(`Error: Cannot use both ${n} and ${r}`),process.exit(1))}function Dt(e,t){let n=t===void 0?{event:e}:{event:e,data:t};process.stdout.write(`${JSON.stringify(n)}
|
|
166
|
+
`)}function Rt(e,t){if(t)return e;let n=e.split(`
|
|
167
|
+
`);if(n.length<=20)return e;let r=n.slice(0,5),a=n.slice(-5),c=n.length-10;return[...r,`${tt}... (${c} lines omitted, use --full-output to see all) ...${ke}`,...a].join(`
|
|
168
|
+
`)}function pr(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function io(e,t){if(!e)return"(no result)";if(typeof e!="object")return Rt(String(e),t);let n=e;if("structuredContent"in n&&n.structuredContent){let r=n.structuredContent,a=[];if(r.stdout&&typeof r.stdout=="string"&&r.stdout.trim()&&a.push(r.stdout.trim()),r.stderr&&typeof r.stderr=="string"&&r.stderr.trim()&&a.push(`${lo}[stderr]${ke} ${r.stderr.trim()}`),r.urls&&Array.isArray(r.urls)){let c=r.urls;for(let p of c)p.path&&p.url&&a.push(`${p.path}: ${p.url}`)}return a.length===0&&a.push(JSON.stringify(r,null,2)),Rt(a.join(`
|
|
169
|
+
`),t)}if("content"in n&&Array.isArray(n.content)){let a=n.content.filter(c=>c.type==="text"&&c.text).map(c=>c.text).join(`
|
|
170
|
+
`);return Rt(a||JSON.stringify(e,null,2),t)}return Rt(JSON.stringify(e,null,2),t)}async function _i(e){let t,n;try{let D=await We();t=D.accessToken,n=D.workspaceId}catch(D){an(D)}let r=e.output===so;e.output&&!r&&(console.error(`Invalid --output value. Supported: ${so}`),process.exit(1));let a=!r&&(e.plain||!process.stdout.isTTY),c=de.getDefaultModel(),p=e.message;!p&&!process.stdin.isTTY&&(p=await ur());let h=new pe;async function y(){if(!c)try{let{models:D}=await h.getModels(t,n),M=D[0]?.id;if(!M)return;de.setDefaultModel(M),c=M}catch{}}let g,O,$,v;if(e.continue){let D=await dr(h,t,n,e.continue);D||process.exit(1),g=D.task.id,O=D.task.title??void 0,$=D.task.agentId??void 0,v=D.modelId;let M=e.agentId||e.model||$||v||c;!M&&!e.interactive&&(await y(),M=e.agentId||e.model||$||v||c),!M&&!e.interactive&&(a||console.log(`Continuing task: ${D.task.title||"Untitled"}`),console.error(`
|
|
171
|
+
Could not determine model for this task. Please specify --model or -a.`),console.error('Example: entrydesk task -c 1 -m "message" --model gemini-2.5-flash-lite'),process.exit(1)),!a&&!e.interactive&&console.log(`Continuing task: ${D.task.title||"Untitled"}
|
|
172
|
+
`)}let Y=e.agentId||$,T=e.model||v||c||void 0;!Y&&!T&&(await y(),T=e.model||v||c||void 0),fr(e.fileSystem,e.noFileSystem,"--file-system","--no-file-system");let b=de.getDefaultConnectorIds(),E=e.connectors??b??void 0,A=de.getLocalTools(),W=e.noFileSystem?!1:e.fileSystem?!0:A?.fileSystem??!0;if(e.interactive){cr(mr(ro,{agentId:Y,model:T,message:e.message,taskId:g,taskTitle:O??void 0,connectorIds:E,enableFileSystem:W}),{exitOnCtrlC:!1});return}let Z=!e.continue&&!T&&!Y;(!p||Z)&&(console.error("Usage: entrydesk task -m <message> --model <model>"),console.error(" entrydesk task -m <message> -a <agent>"),console.error(" entrydesk task -c <number> -m <message>"),console.error(' echo "message" | entrydesk task --model <model>'),console.error(" entrydesk task -i (interactive mode)"),console.error(""),console.error("Options:"),console.error(" -m, --message Message to send (or pipe via stdin)"),console.error(" --model Model ID to use (required if no agent and no default)"),console.error(" -a, --agent Agent ID to use (required if no model)"),console.error(" -c, --continue Continue recent task by number (1 = most recent)"),console.error(" -i Interactive mode"),console.error(" --plain Plain text output (no colors/formatting)"),console.error(" --output stream-json Stream JSON events (for scripting)"),console.error(" --full-output Show full tool results without truncation"),console.error(" --dangerously-auto-approve-tools"),console.error(" Auto-approve all server-side tool calls (required for"),console.error(" non-interactive use with connectors/MCP tools)"),console.error(""),console.error("List available models: entrydesk models"),console.error("List available agents: entrydesk agents"),console.error("List recent tasks: entrydesk tasks"),process.exit(1));let j=e.fullOutput??!1,K=e.dangerouslyAutoApproveTools??!1,le=g||Nt(),l=W?xt():void 0,d=W?wt():void 0,P=[],U=Nt(),C=(D,M,Q)=>{let ee={id:le,...K&&{toolApprovalMode:"allow_always"}};return D&&(ee.message={id:D.id,createdAt:new Date,role:"user",parts:[{type:"text",text:D.text}]}),Y?ee.agentId=Y:(T&&(ee.model=T),ee.connectorIds=E??[]),l&&(ee.clientTools=l),d&&(ee.clientToolSystemPrompt=d),M&&M.length>0&&(ee.clientToolResults=M),Q&&Q.length>0&&(ee.previousMessages=Q),ee},fe=async D=>{if(!D.body)throw new Error("No response body");let M=D.body.getReader(),Q=new TextDecoder,ee="",R=new Map,H=[],V=[];for(;;){let{done:oe,value:F}=await M.read();if(oe)break;ee+=Q.decode(F,{stream:!0});let S=ee.split(`
|
|
173
|
+
`);ee=S.pop()||"";for(let N of S){let I=N.trimEnd();if(I==="data: [DONE]"){r&&Dt("done");continue}if(I.startsWith("data: "))try{let u=JSON.parse(I.slice(6));if(u.type&&V.push(u),r){u.type==="text-delta"&&u.delta!==void 0?Dt("text-delta",u.delta):u.type==="reasoning-delta"&&u.delta!==void 0?Dt("reasoning-delta",u.delta):Dt(u.type||"event",u);continue}if(a){if(u.type==="text-delta"&&u.delta&&process.stdout.write(u.delta),W&&(u.type==="tool-input-available"||u.type==="tool-call")&&u.toolCallId&&u.toolName&&Be(u.toolName)){let m=u.args||u.input||{};H.push({toolCallId:u.toolCallId,toolName:u.toolName,args:m})}continue}switch(u.type){case"reasoning-delta":u.delta&&process.stdout.write(`${tt}${u.delta}${ke}`);break;case"reasoning-end":process.stdout.write(`
|
|
174
|
+
|
|
175
|
+
`);break;case"text-delta":u.delta&&process.stdout.write(u.delta);break;case"tool-call-streaming-start":case"tool-input-start":if(u.toolCallId&&u.toolName){R.set(u.toolCallId,{toolName:u.toolName});let _=W&&Be(u.toolName)?`${At}[LOCAL]${ke} `:"";console.log(`
|
|
176
|
+
${rn}\u250C\u2500 ${_}Tool Call: ${u.toolName}${ke}`)}break;case"tool-call":case"tool-input-available":if(u.toolCallId&&u.toolName){let m=u.args||u.input||{},_=pr(m);console.log(`${lo}\u2502 Arguments:${ke}`);for(let ce of _.split(`
|
|
177
|
+
`))console.log(`${tt}\u2502 ${ce}${ke}`);W&&Be(u.toolName)&&(R.set(u.toolCallId,{toolName:u.toolName,args:m}),H.push({toolCallId:u.toolCallId,toolName:u.toolName,args:m}))}break;case"tool-result":if(u.toolCallId){let m=R.get(u.toolCallId),_=io(u.result,j);console.log(`${At}\u2502 Result:${ke}`);for(let ce of _.split(`
|
|
178
|
+
`))console.log(`${tt}\u2502 ${ce}${ke}`);console.log(`${rn}\u2514\u2500 ${m?.toolName||"Tool"} completed${ke}
|
|
179
|
+
`),R.delete(u.toolCallId)}break;case"error":u.errorText&&console.error(`${tt}Error: ${u.errorText}${ke}`);break}}catch{}}}return{pendingClientTools:H,messageParts:V}},te=C({id:Nt(),text:p}),w=await h.task(t,n,te),L=await fe(w);for(P=L.messageParts;L.pendingClientTools.length>0;){let D=[];for(let R of L.pendingClientTools){!a&&!r&&console.log(`${At}\u2502 Executing locally...${ke}`);let H=await Tt(R.toolName,R.args),V=H.success?JSON.stringify(H.result):H.error||"Unknown error";if(D.push({toolCallId:R.toolCallId,toolName:R.toolName,content:[{type:"text",text:V}],isError:!H.success}),!a&&!r){let oe=io(H.success?H.result:{error:H.error},j);console.log(`${At}\u2502 Result:${ke}`);for(let F of oe.split(`
|
|
180
|
+
`))console.log(`${tt}\u2502 ${F}${ke}`);console.log(`${rn}\u2514\u2500 ${R.toolName} completed${ke}
|
|
181
|
+
`)}}let M=P.map(R=>{if(R.type==="tool-call"){let H=D.find(oe=>oe.toolCallId===R.toolCallId),V=H?.content.filter(oe=>oe.type==="text").map(oe=>oe.text).join(`
|
|
182
|
+
`);return{type:"tool-invocation",toolCallId:R.toolCallId,toolName:R.toolName,args:R.args,state:H?.isError?"output-error":"output-available",output:V}}return R}),Q=[{id:U,role:"assistant",parts:M}];U=Nt();let ee=C(void 0,D,Q);w=await h.task(t,n,ee),L=await fe(w),P=L.messageParts}r||console.log("")}export{_i as runTask};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{h as A,
|
|
2
|
+
import{h as A,o as I,p as b,r as O}from"./chunk-TMGYB7VH.js";var $="\x1B[2m",a="\x1B[0m",d="\x1B[36m",w="\x1B[33m",R="\x1B[32m",v="stream-json";function f(e,s){let o=s===void 0?{event:e}:{event:e,data:s};process.stdout.write(`${JSON.stringify(o)}
|
|
3
3
|
`)}function S(e){let s=new Date(e),t=new Date().getTime()-s.getTime(),n=Math.floor(t/(1e3*60*60*24));return n===0?s.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"}):n===1?"Yesterday":n<7?`${n} days ago`:s.toLocaleDateString("en-US",{month:"short",day:"numeric"})}function y(e,s){if(s)return e;let o=e.split(`
|
|
4
4
|
`);if(o.length<=15)return e;let t=o.slice(0,6),n=o.slice(-4),i=o.length-10;return[...t,`... (${i} lines omitted, use --full-output to see all) ...`,...n].join(`
|
|
5
5
|
`)}function N(e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(N);let s={};for(let[o,t]of Object.entries(e))typeof t=="string"&&t.length>200?s[o]=t.slice(0,150)+"... (truncated)":typeof t=="object"&&t!==null?s[o]=N(t):s[o]=t;return s}function j(e){if(!e||typeof e!="object")return String(e);try{return JSON.stringify(e,null,2)}catch{return String(e)}}function E(e,s){if(!e)return"(no result)";if(typeof e!="object")return y(String(e),s);let o=s?e:N(e);if("structuredContent"in o&&o.structuredContent){let t=o.structuredContent,n=[];if(t.stdout&&typeof t.stdout=="string"&&t.stdout.trim()&&n.push(t.stdout.trim()),t.stderr&&typeof t.stderr=="string"&&t.stderr.trim()&&n.push(`${w}[stderr]${a} ${t.stderr.trim()}`),t.urls&&Array.isArray(t.urls)){let i=t.urls;for(let r of i)r.path&&r.url&&n.push(`${r.path}: ${r.url}`)}return n.length===0&&n.push(JSON.stringify(t,null,2)),y(n.join(`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{c as S,
|
|
2
|
+
import{c as S,p as _}from"./chunk-TMGYB7VH.js";import B from"fs";import{Client as L}from"@modelcontextprotocol/sdk/client/index.js";import{StreamableHTTPClientTransport as x}from"@modelcontextprotocol/sdk/client/streamableHttp.js";async function A(e={}){let t=e.apiUrl,n=e.accessToken,o=e.workspaceId;if(!n||!o){let l=await _();n=n||l.accessToken,o=o||l.workspaceId}t||(t=S().apiUrl);let i=new L({name:"entrydesk-cli",version:"1.0.0"}),s=new URL(`${t}/v1/workspaces/${o}/mcp`),r=new x(s,{requestInit:{headers:{Authorization:`Bearer ${n}`}}});return await i.connect(r),i}async function T(){return A()}import h from"fs/promises";import v from"os";import d from"path";var y=!process.env.NO_COLOR&&!!process.stdout.isTTY,p={green:y?"\x1B[32m":"",yellow:y?"\x1B[33m":"",reset:y?"\x1B[0m":""},D=10*1024,O=8*1024,I=2*1024,P=100,b=100;function M(){return d.join(v.homedir(),".entrydesk","tool-results")}function F(e){let t=e.trim().replace(/[/\\:*?"<>|\s]/g,"_").replace(/_+/g,"_").replace(/^[._]+|[._]+$/g,"").slice(0,P);return!t||t==="."||t===".."?"unnamed_tool":t}function J(e){try{return JSON.stringify(e,(t,n)=>typeof n=="bigint"?`${n}n`:typeof n=="function"?"[Function]":typeof n=="symbol"?n.toString():n,2)}catch{return String(e)}}function U(e){let t=new Date,n=[t.getFullYear(),String(t.getMonth()+1).padStart(2,"0"),String(t.getDate()).padStart(2,"0")].join("-")+"_"+[String(t.getHours()).padStart(2,"0"),String(t.getMinutes()).padStart(2,"0"),String(t.getSeconds()).padStart(2,"0")].join("-"),o=F(e);return`${n}_${o}.json`}async function N(e,t){try{return await h.writeFile(e,t,{encoding:"utf8",flag:"wx"}),!0}catch(n){if(n instanceof Error&&"code"in n&&n.code==="EEXIST")return!1;throw n}}async function C(e,t){try{let n=M();await h.mkdir(n,{recursive:!0});let o=U(e),i=d.extname(o),s=o.slice(0,-i.length),r=J(t),l=d.join(n,o);if(await N(l,r))return l;for(let c=1;c<=b;c++){let w=d.join(n,`${s}-${c}${i}`);if(await N(w,r))return w}let u=Math.random().toString(36).slice(2,10),a=d.join(n,`${s}-${u}${i}`);return await h.writeFile(a,r,{encoding:"utf8",flag:"wx"}),a}catch(n){let o=n instanceof Error?n.message:"unknown error";return console.error(`${p.yellow}Warning: Could not save result to file: ${o}${p.reset}`),null}}function k(e,t){let n=Buffer.byteLength(e,"utf8");if(n<=D)return e;let o=e.slice(0,O),i=e.slice(-I),r=((n-O-I)/1024).toFixed(1),l=(n/1024).toFixed(1),u=` ... (skipped ${r}KB of ${l}KB) ...`;return t&&(u+=`
|
|
3
3
|
Tip: jq -r '.structuredContent.field' <file> | grep/head/tail`),`${o}
|
|
4
4
|
|
|
5
5
|
${u}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@entrydesk/cli",
|
|
3
|
-
"version": "1.12.
|
|
3
|
+
"version": "1.12.5",
|
|
4
4
|
"description": "EntryDesk CLI - Interact with EntryDesk from your terminal",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"ink": "^6.5.1",
|
|
19
19
|
"ink-spinner": "^5.0.0",
|
|
20
20
|
"jose": "^6.1.3",
|
|
21
|
-
"ky": "^
|
|
22
|
-
"react": "^19.2.
|
|
23
|
-
"uuid": "^13.0.
|
|
21
|
+
"ky": "^2.0.2",
|
|
22
|
+
"react": "^19.2.6",
|
|
23
|
+
"uuid": "^13.0.1"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@lydell/node-pty": "^1.1.0",
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
"@types/adm-zip": "^0.5.8",
|
|
29
29
|
"@types/archiver": "^7.0.0",
|
|
30
30
|
"@types/node": "^24.12.1",
|
|
31
|
-
"@types/react": "^19.2.
|
|
31
|
+
"@types/react": "^19.2.14",
|
|
32
32
|
"@vitest/coverage-v8": "^4.1.1",
|
|
33
33
|
"happy-dom": "^20.8.9",
|
|
34
|
-
"oxlint": "^1.
|
|
34
|
+
"oxlint": "^1.64.0",
|
|
35
35
|
"strip-ansi": "^7.1.2",
|
|
36
36
|
"tsup": "^8.5.0",
|
|
37
37
|
"typescript": "6.0.2",
|
package/dist/chunk-HHCG7UQG.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import F from"fs";import p from"fs";import _e from"os";import E from"path";import{HTTPError as Re,TimeoutError as xe}from"ky";import ye,{TimeoutError as me}from"ky";import R from"crypto";import u from"fs";import le from"path";var ge="ENTRYDESK_FORCE_FILE_STORAGE",C="EntryDesk CLI",de="__entrydesk_keychain_test__",ue="profile:",fe=".credentials.key",Z={keychain:!1,permissions:!1,corruptFile:!1,windowsFile:!1};function w(r,e){Z[r]||(Z[r]=!0,console.error(e))}function pe(){return process.env.ENTRYDESK_DEBUG?.toLowerCase()==="true"}function Q(r){if(!r||typeof r!="object")return!1;let e=r;return!(!("accessToken"in e||"refreshToken"in e||"email"in e||"workspaceId"in e)||"accessToken"in e&&typeof e.accessToken!="string"||"refreshToken"in e&&typeof e.refreshToken!="string"||"email"in e&&typeof e.email!="string"||"workspaceId"in e&&typeof e.workspaceId!="string")}function he(r){if(!r||typeof r!="object")return!1;let e=r;return typeof e.getPassword=="function"&&typeof e.setPassword=="function"&&typeof e.deletePassword=="function"}function B(r){return o.getProfileCredentialsFile(r)}var O=class{getKeyFilePath(e){return le.join(o.getProfileDir(e),fe)}loadEncryptionKey(e){let t=this.getKeyFilePath(e);try{if(!u.existsSync(t))return null;let s=u.readFileSync(t);return s.length!==32?null:(this.ensureSecureFilePermissions(t),s)}catch{return null}}createEncryptionKey(e){o.ensureProfileDir(e);let t=this.getKeyFilePath(e),s=R.randomBytes(32);return u.writeFileSync(t,s,{mode:384}),this.ensureSecureFilePermissions(t),s}getOrCreateEncryptionKey(e){let t=this.loadEncryptionKey(e);return t||this.createEncryptionKey(e)}encrypt(e,t){let s=R.randomBytes(16),n=R.createCipheriv("aes-256-gcm",t,s),i=n.update(e,"utf8","hex");i+=n.final("hex");let c=n.getAuthTag();return`${s.toString("hex")}:${c.toString("hex")}:${i}`}decrypt(e,t){let s=e.split(":");if(s.length!==3)throw new Error("Invalid encrypted data format");let n=Buffer.from(s[0],"hex"),i=Buffer.from(s[1],"hex"),c=s[2],S=R.createDecipheriv("aes-256-gcm",t,n,{authTagLength:16});S.setAuthTag(i);let d=S.update(c,"hex","utf8");return d+=S.final("utf8"),d}tryDecrypt(e,t){try{return this.decrypt(e,t)}catch{return null}}tryParseCredentials(e){try{let t=JSON.parse(e);return Q(t)?t:null}catch{return null}}ensureSecureFilePermissions(e){if(process.platform!=="win32"){try{u.chmodSync(e,384)}catch{w("permissions","Warning: Failed to set secure permissions on credentials file.");return}try{(u.statSync(e).mode&511)!==384&&w("permissions","Warning: Credentials file permissions are too permissive.")}catch{w("permissions","Warning: Failed to verify credentials file permissions.")}}}async getCredentials(e){let t=B(e);try{if(!u.existsSync(t))return null;let s=u.readFileSync(t,"utf-8").trim();if(!s)return null;let n=this.loadEncryptionKey(e),i=n?this.tryDecrypt(s,n):null;if(i){let c=this.tryParseCredentials(i);if(c)return c}return w("corruptFile","Warning: Credentials file is unreadable. Please run `entrydesk login` again."),null}catch{return null}}async setCredentials(e,t){o.ensureProfileDir(e);let s=B(e),n=this.getOrCreateEncryptionKey(e),i=this.encrypt(JSON.stringify(t),n);u.writeFileSync(s,i,{mode:384}),this.ensureSecureFilePermissions(s)}async deleteCredentials(e){let t=B(e);try{u.existsSync(t)&&u.unlinkSync(t)}catch{}}},N=class{keytarModule=null;keytarLoadAttempted=!1;keychainAvailable=null;async getKeytar(){if(this.keytarLoadAttempted)return this.keytarModule;this.keytarLoadAttempted=!0;try{let t=await import("keytar"),s=t&&typeof t=="object"&&"default"in t?t.default:t;this.keytarModule=he(s)?s:null}catch{this.keytarModule=null}return this.keytarModule}getAccount(e){return`${ue}${e}`}async checkKeychainAvailability(){if(this.keychainAvailable!==null)return this.keychainAvailable;try{let e=await this.getKeytar();if(!e)return this.keychainAvailable=!1,!1;let t=`${de}${R.randomBytes(8).toString("hex")}`,s="test";await e.setPassword(C,t,s);let n=await e.getPassword(C,t),i=await e.deletePassword(C,t);return this.keychainAvailable=!!(i&&n===s),this.keychainAvailable}catch{return this.keychainAvailable=!1,!1}}async isAvailable(){return this.checkKeychainAvailability()}async getCredentials(e){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let t=await this.getKeytar();if(!t)throw new Error("Keytar module not available");let s=await t.getPassword(C,this.getAccount(e));if(!s)return null;let n=this.tryParseKeychainPayload(s);return n||w("corruptFile",`Warning: Keychain entry for profile "${e}" is unreadable.`),n}async setCredentials(e,t){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let s=await this.getKeytar();if(!s)throw new Error("Keytar module not available");let n=JSON.stringify(t);await s.setPassword(C,this.getAccount(e),n)}async deleteCredentials(e){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let t=await this.getKeytar();if(!t)throw new Error("Keytar module not available");await t.deletePassword(C,this.getAccount(e))}tryParseKeychainPayload(e){try{let t=JSON.parse(e);return Q(t)?t:null}catch{return null}}},M=class{keychainStorage=null;fileStorage=new O;keychainAvailable=null;initPromise=null;shouldForceFileStorage(){return process.env[ge]?.toLowerCase()==="true"}async initializeStorage(){if(this.shouldForceFileStorage()){this.keychainAvailable=!1,this.keychainStorage=null;return}try{let e=new N,t=await e.isAvailable();this.keychainAvailable=t,this.keychainStorage=t?e:null}catch{this.keychainAvailable=!1,this.keychainStorage=null}!this.keychainAvailable&&!this.shouldForceFileStorage()&&(pe()&&w("keychain","Keychain unavailable. Falling back to file-based credentials."),process.platform==="win32"&&w("windowsFile","Warning: File-based credentials on Windows may be readable by other users."))}async ensureInitialized(){if(this.shouldForceFileStorage()){this.keychainAvailable=!1,this.keychainStorage=null;return}this.keychainAvailable===null&&(this.initPromise??=this.initializeStorage(),await this.initPromise)}disableKeychain(){this.shouldForceFileStorage()||w("keychain","Keychain error encountered. Falling back to file-based credentials."),this.keychainAvailable=!1,this.keychainStorage=null}async getKeychainStorage(){return await this.ensureInitialized(),this.shouldForceFileStorage()?null:this.keychainAvailable?this.keychainStorage:null}async getCredentials(e){let t=await this.getKeychainStorage();if(!t)return this.fileStorage.getCredentials(e);try{let n=await t.getCredentials(e);if(n)return n}catch{return this.disableKeychain(),this.fileStorage.getCredentials(e)}let s=await this.fileStorage.getCredentials(e);if(s)try{await t.setCredentials(e,s),await this.fileStorage.deleteCredentials(e)}catch{}return s}async setCredentials(e,t){let s=await this.getKeychainStorage();if(!s){await this.fileStorage.setCredentials(e,t);return}try{await s.setCredentials(e,t),await this.fileStorage.deleteCredentials(e)}catch{this.disableKeychain(),await this.fileStorage.setCredentials(e,t)}}async deleteCredentials(e){let t=await this.getKeychainStorage();if(t)try{await t.deleteCredentials(e)}catch{this.disableKeychain()}await this.fileStorage.deleteCredentials(e)}},g=new M,y={async saveAccessToken(r,e){let t=o.getEffectiveProfileName(e),s=await g.getCredentials(t)??{};s.accessToken=r,await g.setCredentials(t,s)},async getAccessToken(r){let e=o.getEffectiveProfileName(r);return(await g.getCredentials(e))?.accessToken??null},async saveRefreshToken(r,e){let t=o.getEffectiveProfileName(e),s=await g.getCredentials(t)??{};s.refreshToken=r,await g.setCredentials(t,s)},async getRefreshToken(r){let e=o.getEffectiveProfileName(r);return(await g.getCredentials(e))?.refreshToken??null},async saveEmail(r,e){let t=o.getEffectiveProfileName(e),s=await g.getCredentials(t)??{};s.email=r,await g.setCredentials(t,s)},async getEmail(r){let e=o.getEffectiveProfileName(r);return(await g.getCredentials(e))?.email??null},async saveWorkspaceId(r,e){let t=o.getEffectiveProfileName(e),s=await g.getCredentials(t)??{};s.workspaceId=r,await g.setCredentials(t,s)},async getWorkspaceId(r){let e=o.getEffectiveProfileName(r);return(await g.getCredentials(e))?.workspaceId??null},async saveAll(r,e){let t=o.getEffectiveProfileName(e);await g.setCredentials(t,r)},async getAll(r){let e=o.getEffectiveProfileName(r);return g.getCredentials(e)},async clear(r){let e=o.getEffectiveProfileName(r);await g.deleteCredentials(e)},async isLoggedIn(r){let e=o.getEffectiveProfileName(r);return(await g.getCredentials(e))?.accessToken!=null}};var K=class r{client;baseUrl;constructor(e,t){this.baseUrl=e||D(t),U().ignoreSslErrors&&(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0",process.env.DEBUG&&console.log("[DEBUG] ApiClient: SSL certificate validation disabled")),this.client=ye.create({prefixUrl:this.baseUrl,timeout:3e4,retry:{limit:3,methods:["get","put","head","delete","options","trace"],statusCodes:[408,413,429,500,502,503,504]},hooks:{beforeError:[n=>(n.request?.headers&&(n.request.headers.delete("authorization"),n.request.headers.delete("Authorization")),n)]}})}getBaseUrl(){return this.baseUrl}async refreshOAuthToken(e){return this.client.post("v1/oauth/token",{json:{grant_type:"refresh_token",refresh_token:e.refreshToken,client_id:e.clientId}}).json()}async revokeOAuthToken(e){await this.client.post("v1/oauth/revoke",{json:{token:e.token,token_type_hint:"refresh_token",client_id:e.clientId}})}async getWorkspaces(e){try{return process.env.DEBUG&&console.log(`[DEBUG] Calling getWorkspaces API: ${this.baseUrl}/v1/workspaces`),await this.client.get("v1/workspaces",{headers:{Authorization:`Bearer ${e}`}}).json()}catch(t){throw process.env.DEBUG&&(console.error("[DEBUG] getWorkspaces error:",t),t instanceof Error&&"cause"in t&&console.error("[DEBUG] Error cause:",t.cause)),t}}async getAgents(e,t,s){let n={limit:s?.limit??100};return s?.nextKey&&(n.nextKey=s.nextKey),s?.search&&(n.search=s.search),await this.client.get(`v1/workspaces/${t}/availableAgents`,{headers:{Authorization:`Bearer ${e}`},searchParams:n}).json()}async createAgent(e,t,s){return await this.client.post(`v1/workspaces/${t}/agents`,{headers:{Authorization:`Bearer ${e}`},json:s}).json()}async updateAgent(e,t,s,n){await this.client.put(`v1/workspaces/${t}/agents/${s}`,{headers:{Authorization:`Bearer ${e}`},json:n})}async deleteAgent(e,t,s){await this.client.delete(`v1/workspaces/${t}/agents/${s}`,{headers:{Authorization:`Bearer ${e}`}})}async getModels(e,t){return await this.client.get(`v1/workspaces/${t}/models`,{headers:{Authorization:`Bearer ${e}`}}).json()}async getConnectors(e,t){return await this.client.get(`v1/workspaces/${t}/availableConnectors`,{headers:{Authorization:`Bearer ${e}`},searchParams:{limit:100,connectionStatus:"connected"}}).json()}async getTasks(e,t,s=20){return await this.client.get(`v1/workspaces/${t}/tasks`,{headers:{Authorization:`Bearer ${e}`},searchParams:{limit:s}}).json()}async getMessages(e,t,s,n=50){return await this.client.get(`v1/workspaces/${t}/tasks/${s}/messages`,{headers:{Authorization:`Bearer ${e}`},searchParams:{limit:n}}).json()}async getAgent(e,t,s){return await this.client.get(`v1/workspaces/${t}/agents/${s}`,{headers:{Authorization:`Bearer ${e}`}}).json()}async listAvailableSkills(e,t,s){return await this.client.get(`v1/workspaces/${t}/availableSkills`,{headers:{Authorization:`Bearer ${e}`},searchParams:{createdBy:s?.createdBy,nextKey:s?.nextKey,limit:s?.limit??20}}).json()}async uploadSkill(e,t,s){return await this.client.post(`v1/workspaces/${t}/skills`,{headers:{Authorization:`Bearer ${e}`},body:s}).json()}async deleteSkill(e,t,s){await this.client.delete(`v1/workspaces/${t}/skills/${s}`,{headers:{Authorization:`Bearer ${e}`}})}async downloadSkillCurrent(e,t,s){return await this.client.get(`v1/workspaces/${t}/skills/${s}/download`,{headers:{Authorization:`Bearer ${e}`}}).json()}async task(e,t,s){try{let n=await this.client.post(`v1/workspaces/${t}/tasks`,{headers:{Authorization:`Bearer ${e}`},json:s,timeout:6e4,throwHttpErrors:!1});if(!n.ok){let i=await n.text();throw new Error(`Task API failed (${n.status}): ${i}`)}return n}catch(n){throw n instanceof me?new TypeError("Request timed out. Please check your connection and try again.",{cause:n}):n}}async getBudget(e,t){return await this.client.get(`v1/workspaces/${t}/budget`,{headers:{Authorization:`Bearer ${e}`}}).json()}async updateBudget(e,t,s){return await this.client.put(`v1/workspaces/${t}/budget`,{headers:{Authorization:`Bearer ${e}`},json:{budget:s}}).json()}async getMonthlyUsages(e,t,s){return await this.client.get(`v1/workspaces/${t}/monthlyUsages`,{headers:{Authorization:`Bearer ${e}`},searchParams:{nextKey:s?.nextKey,limit:s?.limit??20}}).json()}async createTaskShare(e,t,s,n="public"){return await this.client.post(`v1/workspaces/${t}/tasks/${s}/shares`,{headers:{Authorization:`Bearer ${e}`},json:{visibility:n}}).json()}async getSharedTask(e,t){let s={};return t&&(s.Authorization=`Bearer ${t}`),await this.client.get(`v1/shares/${e}`,{headers:s}).json()}async getSharedMessages(e,t=50,s){let n={};return s&&(n.Authorization=`Bearer ${s}`),await this.client.get(`v1/shares/${e}/messages`,{headers:n,searchParams:{limit:t}}).json()}async deleteTask(e,t,s){await this.client.delete(`v1/workspaces/${t}/tasks/${s}`,{headers:{Authorization:`Bearer ${e}`}})}async getModelProviders(e,t){return await this.client.get(`v1/workspaces/${t}/modelProviders`,{headers:{Authorization:`Bearer ${e}`}}).json()}async uploadFile(e,t,s,n){let i=new FormData,c=new Blob([s.buffer],{type:s.mimeType});return i.append("file",c,s.filename),i.append("modelProviderId",n),await this.client.post(`v1/workspaces/${t}/files`,{headers:{Authorization:`Bearer ${e}`},body:i,timeout:12e4}).json()}async getSchedules(e,t,s){let n={limit:s?.limit??20};return s?.nextKey&&(n.nextKey=s.nextKey),s?.search&&(n.search=s.search),await this.client.get(`v1/workspaces/${t}/schedules`,{headers:{Authorization:`Bearer ${e}`},searchParams:n}).json()}async getSchedule(e,t,s){return await this.client.get(`v1/workspaces/${t}/schedules/${s}`,{headers:{Authorization:`Bearer ${e}`}}).json()}async createSchedule(e,t,s){return await this.client.post(`v1/workspaces/${t}/schedules`,{headers:{Authorization:`Bearer ${e}`},json:s}).json()}async updateSchedule(e,t,s,n){await this.client.put(`v1/workspaces/${t}/schedules/${s}`,{headers:{Authorization:`Bearer ${e}`},json:n})}async deleteSchedule(e,t,s){await this.client.delete(`v1/workspaces/${t}/schedules/${s}`,{headers:{Authorization:`Bearer ${e}`}})}static async getAuthenticatedClient(e){let t=await y.getAll(e);return t?{client:new r(void 0,e),accessToken:t.accessToken,workspaceId:t.workspaceId??null}:null}};function ke(){return process.env.ENTRYDESK_SANDBOX==="true"}function j(){if(!ke())return null;let r=process.env.ENTRYDESK_SANDBOX_ACCESS_TOKEN?.trim(),e=process.env.ENTRYDESK_SANDBOX_WORKSPACE_ID?.trim();if(!r||!e){let t=[];throw r||t.push("ENTRYDESK_SANDBOX_ACCESS_TOKEN"),e||t.push("ENTRYDESK_SANDBOX_WORKSPACE_ID"),new Error(`Sandbox mode enabled but missing credentials: ${t.join(", ")}`)}return{accessToken:r,workspaceId:e}}function ee(){let r=process.env.ENTRYDESK_TOKEN?.trim();if(!r)return null;let e=process.env.ENTRYDESK_WORKSPACE_ID?.trim();if(!e)throw new Error("ENTRYDESK_TOKEN is set but ENTRYDESK_WORKSPACE_ID is missing. Both are required for PAT authentication.");return{accessToken:r,workspaceId:e}}import{execFile as we}from"child_process";import{setTimeout as ve}from"timers/promises";import{decodeJwt as Pe}from"jose";import Se,{HTTPError as Ae}from"ky";var I="entrydesk-cli",Ce="offline_access workspaces:read tasks:read tasks:write tasks:delete agents:read agents:write connectors:read connectors:write tools:read tools:execute skills:read skills:write meetings:read meetings:write publishes:read publishes:write calendar:read calendar:write schedules:read schedules:write user:read user:write";function be(r){return new Promise((e,t)=>{let s=process.platform,n,i;switch(s){case"darwin":n="open",i=[r];break;case"win32":n="cmd",i=["/c","start","",r];break;default:n="xdg-open",i=[r];break}we(n,i,c=>{c?t(new Error(`Failed to open browser. Please manually visit: ${r}`,{cause:c})):e()})})}async function rt(r){let e=D(),t=te(),s=U(),n=process.env.NODE_TLS_REJECT_UNAUTHORIZED;s.ignoreSslErrors&&(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0",console.error("WARNING: SSL certificate validation is disabled globally for this process during the login flow. All connections in this process will skip TLS verification. Only use ENTRYDESK_IGNORE_SSL_ERRORS for local development."));try{let i=Se.create({prefixUrl:e,timeout:3e4,hooks:{beforeError:[a=>(a.request?.headers&&(a.request.headers.delete("authorization"),a.request.headers.delete("Authorization")),a)]}}),c;try{c=await i.post("v1/oauth/device/code",{json:{client_id:I,scope:Ce}}).json()}catch(a){let k=a instanceof Error?a:new Error("Failed to request device code");throw r?.onError?.(k),k}let{device_code:S,user_code:d,expires_in:oe,interval:ae}=c,J=new URL("/oauth/device",t);J.searchParams.set("user_code",d);let q=J.toString();r?.onDeviceCodeReceived?.(d,q),r?.onBrowserOpening?.();try{await be(q)}catch(a){process.env.DEBUG&&console.error("[DEBUG] Failed to open browser:",a)}r?.onWaitingForAuthorization?.();let V=Math.max(ae,5)*1e3,ce=Date.now()+oe*1e3;for(;Date.now()<ce;){await ve(V);try{let a=await i.post("v1/oauth/token",{json:{grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:S,client_id:I}}).json();r?.onAuthorized?.();let k={};try{k=Pe(a.access_token)}catch{}return{accessToken:a.access_token,refreshToken:a.refresh_token??void 0,email:k.email||"",scopes:a.scope.split(" ").filter(T=>T.length>0)}}catch(a){if(a instanceof Ae){let T;try{let X=await a.response.json();T=X.code||X.error}catch{continue}switch(T){case"authorization_pending":continue;case"slow_down":V+=5e3;continue;case"access_denied":throw new Error("Authorization denied by user",{cause:a});case"expired_token":throw new Error("Device code expired. Please try again.",{cause:a});default:throw new Error(`Authorization failed: ${T||"Unknown error"}`,{cause:a})}}let k=a instanceof Error?a:new Error("Unknown error during authorization");throw r?.onError?.(k),k}}throw new Error("Device code expired. Please try again.")}finally{n===void 0?delete process.env.NODE_TLS_REJECT_UNAUTHORIZED:process.env.NODE_TLS_REJECT_UNAUTHORIZED=n}}var m=class extends Error{code;constructor(e,t){super(t),this.code=e}};function Ee(r){try{let e=r.split(".");if(e.length<2)return null;let t=e[1].replace(/-/g,"+").replace(/_/g,"/"),s=(4-t.length%4)%4,n=t.padEnd(t.length+s,"="),i=Buffer.from(n,"base64").toString("utf8");return JSON.parse(i)}catch{return null}}function Te(r,e=300){let s=Ee(r)?.exp;if(typeof s!="number")return!1;let n=Math.floor(Date.now()/1e3);return s-n<=e}async function re(r){let e=r.accessToken;if(!Te(e))return e;if(!r.refreshToken)throw await y.clear(),new m("session-expired","Session expired. Please run `entrydesk login` again.");try{let s=await new K().refreshOAuthToken({refreshToken:r.refreshToken,clientId:I});return await y.saveAccessToken(s.access_token),s.refresh_token&&await y.saveRefreshToken(s.refresh_token),s.access_token}catch{throw await y.clear(),new m("session-expired","Session expired. Please run `entrydesk login` again.")}}async function ct(){let r=j();if(r)return r.accessToken;let e=await y.getAll();if(!e?.accessToken)throw new m("not-logged-in","Not logged in. Run `entrydesk login` first.");return re(e)}async function lt(){let r=j();if(r)return{accessToken:r.accessToken,workspaceId:r.workspaceId};let e=ee();if(e)return e;let t=await y.getAll();if(!t?.accessToken)throw new m("not-logged-in","Not logged in. Run `entrydesk login` first.");if(!t.workspaceId)throw new m("no-workspace","No workspace selected. Run `entrydesk workspaces` first.");return{accessToken:await re(t),workspaceId:t.workspaceId}}var f=class extends Error{constructor(t,s=1,n){super(t);this.exitCode=s;this.cause=n;this.name="CLIError"}exitCode;cause};function ft(r){let e=!!process.env.DEBUG;r instanceof f&&(console.error(`Error: ${r.message}`),r.cause&&(console.error(`Cause: ${r.cause.message}`),e&&r.cause.stack&&console.error(r.cause.stack)),process.exit(r.exitCode)),r instanceof m&&(console.error(r.message),e&&r.stack&&console.error(r.stack),process.exit(1)),r instanceof xe&&(console.error("Request timed out. Please check your connection and try again."),e&&r.stack&&console.error(r.stack),process.exit(1)),r instanceof Re&&(console.error(`Request failed (${r.response.status}): ${r.response.statusText}`),e&&r.stack&&console.error(r.stack),process.exit(1)),r instanceof Error&&(console.error(`Unexpected error: ${r.message}`),e&&r.stack&&console.error(r.stack),process.exit(1)),console.error("An unknown error occurred"),process.exit(1)}var P="default",Ke=/^[A-Za-z0-9_-]+$/,z=null;function W(){return E.join(_e.homedir(),".entrydesk")}function ne(){return E.join(W(),"profiles")}function ie(){return E.join(W(),"profiles.json")}function $(r){return E.join(ne(),r)}function H(r){if(!p.existsSync(r))p.mkdirSync(r,{mode:448,recursive:!0});else try{p.chmodSync(r,448)}catch{}}function De(){H(W())}function L(){H(ne())}function Ue(){let r=ie();try{if(!p.existsSync(r))return null;let e=p.readFileSync(r,"utf-8");return JSON.parse(e)}catch{return null}}function b(r){De();let e=ie();p.writeFileSync(e,JSON.stringify(r,null,2),{mode:384});try{p.chmodSync(e,384)}catch{}}function Ie(r){let e=r.profiles?.length?Array.from(new Set(r.profiles)):[],t=r.currentProfile&&e.includes(r.currentProfile)?r.currentProfile:e[0]||P;return e.length===0&&e.push(P),e.includes(t)||e.unshift(t),{currentProfile:t,profiles:e}}function _(r){L(),H($(r))}function v(){let r=Ue();if(!r){let t={currentProfile:P,profiles:[P]};return b(t),L(),_(P),t}let e=Ie(r);return(e.currentProfile!==r.currentProfile||e.profiles.length!==r.profiles.length)&&b(e),L(),e}function A(r){if(!r)throw new f("Profile name is required.");if(!Ke.test(r))throw new f("Invalid profile name. Use letters, numbers, dash, or underscore.")}function x(r,e){if(!r.profiles.includes(e))throw new f(`Profile not found: ${e}`)}function se(r,e){if(r.profiles.includes(e))throw new f(`Profile already exists: ${e}`)}var o={DEFAULT_PROFILE:P,setOverrideProfile(r){z=r},getOverrideProfile(){return z},getProfileDir(r){return $(r)},getProfileConfigFile(r){return E.join(o.getProfileDir(r),"config.json")},getProfileCredentialsFile(r){return E.join(o.getProfileDir(r),"credentials.json")},getProfileNames(){return[...v().profiles]},getProfileCount(){return o.getProfileNames().length},getCurrentProfileName(){return v().currentProfile},getEffectiveProfileName(r){let e=v(),t=r||z||e.currentProfile;return A(t),x(e,t),t},ensureProfileExists(r){let e=v();A(r),x(e,r)},createProfile(r){A(r);let e=v();se(e,r);let t={currentProfile:e.currentProfile,profiles:[...e.profiles,r]};b(t),_(r)},deleteProfile(r){A(r);let e=v();if(x(e,r),e.profiles.length===1)throw new f("Cannot delete the last profile.");let t=e.profiles.filter(i=>i!==r),s=e.currentProfile;s===r&&(s=t.includes(P)?P:t[0]),b({currentProfile:s,profiles:t});try{p.rmSync(o.getProfileDir(r),{recursive:!0,force:!0})}catch{}return{currentProfile:s}},renameProfile(r,e){A(r),A(e);let t=v();x(t,r),se(t,e);let s=$(r),n=$(e);if(p.existsSync(s))try{p.renameSync(s,n)}catch(d){throw new f("Failed to rename profile directory.",1,d)}else _(e);let i=t.profiles.map(d=>d===r?e:d),c=t.currentProfile===r?e:t.currentProfile;return b({currentProfile:c,profiles:i}),{currentProfile:c}},setCurrentProfile(r){A(r);let e=v();x(e,r);let t={currentProfile:r,profiles:e.profiles};b(t),_(r)},ensureProfileDir:_};function $e(r){let e=o.getEffectiveProfileName(r);return o.getProfileConfigFile(e)}function l(r){let e=$e(r);try{if(!F.existsSync(e))return{};let t=F.readFileSync(e,"utf-8");return JSON.parse(t)}catch{return{}}}function h(r,e){let t=o.getEffectiveProfileName(e);o.ensureProfileDir(t);let s=o.getProfileConfigFile(t);F.writeFileSync(s,JSON.stringify(r,null,2),{mode:384});try{F.chmodSync(s,384)}catch{}}var G={getApiUrl(r){return l(r).apiUrl??null},setApiUrl(r,e){let t=l(e);t.apiUrl=r,h(t,e)},clearApiUrl(r){let e=l(r);delete e.apiUrl,h(e,r)},getHubUrl(r){return l(r).hubUrl??null},setHubUrl(r,e){let t=l(e);t.hubUrl=r,h(t,e)},getAll(r){return l(r)},setAll(r,e){h(r,e)},set(r,e,t){let s=l(t);s[r]=e,h(s,t)},get(r,e){return l(e)[r]},unset(r,e){let t=l(e);delete t[r],h(t,e)},getDefaultModel(r){return l(r).model?.default??null},setDefaultModel(r,e){let t=l(e);t.model={...t.model,default:r},h(t,e)},getDefaultConnectorIds(r){return l(r).connectors?.defaults??null},setDefaultConnectorIds(r,e){let t=l(e);t.connectors={...t.connectors,defaults:r},h(t,e)},getCapabilities(r){return l(r).capabilities??null},setCapabilities(r,e){let t=l(e);t.capabilities={...t.capabilities,...r},h(t,e)},getLocalTools(r){return l(r).localTools??null},setLocalTools(r,e){let t=l(e);t.localTools={...t.localTools,...r},h(t,e)}};var Fe="https://api.entrydesk.com",Be="https://app.entrydesk.com",Oe=3100,Ne=300*1e3;function Y(r){return{apiUrl:G.getApiUrl(r)||process.env.ENTRYDESK_API_URL||Fe,hubUrl:G.getHubUrl(r)||process.env.ENTRYDESK_HUB_URL||Be,mcp:{httpPort:Oe},auth:{loginTimeout:Ne,ignoreSslErrors:process.env.ENTRYDESK_IGNORE_SSL_ERRORS==="true"||!1}}}function D(r){return Y(r).apiUrl}function te(r){return Y(r).hubUrl}function U(){return Y().auth}export{o as a,G as b,Y as c,D as d,te as e,U as f,y as g,K as h,I as i,rt as j,m as k,Te as l,re as m,ct as n,lt as o,f as p,ft as q};
|
package/dist/profile-JOKK2XKJ.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{a as t,b as u,g as m,p as f,q as d}from"./chunk-HHCG7UQG.js";function h(){console.log(`
|
|
3
|
-
Usage: entrydesk profile [list|show|current|create|use|delete|rename|clone] [args]
|
|
4
|
-
|
|
5
|
-
Commands:
|
|
6
|
-
list List profiles (default)
|
|
7
|
-
show <name> Show profile details
|
|
8
|
-
current Show active profile
|
|
9
|
-
create <name> Create a profile (default name: default)
|
|
10
|
-
use <name> Switch active profile
|
|
11
|
-
delete <name> Delete a profile
|
|
12
|
-
rename <from> <to> Rename a profile
|
|
13
|
-
clone <from> <to> Clone config defaults (no credentials)
|
|
14
|
-
|
|
15
|
-
Flags:
|
|
16
|
-
--json Output JSON
|
|
17
|
-
`)}function a(r,o){if(r)return r;if(o&&t.getProfileCount()===1)return t.getProfileNames()[0];throw new f("Profile name is required when multiple profiles exist.")}function P(r){if(!r)return"none";let o=[];return r.sandbox&&o.push("sandbox"),r.webSearch&&o.push("webSearch"),r.imageGeneration&&o.push("imageGeneration"),r.chart&&o.push("chart"),o.length>0?o.join(", "):"none"}async function b(r){try{let o=r.action||"list",i=t.getCurrentProfileName(),c=r.name??r.profile,l=r.value;if(r.help||o==="help"){h();return}if(o==="list"){let e=t.getProfileNames();if(r.json){console.log(JSON.stringify({currentProfile:i,profiles:e.map(n=>({name:n,isCurrent:n===i}))}));return}console.log(`Profiles (${e.length}):`);for(let n of e)console.log(` ${n}${n===i?" (current)":""}`);return}if(o==="current"){if(r.json){console.log(JSON.stringify({name:i,isCurrent:!0}));return}console.log(`Current profile: ${i}`);return}if(o==="show"){let e=a(c,!0),n=u.getAll(e),s=await m.getAll(e),g=!!s?.accessToken;if(r.json){console.log(JSON.stringify({name:e,isCurrent:e===i,config:n,auth:g?{loggedIn:!0,email:s?.email??null,workspaceId:s?.workspaceId??null}:{loggedIn:!1}}));return}console.log(`Profile: ${e}${e===i?" (current)":""}`),console.log(` API URL: ${n.apiUrl??"default"}`),console.log(` Hub URL: ${n.hubUrl??"default"}`),console.log(` Model: ${n.model?.default??"unset"}`);let p=n.connectors?.defaults&&n.connectors.defaults.length>0?n.connectors.defaults.join(", "):"unset";console.log(` Connectors: ${p}`),console.log(` Capabilities: ${P(n.capabilities)}`),console.log(g?` Logged in as: ${s?.email??"unknown"}`:" Not logged in"),g&&s?.workspaceId&&console.log(` Workspace ID: ${s.workspaceId}`);return}if(o==="create"){let e=c||t.DEFAULT_PROFILE;if(t.createProfile(e),r.json){console.log(JSON.stringify({name:e,created:!0}));return}console.log(`Profile created: ${e}`);return}if(o==="use"||o==="switch"){let e=a(c,!0);if(t.setCurrentProfile(e),r.json){console.log(JSON.stringify({name:e,current:!0}));return}console.log(`Switched to profile: ${e}`);return}if(o==="delete"||o==="remove"||o==="rm"){let e=a(c,!0),n=t.deleteProfile(e);if(r.json){console.log(JSON.stringify({deleted:e,currentProfile:n.currentProfile}));return}console.log(`Profile deleted: ${e}`),console.log(`Current profile: ${n.currentProfile}`);return}if(o==="rename"||o==="move"||o==="mv"){let e=a(c,!0);if(!l)throw new f("New profile name is required.");let n=t.renameProfile(e,l);if(r.json){console.log(JSON.stringify({renamed:e,name:l,currentProfile:n.currentProfile}));return}console.log(`Profile renamed: ${e} -> ${l}`),console.log(`Current profile: ${n.currentProfile}`);return}if(o==="clone"||o==="copy"){let e=a(c,!0);if(!l)throw new f("Target profile name is required.");let n=u.getAll(e);if(t.createProfile(l),u.setAll(n,l),await m.clear(l),r.json){console.log(JSON.stringify({source:e,name:l,cloned:!0}));return}console.log(`Profile cloned: ${e} -> ${l}`);return}throw new f(`Unknown profile command: ${o}`)}catch(o){d(o)}}export{b as runProfile};
|
package/dist/skills-OM2KB43P.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{h as S,o as z,q as I}from"./chunk-HHCG7UQG.js";import U from"crypto";import g from"fs";import i from"fs/promises";import b from"os";import o from"path";import{Readable as A}from"stream";import{pipeline as E}from"stream/promises";import j from"adm-zip";import N from"archiver";function D(){console.log(`
|
|
3
|
-
Usage: entrydesk skills [list|upload|delete|download] [options]
|
|
4
|
-
|
|
5
|
-
Commands:
|
|
6
|
-
list List available skills (default)
|
|
7
|
-
upload <file.zip> Upload a skill zip file
|
|
8
|
-
upload <folder> Upload a skill folder (auto-zipped)
|
|
9
|
-
delete <skillId> Delete a skill you own
|
|
10
|
-
download <skillId> Download and extract a skill to ./<skill-name>/
|
|
11
|
-
|
|
12
|
-
Options:
|
|
13
|
-
--me Only list skills created by me
|
|
14
|
-
--force Overwrite an existing skill with the same name
|
|
15
|
-
--json Output JSON (for list/upload)
|
|
16
|
-
`)}function O(t,d){let n=o.relative(t,d);return n===""||!n.startsWith("..")&&!o.isAbsolute(n)}async function W(t){let d=await i.realpath(t),n=[process.cwd(),b.homedir()];if(!(await Promise.all(n.map(async a=>{try{return await i.realpath(a)}catch{return o.resolve(a)}}))).some(a=>O(a,d)))throw new Error("Invalid upload path: must be within the current directory or your home directory.")}async function R(t){let d=await i.mkdtemp(o.join(b.tmpdir(),"entrydesk-skill-")),n=o.join(d,`${o.basename(t)}.zip`);return await new Promise((f,m)=>{let a=g.createWriteStream(n),u=N("zip",{zlib:{level:9}});a.on("close",()=>f()),a.on("error",m),u.on("error",m),u.pipe(a),u.directory(t,!1),u.finalize()}),{zipPath:n,cleanupDir:d}}async function Y(t){let d,n;try{let e=await z();d=e.accessToken,n=e.workspaceId}catch(e){I(e)}let f=t.action||"list",m=new S;if(f==="upload"){let e=t.configKey;e||(console.error("Missing file path."),D(),process.exit(1));let w=o.resolve(e),c;try{c=await i.stat(w)}catch{console.error(`File not found: ${w}`),process.exit(1)}let s=w,k=null;try{try{await W(w)}catch(l){let r=l instanceof Error?l.message:"Invalid upload path.";console.error(r),process.exit(1)}if(c.isDirectory()){let l=await R(w);s=l.zipPath,k=l.cleanupDir}else c.isFile()||(console.error(`Not a file or directory: ${w}`),process.exit(1));o.extname(s).toLowerCase()!==".zip"&&(console.error("Only .zip files are supported for upload."),process.exit(1));let v=await i.readFile(s),p=new FormData;p.append("file",new Blob([v],{type:"application/zip"}),o.basename(s)),t.force&&p.append("force","true");let y;try{y=await m.uploadSkill(d,n,p)}catch(l){if(l instanceof Error&&l.name==="HTTPError"){let r=l;if(r.response&&r.response.status===409){try{(await r.response.json()).code==="skill_name_conflict"?console.error("Upload failed: A skill with this name is owned by another user."):(console.error("Upload failed: A skill with this name already exists."),console.error("Use --force to overwrite the existing skill."))}catch{console.error("Upload failed: A skill with this name already exists."),console.error("Use --force to overwrite the existing skill.")}process.exit(1)}}throw l}if(t.json){console.log(JSON.stringify(y));return}console.log(`Uploaded skill: ${y.name}`),console.log(` ID: ${y.id}`),console.log(` Version ID: ${y.versionId}`),console.log(` Description: ${y.description}`);return}finally{k&&await i.rm(k,{recursive:!0,force:!0})}}if(f==="delete"){let e=t.configKey;e||(console.error("Missing skill ID."),D(),process.exit(1)),await m.deleteSkill(d,n,e),console.log(`Deleted skill: ${e}`);return}if(f==="download"){let e=t.configKey;e||(console.error("Missing skill ID."),D(),process.exit(1));let{url:w,name:c}=await m.downloadSkillCurrent(d,n,e);(c.includes("/")||c.includes(o.sep)||c==="."||c===".."||!c)&&(console.error(`Invalid skill name for output directory: ${c}`),process.exit(1));let s=o.resolve(c),k=await i.mkdtemp(o.join(b.tmpdir(),"entrydesk-skill-download-")),v=o.join(k,`${c}.zip`);try{let p=await fetch(w);if(!p.ok)throw new Error(`Failed to download skill zip: ${p.status} ${p.statusText}`);if(!p.body)throw new Error("Response body is empty");let y=g.createWriteStream(v);await E(A.fromWeb(p.body),y);let l=await i.mkdtemp(o.join(o.dirname(s),".entrydesk-skill-extract-")),r=null;try{t.json||console.log("Extracting...");let x=new j(v),P=o.resolve(l)+o.sep;for(let h of x.getEntries()){if(h.isDirectory)continue;let $=o.resolve(l,h.entryName);if(!$.startsWith(P))throw new Error(`Zip entry contains path traversal: ${h.entryName}`);await i.mkdir(o.dirname($),{recursive:!0}),await i.writeFile($,h.getData())}g.existsSync(s)&&(r=o.join(o.dirname(s),`.entrydesk-backup-${U.randomUUID()}`),t.json||console.log(`Replacing existing directory: ${s}`),await i.rename(s,r));try{await i.rename(l,s),r&&g.existsSync(r)&&(await i.rm(r,{recursive:!0,force:!0}),r=null)}catch(h){throw r&&g.existsSync(r)&&(await i.rename(r,s),r=null),h}}catch(x){if(await i.rm(l,{recursive:!0,force:!0}),r&&g.existsSync(r))try{await i.rename(r,s)}catch{console.error(`Warning: Could not restore backup. Your original files are at: ${r}`)}throw x}if(t.json){console.log(JSON.stringify({skillId:e,skillName:c,outputDir:s}));return}console.log(`Downloaded skill "${c}" to ${s}`)}finally{await i.rm(k,{recursive:!0,force:!0})}return}f!=="list"&&(console.error(`Unknown skills command: ${f}`),D(),process.exit(1));let a=[],u;do{let e=await m.listAvailableSkills(d,n,{createdBy:t.createdBy,nextKey:u,limit:100});a.push(...e.skills),u=e.nextKey}while(u);if(t.json){console.log(JSON.stringify(a));return}if(a.length===0){console.log("No skills found in this workspace.");return}console.log(`Available Skills (${a.length}):
|
|
17
|
-
`);for(let e of a)console.log(` ${e.name} (${e.provider})`),console.log(` ${e.description.slice(0,120)}`),console.log(` ID: ${e.id}`),console.log(` Author: ${e.author.name}`),console.log("")}export{Y as runSkills};
|
package/dist/status-QVELZ6DI.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{a as i,b as r,g as c,h as a,k as g,n as f,q as p}from"./chunk-HHCG7UQG.js";async function A(s){try{let o=i.getEffectiveProfileName(),e=await c.getAll(),n={model:r.getDefaultModel(),connectors:r.getDefaultConnectorIds(),capabilities:r.getCapabilities()};if(!e){s.json?console.log(JSON.stringify({loggedIn:!1,profile:o,defaults:n})):(console.log(`Profile: ${o}`),console.log("Not logged in"),console.log("Run `entrydesk login` to authenticate"));return}let t;if(e.workspaceId)try{let l=new a,d=await f(),{workspaces:m}=await l.getWorkspaces(d);t=m.find(k=>k.id===e.workspaceId)?.name}catch(l){if(l instanceof g){s.json?console.log(JSON.stringify({loggedIn:!1,profile:o,defaults:n})):(console.log(`Profile: ${o}`),console.log("Not logged in"),console.log("Run `entrydesk login` to authenticate"));return}}s.json?console.log(JSON.stringify({loggedIn:!0,profile:o,email:e.email,workspaceId:e.workspaceId,workspaceName:t,defaults:n})):(console.log(`Profile: ${o}`),console.log(`Logged in as ${e.email}`),t&&console.log(`Workspace: ${t}`),e.workspaceId&&console.log(`Workspace ID: ${e.workspaceId}`))}catch(o){p(o)}}export{A as runStatus};
|