@hasna/todos 0.13.2 → 0.13.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +78 -14
  2. package/dist/cli/cloud-router.d.ts +100 -7
  3. package/dist/cli/cloud-router.d.ts.map +1 -1
  4. package/dist/cli/commands/agent-commands.d.ts.map +1 -1
  5. package/dist/cli/commands/query-commands.d.ts.map +1 -1
  6. package/dist/cli/doctor-integrity.d.ts +106 -0
  7. package/dist/cli/doctor-integrity.d.ts.map +1 -0
  8. package/dist/cli/helpers.d.ts +2 -2
  9. package/dist/cli/index.js +1509 -786
  10. package/dist/cli/stage-a.d.ts.map +1 -1
  11. package/dist/contracts.js +118 -30
  12. package/dist/db/agent-names.d.ts +2 -1
  13. package/dist/db/agent-names.d.ts.map +1 -1
  14. package/dist/db/database.d.ts.map +1 -1
  15. package/dist/db/findings.d.ts +1 -0
  16. package/dist/db/findings.d.ts.map +1 -1
  17. package/dist/db/integrity.d.ts +20 -0
  18. package/dist/db/integrity.d.ts.map +1 -0
  19. package/dist/index.d.ts +5 -2
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +584 -140
  22. package/dist/lib/agent-name-normalize.d.ts +17 -0
  23. package/dist/lib/agent-name-normalize.d.ts.map +1 -0
  24. package/dist/lib/context-packs.d.ts +1 -0
  25. package/dist/lib/context-packs.d.ts.map +1 -1
  26. package/dist/lib/dependency-graph.d.ts +1 -1
  27. package/dist/lib/doctor.d.ts +20 -0
  28. package/dist/lib/doctor.d.ts.map +1 -1
  29. package/dist/lib/integrity.d.ts +215 -0
  30. package/dist/lib/integrity.d.ts.map +1 -0
  31. package/dist/lib/native-storage-status.d.ts +2 -2
  32. package/dist/lib/native-storage-status.d.ts.map +1 -1
  33. package/dist/lib/release-compatibility.d.ts.map +1 -1
  34. package/dist/lib/task-dedupe.d.ts +15 -0
  35. package/dist/lib/task-dedupe.d.ts.map +1 -1
  36. package/dist/mcp/index.d.ts.map +1 -1
  37. package/dist/mcp/index.js +554 -92
  38. package/dist/mcp.js +7 -3
  39. package/dist/registry.d.ts +1 -1
  40. package/dist/registry.d.ts.map +1 -1
  41. package/dist/registry.js +125 -30
  42. package/dist/release-provenance.json +5 -5
  43. package/dist/sdk/types.d.ts +42 -0
  44. package/dist/sdk/types.d.ts.map +1 -1
  45. package/dist/sdk/v1.generated.d.ts +1 -0
  46. package/dist/sdk/v1.generated.d.ts.map +1 -1
  47. package/dist/server/cloud.d.ts +8 -1
  48. package/dist/server/cloud.d.ts.map +1 -1
  49. package/dist/server/index.js +560 -98
  50. package/dist/server/openapi.d.ts +12 -0
  51. package/dist/server/openapi.d.ts.map +1 -1
  52. package/dist/server/serve.d.ts.map +1 -1
  53. package/dist/server/v1.d.ts.map +1 -1
  54. package/dist/storage/config.d.ts +23 -5
  55. package/dist/storage/config.d.ts.map +1 -1
  56. package/dist/storage/factory.d.ts +9 -3
  57. package/dist/storage/factory.d.ts.map +1 -1
  58. package/dist/storage/hybrid.d.ts +7 -0
  59. package/dist/storage/hybrid.d.ts.map +1 -1
  60. package/dist/storage/index.d.ts +3 -3
  61. package/dist/storage/index.d.ts.map +1 -1
  62. package/dist/storage/interfaces.d.ts +29 -8
  63. package/dist/storage/interfaces.d.ts.map +1 -1
  64. package/dist/storage/local-sqlite.d.ts.map +1 -1
  65. package/dist/storage/postgres-adapter.d.ts.map +1 -1
  66. package/dist/storage.d.ts +3 -3
  67. package/dist/storage.d.ts.map +1 -1
  68. package/dist/storage.js +623 -258
  69. package/dist/testing.d.ts +79 -0
  70. package/dist/testing.d.ts.map +1 -0
  71. package/dist/testing.js +107 -0
  72. package/dist/types/index.d.ts +12 -1
  73. package/dist/types/index.d.ts.map +1 -1
  74. package/package.json +7 -3
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.13.2",
44
+ version: "0.13.4",
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",
@@ -75,6 +75,10 @@ var package_default = {
75
75
  "./storage": {
76
76
  types: "./dist/storage.d.ts",
77
77
  import: "./dist/storage.js"
78
+ },
79
+ "./testing": {
80
+ types: "./dist/testing.d.ts",
81
+ import: "./dist/testing.js"
78
82
  }
79
83
  },
80
84
  workspaces: [
@@ -87,8 +91,8 @@ var package_default = {
87
91
  "README.md"
88
92
  ],
89
93
  scripts: {
90
- build: "rm -rf dist dashboard/dist && cd dashboard && bun install --frozen-lockfile && bun run build && cd .. && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && tsc --emitDeclarationOnly --outDir dist",
91
- "build:server": "rm -rf dist && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*'",
94
+ build: "rm -rf dist dashboard/dist && cd dashboard && bun install --frozen-lockfile && bun run build && cd .. && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts src/testing.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && tsc --emitDeclarationOnly --outDir dist",
95
+ "build:server": "rm -rf dist && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts src/testing.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*'",
92
96
  migrate: "bun run src/server/index.ts migrate",
93
97
  "backfill:comment-redaction": "bun run src/server/index.ts redact-comments",
94
98
  "generate:sdk": "bun run scripts/generate-sdk.ts",
@@ -12,7 +12,7 @@ export interface TodosPackageSource {
12
12
  version: string;
13
13
  }
14
14
  export interface TodosPackageExportContract {
15
- subpath: "." | "./sdk" | "./mcp" | "./registry" | "./contracts" | "./storage";
15
+ subpath: "." | "./sdk" | "./mcp" | "./registry" | "./contracts" | "./storage" | "./testing";
16
16
  import: string;
17
17
  types: string;
18
18
  description: string;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,GAAG,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,CAAC;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,YAAY,EAAE,uBAAuB,CAAC;IACtC,SAAS,EAAE,sBAAsB,CAAC;IAClC,GAAG,EAAE,gBAAgB,CAAC;IACtB,YAAY,EAAE,yBAAyB,CAAC;CACzC;AAED,eAAO,MAAM,qBAAqB,EAAE,0BAA0B,EA2C7D,CAAC;AAUF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,0BAA+B,GAAG,aAAa,CAc3F;AAED,eAAO,MAAM,cAAc,eAEzB,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,GAAG,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC;IAC5F,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,YAAY,EAAE,uBAAuB,CAAC;IACtC,SAAS,EAAE,sBAAsB,CAAC;IAClC,GAAG,EAAE,gBAAgB,CAAC;IACtB,YAAY,EAAE,yBAAyB,CAAC;CACzC;AAED,eAAO,MAAM,qBAAqB,EAAE,0BAA0B,EAkD7D,CAAC;AAUF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,0BAA+B,GAAG,aAAa,CAc3F;AAED,eAAO,MAAM,cAAc,eAEzB,CAAC"}
package/dist/registry.js CHANGED
@@ -3427,7 +3427,7 @@ var init_machines = __esm(() => {
3427
3427
  function isBlockingDependencyStatus(status) {
3428
3428
  return status !== "completed" && status !== "cancelled";
3429
3429
  }
3430
- var TASK_STATUSES, TASK_PRIORITIES, PLAN_STATUSES, VersionConflictError, TaskNotFoundError, ProjectNotFoundError, ResourceConflictError, PlanNotFoundError, LockError, AgentNotFoundError, IdentityAliasAmbiguousError, IdentityIdImmutableError, TaskListNotFoundError, DependencyCycleError, CompletionGuardError, DISPATCH_STATUSES, DispatchNotFoundError;
3430
+ var TASK_STATUSES, TASK_PRIORITIES, PLAN_STATUSES, VersionConflictError, TaskNotFoundError, TaskReferenceAmbiguousError, ProjectNotFoundError, ResourceConflictError, PlanNotFoundError, LockError, AgentNotFoundError, IdentityAliasAmbiguousError, IdentityIdImmutableError, TaskListNotFoundError, DependencyCycleError, CompletionGuardError, DISPATCH_STATUSES, DispatchNotFoundError;
3431
3431
  var init_types = __esm(() => {
3432
3432
  TASK_STATUSES = [
3433
3433
  "pending",
@@ -3467,6 +3467,22 @@ var init_types = __esm(() => {
3467
3467
  this.name = "TaskNotFoundError";
3468
3468
  }
3469
3469
  };
3470
+ TaskReferenceAmbiguousError = class TaskReferenceAmbiguousError extends Error {
3471
+ reference;
3472
+ static code = "TASK_REFERENCE_AMBIGUOUS";
3473
+ candidateTaskIds;
3474
+ candidateProjectIds;
3475
+ constructor(reference, candidates) {
3476
+ const candidateTaskIds = [...new Set(candidates.map((candidate) => candidate.task_id))].sort();
3477
+ const candidateProjectIds = [...new Set(candidates.map((candidate) => candidate.project_id).filter((projectId) => typeof projectId === "string" && projectId.length > 0))].sort();
3478
+ const projectList = candidateProjectIds.length > 0 ? candidateProjectIds.join(", ") : "(unscoped)";
3479
+ super(`Task reference is ambiguous: "${reference}". Candidate project IDs: ${projectList}. ` + "Use a full task UUID.");
3480
+ this.reference = reference;
3481
+ this.name = "TaskReferenceAmbiguousError";
3482
+ this.candidateTaskIds = candidateTaskIds;
3483
+ this.candidateProjectIds = candidateProjectIds;
3484
+ }
3485
+ };
3470
3486
  ProjectNotFoundError = class ProjectNotFoundError extends Error {
3471
3487
  projectId;
3472
3488
  static code = "PROJECT_NOT_FOUND";
@@ -3758,15 +3774,18 @@ var init_identity_mapping = __esm(() => {
3758
3774
  var exports_config = {};
3759
3775
  __export(exports_config, {
3760
3776
  parseStorageMode: () => parseStorageMode,
3777
+ parseStorageBackend: () => parseStorageBackend,
3761
3778
  loadTodosStorageConfig: () => loadTodosStorageConfig,
3762
3779
  loadStorageConfig: () => loadStorageConfig,
3763
3780
  isTodosShadowEnabled: () => isTodosShadowEnabled,
3764
3781
  isTodosRemoteStorageEnabled: () => isTodosRemoteStorageEnabled,
3782
+ isTodosPostgresBackend: () => isTodosPostgresBackend,
3765
3783
  getTodosStorageShadowEnvName: () => getTodosStorageShadowEnvName,
3766
3784
  getTodosStorageMode: () => getTodosStorageMode,
3767
3785
  getTodosStorageEnvName: () => getTodosStorageEnvName,
3768
3786
  getTodosStorageDatabaseUrl: () => getTodosStorageDatabaseUrl,
3769
3787
  getTodosStorageDatabaseEnv: () => getTodosStorageDatabaseEnv,
3788
+ getTodosStorageBackend: () => getTodosStorageBackend,
3770
3789
  getStorageMode: () => getStorageMode,
3771
3790
  getStorageDatabaseUrl: () => getStorageDatabaseUrl,
3772
3791
  getStorageDatabaseEnv: () => getStorageDatabaseEnv,
@@ -3791,7 +3810,7 @@ function getCanonicalTodosRdsConfig(env = process.env) {
3791
3810
  };
3792
3811
  }
3793
3812
  function loadTodosStorageConfig(env = process.env) {
3794
- const mode = getTodosStorageMode(env);
3813
+ const mode = getTodosStorageBackend(env);
3795
3814
  const databaseUrl = getTodosStorageDatabaseUrl(env);
3796
3815
  const bucket = readStorageEnv(env, "s3Bucket").value;
3797
3816
  const prefix = readStorageEnv(env, "s3Prefix").value ?? "todos/";
@@ -3828,29 +3847,41 @@ function loadTodosStorageConfig(env = process.env) {
3828
3847
  function loadStorageConfig(env = process.env) {
3829
3848
  return loadTodosStorageConfig(env);
3830
3849
  }
3850
+ function isTodosPostgresBackend(config) {
3851
+ return config.mode === "postgres";
3852
+ }
3831
3853
  function isTodosRemoteStorageEnabled(config) {
3832
- return config.mode === "remote" || config.mode === "hybrid";
3854
+ return isTodosPostgresBackend(config);
3833
3855
  }
3834
3856
  function assertTodosRemoteStorageConfig(config) {
3835
- if (!isTodosRemoteStorageEnabled(config))
3857
+ if (!isTodosPostgresBackend(config))
3836
3858
  return;
3837
3859
  if (!config.database?.url) {
3838
3860
  throw new Error(`${TODOS_STORAGE_ENV.databaseUrl} is required when ${TODOS_STORAGE_ENV.mode}=${config.mode}`);
3839
3861
  }
3840
3862
  }
3841
- function parseStorageMode(value) {
3863
+ function parseStorageBackend(value) {
3842
3864
  const normalized = clean(value)?.toLowerCase();
3843
3865
  if (!normalized)
3844
- return "local";
3845
- if (normalized === "local" || normalized === "remote" || normalized === "hybrid")
3866
+ return "sqlite";
3867
+ if (normalized === "sqlite" || normalized === "postgres")
3846
3868
  return normalized;
3847
- throw new Error(`${TODOS_STORAGE_ENV.mode} must be local, remote, or hybrid`);
3869
+ const legacy = LEGACY_BACKEND_TOKENS[normalized];
3870
+ if (legacy)
3871
+ return legacy;
3872
+ throw new Error(`${TODOS_STORAGE_ENV.mode} must be sqlite or postgres (legacy values local and remote are accepted)`);
3873
+ }
3874
+ function parseStorageMode(value) {
3875
+ return parseStorageBackend(value);
3876
+ }
3877
+ function getTodosStorageBackend(env = process.env) {
3878
+ return parseStorageBackend(readStorageEnv(env, "mode").value);
3848
3879
  }
3849
3880
  function getTodosStorageMode(env = process.env) {
3850
- return parseStorageMode(readStorageEnv(env, "mode").value);
3881
+ return getTodosStorageBackend(env);
3851
3882
  }
3852
3883
  function getStorageMode(env = process.env) {
3853
- return getTodosStorageMode(env);
3884
+ return getTodosStorageBackend(env);
3854
3885
  }
3855
3886
  function isTodosShadowEnabled(env = process.env) {
3856
3887
  return parseBoolean(readStorageEnv(env, "shadow").value, false);
@@ -3861,8 +3892,8 @@ function getTodosStorageShadowEnvName(env = process.env) {
3861
3892
  function assertTodosShadowConfig(config, env = process.env) {
3862
3893
  if (!isTodosShadowEnabled(env))
3863
3894
  return;
3864
- if (config.mode !== "local") {
3865
- throw new Error(`${readStorageEnv(env, "shadow").name} shadow mirror requires ${TODOS_STORAGE_ENV.mode}=local (got ${config.mode})`);
3895
+ if (config.mode !== "sqlite") {
3896
+ throw new Error(`${readStorageEnv(env, "shadow").name} shadow mirror requires the sqlite backend (got ${config.mode})`);
3866
3897
  }
3867
3898
  if (!config.database?.url) {
3868
3899
  throw new Error(`${TODOS_STORAGE_ENV.databaseUrl} is required when ${readStorageEnv(env, "shadow").name} is enabled`);
@@ -3918,7 +3949,7 @@ function parsePositiveInteger(value, fallback) {
3918
3949
  }
3919
3950
  return parsed;
3920
3951
  }
3921
- var TODOS_STORAGE_TABLES, STORAGE_TABLES, TODOS_STORAGE_ENV, TODOS_STORAGE_FALLBACK_ENV, CANONICAL_TODOS_RDS_CLUSTER_ENV = "HASNA_TODOS_RDS_CLUSTER", CANONICAL_TODOS_RDS_RUNTIME_PATH_ENV = "HASNA_TODOS_RDS_RUNTIME_PATH", CANONICAL_TODOS_RDS_DATABASE = "todos";
3952
+ var TODOS_STORAGE_TABLES, STORAGE_TABLES, TODOS_STORAGE_ENV, TODOS_STORAGE_FALLBACK_ENV, CANONICAL_TODOS_RDS_CLUSTER_ENV = "HASNA_TODOS_RDS_CLUSTER", CANONICAL_TODOS_RDS_RUNTIME_PATH_ENV = "HASNA_TODOS_RDS_RUNTIME_PATH", CANONICAL_TODOS_RDS_DATABASE = "todos", LEGACY_BACKEND_TOKENS;
3922
3953
  var init_config = __esm(() => {
3923
3954
  TODOS_STORAGE_TABLES = [
3924
3955
  "todos_sync_records",
@@ -3959,6 +3990,14 @@ var init_config = __esm(() => {
3959
3990
  syncBatchSize: "TODOS_SYNC_BATCH_SIZE",
3960
3991
  syncDryRun: "TODOS_SYNC_DRY_RUN"
3961
3992
  };
3993
+ LEGACY_BACKEND_TOKENS = {
3994
+ local: "sqlite",
3995
+ remote: "postgres",
3996
+ postgresql: "postgres",
3997
+ hybrid: "postgres",
3998
+ self_hosted: "postgres",
3999
+ cloud: "postgres"
4000
+ };
3962
4001
  });
3963
4002
 
3964
4003
  // src/storage/shadow-outbox-schema.ts
@@ -4092,6 +4131,30 @@ function findGitRoot(startDir) {
4092
4131
  }
4093
4132
  return null;
4094
4133
  }
4134
+ function getGlobalDbPath() {
4135
+ const home = process.env["HOME"] || process.env["USERPROFILE"] || "~";
4136
+ return join(home, ".hasna", "todos", "todos.db");
4137
+ }
4138
+ function hasExplicitProjectArg(args = process.argv.slice(2)) {
4139
+ return args.some((arg) => arg === "--project" || arg.startsWith("--project="));
4140
+ }
4141
+ function getCliCommand(args = process.argv.slice(2)) {
4142
+ const globalOptionsWithValues = new Set(["--project", "--agent", "--session"]);
4143
+ for (let index = 0;index < args.length; index += 1) {
4144
+ const arg = args[index];
4145
+ if (globalOptionsWithValues.has(arg)) {
4146
+ index += 1;
4147
+ continue;
4148
+ }
4149
+ if (arg.startsWith("-"))
4150
+ continue;
4151
+ return arg;
4152
+ }
4153
+ return null;
4154
+ }
4155
+ function canCreateScopedProjectDb(args = process.argv.slice(2)) {
4156
+ return getCliCommand(args) === "project-bootstrap" && !args.some((arg) => arg === "--dry-run" || arg.startsWith("--dry-run="));
4157
+ }
4095
4158
  function getDbPath() {
4096
4159
  if (process.env["HASNA_TODOS_DB_PATH"]) {
4097
4160
  return process.env["HASNA_TODOS_DB_PATH"];
@@ -4099,18 +4162,19 @@ function getDbPath() {
4099
4162
  if (process.env["TODOS_DB_PATH"]) {
4100
4163
  return process.env["TODOS_DB_PATH"];
4101
4164
  }
4165
+ if (hasExplicitProjectArg())
4166
+ return getGlobalDbPath();
4102
4167
  const cwd = process.cwd();
4103
4168
  const nearest = findNearestProjectDb(cwd);
4104
4169
  if (nearest)
4105
4170
  return nearest;
4106
4171
  if (process.env["TODOS_DB_SCOPE"] === "project") {
4107
4172
  const gitRoot = findGitRoot(cwd);
4108
- if (gitRoot) {
4173
+ if (gitRoot && canCreateScopedProjectDb()) {
4109
4174
  return join(gitRoot, ".hasna", "todos", "todos.db");
4110
4175
  }
4111
4176
  }
4112
- const home = process.env["HOME"] || process.env["USERPROFILE"] || "~";
4113
- return join(home, ".hasna", "todos", "todos.db");
4177
+ return getGlobalDbPath();
4114
4178
  }
4115
4179
  function getDatabasePath() {
4116
4180
  return getDbPath();
@@ -4213,10 +4277,13 @@ function resolvePartialId(db, table, partialId) {
4213
4277
  return null;
4214
4278
  }
4215
4279
  if (table === "tasks") {
4216
- const shortIdRows = db.query("SELECT id FROM tasks WHERE short_id = ?").all(partialId);
4280
+ const shortIdRows = db.query("SELECT id, project_id FROM tasks WHERE LOWER(short_id) = LOWER(?) ORDER BY project_id, id").all(partialId);
4217
4281
  if (shortIdRows.length === 1) {
4218
4282
  return shortIdRows[0].id;
4219
4283
  }
4284
+ if (shortIdRows.length > 1) {
4285
+ throw new TaskReferenceAmbiguousError(partialId, shortIdRows.map((row) => ({ task_id: row.id, project_id: row.project_id })));
4286
+ }
4220
4287
  }
4221
4288
  if (table === "task_lists") {
4222
4289
  const slugRow = db.query("SELECT id FROM task_lists WHERE slug = ?").get(partialId);
@@ -11833,7 +11900,7 @@ var init_tasks = __esm(() => {
11833
11900
  // package.json
11834
11901
  var package_default = {
11835
11902
  name: "@hasna/todos",
11836
- version: "0.13.2",
11903
+ version: "0.13.4",
11837
11904
  description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
11838
11905
  type: "module",
11839
11906
  main: "dist/index.js",
@@ -11867,6 +11934,10 @@ var package_default = {
11867
11934
  "./storage": {
11868
11935
  types: "./dist/storage.d.ts",
11869
11936
  import: "./dist/storage.js"
11937
+ },
11938
+ "./testing": {
11939
+ types: "./dist/testing.d.ts",
11940
+ import: "./dist/testing.js"
11870
11941
  }
11871
11942
  },
11872
11943
  workspaces: [
@@ -11879,8 +11950,8 @@ var package_default = {
11879
11950
  "README.md"
11880
11951
  ],
11881
11952
  scripts: {
11882
- build: "rm -rf dist dashboard/dist && cd dashboard && bun install --frozen-lockfile && bun run build && cd .. && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && tsc --emitDeclarationOnly --outDir dist",
11883
- "build:server": "rm -rf dist && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*'",
11953
+ build: "rm -rf dist dashboard/dist && cd dashboard && bun install --frozen-lockfile && bun run build && cd .. && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts src/testing.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && tsc --emitDeclarationOnly --outDir dist",
11954
+ "build:server": "rm -rf dist && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/server/index.ts --outdir dist/server --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/sdk/index.ts --outdir dist/sdk --target bun --external '@hasna/contracts' --external '@hasna/contracts/*' && bun build src/index.ts src/mcp.ts src/registry.ts src/contracts.ts src/storage.ts src/testing.ts --outdir dist --target bun --external '@hasna/contracts' --external '@hasna/contracts/*'",
11884
11955
  migrate: "bun run src/server/index.ts migrate",
11885
11956
  "backfill:comment-redaction": "bun run src/server/index.ts redact-comments",
11886
11957
  "generate:sdk": "bun run scripts/generate-sdk.ts",
@@ -17627,11 +17698,12 @@ var DEFAULT_LIMITS = {
17627
17698
  verification_limit: 10,
17628
17699
  run_limit: 3,
17629
17700
  dependency_limit: 12,
17630
- plan_task_limit: 20,
17701
+ plan_task_limit: 24,
17631
17702
  max_text_chars: 6000,
17632
17703
  summary_char_limit: 480,
17633
17704
  stale_after_hours: 72
17634
17705
  };
17706
+ var MAX_CONTEXT_TASKS = 24;
17635
17707
  var ALL_CONTEXT_SECTIONS = [
17636
17708
  "project",
17637
17709
  "plan",
@@ -17664,7 +17736,7 @@ function limits(input) {
17664
17736
  verification_limit: clamp(input.verification_limit, DEFAULT_LIMITS.verification_limit, 100),
17665
17737
  run_limit: clamp(input.run_limit, DEFAULT_LIMITS.run_limit, 20),
17666
17738
  dependency_limit: clamp(input.dependency_limit, DEFAULT_LIMITS.dependency_limit, 100),
17667
- plan_task_limit: clamp(input.plan_task_limit, DEFAULT_LIMITS.plan_task_limit, 100),
17739
+ plan_task_limit: clamp(input.plan_task_limit, DEFAULT_LIMITS.plan_task_limit, MAX_CONTEXT_TASKS),
17668
17740
  max_text_chars: clamp(input.max_text_chars, DEFAULT_LIMITS.max_text_chars, 50000),
17669
17741
  summary_char_limit: clamp(input.summary_char_limit, DEFAULT_LIMITS.summary_char_limit, 4000),
17670
17742
  stale_after_hours: clamp(input.stale_after_hours, DEFAULT_LIMITS.stale_after_hours, 24 * 365)
@@ -17687,6 +17759,13 @@ function taskSummary(task2) {
17687
17759
  priority: task2.priority
17688
17760
  };
17689
17761
  }
17762
+ function latestPlanTasks(planId, limit, db) {
17763
+ const rows = db.query(`SELECT * FROM tasks
17764
+ WHERE plan_id = ? AND archived_at IS NULL
17765
+ ORDER BY updated_at DESC, created_at DESC, id ASC
17766
+ LIMIT ?`).all(planId, limit);
17767
+ return rows.map(rowToTask);
17768
+ }
17690
17769
  function acceptanceCriteria(task2, maxText) {
17691
17770
  const metadata = task2.metadata || {};
17692
17771
  const raw = metadata["acceptance_criteria"] ?? metadata["acceptanceCriteria"] ?? metadata["criteria"];
@@ -17784,7 +17863,7 @@ function summarizeSection(pack, section, maxChars) {
17784
17863
  return "No plan was attached.";
17785
17864
  return summarizeStrings([
17786
17865
  `Plan ${pack.plan.name} is ${pack.plan.status}`,
17787
- `${pack.plan.tasks.length} listed plan tasks`,
17866
+ `${pack.plan.tasks.length} of ${pack.plan.total_tasks} plan tasks listed; ${pack.plan.omitted_tasks} omitted`,
17788
17867
  ...pack.plan.tasks.slice(0, 4).map((task2) => `${task2.status} ${task2.short_id || task2.id.slice(0, 8)} ${task2.title}`)
17789
17868
  ], maxChars);
17790
17869
  }
@@ -17934,7 +18013,8 @@ function createAgentContextPack(input, db) {
17934
18013
  const limit = limits(input);
17935
18014
  const project = task2.project_id ? getProject(task2.project_id, d) : null;
17936
18015
  const plan = task2.plan_id ? getPlan(task2.plan_id, d) : null;
17937
- const planTasks = task2.plan_id ? listTasks({ plan_id: task2.plan_id, limit: limit.plan_task_limit + 1 }, d) : [];
18016
+ const planTasks = task2.plan_id ? latestPlanTasks(task2.plan_id, limit.plan_task_limit, d) : [];
18017
+ const totalPlanTasks = task2.plan_id ? countTasks({ plan_id: task2.plan_id }, d) : 0;
17938
18018
  const upstream = getTaskDependencies(task2.id, d).map((dep) => taskSummary(getTask(dep.depends_on, d))).filter((item) => Boolean(item));
17939
18019
  const downstream = getTaskDependents(task2.id, d).map((dep) => taskSummary(getTask(dep.task_id, d))).filter((item) => Boolean(item));
17940
18020
  const comments = listComments(task2.id, d);
@@ -17977,6 +18057,9 @@ function createAgentContextPack(input, db) {
17977
18057
  warnings.push(`${runs.length - selectedRuns.length} older runs omitted`);
17978
18058
  if (fileMap.size > relevantFiles.length)
17979
18059
  warnings.push(`${fileMap.size - relevantFiles.length} relevant files omitted`);
18060
+ if (totalPlanTasks > planTasks.length && plan) {
18061
+ warnings.push(`${totalPlanTasks - planTasks.length} plan tasks omitted (${totalPlanTasks} total); load more on demand with "todos plans --show ${plan.id}" and inspect task details with "todos show <task-id>" or "todos context-pack <task-id>"`);
18062
+ }
17980
18063
  const contextTask = {
17981
18064
  id: task2.id,
17982
18065
  short_id: task2.short_id,
@@ -18008,8 +18091,9 @@ function createAgentContextPack(input, db) {
18008
18091
  description: truncate2(plan.description, limit.max_text_chars),
18009
18092
  status: plan.status,
18010
18093
  agent_id: plan.agent_id,
18011
- tasks: planTasks.slice(0, limit.plan_task_limit).map(taskSummary).filter((item) => Boolean(item)),
18012
- omitted_tasks: Math.max(0, planTasks.length - limit.plan_task_limit)
18094
+ tasks: planTasks.map(taskSummary).filter((item) => Boolean(item)),
18095
+ total_tasks: totalPlanTasks,
18096
+ omitted_tasks: Math.max(0, totalPlanTasks - planTasks.length)
18013
18097
  } : null,
18014
18098
  acceptance_criteria: acceptanceCriteria(task2, limit.max_text_chars),
18015
18099
  dependencies: {
@@ -18119,6 +18203,8 @@ ${pack.task.description}` : null,
18119
18203
  "## Project And Plan",
18120
18204
  pack.project ? `- Project: ${pack.project.name} (${pack.project.path})` : "- Project: none",
18121
18205
  pack.plan ? `- Plan: ${pack.plan.name} (${pack.plan.status})` : "- Plan: none",
18206
+ pack.plan ? `- Plan tasks: ${pack.plan.tasks.length} shown of ${pack.plan.total_tasks} total (${pack.plan.omitted_tasks} omitted)` : null,
18207
+ pack.plan && pack.plan.omitted_tasks > 0 ? `- Load more on demand: \`todos plans --show ${pack.plan.id}\`; inspect one task with \`todos show <task-id>\` or \`todos context-pack <task-id>\`.` : null,
18122
18208
  pack.plan && pack.plan.tasks.length > 0 ? bullet(pack.plan.tasks.map((task2) => `${task2.status} ${task2.short_id || task2.id.slice(0, 8)} ${task2.title}`)) : null,
18123
18209
  "",
18124
18210
  "## Acceptance Criteria",
@@ -19787,7 +19873,7 @@ function createReleaseCompatibilityReport(options = {}) {
19787
19873
  "todos --help",
19788
19874
  "todos-mcp --help",
19789
19875
  "todos-serve --help",
19790
- "todos doctor"
19876
+ "todos doctor --no-fail-on-findings"
19791
19877
  ],
19792
19878
  smoke_tests: [
19793
19879
  "command -v todos",
@@ -19795,7 +19881,7 @@ function createReleaseCompatibilityReport(options = {}) {
19795
19881
  "command -v todos-serve",
19796
19882
  "todos --version",
19797
19883
  "todos --help",
19798
- "todos doctor"
19884
+ "todos doctor --no-fail-on-findings"
19799
19885
  ],
19800
19886
  rollback: [
19801
19887
  "npm view @hasna/todos versions --json",
@@ -20289,12 +20375,11 @@ ${task2.description || ""}`.split(/\r?\n/);
20289
20375
  function normalizeStackLocation(value) {
20290
20376
  return value.replace(/:\d+(?::\d+)?/g, "").replace(/^file:\/\//, "").toLowerCase().trim();
20291
20377
  }
20292
- function fingerprint(task2) {
20378
+ function fingerprintContent(task2) {
20293
20379
  const body = task2.description || "";
20294
20380
  const text = `${task2.title}
20295
20381
  ${body}`;
20296
20382
  return {
20297
- task: task2,
20298
20383
  title: normalizeText(task2.title),
20299
20384
  body: normalizeText(body),
20300
20385
  text: normalizeText(text),
@@ -20303,6 +20388,9 @@ ${body}`;
20303
20388
  stackKeys: stackKeysFor(task2)
20304
20389
  };
20305
20390
  }
20391
+ function fingerprint(task2) {
20392
+ return { task: task2, ...fingerprintContent(task2) };
20393
+ }
20306
20394
  function intersects(left, right) {
20307
20395
  for (const value of left)
20308
20396
  if (right.has(value))
@@ -23489,6 +23577,13 @@ var TODOS_PACKAGE_EXPORTS = [
23489
23577
  types: "./dist/storage.d.ts",
23490
23578
  description: "Storage and service adapter contracts for local SQLite implementations.",
23491
23579
  stability: "stable"
23580
+ },
23581
+ {
23582
+ subpath: "./testing",
23583
+ import: "./dist/testing.js",
23584
+ types: "./dist/testing.d.ts",
23585
+ description: "Test-store isolation helpers that keep a consumer's test suite off a shared todos store.",
23586
+ stability: "stable"
23492
23587
  }
23493
23588
  ];
23494
23589
  function source8(version) {
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "packageName": "@hasna/todos",
3
- "packageVersion": "0.13.2",
3
+ "packageVersion": "0.13.4",
4
4
  "repository": "https://github.com/hasna/todos.git",
5
- "gitCommit": "cb914c5f9ccfabb39983b5156f4c1cec78e00c1f",
6
- "gitTree": "3693d6d0fd8f3bdd2581fc915e91264caf08760d",
7
- "sourceTreeSha256": "4a1b890d4a3b4ffc73d605e7aa3ccbcba2deb6c72d3604a1db733b57c0c25e00",
8
- "generatedAt": "2026-07-28T15:00:57.000Z"
5
+ "gitCommit": "c2c3517bab2321911c44285625ecaa58fcf606ff",
6
+ "gitTree": "f3acc3cc1322f240e911e1ab483a7a5ef88371cd",
7
+ "sourceTreeSha256": "445622ccd461d74a6c060130c1bccfa72b829d74b24b5358b0e36cb730eb8374",
8
+ "generatedAt": "2026-07-31T11:35:34.000Z"
9
9
  }
@@ -148,7 +148,18 @@ export interface DoctorIssue {
148
148
  repairable?: boolean;
149
149
  }
150
150
  export interface DoctorResponse {
151
+ /**
152
+ * False when an error-severity check failed, a referential-integrity condition
153
+ * has matching rows, OR a condition could not be measured. It is NOT a
154
+ * "the request succeeded" flag.
155
+ */
151
156
  ok: boolean;
157
+ /** Status the `doctor` process RETURNS (0 clean, 1 findings, 2 incomplete). */
158
+ exit_code?: 0 | 1 | 2;
159
+ /** Status the reported rows IMPLY, ignoring `--no-fail-on-findings`. */
160
+ verdict_exit_code?: 0 | 1 | 2;
161
+ /** False when the findings gate was opted out of, making `exit_code` 0 regardless. */
162
+ fail_on_findings?: boolean;
152
163
  dry_run?: boolean;
153
164
  database_path?: string;
154
165
  migration?: {
@@ -173,6 +184,37 @@ export interface DoctorResponse {
173
184
  infos: number;
174
185
  repairable: number;
175
186
  applied: number;
187
+ integrity_findings?: number;
188
+ integrity_rows?: number;
189
+ integrity_unverified?: number;
190
+ };
191
+ /**
192
+ * Per-condition referential-integrity breakdown (`todos.integrity.v1`). A
193
+ * condition with `count: null` was NOT measured — it is never a zero.
194
+ */
195
+ integrity?: {
196
+ schema_version: string;
197
+ generated_at: string;
198
+ source: string;
199
+ conditions: Array<{
200
+ id: string;
201
+ count: number | null;
202
+ open_count: number | null;
203
+ severity: "warn" | "error" | null;
204
+ verified: boolean;
205
+ unverified_reason?: string;
206
+ message: string;
207
+ impact: string;
208
+ }>;
209
+ summary: {
210
+ ok: boolean;
211
+ findings: number;
212
+ rows: number;
213
+ errors: number;
214
+ warnings: number;
215
+ unverified: number;
216
+ complete: boolean;
217
+ };
176
218
  };
177
219
  }
178
220
  export interface SSEEvent {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"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"}
@@ -641,6 +641,7 @@ export declare class TodosV1Client {
641
641
  "task_list_id"?: string;
642
642
  "assigned_to"?: string;
643
643
  "agent_id"?: string;
644
+ "tags"?: string;
644
645
  "limit"?: number;
645
646
  "offset"?: number;
646
647
  }, init?: RequestInit): Promise<{