abtars 0.3.4-alpha.7 → 0.3.4-alpha.8
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/bundle/{_registry.generated-WGR4WOPT.js → _registry.generated-YP5GLSG7.js} +8 -5
- package/bundle/{_registry.generated-WGR4WOPT.js.map → _registry.generated-YP5GLSG7.js.map} +1 -1
- package/bundle/abtars-cli.js +4 -4
- package/bundle/abtars-task.js.map +2 -2
- package/bundle/abtars.js +349 -113
- package/bundle/abtars.js.map +4 -4
- package/bundle/{agent-api-adapter-YAHKQMMZ.js → agent-api-adapter-WRGEQ6DV.js} +2 -2
- package/bundle/{agent-registry-GI6CLT3Z.js → agent-registry-GHNG2PH3.js} +2 -2
- package/bundle/{bootstrap-X2QYIZIJ.js → bootstrap-PZIDBPEJ.js} +2 -2
- package/bundle/{browser-DMARZJIN.js → browser-D3LZV7ZK.js} +2 -2
- package/bundle/{chunk-LGP6TYFI.js → chunk-374NCXFZ.js} +89 -2
- package/bundle/chunk-374NCXFZ.js.map +7 -0
- package/bundle/{chunk-UPRZDU6T.js → chunk-75ATTOW4.js} +3 -3
- package/bundle/{chunk-4UL3KINB.js → chunk-7JN2MMU7.js} +2 -2
- package/bundle/chunk-C7K6VZNY.js +186 -0
- package/bundle/chunk-C7K6VZNY.js.map +7 -0
- package/bundle/{chunk-GXL7HJPT.js → chunk-CXXU3HAU.js} +2 -2
- package/bundle/{chunk-HKRSMUXJ.js → chunk-IHYKTDIP.js} +50 -28
- package/bundle/chunk-IHYKTDIP.js.map +7 -0
- package/bundle/{chunk-ONBF5DDU.js → chunk-M3JEX6L4.js} +244 -178
- package/bundle/chunk-M3JEX6L4.js.map +7 -0
- package/bundle/{chunk-5B5B6EHL.js → chunk-N4EB6LA7.js} +2 -2
- package/bundle/{chunk-W4EA4GCA.js → chunk-P2K2K6XL.js} +10 -10
- package/bundle/{chunk-5GCLBUBS.js → chunk-PU5HSKWH.js} +1 -1
- package/bundle/{chunk-BROFMHC2.js → chunk-SMPHE3ZM.js} +168 -123
- package/bundle/chunk-SMPHE3ZM.js.map +7 -0
- package/bundle/{chunk-SIFPBTI4.js → chunk-UNM3OXHB.js} +4 -2
- package/bundle/chunk-UNM3OXHB.js.map +7 -0
- package/bundle/{chunk-YRU2K3O6.js → chunk-VXCETPZU.js} +7 -7
- package/bundle/{chunk-KTYGKPYM.js → chunk-W2R2HFOQ.js} +2 -2
- package/bundle/{chunk-XWRADSXO.js → chunk-YPAQEQSC.js} +2 -2
- package/bundle/{commands-XYEGVUZF.js → commands-OIISYHTD.js} +3 -3
- package/bundle/{delegation-tools-QKNYQGTQ.js → delegation-tools-YATZFKYO.js} +4 -4
- package/bundle/{deploy-EPDWNHJU.js → deploy-T6R45OZJ.js} +2 -2
- package/bundle/{direct-api-transport-E3LNDBJT.js → direct-api-transport-S2RDH2I7.js} +13 -9
- package/bundle/direct-api-transport-S2RDH2I7.js.map +7 -0
- package/bundle/{discord-adapter-IT3KP3VB.js → discord-adapter-UTXUWX3A.js} +3 -3
- package/bundle/{heartbeat-tier3-ABWL3P7M.js → heartbeat-tier3-6KH45CL6.js} +10 -10
- package/bundle/kanban-channel-IJ52OMNA.js +1 -1
- package/bundle/{message-pipeline-P5GAQU4Z.js → message-pipeline-AUIUNM5R.js} +3 -3
- package/bundle/meta.json +1291 -1262
- package/bundle/{orc-tools-4CHEFWSN.js → orc-tools-TOD4WHTM.js} +2 -2
- package/bundle/{peer-transport-I6JPLFZ2.js → peer-transport-5VKK2I7P.js} +2 -2
- package/bundle/{phase-transport-PGKU2KD4.js → phase-transport-FS6NL4A5.js} +5 -5
- package/bundle/{reconciler-EBKH3JNU.js → reconciler-NZ4O4BCP.js} +4 -4
- package/bundle/{skill-session-BMSRQSHV.js → skill-session-VJXTKOKL.js} +2 -2
- package/bundle/{sleep-36XS6MHJ.js → sleep-BEWAUFCL.js} +5 -2
- package/bundle/{spin-TI3TSVVT.js → spin-E3ZDEDKT.js} +5 -5
- package/bundle/{spin-types-BLPYAETA.js → spin-types-OIE67MJK.js} +2 -2
- package/bundle/{system-status-JZU5FO7B.js → system-status-FAVNIUFJ.js} +2 -2
- package/bundle/{telegram-adapter-H6PMFPMB.js → telegram-adapter-4TX7QWKC.js} +12 -6
- package/bundle/{telegram-adapter-H6PMFPMB.js.map → telegram-adapter-4TX7QWKC.js.map} +2 -2
- package/bundle/{tool-registry-IZX2IOBM.js → tool-registry-7FK3OQGL.js} +8 -8
- package/bundle/{update-MESYO4LO.js → update-CKFP6LBE.js} +3 -3
- package/package.json +1 -1
- package/scripts/abtars-watchdog.service +2 -1
- package/scripts/emergency-update.sh +53 -5
- package/bundle/chunk-3AAENI2K.js +0 -210
- package/bundle/chunk-3AAENI2K.js.map +0 -7
- package/bundle/chunk-BROFMHC2.js.map +0 -7
- package/bundle/chunk-HKRSMUXJ.js.map +0 -7
- package/bundle/chunk-LGP6TYFI.js.map +0 -7
- package/bundle/chunk-ONBF5DDU.js.map +0 -7
- package/bundle/chunk-SIFPBTI4.js.map +0 -7
- package/bundle/chunk-Y76VUJSF.js +0 -75
- package/bundle/chunk-Y76VUJSF.js.map +0 -7
- package/bundle/direct-api-transport-E3LNDBJT.js.map +0 -7
- package/bundle/public/css/dashboard.css +0 -542
- package/bundle/public/index.html +0 -180
- package/bundle/public/js/app.js +0 -437
- package/bundle/public/memory-universe.js +0 -384
- package/bundle/subagent-runtime-5QUVES3W.js +0 -14
- package/bundle/update-MESYO4LO.js.map +0 -7
- /package/bundle/{agent-api-adapter-YAHKQMMZ.js.map → agent-api-adapter-WRGEQ6DV.js.map} +0 -0
- /package/bundle/{agent-registry-GI6CLT3Z.js.map → agent-registry-GHNG2PH3.js.map} +0 -0
- /package/bundle/{bootstrap-X2QYIZIJ.js.map → bootstrap-PZIDBPEJ.js.map} +0 -0
- /package/bundle/{browser-DMARZJIN.js.map → browser-D3LZV7ZK.js.map} +0 -0
- /package/bundle/{chunk-UPRZDU6T.js.map → chunk-75ATTOW4.js.map} +0 -0
- /package/bundle/{chunk-4UL3KINB.js.map → chunk-7JN2MMU7.js.map} +0 -0
- /package/bundle/{chunk-GXL7HJPT.js.map → chunk-CXXU3HAU.js.map} +0 -0
- /package/bundle/{chunk-5B5B6EHL.js.map → chunk-N4EB6LA7.js.map} +0 -0
- /package/bundle/{chunk-W4EA4GCA.js.map → chunk-P2K2K6XL.js.map} +0 -0
- /package/bundle/{chunk-5GCLBUBS.js.map → chunk-PU5HSKWH.js.map} +0 -0
- /package/bundle/{chunk-YRU2K3O6.js.map → chunk-VXCETPZU.js.map} +0 -0
- /package/bundle/{chunk-KTYGKPYM.js.map → chunk-W2R2HFOQ.js.map} +0 -0
- /package/bundle/{chunk-XWRADSXO.js.map → chunk-YPAQEQSC.js.map} +0 -0
- /package/bundle/{commands-XYEGVUZF.js.map → commands-OIISYHTD.js.map} +0 -0
- /package/bundle/{delegation-tools-QKNYQGTQ.js.map → delegation-tools-YATZFKYO.js.map} +0 -0
- /package/bundle/{deploy-EPDWNHJU.js.map → deploy-T6R45OZJ.js.map} +0 -0
- /package/bundle/{discord-adapter-IT3KP3VB.js.map → discord-adapter-UTXUWX3A.js.map} +0 -0
- /package/bundle/{heartbeat-tier3-ABWL3P7M.js.map → heartbeat-tier3-6KH45CL6.js.map} +0 -0
- /package/bundle/{message-pipeline-P5GAQU4Z.js.map → message-pipeline-AUIUNM5R.js.map} +0 -0
- /package/bundle/{orc-tools-4CHEFWSN.js.map → orc-tools-TOD4WHTM.js.map} +0 -0
- /package/bundle/{peer-transport-I6JPLFZ2.js.map → peer-transport-5VKK2I7P.js.map} +0 -0
- /package/bundle/{phase-transport-PGKU2KD4.js.map → phase-transport-FS6NL4A5.js.map} +0 -0
- /package/bundle/{reconciler-EBKH3JNU.js.map → reconciler-NZ4O4BCP.js.map} +0 -0
- /package/bundle/{skill-session-BMSRQSHV.js.map → skill-session-VJXTKOKL.js.map} +0 -0
- /package/bundle/{sleep-36XS6MHJ.js.map → sleep-BEWAUFCL.js.map} +0 -0
- /package/bundle/{spin-TI3TSVVT.js.map → spin-E3ZDEDKT.js.map} +0 -0
- /package/bundle/{spin-types-BLPYAETA.js.map → spin-types-OIE67MJK.js.map} +0 -0
- /package/bundle/{system-status-JZU5FO7B.js.map → system-status-FAVNIUFJ.js.map} +0 -0
- /package/bundle/{subagent-runtime-5QUVES3W.js.map → tool-registry-7FK3OQGL.js.map} +0 -0
- /package/bundle/{tool-registry-IZX2IOBM.js.map → update-CKFP6LBE.js.map} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
|
-
import {
|
|
4
|
-
browser_exports
|
|
5
|
-
} from "./chunk-5B5B6EHL.js";
|
|
6
3
|
import {
|
|
7
4
|
sleep_exports
|
|
8
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-374NCXFZ.js";
|
|
6
|
+
import {
|
|
7
|
+
browser_exports
|
|
8
|
+
} from "./chunk-N4EB6LA7.js";
|
|
9
9
|
import {
|
|
10
10
|
hotskills_exports,
|
|
11
11
|
init_hotskills
|
|
@@ -14,6 +14,9 @@ import "./chunk-EUZDKV3C.js";
|
|
|
14
14
|
import "./chunk-YRSMGJFP.js";
|
|
15
15
|
import "./chunk-IKUZPMVA.js";
|
|
16
16
|
import "./chunk-GRVWZO4C.js";
|
|
17
|
+
import "./chunk-EQSG2CRM.js";
|
|
18
|
+
import "./chunk-GVM5YU5I.js";
|
|
19
|
+
import "./chunk-OXTSWQCX.js";
|
|
17
20
|
import "./chunk-N5KN3LGD.js";
|
|
18
21
|
import "./chunk-2KC5G3EA.js";
|
|
19
22
|
import "./chunk-65VCEC32.js";
|
|
@@ -33,4 +36,4 @@ var capabilities = [
|
|
|
33
36
|
export {
|
|
34
37
|
capabilities
|
|
35
38
|
};
|
|
36
|
-
//# sourceMappingURL=_registry.generated-
|
|
39
|
+
//# sourceMappingURL=_registry.generated-YP5GLSG7.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/capabilities/_registry.generated.ts"],
|
|
4
4
|
"sourcesContent": ["// AUTO-GENERATED by esbuild.config.js \u2014 do not edit\n// Static capability registry for bundled builds\n\nimport * as cap0 from \"./browser/index.js\";\nimport * as cap1 from \"./hotskills/index.js\";\nimport * as cap2 from \"./sleep/index.js\";\n\nexport const capabilities = [\n { name: \"browser\", module: cap0 },\n { name: \"hotskills\", module: cap1 },\n { name: \"sleep\", module: cap2 },\n];\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;AAGO,IAAM,eAAe;AAAA,EAC1B,EAAE,MAAM,WAAW,QAAQ,gBAAK;AAAA,EAChC,EAAE,MAAM,aAAa,QAAQ,kBAAK;AAAA,EAClC,EAAE,MAAM,SAAS,QAAQ,cAAK;AAChC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/bundle/abtars-cli.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
3
|
import {
|
|
4
4
|
update
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-75ATTOW4.js";
|
|
6
|
+
import "./chunk-UNM3OXHB.js";
|
|
7
7
|
import {
|
|
8
8
|
rollback
|
|
9
9
|
} from "./chunk-HZDLFLRP.js";
|
|
@@ -1171,7 +1171,7 @@ async function onboard(opts) {
|
|
|
1171
1171
|
process.stdout.write(`
|
|
1172
1172
|
Running abtars update...
|
|
1173
1173
|
`);
|
|
1174
|
-
const { update: update2 } = await import("./update-
|
|
1174
|
+
const { update: update2 } = await import("./update-CKFP6LBE.js");
|
|
1175
1175
|
return await update2({ source: opts.source ?? "alpha", localDir: opts.localDir, skipFreshness: true, allowAbmindMismatch: false });
|
|
1176
1176
|
}
|
|
1177
1177
|
async function seedDefaultTasks(_chatId, abtarsHome2) {
|
|
@@ -1418,7 +1418,7 @@ async function main(argv) {
|
|
|
1418
1418
|
});
|
|
1419
1419
|
}
|
|
1420
1420
|
case "__deploy": {
|
|
1421
|
-
const { deployActivationCli } = await import("./deploy-
|
|
1421
|
+
const { deployActivationCli } = await import("./deploy-T6R45OZJ.js");
|
|
1422
1422
|
return await deployActivationCli(flags);
|
|
1423
1423
|
}
|
|
1424
1424
|
case "rollback":
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/cli/abtars-task.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * abtars-task \u2014 schedule time-based reminders and tasks.\n *\n * Usage:\n * abtars-task add --at \"2026-03-16T08:00\" --message \"Remind about cookies\" --chat-id 7773842843 --type reminder\n * abtars-task list\n * abtars-task remove <id>\n *\n * File: ~/.abtars/tasks/tasks.json\n */\n\nimport { localISO } from \"../utils/local-time.js\";\nimport { randomBytes } from \"node:crypto\";\nimport { readEntries as dbReadEntries, readEntry, writeEntry, removeEntry as dbRemoveEntry } from \"../components/tasks/task-store.js\";\n\n\nexport interface CronEntry {\n id: string;\n title?: string;\n fireAt: number;\n message: string;\n chatId: number;\n type: \"reminder\" | \"task\";\n executor?: \"agent\" | \"script\" | \"orc\";\n schedule?: string;\n catchUp?: number; // hours: max delay after fireAt before skipping to next. 0 = no catch-up (default).\n priority?: \"high\" | \"medium\" | \"low\";\n taskFile?: string;\n targetUserId?: string; // #936: route task output to this user's session via spin.injectGreeting()\n agent?: string; // #935: session type \u2014 professor, browsie, coding, dreamy\n deliveryMethod?: \"inline\" | \"report\"; // #1118: inline = chat message, report = file document\n deliveryMode?: \"silent\" | \"deliver\" | \"announce\"; // #1193: silent = no output, deliver = drop to chat, announce = agent speaks\n paused?: boolean;\n maxRunsPerDay?: number;\n consecutiveFails?: number;\n agentFollowUp?: boolean;\n agentMessage?: string;\n fired: boolean;\n createdAt: number;\n lastRanAt?: number;\n retryAfter?: number;\n _prevFireAt?: number;\n _retrying?: boolean;\n history?: { ts: number; exitCode?: number }[];\n}\n\nexport function readEntries(): CronEntry[] {\n return dbReadEntries();\n}\n\ninterface AddArgs {\n id?: string;\n at?: string;\n message?: string;\n chatId?: string;\n type?: string;\n executor?: string;\n schedule?: string;\n title?: string;\n taskFile?: string;\n agent?: string;\n targetUserId?: string;\n}\n\nfunction parseAddArgs(args: string[]): AddArgs {\n const parsed: AddArgs = {};\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--id\": parsed.id = args[++i] ?? \"\"; break;\n case \"--at\": parsed.at = args[++i] ?? \"\"; break;\n case \"--message\": parsed.message = args[++i] ?? \"\"; break;\n case \"--chat-id\": parsed.chatId = args[++i] ?? \"\"; break;\n case \"--type\": parsed.type = args[++i] ?? \"\"; break;\n case \"--executor\": parsed.executor = args[++i] ?? \"\"; break;\n case \"--schedule\": parsed.schedule = args[++i] ?? \"\"; break;\n case \"--title\": parsed.title = args[++i] ?? \"\"; break;\n case \"--task-file\": parsed.taskFile = args[++i] ?? \"\"; break;\n case \"--agent\": parsed.agent = args[++i] ?? \"\"; break;\n case \"--target-user\": parsed.targetUserId = args[++i] ?? \"\"; break;\n }\n }\n return parsed;\n}\n\nimport { CronExpressionParser } from \"cron-parser\";\n\nfunction add(args: string[]): void {\n const parsed = parseAddArgs(args);\n if (!parsed.at && !parsed.schedule) { console.log(JSON.stringify({ ok: false, error: \"--at or --schedule is required\" })); process.exit(1); }\n if (parsed.at && parsed.schedule) { console.log(JSON.stringify({ ok: false, error: \"use --at (one-shot) or --schedule (recurring), not both\" })); process.exit(1); }\n if (!parsed.message) { console.log(JSON.stringify({ ok: false, error: \"--message is required\" })); process.exit(1); }\n if (!parsed.title) { console.log(JSON.stringify({ ok: false, error: \"--title is required\" })); process.exit(1); }\n if (!parsed.chatId) { console.log(JSON.stringify({ ok: false, error: \"--chat-id is required\" })); process.exit(1); }\n\n let fireAt: number;\n let schedule: string | undefined;\n\n if (parsed.schedule) {\n try {\n const expr = CronExpressionParser.parse(parsed.schedule);\n fireAt = expr.next().getTime();\n schedule = parsed.schedule;\n } catch {\n console.log(JSON.stringify({ ok: false, error: \"Invalid --schedule cron expression\" })); process.exit(1);\n }\n } else {\n fireAt = new Date(parsed.at!).getTime();\n if (!Number.isFinite(fireAt)) { console.log(JSON.stringify({ ok: false, error: \"Invalid --at date\" })); process.exit(1); }\n }\n\n const chatId = parseInt(parsed.chatId, 10);\n if (!Number.isFinite(chatId)) { console.log(JSON.stringify({ ok: false, error: \"Invalid --chat-id\" })); process.exit(1); }\n\n const type = (parsed.type ?? \"reminder\") as CronEntry[\"type\"];\n if (type !== \"reminder\" && type !== \"task\") { console.log(JSON.stringify({ ok: false, error: \"--type must be reminder or task\" })); process.exit(1); }\n\n const executor = (parsed.executor ?? \"agent\") as NonNullable<CronEntry[\"executor\"]>;\n if (executor !== \"agent\" && executor !== \"script\" && executor !== \"orc\") { console.log(JSON.stringify({ ok: false, error: \"--executor must be agent, script, or orc\" })); process.exit(1); }\n\n const entry: CronEntry = {\n id: parsed.id || randomBytes(3).toString(\"hex\"),\n title: parsed.title,\n fireAt: fireAt!,\n message: parsed.message,\n chatId,\n type,\n executor,\n ...(schedule ? { schedule } : {}),\n ...(parsed.taskFile ? { taskFile: parsed.taskFile } : {}),\n ...(parsed.agent ? { agent: parsed.agent } : {}),\n ...(parsed.targetUserId ? { targetUserId: parsed.targetUserId } : {}),\n fired: false,\n createdAt: Date.now(),\n };\n\n const entries = dbReadEntries();\n\n // Dedup: reject if a recurring entry with same schedule+message+chatId already exists\n if (schedule) {\n const dup = entries.find(e => e.schedule === schedule && e.message === entry.message && e.chatId === chatId && !e.paused);\n if (dup) { console.log(JSON.stringify({ ok: false, error: \"duplicate\", existing_id: dup.id })); process.exit(1); }\n }\n\n writeEntry(entry);\n console.log(JSON.stringify({ ok: true, action: \"added\", id: entry.id, fireAt: localISO(new Date(fireAt!)), ...(schedule ? { schedule } : {}) }));\n}\n\nfunction listEntries(): void {\n const entries = readEntries().filter(e => !e.fired || e.schedule);\n if (entries.length === 0) {\n console.log(JSON.stringify({ ok: true, entries: [], message: \"No pending cron entries\" }));\n return;\n }\n const display = entries.map(e => ({\n id: e.id,\n fireAt: localISO(new Date(e.fireAt)),\n message: e.message,\n chatId: e.chatId,\n type: e.type,\n ...(e.executor ? { executor: e.executor } : {}),\n ...(e.schedule ? { schedule: e.schedule } : {}),\n ...(e.priority ? { priority: e.priority } : {}),\n ...(e.paused ? { paused: true } : {}),\n ...(e.lastRanAt ? { lastRanAt: localISO(new Date(e.lastRanAt)) } : {}),\n ...(e.history?.length ? { history: e.history } : {}),\n }));\n console.log(JSON.stringify({ ok: true, entries: display }));\n}\n\nfunction remove(id: string): void {\n if (!dbRemoveEntry(id)) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n console.log(JSON.stringify({ ok: true, action: \"removed\", id }));\n}\n\nfunction pause(id: string): void {\n const entry = readEntry(id);\n if (!entry) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n entry.paused = true;\n writeEntry(entry);\n console.log(JSON.stringify({ ok: true, action: \"paused\", id }));\n}\n\nfunction resume(id: string): void {\n const entry = readEntry(id);\n if (!entry) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n entry.paused = false;\n entry.consecutiveFails = 0;\n writeEntry(entry);\n console.log(JSON.stringify({ ok: true, action: \"resumed\", id }));\n}\n\nfunction showHistory(id: string): void {\n const entry = readEntry(id);\n if (!entry) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n const runs = (entry.history ?? []).map(h => ({\n ranAt: localISO(new Date(h.ts)),\n ...(h.exitCode !== undefined ? { exitCode: h.exitCode } : {}),\n }));\n console.log(JSON.stringify({ ok: true, id, message: entry.message.slice(0, 80), runs }));\n}\n\n// --- CLI entry point ---\n\nexport function main(argv: string[] = process.argv): void {\n if (argv.includes('--help')) {\n console.log(`abtars-task \u2014 schedule time-based reminders and tasks.\n\nUsage:\n abtars-task add --at \"2026-03-16T08:00\" --message \"...\" --chat-id ID --type reminder\n abtars-task add --schedule \"0 9 * * *\" --message \"...\" --chat-id ID --type task\n abtars-task list\n abtars-task remove <id>\n abtars-task pause <id>\n abtars-task resume <id>\n abtars-task history <id>`);\n process.exit(0);\n }\n\n const args = argv.slice(2);\n const command = args[0];\n\n switch (command) {\n case \"add\":\n add(args.slice(1));\n break;\n case \"list\":\n listEntries();\n break;\n case \"remove\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task remove <id>\" })); process.exit(1); }\n remove(id);\n break;\n }\n case \"pause\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task pause <id>\" })); process.exit(1); }\n pause(id);\n break;\n }\n case \"resume\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task resume <id>\" })); process.exit(1); }\n resume(id);\n break;\n }\n case \"history\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task history <id>\" })); process.exit(1); }\n showHistory(id);\n break;\n }\n default:\n console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task <add|list|remove|pause|resume|history> [args]\" }));\n process.exit(1);\n }\n}\n\nconst isDirectRun = process.argv[1]?.endsWith(\"abtars-task.ts\") ||\n process.argv[1]?.endsWith(\"abtars-task.js\");\nif (isDirectRun) main();\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAWA;AACA,SAAS,mBAAmB;
|
|
4
|
+
"sourcesContent": ["/**\n * abtars-task \u2014 schedule time-based reminders and tasks.\n *\n * Usage:\n * abtars-task add --at \"2026-03-16T08:00\" --message \"Remind about cookies\" --chat-id 7773842843 --type reminder\n * abtars-task list\n * abtars-task remove <id>\n *\n * File: ~/.abtars/tasks/tasks.json\n */\n\nimport { localISO } from \"../utils/local-time.js\";\nimport { randomBytes } from \"node:crypto\";\nimport { readEntries as dbReadEntries, readEntry, writeEntry, removeEntry as dbRemoveEntry } from \"../components/tasks/task-store.js\";\n\n\nexport interface CronEntry {\n id: string;\n title?: string;\n fireAt: number;\n message: string;\n chatId: number;\n type: \"reminder\" | \"task\";\n executor?: \"agent\" | \"script\" | \"orc\";\n schedule?: string;\n catchUp?: number; // hours: max delay after fireAt before skipping to next. 0 = no catch-up (default).\n priority?: \"high\" | \"medium\" | \"low\";\n taskFile?: string;\n targetUserId?: string; // #936: route task output to this user's session via spin.injectGreeting()\n agent?: string; // #935: session type \u2014 professor, browsie, coding, dreamy\n deliveryMethod?: \"inline\" | \"report\"; // #1118: inline = chat message, report = file document\n deliveryMode?: \"silent\" | \"deliver\" | \"announce\"; // #1193: silent = no output, deliver = drop to chat, announce = agent speaks\n maxToolRounds?: number; // #1283: per-task circuit breaker override (default: 25)\n paused?: boolean;\n maxRunsPerDay?: number;\n consecutiveFails?: number;\n agentFollowUp?: boolean;\n agentMessage?: string;\n fired: boolean;\n createdAt: number;\n lastRanAt?: number;\n retryAfter?: number;\n _prevFireAt?: number;\n _retrying?: boolean;\n history?: { ts: number; exitCode?: number }[];\n}\n\nexport function readEntries(): CronEntry[] {\n return dbReadEntries();\n}\n\ninterface AddArgs {\n id?: string;\n at?: string;\n message?: string;\n chatId?: string;\n type?: string;\n executor?: string;\n schedule?: string;\n title?: string;\n taskFile?: string;\n agent?: string;\n targetUserId?: string;\n}\n\nfunction parseAddArgs(args: string[]): AddArgs {\n const parsed: AddArgs = {};\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--id\": parsed.id = args[++i] ?? \"\"; break;\n case \"--at\": parsed.at = args[++i] ?? \"\"; break;\n case \"--message\": parsed.message = args[++i] ?? \"\"; break;\n case \"--chat-id\": parsed.chatId = args[++i] ?? \"\"; break;\n case \"--type\": parsed.type = args[++i] ?? \"\"; break;\n case \"--executor\": parsed.executor = args[++i] ?? \"\"; break;\n case \"--schedule\": parsed.schedule = args[++i] ?? \"\"; break;\n case \"--title\": parsed.title = args[++i] ?? \"\"; break;\n case \"--task-file\": parsed.taskFile = args[++i] ?? \"\"; break;\n case \"--agent\": parsed.agent = args[++i] ?? \"\"; break;\n case \"--target-user\": parsed.targetUserId = args[++i] ?? \"\"; break;\n }\n }\n return parsed;\n}\n\nimport { CronExpressionParser } from \"cron-parser\";\n\nfunction add(args: string[]): void {\n const parsed = parseAddArgs(args);\n if (!parsed.at && !parsed.schedule) { console.log(JSON.stringify({ ok: false, error: \"--at or --schedule is required\" })); process.exit(1); }\n if (parsed.at && parsed.schedule) { console.log(JSON.stringify({ ok: false, error: \"use --at (one-shot) or --schedule (recurring), not both\" })); process.exit(1); }\n if (!parsed.message) { console.log(JSON.stringify({ ok: false, error: \"--message is required\" })); process.exit(1); }\n if (!parsed.title) { console.log(JSON.stringify({ ok: false, error: \"--title is required\" })); process.exit(1); }\n if (!parsed.chatId) { console.log(JSON.stringify({ ok: false, error: \"--chat-id is required\" })); process.exit(1); }\n\n let fireAt: number;\n let schedule: string | undefined;\n\n if (parsed.schedule) {\n try {\n const expr = CronExpressionParser.parse(parsed.schedule);\n fireAt = expr.next().getTime();\n schedule = parsed.schedule;\n } catch {\n console.log(JSON.stringify({ ok: false, error: \"Invalid --schedule cron expression\" })); process.exit(1);\n }\n } else {\n fireAt = new Date(parsed.at!).getTime();\n if (!Number.isFinite(fireAt)) { console.log(JSON.stringify({ ok: false, error: \"Invalid --at date\" })); process.exit(1); }\n }\n\n const chatId = parseInt(parsed.chatId, 10);\n if (!Number.isFinite(chatId)) { console.log(JSON.stringify({ ok: false, error: \"Invalid --chat-id\" })); process.exit(1); }\n\n const type = (parsed.type ?? \"reminder\") as CronEntry[\"type\"];\n if (type !== \"reminder\" && type !== \"task\") { console.log(JSON.stringify({ ok: false, error: \"--type must be reminder or task\" })); process.exit(1); }\n\n const executor = (parsed.executor ?? \"agent\") as NonNullable<CronEntry[\"executor\"]>;\n if (executor !== \"agent\" && executor !== \"script\" && executor !== \"orc\") { console.log(JSON.stringify({ ok: false, error: \"--executor must be agent, script, or orc\" })); process.exit(1); }\n\n const entry: CronEntry = {\n id: parsed.id || randomBytes(3).toString(\"hex\"),\n title: parsed.title,\n fireAt: fireAt!,\n message: parsed.message,\n chatId,\n type,\n executor,\n ...(schedule ? { schedule } : {}),\n ...(parsed.taskFile ? { taskFile: parsed.taskFile } : {}),\n ...(parsed.agent ? { agent: parsed.agent } : {}),\n ...(parsed.targetUserId ? { targetUserId: parsed.targetUserId } : {}),\n fired: false,\n createdAt: Date.now(),\n };\n\n const entries = dbReadEntries();\n\n // Dedup: reject if a recurring entry with same schedule+message+chatId already exists\n if (schedule) {\n const dup = entries.find(e => e.schedule === schedule && e.message === entry.message && e.chatId === chatId && !e.paused);\n if (dup) { console.log(JSON.stringify({ ok: false, error: \"duplicate\", existing_id: dup.id })); process.exit(1); }\n }\n\n writeEntry(entry);\n console.log(JSON.stringify({ ok: true, action: \"added\", id: entry.id, fireAt: localISO(new Date(fireAt!)), ...(schedule ? { schedule } : {}) }));\n}\n\nfunction listEntries(): void {\n const entries = readEntries().filter(e => !e.fired || e.schedule);\n if (entries.length === 0) {\n console.log(JSON.stringify({ ok: true, entries: [], message: \"No pending cron entries\" }));\n return;\n }\n const display = entries.map(e => ({\n id: e.id,\n fireAt: localISO(new Date(e.fireAt)),\n message: e.message,\n chatId: e.chatId,\n type: e.type,\n ...(e.executor ? { executor: e.executor } : {}),\n ...(e.schedule ? { schedule: e.schedule } : {}),\n ...(e.priority ? { priority: e.priority } : {}),\n ...(e.paused ? { paused: true } : {}),\n ...(e.lastRanAt ? { lastRanAt: localISO(new Date(e.lastRanAt)) } : {}),\n ...(e.history?.length ? { history: e.history } : {}),\n }));\n console.log(JSON.stringify({ ok: true, entries: display }));\n}\n\nfunction remove(id: string): void {\n if (!dbRemoveEntry(id)) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n console.log(JSON.stringify({ ok: true, action: \"removed\", id }));\n}\n\nfunction pause(id: string): void {\n const entry = readEntry(id);\n if (!entry) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n entry.paused = true;\n writeEntry(entry);\n console.log(JSON.stringify({ ok: true, action: \"paused\", id }));\n}\n\nfunction resume(id: string): void {\n const entry = readEntry(id);\n if (!entry) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n entry.paused = false;\n entry.consecutiveFails = 0;\n writeEntry(entry);\n console.log(JSON.stringify({ ok: true, action: \"resumed\", id }));\n}\n\nfunction showHistory(id: string): void {\n const entry = readEntry(id);\n if (!entry) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n const runs = (entry.history ?? []).map(h => ({\n ranAt: localISO(new Date(h.ts)),\n ...(h.exitCode !== undefined ? { exitCode: h.exitCode } : {}),\n }));\n console.log(JSON.stringify({ ok: true, id, message: entry.message.slice(0, 80), runs }));\n}\n\n// --- CLI entry point ---\n\nexport function main(argv: string[] = process.argv): void {\n if (argv.includes('--help')) {\n console.log(`abtars-task \u2014 schedule time-based reminders and tasks.\n\nUsage:\n abtars-task add --at \"2026-03-16T08:00\" --message \"...\" --chat-id ID --type reminder\n abtars-task add --schedule \"0 9 * * *\" --message \"...\" --chat-id ID --type task\n abtars-task list\n abtars-task remove <id>\n abtars-task pause <id>\n abtars-task resume <id>\n abtars-task history <id>`);\n process.exit(0);\n }\n\n const args = argv.slice(2);\n const command = args[0];\n\n switch (command) {\n case \"add\":\n add(args.slice(1));\n break;\n case \"list\":\n listEntries();\n break;\n case \"remove\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task remove <id>\" })); process.exit(1); }\n remove(id);\n break;\n }\n case \"pause\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task pause <id>\" })); process.exit(1); }\n pause(id);\n break;\n }\n case \"resume\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task resume <id>\" })); process.exit(1); }\n resume(id);\n break;\n }\n case \"history\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task history <id>\" })); process.exit(1); }\n showHistory(id);\n break;\n }\n default:\n console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task <add|list|remove|pause|resume|history> [args]\" }));\n process.exit(1);\n }\n}\n\nconst isDirectRun = process.argv[1]?.endsWith(\"abtars-task.ts\") ||\n process.argv[1]?.endsWith(\"abtars-task.js\");\nif (isDirectRun) main();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["readEntries"]
|
|
7
7
|
}
|