@hasna/todos 0.15.25 → 0.15.26
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/cloud-router.d.ts +7 -0
- package/dist/cli/cloud-router.d.ts.map +1 -1
- package/dist/cli/commands/task-manifest-commands.d.ts +3 -0
- package/dist/cli/commands/task-manifest-commands.d.ts.map +1 -0
- package/dist/cli/index.js +776 -25
- package/dist/contracts.js +4 -2
- package/dist/index.js +13 -5
- package/dist/mcp/index.js +14 -3
- package/dist/mcp.js +4 -2
- package/dist/project-registration.js +4 -2
- package/dist/registry.js +4 -2
- package/dist/release-provenance.json +5 -5
- package/dist/server/index.js +78 -67
- package/dist/task-manifest/plan-slug.d.ts +11 -0
- package/dist/task-manifest/plan-slug.d.ts.map +1 -0
- package/dist/task-manifest/postgres.d.ts.map +1 -1
- package/dist/task-manifest/sqlite.d.ts.map +1 -1
- package/dist/task-manifest.js +9 -3
- package/package.json +4 -2
package/dist/contracts.js
CHANGED
|
@@ -12658,7 +12658,7 @@ var init_tasks = __esm(() => {
|
|
|
12658
12658
|
// package.json
|
|
12659
12659
|
var package_default = {
|
|
12660
12660
|
name: "@hasna/todos",
|
|
12661
|
-
version: "0.15.
|
|
12661
|
+
version: "0.15.26",
|
|
12662
12662
|
description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
|
|
12663
12663
|
type: "module",
|
|
12664
12664
|
main: "dist/index.js",
|
|
@@ -12707,7 +12707,8 @@ var package_default = {
|
|
|
12707
12707
|
}
|
|
12708
12708
|
},
|
|
12709
12709
|
workspaces: [
|
|
12710
|
-
"dashboard"
|
|
12710
|
+
"dashboard",
|
|
12711
|
+
"ai"
|
|
12711
12712
|
],
|
|
12712
12713
|
files: [
|
|
12713
12714
|
"dist",
|
|
@@ -12778,6 +12779,7 @@ var package_default = {
|
|
|
12778
12779
|
zod: "^3.24.2"
|
|
12779
12780
|
},
|
|
12780
12781
|
overrides: {
|
|
12782
|
+
ajv: "8.20.0",
|
|
12781
12783
|
"fast-uri": "3.1.2"
|
|
12782
12784
|
},
|
|
12783
12785
|
devDependencies: {
|
package/dist/index.js
CHANGED
|
@@ -12771,7 +12771,7 @@ var init_dispatches = __esm(() => {
|
|
|
12771
12771
|
// package.json
|
|
12772
12772
|
var package_default = {
|
|
12773
12773
|
name: "@hasna/todos",
|
|
12774
|
-
version: "0.15.
|
|
12774
|
+
version: "0.15.26",
|
|
12775
12775
|
description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
|
|
12776
12776
|
type: "module",
|
|
12777
12777
|
main: "dist/index.js",
|
|
@@ -12820,7 +12820,8 @@ var package_default = {
|
|
|
12820
12820
|
}
|
|
12821
12821
|
},
|
|
12822
12822
|
workspaces: [
|
|
12823
|
-
"dashboard"
|
|
12823
|
+
"dashboard",
|
|
12824
|
+
"ai"
|
|
12824
12825
|
],
|
|
12825
12826
|
files: [
|
|
12826
12827
|
"dist",
|
|
@@ -12891,6 +12892,7 @@ var package_default = {
|
|
|
12891
12892
|
zod: "^3.24.2"
|
|
12892
12893
|
},
|
|
12893
12894
|
overrides: {
|
|
12895
|
+
ajv: "8.20.0",
|
|
12894
12896
|
"fast-uri": "3.1.2"
|
|
12895
12897
|
},
|
|
12896
12898
|
devDependencies: {
|
|
@@ -40426,6 +40428,12 @@ function parseTodosTaskManifestBindingLookup(input) {
|
|
|
40426
40428
|
return parsed.data;
|
|
40427
40429
|
}
|
|
40428
40430
|
|
|
40431
|
+
// src/task-manifest/plan-slug.ts
|
|
40432
|
+
function taskManifestPlanSlug(manifest, planId) {
|
|
40433
|
+
const base = normalizeSlug(manifest.plan.key) || normalizeSlug(manifest.plan.name) || "plan";
|
|
40434
|
+
return `${base}-${planId}`;
|
|
40435
|
+
}
|
|
40436
|
+
|
|
40429
40437
|
// src/task-manifest/backend.ts
|
|
40430
40438
|
var UUID_PATTERN2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
40431
40439
|
function validateTaskManifestBindingLookupRows(rows, tenantId, planId) {
|
|
@@ -40776,7 +40784,7 @@ class SqliteTodosTaskManifestBackend {
|
|
|
40776
40784
|
}
|
|
40777
40785
|
}
|
|
40778
40786
|
this.db.query(`INSERT INTO plans (id, project_id, name, description, status, task_list_id, slug, created_at, updated_at)
|
|
40779
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(input.graph.plan_id, manifest.project_id, manifest.plan.name, manifest.plan.description ?? null, manifest.plan.status ?? "active", manifest.task_list_id ?? null,
|
|
40787
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(input.graph.plan_id, manifest.project_id, manifest.plan.name, manifest.plan.description ?? null, manifest.plan.status ?? "active", manifest.task_list_id ?? null, taskManifestPlanSlug(manifest, input.graph.plan_id), input.now, input.now);
|
|
40780
40788
|
fault(faults, "after_plan_write");
|
|
40781
40789
|
for (const task3 of manifest.tasks) {
|
|
40782
40790
|
const taskId = input.graph.task_ids[task3.key];
|
|
@@ -40999,7 +41007,7 @@ class SqliteTodosTaskManifestBackend {
|
|
|
40999
41007
|
throw new TodosTaskManifestError("TODOS_TASK_MANIFEST_COMPENSATION_REFUSED", "Compensation refused: graph changed since apply", { actualReadback });
|
|
41000
41008
|
}
|
|
41001
41009
|
const plan = this.db.query("SELECT project_id, name, description, status, task_list_id, slug FROM plans WHERE id = ? LIMIT 1").get(applyResult.graph.plan_id);
|
|
41002
|
-
if (!plan || plan["project_id"] !== manifest.project_id || plan["name"] !== manifest.plan.name || plan["description"] !== (manifest.plan.description ?? null) || plan["status"] !== (manifest.plan.status ?? "active") || plan["task_list_id"] !== (manifest.task_list_id ?? null) || plan["slug"] !==
|
|
41010
|
+
if (!plan || plan["project_id"] !== manifest.project_id || plan["name"] !== manifest.plan.name || plan["description"] !== (manifest.plan.description ?? null) || plan["status"] !== (manifest.plan.status ?? "active") || plan["task_list_id"] !== (manifest.task_list_id ?? null) || plan["slug"] !== taskManifestPlanSlug(manifest, applyResult.graph.plan_id)) {
|
|
41003
41011
|
throw new TodosTaskManifestError("TODOS_TASK_MANIFEST_COMPENSATION_REFUSED", "Compensation refused: plan changed since apply");
|
|
41004
41012
|
}
|
|
41005
41013
|
for (const task3 of manifest.tasks) {
|
|
@@ -41197,7 +41205,7 @@ function taskPayload2(manifest, task3, taskId, planId, now4) {
|
|
|
41197
41205
|
function planPayload(input) {
|
|
41198
41206
|
return {
|
|
41199
41207
|
id: input.graph.plan_id,
|
|
41200
|
-
slug:
|
|
41208
|
+
slug: taskManifestPlanSlug(input.manifest, input.graph.plan_id),
|
|
41201
41209
|
project_id: input.manifest.project_id,
|
|
41202
41210
|
task_list_id: input.manifest.task_list_id ?? null,
|
|
41203
41211
|
agent_id: null,
|
package/dist/mcp/index.js
CHANGED
|
@@ -35803,7 +35803,7 @@ var package_default;
|
|
|
35803
35803
|
var init_package = __esm(() => {
|
|
35804
35804
|
package_default = {
|
|
35805
35805
|
name: "@hasna/todos",
|
|
35806
|
-
version: "0.15.
|
|
35806
|
+
version: "0.15.26",
|
|
35807
35807
|
description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
|
|
35808
35808
|
type: "module",
|
|
35809
35809
|
main: "dist/index.js",
|
|
@@ -35852,7 +35852,8 @@ var init_package = __esm(() => {
|
|
|
35852
35852
|
}
|
|
35853
35853
|
},
|
|
35854
35854
|
workspaces: [
|
|
35855
|
-
"dashboard"
|
|
35855
|
+
"dashboard",
|
|
35856
|
+
"ai"
|
|
35856
35857
|
],
|
|
35857
35858
|
files: [
|
|
35858
35859
|
"dist",
|
|
@@ -35923,6 +35924,7 @@ var init_package = __esm(() => {
|
|
|
35923
35924
|
zod: "^3.24.2"
|
|
35924
35925
|
},
|
|
35925
35926
|
overrides: {
|
|
35927
|
+
ajv: "8.20.0",
|
|
35926
35928
|
"fast-uri": "3.1.2"
|
|
35927
35929
|
},
|
|
35928
35930
|
devDependencies: {
|
|
@@ -51828,6 +51830,13 @@ var init_schema2 = __esm(() => {
|
|
|
51828
51830
|
}).strict();
|
|
51829
51831
|
});
|
|
51830
51832
|
|
|
51833
|
+
// src/task-manifest/plan-slug.ts
|
|
51834
|
+
function taskManifestPlanSlug(manifest, planId) {
|
|
51835
|
+
const base = normalizeSlug(manifest.plan.key) || normalizeSlug(manifest.plan.name) || "plan";
|
|
51836
|
+
return `${base}-${planId}`;
|
|
51837
|
+
}
|
|
51838
|
+
var init_plan_slug = () => {};
|
|
51839
|
+
|
|
51831
51840
|
// src/task-manifest/backend.ts
|
|
51832
51841
|
function validateTaskManifestBindingLookupRows(rows, tenantId, planId) {
|
|
51833
51842
|
if (rows.length === 0) {
|
|
@@ -51964,6 +51973,7 @@ function postgresTodosTaskManifestSchemaSql(tenantId = "default") {
|
|
|
51964
51973
|
var sqliteTails;
|
|
51965
51974
|
var init_sqlite2 = __esm(() => {
|
|
51966
51975
|
init_canonical();
|
|
51976
|
+
init_plan_slug();
|
|
51967
51977
|
init_backend();
|
|
51968
51978
|
init_types5();
|
|
51969
51979
|
sqliteTails = new WeakMap;
|
|
@@ -52064,7 +52074,7 @@ function taskPayload2(manifest, task3, taskId, planId, now4) {
|
|
|
52064
52074
|
function planPayload(input) {
|
|
52065
52075
|
return {
|
|
52066
52076
|
id: input.graph.plan_id,
|
|
52067
|
-
slug:
|
|
52077
|
+
slug: taskManifestPlanSlug(input.manifest, input.graph.plan_id),
|
|
52068
52078
|
project_id: input.manifest.project_id,
|
|
52069
52079
|
task_list_id: input.manifest.task_list_id ?? null,
|
|
52070
52080
|
agent_id: null,
|
|
@@ -52613,6 +52623,7 @@ class PostgresTodosTaskManifestBackend {
|
|
|
52613
52623
|
}
|
|
52614
52624
|
var init_postgres3 = __esm(() => {
|
|
52615
52625
|
init_canonical();
|
|
52626
|
+
init_plan_slug();
|
|
52616
52627
|
init_backend();
|
|
52617
52628
|
init_postgres_sync();
|
|
52618
52629
|
init_types5();
|
package/dist/mcp.js
CHANGED
|
@@ -41,7 +41,7 @@ var __require = import.meta.require;
|
|
|
41
41
|
// package.json
|
|
42
42
|
var package_default = {
|
|
43
43
|
name: "@hasna/todos",
|
|
44
|
-
version: "0.15.
|
|
44
|
+
version: "0.15.26",
|
|
45
45
|
description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
|
|
46
46
|
type: "module",
|
|
47
47
|
main: "dist/index.js",
|
|
@@ -90,7 +90,8 @@ var package_default = {
|
|
|
90
90
|
}
|
|
91
91
|
},
|
|
92
92
|
workspaces: [
|
|
93
|
-
"dashboard"
|
|
93
|
+
"dashboard",
|
|
94
|
+
"ai"
|
|
94
95
|
],
|
|
95
96
|
files: [
|
|
96
97
|
"dist",
|
|
@@ -161,6 +162,7 @@ var package_default = {
|
|
|
161
162
|
zod: "^3.24.2"
|
|
162
163
|
},
|
|
163
164
|
overrides: {
|
|
165
|
+
ajv: "8.20.0",
|
|
164
166
|
"fast-uri": "3.1.2"
|
|
165
167
|
},
|
|
166
168
|
devDependencies: {
|
|
@@ -12661,7 +12661,7 @@ import { createHash as createHash6 } from "crypto";
|
|
|
12661
12661
|
// package.json
|
|
12662
12662
|
var package_default = {
|
|
12663
12663
|
name: "@hasna/todos",
|
|
12664
|
-
version: "0.15.
|
|
12664
|
+
version: "0.15.26",
|
|
12665
12665
|
description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
|
|
12666
12666
|
type: "module",
|
|
12667
12667
|
main: "dist/index.js",
|
|
@@ -12710,7 +12710,8 @@ var package_default = {
|
|
|
12710
12710
|
}
|
|
12711
12711
|
},
|
|
12712
12712
|
workspaces: [
|
|
12713
|
-
"dashboard"
|
|
12713
|
+
"dashboard",
|
|
12714
|
+
"ai"
|
|
12714
12715
|
],
|
|
12715
12716
|
files: [
|
|
12716
12717
|
"dist",
|
|
@@ -12781,6 +12782,7 @@ var package_default = {
|
|
|
12781
12782
|
zod: "^3.24.2"
|
|
12782
12783
|
},
|
|
12783
12784
|
overrides: {
|
|
12785
|
+
ajv: "8.20.0",
|
|
12784
12786
|
"fast-uri": "3.1.2"
|
|
12785
12787
|
},
|
|
12786
12788
|
devDependencies: {
|
package/dist/registry.js
CHANGED
|
@@ -12658,7 +12658,7 @@ var init_tasks = __esm(() => {
|
|
|
12658
12658
|
// package.json
|
|
12659
12659
|
var package_default = {
|
|
12660
12660
|
name: "@hasna/todos",
|
|
12661
|
-
version: "0.15.
|
|
12661
|
+
version: "0.15.26",
|
|
12662
12662
|
description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
|
|
12663
12663
|
type: "module",
|
|
12664
12664
|
main: "dist/index.js",
|
|
@@ -12707,7 +12707,8 @@ var package_default = {
|
|
|
12707
12707
|
}
|
|
12708
12708
|
},
|
|
12709
12709
|
workspaces: [
|
|
12710
|
-
"dashboard"
|
|
12710
|
+
"dashboard",
|
|
12711
|
+
"ai"
|
|
12711
12712
|
],
|
|
12712
12713
|
files: [
|
|
12713
12714
|
"dist",
|
|
@@ -12778,6 +12779,7 @@ var package_default = {
|
|
|
12778
12779
|
zod: "^3.24.2"
|
|
12779
12780
|
},
|
|
12780
12781
|
overrides: {
|
|
12782
|
+
ajv: "8.20.0",
|
|
12781
12783
|
"fast-uri": "3.1.2"
|
|
12782
12784
|
},
|
|
12783
12785
|
devDependencies: {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"packageName": "@hasna/todos",
|
|
3
|
-
"packageVersion": "0.15.
|
|
3
|
+
"packageVersion": "0.15.26",
|
|
4
4
|
"repository": "https://github.com/hasna/todos.git",
|
|
5
|
-
"gitCommit": "
|
|
6
|
-
"gitTree": "
|
|
7
|
-
"sourceTreeSha256": "
|
|
8
|
-
"generatedAt": "2026-08-
|
|
5
|
+
"gitCommit": "34751c1061a1947a6744a6258edc3a35e2c44e5f",
|
|
6
|
+
"gitTree": "c475638e8e15e320c77788bb801751180b96360a",
|
|
7
|
+
"sourceTreeSha256": "86687d0033f4f9f66be50d537891bbf47cfeee33518b064df796d1c04b42c987",
|
|
8
|
+
"generatedAt": "2026-08-10T21:23:08.000Z"
|
|
9
9
|
}
|