opencode-cron-job 0.1.1 → 0.1.3
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/dist/index.d.ts +4 -1
- package/dist/index.js +85 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,7 +1,26 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from "fs";
|
|
1
|
+
import { readFileSync, existsSync, writeFileSync, rmSync, mkdirSync } from "fs";
|
|
2
2
|
import { join } from "path";
|
|
3
|
+
import { homedir } from "os";
|
|
4
|
+
import { execSync } from "child_process";
|
|
3
5
|
import cron from "node-cron";
|
|
4
6
|
import { tool } from "@opencode-ai/plugin";
|
|
7
|
+
const CURRENT_VERSION = "0.1.3";
|
|
8
|
+
function parseDelay(s) {
|
|
9
|
+
const m = s.match(/^(\d+)\s*(s|sec|second|seconds|m|min|minute|minutes|h|hr|hour|hours|d|day|days)?$/);
|
|
10
|
+
if (!m)
|
|
11
|
+
return 0;
|
|
12
|
+
const n = parseInt(m[1]);
|
|
13
|
+
const unit = (m[2] || "m").charAt(0);
|
|
14
|
+
if (unit === "s")
|
|
15
|
+
return n * 1000;
|
|
16
|
+
if (unit === "m")
|
|
17
|
+
return n * 60000;
|
|
18
|
+
if (unit === "h")
|
|
19
|
+
return n * 3600000;
|
|
20
|
+
if (unit === "d")
|
|
21
|
+
return n * 86400000;
|
|
22
|
+
return n * 60000;
|
|
23
|
+
}
|
|
5
24
|
function parseTasks(content) {
|
|
6
25
|
const tasks = [];
|
|
7
26
|
const sections = content.split(/^## /m).filter((s) => s.trim());
|
|
@@ -25,7 +44,35 @@ function parseTasks(content) {
|
|
|
25
44
|
}
|
|
26
45
|
let jobs = [];
|
|
27
46
|
let nextId = 1;
|
|
28
|
-
|
|
47
|
+
async function checkUpdate(client) {
|
|
48
|
+
try {
|
|
49
|
+
const res = await fetch("https://registry.npmjs.org/opencode-cron-job/latest");
|
|
50
|
+
const data = await res.json();
|
|
51
|
+
if (!data.version || data.version === CURRENT_VERSION)
|
|
52
|
+
return;
|
|
53
|
+
const cacheDir = join(homedir(), ".cache", "opencode", "packages", `opencode-cron-job@latest`);
|
|
54
|
+
const targetDir = join(cacheDir, "node_modules", "opencode-cron-job");
|
|
55
|
+
mkdirSync(targetDir, { recursive: true });
|
|
56
|
+
// Download tarball
|
|
57
|
+
const tgzUrl = `https://registry.npmjs.org/opencode-cron-job/-/opencode-cron-job-${data.version}.tgz`;
|
|
58
|
+
const tgz = await fetch(tgzUrl).then((r) => r.arrayBuffer());
|
|
59
|
+
// Write temp file and extract
|
|
60
|
+
const tmpFile = join(cacheDir, "..", `_update.tgz`);
|
|
61
|
+
writeFileSync(tmpFile, Buffer.from(tgz));
|
|
62
|
+
execSync(`tar -xzf "${tmpFile}" --strip-components=1 -C "${targetDir}"`, { stdio: "ignore" });
|
|
63
|
+
rmSync(tmpFile, { force: true });
|
|
64
|
+
await client.tui.showToast({
|
|
65
|
+
body: {
|
|
66
|
+
message: `opencode-cron-job updated: v${CURRENT_VERSION} → v${data.version}. Restart to apply.`,
|
|
67
|
+
variant: "success",
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Silently ignore
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const _CronPlugin = async ({ client, directory }) => {
|
|
29
76
|
const tasksFile = join(directory, ".cron-job", "tasks.md");
|
|
30
77
|
function fire(job) {
|
|
31
78
|
client.tui.appendPrompt({ body: { text: job.prompt } })
|
|
@@ -41,11 +88,13 @@ export const CronPlugin = async ({ client, directory }) => {
|
|
|
41
88
|
if (existsSync(tasksFile)) {
|
|
42
89
|
const items = parseTasks(readFileSync(tasksFile, "utf-8"));
|
|
43
90
|
for (const item of items) {
|
|
44
|
-
const job = { ...item, id: String(nextId++), task: null };
|
|
91
|
+
const job = { ...item, id: String(nextId++), task: null, timer: null };
|
|
45
92
|
schedule(job);
|
|
46
93
|
jobs.push(job);
|
|
47
94
|
}
|
|
48
95
|
}
|
|
96
|
+
// Check for updates in background
|
|
97
|
+
checkUpdate(client);
|
|
49
98
|
return {
|
|
50
99
|
tool: {
|
|
51
100
|
cron_create: tool({
|
|
@@ -56,7 +105,7 @@ export const CronPlugin = async ({ client, directory }) => {
|
|
|
56
105
|
prompt: tool.schema.string().describe("The prompt text that gets injected into the session when the job fires. The AI will receive this as a user message and act on it."),
|
|
57
106
|
},
|
|
58
107
|
async execute(args) {
|
|
59
|
-
const job = { id: String(nextId++), name: args.name, schedule: args.schedule, prompt: args.prompt, task: null };
|
|
108
|
+
const job = { id: String(nextId++), name: args.name, schedule: args.schedule, prompt: args.prompt, task: null, timer: null };
|
|
60
109
|
schedule(job);
|
|
61
110
|
jobs.push(job);
|
|
62
111
|
return `Created job: ${job.name} (ID: ${job.id}, cron: ${job.schedule})`;
|
|
@@ -95,10 +144,42 @@ export const CronPlugin = async ({ client, directory }) => {
|
|
|
95
144
|
return `Job ${args.jobId} not found.`;
|
|
96
145
|
const [job] = jobs.splice(idx, 1);
|
|
97
146
|
job.task?.stop();
|
|
147
|
+
if (job.timer)
|
|
148
|
+
clearTimeout(job.timer);
|
|
98
149
|
return `${job.name}: deleted`;
|
|
99
150
|
},
|
|
100
151
|
}),
|
|
152
|
+
cron_once: tool({
|
|
153
|
+
description: "Schedule a one-shot prompt after a delay. The job fires once and is automatically removed. Useful for reminders like 'remind me in 30 minutes'.",
|
|
154
|
+
args: {
|
|
155
|
+
prompt: tool.schema.string().describe("The prompt text to inject when the timer fires. The AI will receive this as a user message."),
|
|
156
|
+
delay: tool.schema.string().describe("Delay before firing. Examples: '5m' (5 minutes), '30s', '2h', '1d'."),
|
|
157
|
+
name: tool.schema.string().optional().describe("Optional name for this job (default: auto-generated)"),
|
|
158
|
+
},
|
|
159
|
+
async execute(args) {
|
|
160
|
+
const ms = parseDelay(args.delay);
|
|
161
|
+
if (ms <= 0)
|
|
162
|
+
return `Invalid delay: ${args.delay}. Use format like '5m', '30s', '2h'.`;
|
|
163
|
+
const name = args.name || `reminder-${nextId}`;
|
|
164
|
+
const job = {
|
|
165
|
+
id: String(nextId++), name, schedule: args.delay, prompt: args.prompt,
|
|
166
|
+
task: null, timer: null,
|
|
167
|
+
};
|
|
168
|
+
job.timer = setTimeout(() => {
|
|
169
|
+
fire(job);
|
|
170
|
+
// Auto-remove after firing
|
|
171
|
+
const idx = jobs.indexOf(job);
|
|
172
|
+
if (idx !== -1)
|
|
173
|
+
jobs.splice(idx, 1);
|
|
174
|
+
}, ms);
|
|
175
|
+
jobs.push(job);
|
|
176
|
+
return `Scheduled: ${name} (fires in ${args.delay})`;
|
|
177
|
+
},
|
|
178
|
+
}),
|
|
101
179
|
},
|
|
102
180
|
};
|
|
103
181
|
};
|
|
182
|
+
export default {
|
|
183
|
+
server: _CronPlugin,
|
|
184
|
+
};
|
|
104
185
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|