@quantod/qq 0.1.13 → 0.2.0

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.
@@ -21,8 +21,7 @@ export interface FilterOptions {
21
21
  limit?: number;
22
22
  offset?: number;
23
23
  }
24
- export declare function makePipeline(name?: string): string;
25
- export declare function listPipelines(): string[];
24
+ export declare function makePipeline(customName?: string): string;
26
25
  export declare function deletePipeline(pipeline: string): void;
27
26
  export interface PushOptions {
28
27
  payload?: string;
@@ -38,9 +37,9 @@ export interface ReleaseOptions {
38
37
  }
39
38
  export declare function release(pipeline: string, id: string, { target, payload, replace, priority }?: ReleaseOptions): void;
40
39
  export declare function batchRead(pipeline: string, stage?: string, filters?: FilterOptions, includePayload?: boolean): Item[];
41
- export declare function stats(pipeline: string): Record<string, {
40
+ export declare function stats(pipeline?: string): Record<string, Record<string, {
42
41
  total: number;
43
42
  claimed: number;
44
- }>;
43
+ }>>;
45
44
  export declare function unclaim(pipeline: string, stage?: string, filters?: FilterOptions): number;
46
45
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAIhC,qBAAa,OAAQ,SAAQ,KAAK;gBACpB,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+BD,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAUlD;AAID,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAYxC;AAID,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAErD;AAID,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,QAAc,EAAE,GAAE,WAAgB,GAAG,MAAM,CAiBxH;AAID,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAoBlE;AAID,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAE,cAAmB,GAAG,IAAI,CA6BvH;AA6BD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAM,EAAE,OAAO,GAAE,aAAkB,EAAE,cAAc,UAAO,GAAG,IAAI,EAAE,CA4BnH;AAID,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB1F;AAID,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAa1F"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAIhC,qBAAa,OAAQ,SAAQ,KAAK;gBACpB,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+BD,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAmBxD;AAKD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAOrD;AAID,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,QAAc,EAAE,GAAE,WAAgB,GAAG,MAAM,CAiBxH;AAID,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAoBlE;AAID,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAE,cAAmB,GAAG,IAAI,CA6BvH;AA6BD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAM,EAAE,OAAO,GAAE,aAAkB,EAAE,cAAc,UAAO,GAAG,IAAI,EAAE,CA4BnH;AAID,wBAAgB,KAAK,CAAC,QAAQ,SAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAkBxG;AAID,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAa1F"}
package/dist/commands.js CHANGED
@@ -35,7 +35,6 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.QQError = exports.yaml = void 0;
37
37
  exports.makePipeline = makePipeline;
38
- exports.listPipelines = listPipelines;
39
38
  exports.deletePipeline = deletePipeline;
40
39
  exports.push = push;
41
40
  exports.claim = claim;
@@ -43,8 +42,6 @@ exports.release = release;
43
42
  exports.batchRead = batchRead;
44
43
  exports.stats = stats;
45
44
  exports.unclaim = unclaim;
46
- const node_fs_1 = require("node:fs");
47
- const node_path_1 = require("node:path");
48
45
  const node_crypto_1 = require("node:crypto");
49
46
  const db_js_1 = require("./db.js");
50
47
  exports.yaml = __importStar(require("js-yaml"));
@@ -60,8 +57,8 @@ exports.QQError = QQError;
60
57
  function toGlob(pattern) {
61
58
  return pattern.replace(/\*/g, '%').replace(/\?/g, '_');
62
59
  }
63
- function nextSeq(db) {
64
- const row = db.prepare('SELECT MAX(seq) as m FROM messages').get();
60
+ function nextSeq(db, pipeline) {
61
+ const row = db.prepare('SELECT MAX(seq) as m FROM messages WHERE pipeline = ?').get(pipeline);
65
62
  return (row.m ?? 0) + 1;
66
63
  }
67
64
  function rowToItem(row, includePayload) {
@@ -79,47 +76,49 @@ function rowToItem(row, includePayload) {
79
76
  return msg;
80
77
  }
81
78
  // ── makePipeline ──────────────────────────────────────────────────────────────
82
- function makePipeline(name) {
83
- if (!name) {
79
+ function makePipeline(customName) {
80
+ if (!customName) {
84
81
  const now = new Date();
85
82
  const mm = String(now.getMonth() + 1).padStart(2, '0');
86
83
  const dd = String(now.getDate()).padStart(2, '0');
87
- name = `${mm}${dd}_${(0, node_crypto_1.randomBytes)(3).toString('hex')}`;
84
+ customName = `${mm}${dd}_${(0, node_crypto_1.randomBytes)(3).toString('hex')}`;
88
85
  }
89
- const db = (0, db_js_1.openDb)(name);
90
- db.close();
91
- return name;
92
- }
93
- // ── listPipelines ─────────────────────────────────────────────────────────────
94
- function listPipelines() {
95
- const dir = (0, db_js_1.dbRoot)();
96
- let entries;
86
+ const name = customName;
87
+ const db = (0, db_js_1.openDb)();
97
88
  try {
98
- entries = (0, node_fs_1.readdirSync)(dir);
89
+ (0, db_js_1.inTransaction)(db, () => {
90
+ const existing = db.prepare('SELECT id FROM pipelines WHERE id = ?').get(name);
91
+ if (existing)
92
+ throw new QQError(`pipeline already exists: ${name}`);
93
+ db.prepare('INSERT INTO pipelines (id, created) VALUES (?, ?)').run(name, Date.now());
94
+ });
99
95
  }
100
- catch {
101
- return [];
96
+ finally {
97
+ db.close();
102
98
  }
103
- return entries
104
- .filter(f => f.endsWith('.db'))
105
- .map(f => f.slice(0, -3))
106
- .sort();
99
+ return name;
107
100
  }
108
101
  // ── deletePipeline ────────────────────────────────────────────────────────────
109
102
  function deletePipeline(pipeline) {
110
- (0, node_fs_1.rmSync)((0, node_path_1.join)((0, db_js_1.dbRoot)(), `${pipeline}.db`), { force: true });
103
+ const db = (0, db_js_1.openDb)();
104
+ try {
105
+ db.prepare('DELETE FROM pipelines WHERE id = ?').run(pipeline);
106
+ }
107
+ finally {
108
+ db.close();
109
+ }
111
110
  }
112
111
  function push(pipeline, stage, id, { payload, priority = 0.0 } = {}) {
113
- const db = (0, db_js_1.openDb)(pipeline);
112
+ const db = (0, db_js_1.openDb)();
114
113
  try {
115
114
  return (0, db_js_1.inTransaction)(db, () => {
116
- const seq = nextSeq(db);
115
+ const seq = nextSeq(db, pipeline);
117
116
  const actualId = id ?? String(seq);
118
- const existing = db.prepare('SELECT id FROM messages WHERE id = ?').get(actualId);
117
+ const existing = db.prepare('SELECT id FROM messages WHERE pipeline = ? AND id = ?').get(pipeline, actualId);
119
118
  if (existing)
120
119
  throw new QQError(`duplicate id: ${actualId}`);
121
120
  const now = Date.now();
122
- db.prepare('INSERT INTO messages (id, subqueue, claimed, seq, payload, priority, created, last_modified) VALUES (?, ?, 0, ?, ?, ?, ?, ?)').run(actualId, stage, seq, payload ?? null, priority, now, now);
121
+ db.prepare('INSERT INTO messages (pipeline, id, subqueue, claimed, seq, payload, priority, created, last_modified) VALUES (?, ?, ?, 0, ?, ?, ?, ?, ?)').run(pipeline, actualId, stage, seq, payload ?? null, priority, now, now);
123
122
  return actualId;
124
123
  });
125
124
  }
@@ -129,14 +128,14 @@ function push(pipeline, stage, id, { payload, priority = 0.0 } = {}) {
129
128
  }
130
129
  // ── claim ─────────────────────────────────────────────────────────────────────
131
130
  function claim(pipeline, stage) {
132
- const db = (0, db_js_1.openDb)(pipeline);
131
+ const db = (0, db_js_1.openDb)();
133
132
  try {
134
133
  return (0, db_js_1.inTransaction)(db, () => {
135
- const row = db.prepare('SELECT * FROM messages WHERE subqueue LIKE ? AND claimed = 0 ORDER BY priority DESC, seq ASC LIMIT 1').get(toGlob(stage));
134
+ const row = db.prepare('SELECT * FROM messages WHERE pipeline = ? AND subqueue LIKE ? AND claimed = 0 ORDER BY priority DESC, seq ASC LIMIT 1').get(pipeline, toGlob(stage));
136
135
  if (!row)
137
136
  return null;
138
137
  const now = Date.now();
139
- db.prepare('UPDATE messages SET claimed = 1, last_modified = ? WHERE id = ?').run(now, row.id);
138
+ db.prepare('UPDATE messages SET claimed = 1, last_modified = ? WHERE pipeline = ? AND id = ?').run(now, pipeline, row.id);
140
139
  return rowToItem({ ...row, claimed: 1 }, true);
141
140
  });
142
141
  }
@@ -145,15 +144,15 @@ function claim(pipeline, stage) {
145
144
  }
146
145
  }
147
146
  function release(pipeline, id, { target, payload, replace, priority } = {}) {
148
- const db = (0, db_js_1.openDb)(pipeline);
147
+ const db = (0, db_js_1.openDb)();
149
148
  try {
150
149
  (0, db_js_1.inTransaction)(db, () => {
151
- const row = db.prepare('SELECT * FROM messages WHERE id = ?').get(id);
150
+ const row = db.prepare('SELECT * FROM messages WHERE pipeline = ? AND id = ?').get(pipeline, id);
152
151
  if (!row)
153
152
  throw new QQError(`item not found: ${id}`);
154
153
  if (!row.claimed)
155
154
  throw new QQError(`only claimed items can be released: ${id}`);
156
- const seq = nextSeq(db);
155
+ const seq = nextSeq(db, pipeline);
157
156
  const now = Date.now();
158
157
  const newStage = target ?? row.subqueue;
159
158
  const newPriority = priority ?? row.priority ?? 0.0;
@@ -166,7 +165,7 @@ function release(pipeline, id, { target, payload, replace, priority } = {}) {
166
165
  else {
167
166
  newPayload = row.payload ?? null;
168
167
  }
169
- db.prepare('UPDATE messages SET claimed = 0, seq = ?, subqueue = ?, payload = ?, priority = ?, last_modified = ? WHERE id = ?').run(seq, newStage, newPayload, newPriority, now, id);
168
+ db.prepare('UPDATE messages SET claimed = 0, seq = ?, subqueue = ?, payload = ?, priority = ?, last_modified = ? WHERE pipeline = ? AND id = ?').run(seq, newStage, newPayload, newPriority, now, pipeline, id);
170
169
  });
171
170
  }
172
171
  finally {
@@ -174,9 +173,9 @@ function release(pipeline, id, { target, payload, replace, priority } = {}) {
174
173
  }
175
174
  }
176
175
  // ── shared filter builder ─────────────────────────────────────────────────────
177
- function buildFilterConditions(stage, filters) {
178
- const conditions = ['subqueue LIKE ?'];
179
- const params = [toGlob(stage)];
176
+ function buildFilterConditions(pipeline, stage, filters) {
177
+ const conditions = ['pipeline = ?', 'subqueue LIKE ?'];
178
+ const params = [pipeline, toGlob(stage)];
180
179
  if (filters.ids?.length) {
181
180
  conditions.push(`id IN (${filters.ids.map(() => '?').join(', ')})`);
182
181
  params.push(...filters.ids);
@@ -197,9 +196,9 @@ function buildFilterConditions(stage, filters) {
197
196
  }
198
197
  // ── batchRead ─────────────────────────────────────────────────────────────────
199
198
  function batchRead(pipeline, stage = '*', filters = {}, includePayload = true) {
200
- const db = (0, db_js_1.openDb)(pipeline);
199
+ const db = (0, db_js_1.openDb)();
201
200
  try {
202
- const { conditions, params } = buildFilterConditions(stage, filters);
201
+ const { conditions, params } = buildFilterConditions(pipeline, stage, filters);
203
202
  if (filters.claimed !== undefined) {
204
203
  conditions.push('claimed = ?');
205
204
  params.push(filters.claimed ? 1 : 0);
@@ -224,17 +223,19 @@ function batchRead(pipeline, stage = '*', filters = {}, includePayload = true) {
224
223
  }
225
224
  }
226
225
  // ── stats ─────────────────────────────────────────────────────────────────────
227
- function stats(pipeline) {
228
- const db = (0, db_js_1.openDb)(pipeline);
226
+ function stats(pipeline = '*') {
227
+ const db = (0, db_js_1.openDb)();
229
228
  try {
230
- const rows = db.prepare('SELECT subqueue, claimed, COUNT(*) as count FROM messages GROUP BY subqueue, claimed').all();
229
+ const rows = db.prepare('SELECT pipeline, subqueue, claimed, COUNT(*) as count FROM messages WHERE pipeline LIKE ? GROUP BY pipeline, subqueue, claimed').all(toGlob(pipeline));
231
230
  const result = {};
232
231
  for (const row of rows) {
233
- if (!result[row.subqueue])
234
- result[row.subqueue] = { total: 0, claimed: 0 };
235
- result[row.subqueue].total += row.count;
232
+ if (!result[row.pipeline])
233
+ result[row.pipeline] = {};
234
+ if (!result[row.pipeline][row.subqueue])
235
+ result[row.pipeline][row.subqueue] = { total: 0, claimed: 0 };
236
+ result[row.pipeline][row.subqueue].total += row.count;
236
237
  if (row.claimed)
237
- result[row.subqueue].claimed += row.count;
238
+ result[row.pipeline][row.subqueue].claimed += row.count;
238
239
  }
239
240
  return result;
240
241
  }
@@ -244,11 +245,11 @@ function stats(pipeline) {
244
245
  }
245
246
  // ── unclaim ───────────────────────────────────────────────────────────────────
246
247
  function unclaim(pipeline, stage = '*', filters = {}) {
247
- const db = (0, db_js_1.openDb)(pipeline);
248
+ const db = (0, db_js_1.openDb)();
248
249
  try {
249
250
  return (0, db_js_1.inTransaction)(db, () => {
250
251
  const now = Date.now();
251
- const { conditions, params } = buildFilterConditions(stage, filters);
252
+ const { conditions, params } = buildFilterConditions(pipeline, stage, filters);
252
253
  conditions.push('claimed = 1');
253
254
  const sql = `UPDATE messages SET claimed = 0, last_modified = ? WHERE ${conditions.join(' AND ')}`;
254
255
  return db.prepare(sql).run(now, ...params).changes;
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
package/dist/db.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import Database from 'better-sqlite3';
2
- export declare function dbRoot(): string;
3
- export declare function openDb(name: string): Database.Database;
2
+ export declare function openDb(): Database.Database;
4
3
  export declare function inTransaction<T>(db: Database.Database, fn: () => T): T;
5
4
  //# sourceMappingURL=db.d.ts.map
package/dist/db.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAmBtC,wBAAgB,MAAM,IAAI,MAAM,CAI/B;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAWtD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEtE"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAgCtC,wBAAgB,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAS1C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEtE"}
package/dist/db.js CHANGED
@@ -3,45 +3,45 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.dbRoot = dbRoot;
7
6
  exports.openDb = openDb;
8
7
  exports.inTransaction = inTransaction;
9
8
  const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
10
9
  const node_fs_1 = require("node:fs");
11
10
  const node_path_1 = require("node:path");
12
11
  const DDL = `
12
+ CREATE TABLE IF NOT EXISTS pipelines (
13
+ id TEXT PRIMARY KEY,
14
+ created INTEGER NOT NULL
15
+ );
13
16
  CREATE TABLE IF NOT EXISTS messages (
14
- id TEXT PRIMARY KEY,
17
+ id TEXT NOT NULL,
18
+ pipeline TEXT NOT NULL REFERENCES pipelines(id) ON DELETE CASCADE,
15
19
  subqueue TEXT NOT NULL,
16
20
  claimed INTEGER NOT NULL DEFAULT 0,
17
21
  seq INTEGER NOT NULL,
18
22
  payload TEXT,
19
23
  created INTEGER NOT NULL,
20
24
  last_modified INTEGER NOT NULL,
21
- priority REAL NOT NULL DEFAULT 0.0
25
+ priority REAL NOT NULL DEFAULT 0.0,
26
+ PRIMARY KEY (pipeline, id)
22
27
  );
23
- CREATE INDEX IF NOT EXISTS idx_claim ON messages (subqueue, claimed, seq);
24
- CREATE INDEX IF NOT EXISTS idx_claim_pri ON messages (subqueue, claimed, priority, seq);
28
+ CREATE INDEX IF NOT EXISTS idx_claim ON messages (pipeline, subqueue, claimed, seq);
29
+ CREATE INDEX IF NOT EXISTS idx_claim_pri ON messages (pipeline, subqueue, claimed, priority, seq);
25
30
  `;
26
- function dbRoot() {
31
+ function dbDir() {
27
32
  const home = process.env.HOME;
28
- if (home?.startsWith('/sessions'))
29
- return (0, node_path_1.join)(home, '.claude', 'qq');
30
- return (0, node_path_1.join)(process.cwd(), '.claude', 'qq');
33
+ return home?.startsWith('/sessions')
34
+ ? (0, node_path_1.join)(home, '.claude', 'qq')
35
+ : (0, node_path_1.join)(process.cwd(), '.claude', 'qq');
31
36
  }
32
- function openDb(name) {
33
- const dir = dbRoot();
37
+ function openDb() {
38
+ const dir = dbDir();
34
39
  (0, node_fs_1.mkdirSync)(dir, { recursive: true });
35
- const db = new better_sqlite3_1.default((0, node_path_1.join)(dir, `${name}.db`));
40
+ const db = new better_sqlite3_1.default((0, node_path_1.join)(dir, 'qq.db'));
36
41
  db.pragma('journal_mode = WAL');
37
42
  db.pragma('busy_timeout = 5000');
43
+ db.pragma('foreign_keys = ON');
38
44
  db.exec(DDL);
39
- // Migration: add priority column to databases created before this version
40
- try {
41
- db.exec('ALTER TABLE messages ADD COLUMN priority REAL NOT NULL DEFAULT 0.0');
42
- }
43
- catch { /* already exists */ }
44
- db.exec('CREATE INDEX IF NOT EXISTS idx_claim_pri ON messages (subqueue, claimed, priority, seq)');
45
45
  return db;
46
46
  }
47
47
  function inTransaction(db, fn) {
package/dist/db.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":";;;;;AAmBA,wBAIC;AAED,wBAWC;AAED,sCAEC;AAxCD,oEAAsC;AACtC,qCAAoC;AACpC,yCAAiC;AAEjC,MAAM,GAAG,GAAG;;;;;;;;;;;;;CAaX,CAAC;AAEF,SAAgB,MAAM;IACpB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B,IAAI,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAA,gBAAI,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACtE,OAAO,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,MAAM,CAAC,IAAY;IACjC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAA,mBAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IACjD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACjC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,0EAA0E;IAC1E,IAAI,CAAC;QAAC,EAAE,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACrH,EAAE,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAC;IACnG,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,aAAa,CAAI,EAAqB,EAAE,EAAW;IACjE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":";;;;;AAgCA,wBASC;AAED,sCAEC;AA7CD,oEAAsC;AACtC,qCAAoC;AACpC,yCAAiC;AAEjC,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;CAmBX,CAAC;AAEF,SAAS,KAAK;IACZ,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B,OAAO,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;QAClC,CAAC,CAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC;QAC7B,CAAC,CAAC,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,MAAM;IACpB,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;IACpB,IAAA,mBAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5C,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACjC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,aAAa,CAAI,EAAqB,EAAE,EAAW;IACjE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AACxC,CAAC"}
package/dist/index.js CHANGED
@@ -79,16 +79,6 @@ program
79
79
  fail(e instanceof Error ? e.message : String(e));
80
80
  }
81
81
  });
82
- program
83
- .command('list-pipelines')
84
- .action(() => {
85
- try {
86
- out((0, commands_js_1.listPipelines)());
87
- }
88
- catch (e) {
89
- fail(e instanceof Error ? e.message : String(e));
90
- }
91
- });
92
82
  program
93
83
  .command('delete-pipeline <pipeline>')
94
84
  .action((pipeline) => {
@@ -115,7 +105,12 @@ program
115
105
  .command('claim <pipeline> <stage>')
116
106
  .action((pipeline, stage) => {
117
107
  try {
118
- out((0, commands_js_1.claim)(pipeline, stage) ?? { empty: true });
108
+ const item = (0, commands_js_1.claim)(pipeline, stage);
109
+ if (item === null) {
110
+ process.stdout.write('No more items to claim\n');
111
+ process.exit(2);
112
+ }
113
+ out(item);
119
114
  }
120
115
  catch (e) {
121
116
  fail(e instanceof Error ? e.message : String(e));
@@ -150,7 +145,7 @@ addFilterOptions(program.command('batch-read <pipeline> [stage]'))
150
145
  }
151
146
  });
152
147
  program
153
- .command('stats <pipeline>')
148
+ .command('stats [pipeline]')
154
149
  .action((pipeline) => {
155
150
  try {
156
151
  out((0, commands_js_1.stats)(pipeline));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quantod/qq",
3
- "version": "0.1.13",
3
+ "version": "0.2.0",
4
4
  "description": "Persistent queue for multi-stage Claude agent pipelines",
5
5
  "license": "UNLICENSED",
6
6
  "engines": {
package/src/commands.ts CHANGED
@@ -1,8 +1,6 @@
1
- import { rmSync, readdirSync } from 'node:fs';
2
- import { join } from 'node:path';
3
1
  import { randomBytes } from 'node:crypto';
4
2
  import type Database from 'better-sqlite3';
5
- import { openDb, inTransaction, dbRoot } from './db.js';
3
+ import { openDb, inTransaction } from './db.js';
6
4
 
7
5
  export * as yaml from 'js-yaml';
8
6
 
@@ -44,8 +42,8 @@ function toGlob(pattern: string): string {
44
42
  return pattern.replace(/\*/g, '%').replace(/\?/g, '_');
45
43
  }
46
44
 
47
- function nextSeq(db: Database.Database): number {
48
- const row = db.prepare('SELECT MAX(seq) as m FROM messages').get() as { m: number | null };
45
+ function nextSeq(db: Database.Database, pipeline: string): number {
46
+ const row = db.prepare('SELECT MAX(seq) as m FROM messages WHERE pipeline = ?').get(pipeline) as { m: number | null };
49
47
  return (row.m ?? 0) + 1;
50
48
  }
51
49
 
@@ -65,38 +63,37 @@ function rowToItem(row: Record<string, unknown>, includePayload: boolean): Item
65
63
 
66
64
  // ── makePipeline ──────────────────────────────────────────────────────────────
67
65
 
68
- export function makePipeline(name?: string): string {
69
- if (!name) {
66
+ export function makePipeline(customName?: string): string {
67
+ if (!customName) {
70
68
  const now = new Date();
71
69
  const mm = String(now.getMonth() + 1).padStart(2, '0');
72
70
  const dd = String(now.getDate()).padStart(2, '0');
73
- name = `${mm}${dd}_${randomBytes(3).toString('hex')}`;
71
+ customName = `${mm}${dd}_${randomBytes(3).toString('hex')}`;
74
72
  }
75
- const db = openDb(name);
76
- db.close();
77
- return name;
78
- }
79
-
80
- // ── listPipelines ─────────────────────────────────────────────────────────────
81
-
82
- export function listPipelines(): string[] {
83
- const dir = dbRoot();
84
- let entries: string[];
73
+ const name = customName;
74
+ const db = openDb();
85
75
  try {
86
- entries = readdirSync(dir);
87
- } catch {
88
- return [];
76
+ inTransaction(db, () => {
77
+ const existing = db.prepare('SELECT id FROM pipelines WHERE id = ?').get(name);
78
+ if (existing) throw new QQError(`pipeline already exists: ${name}`);
79
+ db.prepare('INSERT INTO pipelines (id, created) VALUES (?, ?)').run(name, Date.now());
80
+ });
81
+ } finally {
82
+ db.close();
89
83
  }
90
- return entries
91
- .filter(f => f.endsWith('.db'))
92
- .map(f => f.slice(0, -3))
93
- .sort();
84
+ return name;
94
85
  }
95
86
 
87
+
96
88
  // ── deletePipeline ────────────────────────────────────────────────────────────
97
89
 
98
90
  export function deletePipeline(pipeline: string): void {
99
- rmSync(join(dbRoot(), `${pipeline}.db`), { force: true });
91
+ const db = openDb();
92
+ try {
93
+ db.prepare('DELETE FROM pipelines WHERE id = ?').run(pipeline);
94
+ } finally {
95
+ db.close();
96
+ }
100
97
  }
101
98
 
102
99
  // ── push ──────────────────────────────────────────────────────────────────────
@@ -107,17 +104,17 @@ export interface PushOptions {
107
104
  }
108
105
 
109
106
  export function push(pipeline: string, stage: string, id?: string, { payload, priority = 0.0 }: PushOptions = {}): string {
110
- const db = openDb(pipeline);
107
+ const db = openDb();
111
108
  try {
112
109
  return inTransaction(db, () => {
113
- const seq = nextSeq(db);
110
+ const seq = nextSeq(db, pipeline);
114
111
  const actualId = id ?? String(seq);
115
- const existing = db.prepare('SELECT id FROM messages WHERE id = ?').get(actualId);
112
+ const existing = db.prepare('SELECT id FROM messages WHERE pipeline = ? AND id = ?').get(pipeline, actualId);
116
113
  if (existing) throw new QQError(`duplicate id: ${actualId}`);
117
114
  const now = Date.now();
118
115
  db.prepare(
119
- 'INSERT INTO messages (id, subqueue, claimed, seq, payload, priority, created, last_modified) VALUES (?, ?, 0, ?, ?, ?, ?, ?)'
120
- ).run(actualId, stage, seq, payload ?? null, priority, now, now);
116
+ 'INSERT INTO messages (pipeline, id, subqueue, claimed, seq, payload, priority, created, last_modified) VALUES (?, ?, ?, 0, ?, ?, ?, ?, ?)'
117
+ ).run(pipeline, actualId, stage, seq, payload ?? null, priority, now, now);
121
118
  return actualId;
122
119
  });
123
120
  } finally {
@@ -128,19 +125,19 @@ export function push(pipeline: string, stage: string, id?: string, { payload, pr
128
125
  // ── claim ─────────────────────────────────────────────────────────────────────
129
126
 
130
127
  export function claim(pipeline: string, stage: string): Item | null {
131
- const db = openDb(pipeline);
128
+ const db = openDb();
132
129
  try {
133
130
  return inTransaction(db, () => {
134
131
  const row = db.prepare(
135
- 'SELECT * FROM messages WHERE subqueue LIKE ? AND claimed = 0 ORDER BY priority DESC, seq ASC LIMIT 1'
136
- ).get(toGlob(stage)) as Record<string, unknown> | undefined;
132
+ 'SELECT * FROM messages WHERE pipeline = ? AND subqueue LIKE ? AND claimed = 0 ORDER BY priority DESC, seq ASC LIMIT 1'
133
+ ).get(pipeline, toGlob(stage)) as Record<string, unknown> | undefined;
137
134
 
138
135
  if (!row) return null;
139
136
 
140
137
  const now = Date.now();
141
138
  db.prepare(
142
- 'UPDATE messages SET claimed = 1, last_modified = ? WHERE id = ?'
143
- ).run(now, row.id as string);
139
+ 'UPDATE messages SET claimed = 1, last_modified = ? WHERE pipeline = ? AND id = ?'
140
+ ).run(now, pipeline, row.id as string);
144
141
 
145
142
  return rowToItem({ ...row, claimed: 1 }, true);
146
143
  });
@@ -159,14 +156,14 @@ export interface ReleaseOptions {
159
156
  }
160
157
 
161
158
  export function release(pipeline: string, id: string, { target, payload, replace, priority }: ReleaseOptions = {}): void {
162
- const db = openDb(pipeline);
159
+ const db = openDb();
163
160
  try {
164
161
  inTransaction(db, () => {
165
- const row = db.prepare('SELECT * FROM messages WHERE id = ?').get(id) as Record<string, unknown> | undefined;
162
+ const row = db.prepare('SELECT * FROM messages WHERE pipeline = ? AND id = ?').get(pipeline, id) as Record<string, unknown> | undefined;
166
163
  if (!row) throw new QQError(`item not found: ${id}`);
167
164
  if (!row.claimed) throw new QQError(`only claimed items can be released: ${id}`);
168
165
 
169
- const seq = nextSeq(db);
166
+ const seq = nextSeq(db, pipeline);
170
167
  const now = Date.now();
171
168
  const newStage = target ?? (row.subqueue as string);
172
169
  const newPriority = priority ?? (row.priority as number) ?? 0.0;
@@ -181,8 +178,8 @@ export function release(pipeline: string, id: string, { target, payload, replace
181
178
  }
182
179
 
183
180
  db.prepare(
184
- 'UPDATE messages SET claimed = 0, seq = ?, subqueue = ?, payload = ?, priority = ?, last_modified = ? WHERE id = ?'
185
- ).run(seq, newStage, newPayload, newPriority, now, id);
181
+ 'UPDATE messages SET claimed = 0, seq = ?, subqueue = ?, payload = ?, priority = ?, last_modified = ? WHERE pipeline = ? AND id = ?'
182
+ ).run(seq, newStage, newPayload, newPriority, now, pipeline, id);
186
183
  });
187
184
  } finally {
188
185
  db.close();
@@ -191,9 +188,9 @@ export function release(pipeline: string, id: string, { target, payload, replace
191
188
 
192
189
  // ── shared filter builder ─────────────────────────────────────────────────────
193
190
 
194
- function buildFilterConditions(stage: string, filters: FilterOptions): { conditions: string[]; params: (string | number | null)[] } {
195
- const conditions: string[] = ['subqueue LIKE ?'];
196
- const params: (string | number | null)[] = [toGlob(stage)];
191
+ function buildFilterConditions(pipeline: string, stage: string, filters: FilterOptions): { conditions: string[]; params: (string | number | null)[] } {
192
+ const conditions: string[] = ['pipeline = ?', 'subqueue LIKE ?'];
193
+ const params: (string | number | null)[] = [pipeline, toGlob(stage)];
197
194
 
198
195
  if (filters.ids?.length) {
199
196
  conditions.push(`id IN (${filters.ids.map(() => '?').join(', ')})`);
@@ -217,9 +214,9 @@ function buildFilterConditions(stage: string, filters: FilterOptions): { conditi
217
214
  // ── batchRead ─────────────────────────────────────────────────────────────────
218
215
 
219
216
  export function batchRead(pipeline: string, stage = '*', filters: FilterOptions = {}, includePayload = true): Item[] {
220
- const db = openDb(pipeline);
217
+ const db = openDb();
221
218
  try {
222
- const { conditions, params } = buildFilterConditions(stage, filters);
219
+ const { conditions, params } = buildFilterConditions(pipeline, stage, filters);
223
220
 
224
221
  if (filters.claimed !== undefined) {
225
222
  conditions.push('claimed = ?');
@@ -248,18 +245,19 @@ export function batchRead(pipeline: string, stage = '*', filters: FilterOptions
248
245
 
249
246
  // ── stats ─────────────────────────────────────────────────────────────────────
250
247
 
251
- export function stats(pipeline: string): Record<string, { total: number; claimed: number }> {
252
- const db = openDb(pipeline);
248
+ export function stats(pipeline = '*'): Record<string, Record<string, { total: number; claimed: number }>> {
249
+ const db = openDb();
253
250
  try {
254
251
  const rows = db.prepare(
255
- 'SELECT subqueue, claimed, COUNT(*) as count FROM messages GROUP BY subqueue, claimed'
256
- ).all() as { subqueue: string; claimed: number; count: number }[];
252
+ 'SELECT pipeline, subqueue, claimed, COUNT(*) as count FROM messages WHERE pipeline LIKE ? GROUP BY pipeline, subqueue, claimed'
253
+ ).all(toGlob(pipeline)) as { pipeline: string; subqueue: string; claimed: number; count: number }[];
257
254
 
258
- const result: Record<string, { total: number; claimed: number }> = {};
255
+ const result: Record<string, Record<string, { total: number; claimed: number }>> = {};
259
256
  for (const row of rows) {
260
- if (!result[row.subqueue]) result[row.subqueue] = { total: 0, claimed: 0 };
261
- result[row.subqueue].total += row.count;
262
- if (row.claimed) result[row.subqueue].claimed += row.count;
257
+ if (!result[row.pipeline]) result[row.pipeline] = {};
258
+ if (!result[row.pipeline][row.subqueue]) result[row.pipeline][row.subqueue] = { total: 0, claimed: 0 };
259
+ result[row.pipeline][row.subqueue].total += row.count;
260
+ if (row.claimed) result[row.pipeline][row.subqueue].claimed += row.count;
263
261
  }
264
262
  return result;
265
263
  } finally {
@@ -270,11 +268,11 @@ export function stats(pipeline: string): Record<string, { total: number; claimed
270
268
  // ── unclaim ───────────────────────────────────────────────────────────────────
271
269
 
272
270
  export function unclaim(pipeline: string, stage = '*', filters: FilterOptions = {}): number {
273
- const db = openDb(pipeline);
271
+ const db = openDb();
274
272
  try {
275
273
  return inTransaction(db, () => {
276
274
  const now = Date.now();
277
- const { conditions, params } = buildFilterConditions(stage, filters);
275
+ const { conditions, params } = buildFilterConditions(pipeline, stage, filters);
278
276
  conditions.push('claimed = 1');
279
277
  const sql = `UPDATE messages SET claimed = 0, last_modified = ? WHERE ${conditions.join(' AND ')}`;
280
278
  return db.prepare(sql).run(now, ...params).changes;
package/src/db.ts CHANGED
@@ -3,36 +3,41 @@ import { mkdirSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
 
5
5
  const DDL = `
6
+ CREATE TABLE IF NOT EXISTS pipelines (
7
+ id TEXT PRIMARY KEY,
8
+ created INTEGER NOT NULL
9
+ );
6
10
  CREATE TABLE IF NOT EXISTS messages (
7
- id TEXT PRIMARY KEY,
11
+ id TEXT NOT NULL,
12
+ pipeline TEXT NOT NULL REFERENCES pipelines(id) ON DELETE CASCADE,
8
13
  subqueue TEXT NOT NULL,
9
14
  claimed INTEGER NOT NULL DEFAULT 0,
10
15
  seq INTEGER NOT NULL,
11
16
  payload TEXT,
12
17
  created INTEGER NOT NULL,
13
18
  last_modified INTEGER NOT NULL,
14
- priority REAL NOT NULL DEFAULT 0.0
19
+ priority REAL NOT NULL DEFAULT 0.0,
20
+ PRIMARY KEY (pipeline, id)
15
21
  );
16
- CREATE INDEX IF NOT EXISTS idx_claim ON messages (subqueue, claimed, seq);
17
- CREATE INDEX IF NOT EXISTS idx_claim_pri ON messages (subqueue, claimed, priority, seq);
22
+ CREATE INDEX IF NOT EXISTS idx_claim ON messages (pipeline, subqueue, claimed, seq);
23
+ CREATE INDEX IF NOT EXISTS idx_claim_pri ON messages (pipeline, subqueue, claimed, priority, seq);
18
24
  `;
19
25
 
20
- export function dbRoot(): string {
26
+ function dbDir(): string {
21
27
  const home = process.env.HOME;
22
- if (home?.startsWith('/sessions')) return join(home, '.claude', 'qq');
23
- return join(process.cwd(), '.claude', 'qq');
28
+ return home?.startsWith('/sessions')
29
+ ? join(home, '.claude', 'qq')
30
+ : join(process.cwd(), '.claude', 'qq');
24
31
  }
25
32
 
26
- export function openDb(name: string): Database.Database {
27
- const dir = dbRoot();
33
+ export function openDb(): Database.Database {
34
+ const dir = dbDir();
28
35
  mkdirSync(dir, { recursive: true });
29
- const db = new Database(join(dir, `${name}.db`));
36
+ const db = new Database(join(dir, 'qq.db'));
30
37
  db.pragma('journal_mode = WAL');
31
38
  db.pragma('busy_timeout = 5000');
39
+ db.pragma('foreign_keys = ON');
32
40
  db.exec(DDL);
33
- // Migration: add priority column to databases created before this version
34
- try { db.exec('ALTER TABLE messages ADD COLUMN priority REAL NOT NULL DEFAULT 0.0'); } catch { /* already exists */ }
35
- db.exec('CREATE INDEX IF NOT EXISTS idx_claim_pri ON messages (subqueue, claimed, priority, seq)');
36
41
  return db;
37
42
  }
38
43
 
package/src/index.ts CHANGED
@@ -4,7 +4,7 @@ import { readFileSync } from 'node:fs';
4
4
  import { resolve, join } from 'node:path';
5
5
  import { dump } from 'js-yaml';
6
6
  import {
7
- makePipeline, listPipelines, deletePipeline, push, claim, release,
7
+ makePipeline, deletePipeline, push, claim, release,
8
8
  batchRead, stats, unclaim, QQError,
9
9
  type FilterOptions, type PushOptions, type ReleaseOptions,
10
10
  } from './commands.js';
@@ -78,13 +78,6 @@ program
78
78
  catch (e) { fail(e instanceof Error ? e.message : String(e)); }
79
79
  });
80
80
 
81
- program
82
- .command('list-pipelines')
83
- .action(() => {
84
- try { out(listPipelines()); }
85
- catch (e) { fail(e instanceof Error ? e.message : String(e)); }
86
- });
87
-
88
81
  program
89
82
  .command('delete-pipeline <pipeline>')
90
83
  .action((pipeline) => {
@@ -105,7 +98,14 @@ program
105
98
  program
106
99
  .command('claim <pipeline> <stage>')
107
100
  .action((pipeline, stage) => {
108
- try { out(claim(pipeline, stage) ?? { empty: true }); }
101
+ try {
102
+ const item = claim(pipeline, stage);
103
+ if (item === null) {
104
+ process.stdout.write('No more items to claim\n');
105
+ process.exit(2);
106
+ }
107
+ out(item);
108
+ }
109
109
  catch (e) { fail(e instanceof Error ? e.message : String(e)); }
110
110
  });
111
111
 
@@ -134,7 +134,7 @@ addFilterOptions(program.command('batch-read <pipeline> [stage]'))
134
134
  });
135
135
 
136
136
  program
137
- .command('stats <pipeline>')
137
+ .command('stats [pipeline]')
138
138
  .action((pipeline) => {
139
139
  try { out(stats(pipeline)); }
140
140
  catch (e) { fail(e instanceof Error ? e.message : String(e)); }