@qodalis/cli-server-plugin-jobs 1.0.0-beta.14 → 1.0.0-beta.17

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/README.md CHANGED
@@ -51,12 +51,14 @@ await jobsPlugin.scheduler.start();
51
51
 
52
52
  | Option | Type | Default | Description |
53
53
  |--------|------|---------|-------------|
54
+ | `id` | `string?` | Name | Stable id for the API, history and saved state (`name-2`, `name-3`, ... for duplicate names; a duplicate explicit id throws) |
54
55
  | `name` | `string?` | Class name | Job display name |
55
56
  | `description` | `string?` | Name | Human-readable description |
56
57
  | `group` | `string?` | — | Logical grouping |
57
58
  | `schedule` | `string?` | — | Cron expression (5-field) |
58
- | `interval` | `string?` | — | Fixed interval (`30s`, `5m`, `1h`, `1d`) |
59
- | `enabled` | `boolean` | `true` | Whether the job starts active |
59
+ | `interval` | `string?` | — | Fixed interval (`30s`, `5m`, `1h`, `1d`); the next run is the last run plus the interval, across restarts and pauses (right away when that has passed) |
60
+ | `runOnStart` | `boolean` | `false` | Run once right after the scheduler starts (not for paused or stopped jobs) |
61
+ | `enabled` | `boolean` | `true` | Whether the job starts active. `false` keeps it stopped whatever state was saved; otherwise a saved pause or stop (made from the API) is kept across restarts |
60
62
  | `maxRetries` | `number` | `0` | Retry count on failure |
61
63
  | `timeout` | `string?` | — | Max execution duration (same format as interval) |
62
64
  | `overlapPolicy` | `string` | `skip` | `skip`, `queue`, or `cancel` |
@@ -68,6 +70,7 @@ All endpoints are mounted at the plugin's built-in prefix (`/api/v1/qcli/jobs`).
68
70
  | Method | Endpoint | Description |
69
71
  |--------|----------|-------------|
70
72
  | GET | `/` | List all jobs |
73
+ | GET | `/executions` | Executions across jobs, newest first: `?job=a,b` (repeatable), `group=`, `status=`, `since=` (ISO 8601), `limit=` (1-100), `offset=` → `{ items, total, limit, offset }` |
71
74
  | GET | `/:id` | Get job details |
72
75
  | POST | `/:id/trigger` | Trigger immediate execution |
73
76
  | POST | `/:id/pause` | Pause scheduled execution |
@@ -78,6 +81,22 @@ All endpoints are mounted at the plugin's built-in prefix (`/api/v1/qcli/jobs`).
78
81
  | GET | `/:id/history` | Paginated execution history |
79
82
  | GET | `/:id/history/:execId` | Execution detail with logs |
80
83
 
84
+ ## Inside a job
85
+
86
+ The execution context has a `logger`, the run's own `properties` (saved with the execution whatever its outcome, returned by the history API, `/executions` and the `jobs_history` MCP tool) and `discard()`, which leaves a completed run out of the history (a frequent job that found nothing to do; failed runs are always kept):
87
+
88
+ ```typescript
89
+ class DigestJob implements ICliJob {
90
+ async executeAsync(context: ICliJobExecutionContext, signal: AbortSignal) {
91
+ const due = await findDueDigests();
92
+ if (due.length === 0) return context.discard();
93
+ context.properties.sent = await sendAll(due, signal);
94
+ }
95
+ }
96
+ ```
97
+
98
+ `plugin.scheduler` (`ICliJobScheduler`) is for the host's own code: `jobs` (the registrations by id), `triggerAsync`, `pauseAsync`, `resumeAsync`, `stopJobAsync`, `cancelCurrentAsync`, `updateOptionsAsync` and `queryExecutions`.
99
+
81
100
  ## Custom Storage
82
101
 
83
102
  By default, execution history is stored in memory. Provide a custom `ICliJobStorageProvider` for persistence:
@@ -89,6 +108,8 @@ const plugin = new CliJobsBuilder()
89
108
  .build();
90
109
  ```
91
110
 
111
+ Besides the required methods, a storage may implement `queryExecutions(query)` (listing across jobs in one query; without it the scheduler merges the per-job listings), `prune(before)` (delete old executions; call it on a schedule, e.g. `pruneJobExecutions(storage, new Date(Date.now() - 30 * 86_400_000))`) and `deleteExecution(id)` (used by `discard()`; without it discarded runs are kept). The in-memory storage implements all three.
112
+
92
113
  ## License
93
114
 
94
115
  MIT
@@ -2,8 +2,14 @@ import { ICliJobExecutionContext, ICliJobLogger } from '@qodalis/cli-server-abst
2
2
  /** Concrete execution context provided to each job run, wrapping a logger for capturing output. */
3
3
  export declare class CliJobExecutionContext implements ICliJobExecutionContext {
4
4
  readonly logger: ICliJobLogger;
5
+ readonly properties: Record<string, unknown>;
5
6
  private readonly _jobLogger;
7
+ private _discarded;
6
8
  constructor();
9
+ /** Leaves this run out of the history when it completes (failed runs are kept). */
10
+ discard(): void;
11
+ /** Whether the job asked to leave this run out of the history. */
12
+ get discarded(): boolean;
7
13
  /** Returns the collected log entries from the job execution. */
8
14
  get logEntries(): import("@qodalis/cli-server-abstractions").JobLogEntry[];
9
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli-job-execution-context.d.ts","sourceRoot":"","sources":["../cli-job-execution-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAG1F,mGAAmG;AACnG,qBAAa,sBAAuB,YAAW,uBAAuB;IAClE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAE/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;;IAO1C,gEAAgE;IAChE,IAAI,UAAU,6DAEb;CACJ"}
1
+ {"version":3,"file":"cli-job-execution-context.d.ts","sourceRoot":"","sources":["../cli-job-execution-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAG1F,mGAAmG;AACnG,qBAAa,sBAAuB,YAAW,uBAAuB;IAClE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAElD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,UAAU,CAAS;;IAO3B,mFAAmF;IACnF,OAAO,IAAI,IAAI;IAIf,kEAAkE;IAClE,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,gEAAgE;IAChE,IAAI,UAAU,6DAEb;CACJ"}
@@ -5,11 +5,21 @@ const cli_job_logger_1 = require("./cli-job-logger");
5
5
  /** Concrete execution context provided to each job run, wrapping a logger for capturing output. */
6
6
  class CliJobExecutionContext {
7
7
  logger;
8
+ properties = {};
8
9
  _jobLogger;
10
+ _discarded = false;
9
11
  constructor() {
10
12
  this._jobLogger = new cli_job_logger_1.CliJobLogger();
11
13
  this.logger = this._jobLogger;
12
14
  }
15
+ /** Leaves this run out of the history when it completes (failed runs are kept). */
16
+ discard() {
17
+ this._discarded = true;
18
+ }
19
+ /** Whether the job asked to leave this run out of the history. */
20
+ get discarded() {
21
+ return this._discarded;
22
+ }
13
23
  /** Returns the collected log entries from the job execution. */
14
24
  get logEntries() {
15
25
  return this._jobLogger.entries;
@@ -1 +1 @@
1
- {"version":3,"file":"cli-job-execution-context.js","sourceRoot":"","sources":["../cli-job-execution-context.ts"],"names":[],"mappings":";;;AACA,qDAAgD;AAEhD,mGAAmG;AACnG,MAAa,sBAAsB;IACtB,MAAM,CAAgB;IAEd,UAAU,CAAe;IAE1C;QACI,IAAI,CAAC,UAAU,GAAG,IAAI,6BAAY,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IAClC,CAAC;IAED,gEAAgE;IAChE,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IACnC,CAAC;CACJ;AAdD,wDAcC"}
1
+ {"version":3,"file":"cli-job-execution-context.js","sourceRoot":"","sources":["../cli-job-execution-context.ts"],"names":[],"mappings":";;;AACA,qDAAgD;AAEhD,mGAAmG;AACnG,MAAa,sBAAsB;IACtB,MAAM,CAAgB;IACtB,UAAU,GAA4B,EAAE,CAAC;IAEjC,UAAU,CAAe;IAClC,UAAU,GAAG,KAAK,CAAC;IAE3B;QACI,IAAI,CAAC,UAAU,GAAG,IAAI,6BAAY,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IAClC,CAAC;IAED,mFAAmF;IACnF,OAAO;QACH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,kEAAkE;IAClE,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,gEAAgE;IAChE,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IACnC,CAAC;CACJ;AA1BD,wDA0BC"}
@@ -1,4 +1,4 @@
1
- import { ICliJob, CliJobOptions, ICliJobStorageProvider, JobStatus } from '@qodalis/cli-server-abstractions';
1
+ import { ICliJob, CliJobOptions, ICliJobStorageProvider, JobExecution, JobStatus, JobExecutionQuery } from '@qodalis/cli-server-abstractions';
2
2
  /** Internal state for a registered job, including timers and execution queue. */
3
3
  export interface JobRegistration {
4
4
  id: string;
@@ -40,11 +40,39 @@ export interface JobDto {
40
40
  lastRunDuration?: number;
41
41
  }
42
42
  type BroadcastFn = (message: Record<string, unknown>) => void;
43
+ /** Options of a job that `updateOptionsAsync` may change. */
44
+ export type CliJobOptionsUpdate = Partial<Pick<CliJobOptions, 'description' | 'group' | 'schedule' | 'interval' | 'maxRetries' | 'retryDelay' | 'retryStrategy' | 'timeout' | 'overlapPolicy'>>;
45
+ /**
46
+ * The scheduler that runs the jobs registered in this process: their
47
+ * registrations and the actions on them. Use it (`jobsPlugin.scheduler`) to act on
48
+ * a job from the host's own code, e.g. run a job when something happened.
49
+ */
50
+ export interface ICliJobScheduler {
51
+ /** The registered jobs keyed by job id, in registration order. */
52
+ readonly jobs: ReadonlyMap<string, JobRegistration>;
53
+ /** Runs the job now; throws a {@link JobError} (409) when it is running and may not overlap. */
54
+ triggerAsync(id: string): Promise<void>;
55
+ /** Pauses the job's schedule. */
56
+ pauseAsync(id: string): Promise<void>;
57
+ /** Resumes a paused job's schedule. */
58
+ resumeAsync(id: string): Promise<void>;
59
+ /** Stops the job: cancels a running execution and disables its schedule. */
60
+ stopJobAsync(id: string): Promise<void>;
61
+ /** Cancels the job's running execution. */
62
+ cancelCurrentAsync(id: string): Promise<void>;
63
+ /** Changes the job's options and restarts its schedule. */
64
+ updateOptionsAsync(id: string, updates: CliJobOptionsUpdate): Promise<void>;
65
+ /** The executions of several jobs (`query.jobIds`) or of every job, newest first. */
66
+ queryExecutions(query: JobExecutionQuery): Promise<{
67
+ items: JobExecution[];
68
+ total: number;
69
+ }>;
70
+ }
43
71
  /**
44
72
  * Manages job registration, scheduling (cron / interval), execution with
45
73
  * retry logic, overlap policies, and state persistence.
46
74
  */
47
- export declare class CliJobScheduler {
75
+ export declare class CliJobScheduler implements ICliJobScheduler {
48
76
  private readonly _registrations;
49
77
  private readonly _storage;
50
78
  private _broadcastFn;
@@ -57,13 +85,27 @@ export declare class CliJobScheduler {
57
85
  *
58
86
  * @param job - The job implementation.
59
87
  * @param options - Scheduling and retry configuration.
60
- * @returns The generated job ID.
88
+ * @returns The job ID: `options.id`, else the name (`name-2`, `name-3`, ... for
89
+ * further jobs of the same name). Stable across restarts, so saved state and
90
+ * history find the job again.
91
+ * @throws {Error} When `options.id` is empty, has `/`, `\\`, `?` or `#` (it is part of the jobs API's URLs; a
92
+ * default id replaces them with `-`), or is already registered.
61
93
  */
62
94
  register(job: ICliJob, options: CliJobOptions): string;
63
95
  /** Load persisted job states and start timers for all active jobs. */
64
96
  start(): Promise<void>;
65
97
  /** Stop all timers, cancel running executions, and persist final states. */
66
98
  stop(): Promise<void>;
99
+ /** The registered jobs keyed by job id, in registration order. */
100
+ get jobs(): ReadonlyMap<string, JobRegistration>;
101
+ /**
102
+ * The executions of several jobs (`query.jobIds`) or of every registered job,
103
+ * newest first: the storage's own `queryExecutions`, else its per-job listings merged.
104
+ */
105
+ queryExecutions(query: JobExecutionQuery): Promise<{
106
+ items: JobExecution[];
107
+ total: number;
108
+ }>;
67
109
  /** Return DTOs for all registered jobs. */
68
110
  getAll(): JobDto[];
69
111
  /** Return the DTO for a single job, or `undefined` if not found. */
@@ -85,7 +127,7 @@ export declare class CliJobScheduler {
85
127
  /** Cancel the currently running execution of a job without changing its schedule. */
86
128
  cancelCurrentAsync(id: string): Promise<void>;
87
129
  /** Update mutable job options (schedule, retry policy, etc.) and restart timers if active. */
88
- updateOptionsAsync(id: string, updates: Partial<Pick<CliJobOptions, 'description' | 'group' | 'schedule' | 'interval' | 'maxRetries' | 'retryDelay' | 'retryStrategy' | 'timeout' | 'overlapPolicy'>>): Promise<void>;
130
+ updateOptionsAsync(id: string, updates: CliJobOptionsUpdate): Promise<void>;
89
131
  get storage(): ICliJobStorageProvider;
90
132
  private _toDto;
91
133
  private _startTimer;
@@ -94,6 +136,11 @@ export declare class CliJobScheduler {
94
136
  private _handleTimerFire;
95
137
  private _executeJobAsync;
96
138
  private _stopTimer;
139
+ /**
140
+ * Saves the finished run, or deletes a discarded one (failed runs are always kept). When the store refuses the
141
+ * run's properties (a value that does not serialize), the run is saved without them, so it never stays "running".
142
+ */
143
+ private _saveFinished;
97
144
  private _persistState;
98
145
  private _broadcast;
99
146
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli-job-scheduler.d.ts","sourceRoot":"","sources":["../cli-job-scheduler.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,OAAO,EACP,aAAa,EACb,sBAAsB,EAGtB,SAAS,EAEZ,MAAM,kCAAkC,CAAC;AAI1C,iFAAiF;AACjF,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,CAAC,EAAE,eAAe,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACvE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,mDAAmD;IACnD,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAC;CACzC;AAED,qFAAqF;AACrF,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,KAAK,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAE9D;;;GAGG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsC;IACrE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,sBAAsB;IAI3C,oFAAoF;IACpF,cAAc,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAIrC;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM;IActD,sEAAsE;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B,4EAA4E;IACtE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3B,2CAA2C;IAC3C,MAAM,IAAI,MAAM,EAAE;IAIlB,oEAAoE;IACpE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKnC,+FAA+F;IAC/F,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIxD;;;;OAIG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB7C,+EAA+E;IACzE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3C,0DAA0D;IACpD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5C,oFAAoF;IAC9E,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7C,qFAAqF;IAC/E,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD,8FAA8F;IACxF,kBAAkB,CACpB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,eAAe,GAAG,SAAS,GAAG,eAAe,CAAC,CAAC,GACvK,OAAO,CAAC,IAAI,CAAC;IA4DhB,IAAI,OAAO,IAAI,sBAAsB,CAEpC;IAED,OAAO,CAAC,MAAM;IAuBd,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,mBAAmB;YAab,gBAAgB;YAkBhB,gBAAgB;IAsH9B,OAAO,CAAC,UAAU;YAaJ,aAAa;IAQ3B,OAAO,CAAC,UAAU;CAKrB;AAED,mFAAmF;AACnF,qBAAa,QAAS,SAAQ,KAAK;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAMhE"}
1
+ {"version":3,"file":"cli-job-scheduler.d.ts","sourceRoot":"","sources":["../cli-job-scheduler.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.JobError = exports.CliJobScheduler = void 0;
4
4
  const crypto_1 = require("crypto");
5
5
  const cron_parser_1 = require("cron-parser");
6
+ const cli_server_abstractions_1 = require("@qodalis/cli-server-abstractions");
6
7
  const cli_job_execution_context_1 = require("./cli-job-execution-context");
7
8
  const interval_parser_1 = require("./interval-parser");
9
+ /** Characters a job id may not have: it is part of the jobs API's URLs. */
10
+ const UNSAFE_ID_CHARS = /[/\\?#]/;
8
11
  /**
9
12
  * Manages job registration, scheduling (cron / interval), execution with
10
13
  * retry logic, overlap policies, and state persistence.
@@ -26,15 +29,35 @@ class CliJobScheduler {
26
29
  *
27
30
  * @param job - The job implementation.
28
31
  * @param options - Scheduling and retry configuration.
29
- * @returns The generated job ID.
32
+ * @returns The job ID: `options.id`, else the name (`name-2`, `name-3`, ... for
33
+ * further jobs of the same name). Stable across restarts, so saved state and
34
+ * history find the job again.
35
+ * @throws {Error} When `options.id` is empty, has `/`, `\\`, `?` or `#` (it is part of the jobs API's URLs; a
36
+ * default id replaces them with `-`), or is already registered.
30
37
  */
31
38
  register(job, options) {
32
- const id = (0, crypto_1.randomUUID)();
39
+ const name = options.name ?? (job.constructor?.name && job.constructor.name !== 'Object' ? job.constructor.name : 'job');
40
+ let id;
41
+ if (options.id !== undefined) {
42
+ if (!options.id.trim() || UNSAFE_ID_CHARS.test(options.id)) {
43
+ throw new Error(`Job id '${options.id}' must be non-empty and may not contain '/', '\\', '?' or '#' (it is part of the jobs API's URLs)`);
44
+ }
45
+ if (this._registrations.has(options.id)) {
46
+ throw new Error(`A job with id '${options.id}' is already registered`);
47
+ }
48
+ id = options.id;
49
+ }
50
+ else {
51
+ const baseId = name.replace(new RegExp(UNSAFE_ID_CHARS.source, 'g'), '-');
52
+ id = baseId;
53
+ for (let n = 2; this._registrations.has(id); n++)
54
+ id = `${baseId}-${n}`;
55
+ }
33
56
  const enabled = options.enabled !== false;
34
57
  const reg = {
35
58
  id,
36
59
  job,
37
- options: { ...options, enabled },
60
+ options: { ...options, name, enabled },
38
61
  status: enabled ? 'active' : 'stopped',
39
62
  queue: [],
40
63
  };
@@ -47,13 +70,21 @@ class CliJobScheduler {
47
70
  // Load persisted states
48
71
  const states = await this._storage.getAllJobStates();
49
72
  for (const [id, reg] of this._registrations) {
73
+ // Restore the last run, and a pause or stop made at run time; a job the code disables
74
+ // (enabled: false) stays stopped whatever was saved.
50
75
  const persisted = states.get(id);
51
76
  if (persisted) {
52
- reg.status = persisted.status;
53
77
  reg.lastRunAt = persisted.lastRunAt;
78
+ if (reg.options.enabled !== false)
79
+ reg.status = persisted.status;
54
80
  }
55
81
  if (reg.status === 'active') {
56
- this._startTimer(reg);
82
+ // An interval job runs on start through its timer (due now), so the two never overlap
83
+ const runNow = !!reg.options.runOnStart && !reg.options.schedule && !!reg.options.interval;
84
+ this._startTimer(reg, runNow);
85
+ if (reg.options.runOnStart && !runNow) {
86
+ this._handleTimerFire(reg).catch(() => undefined);
87
+ }
57
88
  }
58
89
  }
59
90
  }
@@ -74,6 +105,20 @@ class CliJobScheduler {
74
105
  });
75
106
  }
76
107
  }
108
+ /** The registered jobs keyed by job id, in registration order. */
109
+ get jobs() {
110
+ return this._registrations;
111
+ }
112
+ /**
113
+ * The executions of several jobs (`query.jobIds`) or of every registered job,
114
+ * newest first: the storage's own `queryExecutions`, else its per-job listings merged.
115
+ */
116
+ async queryExecutions(query) {
117
+ if (this._storage.queryExecutions)
118
+ return this._storage.queryExecutions(query);
119
+ const jobIds = query.jobIds ?? Array.from(this._registrations.keys());
120
+ return (0, cli_server_abstractions_1.mergeJobExecutions)(query, jobIds, (jobId, limit, status) => this._storage.getExecutions(jobId, { limit, offset: 0, status }));
121
+ }
77
122
  /** Return DTOs for all registered jobs. */
78
123
  getAll() {
79
124
  return Array.from(this._registrations.values()).map((reg) => this._toDto(reg));
@@ -250,12 +295,12 @@ class CliJobScheduler {
250
295
  lastRunDuration: reg.lastRunDuration,
251
296
  };
252
297
  }
253
- _startTimer(reg) {
298
+ _startTimer(reg, runNow = false) {
254
299
  if (reg.options.schedule) {
255
300
  this._startCronTimer(reg);
256
301
  }
257
302
  else if (reg.options.interval) {
258
- this._startIntervalTimer(reg);
303
+ this._startIntervalTimer(reg, runNow);
259
304
  }
260
305
  }
261
306
  _startCronTimer(reg) {
@@ -282,18 +327,32 @@ class CliJobScheduler {
282
327
  };
283
328
  scheduleNext();
284
329
  }
285
- _startIntervalTimer(reg) {
330
+ _startIntervalTimer(reg, runNow = false) {
286
331
  const ms = (0, interval_parser_1.parseInterval)(reg.options.interval);
287
332
  if (ms === null)
288
333
  return;
289
- reg.nextRunAt = new Date(Date.now() + ms).toISOString();
290
- reg.timer = setInterval(async () => {
334
+ // Keep the rhythm across restarts and pauses: due one interval after the last run
335
+ const now = Date.now();
336
+ const lastRun = reg.lastRunAt ? new Date(reg.lastRunAt).getTime() : NaN;
337
+ let due = Number.isNaN(lastRun) ? now + ms : lastRun + ms;
338
+ if (due < now || runNow)
339
+ due = now;
340
+ reg.nextRunAt = new Date(due).toISOString();
341
+ const fire = async () => {
291
342
  if (reg.status !== 'active' || !this._running)
292
343
  return;
293
- await this._handleTimerFire(reg);
294
344
  reg.nextRunAt = new Date(Date.now() + ms).toISOString();
295
- }, ms);
296
- reg.timerType = 'interval';
345
+ await this._handleTimerFire(reg);
346
+ };
347
+ reg.timer = setTimeout(() => {
348
+ if (reg.status !== 'active' || !this._running)
349
+ return;
350
+ // Then every interval from this run on
351
+ reg.timer = setInterval(fire, ms);
352
+ reg.timerType = 'interval';
353
+ fire().catch(() => undefined);
354
+ }, due - now);
355
+ reg.timerType = 'cron'; // a one-off timeout until the first run
297
356
  }
298
357
  async _handleTimerFire(reg) {
299
358
  if (reg.currentExecutionId) {
@@ -325,6 +384,7 @@ class CliJobScheduler {
325
384
  startedAt: new Date().toISOString(),
326
385
  logs: [],
327
386
  retryAttempt,
387
+ properties: {},
328
388
  };
329
389
  await this._storage.saveExecution(execution);
330
390
  this._broadcast({
@@ -373,14 +433,15 @@ class CliJobScheduler {
373
433
  execution.duration = duration;
374
434
  execution.error = error;
375
435
  execution.logs = context.logEntries;
376
- await this._storage.saveExecution(execution);
436
+ execution.properties = { ...context.properties };
437
+ await this._saveFinished(execution, context.discarded);
377
438
  reg.currentExecutionId = undefined;
378
439
  reg.currentAbortController = undefined;
379
440
  reg.lastRunAt = execution.startedAt;
380
441
  reg.lastRunStatus = finalStatus;
381
442
  reg.lastRunDuration = duration;
382
- // Persist state
383
- await this._persistState(reg);
443
+ // Persist state; a store failure must not leave the job looking busy or stop its retries
444
+ await this._persistState(reg).catch((err) => console.error(`Saving the state of job ${reg.id} failed:`, err));
384
445
  // Broadcast completion event
385
446
  if (finalStatus === 'completed') {
386
447
  this._broadcast({ type: 'job:completed', jobId: reg.id, executionId, duration });
@@ -433,6 +494,32 @@ class CliJobScheduler {
433
494
  }
434
495
  reg.nextRunAt = undefined;
435
496
  }
497
+ /**
498
+ * Saves the finished run, or deletes a discarded one (failed runs are always kept). When the store refuses the
499
+ * run's properties (a value that does not serialize), the run is saved without them, so it never stays "running".
500
+ */
501
+ async _saveFinished(execution, discard) {
502
+ try {
503
+ const discarded = discard && execution.status === 'completed' && (await (0, cli_server_abstractions_1.deleteJobExecution)(this._storage, execution.id));
504
+ if (!discarded)
505
+ await this._storage.saveExecution(execution);
506
+ }
507
+ catch (err) {
508
+ if (!execution.properties || Object.keys(execution.properties).length === 0)
509
+ throw err;
510
+ console.error(`Saving execution ${execution.id} of job ${execution.jobId} failed; saving it without its properties:`, err);
511
+ execution.properties = {};
512
+ execution.logs = [
513
+ ...(execution.logs ?? []),
514
+ {
515
+ timestamp: new Date().toISOString(),
516
+ level: 'error',
517
+ message: `The run's properties could not be saved: ${err instanceof Error ? err.message : String(err)}`,
518
+ },
519
+ ];
520
+ await this._storage.saveExecution(execution);
521
+ }
522
+ }
436
523
  async _persistState(reg) {
437
524
  await this._storage.saveJobState(reg.id, {
438
525
  status: reg.status,
@@ -1 +1 @@
1
- {"version":3,"file":"cli-job-scheduler.js","sourceRoot":"","sources":["../cli-job-scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-job-scheduler.js","sourceRoot":"","sources":["../cli-job-scheduler.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ICliJob, CliJobOptions, ICliJobStorageProvider } from '@qodalis/cli-server-abstractions';
1
+ import { ICliJob, CliJobOptions, ICliJobStorageProvider, CliInstalledPlugin } from '@qodalis/cli-server-abstractions';
2
2
  import { Router } from 'express';
3
3
  import { CliJobScheduler } from './cli-job-scheduler';
4
4
  export interface CliJobsPluginResult {
@@ -8,6 +8,8 @@ export interface CliJobsPluginResult {
8
8
  router: Router;
9
9
  /** The job scheduler instance. Call `start()` / `stop()` to manage its lifecycle. */
10
10
  scheduler: CliJobScheduler;
11
+ /** This package, listed among the server's installed plugins by `mountPlugin`. */
12
+ installedPlugin: CliInstalledPlugin;
11
13
  }
12
14
  /**
13
15
  * Fluent builder for configuring the jobs plugin independently of the core CLI server.
@@ -1 +1 @@
1
- {"version":3,"file":"cli-jobs-builder.d.ts","sourceRoot":"","sources":["../cli-jobs-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAItD,MAAM,WAAW,mBAAmB;IAChC,4CAA4C;IAC5C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,SAAS,EAAE,eAAe,CAAC;CAC9B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuD;IAC7E,OAAO,CAAC,gBAAgB,CAAC,CAAyB;IAElD;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,cAAc;IAK5D;;;OAGG;IACH,kBAAkB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,cAAc;IAKpE;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,mBAAmB;CAgBvF"}
1
+ {"version":3,"file":"cli-jobs-builder.d.ts","sourceRoot":"","sources":["../cli-jobs-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD,MAAM,WAAW,mBAAmB;IAChC,4CAA4C;IAC5C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,SAAS,EAAE,eAAe,CAAC;IAC3B,kFAAkF;IAClF,eAAe,EAAE,kBAAkB,CAAC;CACvC;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuD;IAC7E,OAAO,CAAC,gBAAgB,CAAC,CAAyB;IAElD;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,cAAc;IAK5D;;;OAGG;IACH,kBAAkB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,cAAc;IAKpE;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,mBAAmB;CAgBvF"}
@@ -4,6 +4,7 @@ exports.CliJobsBuilder = void 0;
4
4
  const cli_job_scheduler_1 = require("./cli-job-scheduler");
5
5
  const in_memory_job_storage_provider_1 = require("./in-memory-job-storage-provider");
6
6
  const cli_jobs_controller_1 = require("./cli-jobs-controller");
7
+ const package_info_1 = require("./package-info");
7
8
  /**
8
9
  * Fluent builder for configuring the jobs plugin independently of the core CLI server.
9
10
  *
@@ -52,7 +53,7 @@ class CliJobsBuilder {
52
53
  scheduler.setBroadcastFn(broadcastFn);
53
54
  }
54
55
  const router = (0, cli_jobs_controller_1.createCliJobsController)(scheduler, storage);
55
- return { prefix: '/api/v1/qcli/jobs', router, scheduler };
56
+ return { prefix: '/api/v1/qcli/jobs', router, scheduler, installedPlugin: package_info_1.jobsInstalledPlugin };
56
57
  }
57
58
  }
58
59
  exports.CliJobsBuilder = CliJobsBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"cli-jobs-builder.js","sourceRoot":"","sources":["../cli-jobs-builder.ts"],"names":[],"mappings":";;;AAEA,2DAAsD;AACtD,qFAA8E;AAC9E,+DAAgE;AAWhE;;;;;;;;;;;;;;GAcG;AACH,MAAa,cAAc;IACN,KAAK,GAAoD,EAAE,CAAC;IACrE,gBAAgB,CAA0B;IAElD;;OAEG;IACH,MAAM,CAAC,GAAY,EAAE,OAAsB;QACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,QAAgC;QAC/C,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAwD;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,2DAA0B,EAAE,CAAC;QAC1E,MAAM,SAAS,GAAG,IAAI,mCAAe,CAAC,OAAO,CAAC,CAAC;QAE/C,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YACd,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,6CAAuB,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE3D,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC9D,CAAC;CACJ;AA1CD,wCA0CC"}
1
+ {"version":3,"file":"cli-jobs-builder.js","sourceRoot":"","sources":["../cli-jobs-builder.ts"],"names":[],"mappings":";;;AAEA,2DAAsD;AACtD,qFAA8E;AAC9E,+DAAgE;AAChE,iDAAqD;AAarD;;;;;;;;;;;;;;GAcG;AACH,MAAa,cAAc;IACN,KAAK,GAAoD,EAAE,CAAC;IACrE,gBAAgB,CAA0B;IAElD;;OAEG;IACH,MAAM,CAAC,GAAY,EAAE,OAAsB;QACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,QAAgC;QAC/C,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAwD;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,2DAA0B,EAAE,CAAC;QAC1E,MAAM,SAAS,GAAG,IAAI,mCAAe,CAAC,OAAO,CAAC,CAAC;QAE/C,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YACd,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,6CAAuB,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE3D,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,kCAAmB,EAAE,CAAC;IACpG,CAAC;CACJ;AA1CD,wCA0CC"}
@@ -6,6 +6,7 @@ import { ICliJobStorageProvider } from '@qodalis/cli-server-abstractions';
6
6
  *
7
7
  * Routes (relative to mount point):
8
8
  * - GET / - list all jobs
9
+ * - GET /executions - executions across jobs (?job=a,b&group=&status=&since=&limit=&offset=)
9
10
  * - GET /:id - single job details
10
11
  * - POST /:id/trigger - trigger immediate execution
11
12
  * - POST /:id/pause - pause scheduled execution
@@ -1 +1 @@
1
- {"version":3,"file":"cli-jobs-controller.d.ts","sourceRoot":"","sources":["../cli-jobs-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,eAAe,EAAY,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAsB,MAAM,kCAAkC,CAAC;AAE9F;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CACnC,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,sBAAsB,GAChC,MAAM,CA2HR"}
1
+ {"version":3,"file":"cli-jobs-controller.d.ts","sourceRoot":"","sources":["../cli-jobs-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,eAAe,EAAY,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAoC,MAAM,kCAAkC,CAAC;AAE5G;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,uBAAuB,CACnC,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,sBAAsB,GAChC,MAAM,CA+JR"}