@patrick-rodgers/cron-claude 0.1.2 → 0.1.4
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/.claude-plugin/plugin.json +1 -1
- package/.mcp.json +2 -2
- package/CLAUDE.md +63 -17
- package/README.md +55 -13
- package/dist/cli.js +1 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +5 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -2
- package/dist/config.js.map +1 -1
- package/dist/executor.d.ts +1 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +26 -14
- package/dist/executor.js.map +1 -1
- package/dist/logger.d.ts +3 -3
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +17 -37
- package/dist/logger.js.map +1 -1
- package/dist/mcp-server.js +101 -69
- package/dist/mcp-server.js.map +1 -1
- package/dist/scheduler.d.ts.map +1 -1
- package/dist/scheduler.js +106 -8
- package/dist/scheduler.js.map +1 -1
- package/dist/storage/factory.d.ts +18 -0
- package/dist/storage/factory.d.ts.map +1 -0
- package/dist/storage/factory.js +56 -0
- package/dist/storage/factory.js.map +1 -0
- package/dist/storage/file-storage.d.ts +33 -0
- package/dist/storage/file-storage.d.ts.map +1 -0
- package/dist/storage/file-storage.js +120 -0
- package/dist/storage/file-storage.js.map +1 -0
- package/dist/storage/index.d.ts +8 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +7 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/interface.d.ts +43 -0
- package/dist/storage/interface.d.ts.map +1 -0
- package/dist/storage/interface.js +6 -0
- package/dist/storage/interface.js.map +1 -0
- package/dist/storage/memory-storage.d.ts +42 -0
- package/dist/storage/memory-storage.d.ts.map +1 -0
- package/dist/storage/memory-storage.js +217 -0
- package/dist/storage/memory-storage.js.map +1 -0
- package/dist/tasks.d.ts +40 -0
- package/dist/tasks.d.ts.map +1 -0
- package/dist/tasks.js +141 -0
- package/dist/tasks.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/tasks/morning-greeting.md +17 -0
- package/tasks/example-daily-summary.md +0 -37
- package/tasks/example-weekly-backup.md +0 -27
package/dist/tasks.js
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task management functions
|
|
3
|
+
* Simple file-based operations for task definitions
|
|
4
|
+
*/
|
|
5
|
+
import { readdirSync, readFileSync, writeFileSync, existsSync, mkdirSync, unlinkSync } from 'fs';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import matter from 'gray-matter';
|
|
8
|
+
import { loadConfig } from './config.js';
|
|
9
|
+
/**
|
|
10
|
+
* Get the tasks directory from config
|
|
11
|
+
*/
|
|
12
|
+
function getTasksDir() {
|
|
13
|
+
const config = loadConfig();
|
|
14
|
+
return config.tasksDir;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Ensure tasks directory exists
|
|
18
|
+
*/
|
|
19
|
+
function ensureTasksDir() {
|
|
20
|
+
const tasksDir = getTasksDir();
|
|
21
|
+
if (!existsSync(tasksDir)) {
|
|
22
|
+
mkdirSync(tasksDir, { recursive: true });
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get file path for a task
|
|
27
|
+
*/
|
|
28
|
+
export function getTaskFilePath(taskId) {
|
|
29
|
+
return join(getTasksDir(), `${taskId}.md`);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Convert TaskDefinition to markdown with YAML frontmatter
|
|
33
|
+
*/
|
|
34
|
+
function taskToMarkdown(task) {
|
|
35
|
+
return `---
|
|
36
|
+
id: ${task.id}
|
|
37
|
+
schedule: "${task.schedule}"
|
|
38
|
+
invocation: ${task.invocation}
|
|
39
|
+
notifications:
|
|
40
|
+
toast: ${task.notifications.toast}
|
|
41
|
+
enabled: ${task.enabled}
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
${task.instructions}
|
|
45
|
+
`;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parse markdown file to TaskDefinition
|
|
49
|
+
*/
|
|
50
|
+
function parseTaskFile(filePath) {
|
|
51
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
52
|
+
const parsed = matter(content);
|
|
53
|
+
return {
|
|
54
|
+
id: parsed.data.id || 'unknown',
|
|
55
|
+
schedule: parsed.data.schedule || '0 0 * * *',
|
|
56
|
+
invocation: parsed.data.invocation || 'cli',
|
|
57
|
+
notifications: parsed.data.notifications || { toast: false },
|
|
58
|
+
enabled: parsed.data.enabled !== false,
|
|
59
|
+
instructions: parsed.content,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Create a new task
|
|
64
|
+
*/
|
|
65
|
+
export function createTask(task) {
|
|
66
|
+
ensureTasksDir();
|
|
67
|
+
const filePath = getTaskFilePath(task.id);
|
|
68
|
+
if (existsSync(filePath)) {
|
|
69
|
+
throw new Error(`Task "${task.id}" already exists`);
|
|
70
|
+
}
|
|
71
|
+
const markdown = taskToMarkdown(task);
|
|
72
|
+
writeFileSync(filePath, markdown, 'utf-8');
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get a task by ID
|
|
76
|
+
*/
|
|
77
|
+
export function getTask(taskId) {
|
|
78
|
+
const filePath = getTaskFilePath(taskId);
|
|
79
|
+
if (!existsSync(filePath)) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
return parseTaskFile(filePath);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Update an existing task
|
|
86
|
+
*/
|
|
87
|
+
export function updateTask(taskId, task) {
|
|
88
|
+
const filePath = getTaskFilePath(taskId);
|
|
89
|
+
if (!existsSync(filePath)) {
|
|
90
|
+
throw new Error(`Task "${taskId}" not found`);
|
|
91
|
+
}
|
|
92
|
+
const markdown = taskToMarkdown(task);
|
|
93
|
+
writeFileSync(filePath, markdown, 'utf-8');
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Delete a task by ID
|
|
97
|
+
*/
|
|
98
|
+
export function deleteTask(taskId) {
|
|
99
|
+
const filePath = getTaskFilePath(taskId);
|
|
100
|
+
if (!existsSync(filePath)) {
|
|
101
|
+
throw new Error(`Task "${taskId}" not found`);
|
|
102
|
+
}
|
|
103
|
+
unlinkSync(filePath);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* List all tasks (metadata only)
|
|
107
|
+
*/
|
|
108
|
+
export function listTasks() {
|
|
109
|
+
ensureTasksDir();
|
|
110
|
+
try {
|
|
111
|
+
const files = readdirSync(getTasksDir()).filter((f) => f.endsWith('.md'));
|
|
112
|
+
const tasks = [];
|
|
113
|
+
for (const file of files) {
|
|
114
|
+
try {
|
|
115
|
+
const filePath = join(getTasksDir(), file);
|
|
116
|
+
const task = parseTaskFile(filePath);
|
|
117
|
+
tasks.push({
|
|
118
|
+
id: task.id,
|
|
119
|
+
schedule: task.schedule,
|
|
120
|
+
invocation: task.invocation,
|
|
121
|
+
enabled: task.enabled,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error(`Error parsing task file ${file}:`, error);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return tasks;
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Check if a task exists
|
|
136
|
+
*/
|
|
137
|
+
export function taskExists(taskId) {
|
|
138
|
+
const filePath = getTaskFilePath(taskId);
|
|
139
|
+
return existsSync(filePath);
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B,aAAa,EAAE;QACb,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B,aAAa,EAAE;QACb,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: morning-greeting
|
|
3
|
+
schedule: "0 9 * * *"
|
|
4
|
+
invocation: cli
|
|
5
|
+
notifications:
|
|
6
|
+
toast: true
|
|
7
|
+
enabled: true
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Morning Greeting Task
|
|
11
|
+
|
|
12
|
+
Please create a brief morning greeting message that includes:
|
|
13
|
+
- Current date and day of week
|
|
14
|
+
- A motivational quote
|
|
15
|
+
- Weather reminder (generic)
|
|
16
|
+
|
|
17
|
+
Keep it friendly and concise (2-3 sentences).
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: example-daily-summary
|
|
3
|
-
schedule: "0 9 * * *" # Every day at 9 AM
|
|
4
|
-
invocation: cli
|
|
5
|
-
notifications:
|
|
6
|
-
toast: true
|
|
7
|
-
enabled: false # Set to true when ready to use
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Daily Summary Task
|
|
11
|
-
|
|
12
|
-
Please create a daily summary for me.
|
|
13
|
-
|
|
14
|
-
## Tasks
|
|
15
|
-
|
|
16
|
-
1. Check my calendar for today's meetings
|
|
17
|
-
2. Review any urgent emails from the last 24 hours
|
|
18
|
-
3. Create a brief summary report (bullet points)
|
|
19
|
-
|
|
20
|
-
## Output Format
|
|
21
|
-
|
|
22
|
-
Please format the output as:
|
|
23
|
-
|
|
24
|
-
### Daily Summary - [Date]
|
|
25
|
-
|
|
26
|
-
**Meetings Today:**
|
|
27
|
-
- [List of meetings]
|
|
28
|
-
|
|
29
|
-
**Urgent Items:**
|
|
30
|
-
- [Any urgent emails or tasks]
|
|
31
|
-
|
|
32
|
-
**Notes:**
|
|
33
|
-
- [Any other important information]
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
Save this summary to my OneDrive documents folder as `daily-summary-[date].md`.
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: example-weekly-backup
|
|
3
|
-
schedule: "0 0 * * 0" # Every Sunday at midnight
|
|
4
|
-
invocation: cli
|
|
5
|
-
notifications:
|
|
6
|
-
toast: true
|
|
7
|
-
enabled: false
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Weekly Backup Task
|
|
11
|
-
|
|
12
|
-
Perform a weekly backup of important project files.
|
|
13
|
-
|
|
14
|
-
## Instructions
|
|
15
|
-
|
|
16
|
-
1. Search for all `.md` files in my Documents folder modified in the last 7 days
|
|
17
|
-
2. Create a backup report listing:
|
|
18
|
-
- File names
|
|
19
|
-
- Sizes
|
|
20
|
-
- Last modified dates
|
|
21
|
-
3. If any files are larger than 10MB, flag them for review
|
|
22
|
-
|
|
23
|
-
## Output
|
|
24
|
-
|
|
25
|
-
Create a backup report and save it to `C:\Users\[username]\OneDrive\Backups\weekly-report-[date].md`
|
|
26
|
-
|
|
27
|
-
Include recommendations for files that should be archived or cleaned up.
|