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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +279 -0
  2. package/dist/add-Lh_kLR85.js +2 -0
  3. package/dist/agents-CLcXSbBp.js +2 -0
  4. package/dist/billing-DHrYi0SU.js +2 -0
  5. package/dist/{budget-5BgMv02k.js → budget-D_DDPBBb.js} +1 -1
  6. package/dist/build-task-request-config-Y9X2h9Ia.js +2 -0
  7. package/dist/commands-3Yqb38G_.js +2 -0
  8. package/dist/commands-CdnyYMrx.js +2 -0
  9. package/dist/{config-B9tUjrKe.js → config-hGzOCx4u.js} +2 -2
  10. package/dist/connectors-CxzG22No.js +3 -0
  11. package/dist/file-upload-BmP4AJY0.js +16 -0
  12. package/dist/format-C3tQC6LL.js +2 -0
  13. package/dist/index.js +83 -10
  14. package/dist/instruction-CRCyBKQf.js +2 -0
  15. package/dist/{login-DDHPKjnl.js → login-CwXjzUnO.js} +1 -1
  16. package/dist/{logout-BfBH5eJn.js → logout-BYCFpaxh.js} +1 -1
  17. package/dist/{marketplace-uKCzG2ZZ.js → marketplace-NSEUjhXf.js} +1 -1
  18. package/dist/{mcp-DINA1zRb.js → mcp-B7wo_sRO.js} +2 -2
  19. package/dist/mcp-client-DMOEcmul.js +2 -0
  20. package/dist/meeting-yS83In45.js +3 -0
  21. package/dist/models-AN9cWKSj.js +3 -0
  22. package/dist/notifications-QF11-X32.js +2 -0
  23. package/dist/options-D6fCp3Q_.js +2 -0
  24. package/dist/paginate-CfIrho1f.js +2 -0
  25. package/dist/paths-C9BPsZVF.js +2 -0
  26. package/dist/{profile-BvYUZvxC.js → profile-WtKtO0yp.js} +1 -1
  27. package/dist/profile-storage-Dv0xRb8J.js +58 -0
  28. package/dist/project-BhPYRsaZ.js +2 -0
  29. package/dist/project-context-Cc_Js6n4.js +2 -0
  30. package/dist/project-governance-C7rl6gDW.js +2 -0
  31. package/dist/project-sources-CzylP6oS.js +2 -0
  32. package/dist/project-sources-write-6cBfdUfV.js +2 -0
  33. package/dist/project-tasks-DaGBt4Cp.js +2 -0
  34. package/dist/push-Ce79oiu0.js +2 -0
  35. package/dist/recordings-DoExjM1F.js +3 -0
  36. package/dist/remove-bHAmCTdf.js +2 -0
  37. package/dist/resolve-f238uD6C.js +6 -0
  38. package/dist/schedules-tDaIGaad.js +21 -0
  39. package/dist/{skills-fZI01pai.js → skills-CDd-emMc.js} +1 -1
  40. package/dist/status-CDMSNVD8.js +2 -0
  41. package/dist/{status-DmJ-xYvm.js → status-gK3MA1oe.js} +1 -1
  42. package/dist/stdin-DzzLUF6W.js +2 -0
  43. package/dist/task-CHnFR-Zp.js +103 -0
  44. package/dist/tasks-D4RIFT8Y.js +14 -0
  45. package/dist/tasks-acCatE6n.js +2 -0
  46. package/dist/{tool-Cok2kze5.js → tool-BEivzspP.js} +1 -1
  47. package/dist/update-CJlVgq8V.js +2 -0
  48. package/dist/usage-DOI9sowA.js +3 -0
  49. package/dist/usage-audit-1GZx4VBG.js +4 -0
  50. package/dist/version-C37EX5li.js +2 -0
  51. package/dist/workflow-DhomAltH.js +6 -0
  52. package/dist/{workspaces-DE3ileKk.js → workspaces-D0VOrP2A.js} +1 -1
  53. package/package.json +8 -4
  54. package/dist/add-B1NhONLo.js +0 -2
  55. package/dist/agents-CmqbjcOy.js +0 -2
  56. package/dist/billing-1jI7tuUm.js +0 -2
  57. package/dist/build-task-request-config-BvfeDz3u.js +0 -2
  58. package/dist/commands-B0bUDitb.js +0 -2
  59. package/dist/commands-DCchuLQ9.js +0 -2
  60. package/dist/connectors-Du0gwdNw.js +0 -3
  61. package/dist/custom-connector-D5nYtPdy.js +0 -2
  62. package/dist/mcp-client-CmjAqUI6.js +0 -2
  63. package/dist/meeting-DyRLAlio.js +0 -3
  64. package/dist/models-MjAV8n3p.js +0 -2
  65. package/dist/notifications-ChqOyq50.js +0 -2
  66. package/dist/paths-B_0RLzm4.js +0 -2
  67. package/dist/profile-storage-CsigYr0Q.js +0 -72
  68. package/dist/push-Dv7v6CZ8.js +0 -2
  69. package/dist/recordings-k6uAy1-Z.js +0 -3
  70. package/dist/remove-C846BKtl.js +0 -2
  71. package/dist/schedules-gNv67oB_.js +0 -21
  72. package/dist/status-gxTm4vOE.js +0 -2
  73. package/dist/task-Cu8s2pLl.js +0 -115
  74. package/dist/tasks-iSFyXmqr.js +0 -14
  75. package/dist/update-DvJ7nqZt.js +0 -2
  76. package/dist/usage-BwizU9L8.js +0 -3
  77. package/dist/version-Db_lMuAl.js +0 -2
  78. package/dist/workflow-BZblFLYG.js +0 -6
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{f as e,h as t,n,p as r,r as i}from"./paths-B_0RLzm4.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};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import{b as e,l as t}from"./profile-storage-CsigYr0Q.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};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{f as e,m as t,n,r,t as i}from"./paths-B_0RLzm4.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};
@@ -1,21 +0,0 @@
1
- #!/usr/bin/env node
2
- import{$ as e,b as t,it as n,l as r,m as i}from"./profile-storage-CsigYr0Q.js";import{n as a}from"./build-task-request-config-BvfeDz3u.js";function o(e){return`${String(e.hour).padStart(2,`0`)}:${String(e.minute).padStart(2,`0`)}`}const s=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`];function c(e){return e?.length?` (windows: ${e.map(e=>`${o(e.start)}-${o(e.end)}`).join(`, `)})`:``}function l(e){return e?.length?` [days: ${e.map(e=>s[e]).join(`, `)}]`:``}function u(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`:``}`+c(t.dailyWindows)+l(t.daysOfWeek);case`hours`:return`Every ${t.every} hour${t.every>1?`s`:``} at :${String(t.minute).padStart(2,`0`)}`+c(t.dailyWindows)+l(t.daysOfWeek);case`days`:{let e=`Every ${t.every} day${t.every>1?`s`:``} at ${o(t.time)}`;return t.times?.length&&(e+=` (times: ${t.times.map(o).join(`, `)})`),e+=l(t.daysOfWeek),e}case`weeks`:{let e=t.daysOfWeek.map(e=>s[e]).join(`, `);return`Every ${t.every} week${t.every>1?`s`:``} on ${e} at ${o(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 d(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 f(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
- ${u(e.config)}
15
-
16
- Holiday Calendars: ${e.holidayCalendarIds?.length?e.holidayCalendarIds.join(`, `):`-`}
17
-
18
- Next run: ${e.nextRunAt?d(e.nextRunAt,e.utcOffset):`-`}
19
- Created: ${d(e.createdAt,e.utcOffset)}
20
- Updated: ${d(e.updatedAt,e.utcOffset)}
21
- `)}function p(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 m(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=i(t.provider),n=i(t.email);console.log(` ${e} (${n})`),console.log(` Account ID: ${t.id}`);for(let e of t.calendars){let t=e.isVisible?``:` (hidden)`,n=i(e.name);console.log(` ${e.id} ${n}${t}`)}console.log(``)}}function h(e,t,n){return e.type===`no-repeat`?t===void 0?(n?.length??0)>0?[]:void 0:[]:t??n??void 0}function g(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 _(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 v(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 y(e){let{accessToken:n,workspaceId:i}=await r(),a=new t,o=[],s;do{let e=await a.getSchedules(n,i,{nextKey:s,limit:100});o.push(...e.schedules),s=e.nextKey}while(s);if(e.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: ${u(e.config)}`),console.log(` Status: ${t}`),console.log(` Next run: ${e.nextRunAt?d(e.nextRunAt,e.utcOffset):`-`}`),console.log(` ID: ${e.id}`),console.log(``)}}async function b(e,n){let{accessToken:i,workspaceId:a}=await r(),o=await new t().getSchedule(i,a,e);if(n.json){console.log(JSON.stringify(o));return}f(o)}function x({toolApprovalMode:t,approvalHandling:r,allowedTools:i,disallowedTools:o}){if(t===void 0!=(r===void 0)&&(console.error(`Pass --tool-approval-mode and --approval-handling together.`),process.exit(1)),t!==void 0&&n(t,r)===void 0){let t=e.map(e=>`${e.toolApprovalMode} + ${e.approvalHandling}`).join(`, `);console.error(`Unsupported posture. Supported: ${t}.`),process.exit(1)}let s=a({allowedTools:i,disallowedTools:o});return{...t!==void 0&&r!==void 0?{toolApprovalMode:t,approvalHandling:r}:{},...s?{toolPolicies:s}:{}}}function S(e,t){let n=new Map(e?.map(e=>[e.toolName,e.policy]));for(let e of t)n.set(e.toolName,e.policy);return[...n].map(([e,t])=>({toolName:e,policy:t}))}async function C(e){let n=x(e);g(e);let i=v(e);_(i);let{accessToken:a,workspaceId:o}=await r(),s={name:e.name,prompt:e.prompt,agentId:e.agentId,startsAt:e.startsAt,config:i,utcOffset:e.utcOffset||`+00:00`,...n,holidayCalendarIds:h(i,e.holidayCalendars,void 0)},c=await new t().createSchedule(a,o,s);if(n.toolApprovalMode===void 0&&console.error(`Note: this schedule will run every tool automatically, including ones an admin marked as needing approval. To gate them instead, pass --tool-approval-mode auto with --approval-handling ask (pause until approved in Hub) or deny (skip the tool).`),e.json){console.log(JSON.stringify(c));return}console.log(`Created schedule: ${c.name}`),console.log(` ID: ${c.id}`),console.log(` Next run: ${c.nextRunAt?d(c.nextRunAt,c.utcOffset):`-`}`)}async function w(e,n){let{toolPolicies:i,...a}=x(n),{accessToken:o,workspaceId:s}=await r(),c=new t,l=await c.getSchedule(o,s,e),u=n.agentId??l.agent?.id,d=n.agentId!==void 0&&n.agentId!==l.agent?.id;u||(console.error(`This schedule is not agent-based; the CLI can only edit agent schedules.`),process.exit(1)),(n.every!==void 0||n.time!==void 0||n.daysOfWeek!==void 0||n.daysOfMonth!==void 0||n.lastDayOfMonth!==void 0||n.dailyWindows!==void 0||n.times!==void 0)&&!n.repeatType&&(console.error(`To change the cadence, pass --repeat-type along with the repeat options.`),process.exit(1)),n.repeatType&&g(n);let f=n.repeatType?v(n,l.config):l.config;n.repeatType&&_(f);let p={name:n.name??l.name,prompt:n.prompt??l.prompt,agentId:u,startsAt:n.startsAt??l.startsAt,config:f,utcOffset:n.utcOffset??l.utcOffset,...a,...i?{toolPolicies:S(l.toolPolicies,i)}:{},holidayCalendarIds:h(f,n.holidayCalendars,d?void 0:l.holidayCalendarIds)};if(await c.updateSchedule(o,s,e,p),l.isActive||await c.deactivateSchedule(o,s,e),n.json){console.log(JSON.stringify({id:e,updated:!0}));return}console.log(`Updated schedule: ${e}`)}async function T(e,n,i){let{accessToken:a,workspaceId:o}=await r(),s=new t;if(await(n?s.activateSchedule(a,o,e):s.deactivateSchedule(a,o,e)),i.json){console.log(JSON.stringify({id:e,isActive:n}));return}console.log(`${n?`Activated`:`Paused`} schedule: ${e}`)}async function E(e,n){let{accessToken:i,workspaceId:a}=await r(),{taskId:o}=await new t().runScheduleNow(i,a,e);if(n.json){console.log(JSON.stringify({taskId:o}));return}console.log(`Started run for schedule ${e}`),console.log(` Task ID: ${o}`)}async function D(e,n){let{accessToken:i,workspaceId:a}=await r(),o=new t;if(n.all){let t=[],r;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,e,{limit:n.limit??20,nextKey:r});if(t.push(...c.runs),r=c.nextKey,!r)break}if(n.json){console.log(JSON.stringify({runs:t}));return}if(t.length===0){console.log(`No runs for this schedule.`);return}p(t);return}let{runs:s,nextKey:c}=await o.getScheduleRuns(i,a,e,{limit:n.limit,nextKey:n.nextKey});if(n.json){console.log(JSON.stringify({runs:s,nextKey:c}));return}if(s.length===0){console.log(`No runs for this schedule.`);return}p(s),c&&console.log(`Next page: --next-key ${c}`)}async function O(e){let{accessToken:n,workspaceId:i}=await r();await new t().deleteSchedule(n,i,e),console.log(`Deleted schedule: ${e}`)}async function k(e){let{accessToken:n,workspaceId:i}=await r(),{accounts:a}=await new t().getCalendarAccounts(n,i);if(e.json){console.log(JSON.stringify({accounts:a}));return}m(a)}export{C as createSchedule,O as deleteSchedule,w as editSchedule,k as listCalendarAccounts,D as listScheduleRuns,y as listSchedules,E as runScheduleNow,T as setScheduleActive,b as showSchedule};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{n as e,p as t,r as n}from"./paths-B_0RLzm4.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};