@dexto/tools-scheduler 1.6.0 → 1.6.2

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 (62) hide show
  1. package/dist/error-codes.d.ts +2 -3
  2. package/dist/error-codes.d.ts.map +1 -0
  3. package/dist/errors.d.ts +4 -7
  4. package/dist/errors.d.ts.map +1 -0
  5. package/dist/executor.d.ts +4 -9
  6. package/dist/executor.d.ts.map +1 -0
  7. package/dist/index.cjs +0 -36
  8. package/dist/index.d.cts +2 -12
  9. package/dist/index.d.ts +10 -17
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +1 -29
  12. package/dist/manager.cjs +9 -4
  13. package/dist/manager.d.cts +3 -1
  14. package/dist/manager.d.ts +9 -10
  15. package/dist/manager.d.ts.map +1 -0
  16. package/dist/manager.js +8 -3
  17. package/dist/schemas.d.ts +21 -24
  18. package/dist/schemas.d.ts.map +1 -0
  19. package/dist/service/index.cjs +46 -0
  20. package/dist/service/index.d.cts +11 -0
  21. package/dist/service/index.d.ts +7 -0
  22. package/dist/service/index.d.ts.map +1 -0
  23. package/dist/service/index.js +20 -0
  24. package/dist/service.cjs +51 -0
  25. package/dist/service.d.cts +37 -0
  26. package/dist/service.d.ts +34 -0
  27. package/dist/service.d.ts.map +1 -0
  28. package/dist/service.js +27 -0
  29. package/dist/storage.cjs +21 -16
  30. package/dist/storage.d.cts +4 -1
  31. package/dist/storage.d.ts +8 -10
  32. package/dist/storage.d.ts.map +1 -0
  33. package/dist/storage.js +21 -16
  34. package/dist/tool-provider.cjs +17 -2
  35. package/dist/tool-provider.d.cts +9 -1
  36. package/dist/tool-provider.d.ts +17 -14
  37. package/dist/tool-provider.d.ts.map +1 -0
  38. package/dist/tool-provider.js +14 -1
  39. package/dist/tool-types.d.ts +4 -9
  40. package/dist/tool-types.d.ts.map +1 -0
  41. package/dist/tools/create-schedule.d.ts +4 -11
  42. package/dist/tools/create-schedule.d.ts.map +1 -0
  43. package/dist/tools/delete-schedule.d.ts +4 -11
  44. package/dist/tools/delete-schedule.d.ts.map +1 -0
  45. package/dist/tools/get-history.d.ts +4 -11
  46. package/dist/tools/get-history.d.ts.map +1 -0
  47. package/dist/tools/get-schedule.d.ts +4 -11
  48. package/dist/tools/get-schedule.d.ts.map +1 -0
  49. package/dist/tools/index.cjs +49 -0
  50. package/dist/tools/index.d.cts +15 -0
  51. package/dist/tools/index.d.ts +9 -0
  52. package/dist/tools/index.d.ts.map +1 -0
  53. package/dist/tools/index.js +18 -0
  54. package/dist/tools/list-schedules.d.ts +4 -11
  55. package/dist/tools/list-schedules.d.ts.map +1 -0
  56. package/dist/tools/trigger-schedule.d.ts +4 -11
  57. package/dist/tools/trigger-schedule.d.ts.map +1 -0
  58. package/dist/tools/update-schedule.d.ts +4 -11
  59. package/dist/tools/update-schedule.d.ts.map +1 -0
  60. package/dist/types.d.ts +6 -10
  61. package/dist/types.d.ts.map +1 -0
  62. package/package.json +12 -4
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var service_exports = {};
20
+ __export(service_exports, {
21
+ createSchedulerService: () => createSchedulerService
22
+ });
23
+ module.exports = __toCommonJS(service_exports);
24
+ var import_schemas = require("./schemas.js");
25
+ var import_manager = require("./manager.js");
26
+ async function createSchedulerService(options) {
27
+ const resolvedConfig = options.config ?? import_schemas.SchedulerToolsConfigSchema.parse({ type: "scheduler-tools" });
28
+ const manager = new import_manager.SchedulerManager(
29
+ options.storageManager,
30
+ resolvedConfig,
31
+ options.logger,
32
+ options.storageNamespace ? { storageNamespace: options.storageNamespace } : void 0
33
+ );
34
+ if (options.executor) {
35
+ manager.setExecutor(options.executor);
36
+ }
37
+ await manager.init();
38
+ if (options.autoStart !== false) {
39
+ try {
40
+ await manager.start();
41
+ } catch (error) {
42
+ await manager.stop().catch(() => void 0);
43
+ throw error;
44
+ }
45
+ }
46
+ return manager;
47
+ }
48
+ // Annotate the CommonJS export names for ESM import in node:
49
+ 0 && (module.exports = {
50
+ createSchedulerService
51
+ });
@@ -0,0 +1,37 @@
1
+ import { StorageManager, Logger } from '@dexto/core';
2
+ import { SchedulerToolsConfig } from './schemas.cjs';
3
+ import { ScheduleExecutorFn } from './types.cjs';
4
+ import { SchedulerManager } from './manager.cjs';
5
+ import 'zod';
6
+
7
+ /**
8
+ * Options for constructing a scheduler service.
9
+ *
10
+ * @property storageManager Storage manager used for persistence.
11
+ * @property logger Logger used by the scheduler manager.
12
+ * @property config Optional scheduler config. Defaults to `SchedulerToolsConfigSchema` when omitted.
13
+ * @property storageNamespace Optional namespace for scheduler storage.
14
+ * @property executor Optional executor override for schedule runs.
15
+ * @property autoStart When false, initializes without starting the scheduler.
16
+ */
17
+ type SchedulerServiceOptions = {
18
+ storageManager: StorageManager;
19
+ logger: Logger;
20
+ config?: SchedulerToolsConfig;
21
+ storageNamespace?: string;
22
+ executor?: ScheduleExecutorFn;
23
+ autoStart?: boolean;
24
+ };
25
+ /**
26
+ * Create and initialize a SchedulerManager with optional overrides.
27
+ *
28
+ * If `config` is omitted, this uses `SchedulerToolsConfigSchema` to provide defaults.
29
+ * Use `executor` to override how scheduled tasks are executed without changing storage or config.
30
+ *
31
+ * @param options Service construction options.
32
+ *
33
+ * @returns A ready-to-use SchedulerManager instance.
34
+ */
35
+ declare function createSchedulerService(options: SchedulerServiceOptions): Promise<SchedulerManager>;
36
+
37
+ export { type SchedulerServiceOptions, createSchedulerService };
@@ -0,0 +1,34 @@
1
+ import type { Logger, StorageManager } from '@dexto/core';
2
+ import { type SchedulerToolsConfig } from './schemas.js';
3
+ import type { ScheduleExecutorFn } from './types.js';
4
+ import { SchedulerManager } from './manager.js';
5
+ /**
6
+ * Options for constructing a scheduler service.
7
+ *
8
+ * @property storageManager Storage manager used for persistence.
9
+ * @property logger Logger used by the scheduler manager.
10
+ * @property config Optional scheduler config. Defaults to `SchedulerToolsConfigSchema` when omitted.
11
+ * @property storageNamespace Optional namespace for scheduler storage.
12
+ * @property executor Optional executor override for schedule runs.
13
+ * @property autoStart When false, initializes without starting the scheduler.
14
+ */
15
+ export type SchedulerServiceOptions = {
16
+ storageManager: StorageManager;
17
+ logger: Logger;
18
+ config?: SchedulerToolsConfig;
19
+ storageNamespace?: string;
20
+ executor?: ScheduleExecutorFn;
21
+ autoStart?: boolean;
22
+ };
23
+ /**
24
+ * Create and initialize a SchedulerManager with optional overrides.
25
+ *
26
+ * If `config` is omitted, this uses `SchedulerToolsConfigSchema` to provide defaults.
27
+ * Use `executor` to override how scheduled tasks are executed without changing storage or config.
28
+ *
29
+ * @param options Service construction options.
30
+ *
31
+ * @returns A ready-to-use SchedulerManager instance.
32
+ */
33
+ export declare function createSchedulerService(options: SchedulerServiceOptions): Promise<SchedulerManager>;
34
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;;;GASG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAClC,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CACxC,OAAO,EAAE,uBAAuB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CAyB3B"}
@@ -0,0 +1,27 @@
1
+ import { SchedulerToolsConfigSchema } from "./schemas.js";
2
+ import { SchedulerManager } from "./manager.js";
3
+ async function createSchedulerService(options) {
4
+ const resolvedConfig = options.config ?? SchedulerToolsConfigSchema.parse({ type: "scheduler-tools" });
5
+ const manager = new SchedulerManager(
6
+ options.storageManager,
7
+ resolvedConfig,
8
+ options.logger,
9
+ options.storageNamespace ? { storageNamespace: options.storageNamespace } : void 0
10
+ );
11
+ if (options.executor) {
12
+ manager.setExecutor(options.executor);
13
+ }
14
+ await manager.init();
15
+ if (options.autoStart !== false) {
16
+ try {
17
+ await manager.start();
18
+ } catch (error) {
19
+ await manager.stop().catch(() => void 0);
20
+ throw error;
21
+ }
22
+ }
23
+ return manager;
24
+ }
25
+ export {
26
+ createSchedulerService
27
+ };
package/dist/storage.cjs CHANGED
@@ -22,21 +22,26 @@ __export(storage_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(storage_exports);
24
24
  var import_errors = require("./errors.js");
25
- const SCHEDULE_PREFIX = "schedule:";
26
- const EXECUTION_LOG_PREFIX = "execution:";
27
- const SCHEDULE_LIST_KEY = "scheduler:schedules";
25
+ const DEFAULT_SCHEDULER_NAMESPACE = "default";
28
26
  class ScheduleStorage {
29
- constructor(storageManager, maxExecutionHistory, logger) {
27
+ constructor(storageManager, maxExecutionHistory, logger, namespace) {
30
28
  this.storageManager = storageManager;
31
29
  this.maxExecutionHistory = maxExecutionHistory;
32
30
  this.logger = logger;
31
+ const ns = namespace && namespace.trim().length > 0 ? namespace.trim() : DEFAULT_SCHEDULER_NAMESPACE;
32
+ this.schedulePrefix = `scheduler:${ns}:schedule:`;
33
+ this.executionLogPrefix = `scheduler:${ns}:execution:`;
34
+ this.scheduleListKey = `scheduler:${ns}:schedules`;
33
35
  }
34
36
  listLock = Promise.resolve();
37
+ schedulePrefix;
38
+ executionLogPrefix;
39
+ scheduleListKey;
35
40
  /**
36
41
  * Save a schedule to persistent storage
37
42
  */
38
43
  async saveSchedule(schedule) {
39
- const key = `${SCHEDULE_PREFIX}${schedule.id}`;
44
+ const key = `${this.schedulePrefix}${schedule.id}`;
40
45
  let persisted = false;
41
46
  try {
42
47
  await this.storageManager.getDatabase().set(key, schedule);
@@ -64,7 +69,7 @@ class ScheduleStorage {
64
69
  */
65
70
  async loadSchedule(scheduleId) {
66
71
  try {
67
- const key = `${SCHEDULE_PREFIX}${scheduleId}`;
72
+ const key = `${this.schedulePrefix}${scheduleId}`;
68
73
  const schedule = await this.storageManager.getDatabase().get(key);
69
74
  return schedule || null;
70
75
  } catch (error) {
@@ -79,7 +84,7 @@ class ScheduleStorage {
79
84
  */
80
85
  async listSchedules() {
81
86
  try {
82
- const scheduleIds = await this.storageManager.getDatabase().get(SCHEDULE_LIST_KEY) || [];
87
+ const scheduleIds = await this.storageManager.getDatabase().get(this.scheduleListKey) || [];
83
88
  const schedules = [];
84
89
  for (const scheduleId of scheduleIds) {
85
90
  const schedule = await this.loadSchedule(scheduleId);
@@ -102,7 +107,7 @@ class ScheduleStorage {
102
107
  let removedFromList = false;
103
108
  let deletedSchedule = false;
104
109
  try {
105
- const key = `${SCHEDULE_PREFIX}${scheduleId}`;
110
+ const key = `${this.schedulePrefix}${scheduleId}`;
106
111
  await this.removeScheduleFromList(scheduleId);
107
112
  removedFromList = true;
108
113
  await this.storageManager.getDatabase().delete(key);
@@ -130,7 +135,7 @@ class ScheduleStorage {
130
135
  */
131
136
  async saveExecutionLog(log) {
132
137
  try {
133
- const key = `${EXECUTION_LOG_PREFIX}${log.scheduleId}:${log.id}`;
138
+ const key = `${this.executionLogPrefix}${log.scheduleId}:${log.id}`;
134
139
  await this.storageManager.getDatabase().set(key, log);
135
140
  await this.pruneExecutionHistory(log.scheduleId);
136
141
  this.logger.debug(`Execution log ${log.id} saved for schedule ${log.scheduleId}`, {
@@ -148,7 +153,7 @@ class ScheduleStorage {
148
153
  */
149
154
  async getExecutionLogs(scheduleId, limit) {
150
155
  try {
151
- const prefix = `${EXECUTION_LOG_PREFIX}${scheduleId}:`;
156
+ const prefix = `${this.executionLogPrefix}${scheduleId}:`;
152
157
  const keys = await this.storageManager.getDatabase().list(prefix);
153
158
  const logs = [];
154
159
  for (const key of keys) {
@@ -171,7 +176,7 @@ class ScheduleStorage {
171
176
  */
172
177
  async deleteExecutionLogs(scheduleId) {
173
178
  try {
174
- const prefix = `${EXECUTION_LOG_PREFIX}${scheduleId}:`;
179
+ const prefix = `${this.executionLogPrefix}${scheduleId}:`;
175
180
  const keys = await this.storageManager.getDatabase().list(prefix);
176
181
  for (const key of keys) {
177
182
  await this.storageManager.getDatabase().delete(key);
@@ -192,7 +197,7 @@ class ScheduleStorage {
192
197
  if (logs.length > this.maxExecutionHistory) {
193
198
  const logsToDelete = logs.slice(this.maxExecutionHistory);
194
199
  for (const log of logsToDelete) {
195
- const key = `${EXECUTION_LOG_PREFIX}${scheduleId}:${log.id}`;
200
+ const key = `${this.executionLogPrefix}${scheduleId}:${log.id}`;
196
201
  await this.storageManager.getDatabase().delete(key);
197
202
  }
198
203
  this.logger.debug(
@@ -210,10 +215,10 @@ class ScheduleStorage {
210
215
  */
211
216
  async addScheduleToList(scheduleId) {
212
217
  await this.withListLock(async () => {
213
- const scheduleIds = await this.storageManager.getDatabase().get(SCHEDULE_LIST_KEY) || [];
218
+ const scheduleIds = await this.storageManager.getDatabase().get(this.scheduleListKey) || [];
214
219
  if (!scheduleIds.includes(scheduleId)) {
215
220
  scheduleIds.push(scheduleId);
216
- await this.storageManager.getDatabase().set(SCHEDULE_LIST_KEY, scheduleIds);
221
+ await this.storageManager.getDatabase().set(this.scheduleListKey, scheduleIds);
217
222
  }
218
223
  });
219
224
  }
@@ -222,9 +227,9 @@ class ScheduleStorage {
222
227
  */
223
228
  async removeScheduleFromList(scheduleId) {
224
229
  await this.withListLock(async () => {
225
- const scheduleIds = await this.storageManager.getDatabase().get(SCHEDULE_LIST_KEY) || [];
230
+ const scheduleIds = await this.storageManager.getDatabase().get(this.scheduleListKey) || [];
226
231
  const filtered = scheduleIds.filter((id) => id !== scheduleId);
227
- await this.storageManager.getDatabase().set(SCHEDULE_LIST_KEY, filtered);
232
+ await this.storageManager.getDatabase().set(this.scheduleListKey, filtered);
228
233
  });
229
234
  }
230
235
  async withListLock(handler) {
@@ -15,7 +15,10 @@ declare class ScheduleStorage {
15
15
  private maxExecutionHistory;
16
16
  private logger;
17
17
  private listLock;
18
- constructor(storageManager: StorageManager, maxExecutionHistory: number, logger: Logger);
18
+ private schedulePrefix;
19
+ private executionLogPrefix;
20
+ private scheduleListKey;
21
+ constructor(storageManager: StorageManager, maxExecutionHistory: number, logger: Logger, namespace?: string);
19
22
  /**
20
23
  * Save a schedule to persistent storage
21
24
  */
package/dist/storage.d.ts CHANGED
@@ -1,21 +1,20 @@
1
- import { StorageManager, Logger } from '@dexto/core';
2
- import { Schedule, ExecutionLog } from './types.js';
3
- import './schemas.js';
4
- import 'zod';
5
-
6
1
  /**
7
2
  * Storage layer for schedules and execution logs
8
3
  */
9
-
4
+ import type { StorageManager, Logger } from '@dexto/core';
5
+ import type { Schedule, ExecutionLog } from './types.js';
10
6
  /**
11
7
  * Storage layer for scheduler persistence
12
8
  */
13
- declare class ScheduleStorage {
9
+ export declare class ScheduleStorage {
14
10
  private storageManager;
15
11
  private maxExecutionHistory;
16
12
  private logger;
17
13
  private listLock;
18
- constructor(storageManager: StorageManager, maxExecutionHistory: number, logger: Logger);
14
+ private schedulePrefix;
15
+ private executionLogPrefix;
16
+ private scheduleListKey;
17
+ constructor(storageManager: StorageManager, maxExecutionHistory: number, logger: Logger, namespace?: string);
19
18
  /**
20
19
  * Save a schedule to persistent storage
21
20
  */
@@ -58,5 +57,4 @@ declare class ScheduleStorage {
58
57
  private removeScheduleFromList;
59
58
  private withListLock;
60
59
  }
61
-
62
- export { ScheduleStorage };
60
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAKzD;;GAEG;AACH,qBAAa,eAAe;IAOpB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,MAAM;IARlB,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,eAAe,CAAS;gBAGpB,cAAc,EAAE,cAAc,EAC9B,mBAAmB,EAAE,MAAM,EAC3B,MAAM,EAAE,MAAM,EACtB,SAAS,CAAC,EAAE,MAAM;IAWtB;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BrD;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAahE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAwB1C;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCvD;;OAEG;IACG,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxD;;OAEG;IACG,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA2BnF;;OAEG;YACW,mBAAmB;IAkBjC;;OAEG;YACW,qBAAqB;IAyBnC;;OAEG;YACW,iBAAiB;IAY/B;;OAEG;YACW,sBAAsB;YAWtB,YAAY;CAiB7B"}
package/dist/storage.js CHANGED
@@ -1,19 +1,24 @@
1
1
  import { SchedulerError } from "./errors.js";
2
- const SCHEDULE_PREFIX = "schedule:";
3
- const EXECUTION_LOG_PREFIX = "execution:";
4
- const SCHEDULE_LIST_KEY = "scheduler:schedules";
2
+ const DEFAULT_SCHEDULER_NAMESPACE = "default";
5
3
  class ScheduleStorage {
6
- constructor(storageManager, maxExecutionHistory, logger) {
4
+ constructor(storageManager, maxExecutionHistory, logger, namespace) {
7
5
  this.storageManager = storageManager;
8
6
  this.maxExecutionHistory = maxExecutionHistory;
9
7
  this.logger = logger;
8
+ const ns = namespace && namespace.trim().length > 0 ? namespace.trim() : DEFAULT_SCHEDULER_NAMESPACE;
9
+ this.schedulePrefix = `scheduler:${ns}:schedule:`;
10
+ this.executionLogPrefix = `scheduler:${ns}:execution:`;
11
+ this.scheduleListKey = `scheduler:${ns}:schedules`;
10
12
  }
11
13
  listLock = Promise.resolve();
14
+ schedulePrefix;
15
+ executionLogPrefix;
16
+ scheduleListKey;
12
17
  /**
13
18
  * Save a schedule to persistent storage
14
19
  */
15
20
  async saveSchedule(schedule) {
16
- const key = `${SCHEDULE_PREFIX}${schedule.id}`;
21
+ const key = `${this.schedulePrefix}${schedule.id}`;
17
22
  let persisted = false;
18
23
  try {
19
24
  await this.storageManager.getDatabase().set(key, schedule);
@@ -41,7 +46,7 @@ class ScheduleStorage {
41
46
  */
42
47
  async loadSchedule(scheduleId) {
43
48
  try {
44
- const key = `${SCHEDULE_PREFIX}${scheduleId}`;
49
+ const key = `${this.schedulePrefix}${scheduleId}`;
45
50
  const schedule = await this.storageManager.getDatabase().get(key);
46
51
  return schedule || null;
47
52
  } catch (error) {
@@ -56,7 +61,7 @@ class ScheduleStorage {
56
61
  */
57
62
  async listSchedules() {
58
63
  try {
59
- const scheduleIds = await this.storageManager.getDatabase().get(SCHEDULE_LIST_KEY) || [];
64
+ const scheduleIds = await this.storageManager.getDatabase().get(this.scheduleListKey) || [];
60
65
  const schedules = [];
61
66
  for (const scheduleId of scheduleIds) {
62
67
  const schedule = await this.loadSchedule(scheduleId);
@@ -79,7 +84,7 @@ class ScheduleStorage {
79
84
  let removedFromList = false;
80
85
  let deletedSchedule = false;
81
86
  try {
82
- const key = `${SCHEDULE_PREFIX}${scheduleId}`;
87
+ const key = `${this.schedulePrefix}${scheduleId}`;
83
88
  await this.removeScheduleFromList(scheduleId);
84
89
  removedFromList = true;
85
90
  await this.storageManager.getDatabase().delete(key);
@@ -107,7 +112,7 @@ class ScheduleStorage {
107
112
  */
108
113
  async saveExecutionLog(log) {
109
114
  try {
110
- const key = `${EXECUTION_LOG_PREFIX}${log.scheduleId}:${log.id}`;
115
+ const key = `${this.executionLogPrefix}${log.scheduleId}:${log.id}`;
111
116
  await this.storageManager.getDatabase().set(key, log);
112
117
  await this.pruneExecutionHistory(log.scheduleId);
113
118
  this.logger.debug(`Execution log ${log.id} saved for schedule ${log.scheduleId}`, {
@@ -125,7 +130,7 @@ class ScheduleStorage {
125
130
  */
126
131
  async getExecutionLogs(scheduleId, limit) {
127
132
  try {
128
- const prefix = `${EXECUTION_LOG_PREFIX}${scheduleId}:`;
133
+ const prefix = `${this.executionLogPrefix}${scheduleId}:`;
129
134
  const keys = await this.storageManager.getDatabase().list(prefix);
130
135
  const logs = [];
131
136
  for (const key of keys) {
@@ -148,7 +153,7 @@ class ScheduleStorage {
148
153
  */
149
154
  async deleteExecutionLogs(scheduleId) {
150
155
  try {
151
- const prefix = `${EXECUTION_LOG_PREFIX}${scheduleId}:`;
156
+ const prefix = `${this.executionLogPrefix}${scheduleId}:`;
152
157
  const keys = await this.storageManager.getDatabase().list(prefix);
153
158
  for (const key of keys) {
154
159
  await this.storageManager.getDatabase().delete(key);
@@ -169,7 +174,7 @@ class ScheduleStorage {
169
174
  if (logs.length > this.maxExecutionHistory) {
170
175
  const logsToDelete = logs.slice(this.maxExecutionHistory);
171
176
  for (const log of logsToDelete) {
172
- const key = `${EXECUTION_LOG_PREFIX}${scheduleId}:${log.id}`;
177
+ const key = `${this.executionLogPrefix}${scheduleId}:${log.id}`;
173
178
  await this.storageManager.getDatabase().delete(key);
174
179
  }
175
180
  this.logger.debug(
@@ -187,10 +192,10 @@ class ScheduleStorage {
187
192
  */
188
193
  async addScheduleToList(scheduleId) {
189
194
  await this.withListLock(async () => {
190
- const scheduleIds = await this.storageManager.getDatabase().get(SCHEDULE_LIST_KEY) || [];
195
+ const scheduleIds = await this.storageManager.getDatabase().get(this.scheduleListKey) || [];
191
196
  if (!scheduleIds.includes(scheduleId)) {
192
197
  scheduleIds.push(scheduleId);
193
- await this.storageManager.getDatabase().set(SCHEDULE_LIST_KEY, scheduleIds);
198
+ await this.storageManager.getDatabase().set(this.scheduleListKey, scheduleIds);
194
199
  }
195
200
  });
196
201
  }
@@ -199,9 +204,9 @@ class ScheduleStorage {
199
204
  */
200
205
  async removeScheduleFromList(scheduleId) {
201
206
  await this.withListLock(async () => {
202
- const scheduleIds = await this.storageManager.getDatabase().get(SCHEDULE_LIST_KEY) || [];
207
+ const scheduleIds = await this.storageManager.getDatabase().get(this.scheduleListKey) || [];
203
208
  const filtered = scheduleIds.filter((id) => id !== scheduleId);
204
- await this.storageManager.getDatabase().set(SCHEDULE_LIST_KEY, filtered);
209
+ await this.storageManager.getDatabase().set(this.scheduleListKey, filtered);
205
210
  });
206
211
  }
207
212
  async withListLock(handler) {
@@ -21,7 +21,9 @@ __export(tool_provider_exports, {
21
21
  createSchedulerTools: () => createSchedulerTools,
22
22
  ensureSchedulerManagerForAgent: () => ensureSchedulerManagerForAgent,
23
23
  getSchedulerManager: () => getSchedulerManager,
24
- schedulerToolsFactory: () => schedulerToolsFactory
24
+ registerSchedulerManager: () => registerSchedulerManager,
25
+ schedulerToolsFactory: () => schedulerToolsFactory,
26
+ unregisterSchedulerManager: () => unregisterSchedulerManager
25
27
  });
26
28
  module.exports = __toCommonJS(tool_provider_exports);
27
29
  var import_core = require("@dexto/core");
@@ -39,6 +41,17 @@ const schedulerManagerRegistry = /* @__PURE__ */ new Map();
39
41
  const schedulerConfigRegistry = /* @__PURE__ */ new Map();
40
42
  const schedulerManagerInitPromises = /* @__PURE__ */ new Map();
41
43
  let defaultSchedulerConfig;
44
+ function registerSchedulerManager(agentId, manager, config) {
45
+ schedulerManagerRegistry.set(agentId, manager);
46
+ if (config) {
47
+ schedulerConfigRegistry.set(agentId, config);
48
+ }
49
+ }
50
+ function unregisterSchedulerManager(agentId) {
51
+ schedulerManagerRegistry.delete(agentId);
52
+ schedulerConfigRegistry.delete(agentId);
53
+ schedulerManagerInitPromises.delete(agentId);
54
+ }
42
55
  function getSchedulerManager(agentId) {
43
56
  return schedulerManagerRegistry.get(agentId);
44
57
  }
@@ -235,5 +248,7 @@ const schedulerToolsFactory = {
235
248
  createSchedulerTools,
236
249
  ensureSchedulerManagerForAgent,
237
250
  getSchedulerManager,
238
- schedulerToolsFactory
251
+ registerSchedulerManager,
252
+ schedulerToolsFactory,
253
+ unregisterSchedulerManager
239
254
  });
@@ -12,6 +12,14 @@ import './types.cjs';
12
12
  * When a scheduled task triggers, it invokes the agent with the task instruction.
13
13
  */
14
14
 
15
+ /**
16
+ * Register an externally managed scheduler manager (e.g., runtime-owned service).
17
+ */
18
+ declare function registerSchedulerManager(agentId: string, manager: SchedulerManager, config?: SchedulerToolsConfig): void;
19
+ /**
20
+ * Unregister a scheduler manager and associated config.
21
+ */
22
+ declare function unregisterSchedulerManager(agentId: string): void;
15
23
  /**
16
24
  * Get a scheduler manager instance by agent ID.
17
25
  * Returns undefined if no scheduler is registered for the agent.
@@ -31,4 +39,4 @@ declare function createSchedulerTools(manager: SchedulerManager): Tool[];
31
39
  */
32
40
  declare const schedulerToolsFactory: ToolFactory<SchedulerToolsConfig>;
33
41
 
34
- export { createSchedulerTools, ensureSchedulerManagerForAgent, getSchedulerManager, schedulerToolsFactory };
42
+ export { createSchedulerTools, ensureSchedulerManagerForAgent, getSchedulerManager, registerSchedulerManager, schedulerToolsFactory, unregisterSchedulerManager };
@@ -1,34 +1,37 @@
1
- import { ToolFactory } from '@dexto/agent-config';
2
- import { ToolExecutionContext, Logger, Tool } from '@dexto/core';
3
- import { SchedulerToolsConfig } from './schemas.js';
4
- import { SchedulerManager } from './manager.js';
5
- import 'zod';
6
- import './types.js';
7
-
8
1
  /**
9
2
  * Scheduler Tools Factory
10
3
  *
11
4
  * Provides cron-based scheduling capabilities for proactive agent behavior.
12
5
  * When a scheduled task triggers, it invokes the agent with the task instruction.
13
6
  */
14
-
7
+ import type { ToolFactory } from '@dexto/agent-config';
8
+ import type { Tool, ToolExecutionContext, Logger } from '@dexto/core';
9
+ import { type SchedulerToolsConfig } from './schemas.js';
10
+ import { SchedulerManager } from './manager.js';
11
+ /**
12
+ * Register an externally managed scheduler manager (e.g., runtime-owned service).
13
+ */
14
+ export declare function registerSchedulerManager(agentId: string, manager: SchedulerManager, config?: SchedulerToolsConfig): void;
15
+ /**
16
+ * Unregister a scheduler manager and associated config.
17
+ */
18
+ export declare function unregisterSchedulerManager(agentId: string): void;
15
19
  /**
16
20
  * Get a scheduler manager instance by agent ID.
17
21
  * Returns undefined if no scheduler is registered for the agent.
18
22
  */
19
- declare function getSchedulerManager(agentId: string): SchedulerManager | undefined;
23
+ export declare function getSchedulerManager(agentId: string): SchedulerManager | undefined;
20
24
  /**
21
25
  * Ensure a scheduler manager is available for the given agent.
22
26
  * Returns null if scheduler tools are not enabled in this process.
23
27
  */
24
- declare function ensureSchedulerManagerForAgent(agent: ToolExecutionContext['agent'], config?: SchedulerToolsConfig, loggerOverride?: Logger): Promise<SchedulerManager | null>;
28
+ export declare function ensureSchedulerManagerForAgent(agent: ToolExecutionContext['agent'], config?: SchedulerToolsConfig, loggerOverride?: Logger): Promise<SchedulerManager | null>;
25
29
  /**
26
30
  * Create scheduler tools from an existing manager instance.
27
31
  */
28
- declare function createSchedulerTools(manager: SchedulerManager): Tool[];
32
+ export declare function createSchedulerTools(manager: SchedulerManager): Tool[];
29
33
  /**
30
34
  * Scheduler tools factory for Dexto agents.
31
35
  */
32
- declare const schedulerToolsFactory: ToolFactory<SchedulerToolsConfig>;
33
-
34
- export { createSchedulerTools, ensureSchedulerManagerForAgent, getSchedulerManager, schedulerToolsFactory };
36
+ export declare const schedulerToolsFactory: ToolFactory<SchedulerToolsConfig>;
37
+ //# sourceMappingURL=tool-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-provider.d.ts","sourceRoot":"","sources":["../src/tool-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEtE,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAqBhD;;GAEG;AACH,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,oBAAoB,GAC9B,IAAI,CAKN;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIhE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEjF;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAChD,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,EACpC,MAAM,CAAC,EAAE,oBAAoB,EAC7B,cAAc,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAwKlC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAAE,CAUtE;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,oBAAoB,CAwCnE,CAAC"}
@@ -13,6 +13,17 @@ const schedulerManagerRegistry = /* @__PURE__ */ new Map();
13
13
  const schedulerConfigRegistry = /* @__PURE__ */ new Map();
14
14
  const schedulerManagerInitPromises = /* @__PURE__ */ new Map();
15
15
  let defaultSchedulerConfig;
16
+ function registerSchedulerManager(agentId, manager, config) {
17
+ schedulerManagerRegistry.set(agentId, manager);
18
+ if (config) {
19
+ schedulerConfigRegistry.set(agentId, config);
20
+ }
21
+ }
22
+ function unregisterSchedulerManager(agentId) {
23
+ schedulerManagerRegistry.delete(agentId);
24
+ schedulerConfigRegistry.delete(agentId);
25
+ schedulerManagerInitPromises.delete(agentId);
26
+ }
16
27
  function getSchedulerManager(agentId) {
17
28
  return schedulerManagerRegistry.get(agentId);
18
29
  }
@@ -208,5 +219,7 @@ export {
208
219
  createSchedulerTools,
209
220
  ensureSchedulerManagerForAgent,
210
221
  getSchedulerManager,
211
- schedulerToolsFactory
222
+ registerSchedulerManager,
223
+ schedulerToolsFactory,
224
+ unregisterSchedulerManager
212
225
  };
@@ -1,9 +1,4 @@
1
- import { ToolExecutionContext } from '@dexto/core';
2
- import { SchedulerManager } from './manager.js';
3
- import './schemas.js';
4
- import 'zod';
5
- import './types.js';
6
-
7
- type SchedulerManagerGetter = (context: ToolExecutionContext) => Promise<SchedulerManager>;
8
-
9
- export type { SchedulerManagerGetter };
1
+ import type { ToolExecutionContext } from '@dexto/core';
2
+ import type { SchedulerManager } from './manager.js';
3
+ export type SchedulerManagerGetter = (context: ToolExecutionContext) => Promise<SchedulerManager>;
4
+ //# sourceMappingURL=tool-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-types.d.ts","sourceRoot":"","sources":["../src/tool-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC"}
@@ -1,14 +1,7 @@
1
- import { Tool } from '@dexto/core';
2
- import { SchedulerManagerGetter } from '../tool-types.js';
3
- import '../manager.js';
4
- import '../schemas.js';
5
- import 'zod';
6
- import '../types.js';
7
-
8
1
  /**
9
2
  * Tool for creating schedules
10
3
  */
11
-
12
- declare function createCreateScheduleTool(getManager: SchedulerManagerGetter): Tool;
13
-
14
- export { createCreateScheduleTool };
4
+ import type { Tool } from '@dexto/core';
5
+ import type { SchedulerManagerGetter } from '../tool-types.js';
6
+ export declare function createCreateScheduleTool(getManager: SchedulerManagerGetter): Tool;
7
+ //# sourceMappingURL=create-schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-schedule.d.ts","sourceRoot":"","sources":["../../src/tools/create-schedule.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAwB,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CA6DjF"}
@@ -1,14 +1,7 @@
1
- import { Tool } from '@dexto/core';
2
- import { SchedulerManagerGetter } from '../tool-types.js';
3
- import '../manager.js';
4
- import '../schemas.js';
5
- import 'zod';
6
- import '../types.js';
7
-
8
1
  /**
9
2
  * Tool for deleting schedules
10
3
  */
11
-
12
- declare function createDeleteScheduleTool(getManager: SchedulerManagerGetter): Tool;
13
-
14
- export { createDeleteScheduleTool };
4
+ import type { Tool } from '@dexto/core';
5
+ import type { SchedulerManagerGetter } from '../tool-types.js';
6
+ export declare function createDeleteScheduleTool(getManager: SchedulerManagerGetter): Tool;
7
+ //# sourceMappingURL=delete-schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-schedule.d.ts","sourceRoot":"","sources":["../../src/tools/delete-schedule.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAwB,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAkBjF"}