| 1713 | `});var BC="TodoWrite";var JM="Skill";var TN="TaskCreate";var Gq6="TaskGet";var Tq6="TaskList";var bL="TaskUpdate";var cN8="EnterWorktree";var lN8="ExitWorktree";function ezz(q,K){let{min:_,max:z}=K,Y=new Set;for(let $ of q.split(",")){let A=$.match(/^\*(?:\/(\d+))?$/);if(A){let j=A[1]?parseInt(A[1],10):1;if(j<1)return null;for(let H=_;H<=z;H+=j)Y.add(H);continue}let O=$.match(/^(\d+)-(\d+)(?:\/(\d+))?$/);if(O){let j=parseInt(O[1],10),H=parseInt(O[2],10),J=O[3]?parseInt(O[3],10):1,M=_===0&&z===6,X=M?7:z;if(j>H||J<1||j<_||H>X)return null;for(let P=j;P<=H;P+=J)Y.add(M&&P===7?0:P);continue}if($.match(/^\d+$/)){let j=parseInt($,10);if(_===0&&z===6&&j===7)j=0;if(j<_||j>z)return null;Y.add(j);continue}return null}if(Y.size===0)return null;return Array.from(Y).sort(($,A)=>$-A)}function Eo6(q){let K=q.trim().split(/\s+/);if(K.length!==5)return null;let _=[];for(let z=0;z<5;z++){let Y=ezz(K[z],tzz[z]);if(!Y)return null;_.push(Y)}return{minute:_[0],hour:_[1],dayOfMonth:_[2],month:_[3],dayOfWeek:_[4]}}function Qy4(q,K){let _=new Set(q.minute),z=new Set(q.hour),Y=new Set(q.dayOfMonth),$=new Set(q.month),A=new Set(q.dayOfWeek),O=q.dayOfMonth.length===31,w=q.dayOfWeek.length===7,j=new Date(K.getTime());j.setSeconds(0,0),j.setMinutes(j.getMinutes()+1);let H=527040;for(let J=0;J<H;J++){let M=j.getMonth()+1;if(!$.has(M)){j.setMonth(j.getMonth()+1,1),j.setHours(0,0,0,0);continue}let X=j.getDate(),P=j.getDay();if(!(O&&w?!0:O?A.has(P):w?Y.has(X):Y.has(X)||A.has(P))){j.setDate(j.getDate()+1),j.setHours(0,0,0,0);continue}if(!z.has(j.getHours())){j.setHours(j.getHours()+1,0,0,0);continue}if(!_.has(j.getMinutes())){j.setMinutes(j.getMinutes()+1);continue}return j}return null}function qYz(q,K){return new Date(2000,0,1,K,q).toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit"})}function KYz(q,K){let _=new Date;return _.setUTCHours(K,q,0,0),_.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",timeZoneName:"short"})}function bV6(q,K){let _=K?.utc??!1,z=q.trim().split(/\s+/);if(z.length!==5)return q;let[Y,$,A,O,w]=z,j=Y.match(/^\*\/(\d+)$/);if(j&&$==="*"&&A==="*"&&O==="*"&&w==="*"){let P=parseInt(j[1],10);return P===1?"Every minute":`Every ${P} minutes`}if(Y.match(/^\d+$/)&&$==="*"&&A==="*"&&O==="*"&&w==="*"){let P=parseInt(Y,10);if(P===0)return"Every hour";return`Every hour at :${P.toString().padStart(2,"0")}`}let H=$.match(/^\*\/(\d+)$/);if(Y.match(/^\d+$/)&&H&&A==="*"&&O==="*"&&w==="*"){let P=parseInt(H[1],10),W=parseInt(Y,10),D=W===0?"":` at :${W.toString().padStart(2,"0")}`;return P===1?`Every hour${D}`:`Every ${P} hours${D}`}if(!Y.match(/^\d+$/)||!$.match(/^\d+$/))return q;let J=parseInt(Y,10),M=parseInt($,10),X=_?KYz:qYz;if(A==="*"&&O==="*"&&w==="*")return`Every day at ${X(J,M)}`;if(A==="*"&&O==="*"&&w.match(/^\d$/)){let P=parseInt(w,10)%7,W;if(_){let D=new Date,f=(P-D.getUTCDay()+7)%7;D.setUTCDate(D.getUTCDate()+f),D.setUTCHours(M,J,0,0),W=Uy4[D.getDay()]}else W=Uy4[P];if(W)return`Every ${W} at ${X(J,M)}`}if(A==="*"&&O==="*"&&w==="1-5")return`Weekdays at ${X(J,M)}`;return q}var tzz,Uy4;var Lo6=y(()=>{tzz=[{min:0,max:59},{min:0,max:23},{min:1,max:31},{min:1,max:12},{min:0,max:6}];Uy4=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]});import{randomUUID as _Yz}from"crypto";import{readFileSync as zYz}from"fs";import{mkdir as YYz,writeFile as $Yz}from"fs/promises";import{join as Op1}from"path";function pr(q){return Op1(q??Fz(),AYz)}async function IV6(q){let K=X8(),_;try{_=await K.readFile(pr(q),{encoding:"utf-8"})}catch(A){if(e3(A))return[];return H6(A),[]}let z=m5(_,!1);if(!z||typeof z!=="object")return[];let Y=z;if(!Array.isArray(Y.tasks))return[];let $=[];for(let A of Y.tasks){if(!A||typeof A.id!=="string"||typeof A.cron!=="string"||typeof A.prompt!=="string"||typeof A.createdAt!=="number"){N(`[ScheduledTasks] skipping malformed task: ${g6(A)}`);continue}if(!Eo6(A.cron)){N(`[ScheduledTasks] skipping task ${A.id} with invalid cron '${A.cron}'`);continue}$.push({id:A.id,cron:A.cron,prompt:A.prompt,createdAt:A.createdAt,...typeof A.lastFiredAt==="number"?{lastFiredAt:A.lastFiredAt}:{},...A.recurring?{recurring:!0}:{},...A.permanent?{permanent:!0}:{}})}return $}function nN8(q){let K;try{K=zYz(pr(q),"utf-8")}catch{return!1}let _=m5(K,!1);if(!_||typeof _!=="object")return!1;let z=_.tasks;return Array.isArray(z)&&z.length>0}async function wp1(q,K){let _=K??Fz();await YYz(Op1(_,".claude"),{recursive:!0});let z={tasks:q.map(({durable:Y,...$})=>$)};await $Yz(pr(_),g6(z,null,2)+` |
| 1714 | `,"utf-8")}async function dy4(q,K,_,z,Y){let $=_Yz().slice(0,8),A={id:$,cron:q,prompt:K,createdAt:Date.now(),..._?{recurring:!0}:{}};if(!z)return mi8({...A,...Y?{agentId:Y}:{}}),$;let O=await IV6();return O.push(A),await wp1(O),$}async function Jw6(q,K){if(q.length===0)return;if(K===void 0&&ob6(q)===q.length)return;let _=new Set(q),z=await IV6(K),Y=z.filter(($)=>!_.has($.id));if(Y.length===z.length)return;await wp1(Y,K)}async function cy4(q,K,_){if(q.length===0)return;let z=new Set(q),Y=await IV6(_),$=!1;for(let A of Y)if(z.has(A.id))A.lastFiredAt=K,$=!0;if(!$)return;await wp1(Y,_)}async function uV6(q){let K=await IV6(q);if(q!==void 0)return K;let _=rb6().map((z)=>({...z,durable:!1}));return[...K,..._]}function xV6(q,K){let _=Eo6(q);if(!_)return null;let z=Qy4(_,new Date(K));return z?z.getTime():null}function ly4(q){let K=parseInt(q.slice(0,8),16)/4294967296;return Number.isFinite(K)?K:0}function jp1(q,K,_,z=kU){let Y=xV6(q,K);if(Y===null)return null;let $=xV6(q,Y);if($===null)return Y;let A=Math.min(ly4(_)*z.recurringFrac*($-Y),z.recurringCapMs);return Y+A}function ny4(q,K,_,z=kU){let Y=xV6(q,K);if(Y===null)return null;if(new Date(Y).getMinutes()%z.oneShotMinuteMod!==0)return Y;let $=z.oneShotFloorMs+ly4(_)*(z.oneShotMaxMs-z.oneShotFloorMs);return Math.max(Y-$,K)}function iy4(q,K){return q.filter((_)=>{let z=xV6(_.cron,_.createdAt);return z!==null&&z<K})}var AYz,kU;var vq6=y(()=>{v8();Lo6();_8();y8();e7();vO();E8();l8();AYz=Op1(".claude","scheduled_tasks.json");kU={recurringFrac:0.1,recurringCapMs:900000,oneShotMaxMs:90000,oneShotFloorMs:0,oneShotMinuteMod:30,recurringMaxAgeMs:604800000}});var oy4={};T8(oy4,{isKairosCronEnabled:()=>vN,isDurableCronEnabled:()=>Br,buildCronListPrompt:()=>Wp1,buildCronDeletePrompt:()=>Xp1,buildCronCreatePrompt:()=>Jp1,buildCronCreateDescription:()=>Hp1,DEFAULT_MAX_AGE_DAYS:()=>kq6,CRON_LIST_TOOL_NAME:()=>Ro6,CRON_LIST_DESCRIPTION:()=>Pp1,CRON_DELETE_TOOL_NAME:()=>Vq6,CRON_DELETE_DESCRIPTION:()=>Mp1,CRON_CREATE_TOOL_NAME:()=>xL});function vN(){return!i6(process.env.CLAUDE_CODE_DISABLE_CRON)&&gV("tengu_kairos_cron",!0,ry4)}function Br(){return gV("tengu_kairos_cron_durable",!0,ry4)}function Hp1(q){return q?"Schedule a prompt to run at a future time — either recurring on a cron schedule, or once at a specific time. Pass durable: true to persist to .claude/scheduled_tasks.json; otherwise session-only.":"Schedule a prompt to run at a future time within this Claude session — either recurring on a cron schedule, or once at a specific time."}function Jp1(q){return`Schedule a prompt to be enqueued at a future time. Use for both recurring schedules and one-shot reminders. |