pm-orchestrator-runner 1.0.14 → 1.0.15
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 +7 -7
- package/dist/cli/index.js +13 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/config/namespace.d.ts +38 -11
- package/dist/config/namespace.d.ts.map +1 -1
- package/dist/config/namespace.js +163 -26
- package/dist/config/namespace.js.map +1 -1
- package/dist/queue/index.d.ts +7 -32
- package/dist/queue/index.d.ts.map +1 -1
- package/dist/queue/index.js +9 -28
- package/dist/queue/index.js.map +1 -1
- package/dist/queue/queue-poller.d.ts +20 -1
- package/dist/queue/queue-poller.d.ts.map +1 -1
- package/dist/queue/queue-poller.js +40 -1
- package/dist/queue/queue-poller.js.map +1 -1
- package/dist/queue/queue-store.d.ts +110 -51
- package/dist/queue/queue-store.d.ts.map +1 -1
- package/dist/queue/queue-store.js +341 -120
- package/dist/queue/queue-store.js.map +1 -1
- package/dist/web/index.d.ts +8 -2
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +8 -2
- package/dist/web/index.js.map +1 -1
- package/dist/web/public/index.html +81 -1
- package/dist/web/server.d.ts +13 -2
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +101 -33
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
package/dist/queue/index.js
CHANGED
|
@@ -1,44 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Queue Module
|
|
3
|
+
* Queue Module (v2)
|
|
4
4
|
* Per spec/20_QUEUE_STORE.md
|
|
5
5
|
*
|
|
6
|
+
* v2 Changes:
|
|
7
|
+
* - Single fixed table: pm-runner-queue
|
|
8
|
+
* - Namespace is a required config field
|
|
9
|
+
* - Runner heartbeat support
|
|
10
|
+
*
|
|
6
11
|
* Exports:
|
|
7
12
|
* - QueueStore: DynamoDB-backed queue storage
|
|
8
13
|
* - QueuePoller: Polling and task execution
|
|
9
|
-
* - createNamespacedQueueStore: Factory for namespace-separated QueueStore
|
|
10
14
|
*/
|
|
11
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.QueuePoller = exports.isValidStatusTransition = exports.VALID_STATUS_TRANSITIONS = exports.QueueStore = void 0;
|
|
13
|
-
exports.createNamespacedQueueStore = createNamespacedQueueStore;
|
|
16
|
+
exports.QueuePoller = exports.RUNNERS_TABLE_NAME = exports.QUEUE_TABLE_NAME = exports.isValidStatusTransition = exports.VALID_STATUS_TRANSITIONS = exports.QueueStore = void 0;
|
|
14
17
|
var queue_store_1 = require("./queue-store");
|
|
15
18
|
Object.defineProperty(exports, "QueueStore", { enumerable: true, get: function () { return queue_store_1.QueueStore; } });
|
|
16
19
|
Object.defineProperty(exports, "VALID_STATUS_TRANSITIONS", { enumerable: true, get: function () { return queue_store_1.VALID_STATUS_TRANSITIONS; } });
|
|
17
20
|
Object.defineProperty(exports, "isValidStatusTransition", { enumerable: true, get: function () { return queue_store_1.isValidStatusTransition; } });
|
|
21
|
+
Object.defineProperty(exports, "QUEUE_TABLE_NAME", { enumerable: true, get: function () { return queue_store_1.QUEUE_TABLE_NAME; } });
|
|
22
|
+
Object.defineProperty(exports, "RUNNERS_TABLE_NAME", { enumerable: true, get: function () { return queue_store_1.RUNNERS_TABLE_NAME; } });
|
|
18
23
|
var queue_poller_1 = require("./queue-poller");
|
|
19
24
|
Object.defineProperty(exports, "QueuePoller", { enumerable: true, get: function () { return queue_poller_1.QueuePoller; } });
|
|
20
|
-
const queue_store_2 = require("./queue-store");
|
|
21
|
-
/**
|
|
22
|
-
* Create a QueueStore instance with namespace separation
|
|
23
|
-
* Per spec/21_STABLE_DEV.md
|
|
24
|
-
*
|
|
25
|
-
* @param namespaceConfig - Namespace configuration with tableName
|
|
26
|
-
* @param storeConfig - Optional additional QueueStore configuration
|
|
27
|
-
* @returns Configured QueueStore instance
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* ```typescript
|
|
31
|
-
* const namespaceConfig = buildNamespaceConfig({ namespace: 'dev', projectRoot: '/path' });
|
|
32
|
-
* const store = createNamespacedQueueStore({
|
|
33
|
-
* namespace: namespaceConfig.namespace,
|
|
34
|
-
* tableName: namespaceConfig.tableName,
|
|
35
|
-
* });
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
function createNamespacedQueueStore(namespaceConfig, storeConfig) {
|
|
39
|
-
return new queue_store_2.QueueStore({
|
|
40
|
-
...storeConfig,
|
|
41
|
-
tableName: namespaceConfig.tableName,
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
25
|
//# sourceMappingURL=index.js.map
|
package/dist/queue/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEH,6CAeuB;AAdrB,yGAAA,UAAU,OAAA;AAUV,uHAAA,wBAAwB,OAAA;AACxB,sHAAA,uBAAuB,OAAA;AACvB,+GAAA,gBAAgB,OAAA;AAChB,iHAAA,kBAAkB,OAAA;AAGpB,+CAMwB;AALtB,2GAAA,WAAW,OAAA"}
|
|
@@ -28,6 +28,10 @@ export interface QueuePollerConfig {
|
|
|
28
28
|
maxStaleTaskAgeMs?: number;
|
|
29
29
|
/** Recover stale tasks on startup (default: true) */
|
|
30
30
|
recoverOnStartup?: boolean;
|
|
31
|
+
/** Runner ID for heartbeat tracking (v2) */
|
|
32
|
+
runnerId?: string;
|
|
33
|
+
/** Project root for runner identification (v2) */
|
|
34
|
+
projectRoot?: string;
|
|
31
35
|
}
|
|
32
36
|
/**
|
|
33
37
|
* Poller state
|
|
@@ -38,6 +42,10 @@ export interface QueuePollerState {
|
|
|
38
42
|
lastPollAt: string | null;
|
|
39
43
|
tasksProcessed: number;
|
|
40
44
|
errors: number;
|
|
45
|
+
/** Runner ID (v2) */
|
|
46
|
+
runnerId: string;
|
|
47
|
+
/** Project root (v2) */
|
|
48
|
+
projectRoot: string;
|
|
41
49
|
}
|
|
42
50
|
/**
|
|
43
51
|
* Poller events
|
|
@@ -65,6 +73,8 @@ export declare class QueuePoller extends EventEmitter {
|
|
|
65
73
|
private readonly pollIntervalMs;
|
|
66
74
|
private readonly maxStaleTaskAgeMs;
|
|
67
75
|
private readonly recoverOnStartup;
|
|
76
|
+
private readonly runnerId;
|
|
77
|
+
private readonly projectRoot;
|
|
68
78
|
private pollTimer;
|
|
69
79
|
private inFlight;
|
|
70
80
|
private isRunning;
|
|
@@ -72,6 +82,10 @@ export declare class QueuePoller extends EventEmitter {
|
|
|
72
82
|
private tasksProcessed;
|
|
73
83
|
private errors;
|
|
74
84
|
constructor(store: QueueStore, executor: TaskExecutor, config?: QueuePollerConfig);
|
|
85
|
+
/**
|
|
86
|
+
* Generate a unique runner ID
|
|
87
|
+
*/
|
|
88
|
+
private generateRunnerId;
|
|
75
89
|
/**
|
|
76
90
|
* Start polling
|
|
77
91
|
*/
|
|
@@ -79,9 +93,10 @@ export declare class QueuePoller extends EventEmitter {
|
|
|
79
93
|
/**
|
|
80
94
|
* Stop polling
|
|
81
95
|
*/
|
|
82
|
-
stop(): void
|
|
96
|
+
stop(): Promise<void>;
|
|
83
97
|
/**
|
|
84
98
|
* Single poll iteration
|
|
99
|
+
* - Update heartbeat (v2)
|
|
85
100
|
* - Skip if task in-flight
|
|
86
101
|
* - Claim oldest QUEUED task
|
|
87
102
|
* - Execute and update status
|
|
@@ -91,6 +106,10 @@ export declare class QueuePoller extends EventEmitter {
|
|
|
91
106
|
* Get current state
|
|
92
107
|
*/
|
|
93
108
|
getState(): QueuePollerState;
|
|
109
|
+
/**
|
|
110
|
+
* Get runner ID (v2)
|
|
111
|
+
*/
|
|
112
|
+
getRunnerId(): string;
|
|
94
113
|
/**
|
|
95
114
|
* Check if poller is running
|
|
96
115
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-poller.d.ts","sourceRoot":"","sources":["../../src/queue/queue-poller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAmB,MAAM,eAAe,CAAC;AAEvE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,SAAS,KACZ,OAAO,CAAC;IAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"queue-poller.d.ts","sourceRoot":"","sources":["../../src/queue/queue-poller.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,8 @@ class QueuePoller extends events_1.EventEmitter {
|
|
|
22
22
|
pollIntervalMs;
|
|
23
23
|
maxStaleTaskAgeMs;
|
|
24
24
|
recoverOnStartup;
|
|
25
|
+
runnerId;
|
|
26
|
+
projectRoot;
|
|
25
27
|
pollTimer = null;
|
|
26
28
|
inFlight = null;
|
|
27
29
|
isRunning = false;
|
|
@@ -35,6 +37,16 @@ class QueuePoller extends events_1.EventEmitter {
|
|
|
35
37
|
this.pollIntervalMs = config.pollIntervalMs ?? 1000;
|
|
36
38
|
this.maxStaleTaskAgeMs = config.maxStaleTaskAgeMs ?? 5 * 60 * 1000;
|
|
37
39
|
this.recoverOnStartup = config.recoverOnStartup ?? true;
|
|
40
|
+
this.runnerId = config.runnerId ?? this.generateRunnerId();
|
|
41
|
+
this.projectRoot = config.projectRoot ?? process.cwd();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Generate a unique runner ID
|
|
45
|
+
*/
|
|
46
|
+
generateRunnerId() {
|
|
47
|
+
const timestamp = Date.now().toString(36);
|
|
48
|
+
const random = Math.random().toString(36).substring(2, 8);
|
|
49
|
+
return 'runner-' + timestamp + '-' + random;
|
|
38
50
|
}
|
|
39
51
|
/**
|
|
40
52
|
* Start polling
|
|
@@ -72,7 +84,7 @@ class QueuePoller extends events_1.EventEmitter {
|
|
|
72
84
|
/**
|
|
73
85
|
* Stop polling
|
|
74
86
|
*/
|
|
75
|
-
stop() {
|
|
87
|
+
async stop() {
|
|
76
88
|
if (!this.isRunning) {
|
|
77
89
|
return;
|
|
78
90
|
}
|
|
@@ -81,10 +93,20 @@ class QueuePoller extends events_1.EventEmitter {
|
|
|
81
93
|
clearInterval(this.pollTimer);
|
|
82
94
|
this.pollTimer = null;
|
|
83
95
|
}
|
|
96
|
+
// Mark runner as stopped (v2)
|
|
97
|
+
try {
|
|
98
|
+
await this.store.markRunnerStopped(this.runnerId);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
// Log but don't fail stop - marking stopped is best-effort
|
|
102
|
+
// eslint-disable-next-line no-console
|
|
103
|
+
console.error('[QueuePoller] Failed to mark runner as stopped:', error);
|
|
104
|
+
}
|
|
84
105
|
this.emit('stopped');
|
|
85
106
|
}
|
|
86
107
|
/**
|
|
87
108
|
* Single poll iteration
|
|
109
|
+
* - Update heartbeat (v2)
|
|
88
110
|
* - Skip if task in-flight
|
|
89
111
|
* - Claim oldest QUEUED task
|
|
90
112
|
* - Execute and update status
|
|
@@ -94,6 +116,15 @@ class QueuePoller extends events_1.EventEmitter {
|
|
|
94
116
|
return;
|
|
95
117
|
}
|
|
96
118
|
this.lastPollAt = new Date().toISOString();
|
|
119
|
+
// Update heartbeat (v2) - register this runner as alive
|
|
120
|
+
try {
|
|
121
|
+
await this.store.updateRunnerHeartbeat(this.runnerId, this.projectRoot);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
// Log but don't fail poll - heartbeat is best-effort
|
|
125
|
+
// eslint-disable-next-line no-console
|
|
126
|
+
console.error('[QueuePoller] Heartbeat update failed:', error);
|
|
127
|
+
}
|
|
97
128
|
// In-flight limit: 1
|
|
98
129
|
if (this.inFlight) {
|
|
99
130
|
return;
|
|
@@ -156,8 +187,16 @@ class QueuePoller extends events_1.EventEmitter {
|
|
|
156
187
|
lastPollAt: this.lastPollAt,
|
|
157
188
|
tasksProcessed: this.tasksProcessed,
|
|
158
189
|
errors: this.errors,
|
|
190
|
+
runnerId: this.runnerId,
|
|
191
|
+
projectRoot: this.projectRoot,
|
|
159
192
|
};
|
|
160
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Get runner ID (v2)
|
|
196
|
+
*/
|
|
197
|
+
getRunnerId() {
|
|
198
|
+
return this.runnerId;
|
|
199
|
+
}
|
|
161
200
|
/**
|
|
162
201
|
* Check if poller is running
|
|
163
202
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-poller.js","sourceRoot":"","sources":["../../src/queue/queue-poller.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,mCAAsC;
|
|
1
|
+
{"version":3,"file":"queue-poller.js","sourceRoot":"","sources":["../../src/queue/queue-poller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Queue Store - DynamoDB Local implementation
|
|
2
|
+
* Queue Store - DynamoDB Local implementation (v2)
|
|
3
3
|
* Per spec/20_QUEUE_STORE.md
|
|
4
4
|
*
|
|
5
|
+
* v2 Changes:
|
|
6
|
+
* - Single fixed table: pm-runner-queue
|
|
7
|
+
* - Composite key: PK=namespace, SK=task_id
|
|
8
|
+
* - GSI: status-index (status + created_at)
|
|
9
|
+
* - Namespace-based separation in single table
|
|
10
|
+
*
|
|
5
11
|
* Provides queue operations with:
|
|
6
12
|
* - Atomic QUEUED -> RUNNING transitions (conditional update)
|
|
7
13
|
* - Double execution prevention
|
|
8
14
|
* - Fail-closed error handling
|
|
9
15
|
*/
|
|
16
|
+
/**
|
|
17
|
+
* Fixed table name (v2: single table for all namespaces)
|
|
18
|
+
*/
|
|
19
|
+
export declare const QUEUE_TABLE_NAME = "pm-runner-queue";
|
|
20
|
+
/**
|
|
21
|
+
* Runners table name (v2: heartbeat tracking)
|
|
22
|
+
*/
|
|
23
|
+
export declare const RUNNERS_TABLE_NAME = "pm-runner-runners";
|
|
10
24
|
/**
|
|
11
25
|
* Queue Item status
|
|
12
26
|
* Per spec/20: QUEUED / RUNNING / COMPLETE / ERROR / CANCELLED
|
|
@@ -22,10 +36,11 @@ export declare const VALID_STATUS_TRANSITIONS: Record<QueueItemStatus, QueueItem
|
|
|
22
36
|
*/
|
|
23
37
|
export declare function isValidStatusTransition(fromStatus: QueueItemStatus, toStatus: QueueItemStatus): boolean;
|
|
24
38
|
/**
|
|
25
|
-
* Queue Item schema
|
|
39
|
+
* Queue Item schema (v2)
|
|
26
40
|
* Per spec/20_QUEUE_STORE.md
|
|
27
41
|
*/
|
|
28
42
|
export interface QueueItem {
|
|
43
|
+
namespace: string;
|
|
29
44
|
task_id: string;
|
|
30
45
|
task_group_id: string;
|
|
31
46
|
session_id: string;
|
|
@@ -35,16 +50,32 @@ export interface QueueItem {
|
|
|
35
50
|
updated_at: string;
|
|
36
51
|
error_message?: string;
|
|
37
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Runner status for heartbeat tracking
|
|
55
|
+
*/
|
|
56
|
+
export type RunnerStatus = 'RUNNING' | 'STOPPED';
|
|
57
|
+
/**
|
|
58
|
+
* Runner record schema (v2)
|
|
59
|
+
* Per spec/20_QUEUE_STORE.md
|
|
60
|
+
*/
|
|
61
|
+
export interface RunnerRecord {
|
|
62
|
+
namespace: string;
|
|
63
|
+
runner_id: string;
|
|
64
|
+
last_heartbeat: string;
|
|
65
|
+
started_at: string;
|
|
66
|
+
status: RunnerStatus;
|
|
67
|
+
project_root: string;
|
|
68
|
+
}
|
|
38
69
|
/**
|
|
39
70
|
* Queue Store configuration
|
|
40
71
|
*/
|
|
41
72
|
export interface QueueStoreConfig {
|
|
42
73
|
/** DynamoDB endpoint (default: http://localhost:8000) */
|
|
43
74
|
endpoint?: string;
|
|
44
|
-
/** Table name (default: pm-runner-queue) */
|
|
45
|
-
tableName?: string;
|
|
46
75
|
/** AWS region (default: local) */
|
|
47
76
|
region?: string;
|
|
77
|
+
/** Namespace for this store instance */
|
|
78
|
+
namespace: string;
|
|
48
79
|
}
|
|
49
80
|
/**
|
|
50
81
|
* Claim result
|
|
@@ -77,19 +108,33 @@ export interface TaskGroupSummary {
|
|
|
77
108
|
latest_updated_at: string;
|
|
78
109
|
}
|
|
79
110
|
/**
|
|
80
|
-
*
|
|
111
|
+
* Namespace summary for listing
|
|
112
|
+
*/
|
|
113
|
+
export interface NamespaceSummary {
|
|
114
|
+
namespace: string;
|
|
115
|
+
task_count: number;
|
|
116
|
+
runner_count: number;
|
|
117
|
+
active_runner_count: number;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Queue Store (v2)
|
|
81
121
|
* Manages task queue with DynamoDB Local
|
|
122
|
+
* Single table design with namespace-based separation
|
|
82
123
|
*/
|
|
83
124
|
export declare class QueueStore {
|
|
84
125
|
private readonly client;
|
|
85
126
|
private readonly docClient;
|
|
86
|
-
private readonly
|
|
127
|
+
private readonly namespace;
|
|
87
128
|
private readonly endpoint;
|
|
88
|
-
constructor(config
|
|
129
|
+
constructor(config: QueueStoreConfig);
|
|
89
130
|
/**
|
|
90
|
-
* Get table name
|
|
131
|
+
* Get fixed table name (v2: always returns pm-runner-queue)
|
|
91
132
|
*/
|
|
92
133
|
getTableName(): string;
|
|
134
|
+
/**
|
|
135
|
+
* Get namespace
|
|
136
|
+
*/
|
|
137
|
+
getNamespace(): string;
|
|
93
138
|
/**
|
|
94
139
|
* Get endpoint
|
|
95
140
|
*/
|
|
@@ -99,12 +144,25 @@ export declare class QueueStore {
|
|
|
99
144
|
*/
|
|
100
145
|
tableExists(): Promise<boolean>;
|
|
101
146
|
/**
|
|
102
|
-
*
|
|
103
|
-
|
|
147
|
+
* Delete queue table (for testing)
|
|
148
|
+
*/
|
|
149
|
+
deleteTable(): Promise<void>;
|
|
150
|
+
/**
|
|
151
|
+
* Create queue table with composite key (v2)
|
|
152
|
+
* PK: namespace, SK: task_id
|
|
104
153
|
*/
|
|
105
154
|
createTable(): Promise<void>;
|
|
106
155
|
/**
|
|
107
|
-
*
|
|
156
|
+
* Create runners table (v2)
|
|
157
|
+
* PK: namespace, SK: runner_id
|
|
158
|
+
*/
|
|
159
|
+
createRunnersTable(): Promise<void>;
|
|
160
|
+
/**
|
|
161
|
+
* Check if runners table exists
|
|
162
|
+
*/
|
|
163
|
+
runnersTableExists(): Promise<boolean>;
|
|
164
|
+
/**
|
|
165
|
+
* Ensure both tables exist
|
|
108
166
|
*/
|
|
109
167
|
ensureTable(): Promise<void>;
|
|
110
168
|
/**
|
|
@@ -114,77 +172,78 @@ export declare class QueueStore {
|
|
|
114
172
|
/**
|
|
115
173
|
* Enqueue a new task
|
|
116
174
|
* Creates item with status=QUEUED
|
|
117
|
-
*
|
|
118
|
-
* @param sessionId - Session ID
|
|
119
|
-
* @param taskGroupId - Task Group ID
|
|
120
|
-
* @param prompt - User prompt
|
|
121
|
-
* @param taskId - Optional task ID (generates if not provided)
|
|
122
|
-
* @returns Created queue item
|
|
123
175
|
*/
|
|
124
176
|
enqueue(sessionId: string, taskGroupId: string, prompt: string, taskId?: string): Promise<QueueItem>;
|
|
125
177
|
/**
|
|
126
|
-
* Get item by task_id
|
|
178
|
+
* Get item by task_id (v2: uses composite key)
|
|
127
179
|
*/
|
|
128
|
-
getItem(taskId: string): Promise<QueueItem | null>;
|
|
180
|
+
getItem(taskId: string, targetNamespace?: string): Promise<QueueItem | null>;
|
|
129
181
|
/**
|
|
130
|
-
* Claim the oldest QUEUED task
|
|
131
|
-
* Per spec: Uses conditional update for double execution prevention
|
|
132
|
-
*
|
|
133
|
-
* @returns ClaimResult with success flag and item if claimed
|
|
182
|
+
* Claim the oldest QUEUED task for this namespace
|
|
134
183
|
*/
|
|
135
184
|
claim(): Promise<ClaimResult>;
|
|
136
185
|
/**
|
|
137
186
|
* Update task status
|
|
138
|
-
* Per spec: RUNNING -> COMPLETE or RUNNING -> ERROR
|
|
139
|
-
*
|
|
140
|
-
* @param taskId - Task ID
|
|
141
|
-
* @param status - New status
|
|
142
|
-
* @param errorMessage - Optional error message (for ERROR status)
|
|
143
187
|
*/
|
|
144
188
|
updateStatus(taskId: string, status: QueueItemStatus, errorMessage?: string): Promise<void>;
|
|
145
189
|
/**
|
|
146
190
|
* Update task status with validation
|
|
147
|
-
* Per spec/19_WEB_UI.md: PATCH /api/tasks/:task_id/status
|
|
148
|
-
*
|
|
149
|
-
* @param taskId - Task ID
|
|
150
|
-
* @param newStatus - Target status
|
|
151
|
-
* @returns StatusUpdateResult with success/error info
|
|
152
191
|
*/
|
|
153
192
|
updateStatusWithValidation(taskId: string, newStatus: QueueItemStatus): Promise<StatusUpdateResult>;
|
|
154
193
|
/**
|
|
155
|
-
* Get items by
|
|
156
|
-
* Uses session-index GSI
|
|
194
|
+
* Get items by status for this namespace
|
|
157
195
|
*/
|
|
158
|
-
|
|
196
|
+
getByStatus(status: QueueItemStatus): Promise<QueueItem[]>;
|
|
159
197
|
/**
|
|
160
|
-
* Get items by
|
|
161
|
-
* Uses status-index GSI
|
|
198
|
+
* Get items by task group ID for this namespace
|
|
162
199
|
*/
|
|
163
|
-
|
|
200
|
+
getByTaskGroup(taskGroupId: string, targetNamespace?: string): Promise<QueueItem[]>;
|
|
164
201
|
/**
|
|
165
|
-
* Get items
|
|
166
|
-
* Uses task-group-index GSI
|
|
167
|
-
* Per spec/19_WEB_UI.md: for listing tasks in a task group
|
|
202
|
+
* Get all items in a namespace
|
|
168
203
|
*/
|
|
169
|
-
|
|
204
|
+
getAllItems(targetNamespace?: string): Promise<QueueItem[]>;
|
|
170
205
|
/**
|
|
171
|
-
* Get all distinct task groups with summary
|
|
172
|
-
* Per spec/19_WEB_UI.md: for task group list view
|
|
173
|
-
* Note: Uses Scan - consider pagination for large datasets
|
|
206
|
+
* Get all distinct task groups for a namespace with summary
|
|
174
207
|
*/
|
|
175
|
-
getAllTaskGroups(): Promise<TaskGroupSummary[]>;
|
|
208
|
+
getAllTaskGroups(targetNamespace?: string): Promise<TaskGroupSummary[]>;
|
|
209
|
+
/**
|
|
210
|
+
* Get all distinct namespaces (scan entire table)
|
|
211
|
+
*/
|
|
212
|
+
getAllNamespaces(): Promise<NamespaceSummary[]>;
|
|
176
213
|
/**
|
|
177
214
|
* Delete item (for testing)
|
|
178
215
|
*/
|
|
179
216
|
deleteItem(taskId: string): Promise<void>;
|
|
180
217
|
/**
|
|
181
218
|
* Mark stale RUNNING tasks as ERROR
|
|
182
|
-
* Per spec: fail-closed - don't leave tasks in "limbo"
|
|
183
|
-
*
|
|
184
|
-
* @param maxAgeMs - Max age in milliseconds for RUNNING tasks
|
|
185
|
-
* @returns Number of tasks marked as ERROR
|
|
186
219
|
*/
|
|
187
220
|
recoverStaleTasks(maxAgeMs?: number): Promise<number>;
|
|
221
|
+
/**
|
|
222
|
+
* Register or update runner heartbeat
|
|
223
|
+
*/
|
|
224
|
+
updateRunnerHeartbeat(runnerId: string, projectRoot: string): Promise<void>;
|
|
225
|
+
/**
|
|
226
|
+
* Get runner by ID
|
|
227
|
+
*/
|
|
228
|
+
getRunner(runnerId: string): Promise<RunnerRecord | null>;
|
|
229
|
+
/**
|
|
230
|
+
* Get all runners for this namespace
|
|
231
|
+
*/
|
|
232
|
+
getAllRunners(targetNamespace?: string): Promise<RunnerRecord[]>;
|
|
233
|
+
/**
|
|
234
|
+
* Get runners with their alive status
|
|
235
|
+
*/
|
|
236
|
+
getRunnersWithStatus(heartbeatTimeoutMs?: number, targetNamespace?: string): Promise<Array<RunnerRecord & {
|
|
237
|
+
isAlive: boolean;
|
|
238
|
+
}>>;
|
|
239
|
+
/**
|
|
240
|
+
* Mark runner as stopped
|
|
241
|
+
*/
|
|
242
|
+
markRunnerStopped(runnerId: string): Promise<void>;
|
|
243
|
+
/**
|
|
244
|
+
* Delete runner record
|
|
245
|
+
*/
|
|
246
|
+
deleteRunner(runnerId: string): Promise<void>;
|
|
188
247
|
/**
|
|
189
248
|
* Close the client connection
|
|
190
249
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-store.d.ts","sourceRoot":"","sources":["../../src/queue/queue-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"queue-store.d.ts","sourceRoot":"","sources":["../../src/queue/queue-store.ts"],"names":[],"mappings":"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"}
|