@crewx/cron 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ # @crewx/cron
2
+
3
+ Cron scheduler for CrewX - schedule and execute crewx commands automatically.
4
+
5
+ ```bash
6
+ npx cron add "0 9 * * *" "@agent task" --name "Daily Task"
7
+ ```
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,357 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const commander_1 = require("commander");
40
+ function loadTracer() {
41
+ const candidates = [
42
+ path.join(__dirname, '../../../../skills/lib/skill-tracer.js'),
43
+ path.join(__dirname, '../../../skills/lib/skill-tracer.js'),
44
+ ];
45
+ for (const p of candidates) {
46
+ try {
47
+ if (fs.existsSync(p))
48
+ return require(p);
49
+ }
50
+ catch { }
51
+ }
52
+ return null;
53
+ }
54
+ const rawArgs = process.argv.slice(2);
55
+ if (rawArgs[0] === 'help' && rawArgs.length === 1) {
56
+ const skillMd = path.join(__dirname, '..', 'SKILL.md');
57
+ if (fs.existsSync(skillMd)) {
58
+ process.stdout.write(fs.readFileSync(skillMd, 'utf-8'));
59
+ process.exit(0);
60
+ }
61
+ }
62
+ const engine_1 = require("./src/engine");
63
+ commander_1.program
64
+ .name('cron')
65
+ .description('Cron Scheduler for CrewX - Schedule and execute crewx commands automatically')
66
+ .version('1.1.0');
67
+ commander_1.program
68
+ .command('add <cron> <command>')
69
+ .description('Add a new schedule')
70
+ .option('-n, --name <name>', 'Schedule name')
71
+ .option('-m, --mode <mode>', 'Execution mode: query, execute, or command', 'execute')
72
+ .option('-t, --timezone <tz>', 'Timezone (IANA format, e.g., Asia/Seoul)')
73
+ .option('-d, --dir <directory>', 'Working directory')
74
+ .option('--timeout <ms>', 'Timeout in milliseconds', '600000')
75
+ .option('--allow-concurrent', 'Allow concurrent executions')
76
+ .action((cron, command, options) => {
77
+ (0, engine_1.ensureDaemonRunning)();
78
+ const schedule = (0, engine_1.addSchedule)(cron, command, {
79
+ name: options.name,
80
+ mode: options.mode,
81
+ timezone: options.timezone,
82
+ dir: options.dir,
83
+ timeout: options.timeout,
84
+ allowConcurrent: options.allowConcurrent,
85
+ });
86
+ console.log(`Schedule created: ${schedule.id}`);
87
+ console.log(`Cron: ${cron} (${(0, engine_1.describeCron)(cron)})`);
88
+ console.log(`Command: ${command}`);
89
+ console.log(`Mode: ${schedule.mode}`);
90
+ if (schedule.timezone)
91
+ console.log(`Timezone: ${schedule.timezone}`);
92
+ if (schedule.next_run)
93
+ console.log(`Next run: ${new Date(schedule.next_run).toLocaleString()}`);
94
+ });
95
+ commander_1.program
96
+ .command('list')
97
+ .alias('ls')
98
+ .description('List all schedules')
99
+ .option('--json', 'Output as JSON')
100
+ .action((options) => {
101
+ (0, engine_1.ensureDaemonRunning)();
102
+ const schedules = (0, engine_1.loadSchedules)();
103
+ if (options.json) {
104
+ console.log(JSON.stringify(schedules, null, 2));
105
+ return;
106
+ }
107
+ if (schedules.length === 0) {
108
+ console.log('No schedules found.');
109
+ return;
110
+ }
111
+ console.log(`\nSchedules (${schedules.length}):\n`);
112
+ console.log('| ID | Name | Cron | Status | Command |');
113
+ console.log('|--------|----------------|-------------|--------|----------------------------|');
114
+ for (const s of schedules) {
115
+ const status = s.enabled ? 'ON ' : 'OFF';
116
+ const name = (s.name ?? '-').substring(0, 14).padEnd(14);
117
+ const cron = s.cron.substring(0, 11).padEnd(11);
118
+ const cmd = s.command.substring(0, 26).padEnd(26);
119
+ console.log(`| ${s.id} | ${name} | ${cron} | ${status} | ${cmd} |`);
120
+ }
121
+ console.log('');
122
+ });
123
+ commander_1.program
124
+ .command('remove <id>')
125
+ .alias('rm')
126
+ .description('Remove a schedule')
127
+ .action((id) => {
128
+ (0, engine_1.ensureDaemonRunning)();
129
+ try {
130
+ const removed = (0, engine_1.removeSchedule)(id);
131
+ console.log(`Removed schedule: ${id}`);
132
+ console.log(`Cron: ${removed.cron}`);
133
+ console.log(`Command: ${removed.command}`);
134
+ }
135
+ catch (e) {
136
+ const err = e;
137
+ console.error(err.message);
138
+ process.exit(1);
139
+ }
140
+ });
141
+ commander_1.program
142
+ .command('enable <id>')
143
+ .description('Enable a schedule')
144
+ .action((id) => {
145
+ (0, engine_1.ensureDaemonRunning)();
146
+ try {
147
+ (0, engine_1.enableSchedule)(id);
148
+ console.log(`Enabled schedule: ${id}`);
149
+ }
150
+ catch (e) {
151
+ const err = e;
152
+ console.error(err.message);
153
+ process.exit(1);
154
+ }
155
+ });
156
+ commander_1.program
157
+ .command('disable <id>')
158
+ .description('Disable a schedule')
159
+ .action((id) => {
160
+ (0, engine_1.ensureDaemonRunning)();
161
+ try {
162
+ (0, engine_1.disableSchedule)(id);
163
+ console.log(`Disabled schedule: ${id}`);
164
+ }
165
+ catch (e) {
166
+ const err = e;
167
+ console.error(err.message);
168
+ process.exit(1);
169
+ }
170
+ });
171
+ commander_1.program
172
+ .command('update <id>')
173
+ .description('Update a schedule')
174
+ .option('-c, --cron <cron>', 'New cron expression')
175
+ .option('-C, --command <command>', 'New command')
176
+ .option('-n, --name <name>', 'New name')
177
+ .option('-m, --mode <mode>', 'Execution mode: query, execute, or command')
178
+ .option('-t, --timezone <tz>', 'Timezone (IANA format)')
179
+ .option('-d, --dir <directory>', 'Working directory')
180
+ .option('--timeout <ms>', 'Timeout in milliseconds')
181
+ .option('--allow-concurrent', 'Allow concurrent executions')
182
+ .option('--no-allow-concurrent', 'Disallow concurrent executions')
183
+ .action((id, options) => {
184
+ (0, engine_1.ensureDaemonRunning)();
185
+ try {
186
+ const updateOpts = {
187
+ cron: options.cron,
188
+ command: options.command,
189
+ name: options.name,
190
+ mode: options.mode,
191
+ timezone: options.timezone,
192
+ working_directory: options.dir,
193
+ timeout_ms: options.timeout ? parseInt(options.timeout, 10) : undefined,
194
+ allow_concurrent: options.allowConcurrent,
195
+ };
196
+ const { schedule, changes } = (0, engine_1.updateSchedule)(id, updateOpts);
197
+ if (changes.length === 0) {
198
+ console.log('No changes specified. Use --cron, --command, --name, etc.');
199
+ process.exit(1);
200
+ }
201
+ console.log(`Updated schedule: ${id}`);
202
+ changes.forEach(c => console.log(` ${c}`));
203
+ if (schedule.next_run) {
204
+ console.log(`Next run: ${new Date(schedule.next_run).toLocaleString()}`);
205
+ }
206
+ }
207
+ catch (e) {
208
+ const err = e;
209
+ console.error(err.message);
210
+ process.exit(1);
211
+ }
212
+ });
213
+ commander_1.program
214
+ .command('info <id>')
215
+ .description('Show detailed information about a schedule')
216
+ .option('--json', 'Output as JSON')
217
+ .action((id, options) => {
218
+ (0, engine_1.ensureDaemonRunning)();
219
+ const schedules = (0, engine_1.loadSchedules)();
220
+ const schedule = schedules.find(s => s.id === id);
221
+ if (!schedule) {
222
+ console.error(`Schedule not found: ${id}`);
223
+ process.exit(1);
224
+ }
225
+ if (options.json) {
226
+ console.log(JSON.stringify(schedule, null, 2));
227
+ return;
228
+ }
229
+ console.log(`\nSchedule: ${schedule.id}`);
230
+ console.log('─'.repeat(40));
231
+ console.log(`Name: ${schedule.name ?? '-'}`);
232
+ console.log(`Cron: ${schedule.cron} (${(0, engine_1.describeCron)(schedule.cron)})`);
233
+ console.log(`Command: ${schedule.command}`);
234
+ console.log(`Mode: ${schedule.mode}`);
235
+ console.log(`Status: ${schedule.enabled ? 'Enabled' : 'Disabled'}`);
236
+ console.log(`Timezone: ${schedule.timezone ?? 'Local'}`);
237
+ console.log(`Working Dir: ${schedule.working_directory ?? 'Project root'}`);
238
+ console.log(`Timeout: ${schedule.timeout_ms / 1000}s`);
239
+ console.log(`Allow Concurrent: ${schedule.allow_concurrent ? 'Yes' : 'No'}`);
240
+ console.log('─'.repeat(40));
241
+ console.log(`Created: ${new Date(schedule.created_at).toLocaleString()}`);
242
+ console.log(`Updated: ${new Date(schedule.updated_at).toLocaleString()}`);
243
+ console.log(`Last Run: ${schedule.last_run ? new Date(schedule.last_run).toLocaleString() : 'Never'}`);
244
+ console.log(`Next Run: ${schedule.next_run ? new Date(schedule.next_run).toLocaleString() : 'Unknown'}`);
245
+ console.log(`Run Count: ${schedule.run_count ?? 0}`);
246
+ console.log('');
247
+ });
248
+ commander_1.program
249
+ .command('run <id>')
250
+ .description('Run a schedule immediately (for testing)')
251
+ .action(async (id) => {
252
+ (0, engine_1.ensureDaemonRunning)();
253
+ const schedules = (0, engine_1.loadSchedules)();
254
+ const schedule = schedules.find(s => s.id === id);
255
+ if (!schedule) {
256
+ console.error(`Schedule not found: ${id}`);
257
+ process.exit(1);
258
+ }
259
+ console.log(`Running schedule: ${id}`);
260
+ const result = await (0, engine_1.executeSchedule)(schedule);
261
+ console.log(`Result: ${result.success ? 'Success' : 'Failed'}`);
262
+ if (result.error)
263
+ console.log(`Error: ${result.error}`);
264
+ });
265
+ commander_1.program
266
+ .command('start')
267
+ .description('Start the cron daemon')
268
+ .action(() => {
269
+ if ((0, engine_1.isDaemonRunning)()) {
270
+ const status = (0, engine_1.getDaemonStatus)();
271
+ console.error(`Daemon already running (PID: ${status.pid ?? 'unknown'})`);
272
+ process.exit(1);
273
+ }
274
+ try {
275
+ const pid = (0, engine_1.startDaemon)();
276
+ console.log(`Cron daemon started (PID: ${pid})`);
277
+ console.log(`PID file: ${engine_1.DATA_PATHS.PID_FILE}`);
278
+ }
279
+ catch (e) {
280
+ const err = e;
281
+ console.error('Failed to start daemon:', err.message);
282
+ process.exit(1);
283
+ }
284
+ });
285
+ commander_1.program
286
+ .command('stop')
287
+ .description('Stop the cron daemon')
288
+ .action(() => {
289
+ try {
290
+ const stopped = (0, engine_1.stopDaemon)();
291
+ if (!stopped) {
292
+ console.error('Daemon not running');
293
+ process.exit(1);
294
+ }
295
+ console.log('Cron daemon stopped');
296
+ }
297
+ catch (e) {
298
+ const err = e;
299
+ console.error('Failed to stop daemon:', err.message);
300
+ process.exit(1);
301
+ }
302
+ });
303
+ commander_1.program
304
+ .command('status')
305
+ .description('Check daemon status')
306
+ .option('--json', 'Output as JSON')
307
+ .action((options) => {
308
+ const status = (0, engine_1.getDaemonStatus)();
309
+ if (options.json) {
310
+ console.log(JSON.stringify(status, null, 2));
311
+ return;
312
+ }
313
+ if (status.running && status.pid) {
314
+ console.log(`Daemon is running (PID: ${status.pid})`);
315
+ if (status.started_at) {
316
+ console.log(`Started: ${new Date(status.started_at).toLocaleString()}`);
317
+ }
318
+ }
319
+ else {
320
+ console.log('Daemon is not running');
321
+ }
322
+ console.log(`Schedules: ${status.schedules.enabled}/${status.schedules.total} enabled`);
323
+ });
324
+ commander_1.program
325
+ .command('daemon')
326
+ .description('Internal daemon command')
327
+ .option('--foreground', 'Run in foreground')
328
+ .action((options) => {
329
+ if (options.foreground) {
330
+ (0, engine_1.runDaemonForeground)();
331
+ }
332
+ else {
333
+ console.log('Use "cron start" to start the daemon');
334
+ }
335
+ });
336
+ const args = process.argv.slice(2);
337
+ if (args.length > 0 && args[0] !== 'daemon') {
338
+ (0, engine_1.logUsage)(args.join(' '));
339
+ }
340
+ const isDaemonForeground = args[0] === 'daemon' && args.includes('--foreground');
341
+ async function runMain() {
342
+ await commander_1.program.parseAsync(process.argv);
343
+ }
344
+ const tracer = isDaemonForeground ? null : loadTracer();
345
+ if (tracer) {
346
+ tracer.run('crewx/cron', runMain).catch((e) => {
347
+ console.error(e.message);
348
+ process.exit(1);
349
+ });
350
+ }
351
+ else {
352
+ runMain().catch((e) => {
353
+ console.error(e.message);
354
+ process.exit(1);
355
+ });
356
+ }
357
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { Schedule, ExecutionMode, ExecuteResult, DaemonStatus, UpdateOptions } from './types';
2
+ export type { Schedule, ExecutionMode, ExecuteResult, DaemonStatus, UpdateOptions };
3
+ export declare function generateId(): string;
4
+ export declare function getLocalTimestamp(): string;
5
+ export declare function logUsage(...args: string[]): void;
6
+ export declare function getProjectRoot(): string;
7
+ export declare function normalizeMode(mode: string): ExecutionMode;
8
+ export declare function loadSchedules(): Schedule[];
9
+ export declare function saveSchedules(schedules: Schedule[]): void;
10
+ export declare function acquireLock(timeout?: number): Promise<boolean>;
11
+ export declare function releaseLock(): void;
12
+ export declare function shouldRunNow(cronExpr: string, now: Date, timezone?: string | null): boolean;
13
+ export declare function describeCron(cronExpr: string): string;
14
+ export declare function calculateNextRun(cronExpr: string, timezone?: string | null): string | null;
15
+ export declare function isDaemonRunning(): boolean;
16
+ export declare function startDaemon(): number;
17
+ export declare function stopDaemon(): boolean;
18
+ export declare function ensureDaemonRunning(): void;
19
+ export declare function getDaemonStatus(): DaemonStatus;
20
+ export declare function executeSchedule(schedule: Schedule): Promise<ExecuteResult>;
21
+ export declare function daemonTick(): Promise<void>;
22
+ export declare function runDaemonForeground(): void;
23
+ export declare function addSchedule(cron: string, command: string, options: {
24
+ name?: string;
25
+ mode?: string;
26
+ timezone?: string;
27
+ dir?: string;
28
+ timeout?: string;
29
+ allowConcurrent?: boolean;
30
+ }): Schedule;
31
+ export declare function removeSchedule(id: string): Schedule;
32
+ export declare function enableSchedule(id: string): Schedule;
33
+ export declare function disableSchedule(id: string): Schedule;
34
+ export declare function updateSchedule(id: string, options: UpdateOptions): {
35
+ schedule: Schedule;
36
+ changes: string[];
37
+ };
38
+ export declare const DATA_PATHS: {
39
+ DATA_DIR: string;
40
+ SCHEDULES_FILE: string;
41
+ LOG_FILE: string;
42
+ USAGE_LOG_FILE: string;
43
+ PID_FILE: string;
44
+ };
45
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEnG,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AAsBpF,wBAAgB,UAAU,IAAI,MAAM,CAOnC;AAKD,wBAAgB,iBAAiB,IAAI,MAAM,CAS1C;AAKD,wBAAgB,QAAQ,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAMhD;AAsBD,wBAAgB,cAAc,IAAI,MAAM,CAMvC;AAmDD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAIzD;AASD,wBAAgB,aAAa,IAAI,QAAQ,EAAE,CAc1C;AAKD,wBAAgB,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAKzD;AAKD,wBAAsB,WAAW,CAAC,OAAO,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CA4BlE;AAKD,wBAAgB,WAAW,IAAI,IAAI,CAMlC;AAkBD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAuE3F;AAKD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoBrD;AAKD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAS1F;AAgDD,wBAAgB,eAAe,IAAI,OAAO,CAWzC;AAED,wBAAgB,WAAW,IAAI,MAAM,CAsBpC;AAED,wBAAgB,UAAU,IAAI,OAAO,CAcpC;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAW1C;AAED,wBAAgB,eAAe,IAAI,YAAY,CAwB9C;AASD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CA+EhF;AASD,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAchD;AAKD,wBAAgB,mBAAmB,IAAI,IAAI,CAsC1C;AASD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GACA,QAAQ,CAwBV;AAKD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAWnD;AAKD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAanD;AAKD,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAYpD;AAKD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAgD5G;AAGD,eAAO,MAAM,UAAU;;;;;;CAMtB,CAAC"}
@@ -0,0 +1,654 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DATA_PATHS = void 0;
37
+ exports.generateId = generateId;
38
+ exports.getLocalTimestamp = getLocalTimestamp;
39
+ exports.logUsage = logUsage;
40
+ exports.getProjectRoot = getProjectRoot;
41
+ exports.normalizeMode = normalizeMode;
42
+ exports.loadSchedules = loadSchedules;
43
+ exports.saveSchedules = saveSchedules;
44
+ exports.acquireLock = acquireLock;
45
+ exports.releaseLock = releaseLock;
46
+ exports.shouldRunNow = shouldRunNow;
47
+ exports.describeCron = describeCron;
48
+ exports.calculateNextRun = calculateNextRun;
49
+ exports.isDaemonRunning = isDaemonRunning;
50
+ exports.startDaemon = startDaemon;
51
+ exports.stopDaemon = stopDaemon;
52
+ exports.ensureDaemonRunning = ensureDaemonRunning;
53
+ exports.getDaemonStatus = getDaemonStatus;
54
+ exports.executeSchedule = executeSchedule;
55
+ exports.daemonTick = daemonTick;
56
+ exports.runDaemonForeground = runDaemonForeground;
57
+ exports.addSchedule = addSchedule;
58
+ exports.removeSchedule = removeSchedule;
59
+ exports.enableSchedule = enableSchedule;
60
+ exports.disableSchedule = disableSchedule;
61
+ exports.updateSchedule = updateSchedule;
62
+ const child_process_1 = require("child_process");
63
+ const path = __importStar(require("path"));
64
+ const fs = __importStar(require("fs"));
65
+ const DATA_DIR = path.join(process.cwd(), '.crewx');
66
+ const SCHEDULES_FILE = path.join(DATA_DIR, '.cron-data.json');
67
+ const LOG_FILE = path.join(DATA_DIR, '.cron-daemon.log');
68
+ const LOCK_FILE = path.join(DATA_DIR, '.cron-data.json.lock');
69
+ const USAGE_LOG_FILE = path.join(DATA_DIR, 'cron-usage.log');
70
+ const PID_FILE = path.join(DATA_DIR, '.cron-daemon.pid');
71
+ const DAEMON_INTERVAL_MS = 60 * 1000;
72
+ const runningSchedules = new Set();
73
+ function generateId() {
74
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
75
+ let result = '';
76
+ for (let i = 0; i < 6; i++) {
77
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
78
+ }
79
+ return result;
80
+ }
81
+ function getLocalTimestamp() {
82
+ const now = new Date();
83
+ const y = now.getFullYear();
84
+ const m = String(now.getMonth() + 1).padStart(2, '0');
85
+ const d = String(now.getDate()).padStart(2, '0');
86
+ const h = String(now.getHours()).padStart(2, '0');
87
+ const min = String(now.getMinutes()).padStart(2, '0');
88
+ const s = String(now.getSeconds()).padStart(2, '0');
89
+ return `${y}-${m}-${d} ${h}:${min}:${s}`;
90
+ }
91
+ function logUsage(...args) {
92
+ ensureDataDir();
93
+ const timestamp = getLocalTimestamp();
94
+ const message = args.join(' ');
95
+ const logLine = `${timestamp} | [cron] ${message}\n`;
96
+ fs.appendFileSync(USAGE_LOG_FILE, logLine);
97
+ }
98
+ function ensureDataDir() {
99
+ if (!fs.existsSync(DATA_DIR)) {
100
+ fs.mkdirSync(DATA_DIR, { recursive: true });
101
+ }
102
+ }
103
+ function safeReadJsonFile(filePath) {
104
+ try {
105
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'));
106
+ }
107
+ catch {
108
+ return null;
109
+ }
110
+ }
111
+ function getProjectRoot() {
112
+ try {
113
+ return (0, child_process_1.execSync)('git rev-parse --show-toplevel', { encoding: 'utf8' }).trim();
114
+ }
115
+ catch {
116
+ return process.cwd();
117
+ }
118
+ }
119
+ function getBuiltinMemoryCliPath() {
120
+ return path.join(getProjectRoot(), 'packages', 'built-in', 'memory', 'dist', 'cli.js');
121
+ }
122
+ function maybeRewriteLegacyMemoryCommand(command) {
123
+ if (!command.includes('/skills/memory-v2/memory-v2.js')) {
124
+ return command;
125
+ }
126
+ const builtinMemoryCli = getBuiltinMemoryCliPath();
127
+ return `node ${builtinMemoryCli} summarize-dirty`;
128
+ }
129
+ function migrateLegacyMemoryDebounceSchedule() {
130
+ ensureDataDir();
131
+ const legacyFile = path.join(getProjectRoot(), 'skills', 'cron', '.cron-data.json');
132
+ if (!fs.existsSync(legacyFile)) {
133
+ return;
134
+ }
135
+ const legacySchedules = safeReadJsonFile(legacyFile);
136
+ if (!Array.isArray(legacySchedules)) {
137
+ return;
138
+ }
139
+ const legacySchedule = legacySchedules.find(s => s.name === 'memory-debounce');
140
+ if (!legacySchedule) {
141
+ return;
142
+ }
143
+ const targetSchedules = fs.existsSync(SCHEDULES_FILE) ? safeReadJsonFile(SCHEDULES_FILE) ?? [] : [];
144
+ if (targetSchedules.some(s => s.name === 'memory-debounce')) {
145
+ return;
146
+ }
147
+ const migratedSchedule = {
148
+ ...legacySchedule,
149
+ command: maybeRewriteLegacyMemoryCommand(legacySchedule.command),
150
+ updated_at: new Date().toISOString(),
151
+ next_run: calculateNextRun(legacySchedule.cron, legacySchedule.timezone),
152
+ };
153
+ saveSchedules([...targetSchedules, migratedSchedule]);
154
+ }
155
+ function normalizeMode(mode) {
156
+ if (mode === 'query')
157
+ return 'query';
158
+ if (mode === 'command')
159
+ return 'command';
160
+ return 'execute';
161
+ }
162
+ function loadSchedules() {
163
+ ensureDataDir();
164
+ migrateLegacyMemoryDebounceSchedule();
165
+ if (!fs.existsSync(SCHEDULES_FILE)) {
166
+ return [];
167
+ }
168
+ try {
169
+ const data = fs.readFileSync(SCHEDULES_FILE, 'utf8');
170
+ return JSON.parse(data);
171
+ }
172
+ catch (e) {
173
+ const err = e;
174
+ console.error('Failed to load schedules:', err.message);
175
+ return [];
176
+ }
177
+ }
178
+ function saveSchedules(schedules) {
179
+ ensureDataDir();
180
+ const tempFile = `${SCHEDULES_FILE}.tmp`;
181
+ fs.writeFileSync(tempFile, JSON.stringify(schedules, null, 2));
182
+ fs.renameSync(tempFile, SCHEDULES_FILE);
183
+ }
184
+ async function acquireLock(timeout = 5000) {
185
+ ensureDataDir();
186
+ const startTime = Date.now();
187
+ while (Date.now() - startTime < timeout) {
188
+ try {
189
+ fs.writeFileSync(LOCK_FILE, String(process.pid), { flag: 'wx' });
190
+ return true;
191
+ }
192
+ catch (e) {
193
+ const err = e;
194
+ if (err.code === 'EEXIST') {
195
+ try {
196
+ const stat = fs.statSync(LOCK_FILE);
197
+ if (Date.now() - stat.mtimeMs > 30000) {
198
+ fs.unlinkSync(LOCK_FILE);
199
+ continue;
200
+ }
201
+ }
202
+ catch {
203
+ continue;
204
+ }
205
+ await new Promise(resolve => setTimeout(resolve, 100));
206
+ }
207
+ else {
208
+ throw e;
209
+ }
210
+ }
211
+ }
212
+ return false;
213
+ }
214
+ function releaseLock() {
215
+ try {
216
+ fs.unlinkSync(LOCK_FILE);
217
+ }
218
+ catch {
219
+ }
220
+ }
221
+ function shouldRunNow(cronExpr, now, timezone) {
222
+ let checkDate = now;
223
+ if (timezone) {
224
+ try {
225
+ const formatter = new Intl.DateTimeFormat('en-US', {
226
+ timeZone: timezone,
227
+ year: 'numeric',
228
+ month: '2-digit',
229
+ day: '2-digit',
230
+ hour: '2-digit',
231
+ minute: '2-digit',
232
+ hour12: false,
233
+ });
234
+ const parts = formatter.formatToParts(now);
235
+ const getPart = (type) => parseInt(parts.find(p => p.type === type)?.value ?? '0', 10);
236
+ const year = getPart('year');
237
+ const month = getPart('month');
238
+ const day = getPart('day');
239
+ checkDate = {
240
+ getMinutes: () => getPart('minute'),
241
+ getHours: () => getPart('hour'),
242
+ getDate: () => getPart('day'),
243
+ getMonth: () => getPart('month') - 1,
244
+ getDay: () => new Date(year, month - 1, day).getDay(),
245
+ };
246
+ }
247
+ catch {
248
+ console.error(`Invalid timezone: ${timezone}, using local time`);
249
+ }
250
+ }
251
+ const fields = cronExpr.trim().split(/\s+/);
252
+ if (fields.length !== 5) {
253
+ console.error(`Invalid cron expression: ${cronExpr}`);
254
+ return false;
255
+ }
256
+ const [minute, hour, dayOfMonth, month, dayOfWeek] = fields;
257
+ const matchField = (field, value) => {
258
+ if (field === '*')
259
+ return true;
260
+ if (field.startsWith('*/')) {
261
+ const step = parseInt(field.slice(2), 10);
262
+ return value % step === 0;
263
+ }
264
+ if (field.includes('-')) {
265
+ const [start, end] = field.split('-').map(Number);
266
+ return value >= start && value <= end;
267
+ }
268
+ if (field.includes(',')) {
269
+ return field.split(',').map(Number).includes(value);
270
+ }
271
+ return parseInt(field, 10) === value;
272
+ };
273
+ const m = checkDate.getMinutes();
274
+ const h = checkDate.getHours();
275
+ const dom = checkDate.getDate();
276
+ const mon = checkDate.getMonth() + 1;
277
+ const dow = checkDate.getDay();
278
+ return (matchField(minute, m) &&
279
+ matchField(hour, h) &&
280
+ matchField(dayOfMonth, dom) &&
281
+ matchField(month, mon) &&
282
+ matchField(dayOfWeek, dow));
283
+ }
284
+ function describeCron(cronExpr) {
285
+ const fields = cronExpr.trim().split(/\s+/);
286
+ if (fields.length !== 5)
287
+ return cronExpr;
288
+ const [minute, hour, dayOfMonth, month, dayOfWeek] = fields;
289
+ if (minute === '0' && hour !== '*' && dayOfMonth === '*' && month === '*' && dayOfWeek === '*') {
290
+ return `Daily at ${hour}:00`;
291
+ }
292
+ if (minute !== '*' && hour !== '*' && dayOfMonth === '*' && month === '*' && dayOfWeek === '*') {
293
+ return `Daily at ${hour}:${minute.padStart(2, '0')}`;
294
+ }
295
+ if (cronExpr === '* * * * *') {
296
+ return 'Every minute';
297
+ }
298
+ if (minute === '*/5' && hour === '*' && dayOfMonth === '*' && month === '*' && dayOfWeek === '*') {
299
+ return 'Every 5 minutes';
300
+ }
301
+ return cronExpr;
302
+ }
303
+ function calculateNextRun(cronExpr, timezone) {
304
+ const now = new Date();
305
+ for (let i = 1; i <= 1440; i++) {
306
+ const checkTime = new Date(now.getTime() + i * 60000);
307
+ if (shouldRunNow(cronExpr, checkTime, timezone)) {
308
+ return checkTime.toISOString();
309
+ }
310
+ }
311
+ return null;
312
+ }
313
+ function readDaemonPid() {
314
+ try {
315
+ const raw = fs.readFileSync(PID_FILE, 'utf8').trim();
316
+ const pid = Number.parseInt(raw, 10);
317
+ return Number.isInteger(pid) && pid > 0 ? pid : null;
318
+ }
319
+ catch {
320
+ return null;
321
+ }
322
+ }
323
+ function writeDaemonPid(pid) {
324
+ ensureDataDir();
325
+ fs.writeFileSync(PID_FILE, `${pid}\n`);
326
+ }
327
+ function removeDaemonPidFile() {
328
+ try {
329
+ fs.unlinkSync(PID_FILE);
330
+ }
331
+ catch {
332
+ }
333
+ }
334
+ function isPidAlive(pid) {
335
+ try {
336
+ process.kill(pid, 0);
337
+ return true;
338
+ }
339
+ catch (e) {
340
+ const err = e;
341
+ if (err.code === 'EPERM')
342
+ return true;
343
+ return false;
344
+ }
345
+ }
346
+ function getDaemonCliPath() {
347
+ const distCli = path.join(__dirname, '..', 'cli.js');
348
+ if (fs.existsSync(distCli)) {
349
+ return distCli;
350
+ }
351
+ throw new Error(`Cron CLI entrypoint not found: ${distCli}`);
352
+ }
353
+ function isDaemonRunning() {
354
+ const pid = readDaemonPid();
355
+ if (!pid) {
356
+ return false;
357
+ }
358
+ const alive = isPidAlive(pid);
359
+ if (!alive) {
360
+ removeDaemonPidFile();
361
+ }
362
+ return alive;
363
+ }
364
+ function startDaemon() {
365
+ if (isDaemonRunning()) {
366
+ const pid = readDaemonPid();
367
+ if (pid)
368
+ return pid;
369
+ throw new Error('Daemon is already running');
370
+ }
371
+ ensureDataDir();
372
+ const cliPath = getDaemonCliPath();
373
+ const child = (0, child_process_1.spawn)('node', [cliPath, 'daemon', '--foreground'], {
374
+ detached: true,
375
+ stdio: 'ignore',
376
+ windowsHide: true,
377
+ });
378
+ if (!child.pid) {
379
+ throw new Error('Failed to start daemon: no PID returned');
380
+ }
381
+ child.unref();
382
+ writeDaemonPid(child.pid);
383
+ return child.pid;
384
+ }
385
+ function stopDaemon() {
386
+ const pid = readDaemonPid();
387
+ if (!pid) {
388
+ removeDaemonPidFile();
389
+ return false;
390
+ }
391
+ if (!isPidAlive(pid)) {
392
+ removeDaemonPidFile();
393
+ return false;
394
+ }
395
+ process.kill(pid, 'SIGTERM');
396
+ return true;
397
+ }
398
+ function ensureDaemonRunning() {
399
+ if (isDaemonRunning())
400
+ return;
401
+ console.log('⚡ cron 데몬이 꺼져 있어서 자동 시작합니다...');
402
+ try {
403
+ startDaemon();
404
+ }
405
+ catch (e) {
406
+ const err = e;
407
+ console.error('Failed to auto-start daemon:', err.message);
408
+ process.exit(1);
409
+ }
410
+ }
411
+ function getDaemonStatus() {
412
+ const schedules = loadSchedules();
413
+ const enabled = schedules.filter(s => s.enabled).length;
414
+ const pid = readDaemonPid();
415
+ const running = pid !== null && isDaemonRunning();
416
+ let started_at = null;
417
+ if (running && fs.existsSync(PID_FILE)) {
418
+ try {
419
+ started_at = fs.statSync(PID_FILE).mtime.toISOString();
420
+ }
421
+ catch {
422
+ started_at = null;
423
+ }
424
+ }
425
+ return {
426
+ running,
427
+ pid: running ? pid : null,
428
+ started_at,
429
+ schedules: {
430
+ total: schedules.length,
431
+ enabled,
432
+ },
433
+ };
434
+ }
435
+ async function executeSchedule(schedule) {
436
+ if (!schedule.allow_concurrent && runningSchedules.has(schedule.id)) {
437
+ console.log(`[${getLocalTimestamp()}] Schedule ${schedule.id} already running, skipping`);
438
+ return { success: false, error: 'Already running' };
439
+ }
440
+ runningSchedules.add(schedule.id);
441
+ const workingDir = schedule.working_directory || getProjectRoot();
442
+ const mode = schedule.mode;
443
+ const modeFlag = mode === 'execute' ? 'x' : 'q';
444
+ console.log(`[${getLocalTimestamp()}] Executing schedule ${schedule.id}: ${schedule.name ?? schedule.cron}`);
445
+ console.log(`[${getLocalTimestamp()}] Command: ${schedule.command}`);
446
+ return new Promise((resolve) => {
447
+ const env = { ...process.env, ...schedule.env };
448
+ delete env['CLAUDECODE'];
449
+ const child = mode === 'command'
450
+ ? (0, child_process_1.spawn)('sh', ['-c', schedule.command], {
451
+ cwd: workingDir,
452
+ stdio: 'inherit',
453
+ windowsHide: true,
454
+ env,
455
+ })
456
+ : (0, child_process_1.spawn)('crewx', [modeFlag, schedule.command], {
457
+ cwd: workingDir,
458
+ stdio: 'inherit',
459
+ windowsHide: true,
460
+ env,
461
+ });
462
+ const timeout = setTimeout(() => {
463
+ console.log(`[${getLocalTimestamp()}] Schedule ${schedule.id} timeout, killing process`);
464
+ try {
465
+ child.kill('SIGTERM');
466
+ }
467
+ catch (e) {
468
+ const err = e;
469
+ console.error(`Failed to kill process: ${err.message}`);
470
+ }
471
+ runningSchedules.delete(schedule.id);
472
+ resolve({ success: false, error: 'Timeout' });
473
+ }, schedule.timeout_ms || 600000);
474
+ child.on('close', (code) => {
475
+ clearTimeout(timeout);
476
+ runningSchedules.delete(schedule.id);
477
+ const schedules = loadSchedules();
478
+ const idx = schedules.findIndex(s => s.id === schedule.id);
479
+ if (idx !== -1) {
480
+ const s = schedules[idx];
481
+ s.last_run = new Date().toISOString();
482
+ s.run_count = (s.run_count || 0) + 1;
483
+ s.next_run = calculateNextRun(schedule.cron, schedule.timezone);
484
+ saveSchedules(schedules);
485
+ }
486
+ if (code === 0) {
487
+ console.log(`[${getLocalTimestamp()}] Schedule ${schedule.id} completed successfully`);
488
+ resolve({ success: true });
489
+ }
490
+ else {
491
+ console.log(`[${getLocalTimestamp()}] Schedule ${schedule.id} failed with code ${code}`);
492
+ resolve({ success: false, error: `Exit code: ${code}` });
493
+ }
494
+ });
495
+ child.on('error', (err) => {
496
+ clearTimeout(timeout);
497
+ runningSchedules.delete(schedule.id);
498
+ console.error(`[${getLocalTimestamp()}] Schedule ${schedule.id} error: ${err.message}`);
499
+ resolve({ success: false, error: err.message });
500
+ });
501
+ });
502
+ }
503
+ async function daemonTick() {
504
+ const now = new Date();
505
+ const schedules = loadSchedules();
506
+ const enabledSchedules = schedules.filter(s => s.enabled);
507
+ if (enabledSchedules.length === 0) {
508
+ return;
509
+ }
510
+ for (const schedule of enabledSchedules) {
511
+ if (shouldRunNow(schedule.cron, now, schedule.timezone)) {
512
+ await executeSchedule(schedule);
513
+ }
514
+ }
515
+ }
516
+ function runDaemonForeground() {
517
+ writeDaemonPid(process.pid);
518
+ let cleanedUp = false;
519
+ const cleanup = () => {
520
+ if (cleanedUp)
521
+ return;
522
+ cleanedUp = true;
523
+ const pid = readDaemonPid();
524
+ if (pid === process.pid) {
525
+ removeDaemonPidFile();
526
+ }
527
+ };
528
+ process.on('SIGTERM', () => {
529
+ cleanup();
530
+ process.exit(0);
531
+ });
532
+ process.on('SIGINT', () => {
533
+ cleanup();
534
+ process.exit(0);
535
+ });
536
+ process.on('exit', cleanup);
537
+ console.log(`[${getLocalTimestamp()}] Cron daemon starting in foreground mode`);
538
+ console.log(`[${getLocalTimestamp()}] Check interval: 1 minute`);
539
+ console.log(`[${getLocalTimestamp()}] Press Ctrl+C to stop\n`);
540
+ const schedules = loadSchedules();
541
+ const enabled = schedules.filter(s => s.enabled).length;
542
+ console.log(`[${getLocalTimestamp()}] Active schedules: ${enabled}/${schedules.length}\n`);
543
+ void daemonTick();
544
+ setInterval(() => {
545
+ void daemonTick();
546
+ }, DAEMON_INTERVAL_MS);
547
+ }
548
+ function addSchedule(cron, command, options) {
549
+ const schedule = {
550
+ id: generateId(),
551
+ cron,
552
+ command,
553
+ mode: normalizeMode(options.mode ?? 'execute'),
554
+ enabled: true,
555
+ name: options.name ?? null,
556
+ working_directory: options.dir ?? null,
557
+ timezone: options.timezone ?? null,
558
+ timeout_ms: parseInt(options.timeout ?? '600000', 10),
559
+ allow_concurrent: options.allowConcurrent ?? false,
560
+ created_at: new Date().toISOString(),
561
+ updated_at: new Date().toISOString(),
562
+ run_count: 0,
563
+ };
564
+ schedule.next_run = calculateNextRun(cron, schedule.timezone);
565
+ const schedules = loadSchedules();
566
+ schedules.push(schedule);
567
+ saveSchedules(schedules);
568
+ return schedule;
569
+ }
570
+ function removeSchedule(id) {
571
+ const schedules = loadSchedules();
572
+ const idx = schedules.findIndex(s => s.id === id);
573
+ if (idx === -1) {
574
+ throw new Error(`Schedule not found: ${id}`);
575
+ }
576
+ const removed = schedules.splice(idx, 1)[0];
577
+ saveSchedules(schedules);
578
+ return removed;
579
+ }
580
+ function enableSchedule(id) {
581
+ const schedules = loadSchedules();
582
+ const schedule = schedules.find(s => s.id === id);
583
+ if (!schedule) {
584
+ throw new Error(`Schedule not found: ${id}`);
585
+ }
586
+ schedule.enabled = true;
587
+ schedule.updated_at = new Date().toISOString();
588
+ schedule.next_run = calculateNextRun(schedule.cron, schedule.timezone);
589
+ saveSchedules(schedules);
590
+ return schedule;
591
+ }
592
+ function disableSchedule(id) {
593
+ const schedules = loadSchedules();
594
+ const schedule = schedules.find(s => s.id === id);
595
+ if (!schedule) {
596
+ throw new Error(`Schedule not found: ${id}`);
597
+ }
598
+ schedule.enabled = false;
599
+ schedule.updated_at = new Date().toISOString();
600
+ saveSchedules(schedules);
601
+ return schedule;
602
+ }
603
+ function updateSchedule(id, options) {
604
+ const schedules = loadSchedules();
605
+ const schedule = schedules.find(s => s.id === id);
606
+ if (!schedule) {
607
+ throw new Error(`Schedule not found: ${id}`);
608
+ }
609
+ const changes = [];
610
+ if (options.cron !== undefined) {
611
+ schedule.cron = options.cron;
612
+ changes.push(`cron: ${options.cron}`);
613
+ }
614
+ if (options.command !== undefined) {
615
+ schedule.command = options.command;
616
+ changes.push(`command: ${options.command}`);
617
+ }
618
+ if (options.name !== undefined) {
619
+ schedule.name = options.name;
620
+ changes.push(`name: ${options.name}`);
621
+ }
622
+ if (options.mode !== undefined) {
623
+ schedule.mode = normalizeMode(options.mode);
624
+ changes.push(`mode: ${schedule.mode}`);
625
+ }
626
+ if (options.timezone !== undefined) {
627
+ schedule.timezone = options.timezone;
628
+ changes.push(`timezone: ${options.timezone}`);
629
+ }
630
+ if (options.working_directory !== undefined) {
631
+ schedule.working_directory = options.working_directory;
632
+ changes.push(`working_directory: ${options.working_directory}`);
633
+ }
634
+ if (options.timeout_ms !== undefined) {
635
+ schedule.timeout_ms = options.timeout_ms;
636
+ changes.push(`timeout: ${options.timeout_ms}ms`);
637
+ }
638
+ if (options.allow_concurrent !== undefined) {
639
+ schedule.allow_concurrent = options.allow_concurrent;
640
+ changes.push(`allow_concurrent: ${options.allow_concurrent}`);
641
+ }
642
+ schedule.updated_at = new Date().toISOString();
643
+ schedule.next_run = calculateNextRun(schedule.cron, schedule.timezone);
644
+ saveSchedules(schedules);
645
+ return { schedule, changes };
646
+ }
647
+ exports.DATA_PATHS = {
648
+ DATA_DIR,
649
+ SCHEDULES_FILE,
650
+ LOG_FILE,
651
+ USAGE_LOG_FILE,
652
+ PID_FILE,
653
+ };
654
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export type ExecutionMode = 'query' | 'execute' | 'command';
2
+ export interface Schedule {
3
+ id: string;
4
+ cron: string;
5
+ command: string;
6
+ mode: ExecutionMode;
7
+ enabled: boolean;
8
+ name: string | null;
9
+ working_directory: string | null;
10
+ timezone: string | null;
11
+ timeout_ms: number;
12
+ allow_concurrent: boolean;
13
+ env?: Record<string, string>;
14
+ created_at: string;
15
+ updated_at: string;
16
+ run_count: number;
17
+ last_run?: string;
18
+ next_run?: string | null;
19
+ }
20
+ export interface DaemonStatus {
21
+ running: boolean;
22
+ pid: number | null;
23
+ started_at: string | null;
24
+ schedules: {
25
+ total: number;
26
+ enabled: number;
27
+ };
28
+ }
29
+ export interface ExecuteResult {
30
+ success: boolean;
31
+ error?: string;
32
+ }
33
+ export interface UpdateOptions {
34
+ cron?: string;
35
+ command?: string;
36
+ name?: string;
37
+ mode?: string;
38
+ timezone?: string;
39
+ working_directory?: string;
40
+ timeout_ms?: number;
41
+ allow_concurrent?: boolean;
42
+ }
43
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@crewx/cron",
3
+ "version": "0.1.0",
4
+ "description": "Cron Scheduler for CrewX - Schedule and execute crewx commands automatically",
5
+ "type": "commonjs",
6
+ "main": "dist/src/engine.js",
7
+ "types": "dist/src/engine.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "require": "./dist/src/engine.js",
11
+ "types": "./dist/src/engine.d.ts"
12
+ }
13
+ },
14
+ "bin": { "cron": "./dist/cli.js" },
15
+ "files": ["dist"],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "dev": "ts-node cli.ts",
19
+ "clean": "rm -rf dist"
20
+ },
21
+ "keywords": ["crewx", "cron", "scheduler", "automation"],
22
+ "license": "MIT",
23
+ "dependencies": {
24
+ "commander": "^12.0.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^20.0.0",
28
+ "ts-node": "^10.9.0",
29
+ "typescript": "^5.0.0"
30
+ },
31
+ "engines": {
32
+ "node": ">=18.0.0"
33
+ }
34
+ }