@quantod/qq 0.3.2 → 0.3.4
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/dist/commands.d.ts +4 -2
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +21 -8
- package/dist/commands.js.map +1 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +5 -1
- package/dist/db.js.map +1 -1
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/commands.ts +22 -8
- package/src/db.ts +7 -1
- package/src/index.ts +7 -6
package/dist/commands.d.ts
CHANGED
|
@@ -26,8 +26,9 @@ export declare function deletePipeline(pipeline: string): void;
|
|
|
26
26
|
export interface PushOptions {
|
|
27
27
|
payload?: string;
|
|
28
28
|
priority?: number;
|
|
29
|
+
plainText?: boolean;
|
|
29
30
|
}
|
|
30
|
-
export declare function push(pipeline: string, stage: string, id?: string, { payload, priority }?: PushOptions): string;
|
|
31
|
+
export declare function push(pipeline: string, stage: string, id?: string, { payload, priority, plainText }?: PushOptions): string;
|
|
31
32
|
export interface ClaimOptions {
|
|
32
33
|
random?: boolean;
|
|
33
34
|
}
|
|
@@ -37,8 +38,9 @@ export interface ReleaseOptions {
|
|
|
37
38
|
payload?: string;
|
|
38
39
|
replace?: boolean;
|
|
39
40
|
priority?: number;
|
|
41
|
+
plainText?: boolean;
|
|
40
42
|
}
|
|
41
|
-
export declare function release(pipeline: string, seq: number, { target, payload, replace, priority }?: ReleaseOptions): void;
|
|
43
|
+
export declare function release(pipeline: string, seq: number, { target, payload, replace, priority, plainText }?: ReleaseOptions): void;
|
|
42
44
|
export declare function batchRead(pipeline: string, stage?: string, filters?: FilterOptions, includePayload?: boolean): Item[];
|
|
43
45
|
export declare function stats(pipeline?: string): Record<string, Record<string, {
|
|
44
46
|
total: number;
|
package/dist/commands.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAahC,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;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,QAAc,EAAE,SAAiB,EAAE,GAAE,WAAgB,GAAG,MAAM,CAkB3I;AAID,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,MAAc,EAAE,GAAE,YAAiB,GAAG,IAAI,GAAG,IAAI,CA8BtH;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;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAiB,EAAE,GAAE,cAAmB,GAAG,IAAI,CA8B3I;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,CAkB1F"}
|
package/dist/commands.js
CHANGED
|
@@ -43,8 +43,19 @@ exports.batchRead = batchRead;
|
|
|
43
43
|
exports.stats = stats;
|
|
44
44
|
exports.unstick = unstick;
|
|
45
45
|
const node_crypto_1 = require("node:crypto");
|
|
46
|
+
const js_yaml_1 = require("js-yaml");
|
|
46
47
|
const db_js_1 = require("./db.js");
|
|
47
48
|
exports.yaml = __importStar(require("js-yaml"));
|
|
49
|
+
function validateYaml(payload, plainText) {
|
|
50
|
+
if (!payload || plainText)
|
|
51
|
+
return;
|
|
52
|
+
try {
|
|
53
|
+
(0, js_yaml_1.load)(payload);
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
throw new QQError(`payload is not valid YAML: ${e instanceof Error ? e.message : String(e)}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
48
59
|
// ── types ──────────────────────────────────────────────────────────────────────
|
|
49
60
|
class QQError extends Error {
|
|
50
61
|
constructor(message) {
|
|
@@ -89,7 +100,7 @@ function makePipeline(customName) {
|
|
|
89
100
|
(0, db_js_1.inTransaction)(db, () => {
|
|
90
101
|
const existing = db.prepare('SELECT id FROM pipelines WHERE id = ?').get(name);
|
|
91
102
|
if (existing)
|
|
92
|
-
throw new QQError(`pipeline
|
|
103
|
+
throw new QQError(`pipeline ${name} already exists`);
|
|
93
104
|
db.prepare('INSERT INTO pipelines (id, created) VALUES (?, ?)').run(name, Date.now());
|
|
94
105
|
});
|
|
95
106
|
}
|
|
@@ -108,7 +119,8 @@ function deletePipeline(pipeline) {
|
|
|
108
119
|
db.close();
|
|
109
120
|
}
|
|
110
121
|
}
|
|
111
|
-
function push(pipeline, stage, id, { payload, priority = 0.0 } = {}) {
|
|
122
|
+
function push(pipeline, stage, id, { payload, priority = 0.0, plainText = false } = {}) {
|
|
123
|
+
validateYaml(payload, plainText);
|
|
112
124
|
const db = (0, db_js_1.openDb)();
|
|
113
125
|
try {
|
|
114
126
|
return (0, db_js_1.inTransaction)(db, () => {
|
|
@@ -116,7 +128,7 @@ function push(pipeline, stage, id, { payload, priority = 0.0 } = {}) {
|
|
|
116
128
|
const actualId = id ?? String(seq);
|
|
117
129
|
const existing = db.prepare('SELECT id FROM messages WHERE pipeline = ? AND id = ?').get(pipeline, actualId);
|
|
118
130
|
if (existing)
|
|
119
|
-
throw new QQError(`
|
|
131
|
+
throw new QQError(`item ${actualId} already in the pipeline`);
|
|
120
132
|
const now = Date.now();
|
|
121
133
|
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);
|
|
122
134
|
return actualId;
|
|
@@ -134,9 +146,9 @@ function claim(pipeline, stage, id, { random = false } = {}) {
|
|
|
134
146
|
if (id !== undefined) {
|
|
135
147
|
row = db.prepare('SELECT * FROM messages WHERE pipeline = ? AND id = ?').get(pipeline, id);
|
|
136
148
|
if (!row)
|
|
137
|
-
throw new QQError(`item
|
|
149
|
+
throw new QQError(`item ${id} not found`);
|
|
138
150
|
if (row.claimed)
|
|
139
|
-
throw new QQError(`item
|
|
151
|
+
throw new QQError(`item ${id} already claimed`);
|
|
140
152
|
}
|
|
141
153
|
else {
|
|
142
154
|
const orderBy = random ? 'RANDOM()' : 'priority DESC, seq ASC';
|
|
@@ -153,15 +165,16 @@ function claim(pipeline, stage, id, { random = false } = {}) {
|
|
|
153
165
|
db.close();
|
|
154
166
|
}
|
|
155
167
|
}
|
|
156
|
-
function release(pipeline, seq, { target, payload, replace, priority } = {}) {
|
|
168
|
+
function release(pipeline, seq, { target, payload, replace, priority, plainText = false } = {}) {
|
|
169
|
+
validateYaml(payload, plainText);
|
|
157
170
|
const db = (0, db_js_1.openDb)();
|
|
158
171
|
try {
|
|
159
172
|
(0, db_js_1.inTransaction)(db, () => {
|
|
160
173
|
const row = db.prepare('SELECT * FROM messages WHERE pipeline = ? AND seq = ?').get(pipeline, seq);
|
|
161
174
|
if (!row)
|
|
162
|
-
throw new QQError(`claim
|
|
175
|
+
throw new QQError(`claim on seq ${seq} expired`);
|
|
163
176
|
if (!row.claimed)
|
|
164
|
-
throw new QQError(`item
|
|
177
|
+
throw new QQError(`item seq ${seq} not claimed`);
|
|
165
178
|
const newSeq = nextSeq(db, pipeline);
|
|
166
179
|
const now = Date.now();
|
|
167
180
|
const newStage = target ?? row.subqueue;
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
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;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AA2CtC,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
|
@@ -31,13 +31,17 @@ CREATE INDEX IF NOT EXISTS idx_claim_pri ON messages (pipeline, subqueue, claime
|
|
|
31
31
|
`;
|
|
32
32
|
function dbDir() {
|
|
33
33
|
const home = process.env.HOME;
|
|
34
|
-
if (home) {
|
|
34
|
+
if (home?.startsWith('/sessions')) {
|
|
35
35
|
try {
|
|
36
36
|
const workspace = (0, node_fs_1.readFileSync)((0, node_path_1.join)(home, '.cowork_workspace_location'), 'utf8').trim();
|
|
37
37
|
if (workspace)
|
|
38
38
|
return (0, node_path_1.join)(workspace, '.claude', 'qq');
|
|
39
39
|
}
|
|
40
40
|
catch { /* file absent */ }
|
|
41
|
+
throw new Error('Cowork sandboxed environment detected.\n' +
|
|
42
|
+
'Before using qq, write your sandbox workspace path to $HOME/.cowork_workspace_location:\n' +
|
|
43
|
+
' echo "<sandbox workspace path>" > $HOME/.cowork_workspace_location\n' +
|
|
44
|
+
'Find the workspace path in your system prompt\'s shell access path mapping.');
|
|
41
45
|
}
|
|
42
46
|
return (0, node_path_1.join)(process.cwd(), '.claude', 'qq');
|
|
43
47
|
}
|
package/dist/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":";;;;;AA2CA,wBASC;AAED,sCAEC;AAxDD,oEAAsC;AACtC,qCAAkD;AAClD,yCAAiC;AAEjC,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;CAoBX,CAAC;AAEF,SAAS,KAAK;IACZ,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B,IAAI,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,4BAA4B,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACxF,IAAI,SAAS;gBAAE,OAAO,IAAA,gBAAI,EAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,0CAA0C;YAC1C,2FAA2F;YAC3F,wEAAwE;YACxE,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IACD,OAAO,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC9C,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,uBAAuB,CAAC,CAAC;IACnC,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
|
@@ -80,11 +80,10 @@ function addReapFilterOptions(cmd) {
|
|
|
80
80
|
const program = new commander_1.Command();
|
|
81
81
|
program.name('qq').description('Persistent pipeline for Claude agent workflows');
|
|
82
82
|
program
|
|
83
|
-
.command('make-pipeline')
|
|
84
|
-
.
|
|
85
|
-
.action((opts) => {
|
|
83
|
+
.command('make-pipeline [name]')
|
|
84
|
+
.action((name) => {
|
|
86
85
|
try {
|
|
87
|
-
out({ pipeline: (0, commands_js_1.makePipeline)(
|
|
86
|
+
out({ pipeline: (0, commands_js_1.makePipeline)(name) });
|
|
88
87
|
}
|
|
89
88
|
catch (e) {
|
|
90
89
|
fail(e instanceof Error ? e.message : String(e));
|
|
@@ -103,12 +102,13 @@ program
|
|
|
103
102
|
program
|
|
104
103
|
.command('push <path> [id]')
|
|
105
104
|
.option('--priority <n>', 'item priority (higher = claimed first)', parseFloatArg, 0.0)
|
|
105
|
+
.option('--plain-text', 'skip YAML validation of payload')
|
|
106
106
|
.action((path, id, opts) => {
|
|
107
107
|
try {
|
|
108
108
|
const { pipeline, stage } = parsePath(path);
|
|
109
109
|
if (!stage)
|
|
110
110
|
fail('expected pipeline/stage, got: ' + path);
|
|
111
|
-
const o = { payload: readStdin() ?? undefined, priority: opts.priority };
|
|
111
|
+
const o = { payload: readStdin() ?? undefined, priority: opts.priority, plainText: opts.plainText ?? false };
|
|
112
112
|
out({ id: (0, commands_js_1.push)(pipeline, stage, id, o) });
|
|
113
113
|
}
|
|
114
114
|
catch (e) {
|
|
@@ -138,13 +138,14 @@ program
|
|
|
138
138
|
.option('--target <stage>', 'move item to this stage (default: stay in current stage)')
|
|
139
139
|
.option('--replace')
|
|
140
140
|
.option('--priority <n>', 'update item priority', parseFloatArg)
|
|
141
|
+
.option('--plain-text', 'skip YAML validation of payload')
|
|
141
142
|
.action((pipeline, seqStr, opts) => {
|
|
142
143
|
try {
|
|
143
144
|
const seq = parseInt(seqStr, 10);
|
|
144
145
|
if (isNaN(seq))
|
|
145
146
|
fail('seq must be an integer');
|
|
146
147
|
const payload = readStdin() ?? undefined;
|
|
147
|
-
(0, commands_js_1.release)(pipeline, seq, { target: opts.target, payload, replace: opts.replace, priority: opts.priority });
|
|
148
|
+
(0, commands_js_1.release)(pipeline, seq, { target: opts.target, payload, replace: opts.replace, priority: opts.priority, plainText: opts.plainText ?? false });
|
|
148
149
|
out({ ok: true });
|
|
149
150
|
}
|
|
150
151
|
catch (e) {
|
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
package/src/commands.ts
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import { randomBytes } from 'node:crypto';
|
|
2
2
|
import type Database from 'better-sqlite3';
|
|
3
|
+
import { load } from 'js-yaml';
|
|
3
4
|
import { openDb, inTransaction } from './db.js';
|
|
4
5
|
|
|
5
6
|
export * as yaml from 'js-yaml';
|
|
6
7
|
|
|
8
|
+
function validateYaml(payload: string | undefined, plainText: boolean): void {
|
|
9
|
+
if (!payload || plainText) return;
|
|
10
|
+
try {
|
|
11
|
+
load(payload);
|
|
12
|
+
} catch (e) {
|
|
13
|
+
throw new QQError(`payload is not valid YAML: ${e instanceof Error ? e.message : String(e)}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
7
17
|
// ── types ──────────────────────────────────────────────────────────────────────
|
|
8
18
|
|
|
9
19
|
export class QQError extends Error {
|
|
@@ -75,7 +85,7 @@ export function makePipeline(customName?: string): string {
|
|
|
75
85
|
try {
|
|
76
86
|
inTransaction(db, () => {
|
|
77
87
|
const existing = db.prepare('SELECT id FROM pipelines WHERE id = ?').get(name);
|
|
78
|
-
if (existing) throw new QQError(`pipeline
|
|
88
|
+
if (existing) throw new QQError(`pipeline ${name} already exists`);
|
|
79
89
|
db.prepare('INSERT INTO pipelines (id, created) VALUES (?, ?)').run(name, Date.now());
|
|
80
90
|
});
|
|
81
91
|
} finally {
|
|
@@ -101,16 +111,18 @@ export function deletePipeline(pipeline: string): void {
|
|
|
101
111
|
export interface PushOptions {
|
|
102
112
|
payload?: string;
|
|
103
113
|
priority?: number;
|
|
114
|
+
plainText?: boolean;
|
|
104
115
|
}
|
|
105
116
|
|
|
106
|
-
export function push(pipeline: string, stage: string, id?: string, { payload, priority = 0.0 }: PushOptions = {}): string {
|
|
117
|
+
export function push(pipeline: string, stage: string, id?: string, { payload, priority = 0.0, plainText = false }: PushOptions = {}): string {
|
|
118
|
+
validateYaml(payload, plainText);
|
|
107
119
|
const db = openDb();
|
|
108
120
|
try {
|
|
109
121
|
return inTransaction(db, () => {
|
|
110
122
|
const seq = nextSeq(db, pipeline);
|
|
111
123
|
const actualId = id ?? String(seq);
|
|
112
124
|
const existing = db.prepare('SELECT id FROM messages WHERE pipeline = ? AND id = ?').get(pipeline, actualId);
|
|
113
|
-
if (existing) throw new QQError(`
|
|
125
|
+
if (existing) throw new QQError(`item ${actualId} already in the pipeline`);
|
|
114
126
|
const now = Date.now();
|
|
115
127
|
db.prepare(
|
|
116
128
|
'INSERT INTO messages (pipeline, id, subqueue, claimed, seq, payload, priority, created, last_modified) VALUES (?, ?, ?, 0, ?, ?, ?, ?, ?)'
|
|
@@ -138,8 +150,8 @@ export function claim(pipeline: string, stage: string, id?: string, { random = f
|
|
|
138
150
|
row = db.prepare(
|
|
139
151
|
'SELECT * FROM messages WHERE pipeline = ? AND id = ?'
|
|
140
152
|
).get(pipeline, id) as Record<string, unknown> | undefined;
|
|
141
|
-
if (!row) throw new QQError(`item
|
|
142
|
-
if (row.claimed) throw new QQError(`item
|
|
153
|
+
if (!row) throw new QQError(`item ${id} not found`);
|
|
154
|
+
if (row.claimed) throw new QQError(`item ${id} already claimed`);
|
|
143
155
|
} else {
|
|
144
156
|
const orderBy = random ? 'RANDOM()' : 'priority DESC, seq ASC';
|
|
145
157
|
row = db.prepare(
|
|
@@ -167,15 +179,17 @@ export interface ReleaseOptions {
|
|
|
167
179
|
payload?: string;
|
|
168
180
|
replace?: boolean;
|
|
169
181
|
priority?: number;
|
|
182
|
+
plainText?: boolean;
|
|
170
183
|
}
|
|
171
184
|
|
|
172
|
-
export function release(pipeline: string, seq: number, { target, payload, replace, priority }: ReleaseOptions = {}): void {
|
|
185
|
+
export function release(pipeline: string, seq: number, { target, payload, replace, priority, plainText = false }: ReleaseOptions = {}): void {
|
|
186
|
+
validateYaml(payload, plainText);
|
|
173
187
|
const db = openDb();
|
|
174
188
|
try {
|
|
175
189
|
inTransaction(db, () => {
|
|
176
190
|
const row = db.prepare('SELECT * FROM messages WHERE pipeline = ? AND seq = ?').get(pipeline, seq) as Record<string, unknown> | undefined;
|
|
177
|
-
if (!row) throw new QQError(`claim
|
|
178
|
-
if (!row.claimed) throw new QQError(`item
|
|
191
|
+
if (!row) throw new QQError(`claim on seq ${seq} expired`);
|
|
192
|
+
if (!row.claimed) throw new QQError(`item seq ${seq} not claimed`);
|
|
179
193
|
|
|
180
194
|
const newSeq = nextSeq(db, pipeline);
|
|
181
195
|
const now = Date.now();
|
package/src/db.ts
CHANGED
|
@@ -26,11 +26,17 @@ CREATE INDEX IF NOT EXISTS idx_claim_pri ON messages (pipeline, subqueue, claime
|
|
|
26
26
|
|
|
27
27
|
function dbDir(): string {
|
|
28
28
|
const home = process.env.HOME;
|
|
29
|
-
if (home) {
|
|
29
|
+
if (home?.startsWith('/sessions')) {
|
|
30
30
|
try {
|
|
31
31
|
const workspace = readFileSync(join(home, '.cowork_workspace_location'), 'utf8').trim();
|
|
32
32
|
if (workspace) return join(workspace, '.claude', 'qq');
|
|
33
33
|
} catch { /* file absent */ }
|
|
34
|
+
throw new Error(
|
|
35
|
+
'Cowork sandboxed environment detected.\n' +
|
|
36
|
+
'Before using qq, write your sandbox workspace path to $HOME/.cowork_workspace_location:\n' +
|
|
37
|
+
' echo "<sandbox workspace path>" > $HOME/.cowork_workspace_location\n' +
|
|
38
|
+
'Find the workspace path in your system prompt\'s shell access path mapping.'
|
|
39
|
+
);
|
|
34
40
|
}
|
|
35
41
|
return join(process.cwd(), '.claude', 'qq');
|
|
36
42
|
}
|
package/src/index.ts
CHANGED
|
@@ -81,10 +81,9 @@ const program = new Command();
|
|
|
81
81
|
program.name('qq').description('Persistent pipeline for Claude agent workflows');
|
|
82
82
|
|
|
83
83
|
program
|
|
84
|
-
.command('make-pipeline')
|
|
85
|
-
.
|
|
86
|
-
|
|
87
|
-
try { out({ pipeline: makePipeline(opts.name) }); }
|
|
84
|
+
.command('make-pipeline [name]')
|
|
85
|
+
.action((name) => {
|
|
86
|
+
try { out({ pipeline: makePipeline(name) }); }
|
|
88
87
|
catch (e) { fail(e instanceof Error ? e.message : String(e)); }
|
|
89
88
|
});
|
|
90
89
|
|
|
@@ -98,11 +97,12 @@ program
|
|
|
98
97
|
program
|
|
99
98
|
.command('push <path> [id]')
|
|
100
99
|
.option('--priority <n>', 'item priority (higher = claimed first)', parseFloatArg, 0.0)
|
|
100
|
+
.option('--plain-text', 'skip YAML validation of payload')
|
|
101
101
|
.action((path, id, opts) => {
|
|
102
102
|
try {
|
|
103
103
|
const { pipeline, stage } = parsePath(path);
|
|
104
104
|
if (!stage) fail('expected pipeline/stage, got: ' + path);
|
|
105
|
-
const o: PushOptions = { payload: readStdin() ?? undefined, priority: opts.priority };
|
|
105
|
+
const o: PushOptions = { payload: readStdin() ?? undefined, priority: opts.priority, plainText: opts.plainText ?? false };
|
|
106
106
|
out({ id: push(pipeline, stage, id, o) });
|
|
107
107
|
} catch (e) { e instanceof QQError ? fail(e.message) : fail(String(e)); }
|
|
108
108
|
});
|
|
@@ -129,12 +129,13 @@ program
|
|
|
129
129
|
.option('--target <stage>', 'move item to this stage (default: stay in current stage)')
|
|
130
130
|
.option('--replace')
|
|
131
131
|
.option('--priority <n>', 'update item priority', parseFloatArg)
|
|
132
|
+
.option('--plain-text', 'skip YAML validation of payload')
|
|
132
133
|
.action((pipeline, seqStr, opts) => {
|
|
133
134
|
try {
|
|
134
135
|
const seq = parseInt(seqStr, 10);
|
|
135
136
|
if (isNaN(seq)) fail('seq must be an integer');
|
|
136
137
|
const payload = readStdin() ?? undefined;
|
|
137
|
-
release(pipeline, seq, { target: opts.target, payload, replace: opts.replace, priority: opts.priority });
|
|
138
|
+
release(pipeline, seq, { target: opts.target, payload, replace: opts.replace, priority: opts.priority, plainText: opts.plainText ?? false });
|
|
138
139
|
out({ ok: true });
|
|
139
140
|
} catch (e) { e instanceof QQError ? fail(e.message) : fail(String(e)); }
|
|
140
141
|
});
|