@mcoda/db 0.1.9 → 0.1.10
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/migrations/global/GlobalMigrations.d.ts.map +1 -1
- package/dist/migrations/global/GlobalMigrations.js +75 -0
- package/dist/migrations/workspace/WorkspaceMigrations.d.ts +1 -1
- package/dist/migrations/workspace/WorkspaceMigrations.d.ts.map +1 -1
- package/dist/migrations/workspace/WorkspaceMigrations.js +43 -1
- package/dist/repositories/global/GlobalRepository.d.ts +11 -0
- package/dist/repositories/global/GlobalRepository.d.ts.map +1 -1
- package/dist/repositories/global/GlobalRepository.js +49 -8
- package/dist/repositories/workspace/WorkspaceRepository.d.ts +30 -1
- package/dist/repositories/workspace/WorkspaceRepository.d.ts.map +1 -1
- package/dist/repositories/workspace/WorkspaceRepository.js +183 -38
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalMigrations.d.ts","sourceRoot":"","sources":["../../../src/migrations/global/GlobalMigrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC;;;GAGG;AACH,qBAAa,gBAAgB;WACd,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"GlobalMigrations.d.ts","sourceRoot":"","sources":["../../../src/migrations/global/GlobalMigrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC;;;GAGG;AACH,qBAAa,gBAAgB;WACd,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAoe9C"}
|
|
@@ -11,6 +11,10 @@ export class GlobalMigrations {
|
|
|
11
11
|
slug TEXT UNIQUE NOT NULL,
|
|
12
12
|
adapter TEXT NOT NULL,
|
|
13
13
|
default_model TEXT,
|
|
14
|
+
openai_compatible INTEGER,
|
|
15
|
+
context_window INTEGER,
|
|
16
|
+
max_output_tokens INTEGER,
|
|
17
|
+
supports_tools INTEGER,
|
|
14
18
|
rating INTEGER,
|
|
15
19
|
reasoning_rating INTEGER,
|
|
16
20
|
best_usage TEXT,
|
|
@@ -94,11 +98,22 @@ export class GlobalMigrations {
|
|
|
94
98
|
agent_id TEXT REFERENCES agents(id) ON DELETE SET NULL,
|
|
95
99
|
command_run_id TEXT REFERENCES command_runs(id) ON DELETE SET NULL,
|
|
96
100
|
model_name TEXT,
|
|
101
|
+
command_name TEXT,
|
|
102
|
+
action TEXT,
|
|
103
|
+
invocation_kind TEXT,
|
|
104
|
+
provider TEXT,
|
|
105
|
+
currency TEXT,
|
|
97
106
|
tokens_prompt INTEGER,
|
|
98
107
|
tokens_completion INTEGER,
|
|
99
108
|
tokens_total INTEGER,
|
|
109
|
+
tokens_cached INTEGER,
|
|
110
|
+
tokens_cache_read INTEGER,
|
|
111
|
+
tokens_cache_write INTEGER,
|
|
100
112
|
cost_estimate REAL,
|
|
101
113
|
duration_seconds REAL,
|
|
114
|
+
duration_ms REAL,
|
|
115
|
+
started_at TEXT,
|
|
116
|
+
finished_at TEXT,
|
|
102
117
|
timestamp TEXT NOT NULL,
|
|
103
118
|
metadata_json TEXT
|
|
104
119
|
);
|
|
@@ -156,6 +171,10 @@ export class GlobalMigrations {
|
|
|
156
171
|
const hasAgentBestUsage = agentsInfo.some((col) => col.name === "best_usage");
|
|
157
172
|
const hasAgentCost = agentsInfo.some((col) => col.name === "cost_per_million");
|
|
158
173
|
const hasAgentMaxComplexity = agentsInfo.some((col) => col.name === "max_complexity");
|
|
174
|
+
const hasAgentOpenaiCompatible = agentsInfo.some((col) => col.name === "openai_compatible");
|
|
175
|
+
const hasAgentContextWindow = agentsInfo.some((col) => col.name === "context_window");
|
|
176
|
+
const hasAgentMaxOutputTokens = agentsInfo.some((col) => col.name === "max_output_tokens");
|
|
177
|
+
const hasAgentSupportsTools = agentsInfo.some((col) => col.name === "supports_tools");
|
|
159
178
|
const hasAgentRatingSamples = agentsInfo.some((col) => col.name === "rating_samples");
|
|
160
179
|
const hasAgentRatingLastScore = agentsInfo.some((col) => col.name === "rating_last_score");
|
|
161
180
|
const hasAgentRatingUpdatedAt = agentsInfo.some((col) => col.name === "rating_updated_at");
|
|
@@ -176,6 +195,18 @@ export class GlobalMigrations {
|
|
|
176
195
|
if (!hasAgentMaxComplexity) {
|
|
177
196
|
await db.exec("ALTER TABLE agents ADD COLUMN max_complexity INTEGER");
|
|
178
197
|
}
|
|
198
|
+
if (!hasAgentOpenaiCompatible) {
|
|
199
|
+
await db.exec("ALTER TABLE agents ADD COLUMN openai_compatible INTEGER");
|
|
200
|
+
}
|
|
201
|
+
if (!hasAgentContextWindow) {
|
|
202
|
+
await db.exec("ALTER TABLE agents ADD COLUMN context_window INTEGER");
|
|
203
|
+
}
|
|
204
|
+
if (!hasAgentMaxOutputTokens) {
|
|
205
|
+
await db.exec("ALTER TABLE agents ADD COLUMN max_output_tokens INTEGER");
|
|
206
|
+
}
|
|
207
|
+
if (!hasAgentSupportsTools) {
|
|
208
|
+
await db.exec("ALTER TABLE agents ADD COLUMN supports_tools INTEGER");
|
|
209
|
+
}
|
|
179
210
|
if (!hasAgentRatingSamples) {
|
|
180
211
|
await db.exec("ALTER TABLE agents ADD COLUMN rating_samples INTEGER");
|
|
181
212
|
}
|
|
@@ -193,6 +224,50 @@ export class GlobalMigrations {
|
|
|
193
224
|
}
|
|
194
225
|
await db.exec(`
|
|
195
226
|
UPDATE agents
|
|
227
|
+
SET openai_compatible = CASE
|
|
228
|
+
WHEN adapter IN ('openai-api') THEN 1
|
|
229
|
+
ELSE 0
|
|
230
|
+
END
|
|
231
|
+
WHERE openai_compatible IS NULL
|
|
232
|
+
`);
|
|
233
|
+
await db.exec(`
|
|
234
|
+
UPDATE agents
|
|
235
|
+
SET supports_tools = CASE
|
|
236
|
+
WHEN adapter IN ('openai-api','openai-cli','codex-cli') THEN 1
|
|
237
|
+
ELSE 0
|
|
238
|
+
END
|
|
239
|
+
WHERE supports_tools IS NULL
|
|
240
|
+
`);
|
|
241
|
+
await db.exec(`
|
|
242
|
+
UPDATE agents
|
|
243
|
+
SET context_window = COALESCE(context_window, 8192)
|
|
244
|
+
WHERE context_window IS NULL
|
|
245
|
+
`);
|
|
246
|
+
await db.exec(`
|
|
247
|
+
UPDATE agents
|
|
248
|
+
SET max_output_tokens = COALESCE(max_output_tokens, 2048)
|
|
249
|
+
WHERE max_output_tokens IS NULL
|
|
250
|
+
`);
|
|
251
|
+
const tokenUsageInfo = await db.all("PRAGMA table_info(token_usage)");
|
|
252
|
+
const tokenUsageColumns = new Set(tokenUsageInfo.map((col) => col.name));
|
|
253
|
+
const ensureTokenUsageColumn = async (columnDef, name) => {
|
|
254
|
+
if (tokenUsageColumns.has(name))
|
|
255
|
+
return;
|
|
256
|
+
await db.exec(`ALTER TABLE token_usage ADD COLUMN ${columnDef}`);
|
|
257
|
+
};
|
|
258
|
+
await ensureTokenUsageColumn("command_name TEXT", "command_name");
|
|
259
|
+
await ensureTokenUsageColumn("action TEXT", "action");
|
|
260
|
+
await ensureTokenUsageColumn("invocation_kind TEXT", "invocation_kind");
|
|
261
|
+
await ensureTokenUsageColumn("provider TEXT", "provider");
|
|
262
|
+
await ensureTokenUsageColumn("currency TEXT", "currency");
|
|
263
|
+
await ensureTokenUsageColumn("tokens_cached INTEGER", "tokens_cached");
|
|
264
|
+
await ensureTokenUsageColumn("tokens_cache_read INTEGER", "tokens_cache_read");
|
|
265
|
+
await ensureTokenUsageColumn("tokens_cache_write INTEGER", "tokens_cache_write");
|
|
266
|
+
await ensureTokenUsageColumn("duration_ms REAL", "duration_ms");
|
|
267
|
+
await ensureTokenUsageColumn("started_at TEXT", "started_at");
|
|
268
|
+
await ensureTokenUsageColumn("finished_at TEXT", "finished_at");
|
|
269
|
+
await db.exec(`
|
|
270
|
+
UPDATE agents
|
|
196
271
|
SET
|
|
197
272
|
rating = COALESCE(
|
|
198
273
|
rating,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Database } from "sqlite";
|
|
2
2
|
/**
|
|
3
|
-
* Workspace database migrations for
|
|
3
|
+
* Workspace database migrations for `~/.mcoda/workspaces/<fingerprint>/mcoda.db`.
|
|
4
4
|
* The schema matches the planning/task model defined in the SDS.
|
|
5
5
|
*/
|
|
6
6
|
export declare class WorkspaceMigrations {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceMigrations.d.ts","sourceRoot":"","sources":["../../../src/migrations/workspace/WorkspaceMigrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC;;;GAGG;AACH,qBAAa,mBAAmB;WACjB,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkspaceMigrations.d.ts","sourceRoot":"","sources":["../../../src/migrations/workspace/WorkspaceMigrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC;;;GAGG;AACH,qBAAa,mBAAmB;WACjB,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;mBAmSxB,YAAY;CASlC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Workspace database migrations for
|
|
2
|
+
* Workspace database migrations for `~/.mcoda/workspaces/<fingerprint>/mcoda.db`.
|
|
3
3
|
* The schema matches the planning/task model defined in the SDS.
|
|
4
4
|
*/
|
|
5
5
|
export class WorkspaceMigrations {
|
|
@@ -88,6 +88,8 @@ export class WorkspaceMigrations {
|
|
|
88
88
|
type TEXT NOT NULL,
|
|
89
89
|
state TEXT NOT NULL,
|
|
90
90
|
command_name TEXT,
|
|
91
|
+
agent_id TEXT,
|
|
92
|
+
agent_ids_json TEXT,
|
|
91
93
|
payload_json TEXT,
|
|
92
94
|
total_items INTEGER,
|
|
93
95
|
processed_items INTEGER,
|
|
@@ -103,6 +105,7 @@ export class WorkspaceMigrations {
|
|
|
103
105
|
workspace_id TEXT NOT NULL,
|
|
104
106
|
command_name TEXT NOT NULL,
|
|
105
107
|
job_id TEXT REFERENCES jobs(id) ON DELETE SET NULL,
|
|
108
|
+
agent_id TEXT,
|
|
106
109
|
task_ids_json TEXT,
|
|
107
110
|
git_branch TEXT,
|
|
108
111
|
git_base_branch TEXT,
|
|
@@ -132,6 +135,19 @@ export class WorkspaceMigrations {
|
|
|
132
135
|
run_context_json TEXT
|
|
133
136
|
);
|
|
134
137
|
|
|
138
|
+
CREATE TABLE IF NOT EXISTS task_status_events (
|
|
139
|
+
id TEXT PRIMARY KEY,
|
|
140
|
+
task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
141
|
+
from_status TEXT,
|
|
142
|
+
to_status TEXT NOT NULL,
|
|
143
|
+
timestamp TEXT NOT NULL,
|
|
144
|
+
command_name TEXT,
|
|
145
|
+
job_id TEXT REFERENCES jobs(id) ON DELETE SET NULL,
|
|
146
|
+
task_run_id TEXT REFERENCES task_runs(id) ON DELETE SET NULL,
|
|
147
|
+
agent_id TEXT,
|
|
148
|
+
metadata_json TEXT
|
|
149
|
+
);
|
|
150
|
+
|
|
135
151
|
CREATE TABLE IF NOT EXISTS task_locks (
|
|
136
152
|
task_id TEXT PRIMARY KEY REFERENCES tasks(id) ON DELETE CASCADE,
|
|
137
153
|
task_run_id TEXT NOT NULL REFERENCES task_runs(id) ON DELETE CASCADE,
|
|
@@ -141,6 +157,7 @@ export class WorkspaceMigrations {
|
|
|
141
157
|
);
|
|
142
158
|
|
|
143
159
|
CREATE INDEX IF NOT EXISTS idx_task_locks_expires_at ON task_locks(expires_at);
|
|
160
|
+
CREATE INDEX IF NOT EXISTS idx_task_status_events_task_id_timestamp ON task_status_events(task_id, timestamp);
|
|
144
161
|
|
|
145
162
|
CREATE TABLE IF NOT EXISTS task_qa_runs (
|
|
146
163
|
id TEXT PRIMARY KEY,
|
|
@@ -235,15 +252,40 @@ export class WorkspaceMigrations {
|
|
|
235
252
|
project_id TEXT REFERENCES projects(id) ON DELETE SET NULL,
|
|
236
253
|
epic_id TEXT REFERENCES epics(id) ON DELETE SET NULL,
|
|
237
254
|
user_story_id TEXT REFERENCES user_stories(id) ON DELETE SET NULL,
|
|
255
|
+
command_name TEXT,
|
|
256
|
+
action TEXT,
|
|
257
|
+
invocation_kind TEXT,
|
|
258
|
+
provider TEXT,
|
|
259
|
+
currency TEXT,
|
|
238
260
|
tokens_prompt INTEGER,
|
|
239
261
|
tokens_completion INTEGER,
|
|
240
262
|
tokens_total INTEGER,
|
|
263
|
+
tokens_cached INTEGER,
|
|
264
|
+
tokens_cache_read INTEGER,
|
|
265
|
+
tokens_cache_write INTEGER,
|
|
241
266
|
cost_estimate REAL,
|
|
242
267
|
duration_seconds REAL,
|
|
268
|
+
duration_ms REAL,
|
|
269
|
+
started_at TEXT,
|
|
270
|
+
finished_at TEXT,
|
|
243
271
|
timestamp TEXT NOT NULL,
|
|
244
272
|
metadata_json TEXT
|
|
245
273
|
);
|
|
246
274
|
`);
|
|
275
|
+
await WorkspaceMigrations.ensureColumn(db, "token_usage", "command_name TEXT");
|
|
276
|
+
await WorkspaceMigrations.ensureColumn(db, "token_usage", "action TEXT");
|
|
277
|
+
await WorkspaceMigrations.ensureColumn(db, "token_usage", "invocation_kind TEXT");
|
|
278
|
+
await WorkspaceMigrations.ensureColumn(db, "token_usage", "provider TEXT");
|
|
279
|
+
await WorkspaceMigrations.ensureColumn(db, "token_usage", "currency TEXT");
|
|
280
|
+
await WorkspaceMigrations.ensureColumn(db, "token_usage", "tokens_cached INTEGER");
|
|
281
|
+
await WorkspaceMigrations.ensureColumn(db, "token_usage", "tokens_cache_read INTEGER");
|
|
282
|
+
await WorkspaceMigrations.ensureColumn(db, "token_usage", "tokens_cache_write INTEGER");
|
|
283
|
+
await WorkspaceMigrations.ensureColumn(db, "token_usage", "duration_ms REAL");
|
|
284
|
+
await WorkspaceMigrations.ensureColumn(db, "token_usage", "started_at TEXT");
|
|
285
|
+
await WorkspaceMigrations.ensureColumn(db, "token_usage", "finished_at TEXT");
|
|
286
|
+
await WorkspaceMigrations.ensureColumn(db, "jobs", "agent_id TEXT");
|
|
287
|
+
await WorkspaceMigrations.ensureColumn(db, "jobs", "agent_ids_json TEXT");
|
|
288
|
+
await WorkspaceMigrations.ensureColumn(db, "command_runs", "agent_id TEXT");
|
|
247
289
|
await WorkspaceMigrations.ensureColumn(db, "task_comments", "slug TEXT");
|
|
248
290
|
await WorkspaceMigrations.ensureColumn(db, "task_comments", "status TEXT");
|
|
249
291
|
await db.exec(`CREATE INDEX IF NOT EXISTS idx_task_comments_slug ON task_comments(task_id, slug);`);
|
|
@@ -19,11 +19,22 @@ export interface GlobalTokenUsageInsert {
|
|
|
19
19
|
agentId?: string | null;
|
|
20
20
|
commandRunId?: string | null;
|
|
21
21
|
modelName?: string | null;
|
|
22
|
+
commandName?: string | null;
|
|
23
|
+
action?: string | null;
|
|
24
|
+
invocationKind?: string | null;
|
|
25
|
+
provider?: string | null;
|
|
26
|
+
currency?: string | null;
|
|
22
27
|
tokensPrompt?: number | null;
|
|
23
28
|
tokensCompletion?: number | null;
|
|
24
29
|
tokensTotal?: number | null;
|
|
30
|
+
tokensCached?: number | null;
|
|
31
|
+
tokensCacheRead?: number | null;
|
|
32
|
+
tokensCacheWrite?: number | null;
|
|
25
33
|
costEstimate?: number | null;
|
|
26
34
|
durationSeconds?: number | null;
|
|
35
|
+
durationMs?: number | null;
|
|
36
|
+
startedAt?: string | null;
|
|
37
|
+
finishedAt?: string | null;
|
|
27
38
|
timestamp: string;
|
|
28
39
|
metadata?: Record<string, unknown>;
|
|
29
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/global/GlobalRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EACL,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"GlobalRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/global/GlobalRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { Connection } from "../../sqlite/connection.js";
|
|
3
3
|
import { GlobalMigrations } from "../../migrations/global/GlobalMigrations.js";
|
|
4
|
+
const toBool = (value) => value === null || value === undefined ? undefined : Boolean(value);
|
|
4
5
|
const mapAgentRow = (row) => ({
|
|
5
6
|
id: row.id,
|
|
6
7
|
slug: row.slug,
|
|
7
8
|
adapter: row.adapter,
|
|
8
9
|
defaultModel: row.default_model ?? undefined,
|
|
10
|
+
openaiCompatible: toBool(row.openai_compatible),
|
|
11
|
+
contextWindow: row.context_window ?? undefined,
|
|
12
|
+
maxOutputTokens: row.max_output_tokens ?? undefined,
|
|
13
|
+
supportsTools: toBool(row.supports_tools),
|
|
9
14
|
rating: row.rating ?? undefined,
|
|
10
15
|
reasoningRating: row.reasoning_rating ?? undefined,
|
|
11
16
|
bestUsage: row.best_usage ?? undefined,
|
|
@@ -36,22 +41,22 @@ export class GlobalRepository {
|
|
|
36
41
|
}
|
|
37
42
|
}
|
|
38
43
|
async listAgents() {
|
|
39
|
-
const rows = await this.db.all("SELECT id, slug, adapter, default_model, rating, reasoning_rating, best_usage, cost_per_million, max_complexity, rating_samples, rating_last_score, rating_updated_at, complexity_samples, complexity_updated_at, config_json, created_at, updated_at FROM agents ORDER BY slug ASC");
|
|
44
|
+
const rows = await this.db.all("SELECT id, slug, adapter, default_model, openai_compatible, context_window, max_output_tokens, supports_tools, rating, reasoning_rating, best_usage, cost_per_million, max_complexity, rating_samples, rating_last_score, rating_updated_at, complexity_samples, complexity_updated_at, config_json, created_at, updated_at FROM agents ORDER BY slug ASC");
|
|
40
45
|
return rows.map(mapAgentRow);
|
|
41
46
|
}
|
|
42
47
|
async getAgentById(id) {
|
|
43
|
-
const row = await this.db.get("SELECT id, slug, adapter, default_model, rating, reasoning_rating, best_usage, cost_per_million, max_complexity, rating_samples, rating_last_score, rating_updated_at, complexity_samples, complexity_updated_at, config_json, created_at, updated_at FROM agents WHERE id = ?", id);
|
|
48
|
+
const row = await this.db.get("SELECT id, slug, adapter, default_model, openai_compatible, context_window, max_output_tokens, supports_tools, rating, reasoning_rating, best_usage, cost_per_million, max_complexity, rating_samples, rating_last_score, rating_updated_at, complexity_samples, complexity_updated_at, config_json, created_at, updated_at FROM agents WHERE id = ?", id);
|
|
44
49
|
return row ? mapAgentRow(row) : undefined;
|
|
45
50
|
}
|
|
46
51
|
async getAgentBySlug(slug) {
|
|
47
|
-
const row = await this.db.get("SELECT id, slug, adapter, default_model, rating, reasoning_rating, best_usage, cost_per_million, max_complexity, rating_samples, rating_last_score, rating_updated_at, complexity_samples, complexity_updated_at, config_json, created_at, updated_at FROM agents WHERE slug = ?", slug);
|
|
52
|
+
const row = await this.db.get("SELECT id, slug, adapter, default_model, openai_compatible, context_window, max_output_tokens, supports_tools, rating, reasoning_rating, best_usage, cost_per_million, max_complexity, rating_samples, rating_last_score, rating_updated_at, complexity_samples, complexity_updated_at, config_json, created_at, updated_at FROM agents WHERE slug = ?", slug);
|
|
48
53
|
return row ? mapAgentRow(row) : undefined;
|
|
49
54
|
}
|
|
50
55
|
async createAgent(input) {
|
|
51
56
|
const now = new Date().toISOString();
|
|
52
57
|
const id = randomUUID();
|
|
53
|
-
await this.db.run(`INSERT INTO agents (id, slug, adapter, default_model, rating, reasoning_rating, best_usage, cost_per_million, max_complexity, rating_samples, rating_last_score, rating_updated_at, complexity_samples, complexity_updated_at, config_json, created_at, updated_at)
|
|
54
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, id, input.slug, input.adapter, input.defaultModel ?? null, input.rating ?? null, input.reasoningRating ?? null, input.bestUsage ?? null, input.costPerMillion ?? null, input.maxComplexity ?? null, input.ratingSamples ?? null, input.ratingLastScore ?? null, input.ratingUpdatedAt ?? null, input.complexitySamples ?? null, input.complexityUpdatedAt ?? null, input.config ? JSON.stringify(input.config) : null, now, now);
|
|
58
|
+
await this.db.run(`INSERT INTO agents (id, slug, adapter, default_model, openai_compatible, context_window, max_output_tokens, supports_tools, rating, reasoning_rating, best_usage, cost_per_million, max_complexity, rating_samples, rating_last_score, rating_updated_at, complexity_samples, complexity_updated_at, config_json, created_at, updated_at)
|
|
59
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, id, input.slug, input.adapter, input.defaultModel ?? null, input.openaiCompatible === undefined ? null : input.openaiCompatible ? 1 : 0, input.contextWindow ?? null, input.maxOutputTokens ?? null, input.supportsTools === undefined ? null : input.supportsTools ? 1 : 0, input.rating ?? null, input.reasoningRating ?? null, input.bestUsage ?? null, input.costPerMillion ?? null, input.maxComplexity ?? null, input.ratingSamples ?? null, input.ratingLastScore ?? null, input.ratingUpdatedAt ?? null, input.complexitySamples ?? null, input.complexityUpdatedAt ?? null, input.config ? JSON.stringify(input.config) : null, now, now);
|
|
55
60
|
if (input.capabilities) {
|
|
56
61
|
await this.setAgentCapabilities(id, input.capabilities);
|
|
57
62
|
}
|
|
@@ -74,6 +79,22 @@ export class GlobalRepository {
|
|
|
74
79
|
updates.push("default_model = ?");
|
|
75
80
|
params.push(patch.defaultModel);
|
|
76
81
|
}
|
|
82
|
+
if (patch.openaiCompatible !== undefined) {
|
|
83
|
+
updates.push("openai_compatible = ?");
|
|
84
|
+
params.push(patch.openaiCompatible ? 1 : 0);
|
|
85
|
+
}
|
|
86
|
+
if (patch.contextWindow !== undefined) {
|
|
87
|
+
updates.push("context_window = ?");
|
|
88
|
+
params.push(patch.contextWindow);
|
|
89
|
+
}
|
|
90
|
+
if (patch.maxOutputTokens !== undefined) {
|
|
91
|
+
updates.push("max_output_tokens = ?");
|
|
92
|
+
params.push(patch.maxOutputTokens);
|
|
93
|
+
}
|
|
94
|
+
if (patch.supportsTools !== undefined) {
|
|
95
|
+
updates.push("supports_tools = ?");
|
|
96
|
+
params.push(patch.supportsTools ? 1 : 0);
|
|
97
|
+
}
|
|
77
98
|
if (patch.rating !== undefined) {
|
|
78
99
|
updates.push("rating = ?");
|
|
79
100
|
params.push(patch.rating);
|
|
@@ -304,9 +325,29 @@ export class GlobalRepository {
|
|
|
304
325
|
async recordTokenUsage(entry) {
|
|
305
326
|
const id = randomUUID();
|
|
306
327
|
await this.db.run(`INSERT INTO token_usage (
|
|
307
|
-
id,
|
|
308
|
-
|
|
309
|
-
|
|
328
|
+
id,
|
|
329
|
+
agent_id,
|
|
330
|
+
command_run_id,
|
|
331
|
+
model_name,
|
|
332
|
+
command_name,
|
|
333
|
+
action,
|
|
334
|
+
invocation_kind,
|
|
335
|
+
provider,
|
|
336
|
+
currency,
|
|
337
|
+
tokens_prompt,
|
|
338
|
+
tokens_completion,
|
|
339
|
+
tokens_total,
|
|
340
|
+
tokens_cached,
|
|
341
|
+
tokens_cache_read,
|
|
342
|
+
tokens_cache_write,
|
|
343
|
+
cost_estimate,
|
|
344
|
+
duration_seconds,
|
|
345
|
+
duration_ms,
|
|
346
|
+
started_at,
|
|
347
|
+
finished_at,
|
|
348
|
+
timestamp,
|
|
349
|
+
metadata_json
|
|
350
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, id, entry.agentId ?? null, entry.commandRunId ?? null, entry.modelName ?? null, entry.commandName ?? null, entry.action ?? null, entry.invocationKind ?? null, entry.provider ?? null, entry.currency ?? null, entry.tokensPrompt ?? null, entry.tokensCompletion ?? null, entry.tokensTotal ?? null, entry.tokensCached ?? null, entry.tokensCacheRead ?? null, entry.tokensCacheWrite ?? null, entry.costEstimate ?? null, entry.durationSeconds ?? null, entry.durationMs ?? null, entry.startedAt ?? null, entry.finishedAt ?? null, entry.timestamp, entry.metadata ? JSON.stringify(entry.metadata) : null);
|
|
310
351
|
}
|
|
311
352
|
async insertAgentRunRating(entry) {
|
|
312
353
|
const id = randomUUID();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Database } from "sqlite";
|
|
2
2
|
import { Connection } from "../../sqlite/connection.js";
|
|
3
3
|
export type JobStatus = "queued" | "running" | "paused" | "completed" | "failed" | "cancelled" | "partial";
|
|
4
|
-
export type CommandStatus = "running" | "succeeded" | "failed";
|
|
4
|
+
export type CommandStatus = "running" | "succeeded" | "failed" | "cancelled";
|
|
5
5
|
export type TaskRunStatus = "queued" | "running" | "succeeded" | "failed" | "cancelled";
|
|
6
6
|
export interface ProjectRow {
|
|
7
7
|
id: string;
|
|
@@ -85,6 +85,8 @@ export interface JobInsert {
|
|
|
85
85
|
totalItems?: number | null;
|
|
86
86
|
processedItems?: number | null;
|
|
87
87
|
lastCheckpoint?: string | null;
|
|
88
|
+
agentId?: string | null;
|
|
89
|
+
agentIds?: string[] | null;
|
|
88
90
|
}
|
|
89
91
|
export interface JobRow extends JobInsert {
|
|
90
92
|
id: string;
|
|
@@ -97,6 +99,7 @@ export interface CommandRunInsert {
|
|
|
97
99
|
workspaceId: string;
|
|
98
100
|
commandName: string;
|
|
99
101
|
jobId?: string | null;
|
|
102
|
+
agentId?: string | null;
|
|
100
103
|
taskIds?: string[];
|
|
101
104
|
gitBranch?: string | null;
|
|
102
105
|
gitBaseBranch?: string | null;
|
|
@@ -129,6 +132,17 @@ export interface TaskRunInsert {
|
|
|
129
132
|
export interface TaskRunRow extends TaskRunInsert {
|
|
130
133
|
id: string;
|
|
131
134
|
}
|
|
135
|
+
export interface TaskStatusEventInsert {
|
|
136
|
+
taskId: string;
|
|
137
|
+
fromStatus?: string | null;
|
|
138
|
+
toStatus: string;
|
|
139
|
+
timestamp: string;
|
|
140
|
+
commandName?: string | null;
|
|
141
|
+
jobId?: string | null;
|
|
142
|
+
taskRunId?: string | null;
|
|
143
|
+
agentId?: string | null;
|
|
144
|
+
metadata?: Record<string, unknown> | null;
|
|
145
|
+
}
|
|
132
146
|
export interface TaskLockRow {
|
|
133
147
|
taskId: string;
|
|
134
148
|
taskRunId: string;
|
|
@@ -171,11 +185,22 @@ export interface TokenUsageInsert {
|
|
|
171
185
|
projectId?: string | null;
|
|
172
186
|
epicId?: string | null;
|
|
173
187
|
userStoryId?: string | null;
|
|
188
|
+
commandName?: string | null;
|
|
189
|
+
action?: string | null;
|
|
190
|
+
invocationKind?: string | null;
|
|
191
|
+
provider?: string | null;
|
|
192
|
+
currency?: string | null;
|
|
174
193
|
tokensPrompt?: number | null;
|
|
175
194
|
tokensCompletion?: number | null;
|
|
176
195
|
tokensTotal?: number | null;
|
|
196
|
+
tokensCached?: number | null;
|
|
197
|
+
tokensCacheRead?: number | null;
|
|
198
|
+
tokensCacheWrite?: number | null;
|
|
177
199
|
costEstimate?: number | null;
|
|
178
200
|
durationSeconds?: number | null;
|
|
201
|
+
durationMs?: number | null;
|
|
202
|
+
startedAt?: string | null;
|
|
203
|
+
finishedAt?: string | null;
|
|
179
204
|
timestamp: string;
|
|
180
205
|
metadata?: Record<string, unknown>;
|
|
181
206
|
}
|
|
@@ -265,6 +290,7 @@ export declare class WorkspaceRepository {
|
|
|
265
290
|
vcsBaseBranch?: string | null;
|
|
266
291
|
vcsLastCommitSha?: string | null;
|
|
267
292
|
}): Promise<void>;
|
|
293
|
+
recordTaskStatusEvent(entry: TaskStatusEventInsert): Promise<void>;
|
|
268
294
|
getTaskById(taskId: string): Promise<TaskRow | undefined>;
|
|
269
295
|
getTaskByKey(taskKey: string): Promise<TaskRow | undefined>;
|
|
270
296
|
listTasksByMetadataValue(projectId: string, metadataKey: string, metadataValue: string): Promise<TaskRow[]>;
|
|
@@ -282,6 +308,8 @@ export declare class WorkspaceRepository {
|
|
|
282
308
|
}): Promise<void>;
|
|
283
309
|
createCommandRun(record: CommandRunInsert): Promise<CommandRunRow>;
|
|
284
310
|
setCommandRunJobId(id: string, jobId: string): Promise<void>;
|
|
311
|
+
setCommandRunAgentId(id: string, agentId: string): Promise<void>;
|
|
312
|
+
setJobAgentIds(id: string, agentId: string): Promise<void>;
|
|
285
313
|
completeCommandRun(id: string, update: {
|
|
286
314
|
status: CommandStatus;
|
|
287
315
|
completedAt: string;
|
|
@@ -301,6 +329,7 @@ export declare class WorkspaceRepository {
|
|
|
301
329
|
createTaskRun(record: TaskRunInsert): Promise<TaskRunRow>;
|
|
302
330
|
getTaskLock(taskId: string): Promise<TaskLockRow | undefined>;
|
|
303
331
|
cleanupExpiredTaskLocks(nowIso?: string): Promise<string[]>;
|
|
332
|
+
releaseTaskLocksByJob(jobId: string): Promise<string[]>;
|
|
304
333
|
tryAcquireTaskLock(taskId: string, taskRunId: string, jobId?: string | null, ttlSeconds?: number): Promise<{
|
|
305
334
|
acquired: boolean;
|
|
306
335
|
lock?: TaskLockRow;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/workspace/WorkspaceRepository.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkspaceRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/workspace/WorkspaceRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,67 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
import { setTimeout as delay } from "node:timers/promises";
|
|
3
3
|
import { Connection } from "../../sqlite/connection.js";
|
|
4
4
|
import { WorkspaceMigrations } from "../../migrations/workspace/WorkspaceMigrations.js";
|
|
5
|
+
const DOD_HEADER = /(definition of done|dod)\b/i;
|
|
6
|
+
const SECTION_HEADER = /^(?:\*+\s*)?(?:\*\*)?\s*(objective|context|inputs|implementation plan|testing|dependencies|risks|references|related documentation|acceptance criteria)\b/i;
|
|
7
|
+
const extractTaskDodCriteria = (description) => {
|
|
8
|
+
if (!description)
|
|
9
|
+
return [];
|
|
10
|
+
const lines = description.split(/\r?\n/);
|
|
11
|
+
let startIndex = -1;
|
|
12
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
13
|
+
const line = lines[i].trim();
|
|
14
|
+
if (!line)
|
|
15
|
+
continue;
|
|
16
|
+
if (DOD_HEADER.test(line)) {
|
|
17
|
+
startIndex = i;
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (startIndex === -1)
|
|
22
|
+
return [];
|
|
23
|
+
const results = [];
|
|
24
|
+
const addInline = (line) => {
|
|
25
|
+
const parts = line.split(":");
|
|
26
|
+
if (parts.length < 2)
|
|
27
|
+
return;
|
|
28
|
+
const tail = parts.slice(1).join(":").trim();
|
|
29
|
+
if (!tail)
|
|
30
|
+
return;
|
|
31
|
+
tail
|
|
32
|
+
.split(/\s*;\s*/)
|
|
33
|
+
.map((item) => item.trim())
|
|
34
|
+
.filter(Boolean)
|
|
35
|
+
.forEach((item) => results.push(item));
|
|
36
|
+
};
|
|
37
|
+
const isBullet = (line) => /^[-*]\s+/.test(line);
|
|
38
|
+
const isHeading = (line) => SECTION_HEADER.test(line) ||
|
|
39
|
+
(/^\*+\s*\*\*.+\*\*\s*:?\s*$/.test(line) && !DOD_HEADER.test(line)) ||
|
|
40
|
+
(/^[A-Z][A-Za-z0-9 &/]{2,}:\s*$/.test(line) && !DOD_HEADER.test(line));
|
|
41
|
+
const headerLine = lines[startIndex].trim();
|
|
42
|
+
addInline(headerLine);
|
|
43
|
+
for (let i = startIndex + 1; i < lines.length; i += 1) {
|
|
44
|
+
const rawLine = lines[i];
|
|
45
|
+
const line = rawLine.trim();
|
|
46
|
+
if (!line) {
|
|
47
|
+
if (results.length)
|
|
48
|
+
break;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (!isBullet(line) && isHeading(line))
|
|
52
|
+
break;
|
|
53
|
+
if (isBullet(line)) {
|
|
54
|
+
results.push(line.replace(/^[-*]\s+/, "").trim());
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (results.length) {
|
|
58
|
+
results[results.length - 1] = `${results[results.length - 1]} ${line}`.trim();
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
results.push(line);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return Array.from(new Set(results.filter(Boolean)));
|
|
65
|
+
};
|
|
5
66
|
export class WorkspaceRepository {
|
|
6
67
|
constructor(db, connection) {
|
|
7
68
|
this.db = db;
|
|
@@ -286,6 +347,11 @@ export class WorkspaceRepository {
|
|
|
286
347
|
params.push(taskId);
|
|
287
348
|
await this.db.run(`UPDATE tasks SET ${fields.join(", ")} WHERE id = ?`, ...params);
|
|
288
349
|
}
|
|
350
|
+
async recordTaskStatusEvent(entry) {
|
|
351
|
+
const id = randomUUID();
|
|
352
|
+
await this.db.run(`INSERT INTO task_status_events (id, task_id, from_status, to_status, timestamp, command_name, job_id, task_run_id, agent_id, metadata_json)
|
|
353
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, id, entry.taskId, entry.fromStatus ?? null, entry.toStatus, entry.timestamp, entry.commandName ?? null, entry.jobId ?? null, entry.taskRunId ?? null, entry.agentId ?? null, entry.metadata ? JSON.stringify(entry.metadata) : null);
|
|
354
|
+
}
|
|
289
355
|
async getTaskById(taskId) {
|
|
290
356
|
const row = await this.db.get(`SELECT id, project_id, epic_id, user_story_id, key, title, description, type, status, story_points, priority, assigned_agent_id, assignee_human, vcs_branch, vcs_base_branch, vcs_last_commit_sha, metadata_json, openapi_version_at_creation, created_at, updated_at
|
|
291
357
|
FROM tasks WHERE id = ?`, taskId);
|
|
@@ -414,8 +480,8 @@ export class WorkspaceRepository {
|
|
|
414
480
|
async createJob(record) {
|
|
415
481
|
const now = new Date().toISOString();
|
|
416
482
|
const id = randomUUID();
|
|
417
|
-
await this.db.run(`INSERT INTO jobs (id, workspace_id, type, state, command_name, payload_json, total_items, processed_items, last_checkpoint, created_at, updated_at)
|
|
418
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, id, record.workspaceId, record.type, record.state, record.commandName ?? null, record.payload ? JSON.stringify(record.payload) : null, record.totalItems ?? null, record.processedItems ?? null, record.lastCheckpoint ?? null, now, now);
|
|
483
|
+
await this.db.run(`INSERT INTO jobs (id, workspace_id, type, state, command_name, payload_json, total_items, processed_items, last_checkpoint, agent_id, agent_ids_json, created_at, updated_at)
|
|
484
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, id, record.workspaceId, record.type, record.state, record.commandName ?? null, record.payload ? JSON.stringify(record.payload) : null, record.totalItems ?? null, record.processedItems ?? null, record.lastCheckpoint ?? null, record.agentId ?? null, record.agentIds ? JSON.stringify(record.agentIds) : null, now, now);
|
|
419
485
|
return {
|
|
420
486
|
id,
|
|
421
487
|
...record,
|
|
@@ -426,7 +492,7 @@ export class WorkspaceRepository {
|
|
|
426
492
|
};
|
|
427
493
|
}
|
|
428
494
|
async listJobs() {
|
|
429
|
-
const rows = await this.db.all(`SELECT id, workspace_id, type, state, command_name, payload_json, total_items, processed_items, last_checkpoint, created_at, updated_at, completed_at, error_summary
|
|
495
|
+
const rows = await this.db.all(`SELECT id, workspace_id, type, state, command_name, payload_json, total_items, processed_items, last_checkpoint, agent_id, agent_ids_json, created_at, updated_at, completed_at, error_summary
|
|
430
496
|
FROM jobs ORDER BY updated_at DESC`);
|
|
431
497
|
return rows.map((row) => ({
|
|
432
498
|
id: row.id,
|
|
@@ -438,6 +504,8 @@ export class WorkspaceRepository {
|
|
|
438
504
|
totalItems: row.total_items ?? undefined,
|
|
439
505
|
processedItems: row.processed_items ?? undefined,
|
|
440
506
|
lastCheckpoint: row.last_checkpoint ?? undefined,
|
|
507
|
+
agentId: row.agent_id ?? undefined,
|
|
508
|
+
agentIds: row.agent_ids_json ? JSON.parse(row.agent_ids_json) : undefined,
|
|
441
509
|
createdAt: row.created_at,
|
|
442
510
|
updatedAt: row.updated_at,
|
|
443
511
|
completedAt: row.completed_at ?? undefined,
|
|
@@ -445,7 +513,7 @@ export class WorkspaceRepository {
|
|
|
445
513
|
}));
|
|
446
514
|
}
|
|
447
515
|
async getJob(id) {
|
|
448
|
-
const row = await this.db.get(`SELECT id, workspace_id, type, state, command_name, payload_json, total_items, processed_items, last_checkpoint, created_at, updated_at, completed_at, error_summary
|
|
516
|
+
const row = await this.db.get(`SELECT id, workspace_id, type, state, command_name, payload_json, total_items, processed_items, last_checkpoint, agent_id, agent_ids_json, created_at, updated_at, completed_at, error_summary
|
|
449
517
|
FROM jobs WHERE id = ?`, id);
|
|
450
518
|
if (!row)
|
|
451
519
|
return undefined;
|
|
@@ -459,6 +527,8 @@ export class WorkspaceRepository {
|
|
|
459
527
|
totalItems: row.total_items ?? undefined,
|
|
460
528
|
processedItems: row.processed_items ?? undefined,
|
|
461
529
|
lastCheckpoint: row.last_checkpoint ?? undefined,
|
|
530
|
+
agentId: row.agent_id ?? undefined,
|
|
531
|
+
agentIds: row.agent_ids_json ? JSON.parse(row.agent_ids_json) : undefined,
|
|
462
532
|
createdAt: row.created_at,
|
|
463
533
|
updatedAt: row.updated_at,
|
|
464
534
|
completedAt: row.completed_at ?? undefined,
|
|
@@ -491,6 +561,14 @@ export class WorkspaceRepository {
|
|
|
491
561
|
fields.push("last_checkpoint = ?");
|
|
492
562
|
params.push(update.lastCheckpoint ?? null);
|
|
493
563
|
}
|
|
564
|
+
if (update.agentId !== undefined) {
|
|
565
|
+
fields.push("agent_id = ?");
|
|
566
|
+
params.push(update.agentId ?? null);
|
|
567
|
+
}
|
|
568
|
+
if (update.agentIds !== undefined) {
|
|
569
|
+
fields.push("agent_ids_json = ?");
|
|
570
|
+
params.push(update.agentIds ? JSON.stringify(update.agentIds) : null);
|
|
571
|
+
}
|
|
494
572
|
if (update.errorSummary !== undefined) {
|
|
495
573
|
fields.push("error_summary = ?");
|
|
496
574
|
params.push(update.errorSummary ?? null);
|
|
@@ -510,13 +588,35 @@ export class WorkspaceRepository {
|
|
|
510
588
|
}
|
|
511
589
|
async createCommandRun(record) {
|
|
512
590
|
const id = randomUUID();
|
|
513
|
-
await this.db.run(`INSERT INTO command_runs (id, workspace_id, command_name, job_id, task_ids_json, git_branch, git_base_branch, started_at, status, sp_processed)
|
|
514
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, id, record.workspaceId, record.commandName, record.jobId ?? null, record.taskIds ? JSON.stringify(record.taskIds) : null, record.gitBranch ?? null, record.gitBaseBranch ?? null, record.startedAt, record.status, record.spProcessed ?? null);
|
|
591
|
+
await this.db.run(`INSERT INTO command_runs (id, workspace_id, command_name, job_id, agent_id, task_ids_json, git_branch, git_base_branch, started_at, status, sp_processed)
|
|
592
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, id, record.workspaceId, record.commandName, record.jobId ?? null, record.agentId ?? null, record.taskIds ? JSON.stringify(record.taskIds) : null, record.gitBranch ?? null, record.gitBaseBranch ?? null, record.startedAt, record.status, record.spProcessed ?? null);
|
|
515
593
|
return { id, ...record, completedAt: null, errorSummary: null, durationSeconds: null };
|
|
516
594
|
}
|
|
517
595
|
async setCommandRunJobId(id, jobId) {
|
|
518
596
|
await this.db.run(`UPDATE command_runs SET job_id = ? WHERE id = ?`, jobId, id);
|
|
519
597
|
}
|
|
598
|
+
async setCommandRunAgentId(id, agentId) {
|
|
599
|
+
await this.db.run(`UPDATE command_runs SET agent_id = COALESCE(agent_id, ?) WHERE id = ?`, agentId, id);
|
|
600
|
+
}
|
|
601
|
+
async setJobAgentIds(id, agentId) {
|
|
602
|
+
const row = await this.db.get(`SELECT agent_id, agent_ids_json FROM jobs WHERE id = ?`, id);
|
|
603
|
+
if (!row)
|
|
604
|
+
return;
|
|
605
|
+
let existing = [];
|
|
606
|
+
if (row.agent_ids_json) {
|
|
607
|
+
try {
|
|
608
|
+
const parsed = JSON.parse(row.agent_ids_json);
|
|
609
|
+
if (Array.isArray(parsed))
|
|
610
|
+
existing = parsed;
|
|
611
|
+
}
|
|
612
|
+
catch {
|
|
613
|
+
existing = [];
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
const merged = Array.from(new Set([...existing, agentId]));
|
|
617
|
+
const primary = row.agent_id ?? merged[0] ?? agentId;
|
|
618
|
+
await this.db.run(`UPDATE jobs SET agent_id = ?, agent_ids_json = ? WHERE id = ?`, primary, JSON.stringify(merged), id);
|
|
619
|
+
}
|
|
520
620
|
async completeCommandRun(id, update) {
|
|
521
621
|
await this.db.run(`UPDATE command_runs
|
|
522
622
|
SET status = ?, completed_at = ?, error_summary = ?, duration_seconds = ?, sp_processed = ?
|
|
@@ -559,40 +659,44 @@ export class WorkspaceRepository {
|
|
|
559
659
|
JOIN user_stories us ON us.id = t.user_story_id
|
|
560
660
|
WHERE t.id IN (${placeholders})
|
|
561
661
|
`, ...taskIds);
|
|
562
|
-
return rows.map((row) =>
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
epicId: row.epic_id,
|
|
566
|
-
userStoryId: row.story_id,
|
|
567
|
-
key: row.task_key,
|
|
568
|
-
title: row.task_title,
|
|
569
|
-
description: row.task_description ?? "",
|
|
570
|
-
type: row.task_type ?? undefined,
|
|
571
|
-
status: row.task_status,
|
|
572
|
-
storyPoints: row.task_story_points ?? undefined,
|
|
573
|
-
priority: row.task_priority ?? undefined,
|
|
574
|
-
assignedAgentId: row.task_assigned_agent_id ?? undefined,
|
|
575
|
-
assigneeHuman: row.task_assignee_human ?? undefined,
|
|
576
|
-
vcsBranch: row.task_vcs_branch ?? undefined,
|
|
577
|
-
vcsBaseBranch: row.task_vcs_base_branch ?? undefined,
|
|
578
|
-
vcsLastCommitSha: row.task_vcs_last_commit_sha ?? undefined,
|
|
579
|
-
metadata: row.task_metadata ? JSON.parse(row.task_metadata) : undefined,
|
|
580
|
-
openapiVersionAtCreation: undefined,
|
|
581
|
-
createdAt: row.task_created_at,
|
|
582
|
-
updatedAt: row.task_updated_at,
|
|
583
|
-
epicKey: row.epic_key,
|
|
584
|
-
storyKey: row.story_key,
|
|
585
|
-
epicTitle: row.epic_title ?? undefined,
|
|
586
|
-
epicDescription: row.epic_description ?? undefined,
|
|
587
|
-
storyTitle: row.story_title ?? undefined,
|
|
588
|
-
storyDescription: row.story_description ?? undefined,
|
|
589
|
-
acceptanceCriteria: row.story_acceptance
|
|
662
|
+
return rows.map((row) => {
|
|
663
|
+
const taskDod = extractTaskDodCriteria(row.task_description ?? "");
|
|
664
|
+
const storyAcceptance = row.story_acceptance
|
|
590
665
|
? row.story_acceptance
|
|
591
666
|
.split(/\r?\n/)
|
|
592
667
|
.map((s) => s.trim())
|
|
593
668
|
.filter(Boolean)
|
|
594
|
-
: undefined
|
|
595
|
-
|
|
669
|
+
: undefined;
|
|
670
|
+
return {
|
|
671
|
+
id: row.task_id,
|
|
672
|
+
projectId: row.project_id,
|
|
673
|
+
epicId: row.epic_id,
|
|
674
|
+
userStoryId: row.story_id,
|
|
675
|
+
key: row.task_key,
|
|
676
|
+
title: row.task_title,
|
|
677
|
+
description: row.task_description ?? "",
|
|
678
|
+
type: row.task_type ?? undefined,
|
|
679
|
+
status: row.task_status,
|
|
680
|
+
storyPoints: row.task_story_points ?? undefined,
|
|
681
|
+
priority: row.task_priority ?? undefined,
|
|
682
|
+
assignedAgentId: row.task_assigned_agent_id ?? undefined,
|
|
683
|
+
assigneeHuman: row.task_assignee_human ?? undefined,
|
|
684
|
+
vcsBranch: row.task_vcs_branch ?? undefined,
|
|
685
|
+
vcsBaseBranch: row.task_vcs_base_branch ?? undefined,
|
|
686
|
+
vcsLastCommitSha: row.task_vcs_last_commit_sha ?? undefined,
|
|
687
|
+
metadata: row.task_metadata ? JSON.parse(row.task_metadata) : undefined,
|
|
688
|
+
openapiVersionAtCreation: undefined,
|
|
689
|
+
createdAt: row.task_created_at,
|
|
690
|
+
updatedAt: row.task_updated_at,
|
|
691
|
+
epicKey: row.epic_key,
|
|
692
|
+
storyKey: row.story_key,
|
|
693
|
+
epicTitle: row.epic_title ?? undefined,
|
|
694
|
+
epicDescription: row.epic_description ?? undefined,
|
|
695
|
+
storyTitle: row.story_title ?? undefined,
|
|
696
|
+
storyDescription: row.story_description ?? undefined,
|
|
697
|
+
acceptanceCriteria: taskDod.length ? taskDod : storyAcceptance,
|
|
698
|
+
};
|
|
699
|
+
});
|
|
596
700
|
}
|
|
597
701
|
async createTaskRun(record) {
|
|
598
702
|
const id = randomUUID();
|
|
@@ -624,6 +728,18 @@ export class WorkspaceRepository {
|
|
|
624
728
|
return rows.map((row) => row.task_key ?? row.task_id);
|
|
625
729
|
});
|
|
626
730
|
}
|
|
731
|
+
async releaseTaskLocksByJob(jobId) {
|
|
732
|
+
return this.withTransaction(async () => {
|
|
733
|
+
const rows = await this.db.all(`SELECT t.key as task_key, l.task_id as task_id
|
|
734
|
+
FROM task_locks l
|
|
735
|
+
LEFT JOIN tasks t ON t.id = l.task_id
|
|
736
|
+
WHERE l.job_id = ?`, jobId);
|
|
737
|
+
if (!rows.length)
|
|
738
|
+
return [];
|
|
739
|
+
await this.db.run(`DELETE FROM task_locks WHERE job_id = ?`, jobId);
|
|
740
|
+
return rows.map((row) => row.task_key ?? row.task_id);
|
|
741
|
+
});
|
|
742
|
+
}
|
|
627
743
|
async tryAcquireTaskLock(taskId, taskRunId, jobId, ttlSeconds = 3600) {
|
|
628
744
|
const nowIso = new Date().toISOString();
|
|
629
745
|
const expiresAt = new Date(Date.now() + ttlSeconds * 1000).toISOString();
|
|
@@ -889,8 +1005,37 @@ export class WorkspaceRepository {
|
|
|
889
1005
|
}
|
|
890
1006
|
async recordTokenUsage(entry) {
|
|
891
1007
|
const id = randomUUID();
|
|
892
|
-
await this.db.run(`INSERT INTO token_usage (
|
|
893
|
-
|
|
1008
|
+
await this.db.run(`INSERT INTO token_usage (
|
|
1009
|
+
id,
|
|
1010
|
+
workspace_id,
|
|
1011
|
+
agent_id,
|
|
1012
|
+
model_name,
|
|
1013
|
+
job_id,
|
|
1014
|
+
command_run_id,
|
|
1015
|
+
task_run_id,
|
|
1016
|
+
task_id,
|
|
1017
|
+
project_id,
|
|
1018
|
+
epic_id,
|
|
1019
|
+
user_story_id,
|
|
1020
|
+
command_name,
|
|
1021
|
+
action,
|
|
1022
|
+
invocation_kind,
|
|
1023
|
+
provider,
|
|
1024
|
+
currency,
|
|
1025
|
+
tokens_prompt,
|
|
1026
|
+
tokens_completion,
|
|
1027
|
+
tokens_total,
|
|
1028
|
+
tokens_cached,
|
|
1029
|
+
tokens_cache_read,
|
|
1030
|
+
tokens_cache_write,
|
|
1031
|
+
cost_estimate,
|
|
1032
|
+
duration_seconds,
|
|
1033
|
+
duration_ms,
|
|
1034
|
+
started_at,
|
|
1035
|
+
finished_at,
|
|
1036
|
+
timestamp,
|
|
1037
|
+
metadata_json
|
|
1038
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, id, entry.workspaceId, entry.agentId ?? null, entry.modelName ?? null, entry.jobId ?? null, entry.commandRunId ?? null, entry.taskRunId ?? null, entry.taskId ?? null, entry.projectId ?? null, entry.epicId ?? null, entry.userStoryId ?? null, entry.commandName ?? null, entry.action ?? null, entry.invocationKind ?? null, entry.provider ?? null, entry.currency ?? null, entry.tokensPrompt ?? null, entry.tokensCompletion ?? null, entry.tokensTotal ?? null, entry.tokensCached ?? null, entry.tokensCacheRead ?? null, entry.tokensCacheWrite ?? null, entry.costEstimate ?? null, entry.durationSeconds ?? null, entry.durationMs ?? null, entry.startedAt ?? null, entry.finishedAt ?? null, entry.timestamp, entry.metadata ? JSON.stringify(entry.metadata) : null);
|
|
894
1039
|
}
|
|
895
1040
|
async insertTaskRevision(record) {
|
|
896
1041
|
const id = randomUUID();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcoda/db",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"description": "SQLite-backed storage layer for mcoda.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"sqlite": "^5.1.1",
|
|
34
34
|
"sqlite3": "^5.1.7",
|
|
35
|
-
"@mcoda/shared": "0.1.
|
|
35
|
+
"@mcoda/shared": "0.1.10"
|
|
36
36
|
},
|
|
37
37
|
"scripts": {
|
|
38
38
|
"build": "tsc -p tsconfig.json",
|