@entrydesk/cli 1.32.0-beta → 2.0.0-beta
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/README.md +148 -9
- package/dist/add-Cu0kBobt.js +2 -0
- package/dist/agents--2Fw5-et.js +2 -0
- package/dist/billing-B96487c6.js +2 -0
- package/dist/budget-DhX2gt5z.js +2 -0
- package/dist/commands-C1wX8XQY.js +2 -0
- package/dist/commands-DbXuQqse.js +2 -0
- package/dist/config-eCQwQAt1.js +3 -0
- package/dist/confirm-BrJZbaxf.js +2 -0
- package/dist/connectors-DGmZ4zTG.js +3 -0
- package/dist/hash-Ddmw8YE4.js +2 -0
- package/dist/index.js +49 -1
- package/dist/installer-iaoPJQn3.js +2 -0
- package/dist/login-IvudGta0.js +2 -0
- package/dist/logout-Bjmk9YUh.js +2 -0
- package/dist/marketplace-BPY5cD0d.js +4 -0
- package/dist/mcp-client-Cr_sHGPw.js +2 -0
- package/dist/mcp-ydzvH8kz.js +3 -0
- package/dist/meeting-BDhBTbm3.js +3 -0
- package/dist/models-BFnezI1c.js +2 -0
- package/dist/notifications-4bo-vcIW.js +2 -0
- package/dist/paths-BAZ2NsXN.js +2 -0
- package/dist/profile-BZo9STO2.js +2 -0
- package/dist/profile-storage-mtd3aKrx.js +72 -0
- package/dist/push-Mb0Xb42_.js +2 -0
- package/dist/recordings-D9jnWpxs.js +3 -0
- package/dist/remote-nEFOyIM2.js +2 -0
- package/dist/remove-CJiRVixg.js +2 -0
- package/dist/rolldown-runtime-CIdiawuB.js +2 -0
- package/dist/schedules-BFoirR6r.js +21 -0
- package/dist/skills-DYS1EQMn.js +2 -0
- package/dist/status-BgIfKAmr.js +2 -0
- package/dist/status-DzGv21m4.js +2 -0
- package/dist/task-Db4UcJ6G.js +115 -0
- package/dist/tasks-Dd-GdHfu.js +14 -0
- package/dist/tool-B6W8erW6.js +5 -0
- package/dist/update-CYieYkZl.js +2 -0
- package/dist/usage-BLdNvuse.js +3 -0
- package/dist/version-Cos6L15W.js +2 -0
- package/dist/workflow-DlQtL_J-.js +6 -0
- package/dist/workspaces-IAJitqaO.js +3 -0
- package/package.json +15 -10
- package/dist/agents-6VHSTGVU.js +0 -43
- package/dist/billing-WA7WGH7U.js +0 -24
- package/dist/budget-PC4EAZLV.js +0 -12
- package/dist/chunk-5QJUAR4K.js +0 -120
- package/dist/chunk-77D346VR.js +0 -2
- package/dist/chunk-JMYSCKCF.js +0 -2
- package/dist/chunk-YBS4DYFH.js +0 -2
- package/dist/config-ED6PZQ7J.js +0 -4
- package/dist/config-help-CTZHKILN.js +0 -2
- package/dist/connectors-O4K2ZFDM.js +0 -39
- package/dist/help-KDHCFJNF.js +0 -4
- package/dist/login-LX3ISJEI.js +0 -2
- package/dist/logout-YNCDJ5ST.js +0 -2
- package/dist/marketplace-FHSTOAWV.js +0 -38
- package/dist/mcp-2G4B3BVK.js +0 -4
- package/dist/meeting-UBBSEEHT.js +0 -68
- package/dist/models-PGGTDNI4.js +0 -3
- package/dist/notifications-DHPLCJFY.js +0 -28
- package/dist/profile-K4V2Y63H.js +0 -17
- package/dist/recordings-OXG66QN2.js +0 -42
- package/dist/schedules-R4U37II4.js +0 -66
- package/dist/skills-JVSRQSKA.js +0 -30
- package/dist/status-S37SXIYD.js +0 -2
- package/dist/task-H2COR6Z4.js +0 -180
- package/dist/tasks-7NS4UOBP.js +0 -41
- package/dist/tool-VLJFDXQ4.js +0 -35
- package/dist/update-5GLLNVRU.js +0 -4
- package/dist/usage-PAL5KJ5C.js +0 -29
- package/dist/version-ROABNJFL.js +0 -2
- package/dist/workflow-XERZYR3S.js +0 -62
- package/dist/workspaces-PLJMIDJR.js +0 -14
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{f as e,h as t,n,p as r,r as i}from"./paths-BAZ2NsXN.js";import{t as a}from"./hash-Ddmw8YE4.js";import{t as o}from"./remote-nEFOyIM2.js";import s from"node:fs";import c from"node:os";import l from"node:path";import u from"archiver";function d(e){return typeof e!=`object`||!e?!1:e.response?.status===404||/\b404\b/u.test(e.message??``)}function f(e){return e.remoteHash===null?`create`:e.currentHash===e.baseHash?`noop`:!e.force&&e.remoteHash!==e.lastPulledHash?`stale`:`push`}function p(e){return new Promise((t,n)=>{let r=[],i=u(`zip`,{zlib:{level:9}});i.on(`data`,e=>r.push(e)),i.on(`error`,n),i.on(`end`,()=>t(Buffer.concat(r))),i.directory(e,!1),i.finalize()})}async function m(e,t){let{url:n}=await e.client.downloadSkillCurrent(e.accessToken,e.workspaceId,t),r=await fetch(n);if(!r.ok)throw Error(`download for staleness check failed: ${r.status}`);let i=s.mkdtempSync(l.join(c.tmpdir(),`ed-push-cmp-`));try{let{default:e}=await import(`adm-zip`);for(let t of new e(Buffer.from(await r.arrayBuffer())).getEntries()){if(t.isDirectory)continue;let e=l.resolve(i,t.entryName);e.startsWith(l.resolve(i)+l.sep)&&(s.mkdirSync(l.dirname(e),{recursive:!0}),s.writeFileSync(e,t.getData()))}return a(i)}finally{s.rmSync(i,{recursive:!0,force:!0})}}async function h(e,n,r,i,a,o,s){let c=await p(i),l=new FormData;l.append(`file`,new Blob([c],{type:`application/zip`}),`${r}.zip`),s&&l.append(`force`,`true`);let u=await e.client.uploadSkill(e.accessToken,e.workspaceId,l);t(n,r,{...o,skillId:u.id,localHash:a,lastPulledHash:a})}async function g(e,t,r,i,c){let l=n(t,r);if(!s.existsSync(l))throw Error(`No local copy for ${r}`);let u=a(l);if(i.skillId){let n=null;try{n=await m(e,i.skillId)}catch(e){if(!d(e))throw e}if(n!==null){let a=f({currentHash:u,baseHash:i.localHash,lastPulledHash:i.lastPulledHash,remoteHash:n,force:c});return a===`noop`||a===`stale`||await h(e,t,r,l,u,i,!0),a}}let p=(await o(e.client,e.accessToken,e.workspaceId)).find(e=>e.name===r);return p&&!c?`name-conflict`:(await h(e,t,r,l,u,i,!!p),`create`)}async function _(t,n,a){let{rootDir:o,workspaceId:s}=i(!!n.global,a.workspaceId),c={...a,workspaceId:s},l=!!n.force,u=t?[t]:Object.keys(r(o).skills);if(u.length===0){console.info(`Nothing to push — no tracked skills.`);return}let d=!1;for(let t of u){let n=e(o,t);if(!n){console.info(`✗ ${t}: not tracked (run: entrydesk skills add <source>)`),d=!0;continue}let r=await g(c,o,t,n,l),i={create:`✓ pushed ${t} (created in workspace)`,push:`✓ pushed ${t}`,noop:`· ${t} unchanged`,stale:`✗ ${t} rejected — remote changed since last pull. Run 'entrydesk skills pull ${t}' first (or --force).`,"name-conflict":`✗ ${t} rejected — a different skill named "${t}" already exists in the workspace. Pull it first, or --force to overwrite.`};console.info(i[r]),(r===`stale`||r===`name-conflict`)&&(d=!0)}d&&(process.exitCode=1)}export{_ as runSkillsPush};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{b as e,l as t}from"./profile-storage-mtd3aKrx.js";import{t as n}from"./confirm-BrJZbaxf.js";function r(e){if(e==null)return`—`;let t=Math.round(e),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=String(r).padStart(2,`0`),o=String(i).padStart(2,`0`);return n>0?`${n}:${a}:${o}`:`${r}:${o}`}async function i(n){let{accessToken:i,workspaceId:a}=await t(),{recordings:o,nextKey:s}=await new e().listRecordings(i,a,{limit:n.limit,nextKey:n.nextKey,search:n.search});if(n.json){console.log(JSON.stringify({recordings:o,nextKey:s}));return}if(o.length===0){console.log("No recordings yet. Import one with `entrydesk recordings import <url>`.");return}console.log(`Recordings (${o.length}):\n`);for(let e of o){let t=e.processingStatus??`ready`;console.log(` ${e.title}`),console.log(` ID: ${e.id}`),console.log(` ${r(e.duration)} · ${t}${e.source?` · ${e.source}`:``}`),console.log(``)}s&&console.log(`More results: --next-key ${s}`)}async function a(n,i){let{accessToken:a,workspaceId:o}=await t(),s=await new e().getRecording(a,o,n);if(i.json){console.log(JSON.stringify(s));return}if(console.log(s.title),console.log(`ID: ${s.id}`),console.log(`Status: ${s.processingStatus??`ready`}`),console.log(`Duration: ${r(s.duration)}`),s.recordedAt&&console.log(`Recorded: ${s.recordedAt}`),s.summary&&console.log(`\nSummary:\n${s.summary}`),s.actionItems&&s.actionItems.length>0){console.log(`
|
|
3
|
+
Action items:`);for(let e of s.actionItems)console.log(` - ${e.description}`)}s.transcript&&console.log(`\nTranscript available — view with: entrydesk meeting transcript ${s.id}`)}async function o(n,r){let{accessToken:i,workspaceId:a}=await t(),o=await new e().importRecordingMedia(i,a,{url:n,title:r.title,modelId:r.model,preferredLanguage:r.language});if(r.json){console.log(JSON.stringify(o));return}console.log(`Importing ${o.source} recording.`),console.log(` Recording ID: ${o.recordingId}`),console.log(` ${o.message}`),console.log(` Check status: entrydesk recordings get ${o.recordingId}`)}async function s(n,i){let{accessToken:a,workspaceId:o}=await t(),s=await new e().previewRecordingMedia(a,o,n);if(i.json){console.log(JSON.stringify(s));return}console.log(`${s.title} [${s.type}]`),s.channelName&&console.log(`Channel: ${s.channelName}`),s.duration!=null&&console.log(`Duration: ${r(s.duration)}`),s.contentType&&console.log(`Type: ${s.contentType}`)}async function c(n,r){let{accessToken:i,workspaceId:a}=await t(),o=await new e().getRecordingAudioUrl(i,a,n);if(r.json){console.log(JSON.stringify(o));return}console.log(`Stream: ${o.url}`),console.log(`Download: ${o.downloadUrl}`)}async function l(n,r){let{accessToken:i,workspaceId:a}=await t(),o=await new e().retryRecording(i,a,n);if(r.json){console.log(JSON.stringify(o));return}console.log(o.message)}async function u(r,i){let{accessToken:a,workspaceId:o}=await t();if(!i.yes&&(process.stdin.isTTY||(console.error(`Deleting recording ${r} needs confirmation. Re-run with --yes.`),process.exit(1)),!await n(`Delete recording ${r}? This can't be undone from the CLI.`))){console.log(`Aborted.`);return}if(await new e().deleteRecording(a,o,r),i.json){console.log(JSON.stringify({id:r,deleted:!0}));return}console.log(`Deleted recording ${r}.`)}export{u as deleteRecording,o as importRecording,i as listRecordings,s as previewRecording,l as retryRecording,a as showRecording,c as showRecordingAudioUrl};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{f as e,m as t,n,r,t as i}from"./paths-BAZ2NsXN.js";import{a,i as o,n as s,t as c}from"./installer-iaoPJQn3.js";import l from"node:fs";import u from"node:path";function d(e,t,n,r){let i=[],a=[];for(let d of c){let c=u.join(s(d,t),e);try{l.lstatSync(c)}catch{continue}r||o(c,n)?i.push(d.id):a.push(d.id)}return{removable:i,preserved:a}}async function f(o,u,f){i(o);let{rootDir:p,workspaceId:m}=r(!!u.global,f.workspaceId),h=e(p,o),g=n(p,o),_=l.existsSync(g),v=!!h||_,{removable:y,preserved:b}=d(o,p,g,v);if(!(v||y.length>0)&&!(u.remote&&h?.skillId)){b.length>0?console.info(`Left ${o} untouched in ${b.join(`, `)} — not EntryDesk-managed; remove it manually if intended.`):console.info(`Nothing to remove — ${o} is not installed.`);return}let x=!1;u.remote&&(h?.skillId?(await f.client.deleteSkill(f.accessToken,m,h.skillId),x=!0):console.info(`· skipped --remote: no known workspace skillId for ${o} (it was never pushed from here).`));for(let e of c)y.includes(e.id)&&a(s(e,p),o);_&&l.rmSync(g,{recursive:!0,force:!0}),t(p,o);let S={name:o,canonicalRemoved:_,agentsUnlinked:y,agentsPreserved:b,untracked:!h,remoteDeleted:x};if(u.json){console.info(JSON.stringify(S,null,2));return}let C=y.length>0?` (agents: ${y.join(`, `)})`:``,w=b.length>0?` — kept non-managed entries in ${b.join(`, `)}`:``;console.info(`✓ removed ${o}${C}${x?` + deleted from workspace`:``}${w}`)}export{f as runSkillsRemove};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));export{c as n,o as t};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{b as e,l as t,m as n}from"./profile-storage-mtd3aKrx.js";function r(e){return`${String(e.hour).padStart(2,`0`)}:${String(e.minute).padStart(2,`0`)}`}const i=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`];function a(e){return e?.length?` (windows: ${e.map(e=>`${r(e.start)}-${r(e.end)}`).join(`, `)})`:``}function o(e){return e?.length?` [days: ${e.map(e=>i[e]).join(`, `)}]`:``}function s(e){if(e.type===`no-repeat`)return`No repeat`;let{interval:t}=e;switch(t.unit){case`minutes`:return`Every ${t.every} minute${t.every>1?`s`:``}`+a(t.dailyWindows)+o(t.daysOfWeek);case`hours`:return`Every ${t.every} hour${t.every>1?`s`:``} at :${String(t.minute).padStart(2,`0`)}`+a(t.dailyWindows)+o(t.daysOfWeek);case`days`:{let e=`Every ${t.every} day${t.every>1?`s`:``} at ${r(t.time)}`;return t.times?.length&&(e+=` (times: ${t.times.map(r).join(`, `)})`),e+=o(t.daysOfWeek),e}case`weeks`:{let e=t.daysOfWeek.map(e=>i[e]).join(`, `);return`Every ${t.every} week${t.every>1?`s`:``} on ${e} at ${r(t.time)}`}case`months`:{let e=t.lastDayOfMonth?t.daysOfMonth.length>0?`${t.daysOfMonth.join(`, `)} and last day`:`last day`:t.daysOfMonth.join(`, `);return`Every ${t.every} month${t.every>1?`s`:``} on day ${e} at ${String(t.time.hour).padStart(2,`0`)}:${String(t.time.minute).padStart(2,`0`)}`}default:return`Unknown`}}function c(e,t){let n=new Date(e),r=t.match(/^([+-])(\d{2}):(\d{2})$/);if(!r)return n.toISOString();let i=r[1]===`+`?1:-1,a=Number.parseInt(r[2],10),o=Number.parseInt(r[3],10),s=i*(a*60+o)*60*1e3;return`${new Date(n.getTime()+s).toISOString().replace(`T`,` `).slice(0,19)} (${t})`}function l(e){console.log(`
|
|
3
|
+
Schedule: ${e.name}
|
|
4
|
+
${`━`.repeat(50)}
|
|
5
|
+
ID: ${e.id}
|
|
6
|
+
Agent: ${e.agent.name}
|
|
7
|
+
Status: ${e.isActive?`Active`:`Paused`}
|
|
8
|
+
Timezone: ${e.utcOffset}
|
|
9
|
+
|
|
10
|
+
Prompt:
|
|
11
|
+
${e.prompt.slice(0,200)}${e.prompt.length>200?`…`:``}
|
|
12
|
+
|
|
13
|
+
Schedule:
|
|
14
|
+
${s(e.config)}
|
|
15
|
+
|
|
16
|
+
Holiday Calendars: ${e.holidayCalendarIds?.length?e.holidayCalendarIds.join(`, `):`-`}
|
|
17
|
+
|
|
18
|
+
Next run: ${e.nextRunAt?c(e.nextRunAt,e.utcOffset):`-`}
|
|
19
|
+
Created: ${c(e.createdAt,e.utcOffset)}
|
|
20
|
+
Updated: ${c(e.updatedAt,e.utcOffset)}
|
|
21
|
+
`)}function u(e){console.log(`Runs (${e.length}):\n`);for(let t of e){let e=new Date(t.scheduledAt).toLocaleString(),n;n=t.status===`skipped`?t.skipReason===`holiday`?`Skipped (holiday)`:`Skipped`:t.task?.title??`(task unavailable)`;let r=t.task&&!t.task.read?` (unread)`:``;console.log(` ${e}`),console.log(` Task: ${n}${r}`),t.task&&console.log(` Task ID: ${t.task.id}`),console.log(` Run ID: ${t.id}`),console.log(``)}}function d(e){if(e.length===0){console.log(`No connected calendar accounts. Connect one in the Hub first.`);return}console.log(`Connected calendar accounts (${e.length}):\n`);for(let t of e){let e=n(t.provider),r=n(t.email);console.log(` ${e} (${r})`),console.log(` Account ID: ${t.id}`);for(let e of t.calendars){let t=e.isVisible?``:` (hidden)`,r=n(e.name);console.log(` ${e.id} ${r}${t}`)}console.log(``)}}function f(e,t,n){return e.type===`no-repeat`?t===void 0?(n?.length??0)>0?[]:void 0:[]:t??n??void 0}function p(e){let t=e.repeatType||`no-repeat`;e.times!==void 0&&t!==`days`&&(console.error(`--times is only supported with --repeat-type days.`),process.exit(1)),e.dailyWindows!==void 0&&t!==`minutes`&&t!==`hours`&&(console.error(`--daily-windows is only supported with --repeat-type minutes or hours.`),process.exit(1)),e.daysOfWeek!==void 0&&t!==`minutes`&&t!==`hours`&&t!==`days`&&t!==`weeks`&&(console.error(`--days-of-week is only supported with --repeat-type minutes, hours, days, or weeks.`),process.exit(1))}function m(e){if(e.type!==`repeat`)return;let{interval:t}=e;t.unit===`hours`&&(t.every<24||((t.dailyWindows?.length??0)>0&&(console.error(`--daily-windows is not available with --repeat-type hours and --every 24 or more (equivalent to a daily interval, and the existing schedule already has active windows set) — use --repeat-type days instead.`),process.exit(1)),(t.daysOfWeek?.length??0)>0&&(console.error(`--days-of-week is not available with --repeat-type hours and --every 24 or more (equivalent to a daily interval, and the existing schedule already has a weekday filter set) — use --repeat-type days instead.`),process.exit(1))))}function h(e,t){let n=e.repeatType||`no-repeat`;if(n===`no-repeat`)return{type:`no-repeat`};let r=t?.type===`repeat`&&t.interval.unit===n?t.interval:void 0,i=e.every??r?.every??1;function a(){return e.time?e.time:r&&`time`in r?r.time:{hour:9,minute:0}}switch(n){case`minutes`:return{type:`repeat`,interval:{unit:`minutes`,every:i,dailyWindows:e.dailyWindows??(r?.unit===`minutes`?r.dailyWindows:void 0),daysOfWeek:e.daysOfWeek??(r?.unit===`minutes`?r.daysOfWeek:void 0)}};case`hours`:return{type:`repeat`,interval:{unit:`hours`,every:i,minute:e.time?a().minute:r?.unit===`hours`?r.minute:0,dailyWindows:e.dailyWindows??(r?.unit===`hours`?r.dailyWindows:void 0),daysOfWeek:e.daysOfWeek??(r?.unit===`hours`?r.daysOfWeek:void 0)}};case`days`:return{type:`repeat`,interval:{unit:`days`,every:i,time:a(),times:e.times??(r?.unit===`days`?r.times:void 0),daysOfWeek:e.daysOfWeek??(r?.unit===`days`?r.daysOfWeek:void 0)}};case`weeks`:return{type:`repeat`,interval:{unit:`weeks`,every:i,daysOfWeek:e.daysOfWeek??(r?.unit===`weeks`?r.daysOfWeek:[1]),time:a()}};case`months`:return{type:`repeat`,interval:{unit:`months`,every:i,daysOfMonth:e.daysOfMonth??(r?.unit===`months`?r.daysOfMonth:[1]),lastDayOfMonth:e.lastDayOfMonth??(r?.unit===`months`&&r.lastDayOfMonth),time:a()}};default:return{type:`no-repeat`}}}async function g(n){let{accessToken:r,workspaceId:i}=await t(),a=new e,o=[],l;do{let e=await a.getSchedules(r,i,{nextKey:l,limit:100});o.push(...e.schedules),l=e.nextKey}while(l);if(n.json){console.log(JSON.stringify(o));return}if(o.length===0){console.log("No schedules in this workspace yet. Create one with `entrydesk schedules create --name <name> --prompt <text> --agent-id <id> --starts-at <time>`.");return}console.log(`Schedules (${o.length}):\n`);for(let e of o){let t=e.isActive?`\x1B[32mActive\x1B[0m`:`\x1B[33mPaused\x1B[0m`;console.log(` ${e.name}`),console.log(` Agent: ${e.agent.name}`),console.log(` Repeat: ${s(e.config)}`),console.log(` Status: ${t}`),console.log(` Next run: ${e.nextRunAt?c(e.nextRunAt,e.utcOffset):`-`}`),console.log(` ID: ${e.id}`),console.log(``)}}async function _(n,r){let{accessToken:i,workspaceId:a}=await t(),o=await new e().getSchedule(i,a,n);if(r.json){console.log(JSON.stringify(o));return}l(o)}async function v(n){p(n);let r=h(n);m(r);let{accessToken:i,workspaceId:a}=await t(),o={name:n.name,prompt:n.prompt,agentId:n.agentId,startsAt:n.startsAt,config:r,utcOffset:n.utcOffset||`+00:00`,holidayCalendarIds:f(r,n.holidayCalendars,void 0)},s=await new e().createSchedule(i,a,o);if(n.json){console.log(JSON.stringify(s));return}console.log(`Created schedule: ${s.name}`),console.log(` ID: ${s.id}`),console.log(` Next run: ${s.nextRunAt?c(s.nextRunAt,s.utcOffset):`-`}`)}async function y(n,r){let{accessToken:i,workspaceId:a}=await t(),o=new e,s=await o.getSchedule(i,a,n),c=r.agentId??s.agent?.id,l=r.agentId!==void 0&&r.agentId!==s.agent?.id;c||(console.error(`This schedule is not agent-based; the CLI can only edit agent schedules.`),process.exit(1)),(r.every!==void 0||r.time!==void 0||r.daysOfWeek!==void 0||r.daysOfMonth!==void 0||r.lastDayOfMonth!==void 0||r.dailyWindows!==void 0||r.times!==void 0)&&!r.repeatType&&(console.error(`To change the cadence, pass --repeat-type along with the repeat options.`),process.exit(1)),r.repeatType&&p(r);let u=r.repeatType?h(r,s.config):s.config;r.repeatType&&m(u);let d={name:r.name??s.name,prompt:r.prompt??s.prompt,agentId:c,startsAt:r.startsAt??s.startsAt,config:u,utcOffset:r.utcOffset??s.utcOffset,holidayCalendarIds:f(u,r.holidayCalendars,l?void 0:s.holidayCalendarIds)};if(await o.updateSchedule(i,a,n,d),s.isActive||await o.deactivateSchedule(i,a,n),r.json){console.log(JSON.stringify({id:n,updated:!0}));return}console.log(`Updated schedule: ${n}`)}async function b(n,r,i){let{accessToken:a,workspaceId:o}=await t(),s=new e;if(await(r?s.activateSchedule(a,o,n):s.deactivateSchedule(a,o,n)),i.json){console.log(JSON.stringify({id:n,isActive:r}));return}console.log(`${r?`Activated`:`Paused`} schedule: ${n}`)}async function x(n,r){let{accessToken:i,workspaceId:a}=await t(),{taskId:o}=await new e().runScheduleNow(i,a,n);if(r.json){console.log(JSON.stringify({taskId:o}));return}console.log(`Started run for schedule ${n}`),console.log(` Task ID: ${o}`)}async function S(n,r){let{accessToken:i,workspaceId:a}=await t(),o=new e;if(r.all){let e=[],t;for(let s=0;;s++){s>=100&&(console.error(`Reached maximum page limit (100). Use --limit and --next-key for manual pagination.`),process.exit(1));let c=await o.getScheduleRuns(i,a,n,{limit:r.limit??20,nextKey:t});if(e.push(...c.runs),t=c.nextKey,!t)break}if(r.json){console.log(JSON.stringify({runs:e}));return}if(e.length===0){console.log(`No runs for this schedule.`);return}u(e);return}let{runs:s,nextKey:c}=await o.getScheduleRuns(i,a,n,{limit:r.limit,nextKey:r.nextKey});if(r.json){console.log(JSON.stringify({runs:s,nextKey:c}));return}if(s.length===0){console.log(`No runs for this schedule.`);return}u(s),c&&console.log(`Next page: --next-key ${c}`)}async function C(n){let{accessToken:r,workspaceId:i}=await t();await new e().deleteSchedule(r,i,n),console.log(`Deleted schedule: ${n}`)}async function w(n){let{accessToken:r,workspaceId:i}=await t(),{accounts:a}=await new e().getCalendarAccounts(r,i);if(n.json){console.log(JSON.stringify({accounts:a}));return}d(a)}export{v as createSchedule,C as deleteSchedule,y as editSchedule,w as listCalendarAccounts,S as listScheduleRuns,g as listSchedules,x as runScheduleNow,b as setScheduleActive,_ as showSchedule};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{b as e,j as t,l as n}from"./profile-storage-mtd3aKrx.js";import{p as r,r as i}from"./paths-BAZ2NsXN.js";import{n as a,t as o}from"./commands-DbXuQqse.js";import{t as s}from"./remote-nEFOyIM2.js";import c from"node:fs";import l from"node:os";import u from"node:path";import{isHTTPError as d}from"ky";import f from"node:crypto";import p from"node:fs/promises";import{Readable as m}from"node:stream";import{pipeline as h}from"node:stream/promises";import g from"adm-zip";import _ from"archiver";function v(e){return e.all?`all`:e.remote&&!e.local?`remote`:e.local&&!e.remote?`local`:`all`}function y(e,t,n){let r=new Map(t.map(e=>[e.name,e])),i=new Map(Object.entries(e)),a=new Set;if(n!==`remote`)for(let e of i.keys())a.add(e);if(n!==`local`)for(let e of r.keys())a.add(e);let o=[];for(let e of a){let t=i.get(e),n=r.get(e);o.push({name:e,local:!!t,remote:!!n,sourceType:t?.sourceType,skillId:t?.skillId??n?.id})}return o.sort((e,t)=>e.name<t.name?-1:+(e.name>t.name)),o}function b(e){return e.local&&e.remote?`local+remote`:e.local?`local-only`:`remote-only`}async function x(e,t){let n=v(e),{rootDir:a,workspaceId:o}=i(!!e.global,t.workspaceId),c=y(n===`remote`?{}:r(a).skills,n===`local`?[]:await s(t.client,t.accessToken,o),n);if(e.json){console.info(JSON.stringify(c,null,2));return}if(c.length===0){console.info(n===`local`?`No skills tracked locally.`:`No skills available in the workspace.`);return}let l=(e,t)=>e.padEnd(t);console.info(`${l(`NAME`,28)}${l(`WHERE`,14)}SOURCE`);for(let e of c)console.info(`${l(e.name,28)}${l(b(e),14)}${e.sourceType??`—`}`)}async function S(){let{accessToken:t,workspaceId:r}=await n();return{accessToken:t,workspaceId:r,client:new e}}function C(e,t){let n=u.relative(e,t);return n===``||!n.startsWith(`..`)&&!u.isAbsolute(n)}async function w(e){let t=await p.realpath(e),n=[process.cwd(),l.homedir()];if(!(await Promise.all(n.map(async e=>{try{return await p.realpath(e)}catch{return u.resolve(e)}}))).some(e=>C(e,t)))throw Error(`Invalid upload path: must be within the current directory or your home directory.`)}async function T(e){let t=await p.mkdtemp(u.join(l.tmpdir(),`entrydesk-skill-`)),n=u.join(t,`${u.basename(e)}.zip`);return await new Promise((t,r)=>{let i=c.createWriteStream(n),a=_(`zip`,{zlib:{level:9}});i.on(`close`,()=>t()),i.on(`error`,r),a.on(`error`,r),a.pipe(i),a.directory(e,!1),a.finalize()}),{zipPath:n,cleanupDir:t}}function E(e){console.log(`Versions (${e.length}):\n`);for(let t of e){let e=new Date(t.createdAt).toLocaleString();if(console.log(` v${t.versionNumber} · ${e}`),t.description){let e=t.description.length>100?`${t.description.slice(0,100)}…`:t.description;console.log(` ${e}`)}console.log(` Version ID: ${t.id}`),console.log(``)}}function D(e){let n=t(e);if(console.log(`User grants (${n.length}):`),n.length===0){console.log(` (none)`);return}for(let e of n)console.log(` - ${e.user.name} <${e.user.email}> · ${e.role}`),console.log(` ID: ${e.userId}`)}async function O(e){let t=await S();if(e.local||e.remote||e.all){await x(e,t);return}let n=[],r;do{let i=await t.client.listAvailableSkills(t.accessToken,t.workspaceId,{createdBy:e.mine?`me`:void 0,nextKey:r,limit:100});n.push(...i.skills),r=i.nextKey}while(r);if(e.json){console.log(JSON.stringify(n));return}if(n.length===0){console.log("No skills in this workspace yet. Upload one with `entrydesk skills upload <path>`, or browse `entrydesk marketplace`.");return}console.log(`Available skills (${n.length}):\n`);for(let e of n)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(``)}async function k(t,r){let{accessToken:i,workspaceId:a}=await n(),o=new e,s=u.resolve(t),c;try{c=await p.stat(s)}catch{console.error(`File not found: ${s}`),process.exit(1)}let l=s,f=null;try{try{await w(s)}catch(e){let t=e instanceof Error?e.message:`Invalid upload path.`;console.error(t),process.exit(1)}if(c.isDirectory()){let e=await T(s);l=e.zipPath,f=e.cleanupDir}else c.isFile()||(console.error(`Not a file or directory: ${s}`),process.exit(1));u.extname(l).toLowerCase()!==`.zip`&&(console.error(`Only .zip files are supported for upload.`),process.exit(1));let e=await p.readFile(l),t=new FormData;t.append(`file`,new Blob([e],{type:`application/zip`}),u.basename(l)),r.force&&t.append(`force`,`true`);let n;try{n=await o.uploadSkill(i,a,t)}catch(e){throw d(e)&&e.response.status===409&&(console.error(`Upload failed: A skill with this name already exists.`),console.error(`Use --force to overwrite the existing skill.`),process.exit(1)),e}if(r.json){console.log(JSON.stringify(n));return}console.log(`Uploaded skill: ${n.name}`),console.log(` ID: ${n.id}`),console.log(` Version ID: ${n.versionId}`),console.log(` Description: ${n.description}`)}finally{f&&await p.rm(f,{recursive:!0,force:!0})}}async function A(t,r){!r.enable&&!r.disable&&(console.error(`Pass exactly one of --enable or --disable.`),process.exit(1));let i=!!r.enable,{accessToken:a,workspaceId:o}=await n(),s=await new e().updateSkillPreference(a,o,t,i);if(r.json){console.log(JSON.stringify(s));return}console.log(`${s.isEnabled?`Enabled`:`Disabled`} skill for you: ${t}`)}async function j(t,r){let{accessToken:i,workspaceId:a}=await n(),o=await new e().getSkillVersions(i,a,t);if(r.json){console.log(JSON.stringify(o));return}if(o.versions.length===0){console.log(`No versions for this skill.`);return}E(o.versions)}async function M(t,r){let{accessToken:i,workspaceId:a}=await n(),o=new e;if(r.addUser){let e=await o.upsertSkillGrant(i,a,t,r.addUser,r.role);if(r.json){console.log(JSON.stringify(e));return}console.log(`Granted ${r.role} to user ${r.addUser}`);return}if(r.removeUser){if(await o.removeSkillGrant(i,a,t,r.removeUser),r.json){console.log(JSON.stringify({userId:r.removeUser,removed:!0}));return}console.log(`Revoked access for user ${r.removeUser}`);return}let s=await o.getSkillGrants(i,a,t);if(r.json){console.log(JSON.stringify(s));return}D(s)}async function N(t){let{accessToken:r,workspaceId:i}=await n();await new e().deleteSkill(r,i,t),console.log(`Deleted skill: ${t}`)}async function P(t,r){let{accessToken:i,workspaceId:a}=await n(),{url:o,name:s}=await new e().downloadSkillCurrent(i,a,t);(s.includes(`/`)||s.includes(u.sep)||s===`.`||s===`..`||!s)&&(console.error(`Invalid skill name for output directory: ${s}`),process.exit(1));let d=u.resolve(s),_=await p.mkdtemp(u.join(l.tmpdir(),`entrydesk-skill-download-`)),v=u.join(_,`${s}.zip`);try{let e=await fetch(o);if(!e.ok)throw Error(`Failed to download skill zip: ${e.status} ${e.statusText}`);if(!e.body)throw Error(`Response body is empty`);let n=c.createWriteStream(v);await h(m.fromWeb(e.body),n);let i=await p.mkdtemp(u.join(u.dirname(d),`.entrydesk-skill-extract-`)),a=null;try{r.json||console.log(`Extracting…`);let e=new g(v),t=u.resolve(i)+u.sep;for(let n of e.getEntries()){if(n.isDirectory)continue;let e=u.resolve(i,n.entryName);if(!e.startsWith(t))throw Error(`Zip entry contains path traversal: ${n.entryName}`);await p.mkdir(u.dirname(e),{recursive:!0}),await p.writeFile(e,n.getData())}c.existsSync(d)&&(a=u.join(u.dirname(d),`.entrydesk-backup-${f.randomUUID()}`),r.json||console.log(`Replacing existing directory: ${d}`),await p.rename(d,a));try{await p.rename(i,d),a&&c.existsSync(a)&&(await p.rm(a,{recursive:!0,force:!0}),a=null)}catch(e){throw a&&c.existsSync(a)&&(await p.rename(a,d),a=null),e}}catch(e){if(await p.rm(i,{recursive:!0,force:!0}),a&&c.existsSync(a))try{await p.rename(a,d)}catch{console.error(`Warning: Could not restore backup. Your original files are at: ${a}`)}throw e}if(r.json){console.log(JSON.stringify({skillId:t,skillName:s,outputDir:d}));return}console.log(`Downloaded skill "${s}" to ${d}`)}finally{await p.rm(_,{recursive:!0,force:!0})}}async function F(e,t){let{runSkillsAdd:n}=await import(`./add-Cu0kBobt.js`);await n(e,t,await S())}async function I(e,t){await a(e,t,await S())}async function L(e,t){let{runSkillsPush:n}=await import(`./push-Mb0Xb42_.js`);await n(e,t,await S())}async function R(e){let{runSkillsStatus:t}=await import(`./status-DzGv21m4.js`);await t(e,await S())}async function z(e,t){let{runSkillsRemove:n}=await import(`./remove-CJiRVixg.js`);await n(e,t,await S())}async function B(e,t){o(e,t,await S())}export{F as addSkill,N as deleteSkill,P as downloadSkill,B as linkSkillsDirectory,j as listSkillVersions,O as listSkills,I as pullSkill,L as pushSkill,z as removeSkill,M as shareSkill,R as showSkillsStatus,A as toggleSkill,k as uploadSkill};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{C as e,O as t,S as n,b as r,c as i,g as a,s as o,t as s}from"./profile-storage-mtd3aKrx.js";async function c(c){let l=s.getEffectiveProfileName(),u=e(),d={model:t.getDefaultModel(),connectors:t.getDefaultConnectorIds()},f=a();if(f){c.json?console.log(JSON.stringify({loggedIn:!0,authSource:f.authSource,profile:l,server:u,workspaceId:f.workspaceId,defaults:d})):(console.log(`Profile: ${l}`),console.log(`Server: ${u}`),console.log(`Authenticated via ${f.label} (no login required)`),console.log(`Workspace ID: ${f.workspaceId}`));return}let p=await n.getAll();if(!p){c.json?console.log(JSON.stringify({loggedIn:!1,profile:l,server:u,defaults:d})):(console.log(`Profile: ${l}`),console.log(`Server: ${u}`),console.log(`Not logged in`),console.log("Run `entrydesk login` to log in"));return}let m;if(p.workspaceId)try{let e=new r,t=await i(),{workspaces:n}=await e.getWorkspaces(t);m=n.find(e=>e.id===p.workspaceId)?.name}catch(e){if(e instanceof o){c.json?console.log(JSON.stringify({loggedIn:!1,profile:l,server:u,defaults:d})):(console.log(`Profile: ${l}`),console.log(`Server: ${u}`),console.log(`Not logged in`),console.log("Run `entrydesk login` to log in"));return}}c.json?console.log(JSON.stringify({loggedIn:!0,authSource:`file`,profile:l,server:u,email:p.email,workspaceId:p.workspaceId,workspaceName:m,defaults:d})):(console.log(`Profile: ${l}`),console.log(`Server: ${u}`),console.log(`Logged in as ${p.email}`),m&&console.log(`Workspace: ${m}`),p.workspaceId&&console.log(`Workspace ID: ${p.workspaceId}`))}export{c as runStatus};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{n as e,p as t,r as n}from"./paths-BAZ2NsXN.js";import{t as r}from"./hash-Ddmw8YE4.js";import{t as i}from"./remote-nEFOyIM2.js";import a from"node:fs";function o(e,t,n){return t?(n??e.localHash)===e.lastPulledHash?`synced`:`ahead`:e.skillId?`remote-deleted`:`local-only`}const s={synced:`—`,ahead:`push (local edits)`,"local-only":`push (never uploaded)`,"remote-deleted":`push to restore, or remove`,"remote-only":`add / pull to install`},c={synced:`✓`,ahead:`↑`,"local-only":`⊙`,"remote-deleted":`⚠`,"remote-only":`☁`};async function l(l,u){let d=!!l.global,{rootDir:f,workspaceId:p}=n(d,u.workspaceId),m=d?`global`:`project`,h=t(f).skills,g=await i(u.client,u.accessToken,p),_=new Map(g.map(e=>[e.id,e])),v=new Map(g.map(e=>[e.name,e])),y=[],b=new Set;for(let[t,n]of Object.entries(h)){let i=n.skillId?_.get(n.skillId):v.get(t);i&&b.add(i.id);let c=e(f,t),l=a.existsSync(c)?r(c):null,u=o(n,!!i,l);y.push({name:t,scope:m,state:u,hint:s[u]})}for(let e of g)b.has(e.id)||y.push({name:e.name,scope:m,state:`remote-only`,hint:s[`remote-only`]});if(y.sort((e,t)=>e.name<t.name?-1:+(e.name>t.name)),l.json){console.info(JSON.stringify(y,null,2));return}if(y.length===0){console.info(`No skills tracked locally or available in the workspace.`);return}let x=(e,t)=>e.padEnd(t);console.info(`${x(`NAME`,26)}${x(`SCOPE`,9)}STATUS`);for(let e of y)console.info(`${x(e.name,26)}${x(e.scope,9)}${c[e.state]} ${x(e.state,16)}${e.hint}`)}export{l as runSkillsStatus};
|