@ecmaos/coreutils 0.3.0 → 0.4.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.
Files changed (69) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +68 -0
  3. package/dist/commands/cron.d.ts +4 -0
  4. package/dist/commands/cron.d.ts.map +1 -0
  5. package/dist/commands/cron.js +532 -0
  6. package/dist/commands/cron.js.map +1 -0
  7. package/dist/commands/env.d.ts +4 -0
  8. package/dist/commands/env.d.ts.map +1 -0
  9. package/dist/commands/env.js +129 -0
  10. package/dist/commands/env.js.map +1 -0
  11. package/dist/commands/head.d.ts.map +1 -1
  12. package/dist/commands/head.js +184 -77
  13. package/dist/commands/head.js.map +1 -1
  14. package/dist/commands/less.d.ts.map +1 -1
  15. package/dist/commands/less.js +1 -0
  16. package/dist/commands/less.js.map +1 -1
  17. package/dist/commands/man.d.ts.map +1 -1
  18. package/dist/commands/man.js +13 -1
  19. package/dist/commands/man.js.map +1 -1
  20. package/dist/commands/mount.d.ts +4 -0
  21. package/dist/commands/mount.d.ts.map +1 -0
  22. package/dist/commands/mount.js +1041 -0
  23. package/dist/commands/mount.js.map +1 -0
  24. package/dist/commands/open.d.ts +4 -0
  25. package/dist/commands/open.d.ts.map +1 -0
  26. package/dist/commands/open.js +74 -0
  27. package/dist/commands/open.js.map +1 -0
  28. package/dist/commands/play.d.ts +4 -0
  29. package/dist/commands/play.d.ts.map +1 -0
  30. package/dist/commands/play.js +231 -0
  31. package/dist/commands/play.js.map +1 -0
  32. package/dist/commands/tar.d.ts.map +1 -1
  33. package/dist/commands/tar.js +67 -17
  34. package/dist/commands/tar.js.map +1 -1
  35. package/dist/commands/umount.d.ts +4 -0
  36. package/dist/commands/umount.d.ts.map +1 -0
  37. package/dist/commands/umount.js +104 -0
  38. package/dist/commands/umount.js.map +1 -0
  39. package/dist/commands/video.d.ts +4 -0
  40. package/dist/commands/video.d.ts.map +1 -0
  41. package/dist/commands/video.js +250 -0
  42. package/dist/commands/video.js.map +1 -0
  43. package/dist/commands/view.d.ts +5 -0
  44. package/dist/commands/view.d.ts.map +1 -0
  45. package/dist/commands/view.js +830 -0
  46. package/dist/commands/view.js.map +1 -0
  47. package/dist/commands/web.d.ts +4 -0
  48. package/dist/commands/web.d.ts.map +1 -0
  49. package/dist/commands/web.js +348 -0
  50. package/dist/commands/web.js.map +1 -0
  51. package/dist/index.d.ts +9 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +29 -2
  54. package/dist/index.js.map +1 -1
  55. package/package.json +11 -2
  56. package/src/commands/cron.ts +591 -0
  57. package/src/commands/env.ts +143 -0
  58. package/src/commands/head.ts +176 -77
  59. package/src/commands/less.ts +1 -0
  60. package/src/commands/man.ts +12 -1
  61. package/src/commands/mount.ts +1193 -0
  62. package/src/commands/open.ts +84 -0
  63. package/src/commands/play.ts +249 -0
  64. package/src/commands/tar.ts +62 -19
  65. package/src/commands/umount.ts +117 -0
  66. package/src/commands/video.ts +267 -0
  67. package/src/commands/view.ts +916 -0
  68. package/src/commands/web.ts +377 -0
  69. package/src/index.ts +29 -2
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ecmaos/coreutils",
3
3
  "description": "ecmaOS: Core utilities for the ecmaOS framework",
4
- "version": "0.3.0",
4
+ "version": "0.4.0",
5
5
  "license": "MIT+Apache-2.0",
6
6
  "homepage": "https://ecmaos.sh",
7
7
  "repository": "https://github.com/ecmaos/ecmaos",
@@ -22,16 +22,25 @@
22
22
  "access": "public"
23
23
  },
24
24
  "dependencies": {
25
+ "@alenaksu/json-viewer": "^2.1.2",
26
+ "@aws-sdk/client-s3": "^3.965.0",
27
+ "@zenfs/archives": "^1.3.1",
28
+ "@zenfs/cloud": "^0.2.4",
25
29
  "@zenfs/core": "^2.4.4",
30
+ "@zenfs/dom": "^1.2.5",
26
31
  "@zip.js/zip.js": "^2.7.52",
27
32
  "ansi-escape-sequences": "^6.2.4",
28
33
  "chalk": "^5.3.0",
29
34
  "columnify": "^1.6.0",
30
35
  "command-line-args": "^6.0.0",
31
36
  "command-line-usage": "^7.0.3",
37
+ "cron-schedule": "^6.0.0",
38
+ "cronstrue": "^3.9.0",
39
+ "dropbox": "^10.34.0",
32
40
  "human-format": "^1.2.1",
41
+ "marked": "^17.0.1",
33
42
  "modern-tar": "^0.7.3",
34
- "@ecmaos/types": "^0.6.0"
43
+ "@ecmaos/types": "^0.7.0"
35
44
  },
36
45
  "devDependencies": {
37
46
  "@types/ansi-escape-sequences": "^4.0.4",
@@ -0,0 +1,591 @@
1
+ import path from 'path'
2
+ import type { Kernel, Process, Shell, Terminal } from '@ecmaos/types'
3
+ import { TerminalCommand } from '../shared/terminal-command.js'
4
+ import { writelnStdout, writelnStderr } from '../shared/helpers.js'
5
+ import { parseCronExpression } from 'cron-schedule'
6
+ import cronstrue from 'cronstrue'
7
+
8
+ interface CrontabEntry {
9
+ expression: string
10
+ command: string
11
+ lineNumber: number
12
+ }
13
+
14
+ /**
15
+ * Parse a single crontab line
16
+ * @param line - The line to parse
17
+ * @returns Parsed entry or null if line is empty/comment
18
+ */
19
+ function parseCrontabLine(line: string): { expression: string, command: string } | null {
20
+ const trimmed = line.trim()
21
+
22
+ // Skip empty lines and comments
23
+ if (trimmed === '' || trimmed.startsWith('#')) {
24
+ return null
25
+ }
26
+
27
+ // Split by whitespace - cron expression is first 5 or 6 fields
28
+ const parts = trimmed.split(/\s+/)
29
+
30
+ if (parts.length < 6) {
31
+ // Need at least 5 fields for cron expression + command
32
+ return null
33
+ }
34
+
35
+ // Standard format: minute hour day month weekday command (5 fields + command)
36
+ // Extended format: second minute hour day month weekday command (6 fields + command)
37
+ // We need to determine which format is being used
38
+ let expression: string
39
+ let command: string
40
+
41
+ // If we have exactly 6 parts, assume 5-field format (5 cron fields + 1 command word)
42
+ // This is the most common case
43
+ if (parts.length === 6) {
44
+ // 5-field format: minute hour day month weekday command
45
+ expression = parts.slice(0, 5).join(' ')
46
+ command = parts[5] || ''
47
+ } else {
48
+ // 7+ parts: could be 5-field with multi-word command or 6-field format
49
+ // Try 6-field format FIRST (if user wrote 6 fields, they probably meant 6 fields)
50
+ // Then fall back to 5-field if 6-field is invalid
51
+ const potential5Field = parts.slice(0, 5).join(' ')
52
+ const potential6Field = parts.slice(0, 6).join(' ')
53
+
54
+ let valid5Field = false
55
+ let valid6Field = false
56
+
57
+ // Try to validate 6-field format first
58
+ try {
59
+ parseCronExpression(potential6Field)
60
+ valid6Field = true
61
+ } catch {
62
+ // Not a valid 6-field expression
63
+ }
64
+
65
+ // Try to validate 5-field format
66
+ try {
67
+ parseCronExpression(potential5Field)
68
+ valid5Field = true
69
+ } catch {
70
+ // Not a valid 5-field expression
71
+ }
72
+
73
+ // Prefer 6-field format if valid (user wrote 6 fields, so use them)
74
+ // Only use 5-field if 6-field is invalid
75
+ if (valid6Field) {
76
+ expression = potential6Field
77
+ command = parts.slice(6).join(' ')
78
+ } else if (valid5Field) {
79
+ expression = potential5Field
80
+ command = parts.slice(5).join(' ')
81
+ } else {
82
+ // Neither format is valid, return null
83
+ return null
84
+ }
85
+ }
86
+
87
+ // Validate the expression
88
+ try {
89
+ parseCronExpression(expression)
90
+ } catch {
91
+ return null
92
+ }
93
+
94
+ command = command.trim()
95
+ return { expression, command }
96
+ }
97
+
98
+ /**
99
+ * Parse a complete crontab file
100
+ * @param content - The crontab file content
101
+ * @returns Array of parsed crontab entries
102
+ */
103
+ function parseCrontabFile(content: string): CrontabEntry[] {
104
+ const lines = content.split('\n')
105
+ const entries: CrontabEntry[] = []
106
+
107
+ for (let i = 0; i < lines.length; i++) {
108
+ const line = lines[i]?.trim()
109
+ if (!line) continue
110
+ const parsed = parseCrontabLine(line)
111
+
112
+ if (parsed) {
113
+ entries.push({
114
+ expression: parsed.expression,
115
+ command: parsed.command,
116
+ lineNumber: i + 1
117
+ })
118
+ }
119
+ }
120
+
121
+ return entries
122
+ }
123
+
124
+ /**
125
+ * Get human-readable description of a cron expression
126
+ * @param expression - The cron expression
127
+ * @returns Human-readable description or null if parsing fails
128
+ */
129
+ function getHumanReadableDescription(expression: string): string | null {
130
+ try {
131
+ return cronstrue.toString(expression, {
132
+ throwExceptionOnParseError: false,
133
+ verbose: false
134
+ })
135
+ } catch {
136
+ return null
137
+ }
138
+ }
139
+
140
+ function printUsage(process: Process | undefined, terminal: Terminal): void {
141
+ const usage = `Usage: cron [COMMAND] [OPTIONS]
142
+
143
+ Manage scheduled tasks (crontabs).
144
+
145
+ Options:
146
+ --help display this help and exit
147
+
148
+ Commands:
149
+ list List all active cron jobs
150
+ add <schedule> <cmd> Add a new cron job to user crontab
151
+ remove <id> Remove a cron job by ID
152
+ edit Open user crontab in editor
153
+ validate <expression> Validate a cron expression
154
+ next <expression> [N] Show next N execution times (default: 1)
155
+ test <expression> Test if expression matches current time
156
+ reload Reload crontabs from files
157
+
158
+ Examples:
159
+ cron list List all cron jobs
160
+ cron add "*/5 * * * *" "echo hello" Add job to run every 5 minutes
161
+ cron add "* * * * * *" "echo hello" Add job to run every second (6-field)
162
+ cron add "0 0 * * *" "echo daily" Add daily job at midnight
163
+ cron remove cron:user:1 Remove user cron job #1
164
+ cron validate "*/5 * * * *" Validate cron expression
165
+ cron next "*/5 * * * *" 5 Show next 5 execution times
166
+ cron test "*/5 * * * *" Test if expression matches now
167
+
168
+ Crontab format:
169
+ Both 5-field and 6-field cron expressions are supported:
170
+
171
+ 5-field (standard): minute hour day month weekday command
172
+ Example: "*/5 * * * *" runs every 5 minutes
173
+
174
+ 6-field (extended): second minute hour day month weekday command
175
+ Example: "* * * * * *" runs every second
176
+ Example: "0 */5 * * * *" runs every 5 minutes at :00 seconds`
177
+ writelnStderr(process, terminal, usage)
178
+ }
179
+
180
+ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal): TerminalCommand {
181
+ return new TerminalCommand({
182
+ command: 'cron',
183
+ description: 'Manage scheduled tasks (crontabs)',
184
+ kernel,
185
+ shell,
186
+ terminal,
187
+ run: async (pid: number, argv: string[]) => {
188
+ const process = kernel.processes.get(pid) as Process | undefined
189
+
190
+ if (argv.length === 0 || (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h'))) {
191
+ printUsage(process, terminal)
192
+ return 0
193
+ }
194
+
195
+ const subcommand = argv[0]
196
+
197
+ try {
198
+ switch (subcommand) {
199
+ case 'list': {
200
+ const cronJobs = kernel.intervals.listCrons()
201
+ if (cronJobs.length === 0) {
202
+ await writelnStdout(process, terminal, 'No active cron jobs.')
203
+ return 0
204
+ }
205
+
206
+ // Build a map of job names to expressions by parsing crontab files
207
+ const jobExpressions = new Map<string, { expression: string, command: string }>()
208
+
209
+ // Load system crontab entries
210
+ try {
211
+ const systemCrontabPath = '/etc/crontab'
212
+ if (await kernel.filesystem.fs.exists(systemCrontabPath)) {
213
+ const content = await kernel.filesystem.fs.readFile(systemCrontabPath, 'utf-8')
214
+ const entries = parseCrontabFile(content)
215
+ for (const entry of entries) {
216
+ const jobName = `cron:system:${entry.lineNumber}`
217
+ jobExpressions.set(jobName, { expression: entry.expression, command: entry.command })
218
+ }
219
+ }
220
+ } catch {
221
+ // Ignore errors loading system crontab
222
+ }
223
+
224
+ // Load user crontab entries
225
+ try {
226
+ const home = shell.env.get('HOME') ?? '/root'
227
+ const userCrontabPath = path.join(home, '.config', 'crontab')
228
+ if (await shell.context.fs.promises.exists(userCrontabPath)) {
229
+ const content = await shell.context.fs.promises.readFile(userCrontabPath, 'utf-8')
230
+ const entries = parseCrontabFile(content)
231
+ for (const entry of entries) {
232
+ const jobName = `cron:user:${entry.lineNumber}`
233
+ jobExpressions.set(jobName, { expression: entry.expression, command: entry.command })
234
+ }
235
+ }
236
+ } catch {
237
+ // Ignore errors loading user crontab
238
+ }
239
+
240
+ await writelnStdout(process, terminal, 'Active cron jobs:')
241
+ for (const jobName of cronJobs) {
242
+ const jobInfo = jobExpressions.get(jobName)
243
+ if (jobInfo) {
244
+ const description = getHumanReadableDescription(jobInfo.expression)
245
+ if (description) {
246
+ await writelnStdout(process, terminal, ` ${jobName}`)
247
+ await writelnStdout(process, terminal, ` Schedule: ${jobInfo.expression} (${description})`)
248
+ await writelnStdout(process, terminal, ` Command: ${jobInfo.command}`)
249
+ } else {
250
+ await writelnStdout(process, terminal, ` ${jobName}`)
251
+ await writelnStdout(process, terminal, ` Schedule: ${jobInfo.expression}`)
252
+ await writelnStdout(process, terminal, ` Command: ${jobInfo.command}`)
253
+ }
254
+ } else {
255
+ await writelnStdout(process, terminal, ` ${jobName}`)
256
+ }
257
+ }
258
+ return 0
259
+ }
260
+
261
+ case 'add': {
262
+ if (argv.length < 3) {
263
+ await writelnStderr(process, terminal, 'cron add: missing arguments')
264
+ await writelnStderr(process, terminal, 'Usage: cron add <schedule> <command>')
265
+ return 1
266
+ }
267
+
268
+ const schedule = argv[1]
269
+ if (!schedule) {
270
+ await writelnStderr(process, terminal, 'cron add: missing schedule')
271
+ await writelnStderr(process, terminal, 'Usage: cron add <schedule> <command>')
272
+ return 1
273
+ }
274
+ const command = argv.slice(2).join(' ')
275
+
276
+ // Validate the cron expression
277
+ let humanReadable: string | null = null
278
+ try {
279
+ parseCronExpression(schedule)
280
+ humanReadable = getHumanReadableDescription(schedule)
281
+ } catch (error) {
282
+ await writelnStderr(process, terminal, `cron add: invalid cron expression: ${schedule}`)
283
+ return 1
284
+ }
285
+
286
+ // Get user home directory
287
+ const home = shell.env.get('HOME') ?? '/root'
288
+ const configDir = path.join(home, '.config')
289
+ const crontabPath = path.join(configDir, 'crontab')
290
+
291
+ // Ensure .config directory exists
292
+ try {
293
+ if (!await shell.context.fs.promises.exists(configDir)) {
294
+ await shell.context.fs.promises.mkdir(configDir, { recursive: true })
295
+ }
296
+ } catch (error) {
297
+ await writelnStderr(process, terminal, `cron add: failed to create .config directory: ${error}`)
298
+ return 1
299
+ }
300
+
301
+ // Read existing crontab or create new
302
+ let crontabContent = ''
303
+ try {
304
+ if (await shell.context.fs.promises.exists(crontabPath)) {
305
+ crontabContent = await shell.context.fs.promises.readFile(crontabPath, 'utf-8')
306
+ if (!crontabContent.endsWith('\n') && crontabContent.length > 0) {
307
+ crontabContent += '\n'
308
+ }
309
+ }
310
+ } catch (error) {
311
+ // File doesn't exist or can't be read, start fresh
312
+ crontabContent = ''
313
+ }
314
+
315
+ // Add new entry
316
+ crontabContent += `${schedule} ${command}\n`
317
+
318
+ // Write back to file
319
+ try {
320
+ await shell.context.fs.promises.writeFile(crontabPath, crontabContent, { encoding: 'utf-8' })
321
+ } catch (error) {
322
+ await writelnStderr(process, terminal, `cron add: failed to write crontab: ${error}`)
323
+ return 1
324
+ }
325
+
326
+ await writelnStdout(process, terminal, `Added cron job: ${schedule} ${command}`)
327
+ if (humanReadable) {
328
+ await writelnStdout(process, terminal, ` Schedule: ${humanReadable}`)
329
+ }
330
+ await writelnStdout(process, terminal, 'Run "cron reload" to activate the new job.')
331
+ return 0
332
+ }
333
+
334
+ case 'remove': {
335
+ if (argv.length < 2) {
336
+ await writelnStderr(process, terminal, 'cron remove: missing job ID')
337
+ await writelnStderr(process, terminal, 'Usage: cron remove <id>')
338
+ return 1
339
+ }
340
+
341
+ const jobId = argv[1]
342
+ if (!jobId) {
343
+ await writelnStderr(process, terminal, 'cron remove: missing job ID')
344
+ return 1
345
+ }
346
+
347
+ const handle = kernel.intervals.getCron(jobId)
348
+
349
+ if (!handle) {
350
+ await writelnStderr(process, terminal, `cron remove: job not found: ${jobId}`)
351
+ return 1
352
+ }
353
+
354
+ kernel.intervals.clearCron(jobId)
355
+
356
+ // Also remove from crontab file if it's a user job
357
+ if (jobId.startsWith('cron:user:')) {
358
+ const home = shell.env.get('HOME') ?? '/root'
359
+ const crontabPath = path.join(home, '.config', 'crontab')
360
+
361
+ try {
362
+ if (await shell.context.fs.promises.exists(crontabPath)) {
363
+ const content = await shell.context.fs.promises.readFile(crontabPath, 'utf-8')
364
+ const lines = content.split('\n')
365
+ const lineNumber = parseInt(jobId.replace('cron:user:', ''), 10)
366
+
367
+ if (lineNumber > 0 && lineNumber <= lines.length) {
368
+ // Remove the line (1-indexed to 0-indexed)
369
+ const entries = parseCrontabFile(content)
370
+ const entryToRemove = entries.find((e: { lineNumber: number }) => e.lineNumber === lineNumber)
371
+
372
+ if (entryToRemove) {
373
+ const newLines = lines.filter((_, idx) => idx + 1 !== lineNumber)
374
+ await shell.context.fs.promises.writeFile(crontabPath, newLines.join('\n'), { encoding: 'utf-8' })
375
+ }
376
+ }
377
+ }
378
+ } catch (error) {
379
+ // Continue even if file update fails
380
+ kernel.log.warn(`Failed to update crontab file: ${error}`)
381
+ }
382
+ }
383
+
384
+ await writelnStdout(process, terminal, `Removed cron job: ${jobId}`)
385
+ return 0
386
+ }
387
+
388
+ case 'edit': {
389
+ const home = shell.env.get('HOME') ?? '/root'
390
+ const crontabPath = path.join(home, '.config', 'crontab')
391
+
392
+ // Use view command to edit (or create if doesn't exist)
393
+ const result = await kernel.execute({
394
+ command: '/usr/bin/edit',
395
+ args: [crontabPath],
396
+ shell,
397
+ terminal
398
+ })
399
+
400
+ if (result === 0) {
401
+ await writelnStdout(process, terminal, 'Crontab edited. Run "cron reload" to apply changes.')
402
+ }
403
+
404
+ return result
405
+ }
406
+
407
+ case 'validate': {
408
+ if (argv.length < 2) {
409
+ await writelnStderr(process, terminal, 'cron validate: missing expression')
410
+ await writelnStderr(process, terminal, 'Usage: cron validate <expression>')
411
+ return 1
412
+ }
413
+
414
+ const expression = argv[1]
415
+ if (!expression) {
416
+ await writelnStderr(process, terminal, 'cron validate: missing expression')
417
+ return 1
418
+ }
419
+ try {
420
+ parseCronExpression(expression)
421
+ const description = getHumanReadableDescription(expression)
422
+ await writelnStdout(process, terminal, `Valid cron expression: ${expression}`)
423
+ if (description) {
424
+ await writelnStdout(process, terminal, ` Description: ${description}`)
425
+ }
426
+ return 0
427
+ } catch (error) {
428
+ await writelnStderr(process, terminal, `Invalid cron expression: ${expression}`)
429
+ await writelnStderr(process, terminal, `Error: ${error instanceof Error ? error.message : String(error)}`)
430
+ return 1
431
+ }
432
+ }
433
+
434
+ case 'next': {
435
+ if (argv.length < 2) {
436
+ await writelnStderr(process, terminal, 'cron next: missing expression')
437
+ await writelnStderr(process, terminal, 'Usage: cron next <expression> [count]')
438
+ return 1
439
+ }
440
+
441
+ const expression = argv[1]
442
+ if (!expression) {
443
+ await writelnStderr(process, terminal, 'cron next: missing expression')
444
+ return 1
445
+ }
446
+ const count = argv.length > 2 && argv[2] ? parseInt(argv[2], 10) : 1
447
+
448
+ if (isNaN(count) || count < 1) {
449
+ await writelnStderr(process, terminal, 'cron next: invalid count (must be >= 1)')
450
+ return 1
451
+ }
452
+
453
+ try {
454
+ const cron = parseCronExpression(expression)
455
+ const now = new Date()
456
+ const dates = cron.getNextDates(count, now)
457
+ const description = getHumanReadableDescription(expression)
458
+
459
+ await writelnStdout(process, terminal, `Next ${count} execution time(s) for "${expression}":`)
460
+ if (description) {
461
+ await writelnStdout(process, terminal, ` Schedule: ${description}`)
462
+ }
463
+ for (let i = 0; i < dates.length; i++) {
464
+ const date = dates[i]
465
+ if (date) {
466
+ await writelnStdout(process, terminal, ` ${i + 1}. ${date.toISOString()}`)
467
+ }
468
+ }
469
+ return 0
470
+ } catch (error) {
471
+ await writelnStderr(process, terminal, `Invalid cron expression: ${expression}`)
472
+ await writelnStderr(process, terminal, `Error: ${error instanceof Error ? error.message : String(error)}`)
473
+ return 1
474
+ }
475
+ }
476
+
477
+ case 'test': {
478
+ if (argv.length < 2) {
479
+ await writelnStderr(process, terminal, 'cron test: missing expression')
480
+ await writelnStderr(process, terminal, 'Usage: cron test <expression>')
481
+ return 1
482
+ }
483
+
484
+ const expression = argv[1]
485
+ if (!expression) {
486
+ await writelnStderr(process, terminal, 'cron test: missing expression')
487
+ return 1
488
+ }
489
+ try {
490
+ const cron = parseCronExpression(expression)
491
+ const now = new Date()
492
+ const matches = cron.matchDate(now)
493
+ const description = getHumanReadableDescription(expression)
494
+
495
+ if (matches) {
496
+ await writelnStdout(process, terminal, `Expression "${expression}" matches current time: ${now.toISOString()}`)
497
+ } else {
498
+ await writelnStdout(process, terminal, `Expression "${expression}" does not match current time: ${now.toISOString()}`)
499
+ }
500
+ if (description) {
501
+ await writelnStdout(process, terminal, ` Schedule: ${description}`)
502
+ }
503
+ return 0
504
+ } catch (error) {
505
+ await writelnStderr(process, terminal, `Invalid cron expression: ${expression}`)
506
+ await writelnStderr(process, terminal, `Error: ${error instanceof Error ? error.message : String(error)}`)
507
+ return 1
508
+ }
509
+ }
510
+
511
+ case 'reload': {
512
+ // Clear all existing cron jobs
513
+ const existingJobs = kernel.intervals.listCrons()
514
+ for (const jobName of existingJobs) {
515
+ kernel.intervals.clearCron(jobName)
516
+ }
517
+
518
+ // Reload system crontab
519
+ try {
520
+ const systemCrontabPath = '/etc/crontab'
521
+ if (await kernel.filesystem.fs.exists(systemCrontabPath)) {
522
+ const content = await kernel.filesystem.fs.readFile(systemCrontabPath, 'utf-8')
523
+ const entries = parseCrontabFile(content)
524
+
525
+ for (const entry of entries) {
526
+ const jobName = `cron:system:${entry.lineNumber}`
527
+ kernel.intervals.setCron(
528
+ jobName,
529
+ entry.expression,
530
+ async () => {
531
+ await kernel.shell.execute(entry.command)
532
+ },
533
+ {
534
+ errorHandler: (err: unknown) => {
535
+ kernel.log.error(`Cron job ${jobName} failed: ${err instanceof Error ? err.message : String(err)}`)
536
+ }
537
+ }
538
+ )
539
+ }
540
+ }
541
+ } catch (error) {
542
+ kernel.log.warn(`Failed to load system crontab: ${error}`)
543
+ }
544
+
545
+ // Reload user crontab
546
+ try {
547
+ const home = shell.env.get('HOME') ?? '/root'
548
+ const userCrontabPath = path.join(home, '.config', 'crontab')
549
+
550
+ if (await shell.context.fs.promises.exists(userCrontabPath)) {
551
+ const content = await shell.context.fs.promises.readFile(userCrontabPath, 'utf-8')
552
+ const entries = parseCrontabFile(content)
553
+
554
+ for (const entry of entries) {
555
+ const jobName = `cron:user:${entry.lineNumber}`
556
+ // Ensure command is properly trimmed and preserved
557
+ const command = entry.command.trim()
558
+ kernel.intervals.setCron(
559
+ jobName,
560
+ entry.expression,
561
+ async () => {
562
+ await kernel.shell.execute(command)
563
+ },
564
+ {
565
+ errorHandler: (err: unknown) => {
566
+ kernel.log.error(`Cron job ${jobName} failed: ${err instanceof Error ? err.message : String(err)}`)
567
+ }
568
+ }
569
+ )
570
+ }
571
+ }
572
+ } catch (error) {
573
+ kernel.log.warn(`Failed to load user crontab: ${error}`)
574
+ }
575
+
576
+ await writelnStdout(process, terminal, 'Crontabs reloaded.')
577
+ return 0
578
+ }
579
+
580
+ default:
581
+ await writelnStderr(process, terminal, `cron: unknown command: ${subcommand}`)
582
+ await writelnStderr(process, terminal, "Try 'cron --help' for more information.")
583
+ return 1
584
+ }
585
+ } catch (error) {
586
+ await writelnStderr(process, terminal, `cron: error: ${error instanceof Error ? error.message : String(error)}`)
587
+ return 1
588
+ }
589
+ }
590
+ })
591
+ }