@hasna/todos 0.9.27 → 0.9.28

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 (2) hide show
  1. package/dist/mcp/index.js +119 -119
  2. package/package.json +1 -1
package/dist/mcp/index.js CHANGED
@@ -6129,22 +6129,22 @@ function formatTaskDetail(task) {
6129
6129
  `);
6130
6130
  }
6131
6131
  server.tool("create_task", "Create a new task", {
6132
- title: exports_external.string().describe("Task title"),
6133
- description: exports_external.string().optional().describe("Task description"),
6134
- project_id: exports_external.string().optional().describe("Project ID"),
6135
- parent_id: exports_external.string().optional().describe("Parent task ID (for subtasks)"),
6136
- priority: exports_external.enum(["low", "medium", "high", "critical"]).optional().describe("Task priority"),
6137
- status: exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]).optional().describe("Initial status"),
6138
- agent_id: exports_external.string().optional().describe("Creator agent ID"),
6139
- assigned_to: exports_external.string().optional().describe("Assigned agent ID"),
6140
- session_id: exports_external.string().optional().describe("Session ID"),
6141
- working_dir: exports_external.string().optional().describe("Working directory context"),
6142
- plan_id: exports_external.string().optional().describe("Plan ID to assign task to"),
6143
- task_list_id: exports_external.string().optional().describe("Task list ID to assign task to"),
6144
- tags: exports_external.array(exports_external.string()).optional().describe("Task tags"),
6145
- metadata: exports_external.record(exports_external.unknown()).optional().describe("Arbitrary metadata"),
6146
- estimated_minutes: exports_external.number().optional().describe("Estimated time in minutes"),
6147
- requires_approval: exports_external.boolean().optional().describe("Require approval before completion")
6132
+ title: exports_external.string(),
6133
+ description: exports_external.string().optional(),
6134
+ project_id: exports_external.string().optional(),
6135
+ parent_id: exports_external.string().optional(),
6136
+ priority: exports_external.enum(["low", "medium", "high", "critical"]).optional(),
6137
+ status: exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]).optional(),
6138
+ agent_id: exports_external.string().optional(),
6139
+ assigned_to: exports_external.string().optional(),
6140
+ session_id: exports_external.string().optional(),
6141
+ working_dir: exports_external.string().optional(),
6142
+ plan_id: exports_external.string().optional(),
6143
+ task_list_id: exports_external.string().optional(),
6144
+ tags: exports_external.array(exports_external.string()).optional(),
6145
+ metadata: exports_external.record(exports_external.unknown()).optional(),
6146
+ estimated_minutes: exports_external.number().optional(),
6147
+ requires_approval: exports_external.boolean().optional()
6148
6148
  }, async (params) => {
6149
6149
  try {
6150
6150
  const resolved = { ...params };
@@ -6163,19 +6163,19 @@ server.tool("create_task", "Create a new task", {
6163
6163
  }
6164
6164
  });
6165
6165
  server.tool("list_tasks", "List tasks with optional filters", {
6166
- project_id: exports_external.string().optional().describe("Filter by project"),
6166
+ project_id: exports_external.string().optional(),
6167
6167
  status: exports_external.union([
6168
6168
  exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]),
6169
6169
  exports_external.array(exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]))
6170
- ]).optional().describe("Filter by status"),
6170
+ ]).optional(),
6171
6171
  priority: exports_external.union([
6172
6172
  exports_external.enum(["low", "medium", "high", "critical"]),
6173
6173
  exports_external.array(exports_external.enum(["low", "medium", "high", "critical"]))
6174
- ]).optional().describe("Filter by priority"),
6175
- assigned_to: exports_external.string().optional().describe("Filter by assigned agent"),
6176
- tags: exports_external.array(exports_external.string()).optional().describe("Filter by tags (any match)"),
6177
- plan_id: exports_external.string().optional().describe("Filter by plan"),
6178
- task_list_id: exports_external.string().optional().describe("Filter by task list")
6174
+ ]).optional(),
6175
+ assigned_to: exports_external.string().optional(),
6176
+ tags: exports_external.array(exports_external.string()).optional(),
6177
+ plan_id: exports_external.string().optional(),
6178
+ task_list_id: exports_external.string().optional()
6179
6179
  }, async (params) => {
6180
6180
  try {
6181
6181
  const resolved = { ...params };
@@ -6202,7 +6202,7 @@ ${text}` }] };
6202
6202
  }
6203
6203
  });
6204
6204
  server.tool("get_task", "Get full task details with relations", {
6205
- id: exports_external.string().describe("Task ID (full or partial)")
6205
+ id: exports_external.string()
6206
6206
  }, async ({ id }) => {
6207
6207
  try {
6208
6208
  const resolvedId = resolveId(id);
@@ -6250,17 +6250,17 @@ Parent: ${task.parent.id.slice(0, 8)} | ${task.parent.title}`);
6250
6250
  }
6251
6251
  });
6252
6252
  server.tool("update_task", "Update task fields. Version required for optimistic locking.", {
6253
- id: exports_external.string().describe("Task ID (full or partial)"),
6254
- version: exports_external.number().describe("Current version (for optimistic locking)"),
6255
- title: exports_external.string().optional().describe("New title"),
6256
- description: exports_external.string().optional().describe("New description"),
6257
- status: exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]).optional().describe("New status"),
6258
- priority: exports_external.enum(["low", "medium", "high", "critical"]).optional().describe("New priority"),
6259
- assigned_to: exports_external.string().optional().describe("Assign to agent"),
6260
- tags: exports_external.array(exports_external.string()).optional().describe("New tags"),
6261
- metadata: exports_external.record(exports_external.unknown()).optional().describe("New metadata"),
6262
- plan_id: exports_external.string().optional().describe("Plan ID to assign task to"),
6263
- task_list_id: exports_external.string().optional().describe("Task list ID")
6253
+ id: exports_external.string(),
6254
+ version: exports_external.number(),
6255
+ title: exports_external.string().optional(),
6256
+ description: exports_external.string().optional(),
6257
+ status: exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]).optional(),
6258
+ priority: exports_external.enum(["low", "medium", "high", "critical"]).optional(),
6259
+ assigned_to: exports_external.string().optional(),
6260
+ tags: exports_external.array(exports_external.string()).optional(),
6261
+ metadata: exports_external.record(exports_external.unknown()).optional(),
6262
+ plan_id: exports_external.string().optional(),
6263
+ task_list_id: exports_external.string().optional()
6264
6264
  }, async ({ id, ...rest }) => {
6265
6265
  try {
6266
6266
  const resolvedId = resolveId(id);
@@ -6271,7 +6271,7 @@ server.tool("update_task", "Update task fields. Version required for optimistic
6271
6271
  }
6272
6272
  });
6273
6273
  server.tool("delete_task", "Delete a task permanently", {
6274
- id: exports_external.string().describe("Task ID (full or partial)")
6274
+ id: exports_external.string()
6275
6275
  }, async ({ id }) => {
6276
6276
  try {
6277
6277
  const resolvedId = resolveId(id);
@@ -6287,8 +6287,8 @@ server.tool("delete_task", "Delete a task permanently", {
6287
6287
  }
6288
6288
  });
6289
6289
  server.tool("start_task", "Claim, lock, and set task status to in_progress.", {
6290
- id: exports_external.string().describe("Task ID (full or partial)"),
6291
- agent_id: exports_external.string().describe("Agent claiming the task")
6290
+ id: exports_external.string(),
6291
+ agent_id: exports_external.string()
6292
6292
  }, async ({ id, agent_id }) => {
6293
6293
  try {
6294
6294
  const resolvedId = resolveId(id);
@@ -6299,8 +6299,8 @@ server.tool("start_task", "Claim, lock, and set task status to in_progress.", {
6299
6299
  }
6300
6300
  });
6301
6301
  server.tool("complete_task", "Mark task completed and release lock.", {
6302
- id: exports_external.string().describe("Task ID (full or partial)"),
6303
- agent_id: exports_external.string().optional().describe("Agent completing the task")
6302
+ id: exports_external.string(),
6303
+ agent_id: exports_external.string().optional()
6304
6304
  }, async ({ id, agent_id }) => {
6305
6305
  try {
6306
6306
  const resolvedId = resolveId(id);
@@ -6311,8 +6311,8 @@ server.tool("complete_task", "Mark task completed and release lock.", {
6311
6311
  }
6312
6312
  });
6313
6313
  server.tool("lock_task", "Acquire exclusive lock on a task", {
6314
- id: exports_external.string().describe("Task ID (full or partial)"),
6315
- agent_id: exports_external.string().describe("Agent acquiring lock")
6314
+ id: exports_external.string(),
6315
+ agent_id: exports_external.string()
6316
6316
  }, async ({ id, agent_id }) => {
6317
6317
  try {
6318
6318
  const resolvedId = resolveId(id);
@@ -6326,8 +6326,8 @@ server.tool("lock_task", "Acquire exclusive lock on a task", {
6326
6326
  }
6327
6327
  });
6328
6328
  server.tool("unlock_task", "Release exclusive lock on a task", {
6329
- id: exports_external.string().describe("Task ID (full or partial)"),
6330
- agent_id: exports_external.string().optional().describe("Agent releasing lock (omit to force)")
6329
+ id: exports_external.string(),
6330
+ agent_id: exports_external.string().optional()
6331
6331
  }, async ({ id, agent_id }) => {
6332
6332
  try {
6333
6333
  const resolvedId = resolveId(id);
@@ -6338,8 +6338,8 @@ server.tool("unlock_task", "Release exclusive lock on a task", {
6338
6338
  }
6339
6339
  });
6340
6340
  server.tool("add_dependency", "Add a dependency: task_id depends on depends_on.", {
6341
- task_id: exports_external.string().describe("Task that depends on another"),
6342
- depends_on: exports_external.string().describe("Task that must complete first")
6341
+ task_id: exports_external.string(),
6342
+ depends_on: exports_external.string()
6343
6343
  }, async ({ task_id, depends_on }) => {
6344
6344
  try {
6345
6345
  const resolvedTaskId = resolveId(task_id);
@@ -6351,8 +6351,8 @@ server.tool("add_dependency", "Add a dependency: task_id depends on depends_on."
6351
6351
  }
6352
6352
  });
6353
6353
  server.tool("remove_dependency", "Remove a dependency between tasks", {
6354
- task_id: exports_external.string().describe("Task ID"),
6355
- depends_on: exports_external.string().describe("Dependency to remove")
6354
+ task_id: exports_external.string(),
6355
+ depends_on: exports_external.string()
6356
6356
  }, async ({ task_id, depends_on }) => {
6357
6357
  try {
6358
6358
  const resolvedTaskId = resolveId(task_id);
@@ -6369,10 +6369,10 @@ server.tool("remove_dependency", "Remove a dependency between tasks", {
6369
6369
  }
6370
6370
  });
6371
6371
  server.tool("add_comment", "Add a comment/note to a task", {
6372
- task_id: exports_external.string().describe("Task ID (full or partial)"),
6373
- content: exports_external.string().describe("Comment content"),
6374
- agent_id: exports_external.string().optional().describe("Agent adding comment"),
6375
- session_id: exports_external.string().optional().describe("Session ID")
6372
+ task_id: exports_external.string(),
6373
+ content: exports_external.string(),
6374
+ agent_id: exports_external.string().optional(),
6375
+ session_id: exports_external.string().optional()
6376
6376
  }, async ({ task_id, ...rest }) => {
6377
6377
  try {
6378
6378
  const resolvedId = resolveId(task_id);
@@ -6400,10 +6400,10 @@ ${text}` }] };
6400
6400
  }
6401
6401
  });
6402
6402
  server.tool("create_project", "Register a new project", {
6403
- name: exports_external.string().describe("Project name"),
6404
- path: exports_external.string().describe("Absolute path to project"),
6405
- description: exports_external.string().optional().describe("Project description"),
6406
- task_list_id: exports_external.string().optional().describe("Custom task list ID for Claude Code sync (defaults to todos-<slugified-name>)")
6403
+ name: exports_external.string(),
6404
+ path: exports_external.string(),
6405
+ description: exports_external.string().optional(),
6406
+ task_list_id: exports_external.string().optional()
6407
6407
  }, async (params) => {
6408
6408
  try {
6409
6409
  const project = createProject(params);
@@ -6419,12 +6419,12 @@ server.tool("create_project", "Register a new project", {
6419
6419
  }
6420
6420
  });
6421
6421
  server.tool("create_plan", "Create a new plan", {
6422
- name: exports_external.string().describe("Plan name"),
6423
- project_id: exports_external.string().optional().describe("Project ID"),
6424
- description: exports_external.string().optional().describe("Plan description"),
6425
- status: exports_external.enum(["active", "completed", "archived"]).optional().describe("Plan status"),
6426
- task_list_id: exports_external.string().optional().describe("Task list ID"),
6427
- agent_id: exports_external.string().optional().describe("Owner agent ID")
6422
+ name: exports_external.string(),
6423
+ project_id: exports_external.string().optional(),
6424
+ description: exports_external.string().optional(),
6425
+ status: exports_external.enum(["active", "completed", "archived"]).optional(),
6426
+ task_list_id: exports_external.string().optional(),
6427
+ agent_id: exports_external.string().optional()
6428
6428
  }, async (params) => {
6429
6429
  try {
6430
6430
  const resolved = { ...params };
@@ -6444,7 +6444,7 @@ server.tool("create_plan", "Create a new plan", {
6444
6444
  }
6445
6445
  });
6446
6446
  server.tool("list_plans", "List plans with optional project filter", {
6447
- project_id: exports_external.string().optional().describe("Filter by project")
6447
+ project_id: exports_external.string().optional()
6448
6448
  }, async ({ project_id }) => {
6449
6449
  try {
6450
6450
  const resolvedProjectId = project_id ? resolveId(project_id, "projects") : undefined;
@@ -6464,7 +6464,7 @@ ${text}` }] };
6464
6464
  }
6465
6465
  });
6466
6466
  server.tool("get_plan", "Get plan details", {
6467
- id: exports_external.string().describe("Plan ID (full or partial)")
6467
+ id: exports_external.string()
6468
6468
  }, async ({ id }) => {
6469
6469
  try {
6470
6470
  const resolvedId = resolveId(id, "plans");
@@ -6489,12 +6489,12 @@ server.tool("get_plan", "Get plan details", {
6489
6489
  }
6490
6490
  });
6491
6491
  server.tool("update_plan", "Update a plan", {
6492
- id: exports_external.string().describe("Plan ID (full or partial)"),
6493
- name: exports_external.string().optional().describe("New name"),
6494
- description: exports_external.string().optional().describe("New description"),
6495
- status: exports_external.enum(["active", "completed", "archived"]).optional().describe("New status"),
6496
- task_list_id: exports_external.string().optional().describe("Task list ID"),
6497
- agent_id: exports_external.string().optional().describe("Owner agent ID")
6492
+ id: exports_external.string(),
6493
+ name: exports_external.string().optional(),
6494
+ description: exports_external.string().optional(),
6495
+ status: exports_external.enum(["active", "completed", "archived"]).optional(),
6496
+ task_list_id: exports_external.string().optional(),
6497
+ agent_id: exports_external.string().optional()
6498
6498
  }, async ({ id, ...rest }) => {
6499
6499
  try {
6500
6500
  const resolvedId = resolveId(id, "plans");
@@ -6513,7 +6513,7 @@ server.tool("update_plan", "Update a plan", {
6513
6513
  }
6514
6514
  });
6515
6515
  server.tool("delete_plan", "Delete a plan", {
6516
- id: exports_external.string().describe("Plan ID (full or partial)")
6516
+ id: exports_external.string()
6517
6517
  }, async ({ id }) => {
6518
6518
  try {
6519
6519
  const resolvedId = resolveId(id, "plans");
@@ -6529,9 +6529,9 @@ server.tool("delete_plan", "Delete a plan", {
6529
6529
  }
6530
6530
  });
6531
6531
  server.tool("search_tasks", "Full-text search across task titles, descriptions, tags.", {
6532
- query: exports_external.string().describe("Search query"),
6533
- project_id: exports_external.string().optional().describe("Limit to project"),
6534
- task_list_id: exports_external.string().optional().describe("Filter by task list")
6532
+ query: exports_external.string(),
6533
+ project_id: exports_external.string().optional(),
6534
+ task_list_id: exports_external.string().optional()
6535
6535
  }, async ({ query, project_id, task_list_id }) => {
6536
6536
  try {
6537
6537
  const resolvedProjectId = project_id ? resolveId(project_id, "projects") : undefined;
@@ -6549,12 +6549,12 @@ ${text}` }] };
6549
6549
  }
6550
6550
  });
6551
6551
  server.tool("sync", "Sync tasks with an agent task list.", {
6552
- task_list_id: exports_external.string().optional().describe("Task list ID (required for Claude)"),
6553
- agent: exports_external.string().optional().describe("Agent/provider name (default: claude)"),
6554
- all_agents: exports_external.boolean().optional().describe("Sync across all configured agents"),
6555
- project_id: exports_external.string().optional().describe("Project ID \u2014 its task_list_id will be used for Claude if task_list_id is not provided"),
6556
- direction: exports_external.enum(["push", "pull", "both"]).optional().describe("Sync direction: push (SQLite->agent), pull (agent->SQLite), or both (default)"),
6557
- prefer: exports_external.enum(["local", "remote"]).optional().describe("Conflict strategy")
6552
+ task_list_id: exports_external.string().optional(),
6553
+ agent: exports_external.string().optional(),
6554
+ all_agents: exports_external.boolean().optional(),
6555
+ project_id: exports_external.string().optional(),
6556
+ direction: exports_external.enum(["push", "pull", "both"]).optional(),
6557
+ prefer: exports_external.enum(["local", "remote"]).optional()
6558
6558
  }, async ({ task_list_id, agent, all_agents, project_id, direction, prefer }) => {
6559
6559
  try {
6560
6560
  const resolvedProjectId = project_id ? resolveId(project_id, "projects") : undefined;
@@ -6597,8 +6597,8 @@ server.tool("sync", "Sync tasks with an agent task list.", {
6597
6597
  }
6598
6598
  });
6599
6599
  server.tool("register_agent", "Register an agent (idempotent by name).", {
6600
- name: exports_external.string().describe("Agent name"),
6601
- description: exports_external.string().optional().describe("Agent description")
6600
+ name: exports_external.string(),
6601
+ description: exports_external.string().optional()
6602
6602
  }, async ({ name, description }) => {
6603
6603
  try {
6604
6604
  const agent = registerAgent({ name, description });
@@ -6634,8 +6634,8 @@ ${text}` }] };
6634
6634
  }
6635
6635
  });
6636
6636
  server.tool("get_agent", "Get agent details by ID or name", {
6637
- id: exports_external.string().optional().describe("Agent ID"),
6638
- name: exports_external.string().optional().describe("Agent name")
6637
+ id: exports_external.string().optional(),
6638
+ name: exports_external.string().optional()
6639
6639
  }, async ({ id, name }) => {
6640
6640
  try {
6641
6641
  if (!id && !name) {
@@ -6662,10 +6662,10 @@ server.tool("get_agent", "Get agent details by ID or name", {
6662
6662
  }
6663
6663
  });
6664
6664
  server.tool("create_task_list", "Create a new task list", {
6665
- name: exports_external.string().describe("Task list name"),
6666
- slug: exports_external.string().optional().describe("URL-friendly slug (auto-generated from name if omitted)"),
6667
- project_id: exports_external.string().optional().describe("Project ID to associate with"),
6668
- description: exports_external.string().optional().describe("Task list description")
6665
+ name: exports_external.string(),
6666
+ slug: exports_external.string().optional(),
6667
+ project_id: exports_external.string().optional(),
6668
+ description: exports_external.string().optional()
6669
6669
  }, async (params) => {
6670
6670
  try {
6671
6671
  const resolved = { ...params };
@@ -6688,7 +6688,7 @@ Description: ${list.description}` : ""}`
6688
6688
  }
6689
6689
  });
6690
6690
  server.tool("list_task_lists", "List task lists, optionally filtered by project", {
6691
- project_id: exports_external.string().optional().describe("Filter by project")
6691
+ project_id: exports_external.string().optional()
6692
6692
  }, async ({ project_id }) => {
6693
6693
  try {
6694
6694
  const resolvedProjectId = project_id ? resolveId(project_id, "projects") : undefined;
@@ -6708,7 +6708,7 @@ ${text}` }] };
6708
6708
  }
6709
6709
  });
6710
6710
  server.tool("get_task_list", "Get task list details", {
6711
- id: exports_external.string().describe("Task list ID (full or partial)")
6711
+ id: exports_external.string()
6712
6712
  }, async ({ id }) => {
6713
6713
  try {
6714
6714
  const resolvedId = resolveId(id, "task_lists");
@@ -6736,9 +6736,9 @@ server.tool("get_task_list", "Get task list details", {
6736
6736
  }
6737
6737
  });
6738
6738
  server.tool("update_task_list", "Update a task list", {
6739
- id: exports_external.string().describe("Task list ID (full or partial)"),
6740
- name: exports_external.string().optional().describe("New name"),
6741
- description: exports_external.string().optional().describe("New description")
6739
+ id: exports_external.string(),
6740
+ name: exports_external.string().optional(),
6741
+ description: exports_external.string().optional()
6742
6742
  }, async ({ id, ...rest }) => {
6743
6743
  try {
6744
6744
  const resolvedId = resolveId(id, "task_lists");
@@ -6757,7 +6757,7 @@ Slug: ${list.slug}`
6757
6757
  }
6758
6758
  });
6759
6759
  server.tool("delete_task_list", "Delete a task list. Tasks lose association but keep data.", {
6760
- id: exports_external.string().describe("Task list ID (full or partial)")
6760
+ id: exports_external.string()
6761
6761
  }, async ({ id }) => {
6762
6762
  try {
6763
6763
  const resolvedId = resolveId(id, "task_lists");
@@ -6773,7 +6773,7 @@ server.tool("delete_task_list", "Delete a task list. Tasks lose association but
6773
6773
  }
6774
6774
  });
6775
6775
  server.tool("get_task_history", "Get audit log for a task.", {
6776
- task_id: exports_external.string().describe("Task ID (full or partial)")
6776
+ task_id: exports_external.string()
6777
6777
  }, async ({ task_id }) => {
6778
6778
  try {
6779
6779
  const resolvedId = resolveId(task_id);
@@ -6790,7 +6790,7 @@ ${text}` }] };
6790
6790
  }
6791
6791
  });
6792
6792
  server.tool("get_recent_activity", "Get recent task changes across all tasks.", {
6793
- limit: exports_external.number().optional().describe("Max entries (default 50)")
6793
+ limit: exports_external.number().optional()
6794
6794
  }, async ({ limit }) => {
6795
6795
  try {
6796
6796
  const { getRecentActivity: getRecentActivity2 } = await Promise.resolve().then(() => (init_audit(), exports_audit));
@@ -6806,9 +6806,9 @@ ${text}` }] };
6806
6806
  }
6807
6807
  });
6808
6808
  server.tool("create_webhook", "Register a webhook to receive task change events.", {
6809
- url: exports_external.string().describe("Webhook URL"),
6810
- events: exports_external.array(exports_external.string()).optional().describe("Event types to subscribe to (empty = all)"),
6811
- secret: exports_external.string().optional().describe("HMAC secret for signature verification")
6809
+ url: exports_external.string(),
6810
+ events: exports_external.array(exports_external.string()).optional(),
6811
+ secret: exports_external.string().optional()
6812
6812
  }, async (params) => {
6813
6813
  try {
6814
6814
  const { createWebhook: createWebhook2 } = await Promise.resolve().then(() => (init_webhooks(), exports_webhooks));
@@ -6833,7 +6833,7 @@ ${text}` }] };
6833
6833
  }
6834
6834
  });
6835
6835
  server.tool("delete_webhook", "Delete a webhook", {
6836
- id: exports_external.string().describe("Webhook ID")
6836
+ id: exports_external.string()
6837
6837
  }, async ({ id }) => {
6838
6838
  try {
6839
6839
  const { deleteWebhook: deleteWebhook2 } = await Promise.resolve().then(() => (init_webhooks(), exports_webhooks));
@@ -6844,13 +6844,13 @@ server.tool("delete_webhook", "Delete a webhook", {
6844
6844
  }
6845
6845
  });
6846
6846
  server.tool("create_template", "Create a reusable task template.", {
6847
- name: exports_external.string().describe("Template name"),
6848
- title_pattern: exports_external.string().describe("Title pattern for tasks created from this template"),
6849
- description: exports_external.string().optional().describe("Default description"),
6850
- priority: exports_external.enum(["low", "medium", "high", "critical"]).optional().describe("Default priority"),
6851
- tags: exports_external.array(exports_external.string()).optional().describe("Default tags"),
6852
- project_id: exports_external.string().optional().describe("Default project"),
6853
- plan_id: exports_external.string().optional().describe("Default plan")
6847
+ name: exports_external.string(),
6848
+ title_pattern: exports_external.string(),
6849
+ description: exports_external.string().optional(),
6850
+ priority: exports_external.enum(["low", "medium", "high", "critical"]).optional(),
6851
+ tags: exports_external.array(exports_external.string()).optional(),
6852
+ project_id: exports_external.string().optional(),
6853
+ plan_id: exports_external.string().optional()
6854
6854
  }, async (params) => {
6855
6855
  try {
6856
6856
  const { createTemplate: createTemplate2 } = await Promise.resolve().then(() => (init_templates(), exports_templates));
@@ -6875,12 +6875,12 @@ ${text}` }] };
6875
6875
  }
6876
6876
  });
6877
6877
  server.tool("create_task_from_template", "Create a task from a template with optional overrides.", {
6878
- template_id: exports_external.string().describe("Template ID"),
6879
- title: exports_external.string().optional().describe("Override title"),
6880
- description: exports_external.string().optional().describe("Override description"),
6881
- priority: exports_external.enum(["low", "medium", "high", "critical"]).optional().describe("Override priority"),
6882
- assigned_to: exports_external.string().optional().describe("Assign to agent"),
6883
- project_id: exports_external.string().optional().describe("Override project")
6878
+ template_id: exports_external.string(),
6879
+ title: exports_external.string().optional(),
6880
+ description: exports_external.string().optional(),
6881
+ priority: exports_external.enum(["low", "medium", "high", "critical"]).optional(),
6882
+ assigned_to: exports_external.string().optional(),
6883
+ project_id: exports_external.string().optional()
6884
6884
  }, async (params) => {
6885
6885
  try {
6886
6886
  const { taskFromTemplate: taskFromTemplate2 } = await Promise.resolve().then(() => (init_templates(), exports_templates));
@@ -6898,7 +6898,7 @@ ${task.id.slice(0, 8)} | ${task.priority} | ${task.title}` }] };
6898
6898
  return { content: [{ type: "text", text: formatError(e) }], isError: true };
6899
6899
  }
6900
6900
  });
6901
- server.tool("delete_template", "Delete a task template", { id: exports_external.string().describe("Template ID") }, async ({ id }) => {
6901
+ server.tool("delete_template", "Delete a task template", { id: exports_external.string() }, async ({ id }) => {
6902
6902
  try {
6903
6903
  const { deleteTemplate: deleteTemplate2 } = await Promise.resolve().then(() => (init_templates(), exports_templates));
6904
6904
  const deleted = deleteTemplate2(id);
@@ -6908,8 +6908,8 @@ server.tool("delete_template", "Delete a task template", { id: exports_external.
6908
6908
  }
6909
6909
  });
6910
6910
  server.tool("approve_task", "Approve a task that requires approval.", {
6911
- id: exports_external.string().describe("Task ID (full or partial)"),
6912
- agent_id: exports_external.string().optional().describe("Agent approving the task")
6911
+ id: exports_external.string(),
6912
+ agent_id: exports_external.string().optional()
6913
6913
  }, async ({ id, agent_id }) => {
6914
6914
  try {
6915
6915
  const resolvedId = resolveId(id);
@@ -6927,7 +6927,7 @@ server.tool("approve_task", "Approve a task that requires approval.", {
6927
6927
  }
6928
6928
  });
6929
6929
  server.tool("get_my_tasks", "Get assigned tasks and stats for an agent.", {
6930
- agent_name: exports_external.string().describe("Your agent name")
6930
+ agent_name: exports_external.string()
6931
6931
  }, async ({ agent_name }) => {
6932
6932
  try {
6933
6933
  const agent = registerAgent({ name: agent_name });
@@ -6959,7 +6959,7 @@ In Progress:`);
6959
6959
  return { content: [{ type: "text", text: formatError(e) }], isError: true };
6960
6960
  }
6961
6961
  });
6962
- server.tool("search_tools", "List tool names matching a query.", { query: exports_external.string().optional().describe("Keyword to filter tools") }, async ({ query }) => {
6962
+ server.tool("search_tools", "List tool names matching a query.", { query: exports_external.string().optional() }, async ({ query }) => {
6963
6963
  const all = [
6964
6964
  "create_task",
6965
6965
  "list_tasks",
@@ -7008,7 +7008,7 @@ server.tool("search_tools", "List tool names matching a query.", { query: export
7008
7008
  const matches = q ? all.filter((n) => n.includes(q)) : all;
7009
7009
  return { content: [{ type: "text", text: matches.join(", ") }] };
7010
7010
  });
7011
- server.tool("describe_tools", "Get descriptions for specific tools by name.", { names: exports_external.array(exports_external.string()).describe("Tool names from search_tools") }, async ({ names }) => {
7011
+ server.tool("describe_tools", "Get descriptions for specific tools by name.", { names: exports_external.array(exports_external.string()) }, async ({ names }) => {
7012
7012
  const descriptions = {
7013
7013
  create_task: "Create a task. Params: title(req), description, priority, project_id, plan_id, tags, assigned_to, estimated_minutes, requires_approval",
7014
7014
  list_tasks: "List tasks. Params: status, priority, project_id, plan_id, assigned_to, tags, limit",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/todos",
3
- "version": "0.9.27",
3
+ "version": "0.9.28",
4
4
  "description": "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",