agent-tasks 1.9.18 → 1.9.20
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/agent-desk-plugin.json +1 -1
- package/dist/domain/events.d.ts +3 -7
- package/dist/domain/events.d.ts.map +1 -1
- package/dist/domain/events.js +9 -48
- package/dist/domain/events.js.map +1 -1
- package/dist/package-meta.d.ts +2 -4
- package/dist/package-meta.d.ts.map +1 -1
- package/dist/package-meta.js +9 -20
- package/dist/package-meta.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +22 -24
- package/dist/server.js.map +1 -1
- package/dist/storage/database.d.ts +2 -9
- package/dist/storage/database.d.ts.map +1 -1
- package/dist/storage/database.js +162 -212
- package/dist/storage/database.js.map +1 -1
- package/package.json +2 -1
package/agent-desk-plugin.json
CHANGED
package/dist/domain/events.d.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export declare class EventBus {
|
|
4
|
-
private readonly listeners;
|
|
5
|
-
emit(type: EventType, data?: Record<string, unknown>): void;
|
|
6
|
-
on(type: EventType | '*', handler: EventHandler): () => void;
|
|
1
|
+
import { EventBus as KitEventBus } from 'agent-common';
|
|
2
|
+
import type { EventType } from '../types.js';
|
|
3
|
+
export declare class EventBus extends KitEventBus<EventType> {
|
|
7
4
|
listenerCount(type?: EventType | '*'): number;
|
|
8
|
-
removeAll(): void;
|
|
9
5
|
}
|
|
10
6
|
//# sourceMappingURL=events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/domain/events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/domain/events.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,QAAS,SAAQ,WAAW,CAAC,SAAS,CAAC;IAClD,aAAa,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG,GAAG,MAAM;CAU9C"}
|
package/dist/domain/events.js
CHANGED
|
@@ -1,61 +1,22 @@
|
|
|
1
1
|
// =============================================================================
|
|
2
2
|
// agent-tasks — Event bus
|
|
3
3
|
//
|
|
4
|
-
//
|
|
4
|
+
// Thin extension of agent-common's generic EventBus, parameterized to the
|
|
5
|
+
// agent-tasks event vocabulary defined in ../types.ts. The base class provides
|
|
6
|
+
// emit/on/removeAll; this subclass adds listenerCount for diagnostics.
|
|
5
7
|
// =============================================================================
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
emit(type, data = {}) {
|
|
9
|
-
const event = {
|
|
10
|
-
type,
|
|
11
|
-
timestamp: new Date().toISOString(),
|
|
12
|
-
data,
|
|
13
|
-
};
|
|
14
|
-
const specific = this.listeners.get(type);
|
|
15
|
-
if (specific) {
|
|
16
|
-
for (const h of specific) {
|
|
17
|
-
try {
|
|
18
|
-
h(event);
|
|
19
|
-
}
|
|
20
|
-
catch (err) {
|
|
21
|
-
process.stderr.write(`[agent-tasks] Event handler error (${type}): ${err instanceof Error ? err.message : String(err)}\n`);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
const wildcards = this.listeners.get('*');
|
|
26
|
-
if (wildcards) {
|
|
27
|
-
for (const h of wildcards) {
|
|
28
|
-
try {
|
|
29
|
-
h(event);
|
|
30
|
-
}
|
|
31
|
-
catch (err) {
|
|
32
|
-
process.stderr.write(`[agent-tasks] Event handler error (*): ${err instanceof Error ? err.message : String(err)}\n`);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
on(type, handler) {
|
|
38
|
-
let set = this.listeners.get(type);
|
|
39
|
-
if (!set) {
|
|
40
|
-
set = new Set();
|
|
41
|
-
this.listeners.set(type, set);
|
|
42
|
-
}
|
|
43
|
-
set.add(handler);
|
|
44
|
-
return () => {
|
|
45
|
-
set.delete(handler);
|
|
46
|
-
};
|
|
47
|
-
}
|
|
8
|
+
import { EventBus as KitEventBus } from 'agent-common';
|
|
9
|
+
export class EventBus extends KitEventBus {
|
|
48
10
|
listenerCount(type) {
|
|
11
|
+
const listeners = this
|
|
12
|
+
.listeners;
|
|
49
13
|
if (type) {
|
|
50
|
-
return
|
|
14
|
+
return listeners.get(type)?.size ?? 0;
|
|
51
15
|
}
|
|
52
16
|
let total = 0;
|
|
53
|
-
for (const set of
|
|
17
|
+
for (const set of listeners.values())
|
|
54
18
|
total += set.size;
|
|
55
19
|
return total;
|
|
56
20
|
}
|
|
57
|
-
removeAll() {
|
|
58
|
-
this.listeners.clear();
|
|
59
|
-
}
|
|
60
21
|
}
|
|
61
22
|
//# sourceMappingURL=events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/domain/events.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0BAA0B;AAC1B,EAAE;AACF,+
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/domain/events.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0BAA0B;AAC1B,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,uEAAuE;AACvE,gFAAgF;AAEhF,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAGvD,MAAM,OAAO,QAAS,SAAQ,WAAsB;IAClD,aAAa,CAAC,IAAsB;QAClC,MAAM,SAAS,GAAI,IAAqE;aACrF,SAAS,CAAC;QACb,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE;YAAE,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
package/dist/package-meta.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-meta.d.ts","sourceRoot":"","sources":["../src/package-meta.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package-meta.d.ts","sourceRoot":"","sources":["../src/package-meta.ts"],"names":[],"mappings":"AAQA,OAAO,EAAyC,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAEvF,wBAAgB,eAAe,IAAI,WAAW,CAM7C"}
|
package/dist/package-meta.js
CHANGED
|
@@ -1,27 +1,16 @@
|
|
|
1
1
|
// =============================================================================
|
|
2
2
|
// agent-tasks — package.json metadata (name + version)
|
|
3
3
|
//
|
|
4
|
-
//
|
|
4
|
+
// Thin wrapper around agent-common's readPackageMeta, locked to agent-tasks'
|
|
5
|
+
// own package.json so MCP initialize and WebSocket payloads always read the
|
|
6
|
+
// authoritative version.
|
|
5
7
|
// =============================================================================
|
|
6
|
-
import {
|
|
7
|
-
import { dirname, join } from 'path';
|
|
8
|
-
import { fileURLToPath } from 'url';
|
|
9
|
-
const thisDir = dirname(fileURLToPath(import.meta.url));
|
|
10
|
-
let cached = null;
|
|
8
|
+
import { readPackageMeta as readKitPackageMeta } from 'agent-common';
|
|
11
9
|
export function readPackageMeta() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
cached = {
|
|
18
|
-
name: typeof pkg.name === 'string' ? pkg.name : 'agent-tasks',
|
|
19
|
-
version: typeof pkg.version === 'string' ? pkg.version : '0.0.0',
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
cached = { name: 'agent-tasks', version: '0.0.0' };
|
|
24
|
-
}
|
|
25
|
-
return cached;
|
|
10
|
+
return readKitPackageMeta({
|
|
11
|
+
importMetaUrl: import.meta.url,
|
|
12
|
+
fallbackName: 'agent-tasks',
|
|
13
|
+
fallbackVersion: '0.0.0',
|
|
14
|
+
});
|
|
26
15
|
}
|
|
27
16
|
//# sourceMappingURL=package-meta.js.map
|
package/dist/package-meta.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-meta.js","sourceRoot":"","sources":["../src/package-meta.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uDAAuD;AACvD,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"package-meta.js","sourceRoot":"","sources":["../src/package-meta.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uDAAuD;AACvD,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,yBAAyB;AACzB,gFAAgF;AAEhF,OAAO,EAAE,eAAe,IAAI,kBAAkB,EAAoB,MAAM,cAAc,CAAC;AAEvF,MAAM,UAAU,eAAe;IAC7B,OAAO,kBAAkB,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;QAC9B,YAAY,EAAE,aAAa;QAC3B,eAAe,EAAE,OAAO;KACzB,CAAC,CAAC;AACL,CAAC"}
|
package/dist/server.d.ts
CHANGED
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAInC,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAO9D,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;CACf;AAQD,wBAAsB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,SAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CA4B3F"}
|
package/dist/server.js
CHANGED
|
@@ -5,8 +5,10 @@
|
|
|
5
5
|
// Standalone web server for the pipeline dashboard and REST API.
|
|
6
6
|
// Can be started manually: node dist/server.js [--port 3422]
|
|
7
7
|
// Or auto-started from the MCP server via leader election.
|
|
8
|
+
// Built on agent-common's startDashboard for the leader-election + EADDRINUSE
|
|
9
|
+
// handling boilerplate. The UI file watcher is wired in onListen.
|
|
8
10
|
// =============================================================================
|
|
9
|
-
import {
|
|
11
|
+
import { startDashboard as startKitDashboard, } from 'agent-common';
|
|
10
12
|
import { watch } from 'fs';
|
|
11
13
|
import { resolve, join, dirname } from 'path';
|
|
12
14
|
import { fileURLToPath } from 'url';
|
|
@@ -14,44 +16,40 @@ import { createContext } from './context.js';
|
|
|
14
16
|
import { createRouter } from './transport/rest.js';
|
|
15
17
|
import { setupWebSocket } from './transport/ws.js';
|
|
16
18
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
17
|
-
/** Returns the argv element immediately after `flag`, or `undefined` if missing. */
|
|
18
19
|
function getCliArgAfterFlag(argv, flag) {
|
|
19
20
|
const i = argv.indexOf(flag);
|
|
20
21
|
if (i === -1 || i + 1 >= argv.length)
|
|
21
22
|
return undefined;
|
|
22
23
|
return argv[i + 1];
|
|
23
24
|
}
|
|
24
|
-
export function startDashboard(ctx, port = 3422) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
reject(new Error(`Port ${port} in use`));
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
reject(err);
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
httpServer.listen(port, () => {
|
|
25
|
+
export async function startDashboard(ctx, port = 3422) {
|
|
26
|
+
const router = createRouter(ctx);
|
|
27
|
+
let wsHandle = null;
|
|
28
|
+
let fileWatcher = null;
|
|
29
|
+
const kit = await startKitDashboard({
|
|
30
|
+
port,
|
|
31
|
+
handler: router,
|
|
32
|
+
onListen: (httpServer) => {
|
|
39
33
|
wsHandle = setupWebSocket(httpServer, ctx);
|
|
40
34
|
fileWatcher = startFileWatcher(wsHandle);
|
|
41
|
-
|
|
42
|
-
resolve({
|
|
43
|
-
httpServer,
|
|
44
|
-
port,
|
|
35
|
+
return {
|
|
45
36
|
close() {
|
|
46
37
|
if (fileWatcher)
|
|
47
38
|
fileWatcher.close();
|
|
48
39
|
if (wsHandle)
|
|
49
40
|
wsHandle.close();
|
|
50
|
-
httpServer.close();
|
|
51
41
|
},
|
|
52
|
-
}
|
|
53
|
-
}
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
banner: (p) => `agent-tasks dashboard: http://localhost:${p}`,
|
|
54
45
|
});
|
|
46
|
+
return {
|
|
47
|
+
httpServer: kit.httpServer,
|
|
48
|
+
port: kit.port,
|
|
49
|
+
close() {
|
|
50
|
+
kit.close();
|
|
51
|
+
},
|
|
52
|
+
};
|
|
55
53
|
}
|
|
56
54
|
// ---------------------------------------------------------------------------
|
|
57
55
|
// UI file watcher — triggers livereload on connected clients
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAEA,gFAAgF;AAChF,oDAAoD;AACpD,EAAE;AACF,iEAAiE;AACjE,6DAA6D;AAC7D,2DAA2D;AAC3D,gFAAgF;AAEhF,OAAO,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type Db } from 'agent-common';
|
|
2
|
+
export type { Db } from 'agent-common';
|
|
2
3
|
export interface DbOptions {
|
|
3
4
|
path?: string;
|
|
4
5
|
verbose?: boolean;
|
|
5
6
|
}
|
|
6
|
-
export interface Db {
|
|
7
|
-
readonly raw: Database.Database;
|
|
8
|
-
run(sql: string, params?: unknown[]): Database.RunResult;
|
|
9
|
-
queryAll<T>(sql: string, params?: unknown[]): T[];
|
|
10
|
-
queryOne<T>(sql: string, params?: unknown[]): T | null;
|
|
11
|
-
transaction<T>(fn: () => T): T;
|
|
12
|
-
close(): void;
|
|
13
|
-
}
|
|
14
7
|
export declare function createDb(options?: DbOptions): Db;
|
|
15
8
|
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAaA,OAAO,EAA2B,KAAK,EAAE,EAAkB,MAAM,cAAc,CAAC;AAEhF,YAAY,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,QAAQ,CAAC,OAAO,GAAE,SAAc,GAAG,EAAE,CAMpD"}
|
package/dist/storage/database.js
CHANGED
|
@@ -1,53 +1,21 @@
|
|
|
1
1
|
// =============================================================================
|
|
2
2
|
// agent-tasks — Storage layer
|
|
3
3
|
//
|
|
4
|
-
// Thin wrapper around
|
|
5
|
-
//
|
|
4
|
+
// Thin wrapper around agent-common's createDb. Resolves the DB path from
|
|
5
|
+
// options / AGENT_TASKS_DB env / default ~/.agent-tasks/agent-tasks.db and
|
|
6
|
+
// supplies the schema as an ordered Migration[] so the runner in agent-common
|
|
7
|
+
// handles version bookkeeping (via the _meta table).
|
|
6
8
|
// =============================================================================
|
|
7
|
-
import Database from 'better-sqlite3';
|
|
8
9
|
import { homedir } from 'os';
|
|
9
10
|
import { join } from 'path';
|
|
10
11
|
import { mkdirSync } from 'fs';
|
|
11
|
-
|
|
12
|
+
import { createDb as createKitDb } from 'agent-common';
|
|
12
13
|
export function createDb(options = {}) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
return createKitDb({
|
|
15
|
+
path: resolveDbPath(options.path),
|
|
16
|
+
migrations,
|
|
17
|
+
verbose: options.verbose,
|
|
16
18
|
});
|
|
17
|
-
raw.pragma('journal_mode = WAL');
|
|
18
|
-
raw.pragma('busy_timeout = 5000');
|
|
19
|
-
raw.pragma('synchronous = NORMAL');
|
|
20
|
-
raw.pragma('foreign_keys = ON');
|
|
21
|
-
applySchema(raw);
|
|
22
|
-
return {
|
|
23
|
-
raw,
|
|
24
|
-
run(sql, params) {
|
|
25
|
-
const stmt = raw.prepare(sql);
|
|
26
|
-
return params?.length ? stmt.run(...params) : stmt.run();
|
|
27
|
-
},
|
|
28
|
-
queryAll(sql, params) {
|
|
29
|
-
const stmt = raw.prepare(sql);
|
|
30
|
-
return (params?.length ? stmt.all(...params) : stmt.all());
|
|
31
|
-
},
|
|
32
|
-
queryOne(sql, params) {
|
|
33
|
-
const stmt = raw.prepare(sql);
|
|
34
|
-
const row = params?.length ? stmt.get(...params) : stmt.get();
|
|
35
|
-
return row ?? null;
|
|
36
|
-
},
|
|
37
|
-
transaction(fn) {
|
|
38
|
-
return raw.transaction(fn)();
|
|
39
|
-
},
|
|
40
|
-
close() {
|
|
41
|
-
try {
|
|
42
|
-
raw.close();
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
process.stderr.write('[agent-tasks] DB close error: ' +
|
|
46
|
-
(err instanceof Error ? err.message : String(err)) +
|
|
47
|
-
'\n');
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
};
|
|
51
19
|
}
|
|
52
20
|
function resolveDbPath(path) {
|
|
53
21
|
if (path === ':memory:')
|
|
@@ -61,181 +29,163 @@ function resolveDbPath(path) {
|
|
|
61
29
|
mkdirSync(dir, { recursive: true });
|
|
62
30
|
return join(dir, 'agent-tasks.db');
|
|
63
31
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
description TEXT,
|
|
92
|
-
created_by TEXT NOT NULL,
|
|
93
|
-
assigned_to TEXT,
|
|
94
|
-
status TEXT NOT NULL DEFAULT 'pending',
|
|
95
|
-
stage TEXT NOT NULL DEFAULT 'backlog',
|
|
96
|
-
priority INTEGER NOT NULL DEFAULT 0,
|
|
97
|
-
project TEXT,
|
|
98
|
-
tags TEXT,
|
|
99
|
-
result TEXT,
|
|
100
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
101
|
-
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
102
|
-
);
|
|
103
|
-
CREATE INDEX IF NOT EXISTS idx_tasks_assigned ON tasks(assigned_to, status);
|
|
104
|
-
CREATE INDEX IF NOT EXISTS idx_tasks_stage ON tasks(stage, priority);
|
|
105
|
-
CREATE INDEX IF NOT EXISTS idx_tasks_project ON tasks(project, status);
|
|
106
|
-
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Migrations — version-ordered, applied by agent-common's runner
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
const migrations = [
|
|
36
|
+
{
|
|
37
|
+
version: 1,
|
|
38
|
+
up: (db) => {
|
|
39
|
+
db.exec(`
|
|
40
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
41
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
42
|
+
title TEXT NOT NULL,
|
|
43
|
+
description TEXT,
|
|
44
|
+
created_by TEXT NOT NULL,
|
|
45
|
+
assigned_to TEXT,
|
|
46
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
47
|
+
stage TEXT NOT NULL DEFAULT 'backlog',
|
|
48
|
+
priority INTEGER NOT NULL DEFAULT 0,
|
|
49
|
+
project TEXT,
|
|
50
|
+
tags TEXT,
|
|
51
|
+
result TEXT,
|
|
52
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
53
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
54
|
+
);
|
|
55
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_assigned ON tasks(assigned_to, status);
|
|
56
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_stage ON tasks(stage, priority);
|
|
57
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_project ON tasks(project, status);
|
|
58
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
|
107
59
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
);
|
|
60
|
+
CREATE TABLE IF NOT EXISTS task_dependencies (
|
|
61
|
+
task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
62
|
+
depends_on INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
63
|
+
PRIMARY KEY (task_id, depends_on)
|
|
64
|
+
);
|
|
114
65
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
CREATE INDEX IF NOT EXISTS idx_task_artifacts_task ON task_artifacts(task_id, stage);
|
|
66
|
+
CREATE TABLE IF NOT EXISTS task_artifacts (
|
|
67
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
68
|
+
task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
69
|
+
stage TEXT NOT NULL,
|
|
70
|
+
name TEXT NOT NULL,
|
|
71
|
+
content TEXT NOT NULL,
|
|
72
|
+
created_by TEXT NOT NULL,
|
|
73
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
74
|
+
);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_task_artifacts_task ON task_artifacts(task_id, stage);
|
|
126
76
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
PRIMARY KEY (task_id, agent_id)
|
|
170
|
-
);
|
|
171
|
-
CREATE INDEX IF NOT EXISTS idx_collaborators_agent ON task_collaborators(agent_id);
|
|
172
|
-
`);
|
|
173
|
-
// -- Approvals
|
|
174
|
-
db.exec(`
|
|
175
|
-
CREATE TABLE IF NOT EXISTS task_approvals (
|
|
176
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
177
|
-
task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
178
|
-
stage TEXT NOT NULL,
|
|
179
|
-
status TEXT NOT NULL DEFAULT 'pending',
|
|
180
|
-
reviewer TEXT,
|
|
181
|
-
requested_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
182
|
-
resolved_at TEXT,
|
|
183
|
-
comment TEXT
|
|
184
|
-
);
|
|
185
|
-
CREATE INDEX IF NOT EXISTS idx_approvals_task ON task_approvals(task_id, stage);
|
|
186
|
-
CREATE INDEX IF NOT EXISTS idx_approvals_reviewer ON task_approvals(reviewer, status);
|
|
187
|
-
`);
|
|
188
|
-
// -- Pipeline config extensions
|
|
189
|
-
const pcCols = db.prepare(`PRAGMA table_info(pipeline_config)`).all();
|
|
190
|
-
if (!pcCols.some((c) => c.name === 'approval_config')) {
|
|
191
|
-
db.exec(`ALTER TABLE pipeline_config ADD COLUMN approval_config TEXT`);
|
|
192
|
-
}
|
|
193
|
-
if (!pcCols.some((c) => c.name === 'assignment_config')) {
|
|
194
|
-
db.exec(`ALTER TABLE pipeline_config ADD COLUMN assignment_config TEXT`);
|
|
195
|
-
}
|
|
196
|
-
// -- FTS5 on tasks
|
|
197
|
-
db.exec(`
|
|
198
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS tasks_fts USING fts5(
|
|
199
|
-
title, description,
|
|
200
|
-
content=tasks, content_rowid=id
|
|
201
|
-
);
|
|
77
|
+
CREATE TABLE IF NOT EXISTS pipeline_config (
|
|
78
|
+
project TEXT PRIMARY KEY,
|
|
79
|
+
stages TEXT NOT NULL DEFAULT '["backlog","spec","plan","implement","test","review","done","cancelled"]',
|
|
80
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
81
|
+
);
|
|
82
|
+
`);
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
version: 2,
|
|
87
|
+
up: (db) => {
|
|
88
|
+
const cols = db.prepare(`PRAGMA table_info(tasks)`).all();
|
|
89
|
+
if (!cols.some((c) => c.name === 'parent_id')) {
|
|
90
|
+
db.exec(`ALTER TABLE tasks ADD COLUMN parent_id INTEGER REFERENCES tasks(id) ON DELETE CASCADE`);
|
|
91
|
+
}
|
|
92
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_tasks_parent ON tasks(parent_id)`);
|
|
93
|
+
const artCols = db.prepare(`PRAGMA table_info(task_artifacts)`).all();
|
|
94
|
+
if (!artCols.some((c) => c.name === 'version')) {
|
|
95
|
+
db.exec(`ALTER TABLE task_artifacts ADD COLUMN version INTEGER NOT NULL DEFAULT 1`);
|
|
96
|
+
}
|
|
97
|
+
if (!artCols.some((c) => c.name === 'previous_id')) {
|
|
98
|
+
db.exec(`ALTER TABLE task_artifacts ADD COLUMN previous_id INTEGER REFERENCES task_artifacts(id)`);
|
|
99
|
+
}
|
|
100
|
+
db.exec(`
|
|
101
|
+
CREATE TABLE IF NOT EXISTS task_comments (
|
|
102
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
103
|
+
task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
104
|
+
agent_id TEXT NOT NULL,
|
|
105
|
+
content TEXT NOT NULL,
|
|
106
|
+
parent_comment_id INTEGER REFERENCES task_comments(id) ON DELETE CASCADE,
|
|
107
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
108
|
+
);
|
|
109
|
+
CREATE INDEX IF NOT EXISTS idx_task_comments_task ON task_comments(task_id, created_at);
|
|
110
|
+
|
|
111
|
+
CREATE TABLE IF NOT EXISTS task_collaborators (
|
|
112
|
+
task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
113
|
+
agent_id TEXT NOT NULL,
|
|
114
|
+
role TEXT NOT NULL DEFAULT 'collaborator',
|
|
115
|
+
added_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
116
|
+
PRIMARY KEY (task_id, agent_id)
|
|
117
|
+
);
|
|
118
|
+
CREATE INDEX IF NOT EXISTS idx_collaborators_agent ON task_collaborators(agent_id);
|
|
202
119
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
120
|
+
CREATE TABLE IF NOT EXISTS task_approvals (
|
|
121
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
122
|
+
task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
123
|
+
stage TEXT NOT NULL,
|
|
124
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
125
|
+
reviewer TEXT,
|
|
126
|
+
requested_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
127
|
+
resolved_at TEXT,
|
|
128
|
+
comment TEXT
|
|
129
|
+
);
|
|
130
|
+
CREATE INDEX IF NOT EXISTS idx_approvals_task ON task_approvals(task_id, stage);
|
|
131
|
+
CREATE INDEX IF NOT EXISTS idx_approvals_reviewer ON task_approvals(reviewer, status);
|
|
132
|
+
`);
|
|
133
|
+
const pcCols = db.prepare(`PRAGMA table_info(pipeline_config)`).all();
|
|
134
|
+
if (!pcCols.some((c) => c.name === 'approval_config')) {
|
|
135
|
+
db.exec(`ALTER TABLE pipeline_config ADD COLUMN approval_config TEXT`);
|
|
136
|
+
}
|
|
137
|
+
if (!pcCols.some((c) => c.name === 'assignment_config')) {
|
|
138
|
+
db.exec(`ALTER TABLE pipeline_config ADD COLUMN assignment_config TEXT`);
|
|
139
|
+
}
|
|
140
|
+
db.exec(`
|
|
141
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS tasks_fts USING fts5(
|
|
142
|
+
title, description,
|
|
143
|
+
content=tasks, content_rowid=id
|
|
144
|
+
);
|
|
206
145
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
END;
|
|
146
|
+
CREATE TRIGGER IF NOT EXISTS tasks_fts_insert AFTER INSERT ON tasks BEGIN
|
|
147
|
+
INSERT INTO tasks_fts(rowid, title, description) VALUES (new.id, new.title, COALESCE(new.description, ''));
|
|
148
|
+
END;
|
|
211
149
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
150
|
+
CREATE TRIGGER IF NOT EXISTS tasks_fts_update AFTER UPDATE OF title, description ON tasks BEGIN
|
|
151
|
+
INSERT INTO tasks_fts(tasks_fts, rowid, title, description) VALUES ('delete', old.id, old.title, COALESCE(old.description, ''));
|
|
152
|
+
INSERT INTO tasks_fts(rowid, title, description) VALUES (new.id, new.title, COALESCE(new.description, ''));
|
|
153
|
+
END;
|
|
154
|
+
|
|
155
|
+
CREATE TRIGGER IF NOT EXISTS tasks_fts_delete AFTER DELETE ON tasks BEGIN
|
|
156
|
+
INSERT INTO tasks_fts(tasks_fts, rowid, title, description) VALUES ('delete', old.id, old.title, COALESCE(old.description, ''));
|
|
157
|
+
END;
|
|
158
|
+
`);
|
|
159
|
+
const existing = db.prepare(`SELECT id, title, description FROM tasks`).all();
|
|
160
|
+
const ftsInsert = db.prepare(`INSERT OR IGNORE INTO tasks_fts(rowid, title, description) VALUES (?, ?, ?)`);
|
|
161
|
+
for (const t of existing) {
|
|
162
|
+
ftsInsert.run(t.id, t.title, t.description ?? '');
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
version: 3,
|
|
168
|
+
up: (db) => {
|
|
169
|
+
const depCols = db.prepare(`PRAGMA table_info(task_dependencies)`).all();
|
|
170
|
+
if (!depCols.some((c) => c.name === 'relationship')) {
|
|
171
|
+
db.exec(`ALTER TABLE task_dependencies ADD COLUMN relationship TEXT NOT NULL DEFAULT 'blocks'`);
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
version: 4,
|
|
177
|
+
up: (db) => {
|
|
178
|
+
const pcCols = db.prepare(`PRAGMA table_info(pipeline_config)`).all();
|
|
179
|
+
if (!pcCols.some((c) => c.name === 'gate_config')) {
|
|
180
|
+
db.exec(`ALTER TABLE pipeline_config ADD COLUMN gate_config TEXT`);
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
version: 5,
|
|
186
|
+
up: (db) => {
|
|
187
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_task_deps_depends_on ON task_dependencies(depends_on)`);
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
];
|
|
241
191
|
//# sourceMappingURL=database.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,8BAA8B;AAC9B,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-tasks",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.20",
|
|
4
4
|
"description": "Pipeline-driven task management for AI coding agents — stages, dependencies, artifacts, and multi-agent claiming",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
]
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
+
"agent-common": "^1.0.0",
|
|
51
52
|
"better-sqlite3": "^12.8.0",
|
|
52
53
|
"morphdom": "^2.7.8",
|
|
53
54
|
"ws": "^8.20.0"
|