@hasna/todos 0.11.70 → 0.11.71
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/cli/commands/plan-template-commands.d.ts.map +1 -1
- package/dist/cli/index.js +278 -49
- package/dist/contracts.js +135 -5
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/plans.d.ts +8 -0
- package/dist/db/plans.d.ts.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/index.js +223 -20
- package/dist/lib/json-schemas.d.ts.map +1 -1
- package/dist/lib/local-bridge.d.ts.map +1 -1
- package/dist/lib/onboarding-fixtures.d.ts.map +1 -1
- package/dist/lib/plan-artifacts.d.ts +3 -0
- package/dist/lib/plan-artifacts.d.ts.map +1 -1
- package/dist/mcp/index.js +138 -5
- package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
- package/dist/registry.js +135 -5
- package/dist/release-provenance.json +3 -3
- package/dist/server/index.js +138 -5
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/storage.js +153 -7
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/server/index.js
CHANGED
|
@@ -1248,6 +1248,11 @@ var init_migrations = __esm(() => {
|
|
|
1248
1248
|
CREATE INDEX IF NOT EXISTS idx_storage_tombstones_object ON storage_tombstones(object_type, object_id);
|
|
1249
1249
|
CREATE INDEX IF NOT EXISTS idx_storage_tombstones_updated ON storage_tombstones(updated_at);
|
|
1250
1250
|
INSERT OR IGNORE INTO _migrations (id) VALUES (63);
|
|
1251
|
+
`,
|
|
1252
|
+
`
|
|
1253
|
+
ALTER TABLE plans ADD COLUMN slug TEXT;
|
|
1254
|
+
CREATE INDEX IF NOT EXISTS idx_plans_slug ON plans(slug);
|
|
1255
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (64);
|
|
1251
1256
|
`
|
|
1252
1257
|
];
|
|
1253
1258
|
});
|
|
@@ -1271,6 +1276,29 @@ function runMigrations(db) {
|
|
|
1271
1276
|
}
|
|
1272
1277
|
ensureSchema(db);
|
|
1273
1278
|
}
|
|
1279
|
+
function planSlugBase(value) {
|
|
1280
|
+
return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") || "plan";
|
|
1281
|
+
}
|
|
1282
|
+
function backfillPlanSlugs(db) {
|
|
1283
|
+
try {
|
|
1284
|
+
const rows = db.query("SELECT id, project_id, name, slug FROM plans ORDER BY created_at ASC, id ASC").all();
|
|
1285
|
+
const used = new Set;
|
|
1286
|
+
for (const row of rows) {
|
|
1287
|
+
const scope = row.project_id ?? "__global__";
|
|
1288
|
+
const base = planSlugBase(row.slug || row.name);
|
|
1289
|
+
let candidate = base;
|
|
1290
|
+
let suffix = 2;
|
|
1291
|
+
while (used.has(`${scope}:${candidate}`)) {
|
|
1292
|
+
candidate = `${base}-${suffix}`;
|
|
1293
|
+
suffix += 1;
|
|
1294
|
+
}
|
|
1295
|
+
used.add(`${scope}:${candidate}`);
|
|
1296
|
+
if (row.slug !== candidate) {
|
|
1297
|
+
db.run("UPDATE plans SET slug = ? WHERE id = ?", [candidate, row.id]);
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
} catch {}
|
|
1301
|
+
}
|
|
1274
1302
|
function ensureSchema(db) {
|
|
1275
1303
|
const ensureColumn = (table, column, type) => {
|
|
1276
1304
|
try {
|
|
@@ -1320,7 +1348,8 @@ function ensureSchema(db) {
|
|
|
1320
1348
|
)`);
|
|
1321
1349
|
ensureTable("plans", `
|
|
1322
1350
|
CREATE TABLE plans (
|
|
1323
|
-
id TEXT PRIMARY KEY,
|
|
1351
|
+
id TEXT PRIMARY KEY, slug TEXT,
|
|
1352
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
1324
1353
|
task_list_id TEXT, agent_id TEXT,
|
|
1325
1354
|
name TEXT NOT NULL, description TEXT,
|
|
1326
1355
|
status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'completed', 'archived')),
|
|
@@ -1835,8 +1864,10 @@ function ensureSchema(db) {
|
|
|
1835
1864
|
ensureColumn("agents", "org_id", "TEXT");
|
|
1836
1865
|
ensureColumn("agents", "capabilities", "TEXT DEFAULT '[]'");
|
|
1837
1866
|
ensureColumn("projects", "org_id", "TEXT");
|
|
1867
|
+
ensureColumn("plans", "slug", "TEXT");
|
|
1838
1868
|
ensureColumn("plans", "task_list_id", "TEXT");
|
|
1839
1869
|
ensureColumn("plans", "agent_id", "TEXT");
|
|
1870
|
+
backfillPlanSlugs(db);
|
|
1840
1871
|
ensureColumn("task_templates", "variables", "TEXT DEFAULT '[]'");
|
|
1841
1872
|
ensureColumn("task_templates", "version", "INTEGER NOT NULL DEFAULT 1");
|
|
1842
1873
|
ensureColumn("template_tasks", "condition", "TEXT");
|
|
@@ -1951,6 +1982,8 @@ function ensureSchema(db) {
|
|
|
1951
1982
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tags_name ON tags(name)");
|
|
1952
1983
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_project ON plans(project_id)");
|
|
1953
1984
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_status ON plans(status)");
|
|
1985
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_slug ON plans(slug)");
|
|
1986
|
+
ensureIndex("CREATE UNIQUE INDEX IF NOT EXISTS idx_plans_scope_slug ON plans(COALESCE(project_id, ''), slug) WHERE slug IS NOT NULL");
|
|
1954
1987
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_task_list ON plans(task_list_id)");
|
|
1955
1988
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_agent ON plans(agent_id)");
|
|
1956
1989
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_history_task ON task_history(task_id)");
|
|
@@ -2799,6 +2832,9 @@ function clearExpiredLocks(db) {
|
|
|
2799
2832
|
const cutoff = lockExpiryCutoff();
|
|
2800
2833
|
db.run("UPDATE tasks SET locked_by = NULL, locked_at = NULL WHERE locked_at IS NOT NULL AND locked_at < ?", [cutoff]);
|
|
2801
2834
|
}
|
|
2835
|
+
function slugifyRef(value) {
|
|
2836
|
+
return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
2837
|
+
}
|
|
2802
2838
|
function resolvePartialId(db, table, partialId) {
|
|
2803
2839
|
if (!ALLOWED_TABLES.has(table)) {
|
|
2804
2840
|
throw new Error(`Invalid table name: ${table}`);
|
|
@@ -2825,6 +2861,16 @@ function resolvePartialId(db, table, partialId) {
|
|
|
2825
2861
|
if (slugRow)
|
|
2826
2862
|
return slugRow.id;
|
|
2827
2863
|
}
|
|
2864
|
+
if (table === "plans") {
|
|
2865
|
+
const slug = slugifyRef(partialId);
|
|
2866
|
+
if (slug) {
|
|
2867
|
+
const slugRows = db.query("SELECT id FROM plans WHERE slug = ?").all(slug);
|
|
2868
|
+
if (slugRows.length === 1)
|
|
2869
|
+
return slugRows[0].id;
|
|
2870
|
+
if (slugRows.length > 1)
|
|
2871
|
+
return null;
|
|
2872
|
+
}
|
|
2873
|
+
}
|
|
2828
2874
|
if (table === "projects") {
|
|
2829
2875
|
const nameRow = db.query("SELECT id FROM projects WHERE lower(name) = ?").get(partialId.toLowerCase());
|
|
2830
2876
|
if (nameRow)
|
|
@@ -8142,15 +8188,59 @@ var init_task_relations = __esm(() => {
|
|
|
8142
8188
|
});
|
|
8143
8189
|
|
|
8144
8190
|
// src/db/plans.ts
|
|
8191
|
+
function planSlugBase2(value) {
|
|
8192
|
+
return slugify(value) || "plan";
|
|
8193
|
+
}
|
|
8194
|
+
function normalizePlanSlug(value) {
|
|
8195
|
+
const slug = slugify(value);
|
|
8196
|
+
if (!slug)
|
|
8197
|
+
throw new Error("Invalid plan slug");
|
|
8198
|
+
return slug;
|
|
8199
|
+
}
|
|
8200
|
+
function plansBySlug(slug, db, projectId) {
|
|
8201
|
+
if (projectId !== undefined) {
|
|
8202
|
+
if (projectId === null) {
|
|
8203
|
+
return db.query("SELECT * FROM plans WHERE slug = ? AND project_id IS NULL ORDER BY created_at ASC, id ASC").all(slug);
|
|
8204
|
+
}
|
|
8205
|
+
return db.query("SELECT * FROM plans WHERE slug = ? AND project_id = ? ORDER BY created_at ASC, id ASC").all(slug, projectId);
|
|
8206
|
+
}
|
|
8207
|
+
return db.query("SELECT * FROM plans WHERE slug = ? ORDER BY created_at ASC, id ASC").all(slug);
|
|
8208
|
+
}
|
|
8209
|
+
function planSlugExists(slug, projectId, db, excludeId) {
|
|
8210
|
+
const rows = plansBySlug(slug, db, projectId);
|
|
8211
|
+
return rows.some((plan) => plan.id !== excludeId);
|
|
8212
|
+
}
|
|
8213
|
+
function nextPlanSlug(base, projectId, db, excludeId) {
|
|
8214
|
+
let candidate = base;
|
|
8215
|
+
let suffix = 2;
|
|
8216
|
+
while (planSlugExists(candidate, projectId, db, excludeId)) {
|
|
8217
|
+
candidate = `${base}-${suffix}`;
|
|
8218
|
+
suffix += 1;
|
|
8219
|
+
}
|
|
8220
|
+
return candidate;
|
|
8221
|
+
}
|
|
8222
|
+
function resolveCreateSlug(input, projectId, db) {
|
|
8223
|
+
if (input.slug !== undefined) {
|
|
8224
|
+
const slug = normalizePlanSlug(input.slug);
|
|
8225
|
+
if (planSlugExists(slug, projectId, db)) {
|
|
8226
|
+
throw new Error(`Plan slug already exists in this scope: ${slug}`);
|
|
8227
|
+
}
|
|
8228
|
+
return slug;
|
|
8229
|
+
}
|
|
8230
|
+
return nextPlanSlug(planSlugBase2(input.name), projectId, db);
|
|
8231
|
+
}
|
|
8145
8232
|
function createPlan(input, db) {
|
|
8146
8233
|
const d = db || getDatabase();
|
|
8147
8234
|
const id = uuid();
|
|
8148
8235
|
const timestamp = now();
|
|
8236
|
+
const projectId = input.project_id || null;
|
|
8237
|
+
const slug = resolveCreateSlug(input, projectId, d);
|
|
8149
8238
|
const machineId = currentStorageMachineId(d);
|
|
8150
|
-
d.run(`INSERT INTO plans (id, project_id, task_list_id, agent_id, name, description, status, created_at, updated_at, machine_id)
|
|
8151
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
8239
|
+
d.run(`INSERT INTO plans (id, slug, project_id, task_list_id, agent_id, name, description, status, created_at, updated_at, machine_id)
|
|
8240
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
8152
8241
|
id,
|
|
8153
|
-
|
|
8242
|
+
slug,
|
|
8243
|
+
projectId,
|
|
8154
8244
|
input.task_list_id || null,
|
|
8155
8245
|
input.agent_id || null,
|
|
8156
8246
|
input.name,
|
|
@@ -8185,6 +8275,14 @@ function updatePlan(id, input, db) {
|
|
|
8185
8275
|
sets.push("name = ?");
|
|
8186
8276
|
params.push(input.name);
|
|
8187
8277
|
}
|
|
8278
|
+
if (input.slug !== undefined) {
|
|
8279
|
+
const slug = normalizePlanSlug(input.slug);
|
|
8280
|
+
if (planSlugExists(slug, plan.project_id, d, id)) {
|
|
8281
|
+
throw new Error(`Plan slug already exists in this scope: ${slug}`);
|
|
8282
|
+
}
|
|
8283
|
+
sets.push("slug = ?");
|
|
8284
|
+
params.push(slug);
|
|
8285
|
+
}
|
|
8188
8286
|
if (input.description !== undefined) {
|
|
8189
8287
|
sets.push("description = ?");
|
|
8190
8288
|
params.push(input.description);
|
|
@@ -8229,6 +8327,7 @@ var init_plans = __esm(() => {
|
|
|
8229
8327
|
init_event_emission_safety();
|
|
8230
8328
|
init_event_hooks();
|
|
8231
8329
|
init_database();
|
|
8330
|
+
init_projects();
|
|
8232
8331
|
init_storage_tombstones();
|
|
8233
8332
|
});
|
|
8234
8333
|
|
|
@@ -12111,6 +12210,7 @@ async function handleCreatePlan(req, _ctx, json2) {
|
|
|
12111
12210
|
return json2({ error: "Missing 'name'" }, 400);
|
|
12112
12211
|
const plan = createPlan({
|
|
12113
12212
|
name: body.name,
|
|
12213
|
+
slug: body.slug,
|
|
12114
12214
|
description: body.description,
|
|
12115
12215
|
project_id: body.project_id,
|
|
12116
12216
|
task_list_id: body.task_list_id,
|
|
@@ -40130,6 +40230,7 @@ Tasks:` : null,
|
|
|
40130
40230
|
if (shouldRegisterTool("create_plan")) {
|
|
40131
40231
|
server.tool("create_plan", "Create a new plan (sprint/milestone).", {
|
|
40132
40232
|
name: exports_external.string().describe("Plan name"),
|
|
40233
|
+
slug: exports_external.string().optional().describe("Readable plan slug"),
|
|
40133
40234
|
project_id: exports_external.string().optional().describe("Project ID"),
|
|
40134
40235
|
description: exports_external.string().optional(),
|
|
40135
40236
|
start_date: exports_external.string().optional().describe("ISO date"),
|
|
@@ -70547,6 +70648,36 @@ function prepareValue(column, value) {
|
|
|
70547
70648
|
return JSON.stringify(value ?? (column === "tags" || column === "files_changed" ? [] : {}));
|
|
70548
70649
|
return value === undefined ? null : value;
|
|
70549
70650
|
}
|
|
70651
|
+
function slugifyPlanValue(value) {
|
|
70652
|
+
return typeof value === "string" ? value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") : "";
|
|
70653
|
+
}
|
|
70654
|
+
function planSlugBase3(plan) {
|
|
70655
|
+
return slugifyPlanValue(plan.slug) || slugifyPlanValue(plan.name) || "plan";
|
|
70656
|
+
}
|
|
70657
|
+
function planSlugScope(projectId) {
|
|
70658
|
+
return typeof projectId === "string" && projectId ? projectId : "__global__";
|
|
70659
|
+
}
|
|
70660
|
+
function planSlugKey(projectId, slug) {
|
|
70661
|
+
return `${planSlugScope(projectId)}:${slug}`;
|
|
70662
|
+
}
|
|
70663
|
+
function normalizeBridgePlanSlugs(plans, db) {
|
|
70664
|
+
const existingRows = db.query("SELECT id, project_id, slug FROM plans WHERE slug IS NOT NULL").all();
|
|
70665
|
+
const existingIds = new Set(existingRows.map((row) => row.id));
|
|
70666
|
+
const used = new Set(existingRows.filter((row) => row.slug).map((row) => planSlugKey(row.project_id, row.slug)));
|
|
70667
|
+
return plans.map((plan) => {
|
|
70668
|
+
if (existingIds.has(plan.id))
|
|
70669
|
+
return plan;
|
|
70670
|
+
const base = planSlugBase3(plan);
|
|
70671
|
+
let candidate = base;
|
|
70672
|
+
let suffix = 2;
|
|
70673
|
+
while (used.has(planSlugKey(plan.project_id, candidate))) {
|
|
70674
|
+
candidate = `${base}-${suffix}`;
|
|
70675
|
+
suffix += 1;
|
|
70676
|
+
}
|
|
70677
|
+
used.add(planSlugKey(plan.project_id, candidate));
|
|
70678
|
+
return { ...plan, slug: candidate };
|
|
70679
|
+
});
|
|
70680
|
+
}
|
|
70550
70681
|
function insertRecord(db, tableKey, row) {
|
|
70551
70682
|
const table = tableByKey[tableKey];
|
|
70552
70683
|
const columns = insertColumns[tableKey];
|
|
@@ -70683,6 +70814,7 @@ function importLocalBridgeBundle(bundle, options = {}, db) {
|
|
|
70683
70814
|
const conflictStrategy = options.conflictStrategy ?? "skip";
|
|
70684
70815
|
const data = {
|
|
70685
70816
|
...bundle.data,
|
|
70817
|
+
plans: normalizeBridgePlanSlugs(bundle.data.plans, d),
|
|
70686
70818
|
tasks: sortedTasks(bundle.data.tasks),
|
|
70687
70819
|
saved_views: bundle.data.saved_views ?? [],
|
|
70688
70820
|
task_boards: bundle.data.task_boards ?? [],
|
|
@@ -70767,7 +70899,7 @@ var init_local_bridge = __esm(() => {
|
|
|
70767
70899
|
insertColumns = {
|
|
70768
70900
|
projects: ["id", "name", "path", "description", "task_list_id", "task_prefix", "task_counter", "created_at", "updated_at", "machine_id", "synced_at"],
|
|
70769
70901
|
task_lists: ["id", "project_id", "slug", "name", "description", "metadata", "created_at", "updated_at", "machine_id", "synced_at"],
|
|
70770
|
-
plans: ["id", "project_id", "task_list_id", "agent_id", "name", "description", "status", "created_at", "updated_at", "machine_id", "synced_at"],
|
|
70902
|
+
plans: ["id", "slug", "project_id", "task_list_id", "agent_id", "name", "description", "status", "created_at", "updated_at", "machine_id", "synced_at"],
|
|
70771
70903
|
tasks: [
|
|
70772
70904
|
"id",
|
|
70773
70905
|
"short_id",
|
|
@@ -71269,6 +71401,7 @@ function createAgentProjectDemoBundle() {
|
|
|
71269
71401
|
});
|
|
71270
71402
|
data.plans.push({
|
|
71271
71403
|
id: ids.plan,
|
|
71404
|
+
slug: "ship-local-demo-workflow",
|
|
71272
71405
|
project_id: ids.project,
|
|
71273
71406
|
task_list_id: ids.list,
|
|
71274
71407
|
agent_id: "demo-agent",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.js
CHANGED
|
@@ -1328,6 +1328,11 @@ var init_migrations = __esm(() => {
|
|
|
1328
1328
|
CREATE INDEX IF NOT EXISTS idx_storage_tombstones_object ON storage_tombstones(object_type, object_id);
|
|
1329
1329
|
CREATE INDEX IF NOT EXISTS idx_storage_tombstones_updated ON storage_tombstones(updated_at);
|
|
1330
1330
|
INSERT OR IGNORE INTO _migrations (id) VALUES (63);
|
|
1331
|
+
`,
|
|
1332
|
+
`
|
|
1333
|
+
ALTER TABLE plans ADD COLUMN slug TEXT;
|
|
1334
|
+
CREATE INDEX IF NOT EXISTS idx_plans_slug ON plans(slug);
|
|
1335
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (64);
|
|
1331
1336
|
`
|
|
1332
1337
|
];
|
|
1333
1338
|
});
|
|
@@ -1351,6 +1356,29 @@ function runMigrations(db) {
|
|
|
1351
1356
|
}
|
|
1352
1357
|
ensureSchema(db);
|
|
1353
1358
|
}
|
|
1359
|
+
function planSlugBase(value) {
|
|
1360
|
+
return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") || "plan";
|
|
1361
|
+
}
|
|
1362
|
+
function backfillPlanSlugs(db) {
|
|
1363
|
+
try {
|
|
1364
|
+
const rows = db.query("SELECT id, project_id, name, slug FROM plans ORDER BY created_at ASC, id ASC").all();
|
|
1365
|
+
const used = new Set;
|
|
1366
|
+
for (const row of rows) {
|
|
1367
|
+
const scope = row.project_id ?? "__global__";
|
|
1368
|
+
const base = planSlugBase(row.slug || row.name);
|
|
1369
|
+
let candidate = base;
|
|
1370
|
+
let suffix = 2;
|
|
1371
|
+
while (used.has(`${scope}:${candidate}`)) {
|
|
1372
|
+
candidate = `${base}-${suffix}`;
|
|
1373
|
+
suffix += 1;
|
|
1374
|
+
}
|
|
1375
|
+
used.add(`${scope}:${candidate}`);
|
|
1376
|
+
if (row.slug !== candidate) {
|
|
1377
|
+
db.run("UPDATE plans SET slug = ? WHERE id = ?", [candidate, row.id]);
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
} catch {}
|
|
1381
|
+
}
|
|
1354
1382
|
function ensureSchema(db) {
|
|
1355
1383
|
const ensureColumn = (table, column, type) => {
|
|
1356
1384
|
try {
|
|
@@ -1400,7 +1428,8 @@ function ensureSchema(db) {
|
|
|
1400
1428
|
)`);
|
|
1401
1429
|
ensureTable("plans", `
|
|
1402
1430
|
CREATE TABLE plans (
|
|
1403
|
-
id TEXT PRIMARY KEY,
|
|
1431
|
+
id TEXT PRIMARY KEY, slug TEXT,
|
|
1432
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
1404
1433
|
task_list_id TEXT, agent_id TEXT,
|
|
1405
1434
|
name TEXT NOT NULL, description TEXT,
|
|
1406
1435
|
status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'completed', 'archived')),
|
|
@@ -1915,8 +1944,10 @@ function ensureSchema(db) {
|
|
|
1915
1944
|
ensureColumn("agents", "org_id", "TEXT");
|
|
1916
1945
|
ensureColumn("agents", "capabilities", "TEXT DEFAULT '[]'");
|
|
1917
1946
|
ensureColumn("projects", "org_id", "TEXT");
|
|
1947
|
+
ensureColumn("plans", "slug", "TEXT");
|
|
1918
1948
|
ensureColumn("plans", "task_list_id", "TEXT");
|
|
1919
1949
|
ensureColumn("plans", "agent_id", "TEXT");
|
|
1950
|
+
backfillPlanSlugs(db);
|
|
1920
1951
|
ensureColumn("task_templates", "variables", "TEXT DEFAULT '[]'");
|
|
1921
1952
|
ensureColumn("task_templates", "version", "INTEGER NOT NULL DEFAULT 1");
|
|
1922
1953
|
ensureColumn("template_tasks", "condition", "TEXT");
|
|
@@ -2031,6 +2062,8 @@ function ensureSchema(db) {
|
|
|
2031
2062
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tags_name ON tags(name)");
|
|
2032
2063
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_project ON plans(project_id)");
|
|
2033
2064
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_status ON plans(status)");
|
|
2065
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_slug ON plans(slug)");
|
|
2066
|
+
ensureIndex("CREATE UNIQUE INDEX IF NOT EXISTS idx_plans_scope_slug ON plans(COALESCE(project_id, ''), slug) WHERE slug IS NOT NULL");
|
|
2034
2067
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_task_list ON plans(task_list_id)");
|
|
2035
2068
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_plans_agent ON plans(agent_id)");
|
|
2036
2069
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_history_task ON task_history(task_id)");
|
|
@@ -2864,6 +2897,9 @@ function clearExpiredLocks(db) {
|
|
|
2864
2897
|
const cutoff = lockExpiryCutoff();
|
|
2865
2898
|
db.run("UPDATE tasks SET locked_by = NULL, locked_at = NULL WHERE locked_at IS NOT NULL AND locked_at < ?", [cutoff]);
|
|
2866
2899
|
}
|
|
2900
|
+
function slugifyRef(value) {
|
|
2901
|
+
return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
2902
|
+
}
|
|
2867
2903
|
function resolvePartialId(db, table, partialId) {
|
|
2868
2904
|
if (!ALLOWED_TABLES.has(table)) {
|
|
2869
2905
|
throw new Error(`Invalid table name: ${table}`);
|
|
@@ -2890,6 +2926,16 @@ function resolvePartialId(db, table, partialId) {
|
|
|
2890
2926
|
if (slugRow)
|
|
2891
2927
|
return slugRow.id;
|
|
2892
2928
|
}
|
|
2929
|
+
if (table === "plans") {
|
|
2930
|
+
const slug = slugifyRef(partialId);
|
|
2931
|
+
if (slug) {
|
|
2932
|
+
const slugRows = db.query("SELECT id FROM plans WHERE slug = ?").all(slug);
|
|
2933
|
+
if (slugRows.length === 1)
|
|
2934
|
+
return slugRows[0].id;
|
|
2935
|
+
if (slugRows.length > 1)
|
|
2936
|
+
return null;
|
|
2937
|
+
}
|
|
2938
|
+
}
|
|
2893
2939
|
if (table === "projects") {
|
|
2894
2940
|
const nameRow = db.query("SELECT id FROM projects WHERE lower(name) = ?").get(partialId.toLowerCase());
|
|
2895
2941
|
if (nameRow)
|
|
@@ -8179,15 +8225,59 @@ init_database();
|
|
|
8179
8225
|
// src/db/plans.ts
|
|
8180
8226
|
init_types();
|
|
8181
8227
|
init_database();
|
|
8228
|
+
function planSlugBase2(value) {
|
|
8229
|
+
return slugify(value) || "plan";
|
|
8230
|
+
}
|
|
8231
|
+
function normalizePlanSlug(value) {
|
|
8232
|
+
const slug = slugify(value);
|
|
8233
|
+
if (!slug)
|
|
8234
|
+
throw new Error("Invalid plan slug");
|
|
8235
|
+
return slug;
|
|
8236
|
+
}
|
|
8237
|
+
function plansBySlug(slug, db, projectId) {
|
|
8238
|
+
if (projectId !== undefined) {
|
|
8239
|
+
if (projectId === null) {
|
|
8240
|
+
return db.query("SELECT * FROM plans WHERE slug = ? AND project_id IS NULL ORDER BY created_at ASC, id ASC").all(slug);
|
|
8241
|
+
}
|
|
8242
|
+
return db.query("SELECT * FROM plans WHERE slug = ? AND project_id = ? ORDER BY created_at ASC, id ASC").all(slug, projectId);
|
|
8243
|
+
}
|
|
8244
|
+
return db.query("SELECT * FROM plans WHERE slug = ? ORDER BY created_at ASC, id ASC").all(slug);
|
|
8245
|
+
}
|
|
8246
|
+
function planSlugExists(slug, projectId, db, excludeId) {
|
|
8247
|
+
const rows = plansBySlug(slug, db, projectId);
|
|
8248
|
+
return rows.some((plan) => plan.id !== excludeId);
|
|
8249
|
+
}
|
|
8250
|
+
function nextPlanSlug(base, projectId, db, excludeId) {
|
|
8251
|
+
let candidate = base;
|
|
8252
|
+
let suffix = 2;
|
|
8253
|
+
while (planSlugExists(candidate, projectId, db, excludeId)) {
|
|
8254
|
+
candidate = `${base}-${suffix}`;
|
|
8255
|
+
suffix += 1;
|
|
8256
|
+
}
|
|
8257
|
+
return candidate;
|
|
8258
|
+
}
|
|
8259
|
+
function resolveCreateSlug(input, projectId, db) {
|
|
8260
|
+
if (input.slug !== undefined) {
|
|
8261
|
+
const slug = normalizePlanSlug(input.slug);
|
|
8262
|
+
if (planSlugExists(slug, projectId, db)) {
|
|
8263
|
+
throw new Error(`Plan slug already exists in this scope: ${slug}`);
|
|
8264
|
+
}
|
|
8265
|
+
return slug;
|
|
8266
|
+
}
|
|
8267
|
+
return nextPlanSlug(planSlugBase2(input.name), projectId, db);
|
|
8268
|
+
}
|
|
8182
8269
|
function createPlan(input, db) {
|
|
8183
8270
|
const d = db || getDatabase();
|
|
8184
8271
|
const id = uuid();
|
|
8185
8272
|
const timestamp = now();
|
|
8273
|
+
const projectId = input.project_id || null;
|
|
8274
|
+
const slug = resolveCreateSlug(input, projectId, d);
|
|
8186
8275
|
const machineId = currentStorageMachineId(d);
|
|
8187
|
-
d.run(`INSERT INTO plans (id, project_id, task_list_id, agent_id, name, description, status, created_at, updated_at, machine_id)
|
|
8188
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
8276
|
+
d.run(`INSERT INTO plans (id, slug, project_id, task_list_id, agent_id, name, description, status, created_at, updated_at, machine_id)
|
|
8277
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
8189
8278
|
id,
|
|
8190
|
-
|
|
8279
|
+
slug,
|
|
8280
|
+
projectId,
|
|
8191
8281
|
input.task_list_id || null,
|
|
8192
8282
|
input.agent_id || null,
|
|
8193
8283
|
input.name,
|
|
@@ -8222,6 +8312,14 @@ function updatePlan(id, input, db) {
|
|
|
8222
8312
|
sets.push("name = ?");
|
|
8223
8313
|
params.push(input.name);
|
|
8224
8314
|
}
|
|
8315
|
+
if (input.slug !== undefined) {
|
|
8316
|
+
const slug = normalizePlanSlug(input.slug);
|
|
8317
|
+
if (planSlugExists(slug, plan.project_id, d, id)) {
|
|
8318
|
+
throw new Error(`Plan slug already exists in this scope: ${slug}`);
|
|
8319
|
+
}
|
|
8320
|
+
sets.push("slug = ?");
|
|
8321
|
+
params.push(slug);
|
|
8322
|
+
}
|
|
8225
8323
|
if (input.description !== undefined) {
|
|
8226
8324
|
sets.push("description = ?");
|
|
8227
8325
|
params.push(input.description);
|
|
@@ -11822,9 +11920,17 @@ async function updateProject2(id, input, store) {
|
|
|
11822
11920
|
}
|
|
11823
11921
|
async function createPlan2(input, store, context) {
|
|
11824
11922
|
const timestamp = new Date().toISOString();
|
|
11923
|
+
const projectId = input.project_id ?? context?.projectId ?? null;
|
|
11924
|
+
const slug = await resolvePostgresPlanSlug({
|
|
11925
|
+
name: input.name,
|
|
11926
|
+
slug: input.slug,
|
|
11927
|
+
projectId,
|
|
11928
|
+
store
|
|
11929
|
+
});
|
|
11825
11930
|
return store.upsert("plans", {
|
|
11826
11931
|
id: randomUUID3(),
|
|
11827
|
-
|
|
11932
|
+
slug,
|
|
11933
|
+
project_id: projectId,
|
|
11828
11934
|
task_list_id: input.task_list_id ?? context?.taskListId ?? null,
|
|
11829
11935
|
agent_id: input.agent_id ?? context?.agentId ?? null,
|
|
11830
11936
|
name: input.name,
|
|
@@ -11838,7 +11944,17 @@ async function createPlan2(input, store, context) {
|
|
|
11838
11944
|
}
|
|
11839
11945
|
async function updatePlan2(id, input, store) {
|
|
11840
11946
|
const plan = await requireRecord("plans", id, store);
|
|
11841
|
-
|
|
11947
|
+
const patch = definedPatch(input);
|
|
11948
|
+
if (input.slug !== undefined) {
|
|
11949
|
+
patch.slug = await resolvePostgresPlanSlug({
|
|
11950
|
+
name: plan.name,
|
|
11951
|
+
slug: input.slug,
|
|
11952
|
+
projectId: plan.project_id,
|
|
11953
|
+
store,
|
|
11954
|
+
excludeId: id
|
|
11955
|
+
});
|
|
11956
|
+
}
|
|
11957
|
+
return store.upsert("plans", { ...plan, ...patch, updated_at: new Date().toISOString() });
|
|
11842
11958
|
}
|
|
11843
11959
|
async function registerAgent2(input, store, context) {
|
|
11844
11960
|
const existing = (await store.list("agents")).find((agent2) => agent2.name === input.name && agent2.status !== "archived");
|
|
@@ -12091,8 +12207,38 @@ function matchesOne(value, expected) {
|
|
|
12091
12207
|
function priorityRank(priority) {
|
|
12092
12208
|
return { critical: 0, high: 1, medium: 2, low: 3 }[priority];
|
|
12093
12209
|
}
|
|
12210
|
+
function slugifyRaw(value) {
|
|
12211
|
+
return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
12212
|
+
}
|
|
12094
12213
|
function slugify2(value) {
|
|
12095
|
-
return value
|
|
12214
|
+
return slugifyRaw(value) || "todos";
|
|
12215
|
+
}
|
|
12216
|
+
function normalizePlanSlug2(value) {
|
|
12217
|
+
const slug = slugifyRaw(value);
|
|
12218
|
+
if (!slug)
|
|
12219
|
+
throw new Error("Invalid plan slug");
|
|
12220
|
+
return slug;
|
|
12221
|
+
}
|
|
12222
|
+
function planSlugBase3(value) {
|
|
12223
|
+
return slugifyRaw(value) || "plan";
|
|
12224
|
+
}
|
|
12225
|
+
async function resolvePostgresPlanSlug(options) {
|
|
12226
|
+
const plans = await options.store.list("plans");
|
|
12227
|
+
const used = new Set(plans.filter((plan) => plan.project_id === options.projectId && plan.id !== options.excludeId && plan.slug).map((plan) => plan.slug));
|
|
12228
|
+
if (options.slug !== undefined) {
|
|
12229
|
+
const slug = normalizePlanSlug2(options.slug);
|
|
12230
|
+
if (used.has(slug))
|
|
12231
|
+
throw new Error(`Plan slug already exists in this scope: ${slug}`);
|
|
12232
|
+
return slug;
|
|
12233
|
+
}
|
|
12234
|
+
const base = planSlugBase3(options.name);
|
|
12235
|
+
let candidate = base;
|
|
12236
|
+
let suffix = 2;
|
|
12237
|
+
while (used.has(candidate)) {
|
|
12238
|
+
candidate = `${base}-${suffix}`;
|
|
12239
|
+
suffix += 1;
|
|
12240
|
+
}
|
|
12241
|
+
return candidate;
|
|
12096
12242
|
}
|
|
12097
12243
|
function definedPatch(value) {
|
|
12098
12244
|
return Object.fromEntries(Object.entries(value).filter(([, entry2]) => entry2 !== undefined));
|
package/dist/types/index.d.ts
CHANGED
|
@@ -70,6 +70,7 @@ export interface CreateOrgInput {
|
|
|
70
70
|
}
|
|
71
71
|
export interface Plan {
|
|
72
72
|
id: string;
|
|
73
|
+
slug: string | null;
|
|
73
74
|
project_id: string | null;
|
|
74
75
|
task_list_id: string | null;
|
|
75
76
|
agent_id: string | null;
|
|
@@ -83,6 +84,7 @@ export interface Plan {
|
|
|
83
84
|
}
|
|
84
85
|
export interface CreatePlanInput {
|
|
85
86
|
name: string;
|
|
87
|
+
slug?: string;
|
|
86
88
|
project_id?: string;
|
|
87
89
|
task_list_id?: string;
|
|
88
90
|
agent_id?: string;
|
|
@@ -91,6 +93,7 @@ export interface CreatePlanInput {
|
|
|
91
93
|
}
|
|
92
94
|
export interface UpdatePlanInput {
|
|
93
95
|
name?: string;
|
|
96
|
+
slug?: string;
|
|
94
97
|
description?: string;
|
|
95
98
|
status?: PlanStatus;
|
|
96
99
|
task_list_id?: string;
|