@entrydesk/cli 2.1.0-beta.1 → 2.1.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +101 -28
  2. package/dist/{add-Lh_kLR85.js → add-4VqDcbIj.js} +9 -1
  3. package/dist/agents-CCOqroYN.js +10 -0
  4. package/dist/{billing-DHrYi0SU.js → billing-BV5kdyQb.js} +9 -1
  5. package/dist/{budget-D_DDPBBb.js → budget-CnxbNkne.js} +9 -1
  6. package/dist/build-task-request-config-CjKDSNjv.js +10 -0
  7. package/dist/commands-DRUlUd-I.js +10 -0
  8. package/dist/{commands-3Yqb38G_.js → commands-gyHmiEsC.js} +9 -1
  9. package/dist/{config-hGzOCx4u.js → config-CJf4r7wp.js} +9 -1
  10. package/dist/confirm-Ct432t3K.js +10 -0
  11. package/dist/connectors-C_Re7e0l.js +11 -0
  12. package/dist/{file-upload-BmP4AJY0.js → file-upload-D2s_clGk.js} +8 -0
  13. package/dist/{format-C3tQC6LL.js → format-DCvznP70.js} +8 -0
  14. package/dist/{hash-Ddmw8YE4.js → hash-CnSb1n2t.js} +8 -0
  15. package/dist/index.js +52 -16
  16. package/dist/{installer-iaoPJQn3.js → installer-CKB3jBE-.js} +8 -0
  17. package/dist/instruction-DYgn39xF.js +10 -0
  18. package/dist/isRecord-BNZWvqVS.js +10 -0
  19. package/dist/{login-CwXjzUnO.js → login-C0Zz6tHG.js} +9 -1
  20. package/dist/logout-DnFBlXMZ.js +10 -0
  21. package/dist/{marketplace-NSEUjhXf.js → marketplace-DQsEzT6T.js} +9 -1
  22. package/dist/{mcp-B7wo_sRO.js → mcp-DHXuIFWP.js} +9 -1
  23. package/dist/{mcp-client-DMOEcmul.js → mcp-client-EK-Fh8gM.js} +9 -1
  24. package/dist/{meeting-yS83In45.js → meeting-C6H_GJB7.js} +9 -1
  25. package/dist/message-utils-Cq_Fel5P.js +15 -0
  26. package/dist/{models-AN9cWKSj.js → models-DT78HZxx.js} +9 -1
  27. package/dist/{notifications-QF11-X32.js → notifications-3UrKbGaT.js} +9 -1
  28. package/dist/options-Dpxg1wT1.js +10 -0
  29. package/dist/paginate-Brd-j5V8.js +10 -0
  30. package/dist/{paths-C9BPsZVF.js → paths-mBL9tt9p.js} +9 -1
  31. package/dist/{profile-WtKtO0yp.js → profile-D4m5ZAG7.js} +9 -1
  32. package/dist/profile-storage-CPg61h-2.js +68 -0
  33. package/dist/project-C5_rCWCh.js +10 -0
  34. package/dist/project-context-DnIuy1T0.js +10 -0
  35. package/dist/{project-governance-C7rl6gDW.js → project-governance-CxDZSThr.js} +9 -1
  36. package/dist/{project-sources-CzylP6oS.js → project-sources-D17oXXhL.js} +9 -1
  37. package/dist/project-sources-write-C-W8gjLg.js +10 -0
  38. package/dist/{project-tasks-DaGBt4Cp.js → project-tasks-t4HFgEoZ.js} +9 -1
  39. package/dist/{push-Ce79oiu0.js → push-CJZLFEdk.js} +9 -1
  40. package/dist/{recordings-DoExjM1F.js → recordings-DeB1LqiS.js} +9 -1
  41. package/dist/remote-D3JMUBbh.js +10 -0
  42. package/dist/{remove-bHAmCTdf.js → remove-ChV-BE95.js} +9 -1
  43. package/dist/resolve-Czx_OkYk.js +14 -0
  44. package/dist/resource-grants-zAoqe73P.js +10 -0
  45. package/dist/{rolldown-runtime-CIdiawuB.js → rolldown-runtime-CiM6yMNq.js} +8 -0
  46. package/dist/{schedules-tDaIGaad.js → schedules-COBaV-Be.js} +10 -2
  47. package/dist/skills-OLZywcSs.js +10 -0
  48. package/dist/{status-CDMSNVD8.js → status-CpfDbB9S.js} +9 -1
  49. package/dist/{status-gK3MA1oe.js → status-Oo8upbyy.js} +9 -1
  50. package/dist/stdin-B18x8pUF.js +10 -0
  51. package/dist/task-C8PttINZ.js +108 -0
  52. package/dist/tasks-CAmfAGsn.js +22 -0
  53. package/dist/tasks-dv0gJ38_.js +10 -0
  54. package/dist/tool-kEevHrsQ.js +17 -0
  55. package/dist/{update-CJlVgq8V.js → update-Y9S-P4wG.js} +9 -1
  56. package/dist/{usage-DOI9sowA.js → usage-CHIhyA8S.js} +9 -1
  57. package/dist/{usage-audit-1GZx4VBG.js → usage-audit-C1xGe42N.js} +9 -1
  58. package/dist/version-Dgsb7T5N.js +10 -0
  59. package/dist/workflow-DWmgcRJ_.js +14 -0
  60. package/dist/{workspaces-D0VOrP2A.js → workspaces-3PFiXy1I.js} +9 -1
  61. package/package.json +11 -7
  62. package/dist/agents-CLcXSbBp.js +0 -2
  63. package/dist/build-task-request-config-Y9X2h9Ia.js +0 -2
  64. package/dist/commands-CdnyYMrx.js +0 -2
  65. package/dist/confirm-BrJZbaxf.js +0 -2
  66. package/dist/connectors-CxzG22No.js +0 -3
  67. package/dist/instruction-CRCyBKQf.js +0 -2
  68. package/dist/logout-BYCFpaxh.js +0 -2
  69. package/dist/options-D6fCp3Q_.js +0 -2
  70. package/dist/paginate-CfIrho1f.js +0 -2
  71. package/dist/profile-storage-Dv0xRb8J.js +0 -58
  72. package/dist/project-BhPYRsaZ.js +0 -2
  73. package/dist/project-context-Cc_Js6n4.js +0 -2
  74. package/dist/project-sources-write-6cBfdUfV.js +0 -2
  75. package/dist/remote-nEFOyIM2.js +0 -2
  76. package/dist/resolve-f238uD6C.js +0 -6
  77. package/dist/skills-CDd-emMc.js +0 -2
  78. package/dist/stdin-DzzLUF6W.js +0 -2
  79. package/dist/task-CHnFR-Zp.js +0 -103
  80. package/dist/tasks-D4RIFT8Y.js +0 -14
  81. package/dist/tasks-acCatE6n.js +0 -2
  82. package/dist/tool-BEivzspP.js +0 -5
  83. package/dist/version-C37EX5li.js +0 -2
  84. package/dist/workflow-DhomAltH.js +0 -6
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ var __entrydeskNodeFloor = 24;
3
+ if (parseInt(process.versions.node, 10) < __entrydeskNodeFloor) {
4
+ process.stderr.write(
5
+ 'entrydesk: Node.js ' + __entrydeskNodeFloor + ' or newer is required, but this is Node ' + process.versions.node + '.\n' +
6
+ 'Upgrade Node (https://nodejs.org/en/download), then reinstall @entrydesk/cli.\n'
7
+ );
8
+ process.exit(1);
9
+ }
10
+ import{b as e,l as t,o as n,u as r}from"./profile-storage-CPg61h-2.js";import{f as i,i as a,o,t as s,u as c}from"./resolve-Czx_OkYk.js";import{l,n as u,u as d}from"./message-utils-Cq_Fel5P.js";const f=`\x1B[2m`,p=`\x1B[0m`,m=`\x1B[36m`,h=`\x1B[33m`,g=`\x1B[32m`;function _(e,t){let n=t===void 0?{event:e}:{event:e,data:t};process.stdout.write(`${JSON.stringify(n)}\n`)}function v(e){let t=new Date(e),n=new Date().getTime()-t.getTime(),r=Math.floor(n/(1e3*60*60*24));return r===0?t.toLocaleTimeString(`en-US`,{hour:`2-digit`,minute:`2-digit`}):r===1?`Yesterday`:r<7?`${r} days ago`:t.toLocaleDateString(`en-US`,{month:`short`,day:`numeric`})}function y(e){return e.replace(/<mark>/g,`\x1B[1m`).replace(/<\/mark>/g,p).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`).replace(/&quot;/g,`"`).replace(/&#39;/g,`'`).replace(/&amp;/g,`&`)}function b(e,t){if(t)return e;let n=e.split(`
11
+ `);if(n.length<=15)return e;let r=n.slice(0,6),i=n.slice(-4),a=n.length-10;return[...r,`… (${a} lines omitted, use --full-output to see all) …`,...i].join(`
12
+ `)}function x(e){if(!e||typeof e!=`object`)return e;if(Array.isArray(e))return e.map(x);let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&r.length>200?t[n]=r.slice(0,150)+`… (truncated)`:typeof r==`object`&&r?t[n]=x(r):t[n]=r;return t}function S(e){if(!e||typeof e!=`object`)return String(e);try{return JSON.stringify(e,null,2)}catch{return String(e)}}function C(e){return d(S(e))}function w(e,t){if(!e)return`(no result)`;if(typeof e!=`object`)return b(d(String(e)),t);let n=t?e:x(e);if(`structuredContent`in n&&n.structuredContent){let e=n.structuredContent,r=[];if(e.stdout&&typeof e.stdout==`string`&&e.stdout.trim()&&r.push(d(e.stdout.trim())),e.stderr&&typeof e.stderr==`string`&&e.stderr.trim()&&r.push(`${h}[stderr]${p} ${d(e.stderr.trim())}`),e.urls&&Array.isArray(e.urls)){let t=e.urls;for(let e of t)e.path&&e.url&&r.push(d(`${e.path}: ${e.url}`))}return r.length===0&&r.push(d(JSON.stringify(e,null,2))),b(r.join(`
13
+ `),t)}return`content`in n&&Array.isArray(n.content)?b(d(n.content.filter(e=>e.type===`text`&&e.text).map(e=>e.text).join(`
14
+ `)||JSON.stringify(e,null,2)),t):n.type===`text`&&typeof n.content==`string`?b(d(n.content),t):b(d(JSON.stringify(e,null,2)),t)}function T(e){if(typeof e.title==`string`)return e.title;if(typeof e.toolName==`string`)return e.toolName;let t=e.type;return t.startsWith(`tool-`)?t.slice(5).replaceAll(`__`,` `).replace(/_/g,` `):t}function E(e,t){let n=[];for(let r of e)if(r.type===`reasoning`&&r.text)n.push(`${f}${d(r.text)}${p}`);else if(r.type===`text`&&r.text)n.push(d(r.text));else if(r.type===`tool-call`&&r.toolName){let e=[`${m}┌─ Tool: ${l(String(r.toolName))}${p}`];if(r.args){e.push(`${h}│ Input:${p}`);let t=C(r.args);for(let n of t.split(`
15
+ `))e.push(`${f}│ ${n}${p}`)}if(r.result!==void 0){e.push(`${g}│ Output:${p}`);let n=w(r.result,t);for(let t of n.split(`
16
+ `))e.push(`${f}│ ${t}${p}`);e.push(`${m}└─ ${r.toolName} completed${p}`)}else r.state===`call`?e.push(`${m}└─ (awaiting result)${p}`):e.push(`${m}└─${p}`);n.push(e.join(`
17
+ `))}else if(r.type.startsWith(`tool-`)&&r.type!==`tool-call`){let e=l(T(r)),i=[`${m}┌─ Tool: ${e}${p}`];if(r.input){i.push(`${h}│ Input:${p}`);let e=C(r.input);for(let t of e.split(`
18
+ `))i.push(`${f}│ ${t}${p}`)}if(r.output!==void 0&&r.state===`output-available`){i.push(`${g}│ Output:${p}`);let e=w(r.output,t);for(let t of e.split(`
19
+ `))i.push(`${f}│ ${t}${p}`);let n=u(r.approval);n&&i.push(`${f}│ ${n}${p}`),i.push(`${m}└─ completed${p}`)}else r.state===`call`||r.state===`partial-call`?i.push(`${m}└─ (in progress)${p}`):i.push(`${m}└─${p}`);n.push(i.join(`
20
+ `))}return n.join(`
21
+
22
+ `).trim()}function D(){return{empty:'No tasks yet. Start one with `entrydesk task -m "..."`.',heading:e=>`Recent tasks (${e}):`,label:(e,t)=>`${(t+1).toString().padStart(2,` `)}.`,footer:e=>["Use `entrydesk tasks 1` to view the most recent task",'Use `entrydesk task -c 1 -m "message"` to continue it',...e?[`Next page: --next-key ${e}`]:[]]}}function O(e){return{empty:`No tasks you can see in this project yet. Start one with \`entrydesk task --project ${e} -m "..."\`.`,heading:e=>`Tasks in this project (${e}):`,label:e=>`${f}${e.id}${p}`,footer:e=>["Use `entrydesk tasks <taskId>` to view one of them",...e?[`Next page: --next-key ${e}`]:[]]}}async function k(l,u){let d=u.output!==void 0,m=new e;if(l&&u.project&&await c(u,new o(`project_not_applicable`,"`--project` narrows the listing and the search; drop it to view a task.")),u.share){let e;try{e=await t()}catch{}try{let t=await m.getSharedTask(u.share,e),{messages:n}=await m.getSharedMessages(u.share,50,e);if(u.json){console.log(JSON.stringify({task:t,messages:n}));return}if(d){if(_(`task`,t),n.length===0)_(`info`,`No messages in this shared task.`);else for(let e of n.toReversed())_(`message`,e);_(`done`);return}if(console.log(`Shared task: ${t.title||`Untitled`}`),console.log(`Visibility: ${t.visibility}`),t.agent&&console.log(`Agent: ${t.agent.name}`),console.log(`${n.length} messages\n`),n.length===0){console.log(`No messages in this shared task.`);return}let r=n.toReversed(),i=u.fullOutput??!1;for(let e of r){let t=E(e.parts,i);if(!t)continue;let n=e.role===`user`?`You`:`Assistant`;console.log(`[${n}] ${v(e.createdAt)}`),console.log(t),console.log(``)}return}catch(e){if(e instanceof Error){let t=e.message.toLowerCase();t.includes(`401`)||t.includes(`unauthorized`)?console.error(`Access denied. This shared task requires authentication or is not accessible to you.`):t.includes(`404`)||t.includes(`not found`)?console.error(`Shared task not found. The share ID may be invalid or the task was deleted.`):console.error(`Failed to fetch shared task: ${e.message}`)}else console.error(`Failed to fetch shared task`);process.exit(1)}}let g=u.project?await a(u.project,u.json??!1):void 0,b=e=>g?i({json:u.json??!1},e,`tasks:read`):e(),x,S;try{let e=await r();x=e.accessToken,S=e.workspaceId}catch(e){n(e)}if(l){let e=l,t=!1,n=null,r=Number.parseInt(l,10);if(!Number.isNaN(r)&&r>=0&&/^\d+$/.test(l)){let i=r===0?1:r,{tasks:a}=await m.getTasks(x,S);i>a.length&&(console.error(`Task number ${i} not found. You have ${a.length} recent tasks.`),process.exit(1));let o=a[i-1];e=o.id,t=!0,n=o,d||console.log(`Task: ${o.title||`Untitled`}\n`)}let{messages:i}=await m.getMessages(x,S,e,50);if(u.json){console.log(JSON.stringify(i));return}if(d){if(n&&_(`task`,n),i.length===0)_(`info`,`No messages in this task.`);else for(let e of i.toReversed())_(`message`,e);_(`done`);return}if(i.length===0){console.log(`No messages in this task.`);return}let a=i.toReversed(),o=u.fullOutput??!1;t||console.log(`Task: ${l.slice(0,8)}…`),console.log(`${i.length} messages\n`);for(let e of a){let t=E(e.parts,o);if(!t)continue;let n=e.role===`user`?`You`:`Assistant`;console.log(`[${n}] ${v(e.createdAt)}`),console.log(t),console.log(``)}return}let C=u.search;if(C){g&&await b(()=>s({client:m,accessToken:x,workspaceId:S},g));let{results:e,nextKey:t}=await b(()=>m.searchTasks(x,S,C,{limit:u.limit,nextKey:u.nextKey,projectId:g}));if(d){for(let t of e)_(`task`,t);_(`done`);return}if(u.json){console.log(JSON.stringify({results:e,nextKey:t}));return}if(e.length===0){console.log(`No tasks match "${u.search}".`);return}console.log(`Search results for "${u.search}" (${e.length}):\n`);for(let[t,n]of e.entries()){let e=(t+1).toString().padStart(2,` `),r=n.titleHighlight?y(n.titleHighlight):n.title||`Untitled`;console.log(` ${e}. ${f}${v(n.createdAt)}${p} ${r}`),n.contentSnippet&&console.log(` ${y(n.contentSnippet)}`),console.log(` ${f}ID: ${n.id}${p}`)}t&&console.log(`\nNext page: --next-key ${t}`);return}let w=g&&u.project?O(u.project):D(),{tasks:T,nextKey:k}=await b(()=>m.getTasks(x,S,{limit:u.limit,nextKey:u.nextKey,projectId:g}));if(d){for(let e of T)_(`task`,e);_(`done`);return}if(u.json){console.log(JSON.stringify(T));return}if(T.length===0){console.log(w.empty);return}console.log(`${w.heading(T.length)}\n`);for(let[e,t]of T.entries()){let n=t.waitingReason===`approval`?` ${h}[waiting approval]${p}`:t.waitingReason===`client`?` ${h}[waiting device]${p}`:``;console.log(` ${w.label(t,e)} ${v(t.createdAt).padEnd(12)} ${t.title||`Untitled`}${n}`)}console.log(``);for(let e of w.footer(k))console.log(e)}export{k as n,y as t};
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ var __entrydeskNodeFloor = 24;
3
+ if (parseInt(process.versions.node, 10) < __entrydeskNodeFloor) {
4
+ process.stderr.write(
5
+ 'entrydesk: Node.js ' + __entrydeskNodeFloor + ' or newer is required, but this is Node ' + process.versions.node + '.\n' +
6
+ 'Upgrade Node (https://nodejs.org/en/download), then reinstall @entrydesk/cli.\n'
7
+ );
8
+ process.exit(1);
9
+ }
10
+ import{n as e}from"./tasks-CAmfAGsn.js";export{e as runTasks};
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ var __entrydeskNodeFloor = 24;
3
+ if (parseInt(process.versions.node, 10) < __entrydeskNodeFloor) {
4
+ process.stderr.write(
5
+ 'entrydesk: Node.js ' + __entrydeskNodeFloor + ' or newer is required, but this is Node ' + process.versions.node + '.\n' +
6
+ 'Upgrade Node (https://nodejs.org/en/download), then reinstall @entrydesk/cli.\n'
7
+ );
8
+ process.exit(1);
9
+ }
10
+ import{Y as e,c as t,i as n,s as r}from"./profile-storage-CPg61h-2.js";import{t as i}from"./isRecord-BNZWvqVS.js";import{n as a,r as o}from"./mcp-client-EK-Fh8gM.js";import s from"node:fs";import c from"node:os";import l from"node:path";import u from"node:fs/promises";const d=!process.env.NO_COLOR&&process.stdout.isTTY,f={green:d?`\x1B[32m`:``,yellow:d?`\x1B[33m`:``,reset:d?`\x1B[0m`:``},p=8*1024;function m(){return l.join(c.homedir(),`.entrydesk`,`tool-results`)}function h(e){let t=e.trim().replace(/[/\\:*?"<>|\s]/g,`_`).replace(/_+/g,`_`).replace(/^[._]+|[._]+$/g,``).slice(0,100);return!t||t===`.`||t===`..`?`unnamed_tool`:t}function g(e){try{return JSON.stringify(e,(e,t)=>typeof t==`bigint`?`${t}n`:typeof t==`function`?`[Function]`:typeof t==`symbol`?t.toString():t,2)}catch{return String(e)}}function _(e){let t=new Date;return`${[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(`-`)}_${h(e)}.json`}async function v(e,t){try{return await u.writeFile(e,t,{encoding:`utf8`,flag:`wx`}),!0}catch(e){if(e instanceof Error&&`code`in e&&e.code===`EEXIST`)return!1;throw e}}async function y(e,t){try{let n=m();await u.mkdir(n,{recursive:!0});let r=_(e),i=l.extname(r),a=r.slice(0,-i.length),o=g(t),s=l.join(n,r);if(await v(s,o))return s;for(let e=1;e<=100;e++){let t=l.join(n,`${a}-${e}${i}`);if(await v(t,o))return t}let c=Math.random().toString(36).slice(2,10),d=l.join(n,`${a}-${c}${i}`);return await u.writeFile(d,o,{encoding:`utf8`,flag:`wx`}),d}catch(e){let t=e instanceof Error?e.message:`unknown error`;return console.error(`${f.yellow}Warning: Could not save result to file: ${t}${f.reset}`),null}}function b(e,t){let n=Buffer.byteLength(e,`utf8`);if(n<=10240)return e;let r=e.slice(0,p),i=e.slice(-2048),a=` … (skipped ${((n-p-2048)/1024).toFixed(1)}KB of ${(n/1024).toFixed(1)}KB) …`;return t&&(a+=`
11
+ Tip: jq -r '.structuredContent.field' <file> | grep/head/tail`),`${r}\n\n${a}\n\n${i}`}function x(e){console.log(`${f.green}Tool execution result saved to: ${e}${f.reset}`),console.log()}function S(){console.log(`${f.green}Tool execution result:${f.reset}`)}function C(e){return i(e)&&typeof e.name==`string`&&(e.description===void 0||typeof e.description==`string`)}function w(e){return Array.isArray(e.primaryTools)&&e.primaryTools.every(C)&&(e.relatedTools===void 0||Array.isArray(e.relatedTools)&&e.relatedTools.every(C))&&(e.toolSchemas===void 0||i(e.toolSchemas))&&(e.authStatuses===void 0||Array.isArray(e.authStatuses)&&e.authStatuses.every(e=>i(e)&&typeof e.toolNamespace==`string`&&typeof e.connected==`boolean`&&(e.authStatusMessage===void 0||typeof e.authStatusMessage==`string`)))&&[e.recommendedPlanSteps,e.knownPitfalls].every(e=>e===void 0||Array.isArray(e)&&e.every(e=>typeof e==`string`))&&(e.error===null||typeof e.error==`string`)}function T(e){return e.split(`__`)[0]??e}function E(e,t,n){console.error(n?JSON.stringify({error:{code:e,message:t}}):`Error [${e}]: ${t}`),process.exitCode=1}function D(e,t,n){E(e,t,n),process.exit(1)}function O(e,i,a=`CONNECTION_FAILED`){if(r(e)){E(a,n(),i);return}let o=e instanceof Error?e.message:`Unknown error`;e instanceof t&&e.code===`not-logged-in`?E(`AUTH_MISSING`,o,i):E(a,o,i)}function k(e,t,n=`CONNECTION_FAILED`){O(e,t,n),process.exit(1)}async function A(){return process.stdin.isTTY?null:new Promise(e=>{let t=[],n=!1,r=!1,i,a,o,s,c=()=>{clearTimeout(i),process.stdin.removeListener(`data`,a),process.stdin.removeListener(`end`,o),process.stdin.removeListener(`error`,s)},l=t=>{r||(r=!0,c(),e(t))};a=e=>{n=!0,clearTimeout(i),t.push(e)},o=()=>{t.length===0?l(null):l(Buffer.concat(t).toString(`utf-8`).trim())},s=()=>{l(null)},i=setTimeout(()=>{n||l(null)},100),process.stdin.on(`data`,a),process.stdin.on(`end`,o),process.stdin.on(`error`,s),process.stdin.resume()})}var j=class extends Error{constructor(e){super(e),this.name=`InputError`}};async function M(e,t){if(e)return e;if(t)try{return s.readFileSync(t,`utf-8`).trim()}catch(e){throw new j(`Failed to read input file: ${e instanceof Error?e.message:`Failed to read input file`}`)}let n=await A();if(n)return n;throw new j(`Input JSON is required. Use --input, --input-file, or pipe it via stdin.`)}function N(e){let t=[`Tool: ${e.name}`];return e.description&&t.push(` Description: ${e.description}`),t.join(`
12
+ `)}async function P(e){let t=[],n=new Set,r;do{let i=await e.listTools(r?{cursor:r}:{},o());if(t.push(...i.tools),r=i.nextCursor,r){if(n.has(r))throw Error(`Tool listing returned a repeated pagination cursor`);n.add(r)}}while(r);return t}async function F(e,t,n){let r=await e.callTool({name:t,arguments:n},o());if(r.isError){let e=r.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
13
+ `);throw Error(e||`Tool discovery failed: ${t}`)}if(!i(r.structuredContent))throw Error(`Tool discovery returned no structured content: ${t}`);return r.structuredContent}async function I(t,n){let r=await F(t,e.GET_TOOL_SCHEMAS,{toolNames:[n]}),i=r.errors;if(i?.length)throw Error(i.join(`
14
+ `));let a=r.toolSchemas?.[n];if(a?.inputSchema)return{name:n,...a};throw Error(`Could not retrieve an input schema for ${n}. The name may be incorrect, or its connector may need authorization or be unavailable. Use entrydesk tool search "<English query>" to discover tool names, or entrydesk connectors --all to check connections.`)}async function L(t,n){let r=n.json??!1,i=await a().catch(e=>{k(e,r)}),o;try{let r=await F(i,e.SEARCH_TOOLS,{query:t,...n.namespace&&{toolNamespaces:n.namespace}});if(!w(r))throw Error(`Tool discovery returned invalid search results`);o=r}catch(e){O(e,r,`TOOL_DISCOVERY_FAILED`);return}finally{await i.close().catch(()=>{})}if(r)console.log(JSON.stringify(o,null,2));else{console.log(`Matched tools (${o.primaryTools.length}):\n`);for(let e of o.primaryTools)console.log(N(e));if(o.relatedTools?.length){console.log(`
15
+ Related tools:`);for(let e of o.relatedTools)console.log(N(e))}for(let e of o.authStatuses??[])e.connected||console.log(`\n${e.toolNamespace}: ${e.authStatusMessage??`Not connected. Run entrydesk connectors --all to check authorization.`}`);for(let e of o.recommendedPlanSteps??[])console.log(e);for(let e of o.knownPitfalls??[])console.log(e);console.log(`
16
+ Next: entrydesk tool get <name> --json`),console.log(`Then: entrydesk tool call <name> --input-file input.json --json`)}o.error&&E(`TOOL_DISCOVERY_FAILED`,o.error,r)}function R(e){let t=[`Tool: ${e.name}`];return e.description&&(t.push(`Description:`),t.push(` ${e.description}`)),t.push(`Input Schema:`),t.push(JSON.stringify(e.inputSchema,null,2)),t.join(`
17
+ `)}async function z(e){let t=e.json??!1,n=await a().catch(e=>{k(e,t)});try{let r=await P(n);if(e.prefix){let t=e.prefix.toLowerCase();r=r.filter(e=>T(e.name).toLowerCase().startsWith(t))}if(t)console.log(JSON.stringify(r,null,2));else{let t=e.prefix?` (prefix: ${e.prefix})`:``;console.log(`Directly listed tools (${r.length})${t}:\n`);for(let e of r)console.log(N(e)),console.log();console.log(`Connector tools may be available without appearing here. Use entrydesk tool search "<English query>" or entrydesk tool get <name>.`)}}catch(e){k(e,t)}finally{await n.close().catch(()=>{})}}async function B(e,t){let n=t.json??!1,r=await a().catch(e=>{k(e,n)}),i;try{i=(await P(r)).find(t=>t.name===e)??await I(r,e)}catch(e){O(e,n,`TOOL_DISCOVERY_FAILED`);return}finally{await r.close().catch(()=>{})}console.log(n?JSON.stringify(i,null,2):R(i))}async function V(e,t,n){let r;try{r=JSON.parse(t)}catch(e){D(`INVALID_INPUT`,e instanceof Error?`Invalid JSON input: ${e.message}`:`Invalid JSON input`,n)}let i=await a().catch(e=>{k(e,n,`TOOL_CALL_FAILED`)}),s=!1;try{let t=await i.callTool({name:e,arguments:r},o());if(n)console.log(JSON.stringify(t,null,2));else{let n=await y(e,t);n&&x(n),S();for(let e of t.content)e.type===`text`?console.log(e.text):e.type===`image`?console.log(`[Image: ${e.mimeType}]`):e.type===`resource`?console.log(`[Resource: ${e.resource.uri}]`):console.log(JSON.stringify(e,null,2));if(t.structuredContent){let e=b(JSON.stringify(t.structuredContent,null,2),n);console.log(e)}}t.isError&&(s=!0)}catch(e){k(e,n,`TOOL_CALL_FAILED`)}finally{await i.close().catch(()=>{})}s&&process.exit(1)}async function H(e,t){let n=t.json??!1,r;try{r=await M(t.input,t.inputFile)}catch(e){throw e instanceof j&&D(`INVALID_INPUT`,e.message,n),e}await V(e,r,n)}export{B as getTool,z as listTools,H as runToolCall,L as searchTools};
@@ -1,2 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import{r as e}from"./profile-storage-Dv0xRb8J.js";import{t}from"./version-C37EX5li.js";import n from"cross-spawn";const r=`@entrydesk/cli`;function i(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/u.exec(e.trim());return t?{nums:[Number(t[1]),Number(t[2]),Number(t[3])],prerelease:t[4]??null}:null}function a(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let n=e.split(`.`),r=t.split(`.`),i=Math.min(n.length,r.length);for(let e=0;e<i;e++){let t=n[e],i=r[e];if(t!==i){let e=/^\d+$/u.test(t),n=/^\d+$/u.test(i);return e&&n?Number(t)<Number(i)?-1:1:e?-1:n?1:t<i?-1:1}}return n.length===r.length?0:n.length<r.length?-1:1}function o(e,t){let n=i(e),r=i(t);if(!n||!r)return n?1:r?-1:0;for(let e=0;e<3;e++)if(n.nums[e]!==r.nums[e])return n.nums[e]<r.nums[e]?-1:1;return a(n.prerelease,r.prerelease)}function s(e,{inheritOutput:t}){return new Promise((r,i)=>{let a=n(`npm`,e,{stdio:t?[`ignore`,`inherit`,`inherit`]:[`ignore`,`pipe`,`pipe`]}),o=``,s=``;a.stdout?.on(`data`,e=>{o+=String(e)}),a.stderr?.on(`data`,e=>{s+=String(e)}),a.once(`error`,i),a.once(`close`,e=>{r({exitCode:e??1,stdout:o,stderr:s})})})}async function c(){let t;try{t=await s([`view`,r,`version`],{inheritOutput:!1})}catch(t){throw new e(`Failed to run npm — is npm installed and on your PATH?`,1,t instanceof Error?t:void 0)}let n=t.stdout.trim();if(t.exitCode!==0||!n)throw new e(`Failed to look up the latest ${r} version from the npm registry.${t.stderr?`\n${t.stderr.trim()}`:``}`);if(!i(n))throw new e(`Unexpected version from the npm registry: ${JSON.stringify(n)}`);return n}async function l(n){let i=t(),a=await c(),l=o(i,a),u=l>=0;if(n.check||u){n.json?console.log(JSON.stringify({current:i,latest:a,upToDate:u,updated:!1})):console.log(l>0?`entrydesk ${i} is newer than the latest published version (${a}). Nothing to do.`:u?`entrydesk ${i} is already the latest version.`:`Update available: ${i} → ${a}. Run \`entrydesk update\` to install.`);return}n.json||console.log(`Updating entrydesk ${i} → ${a}…`);let d=await s([`install`,`-g`,`${r}@${a}`],{inheritOutput:!n.json});if(d.exitCode!==0){let t=d.stderr?`\n${d.stderr.trim()}`:``;throw new e(`npm install failed (exit code ${d.exitCode}). You can update manually with \`npm install -g ${r}@latest\`.`+t,d.exitCode)}n.json?console.log(JSON.stringify({current:i,latest:a,upToDate:u,updated:!0})):console.log(`entrydesk updated to ${a}.`)}export{l as runUpdate};
2
+ var __entrydeskNodeFloor = 24;
3
+ if (parseInt(process.versions.node, 10) < __entrydeskNodeFloor) {
4
+ process.stderr.write(
5
+ 'entrydesk: Node.js ' + __entrydeskNodeFloor + ' or newer is required, but this is Node ' + process.versions.node + '.\n' +
6
+ 'Upgrade Node (https://nodejs.org/en/download), then reinstall @entrydesk/cli.\n'
7
+ );
8
+ process.exit(1);
9
+ }
10
+ import{r as e}from"./profile-storage-CPg61h-2.js";import{t}from"./version-Dgsb7T5N.js";import n from"cross-spawn";const r=`@entrydesk/cli`;function i(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/u.exec(e.trim());return t?{nums:[Number(t[1]),Number(t[2]),Number(t[3])],prerelease:t[4]??null}:null}function a(e,t){if(e===t)return 0;if(e===null)return 1;if(t===null)return-1;let n=e.split(`.`),r=t.split(`.`),i=Math.min(n.length,r.length);for(let e=0;e<i;e++){let t=n[e],i=r[e];if(t!==i){let e=/^\d+$/u.test(t),n=/^\d+$/u.test(i);return e&&n?Number(t)<Number(i)?-1:1:e?-1:n?1:t<i?-1:1}}return n.length===r.length?0:n.length<r.length?-1:1}function o(e,t){let n=i(e),r=i(t);if(!n||!r)return n?1:r?-1:0;for(let e=0;e<3;e++)if(n.nums[e]!==r.nums[e])return n.nums[e]<r.nums[e]?-1:1;return a(n.prerelease,r.prerelease)}function s(e,{inheritOutput:t}){return new Promise((r,i)=>{let a=n(`npm`,e,{stdio:t?[`ignore`,`inherit`,`inherit`]:[`ignore`,`pipe`,`pipe`]}),o=``,s=``;a.stdout?.on(`data`,e=>{o+=String(e)}),a.stderr?.on(`data`,e=>{s+=String(e)}),a.once(`error`,i),a.once(`close`,e=>{r({exitCode:e??1,stdout:o,stderr:s})})})}async function c(){let t;try{t=await s([`view`,r,`version`],{inheritOutput:!1})}catch(t){throw new e(`Failed to run npm — is npm installed and on your PATH?`,1,t instanceof Error?t:void 0)}let n=t.stdout.trim();if(t.exitCode!==0||!n)throw new e(`Failed to look up the latest ${r} version from the npm registry.${t.stderr?`\n${t.stderr.trim()}`:``}`);if(!i(n))throw new e(`Unexpected version from the npm registry: ${JSON.stringify(n)}`);return n}async function l(n){let i=t(),a=await c(),l=o(i,a),u=l>=0;if(n.check||u){n.json?console.log(JSON.stringify({current:i,latest:a,upToDate:u,updated:!1})):console.log(l>0?`entrydesk ${i} is newer than the latest published version (${a}). Nothing to do.`:u?`entrydesk ${i} is already the latest version.`:`Update available: ${i} → ${a}. Run \`entrydesk update\` to install.`);return}n.json||console.log(`Updating entrydesk ${i} → ${a}…`);let d=await s([`install`,`-g`,`${r}@${a}`],{inheritOutput:!n.json});if(d.exitCode!==0){let t=d.stderr?`\n${d.stderr.trim()}`:``;throw new e(`npm install failed (exit code ${d.exitCode}). You can update manually with \`npm install -g ${r}@latest\`.`+t,d.exitCode)}n.json?console.log(JSON.stringify({current:i,latest:a,upToDate:u,updated:!0})):console.log(`entrydesk updated to ${a}.`)}export{l as runUpdate};
@@ -1,3 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import{b as e,u as t}from"./profile-storage-Dv0xRb8J.js";import{r as n}from"./format-C3tQC6LL.js";import{writeFileSync as r}from"node:fs";function i(e){console.log(`Extra-usage balance: ${n(e.balanceUsd)}`);let t=e.currentSpentUsedPercent==null?``:` (${e.currentSpentUsedPercent}% of limit)`;console.log(`Spent this period: ${n(e.currentSpentUsd)}${t}`),e.monthlyExtraUsageLimitUsd!=null&&console.log(`Workspace limit: ${n(e.monthlyExtraUsageLimitUsd)} / month`),e.memberMonthlyExtraUsageLimitUsd!=null&&console.log(`Per-member limit: ${n(e.memberMonthlyExtraUsageLimitUsd)} / month`),e.nextExpiry&&console.log(`Next expiry: ${n(e.nextExpiry.amountUsd)} at ${new Date(e.nextExpiry.expiresAt).toLocaleString()}`),console.log(`Period: ${new Date(e.period.startAt).toLocaleDateString()} – ${new Date(e.period.endAt).toLocaleDateString()}`)}function a(e){console.log(`Seat type: ${e.seatType}`),e.hourly&&console.log(`Hourly used: ${e.hourly.usedPercent}%`),console.log(`Weekly used: ${e.weekly.usedPercent}%`),console.log(`Extra spent: ${n(e.extraUsage.spentUsd)}`),console.log(`Available: ${e.availability.allowed?`yes`:`no (${e.availability.reason??`unknown`})`}`),e.trial&&console.log(`Trial: ${e.trial.remainingDays} days remaining`)}function o(e){console.log(`Consumptions (${e.items.length} of ${e.total}):\n`);for(let t of e.items)console.log(` ${t.user.name} (${t.user.email})`),console.log(` Seat: ${t.seatType} · Extra usage: ${n(t.extraUsage)}`),console.log(` User ID: ${t.user.id}`),console.log(``)}async function s(n){let{accessToken:r,workspaceId:a}=await t(),o=await new e().getUsageOverview(r,a);if(n.json){console.log(JSON.stringify(o));return}i(o)}async function c(n){let{accessToken:r,workspaceId:i}=await t(),o=await new e().getUsageMe(r,i);if(n.json){console.log(JSON.stringify(o));return}a(o)}async function l(n){let{accessToken:r,workspaceId:i}=await t(),a=await new e().getUsageConsumptions(r,i,{limit:n.limit,offset:n.offset,periodStart:n.periodStart});if(n.json){console.log(JSON.stringify(a));return}if(a.items.length===0){console.log(`No consumptions for this period.`);return}o(a)}async function u(n){let{accessToken:i,workspaceId:a}=await t(),o=await new e().exportUsageCsv(i,a,n.periodStart);if(n.output){r(n.output,o),console.log(`Wrote usage CSV to ${n.output}`);return}process.stdout.write(o)}async function d(n){let{accessToken:r,workspaceId:i}=await t(),a=new e,o=[],s,c=0;do{let e=await a.getMonthlyUsages(r,i,{nextKey:s,limit:100});if(o.push(...e.monthlyUsages),s=e.nextKey,c++,c>=100){console.error(`Warning: Showing first ${o.length} entries (pagination limit reached)`);break}}while(s);if(n.json){console.log(JSON.stringify(o));return}if(o.length===0){console.log(`No usage data found for this workspace.`);return}console.log(`Current month usage:
2
+ var __entrydeskNodeFloor = 24;
3
+ if (parseInt(process.versions.node, 10) < __entrydeskNodeFloor) {
4
+ process.stderr.write(
5
+ 'entrydesk: Node.js ' + __entrydeskNodeFloor + ' or newer is required, but this is Node ' + process.versions.node + '.\n' +
6
+ 'Upgrade Node (https://nodejs.org/en/download), then reinstall @entrydesk/cli.\n'
7
+ );
8
+ process.exit(1);
9
+ }
10
+ import{b as e,u as t}from"./profile-storage-CPg61h-2.js";import{r as n}from"./format-DCvznP70.js";import{writeFileSync as r}from"node:fs";function i(e){console.log(`Extra-usage balance: ${n(e.balanceUsd)}`);let t=e.currentSpentUsedPercent==null?``:` (${e.currentSpentUsedPercent}% of limit)`;console.log(`Spent this period: ${n(e.currentSpentUsd)}${t}`),e.monthlyExtraUsageLimitUsd!=null&&console.log(`Workspace limit: ${n(e.monthlyExtraUsageLimitUsd)} / month`),e.memberMonthlyExtraUsageLimitUsd!=null&&console.log(`Per-member limit: ${n(e.memberMonthlyExtraUsageLimitUsd)} / month`),e.nextExpiry&&console.log(`Next expiry: ${n(e.nextExpiry.amountUsd)} at ${new Date(e.nextExpiry.expiresAt).toLocaleString()}`),console.log(`Period: ${new Date(e.period.startAt).toLocaleDateString()} – ${new Date(e.period.endAt).toLocaleDateString()}`)}function a(e){console.log(`Seat type: ${e.seatType}`),e.hourly&&console.log(`Hourly used: ${e.hourly.usedPercent}%`),console.log(`Weekly used: ${e.weekly.usedPercent}%`),console.log(`Extra spent: ${n(e.extraUsage.spentUsd)}`),console.log(`Available: ${e.availability.allowed?`yes`:`no (${e.availability.reason??`unknown`})`}`),e.trial&&console.log(`Trial: ${e.trial.remainingDays} days remaining`)}function o(e){console.log(`Consumptions (${e.items.length} of ${e.total}):\n`);for(let t of e.items)console.log(` ${t.user.name} (${t.user.email})`),console.log(` Seat: ${t.seatType} · Extra usage: ${n(t.extraUsage)}`),console.log(` User ID: ${t.user.id}`),console.log(``)}async function s(n){let{accessToken:r,workspaceId:a}=await t(),o=await new e().getUsageOverview(r,a);if(n.json){console.log(JSON.stringify(o));return}i(o)}async function c(n){let{accessToken:r,workspaceId:i}=await t(),o=await new e().getUsageMe(r,i);if(n.json){console.log(JSON.stringify(o));return}a(o)}async function l(n){let{accessToken:r,workspaceId:i}=await t(),a=await new e().getUsageConsumptions(r,i,{limit:n.limit,offset:n.offset,periodStart:n.periodStart});if(n.json){console.log(JSON.stringify(a));return}if(a.items.length===0){console.log(`No consumptions for this period.`);return}o(a)}async function u(n){let{accessToken:i,workspaceId:a}=await t(),o=await new e().exportUsageCsv(i,a,n.periodStart);if(n.output){r(n.output,o),console.log(`Wrote usage CSV to ${n.output}`);return}process.stdout.write(o)}async function d(n){let{accessToken:r,workspaceId:i}=await t(),a=new e,o=[],s,c=0;do{let e=await a.getMonthlyUsages(r,i,{nextKey:s,limit:100});if(o.push(...e.monthlyUsages),s=e.nextKey,c++,c>=100){console.error(`Warning: Showing first ${o.length} entries (pagination limit reached)`);break}}while(s);if(n.json){console.log(JSON.stringify(o));return}if(o.length===0){console.log(`No usage data found for this workspace.`);return}console.log(`Current month usage:
3
11
  `);let l=0,u=0;for(let e of o)l+=Number.parseFloat(e.totalCost),u+=e.operationCount;console.log(`Total cost: $${l.toFixed(2)}`),console.log(`Total operations: ${u.toLocaleString()}`),console.log(`Users: ${o.length}\n`);let d=[...o].toSorted((e,t)=>n.sortBy===`cost`?Number.parseFloat(t.totalCost)-Number.parseFloat(e.totalCost):t.operationCount-e.operationCount),f=n.limit??d.length,p=d.slice(0,f);console.log(`Usage by user (sorted by ${n.sortBy}, showing ${p.length} of ${o.length}):\n`);for(let e of p)console.log(` ${e.user.name} (${e.user.email})`),console.log(` Cost: $${Number.parseFloat(e.totalCost).toFixed(2)}`),console.log(` Operations: ${e.operationCount.toLocaleString()}`),console.log(``);p.length<o.length&&console.log(`… and ${o.length-p.length} more users`)}export{u as exportUsage,l as listUsageConsumptions,c as showOwnUsage,s as showUsageBalance,d as showUsageSummary};
@@ -1,4 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import{T as e,Y as t,r as n}from"./profile-storage-Dv0xRb8J.js";import{r}from"./format-C3tQC6LL.js";import{n as i,r as a}from"./mcp-client-DMOEcmul.js";function o(t){return Array.isArray(t)&&e(t.map(e=>typeof e==`object`&&e&&`text`in e?String(e.text):``).filter(Boolean).join(`
2
+ var __entrydeskNodeFloor = 24;
3
+ if (parseInt(process.versions.node, 10) < __entrydeskNodeFloor) {
4
+ process.stderr.write(
5
+ 'entrydesk: Node.js ' + __entrydeskNodeFloor + ' or newer is required, but this is Node ' + process.versions.node + '.\n' +
6
+ 'Upgrade Node (https://nodejs.org/en/download), then reinstall @entrydesk/cli.\n'
7
+ );
8
+ process.exit(1);
9
+ }
10
+ import{T as e,Z as t,r as n}from"./profile-storage-CPg61h-2.js";import{r}from"./format-DCvznP70.js";import{n as i,r as a}from"./mcp-client-EK-Fh8gM.js";function o(t){return Array.isArray(t)&&e(t.map(e=>typeof e==`object`&&e&&`text`in e?String(e.text):``).filter(Boolean).join(`
3
11
  `))||`usage-audit tool call failed`}async function s(e,t,r){let i=await e.callTool({name:t,arguments:r},a());if(i.isError){let e=o(i.content);throw/not found/i.test(e)?new n(`This deployment does not expose the usage-audit tools (${t}). Credit-billed workspaces record spend in a separate ledger — use \`entrydesk usage consumptions\` and \`entrydesk usage balance\` instead.`):new n(e)}if(i.structuredContent==null)throw new n(`${t} returned no structured content; the workspace may not expose the usage-audit tools.`);return i.structuredContent}async function c(e){let t=await i();try{return await e(t)}finally{await t.close().catch(()=>{})}}function l(e){return e.toLocaleString()}function u(e){return e==null?`—`:`${e>0?`+`:``}${e}%`}function d(e){return e?e.slice(0,10):`never`}async function f(e){let n=await c(n=>s(n,t.GET_COST_RANKING,{groupBy:e.by,...e.days!=null&&{windowDays:e.days},...e.model&&{model:e.model},...e.limit!=null&&{limit:e.limit}}));if(e.json){console.log(JSON.stringify(n,null,2));return}let i=n.windowDays==null?`all time`:`last ${n.windowDays} days`,a=e.model?` · model ~ "${e.model}"`:``;if(console.log(`Cost ranking by ${e.by} · ${i}${a}\n`),n.rows.length===0){console.log(` No spend in this window.`);return}let o=Math.max(...n.rows.map(e=>r(e.cost).length));for(let e of n.rows){let t=e.ownerEmail?` · ${e.ownerEmail}`:``;console.log(` ${r(e.cost).padStart(o)} ${u(e.costChangePct).padEnd(7)} ${l(e.calls).padStart(8)} calls ${e.key}${t}`)}console.log(`\n ${n.rows.length} rows.`)}async function p(e,n){let[i,a]=await c(r=>Promise.all([s(r,t.GET_USER_BREAKDOWN,{email:e,sinceDays:n.days,minCost:n.minCost??0}),s(r,t.GET_USER_DAILY_TREND,{emails:[e],days:n.days})]));if(n.json){console.log(JSON.stringify({breakdown:i,trend:a},null,2));return}if(console.log(`${e} · last ${n.days} days\n`),console.log(`By agent / operation:`),i.breakdown.length===0)console.log(` (no spend)`);else{let e=Math.max(...i.breakdown.map(e=>r(e.cost).length));for(let t of i.breakdown)console.log(` ${r(t.cost).padStart(e)} ${l(t.calls).padStart(8)} calls ${t.agentOrOperation}`)}let o=a.trends[0]?.days??[];if(o.length>0){console.log(`
4
12
  Daily:`);for(let e of o)console.log(` ${e.date} ${r(e.cost).padStart(10)} ${l(e.calls).padStart(8)} calls`)}if(i.activeSchedules.length>0){console.log(`\nActive schedules (${i.activeSchedules.length}):`);for(let e of i.activeSchedules){let t=e.agentName?` · ${e.agentName}`:``;console.log(` ${e.name}${t} (${e.scheduleType}, last run ${d(e.lastTaskAt)})`)}}}async function m(e){let{stale:n,toolCalls:i}=await c(async n=>{let r=await s(n,t.FIND_STALE_SCHEDULES,{sinceDays:e.days,...e.minCost!=null&&{minCost:e.minCost},...e.limit!=null&&{limit:e.limit}}),i=r.schedules.map(e=>e.scheduleId),a=[];for(let e=0;e<i.length;e+=20)a.push(i.slice(e,e+20));return{stale:r,toolCalls:{schedules:(await Promise.all(a.map(r=>s(n,t.GET_SCHEDULE_TOOL_CALLS,{scheduleIds:r,sinceDays:e.days,recentRuns:5})))).flatMap(e=>e.schedules)}}});if(e.json){console.log(JSON.stringify({stale:n,toolCalls:i},null,2));return}if(console.log(`Schedules spending with unread output · last ${e.days} days\n`),n.schedules.length===0){console.log(` Nothing flagged.`);return}let a=new Map(i.schedules.map(e=>[e.scheduleId,e.toolCalls]));for(let e of n.schedules){console.log(` ${r(e.cost)} ${l(e.runs)} runs ${e.unreadPct}% unread last read ${d(e.lastReadAt)}`),console.log(` ${e.scheduleName} · ${e.ownerEmail}`);let t=a.get(e.scheduleId)??[];if(t.length===0){console.log(` no tool calls in the last 5 runs — deactivation candidate`);continue}console.log(` tools (last 5 runs): ${t.map(e=>`${e.tool} ${e.calls}`).join(`, `)}`);let n=t.filter(e=>e.failedCalls>0);n.length>0&&console.log(` failing: ${n.map(e=>`${e.tool} ${e.failedCalls}`).join(`, `)} — may be spinning on retries`)}console.log(`\n ${n.schedules.length} schedules.`)}export{p as drillUsage,m as findUsageWaste,f as rankUsage};
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ var __entrydeskNodeFloor = 24;
3
+ if (parseInt(process.versions.node, 10) < __entrydeskNodeFloor) {
4
+ process.stderr.write(
5
+ 'entrydesk: Node.js ' + __entrydeskNodeFloor + ' or newer is required, but this is Node ' + process.versions.node + '.\n' +
6
+ 'Upgrade Node (https://nodejs.org/en/download), then reinstall @entrydesk/cli.\n'
7
+ );
8
+ process.exit(1);
9
+ }
10
+ function e(){return`2.1.0-beta.4`}export{e as t};
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ var __entrydeskNodeFloor = 24;
3
+ if (parseInt(process.versions.node, 10) < __entrydeskNodeFloor) {
4
+ process.stderr.write(
5
+ 'entrydesk: Node.js ' + __entrydeskNodeFloor + ' or newer is required, but this is Node ' + process.versions.node + '.\n' +
6
+ 'Upgrade Node (https://nodejs.org/en/download), then reinstall @entrydesk/cli.\n'
7
+ );
8
+ process.exit(1);
9
+ }
10
+ import{b as e,u as t}from"./profile-storage-CPg61h-2.js";import{t as n}from"./resource-grants-zAoqe73P.js";import{n as r}from"./format-DCvznP70.js";import{t as i}from"./paginate-Brd-j5V8.js";import{readFileSync as a}from"node:fs";import{setTimeout as o}from"node:timers/promises";const s=262144,c=new Set([`completed`,`failed`,`cancelled`]);function l(e){let t;try{t=a(e,`utf8`)}catch{console.error(`Cannot read script file: ${e}`),process.exit(1)}return t.trim().length===0&&(console.error(`Script file is empty: ${e}`),process.exit(1)),Buffer.byteLength(t,`utf8`)>s&&(console.error(`Script file exceeds ${s} bytes.`),process.exit(1)),t}function u(e){console.log(`Workflows (${e.length}):\n`);for(let t of e){let e=t.isActive?`active`:`inactive`;if(console.log(` ${t.name} (${e})`),t.description){let e=t.description.length>80?`${t.description.slice(0,80)}…`:t.description;console.log(` ${e}`)}console.log(` ${t.myRole??`no-role`} · ID: ${t.id}`),console.log(``)}}function d(e,t){console.log(`${e.name}\n`),console.log(` ID: ${e.id}`),console.log(` Active: ${e.isActive}`),console.log(` My role: ${e.myRole??`no-role`}`),e.description&&console.log(` Description: ${e.description}`),console.log(` Updated: ${r(e.updatedAt)}`);let n=e.scriptSource.split(`
11
+ `).length;t?(console.log(`\n Script (${n} lines):\n`),console.log(e.scriptSource)):console.log(` Script: ${n} lines (use --show-source to print)`)}function f(e){console.log(`Runs (${e.length}):\n`);for(let t of e){let e=r(t.startedAt??t.createdAt);console.log(` ${t.status}${e?` · ${e}`:``}`),console.log(` ID: ${t.id}`)}}function p(e){console.log(`Run ${e.id}`),console.log(` Workflow: ${e.workflowId}`),console.log(` Status: ${e.status}`),e.startedAt&&console.log(` Started: ${r(e.startedAt)}`),e.completedAt&&console.log(` Completed: ${r(e.completedAt)}`),e.error!=null&&console.log(` Error: ${JSON.stringify(e.error)}`);let t=Object.entries(e.context?.nodes??{});if(t.length>0){console.log(`\n Nodes (${t.length}):`);for(let[e,n]of t){let t=[n.kind??`node`,n.status];n.durationMs!=null&&t.push(`${n.durationMs}ms`),console.log(` - ${n.label??e} [${t.join(` · `)}]`)}}let n=e.context?.logs??[];if(n.length>0){console.log(`
12
+ Logs:`);for(let e of n)console.log(` ${e}`)}e.context?.spent!=null&&console.log(`\n Tokens spent: ${e.context.spent}`)}async function m(e,t,n,r,i){for(let a=0;a<600;a++){let s=await e.getWorkflowRun(t,n,r,i);if(c.has(s.status))return a>0&&process.stderr.write(`
13
+ `),s;let l=a*2;process.stderr.write(`\rWaiting… ${s.status} (${l}s)`),await o(2e3)}throw process.stderr.write(`
14
+ `),Error(`Run ${i} did not finish within the wait window.`)}function h(e){let t;if(e.argsFile===void 0)t=e.args;else try{t=a(e.argsFile,`utf8`)}catch{console.error(`Cannot read args file: ${e.argsFile}`),process.exit(1)}if(t!==void 0)try{return JSON.parse(t)}catch{console.error(`--args/--args-file must be valid JSON.`),process.exit(1)}}const g="No workflows in this workspace yet. Create one with `entrydesk workflow create --name <name> --file <path.js>`.";async function _(n){let{accessToken:r,workspaceId:a}=await t(),o=new e;if(n.all){let e=await i(async e=>{let t=await o.getWorkflows(r,a,{limit:n.limit??20,nextKey:e,search:n.search});return{items:t.workflows,nextKey:t.nextKey}});if(n.json){console.log(JSON.stringify({workflows:e}));return}if(e.length===0){console.log(g);return}u(e);return}let{workflows:s,nextKey:c}=await o.getWorkflows(r,a,{limit:n.limit,nextKey:n.nextKey,search:n.search});if(n.json){console.log(JSON.stringify({workflows:s,nextKey:c}));return}if(s.length===0){console.log(g);return}u(s),c&&console.log(`Next page: --next-key ${c}`)}async function v(n,r){let{accessToken:i,workspaceId:a}=await t(),o=await new e().getWorkflow(i,a,n);if(r.json){console.log(JSON.stringify(o));return}d(o,!!r.showSource)}async function y(n){let{accessToken:r,workspaceId:i}=await t(),a=await new e().createWorkflow(r,i,{name:n.name,description:n.description,scriptSource:l(n.file)});if(n.json){console.log(JSON.stringify(a));return}console.log(`Created workflow: ${a.name}`),console.log(` ID: ${a.id}`)}async function b(n,r){let i={};r.name!==void 0&&(i.name=r.name),r.description!==void 0&&(i.description=r.description),r.file!==void 0&&(i.scriptSource=l(r.file)),r.activate&&(i.isActive=!0),r.deactivate&&(i.isActive=!1),Object.keys(i).length===0&&(console.error(`No fields provided to update.`),process.exit(1));let{accessToken:a,workspaceId:o}=await t();if(await new e().updateWorkflow(a,o,n,i),r.json){console.log(JSON.stringify({id:n,updated:!0}));return}console.log(`Updated workflow: ${n}`)}async function x(n,r){let i=h(r),{accessToken:a,workspaceId:o}=await t(),s=new e,{runId:c}=await s.triggerWorkflowRun(a,o,n,i);if(!r.wait){if(r.json){console.log(JSON.stringify({runId:c}));return}console.log(`Started run: ${c}`),console.log(` Check: entrydesk workflow run-get ${n} ${c}`);return}let l=await m(s,a,o,n,c);r.json?console.log(JSON.stringify(l)):p(l),l.status!==`completed`&&process.exit(1)}async function S(n,r){let{accessToken:a,workspaceId:o}=await t(),s=new e;if(r.all){let e=await i(async e=>{let t=await s.getWorkflowRuns(a,o,n,{limit:r.limit??20,nextKey:e});return{items:t.runs,nextKey:t.nextKey}});if(r.json){console.log(JSON.stringify({runs:e}));return}if(e.length===0){console.log(`No runs for this workflow.`);return}f(e);return}let{runs:c,nextKey:l}=await s.getWorkflowRuns(a,o,n,{limit:r.limit,nextKey:r.nextKey});if(r.json){console.log(JSON.stringify({runs:c,nextKey:l}));return}if(c.length===0){console.log(`No runs for this workflow.`);return}f(c),l&&console.log(`Next page: --next-key ${l}`)}async function C(n,r,i){let{accessToken:a,workspaceId:o}=await t(),s=await new e().getWorkflowRun(a,o,n,r);if(i.json){console.log(JSON.stringify(s));return}p(s)}async function w(r,i){let{accessToken:a,workspaceId:o}=await t(),s=new e;if(i.addUser){let e=await s.upsertWorkflowGrant(a,o,r,i.addUser,i.role);if(i.json){console.log(JSON.stringify(e));return}console.log(`Granted ${i.role} to user ${i.addUser}`);return}if(i.removeUser){if(await s.removeWorkflowGrant(a,o,r,i.removeUser),i.json){console.log(JSON.stringify({userId:i.removeUser,removed:!0}));return}console.log(`Revoked access for user ${i.removeUser}`);return}let c=await s.getWorkflowGrants(a,o,r);if(i.json){console.log(JSON.stringify(c));return}n(c)}export{y as createWorkflow,S as listWorkflowRuns,_ as listWorkflows,w as shareWorkflow,v as showWorkflow,C as showWorkflowRun,x as triggerWorkflowRun,b as updateWorkflow};
@@ -1,3 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import{C as e,b as t,l as n}from"./profile-storage-Dv0xRb8J.js";async function r(r){let i=await e.getAll(),a=await n(),{workspaces:o}=await new t().getWorkspaces(a);if(r.json){console.log(JSON.stringify(o));return}if(o.length===0){console.log(`No workspaces found.`);return}console.log(`Workspaces (${o.length}):\n`);for(let e of o){let t=e.id===i?.workspaceId?` (current)`:``;console.log(` ${e.name}${t}`),console.log(` ID: ${e.id}`),console.log(``)}}async function i(r,i){let a=await n(),{workspaces:o}=await new t().getWorkspaces(a),s=o.find(e=>e.id===r);if(!s){console.error(`Workspace not found: ${r}`),console.error(`
2
+ var __entrydeskNodeFloor = 24;
3
+ if (parseInt(process.versions.node, 10) < __entrydeskNodeFloor) {
4
+ process.stderr.write(
5
+ 'entrydesk: Node.js ' + __entrydeskNodeFloor + ' or newer is required, but this is Node ' + process.versions.node + '.\n' +
6
+ 'Upgrade Node (https://nodejs.org/en/download), then reinstall @entrydesk/cli.\n'
7
+ );
8
+ process.exit(1);
9
+ }
10
+ import{C as e,b as t,l as n}from"./profile-storage-CPg61h-2.js";async function r(r){let i=await e.getAll(),a=await n(),{workspaces:o}=await new t().getWorkspaces(a);if(r.json){console.log(JSON.stringify(o));return}if(o.length===0){console.log(`No workspaces found.`);return}console.log(`Workspaces (${o.length}):\n`);for(let e of o){let t=e.id===i?.workspaceId?` (current)`:``;console.log(` ${e.name}${t}`),console.log(` ID: ${e.id}`),console.log(``)}}async function i(r,i){let a=await n(),{workspaces:o}=await new t().getWorkspaces(a),s=o.find(e=>e.id===r);if(!s){console.error(`Workspace not found: ${r}`),console.error(`
3
11
  Available workspaces:`);for(let e of o)console.error(` ${e.name}: ${e.id}`);process.exit(1)}if(await e.saveWorkspaceId(r),i.json){console.log(JSON.stringify({workspaceId:r,workspaceName:s.name}));return}console.log(`Switched to workspace: ${s.name}`),console.log(` ID: ${r}`)}export{r as listWorkspaces,i as switchWorkspace};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@entrydesk/cli",
3
- "version": "2.1.0-beta.1",
3
+ "version": "2.1.0-beta.4",
4
4
  "description": "EntryDesk CLI - Interact with EntryDesk from your terminal",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,13 +11,14 @@
11
11
  "README.md"
12
12
  ],
13
13
  "dependencies": {
14
- "@ai-sdk/react": "^4.0.94",
14
+ "@ai-sdk/react": "^4.0.105",
15
15
  "@commander-js/extra-typings": "^15.0.0",
16
16
  "@modelcontextprotocol/client": "^2.0.0",
17
17
  "@modelcontextprotocol/node": "^2.0.0",
18
18
  "@modelcontextprotocol/server": "^2.0.0",
19
+ "@vscode/ripgrep": "1.18.0",
19
20
  "adm-zip": "^0.6.0",
20
- "ai": "^7.0.91",
21
+ "ai": "^7.0.102",
21
22
  "archiver": "^7.0.1",
22
23
  "commander": "^15.0.0",
23
24
  "cross-spawn": "^7.0.6",
@@ -26,7 +27,7 @@
26
27
  "ink-spinner": "^5.0.0",
27
28
  "jose": "^6.2.3",
28
29
  "ky": "^2.0.2",
29
- "react": "^19.2.8",
30
+ "react": "^19.3.0",
30
31
  "uuid": "^14.0.0"
31
32
  },
32
33
  "devDependencies": {
@@ -41,12 +42,12 @@
41
42
  "@types/cross-spawn": "^6.0.6",
42
43
  "@types/filename-reserved-regex": "^3.0.0",
43
44
  "@types/node": "^24.12.4",
44
- "@types/react": "^19.2.17",
45
+ "@types/react": "^19.3.0",
45
46
  "@vitejs/plugin-react": "^6.0.3",
46
47
  "@vitest/coverage-v8": "^4.1.6",
47
48
  "babel-plugin-react-compiler": "^1.0.0",
48
49
  "happy-dom": "^20.8.9",
49
- "oxlint": "^1.81.0",
50
+ "oxlint": "^1.83.0",
50
51
  "tsdown": "^0.22.14",
51
52
  "typescript": "^7.0.2",
52
53
  "vitest": "^4.1.8"
@@ -54,11 +55,14 @@
54
55
  "optionalDependencies": {
55
56
  "keytar": "^7.9.0"
56
57
  },
58
+ "engines": {
59
+ "node": ">=24"
60
+ },
57
61
  "publishConfig": {
58
62
  "access": "public"
59
63
  },
60
64
  "scripts": {
61
- "build": "tsdown",
65
+ "build": "tsdown && node scripts/assert-node-floor.mjs",
62
66
  "dev": "tsdown --watch",
63
67
  "lint": "oxlint --type-aware --type-check .",
64
68
  "start": "node dist/index.js",
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{At as e,Dt as t,F as n,b as r,it as i,jt as a,u as o}from"./profile-storage-Dv0xRb8J.js";function s(e){return e?a([...new Set(e)]):t}function c(e){console.log(`Available agents (${e.length}):\n`);for(let t of e){if(console.log(` ${t.name} (${t.visibility})`),t.description){let e=t.description.length>80?`${t.description.slice(0,80)}…`:t.description;console.log(` ${e}`)}console.log(` ID: ${t.id}`),console.log(``)}}function l(e){console.log(`My agents (${e.length}):\n`);for(let t of e){let e=[];t.latestVersionNumber!=null&&e.push(`v${t.latestVersionNumber}`),t.hasUnpublishedChanges&&e.push(`unpublished changes`);let n=e.length>0?` (${e.join(` · `)})`:``;if(console.log(` ${t.name}${n}`),t.description){let e=t.description.length>80?`${t.description.slice(0,80)}…`:t.description;console.log(` ${e}`)}console.log(` ${t.myRole??`no-role`} · ID: ${t.id}`),console.log(``)}}function u(t){if(console.log(`${t.name}\n`),console.log(` ID: ${t.id}`),t.visibility&&console.log(` Visibility: ${t.visibility}`),t.model&&console.log(` Model: ${t.model.name}`),t.author&&console.log(` Author: ${t.author.name}${t.author.isMe?` (you)`:``}`),t.description&&console.log(` Description: ${t.description}`),t.capabilities){let n=e(t.capabilities).map(e=>i(e));n.length>0&&console.log(` Capabilities: ${n.join(`, `)}`)}t.connectors&&t.connectors.length>0&&console.log(` Connectors: ${t.connectors.map(e=>e.name).join(`, `)}`),t.tools&&t.tools.length>0&&console.log(` Tools: ${t.tools.length}`),t.conversationStarters&&t.conversationStarters.length>0&&console.log(` Starters: ${t.conversationStarters.length}`),t.systemPrompt&&console.log(`\n System prompt:\n${t.systemPrompt}`)}function d(e){let t=n(e);if(console.log(`User grants (${t.length}):`),t.length===0){console.log(` (none)`);return}for(let e of t)console.log(` - ${e.user.name} <${e.user.email}> · ${e.role}`),console.log(` ID: ${e.userId}`)}async function f(e){let{accessToken:t,workspaceId:n}=await o(),i=new r;if(e.mine){let r=[],a=e.all?void 0:e.nextKey;for(let o=0;;o++){o>=100&&(console.error(`Reached maximum page limit (100). Use --limit and --next-key for manual pagination.`),process.exit(1));let s=await i.getMyAgents(t,n,{limit:e.limit,nextKey:a});if(r.push(...s.agents),a=s.nextKey,!e.all||!a)break}if(e.json){console.log(JSON.stringify({agents:r,nextKey:a}));return}if(r.length===0){console.log("You own no agents in this workspace. Create one with `entrydesk agents create --name <name> …`, or browse `entrydesk marketplace`.");return}l(r),!e.all&&a&&console.log(`Next page: --next-key ${a}`);return}if(e.all){let r=[],a;for(let o=0;;o++){o>=100&&(console.error(`Reached maximum page limit (100). Use --limit and --next-key for manual pagination.`),process.exit(1));let s=await i.getAgents(t,n,{limit:e.limit??100,nextKey:a});if(r.push(...s.agents),a=s.nextKey,!a)break}if(e.json){console.log(JSON.stringify({agents:r}));return}if(r.length===0){console.log("No agents in this workspace yet. Create one with `entrydesk agents create`, or browse `entrydesk marketplace`.");return}c(r);return}let{agents:a,nextKey:s}=await i.getAgents(t,n,{limit:e.limit,nextKey:e.nextKey});if(e.json){console.log(JSON.stringify({agents:a,nextKey:s}));return}if(a.length===0){console.log("No agents in this workspace yet. Create one with `entrydesk agents create`, or browse `entrydesk marketplace`.");return}c(a),s&&console.log(`Next page: --next-key ${s}`)}async function p(e,t){let{accessToken:n,workspaceId:i}=await o(),a=await new r().getAgent(n,i,e);if(t.json){console.log(JSON.stringify(a));return}u(a)}async function m(e){let{accessToken:t,workspaceId:n}=await o(),i=await new r().createAgent(t,n,{name:e.name,description:e.description,systemPrompt:e.systemPrompt,modelId:e.modelId,connectorIds:e.connectorIds??[],capabilities:s(e.capabilities),conversationStarters:e.conversationStarters??[],tools:e.tools,iconId:e.iconId});if(e.json){console.log(JSON.stringify(i));return}console.log(`Created agent: ${i.name}`),console.log(` ID: ${i.id}`)}async function h(e,t){let{accessToken:n,workspaceId:i}=await o(),a=new r,c=await a.getAgent(n,i,e),l={name:t.name??c.name,description:t.description??c.description,systemPrompt:t.systemPrompt??c.systemPrompt??``,modelId:t.modelId??c.model?.id??``,connectorIds:t.connectorIds??c.connectors?.map(e=>e.id)??[],capabilities:t.capabilities?s(t.capabilities):c.capabilities??{},conversationStarters:t.conversationStarters??c.conversationStarters??[],tools:t.tools??c.tools??[],iconId:t.iconId??c.iconId};await a.updateAgent(n,i,e,l),console.log(`Updated agent: ${e}`)}async function g(e){let{accessToken:t,workspaceId:n}=await o();await new r().deleteAgent(t,n,e),console.log(`Deleted agent: ${e}`)}async function _(e,t){let{accessToken:n,workspaceId:i}=await o();if(await new r().publishAgent(n,i,e),t.json){console.log(JSON.stringify({id:e,published:!0}));return}console.log(`Published agent to the workspace: ${e}`)}async function v(e,t){let{accessToken:n,workspaceId:i}=await o(),a=new r;if(t.addUser){let r=await a.upsertAgentGrant(n,i,e,t.addUser,t.role);if(t.json){console.log(JSON.stringify(r));return}console.log(`Granted ${t.role} to user ${t.addUser}`);return}if(t.removeUser){if(await a.removeAgentGrant(n,i,e,t.removeUser),t.json){console.log(JSON.stringify({userId:t.removeUser,removed:!0}));return}console.log(`Revoked access for user ${t.removeUser}`);return}let s=await a.getAgentGrants(n,i,e);if(t.json){console.log(JSON.stringify(s));return}d(s)}export{m as createAgent,g as deleteAgent,f as listAgents,_ as publishAgent,v as shareAgent,p as showAgent,h as updateAgent};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{nt as e,ot as t,rt as n,st as r}from"./profile-storage-Dv0xRb8J.js";function i({allowedTools:e,disallowedTools:n}){if(!(!e?.length&&!n?.length))return[...r(e?.map(e=>({toolName:e,policy:t.ALWAYS_ALLOW})),n?.map(e=>({toolName:e,policy:t.BLOCK})))].map(([e,t])=>({toolName:e,policy:t}))}function a({agentId:t,model:r,projectId:i,connectorIds:a,clientTools:o,clientToolSystemPrompt:s,toolApprovalMode:c,toolPolicies:l}){return{...i?{projectId:i}:{},...t?{agentId:t}:{...r?{model:r}:{},...a?.length?{connectorIds:a}:{}},...o?{clientTools:n(o,e.DIRECT)}:{},...s?{clientToolSystemPrompt:s}:{},...c?{toolApprovalMode:c}:{},...l?.length?{toolPolicies:l}:{}}}export{i as n,a as t};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{r as e}from"./commands-3Yqb38G_.js";export{e as runSkillsUnlink};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{createInterface as e}from"node:readline/promises";async function t(t){let n=e({input:process.stdin,output:process.stdout});try{let e=await n.question(`${t} [y/N] `);return/^y(es)?$/i.test(e.trim())}finally{n.close()}}export{t};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import{Et as e,K as t,U as n,V as r,b as i,q as a,u as o}from"./profile-storage-Dv0xRb8J.js";import{t as s}from"./confirm-BrJZbaxf.js";function c(e,n){return n?t(n)?`Next: entrydesk connectors connect ${e} --oauth`:n===`credentials`?`Next: entrydesk connectors connect ${e} --username <username> --password <password>`:`Next: entrydesk connectors connect ${e} --token <token>`:`This connector needs no authorization — there is no connect step.`}async function l(e){let{accessToken:t,workspaceId:n}=await o(),{connectors:r,nextKey:a}=await new i().getConnectors(t,n,{connectionStatus:e.all?`all`:`connected`,search:e.search,limit:e.limit,nextKey:e.nextKey});if(e.json){console.log(JSON.stringify({connectors:r,nextKey:a}));return}if(r.length===0){console.log(e.all?`No connectors found.`:`No connected connectors. Use --all to browse connectable ones.`);return}let s=e.all?`Connectors`:`Connected connectors`;console.log(`${s} (${r.length}):\n`);for(let e of r){let t=e.connected?`connected`:`not connected`;console.log(` ${e.name} (${t})`),console.log(` Provider: ${e.provider}`),console.log(` ID: ${e.id}`),e.authorization?.type&&console.log(` Auth: ${e.authorization.type}`),console.log(``)}a&&console.log(`More results: --next-key ${a}`)}async function u(e,t){let{accessToken:n,workspaceId:r}=await o(),{tools:a}=await new i().getConnectorTools(n,r,e);if(t.json){console.log(JSON.stringify({tools:a}));return}if(a.length===0){console.log(`This connector exposes no tools.`);return}console.log(`Tools (${a.length}):\n`);for(let e of a)console.log(` ${e.name} [${e.policy}]`),e.description&&console.log(` ${e.description}`)}async function d(e,t){let{accessToken:n,workspaceId:r}=await o(),a=new i;if(t.oauth){let{url:i}=await a.getConnectorAuthUrl(n,r,e);if(t.json){console.log(JSON.stringify({url:i}));return}console.log(`Open this URL in your browser to authorize the connector:`),console.log(` ${i}`),console.log(`
3
- After you approve, the connection is saved automatically — re-run`),console.log("`entrydesk connectors` to confirm it shows as connected.");return}let s;t.token?s={token:t.token}:t.username&&t.password?s={username:t.username,password:t.password}:(console.error(`Provide --token, or --username and --password, or --oauth to connect.`),process.exit(1)),await a.connectConnectorToken(n,r,e,s),console.log(t.json?JSON.stringify({id:e,connected:!0}):`Connected connector ${e}.`)}async function f(t){let s=t.auth===`oauth`||t.auth===`google-iap`;s&&(!t.provider||!t.scope?.length)&&(console.error(`--auth ${t.auth} needs --provider and at least one --scope.`),process.exit(1)),!s&&(t.provider||t.scope?.length)&&(console.error(t.auth?`--provider and --scope apply only to --auth oauth and --auth google-iap, not --auth ${t.auth}.`:`--provider and --scope need --auth oauth or --auth google-iap.`),process.exit(1));let l=t.toolPrefix??a(t.name),u=n(l);if(u){let e=r[u];console.error(t.toolPrefix?`--tool-prefix ${e}.`:`The tool prefix derived from --name ("${l}") ${e}. Pass --tool-prefix explicitly.`),process.exit(1)}let{accessToken:d,workspaceId:f}=await o(),p=t.auth?{type:t.auth,...t.provider?{provider:t.provider}:{},...t.scope?.length?{scopes:t.scope}:{}}:void 0,m=await new i().createCustomConnector(d,f,{type:e.CUSTOM_REMOTE_URL,name:t.name,description:t.description,transport:t.transport,url:t.url,toolPrefix:l,...p?{authorization:p}:{}});if(t.json){console.log(JSON.stringify(m));return}console.log(`Created connector ${m.name}.`),console.log(` ID: ${m.id}`),console.log(` URL: ${m.url}`),console.log(` Tool prefix: ${m.toolPrefix}`),console.log(`\n${c(m.id,t.auth)}`)}async function p(e,t){let{accessToken:n,workspaceId:r}=await o();if(!t.yes&&(process.stdin.isTTY||(console.error(`Disconnecting connector ${e} needs confirmation. Re-run with --yes.`),process.exit(1)),!await s(`Disconnect connector ${e}?`))){console.log(`Aborted.`);return}await new i().disconnectConnector(n,r,e),console.log(t.json?JSON.stringify({id:e,disconnected:!0}):`Disconnected connector ${e}.`)}export{d as connectConnector,f as createConnector,p as disconnectConnector,u as listConnectorTools,l as listConnectors};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{T as e,vt as t}from"./profile-storage-Dv0xRb8J.js";import{o as n}from"./resolve-f238uD6C.js";import{t as r}from"./stdin-DzzLUF6W.js";import{readFileSync as i}from"node:fs";async function a(t,a){if(t===`-`)return r();try{return i(t,`utf8`)}catch{throw new n(`${a}_file_unreadable`,`Cannot read ${a} file: ${e(t)}`)}}async function o(e){let r=e.instructionFile===void 0?e.instruction:await a(e.instructionFile,`instruction`);if(r!==void 0&&r.length>1e4)throw new n(`project_field_too_long`,`Instruction is too long: the maximum is ${t} characters.`);return r}export{o as n,a as t};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{C as e,b as t,p as n}from"./profile-storage-Dv0xRb8J.js";async function r(){let r=await e.getAll();if(!r){console.log(`Not logged in.`);return}try{r.refreshToken&&await new t().revokeOAuthToken({token:r.refreshToken,clientId:n})}catch{}await e.clear(),console.log(`Logged out.`)}export{r as runLogout};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- const e=[`mine`,`shared`,`all`],t=[`updated_at`,`start_time`],n="the UUID `entrydesk tasks --json` prints",r=[`no-repeat`,`minutes`,`hours`,`days`,`weeks`,`months`],i=[`stream-json`],a=[`cost`,`operations`],o=[`user`,`agent`,`schedule`,`model`];export{n as a,i,t as n,o,r,a as s,e as t};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{r as e}from"./profile-storage-Dv0xRb8J.js";async function t(t){let n=[],r;for(let i=0;;i++){if(i>=100)throw new e(`Reached maximum page limit (100). Use --limit and --next-key for manual pagination.`);let a=await t(r);if(n.push(...a.items),r=a.nextKey,!r)return n}}export{t};