@doist/todoist-mcp 12.5.6 → 12.5.7

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.
@@ -301,7 +301,7 @@ function Ve(e) {
301
301
  w(t?.message),
302
302
  w(r?.message),
303
303
  e instanceof Error ? e.message : w(e)
304
- ].filter((h) => !!h), l = d.find((h) => !He(h)) || d[0], u = L(
304
+ ].filter((m) => !!m), l = d.find((m) => !He(m)) || d[0], u = L(
305
305
  G(n?.errorExtra),
306
306
  G(n?.error_extra),
307
307
  G(n?.details),
@@ -371,7 +371,7 @@ function or(e) {
371
371
  const t = Ve(e);
372
372
  return t ? sr(t) : Bt(e);
373
373
  }
374
- const nr = "12.5.6", ir = {
374
+ const nr = "12.5.7", ir = {
375
375
  version: nr
376
376
  }, C = {
377
377
  /** Default limit for task listings */
@@ -434,7 +434,7 @@ const nr = "12.5.6", ir = {
434
434
  */
435
435
  QUEUE_WAIT_MS: 3e4
436
436
  };
437
- function mt(e, { queueTimeoutMs: t = Be.QUEUE_WAIT_MS } = {}) {
437
+ function ht(e, { queueTimeoutMs: t = Be.QUEUE_WAIT_MS } = {}) {
438
438
  if (!Number.isInteger(e) || e < 1)
439
439
  throw new Error(
440
440
  `maxConcurrent must be a positive integer, received ${String(e)}`
@@ -477,11 +477,11 @@ function mt(e, { queueTimeoutMs: t = Be.QUEUE_WAIT_MS } = {}) {
477
477
  }
478
478
  function Kt() {
479
479
  return {
480
- moves: mt(Be.TASK_MOVES),
481
- writes: mt(Be.WRITES)
480
+ moves: ht(Be.TASK_MOVES),
481
+ writes: ht(Be.WRITES)
482
482
  };
483
483
  }
484
- const ht = /* @__PURE__ */ new Map(), Yt = /* @__PURE__ */ new WeakMap();
484
+ const mt = /* @__PURE__ */ new Map(), Yt = /* @__PURE__ */ new WeakMap();
485
485
  let ft;
486
486
  function ar() {
487
487
  return ft ??= Kt(), ft;
@@ -491,8 +491,8 @@ function cr(e) {
491
491
  }
492
492
  function dr(e, t) {
493
493
  const r = cr(t);
494
- let o = ht.get(r);
495
- o || (o = Kt(), ht.set(r, o)), Yt.set(e, o);
494
+ let o = mt.get(r);
495
+ o || (o = Kt(), mt.set(r, o)), Yt.set(e, o);
496
496
  }
497
497
  function Gt(e) {
498
498
  return Yt.get(e) ?? ar();
@@ -505,11 +505,11 @@ function ur(e) {
505
505
  }
506
506
  const pr = "todoist-mcp", Je = ir.version, Vt = new Rs(), bt = Us(import.meta.url);
507
507
  let Te;
508
- const mr = async () => {
508
+ const hr = async () => {
509
509
  const e = bt.resolve("@doist/todoist-sdk"), t = _e(Ut(e), "transport", "http-dispatcher.js");
510
510
  return bt(t);
511
511
  };
512
- let hr = mr;
512
+ let mr = hr;
513
513
  function fr() {
514
514
  return `${pr}/${Je}`;
515
515
  }
@@ -583,7 +583,7 @@ function Tr(e, t) {
583
583
  }
584
584
  async function kr() {
585
585
  if (wr())
586
- return Te || (Te = hr().then((e) => e.getDefaultDispatcher()).catch((e) => {
586
+ return Te || (Te = mr().then((e) => e.getDefaultDispatcher()).catch((e) => {
587
587
  throw Te = void 0, e;
588
588
  })), Te;
589
589
  }
@@ -608,18 +608,18 @@ function Ir(e) {
608
608
  function Sr(e = globalThis.fetch, t = {}) {
609
609
  const r = e === globalThis.fetch, { enabled: o = !0, platform: n = "mcp", sessionId: i = Pe() } = t;
610
610
  return async (a, c = {}) => {
611
- const { timeout: d, headers: l, signal: u, ...p } = c, { signal: m, cleanup: h } = Tr(u, d);
611
+ const { timeout: d, headers: l, signal: u, ...p } = c, { signal: h, cleanup: m } = Tr(u, d);
612
612
  try {
613
613
  const y = {
614
614
  ...p,
615
- signal: m,
615
+ signal: h,
616
616
  ...o ? { headers: yr(l, { platform: n, sessionId: i }) } : l !== void 0 ? { headers: l } : {}
617
617
  };
618
618
  r && await vr(y);
619
619
  const f = await e(a, y);
620
620
  return Ir(f);
621
621
  } finally {
622
- h();
622
+ m();
623
623
  }
624
624
  };
625
625
  }
@@ -763,7 +763,7 @@ const g = {
763
763
  // OpenAI MCP tools
764
764
  SEARCH: "search",
765
765
  FETCH: "fetch"
766
- }, Fd = {
766
+ }, Md = {
767
767
  /**
768
768
  * Strips email addresses from tool outputs that expose user data.
769
769
  * Affects: find-project-collaborators, find-completed-tasks
@@ -836,11 +836,11 @@ function qr({
836
836
  }) {
837
837
  const n = o.some((d) => d.name === "strip_emails") && Br.includes(e.name), i = e.execute, a = async (d, l) => {
838
838
  try {
839
- let { textContent: u, structuredContent: p, contentItems: m } = await br(
839
+ let { textContent: u, structuredContent: p, contentItems: h } = await br(
840
840
  e.name,
841
841
  () => O(() => i(d, r))
842
842
  );
843
- return n && (u && (u = zr(u)), p && (p = qe(p))), Ur({ textContent: u, structuredContent: p, contentItems: m });
843
+ return n && (u && (u = zr(u)), p && (p = qe(p))), Ur({ textContent: u, structuredContent: p, contentItems: h });
844
844
  } catch (u) {
845
845
  return console.error(`Error executing tool ${e.name}:`, { args: Mr(d), error: u }), Lr(or(u));
846
846
  }
@@ -997,7 +997,7 @@ function Jr(e) {
997
997
  ]
998
998
  };
999
999
  }
1000
- const he = {
1000
+ const me = {
1001
1001
  name: "productivity-analysis",
1002
1002
  title: "Productivity Analysis",
1003
1003
  description: "Analyze your Todoist productivity with insights on completion trends, goal streaks, project distribution, and actionable recommendations. Gathers data from multiple tools and synthesizes a comprehensive report.",
@@ -1126,12 +1126,12 @@ class ro {
1126
1126
  try {
1127
1127
  const p = await t.getUser();
1128
1128
  if (p) {
1129
- const m = {
1129
+ const h = {
1130
1130
  id: p.id,
1131
1131
  name: p.fullName,
1132
1132
  email: p.email
1133
1133
  };
1134
- d.some((h) => h.id === p.id) || (d = [m, ...d]);
1134
+ d.some((m) => m.id === p.id) || (d = [h, ...d]);
1135
1135
  }
1136
1136
  } catch {
1137
1137
  }
@@ -1197,18 +1197,18 @@ class ro {
1197
1197
  const c = (await M({
1198
1198
  apiMethod: t.getProjects.bind(t),
1199
1199
  args: {}
1200
- })).filter((m) => m.isShared);
1200
+ })).filter((h) => h.isShared);
1201
1201
  if (c.length === 0) {
1202
- const m = [];
1203
- return n && oe.set(n, m), m;
1202
+ const h = [];
1203
+ return n && oe.set(n, h), h;
1204
1204
  }
1205
1205
  const d = [], l = /* @__PURE__ */ new Set(), u = c.map(
1206
- (m) => this.getProjectCollaborators(t, m.id, o)
1206
+ (h) => this.getProjectCollaborators(t, h.id, o)
1207
1207
  ), p = await Promise.allSettled(u);
1208
- for (const m of p)
1209
- if (m.status === "fulfilled")
1210
- for (const h of m.value)
1211
- h && !l.has(h.id) && (d.push(h), l.add(h.id));
1208
+ for (const h of p)
1209
+ if (h.status === "fulfilled")
1210
+ for (const m of h.value)
1211
+ m && !l.has(m.id) && (d.push(m), l.add(m.id));
1212
1212
  return n && oe.set(n, d), d;
1213
1213
  } catch {
1214
1214
  return [];
@@ -1419,7 +1419,7 @@ function po(e) {
1419
1419
  extraData: e.extraData ?? void 0
1420
1420
  };
1421
1421
  }
1422
- const mo = se.object({
1422
+ const ho = se.object({
1423
1423
  httpStatusCode: se.number(),
1424
1424
  responseData: se.object({
1425
1425
  error: se.string(),
@@ -1437,7 +1437,7 @@ async function tt({
1437
1437
  const { results: n, nextCursor: i } = await e.getTasksByFilter({ query: t, cursor: o, limit: r });
1438
1438
  return { tasks: n.map(P), nextCursor: i };
1439
1439
  } catch (n) {
1440
- const i = mo.safeParse(n);
1440
+ const i = ho.safeParse(n);
1441
1441
  if (!i.success)
1442
1442
  throw n;
1443
1443
  const { responseData: a } = i.data;
@@ -1493,12 +1493,12 @@ function ns(e) {
1493
1493
  return { timeBasedCount: t, locationCount: r };
1494
1494
  }
1495
1495
  const Ie = Re.map((e) => e.key);
1496
- function ho(e) {
1496
+ function mo(e) {
1497
1497
  if (typeof e != "string") return;
1498
1498
  const t = e.toLowerCase();
1499
1499
  return (Re.find((o) => o.key === t) ?? Re.find((o) => o.displayName.toLowerCase() === t))?.key;
1500
1500
  }
1501
- const fo = `Color for the entity. Accepts a color key (e.g. "berry_red") or display name (e.g. "Berry Red"). Valid colors: ${Ie.join(", ")}. Unrecognized colors are omitted and charcoal will be used as the default.`, le = s.preprocess(ho, s.enum(Ie).optional()).describe(fo);
1501
+ const fo = `Color for the entity. Accepts a color key (e.g. "berry_red") or display name (e.g. "Berry Red"). Valid colors: ${Ie.join(", ")}. Unrecognized colors are omitted and charcoal will be used as the default.`, le = s.preprocess(mo, s.enum(Ie).optional()).describe(fo);
1502
1502
  s.enum(Ie);
1503
1503
  const ue = s.enum(Ie).optional().catch(void 0), F = s.object({
1504
1504
  id: s.string(),
@@ -1636,14 +1636,14 @@ const bo = s.object({
1636
1636
  );
1637
1637
  }
1638
1638
  const n = r.some((l) => N(l.projectId)) ? await t.getUser() : void 0, i = r.map(async ({ content: l, taskId: u, projectId: p }) => {
1639
- const m = await de({
1639
+ const h = await de({
1640
1640
  projectId: p,
1641
1641
  user: n,
1642
1642
  client: n ? void 0 : t
1643
1643
  });
1644
1644
  return await t.addComment({
1645
1645
  content: l,
1646
- ...u ? { taskId: u } : { projectId: m }
1646
+ ...u ? { taskId: u } : { projectId: h }
1647
1647
  });
1648
1648
  }), c = (await Promise.all(i)).map(ge);
1649
1649
  return {
@@ -1752,7 +1752,7 @@ const xo = s.object({
1752
1752
  outputSchema: Eo,
1753
1753
  annotations: { readOnlyHint: !1, destructiveHint: !1, idempotentHint: !1 },
1754
1754
  async execute({ filters: e }, t) {
1755
- const r = Date.now(), o = e.map((p, m) => `tempFilterAdd${m}${r}`), n = e.map((p, m) => V(
1755
+ const r = Date.now(), o = e.map((p, h) => `tempFilterAdd${h}${r}`), n = e.map((p, h) => V(
1756
1756
  "filter_add",
1757
1757
  {
1758
1758
  name: p.name,
@@ -1760,9 +1760,9 @@ const xo = s.object({
1760
1760
  ...p.color !== void 0 ? { color: p.color } : {},
1761
1761
  ...p.isFavorite !== void 0 ? { isFavorite: p.isFavorite } : {}
1762
1762
  },
1763
- o[m]
1764
- )), a = (await t.sync({ commands: n })).tempIdMapping ?? {}, c = e.map((p, m) => {
1765
- const h = o[m], y = h !== void 0 ? a[h] : void 0;
1763
+ o[h]
1764
+ )), a = (await t.sync({ commands: n })).tempIdMapping ?? {}, c = e.map((p, h) => {
1765
+ const m = o[h], y = m !== void 0 ? a[m] : void 0;
1766
1766
  if (!y) return null;
1767
1767
  const f = p.color !== void 0 ? ue.parse(p.color) : void 0;
1768
1768
  return {
@@ -2394,15 +2394,15 @@ class dn {
2394
2394
  const u = await W.resolveUser(t, o);
2395
2395
  if (!u)
2396
2396
  return i.push("User not found - check spelling or invite to a shared project"), { canAssign: !1, projectInfo: l, recommendations: i };
2397
- const p = d.some((y) => y.id === u.userId), m = {
2397
+ const p = d.some((y) => y.id === u.userId), h = {
2398
2398
  resolvedName: u.displayName,
2399
2399
  isCollaborator: p
2400
2400
  };
2401
2401
  if (!p)
2402
2402
  return i.push(
2403
2403
  `Invite ${u.displayName} to collaborate on project "${c.name}"`
2404
- ), { canAssign: !1, projectInfo: l, userInfo: m, recommendations: i };
2405
- let h;
2404
+ ), { canAssign: !1, projectInfo: l, userInfo: h, recommendations: i };
2405
+ let m;
2406
2406
  if (n && n.length > 0) {
2407
2407
  let y = 0, f = 0;
2408
2408
  for (const v of n)
@@ -2411,13 +2411,13 @@ class dn {
2411
2411
  } catch {
2412
2412
  f++;
2413
2413
  }
2414
- h = { accessibleTasks: y, inaccessibleTasks: f }, f > 0 && i.push(`${f} task(s) are not accessible`);
2414
+ m = { accessibleTasks: y, inaccessibleTasks: f }, f > 0 && i.push(`${f} task(s) are not accessible`);
2415
2415
  }
2416
2416
  return a = !0, i.push(`Ready to assign tasks to ${u.displayName}`), {
2417
2417
  canAssign: a,
2418
2418
  projectInfo: l,
2419
- userInfo: m,
2420
- taskInfo: h,
2419
+ userInfo: h,
2420
+ taskInfo: m,
2421
2421
  recommendations: i
2422
2422
  };
2423
2423
  }
@@ -2473,38 +2473,38 @@ const Tt = qt.TASKS_PER_OPERATION, ln = s.object({
2473
2473
  annotations: { readOnlyHint: !1, destructiveHint: !1, idempotentHint: !1 },
2474
2474
  async execute(e, t) {
2475
2475
  const { tasks: r } = s.object(kt).parse(e), o = /* @__PURE__ */ new Map();
2476
- r.forEach((m, h) => {
2477
- const y = mn(m), f = o.get(y);
2478
- f ? f.push({ task: m, index: h }) : o.set(y, [{ task: m, index: h }]);
2476
+ r.forEach((h, m) => {
2477
+ const y = hn(h), f = o.get(y);
2478
+ f ? f.push({ task: h, index: m }) : o.set(y, [{ task: h, index: m }]);
2479
2479
  });
2480
2480
  const n = /* @__PURE__ */ new Map(), a = (await Promise.all(
2481
- [...o.values()].map(async (m) => {
2482
- const h = [];
2483
- for (const { task: y, index: f } of m)
2481
+ [...o.values()].map(async (h) => {
2482
+ const m = [];
2483
+ for (const { task: y, index: f } of h)
2484
2484
  try {
2485
- const v = await hn(y, t, n);
2486
- h.push({ index: f, result: { status: "fulfilled", value: v } });
2485
+ const v = await mn(y, t, n);
2486
+ m.push({ index: f, result: { status: "fulfilled", value: v } });
2487
2487
  } catch (v) {
2488
- h.push({
2488
+ m.push({
2489
2489
  index: f,
2490
2490
  result: { status: "rejected", reason: v }
2491
2491
  });
2492
2492
  }
2493
- return h;
2493
+ return m;
2494
2494
  })
2495
- )).flat().sort((m, h) => m.index - h.index), c = [], d = [];
2495
+ )).flat().sort((h, m) => h.index - m.index), c = [], d = [];
2496
2496
  let l = !1;
2497
- for (const { index: m, result: h } of a)
2498
- h.status === "fulfilled" ? c.push(h.value) : (l ||= h.reason instanceof ve, d.push({
2499
- item: r[m]?.content ?? `Task ${m + 1}`,
2497
+ for (const { index: h, result: m } of a)
2498
+ m.status === "fulfilled" ? c.push(m.value) : (l ||= m.reason instanceof ve, d.push({
2499
+ item: r[h]?.content ?? `Task ${h + 1}`,
2500
2500
  // Keep API error signals (status/code/tag) — `error.message`
2501
2501
  // alone collapses e.g. a full-project rejection into a bare
2502
2502
  // "HTTP 403: Forbidden"
2503
- error: z(h.reason)
2503
+ error: z(m.reason)
2504
2504
  }));
2505
2505
  if (c.length === 0 && d.length > 0) {
2506
- const m = d.map((y) => `"${y.item}": ${y.error}`).join("; "), h = `All ${d.length} task(s) failed to create: ${m}`;
2507
- throw l ? new zt(h) : new Error(h);
2506
+ const h = d.map((y) => `"${y.item}": ${y.error}`).join("; "), m = `All ${d.length} task(s) failed to create: ${h}`;
2507
+ throw l ? new zt(m) : new Error(m);
2508
2508
  }
2509
2509
  const u = c.map(P);
2510
2510
  return {
@@ -2524,10 +2524,10 @@ const Tt = qt.TASKS_PER_OPERATION, ln = s.object({
2524
2524
  };
2525
2525
  }
2526
2526
  };
2527
- function mn(e) {
2527
+ function hn(e) {
2528
2528
  return `${e.projectId ?? ""}|${e.sectionId ?? ""}|${e.parentId ?? ""}`;
2529
2529
  }
2530
- async function hn(e, t, r) {
2530
+ async function mn(e, t, r) {
2531
2531
  const {
2532
2532
  duration: o,
2533
2533
  projectId: n,
@@ -2538,25 +2538,25 @@ async function hn(e, t, r) {
2538
2538
  priority: l,
2539
2539
  labels: u,
2540
2540
  deadlineDate: p,
2541
- ...m
2542
- } = e, h = N(n) ? void 0 : n;
2543
- if (h) {
2544
- const f = await t.getProject(h);
2541
+ ...h
2542
+ } = e, m = N(n) ? void 0 : n;
2543
+ if (m) {
2544
+ const f = await t.getProject(m);
2545
2545
  if (f.isArchived)
2546
2546
  throw new Error(
2547
2547
  `Task "${e.content}": Cannot create task in archived project "${f.name}"`
2548
2548
  );
2549
2549
  }
2550
2550
  let y = {
2551
- ...m,
2552
- projectId: h,
2551
+ ...h,
2552
+ projectId: m,
2553
2553
  sectionId: i,
2554
2554
  parentId: a,
2555
2555
  order: c,
2556
2556
  labels: u,
2557
2557
  deadlineDate: p
2558
2558
  };
2559
- if (l && (y.priority = Zt(l)), d && !h && !i && !a)
2559
+ if (l && (y.priority = Zt(l)), d && !m && !i && !a)
2560
2560
  throw new Error(
2561
2561
  `Task "${e.content}": Cannot assign tasks without specifying project context. Please specify a projectId, sectionId, or parentId.`
2562
2562
  );
@@ -2572,7 +2572,7 @@ async function hn(e, t, r) {
2572
2572
  throw f instanceof _ ? new Error(`Task "${e.content}": ${f.message}`) : f;
2573
2573
  }
2574
2574
  if (d) {
2575
- let f = h;
2575
+ let f = m;
2576
2576
  if (!f && a)
2577
2577
  try {
2578
2578
  f = (await t.getTask(a)).projectId;
@@ -3145,12 +3145,12 @@ const Wn = {
3145
3145
  dateTo: l,
3146
3146
  limit: u,
3147
3147
  cursor: p
3148
- } = e, m = {
3148
+ } = e, h = {
3149
3149
  limit: u,
3150
3150
  cursor: p ?? null
3151
3151
  };
3152
- r && n ? m.objectEventTypes = `${r}:${n}` : r ? m.objectEventTypes = `${r}:` : n && (m.objectEventTypes = `:${n}`), o && o !== "remove" && (m.objectId = o), i && (m.parentProjectId = i), a && (m.parentItemId = a), c && (m.initiatorId = c), d && (m.dateFrom = d), l && (m.dateTo = l);
3153
- const { results: h, nextCursor: y } = await t.getActivityLogs(m), f = h.map(po);
3152
+ r && n ? h.objectEventTypes = `${r}:${n}` : r ? h.objectEventTypes = `${r}:` : n && (h.objectEventTypes = `:${n}`), o && o !== "remove" && (h.objectId = o), i && (h.parentProjectId = i), a && (h.parentItemId = a), c && (h.initiatorId = c), d && (h.dateFrom = d), l && (h.dateTo = l);
3153
+ const { results: m, nextCursor: y } = await t.getActivityLogs(h), f = m.map(po);
3154
3154
  return {
3155
3155
  textContent: qn({ events: f, args: e, nextCursor: y }),
3156
3156
  structuredContent: {
@@ -3321,7 +3321,7 @@ ${a}`;
3321
3321
  }
3322
3322
  return i;
3323
3323
  }
3324
- function ms(e) {
3324
+ function hs(e) {
3325
3325
  const t = e.getUTCFullYear(), r = String(e.getUTCMonth() + 1).padStart(2, "0"), o = String(e.getUTCDate()).padStart(2, "0");
3326
3326
  return `${t}-${r}-${o}`;
3327
3327
  }
@@ -3334,14 +3334,14 @@ function Qn(e) {
3334
3334
  }
3335
3335
  function ei(e, t) {
3336
3336
  const r = new Date(e.getTime() + t * 60 * 1e3);
3337
- return ms(r);
3337
+ return hs(r);
3338
3338
  }
3339
3339
  function jt(e, t) {
3340
3340
  const [r, o, n] = e.split("-"), i = Number(r), a = Number(o), c = Number(n);
3341
3341
  if (!Number.isFinite(i) || !Number.isFinite(a) || !Number.isFinite(c))
3342
3342
  throw new Error(`Invalid date format: ${e}. Expected YYYY-MM-DD.`);
3343
3343
  const d = new Date(Date.UTC(i, a - 1, c));
3344
- return d.setUTCDate(d.getUTCDate() + t), ms(d);
3344
+ return d.setUTCDate(d.getUTCDate() + t), hs(d);
3345
3345
  }
3346
3346
  const ti = ["and", "or"], ct = {
3347
3347
  labels: s.string().array().optional().describe("The labels to filter the tasks by"),
@@ -3410,8 +3410,8 @@ const oi = {
3410
3410
  "Cursor pagination requires explicit since and until. Reuse structuredContent.appliedFilters.since and structuredContent.appliedFilters.until from the previous page."
3411
3411
  );
3412
3412
  const u = await Qe(t, c), p = u?.email;
3413
- let h = dt(o, n);
3414
- u && p && (h = ce(h, `assigned to: ${p}`));
3413
+ let m = dt(o, n);
3414
+ u && p && (m = ce(m, `assigned to: ${p}`));
3415
3415
  const y = await t.getUser(), f = y.tzInfo?.gmtString || "+00:00", v = await de({
3416
3416
  projectId: d,
3417
3417
  user: y
@@ -3428,13 +3428,13 @@ const oi = {
3428
3428
  projectId: v,
3429
3429
  since: I,
3430
3430
  until: x,
3431
- ...h ? { filterQuery: h, filterLang: "en" } : {}
3431
+ ...m ? { filterQuery: m, filterLang: "en" } : {}
3432
3432
  }) : await t.getCompletedTasksByDueDate({
3433
3433
  ...l,
3434
3434
  projectId: v,
3435
3435
  since: I,
3436
3436
  until: x,
3437
- ...h ? { filterQuery: h, filterLang: "en" } : {}
3437
+ ...m ? { filterQuery: m, filterLang: "en" } : {}
3438
3438
  }), $ = b.map(P);
3439
3439
  return {
3440
3440
  textContent: ai({
@@ -3535,7 +3535,7 @@ function ui({
3535
3535
  `), l = e.length - a, u = l > 0 ? `${d}
3536
3536
  …and ${l} more` : d, p = [];
3537
3537
  e.length === 0 && (t.searchText ? (p.push("Try broader search terms"), p.push("Check spelling"), p.push("Remove searchText to see all labels")) : p.push("No personal labels created yet"));
3538
- const m = o.length > 0 ? `
3538
+ const h = o.length > 0 ? `
3539
3539
  Shared labels (${o.length}): ${o.join(", ")}` : `
3540
3540
  No shared labels.`;
3541
3541
  return K({
@@ -3546,16 +3546,16 @@ No shared labels.`;
3546
3546
  filterHints: i,
3547
3547
  previewLines: u,
3548
3548
  zeroReasonHints: p
3549
- }) + m;
3549
+ }) + h;
3550
3550
  }
3551
- const { FIND_PROJECTS: hs, ADD_TASKS: fs, UPDATE_TASKS: bs } = g, pi = {
3551
+ const { FIND_PROJECTS: ms, ADD_TASKS: fs, UPDATE_TASKS: bs } = g, pi = {
3552
3552
  projectId: s.string().min(1).optional().describe(
3553
3553
  'Optional. If provided, searches only collaborators of this project. If omitted, searches across the collaborators of all shared projects the authenticated user can access (plus the authenticated user themselves) — use this for general "find a user" / "who is X" lookups.'
3554
3554
  ),
3555
3555
  searchTerm: s.string().optional().describe(
3556
3556
  "Search for a user by name or email (partial and case insensitive match). If omitted, all users are returned."
3557
3557
  )
3558
- }, mi = {
3558
+ }, hi = {
3559
3559
  collaborators: s.array(yo).describe("The found users."),
3560
3560
  projectInfo: s.object({
3561
3561
  id: s.string().describe("The project ID."),
@@ -3565,11 +3565,11 @@ const { FIND_PROJECTS: hs, ADD_TASKS: fs, UPDATE_TASKS: bs } = g, pi = {
3565
3565
  totalCount: s.number().describe("The total number of users found."),
3566
3566
  totalAvailable: s.number().optional().describe("The total number of available users before the search filter was applied."),
3567
3567
  appliedFilters: s.record(s.string(), s.unknown())
3568
- }, hi = {
3568
+ }, mi = {
3569
3569
  name: g.FIND_PROJECT_COLLABORATORS,
3570
3570
  description: `Find Todoist users (collaborators, teammates) by name or email to look up their user ID. Use this whenever the user asks to find, look up, or identify a person — e.g. "find Carrie's user ID", "who is Ernesto", "look up a user". When projectId is omitted, searches across the collaborators of every shared project the authenticated user has access to, plus the authenticated user themselves — an empty result means the person is not a collaborator on any project you share with them, not necessarily that they do not exist in Todoist. When projectId is provided, searches only that project. Partial, case-insensitive match on name and email.`,
3571
3571
  parameters: pi,
3572
- outputSchema: mi,
3572
+ outputSchema: hi,
3573
3573
  annotations: { readOnlyHint: !0, destructiveHint: !1, idempotentHint: !0 },
3574
3574
  async execute(e, t) {
3575
3575
  const { projectId: r, searchTerm: o } = e;
@@ -3655,7 +3655,7 @@ async function fi({
3655
3655
  textContent: `No users found. You may have no shared projects, or collaborator data is not accessible.
3656
3656
 
3657
3657
  **Next steps:**
3658
- • Use ${hs} to find shared projects
3658
+ • Use ${ms} to find shared projects
3659
3659
  • Share a project to add collaborators
3660
3660
  • Ensure you have permission to view collaborators`,
3661
3661
  structuredContent: {
@@ -3712,13 +3712,13 @@ function ys({
3712
3712
  r && c.push(`matching "${r}"`), c.push(`in ${n}`);
3713
3713
  let d = [];
3714
3714
  e.length > 0 && (d = e.slice(0, 10).map((p) => {
3715
- const m = p.name || "Unknown Name", h = p.email || "No email";
3716
- return `• ${m} (${h}) - ID: ${p.id}`;
3715
+ const h = p.name || "Unknown Name", m = p.email || "No email";
3716
+ return `• ${h} (${m}) - ID: ${p.id}`;
3717
3717
  }), e.length > 10 && d.push(`... and ${e.length - 10} more`));
3718
3718
  const l = [];
3719
3719
  e.length === 0 && r && (l.push(`No users match "${r}"`), l.push("Try a broader search term or check spelling"), o > 0 && l.push(`${o} users available without filter`));
3720
3720
  const u = [];
3721
- return e.length > 0 ? (u.push(`Use ${fs} with responsibleUser to assign new tasks`), u.push(`Use ${bs} with responsibleUser to reassign existing tasks`), u.push("Use user names, emails, or IDs for assignments")) : (u.push(`Use ${hs} to find other projects`), r && o > 0 && u.push("Try searching without filters to see all users")), K({
3721
+ return e.length > 0 ? (u.push(`Use ${fs} with responsibleUser to assign new tasks`), u.push(`Use ${bs} with responsibleUser to reassign existing tasks`), u.push("Use user names, emails, or IDs for assignments")) : (u.push(`Use ${ms} to find other projects`), r && o > 0 && u.push("Try searching without filters to see all users")), K({
3722
3722
  subject: a,
3723
3723
  count: e.length,
3724
3724
  filterHints: c,
@@ -3762,7 +3762,7 @@ const { ADD_PROJECTS: Ct } = g, gi = {
3762
3762
  const c = Promise.resolve([]), [d, l] = await Promise.all([
3763
3763
  o === "archived" ? c : r ? rs(t, r) : os(t),
3764
3764
  o === "active" ? c : io(t)
3765
- ]), u = r ? ao(r) : null, p = u ? l.filter((m) => u.test(m.name)) : l;
3765
+ ]), u = r ? ao(r) : null, p = u ? l.filter((h) => u.test(h.name)) : l;
3766
3766
  n = [...d, ...p];
3767
3767
  } else {
3768
3768
  const c = o === "archived" ? await t.getArchivedProjects({
@@ -3995,13 +3995,13 @@ const Ei = {
3995
3995
  i = "overdue";
3996
3996
  else if (e.startDate === "today")
3997
3997
  if (e.daysCount > 1) {
3998
- const p = /* @__PURE__ */ new Date(), m = ae(p), h = Ue(p, e.daysCount), y = lt(h, { representation: "date" }), f = `(due after: ${m} | due: ${m}) & due before: ${y}`;
3998
+ const p = /* @__PURE__ */ new Date(), h = ae(p), m = Ue(p, e.daysCount), y = lt(m, { representation: "date" }), f = `(due after: ${h} | due: ${h}) & due before: ${y}`;
3999
3999
  i = e.overdueOption === "exclude-overdue" ? f : `(${f} | overdue)`;
4000
4000
  } else
4001
4001
  i = e.overdueOption === "exclude-overdue" ? "today" : "(today | overdue)";
4002
4002
  else if (e.startDate) {
4003
- const p = e.startDate, m = Ue(Ts(p), e.daysCount), h = lt(m, { representation: "date" });
4004
- i = `(due after: ${p} | due: ${p}) & due before: ${h}`;
4003
+ const p = e.startDate, h = Ue(Ts(p), e.daysCount), m = lt(h, { representation: "date" });
4004
+ i = `(due after: ${p} | due: ${p}) & due before: ${m}`;
4005
4005
  }
4006
4006
  const a = dt(e.labels, e.labelsOperator);
4007
4007
  a.length > 0 && (i = ce(i, `(${a})`));
@@ -4188,23 +4188,23 @@ const Li = new Ui(), { FIND_COMPLETED_TASKS: $t, ADD_TASKS: Dt } = g, Ni = {
4188
4188
  cursor: l,
4189
4189
  labels: u,
4190
4190
  labelsOperator: p,
4191
- filter: m,
4192
- filterIdOrName: h
4191
+ filter: h,
4192
+ filterIdOrName: m
4193
4193
  } = e, y = await t.getUser(), f = u && u.length > 0;
4194
- if (!r && !o && !n && !i && !a && !f && !m && !h)
4194
+ if (!r && !o && !n && !i && !a && !f && !h && !m)
4195
4195
  throw new Error(
4196
4196
  "At least one filter must be provided: searchText, projectId, sectionId, parentId, responsibleUser, labels, filter, or filterIdOrName"
4197
4197
  );
4198
- if (m && h)
4198
+ if (h && m)
4199
4199
  throw new Error(
4200
4200
  "The `filter` and `filterIdOrName` parameters cannot be used together. Provide only one."
4201
4201
  );
4202
- if ((m || h) && (o || n || i))
4202
+ if ((h || m) && (o || n || i))
4203
4203
  throw new Error(
4204
4204
  'The `filter`/`filterIdOrName` parameter cannot be combined with projectId, sectionId, or parentId. Use filter syntax instead (e.g. "##ProjectName").'
4205
4205
  );
4206
- let v = m;
4207
- h && (v = (await Li.resolveFilter(t, h)).filterQuery);
4206
+ let v = h;
4207
+ m && (v = (await Li.resolveFilter(t, m)).filterQuery);
4208
4208
  const j = await Qe(t, a), A = j?.userId, k = j?.email;
4209
4209
  if (o || n || i) {
4210
4210
  const D = {
@@ -4212,7 +4212,7 @@ const Li = new Ui(), { FIND_COMPLETED_TASKS: $t, ADD_TASKS: Dt } = g, Ni = {
4212
4212
  cursor: l ?? null
4213
4213
  };
4214
4214
  o && (D.projectId = await de({ projectId: o, user: y })), n && (D.sectionId = n), i && (D.parentId = i);
4215
- const { results: me, nextCursor: Y } = await t.getTasks(D), $e = me.map(P);
4215
+ const { results: he, nextCursor: Y } = await t.getTasks(D), $e = he.map(P);
4216
4216
  let H = r ? $e.filter(
4217
4217
  (te) => te.content.toLowerCase().includes(r.toLowerCase()) || te.description?.toLowerCase().includes(r.toLowerCase())
4218
4218
  ) : $e;
@@ -4243,7 +4243,7 @@ const Li = new Ui(), { FIND_COMPLETED_TASKS: $t, ADD_TASKS: Dt } = g, Ni = {
4243
4243
  };
4244
4244
  }
4245
4245
  if (A && !r && !f && !v) {
4246
- const { results: D, nextCursor: me } = await t.getTasksByFilter({
4246
+ const { results: D, nextCursor: he } = await t.getTasksByFilter({
4247
4247
  query: `assigned to: ${k}`,
4248
4248
  lang: "en",
4249
4249
  limit: d,
@@ -4253,15 +4253,15 @@ const Li = new Ui(), { FIND_COMPLETED_TASKS: $t, ADD_TASKS: Dt } = g, Ni = {
4253
4253
  textContent: Ee({
4254
4254
  tasks: Y,
4255
4255
  args: e,
4256
- nextCursor: me,
4256
+ nextCursor: he,
4257
4257
  isContainerSearch: !1,
4258
4258
  assigneeEmail: k
4259
4259
  }),
4260
4260
  structuredContent: {
4261
4261
  tasks: Y,
4262
- nextCursor: me ?? void 0,
4262
+ nextCursor: he ?? void 0,
4263
4263
  totalCount: Y.length,
4264
- hasMore: !!me,
4264
+ hasMore: !!he,
4265
4265
  appliedFilters: e
4266
4266
  }
4267
4267
  };
@@ -4269,7 +4269,7 @@ const Li = new Ui(), { FIND_COMPLETED_TASKS: $t, ADD_TASKS: Dt } = g, Ni = {
4269
4269
  let I = v ? `(${v})` : "";
4270
4270
  r && (I = ce(I, `search: ${r}`));
4271
4271
  const x = dt(u, p);
4272
- if (I = ce(I, x), !(h && !a && !c)) {
4272
+ if (I = ce(I, x), !(m && !a && !c)) {
4273
4273
  const D = ss({
4274
4274
  resolvedAssigneeId: A,
4275
4275
  assigneeEmail: k,
@@ -4547,7 +4547,7 @@ async function Gi(e) {
4547
4547
  ),
4548
4548
  totalProjects: t.length,
4549
4549
  totalSections: i.reduce(
4550
- (p, m) => p + (a[m]?.length || 0),
4550
+ (p, h) => p + (a[h]?.length || 0),
4551
4551
  0
4552
4552
  ),
4553
4553
  hasNestedProjects: d
@@ -4576,8 +4576,8 @@ async function Vi(e, t) {
4576
4576
  const p = i[u.id];
4577
4577
  if (!p?.length)
4578
4578
  continue;
4579
- const m = xt(p);
4580
- c.push(...Ke(m));
4579
+ const h = xt(p);
4580
+ c.push(...Ke(h));
4581
4581
  }
4582
4582
  const d = c.join(`
4583
4583
  `), l = {
@@ -4805,9 +4805,6 @@ const oa = {
4805
4805
  "Include detailed health context with project metrics and task-level data. May produce large output for projects with many tasks."
4806
4806
  )
4807
4807
  }, ia = s.object({
4808
- taskId: s.string().describe("The ID of the task this recommendation is for."),
4809
- recommendation: s.string().describe("The recommendation for this task.")
4810
- }), aa = s.object({
4811
4808
  id: s.string().describe("The task ID."),
4812
4809
  content: s.string().describe("The task content/title."),
4813
4810
  priority: s.string().describe("The task priority (1-4)."),
@@ -4815,7 +4812,7 @@ const oa = {
4815
4812
  deadline: s.string().optional().describe("The deadline date string, if set."),
4816
4813
  isCompleted: s.boolean().describe("Whether the task is completed."),
4817
4814
  labels: s.array(s.string()).describe("Labels applied to this task.")
4818
- }), ca = {
4815
+ }), aa = {
4819
4816
  projectId: s.string().describe("The project ID."),
4820
4817
  projectName: s.string().describe("The project name."),
4821
4818
  progress: s.object({
@@ -4827,7 +4824,6 @@ const oa = {
4827
4824
  status: s.enum(Ge).describe("The overall health status of the project."),
4828
4825
  description: s.string().optional().describe("Detailed description of the health assessment."),
4829
4826
  descriptionSummary: s.string().optional().describe("Brief summary of the health assessment."),
4830
- taskRecommendations: s.array(ia).optional().describe("Specific recommendations for individual tasks."),
4831
4827
  isStale: s.boolean().describe("Whether the health data is stale and may need refreshing."),
4832
4828
  updateInProgress: s.boolean().describe("Whether a health analysis update is currently in progress."),
4833
4829
  updatedAt: s.string().optional().describe("When the health assessment was last updated.")
@@ -4842,12 +4838,12 @@ const oa = {
4842
4838
  tasksCompletedThisWeek: s.number().describe("Tasks completed in the current week."),
4843
4839
  averageCompletionTime: s.number().optional().describe("Average task completion time in days, if available.")
4844
4840
  }).describe("Aggregated project metrics."),
4845
- tasks: s.array(aa).describe("Tasks in the project.")
4841
+ tasks: s.array(ia).describe("Tasks in the project.")
4846
4842
  }).optional().describe(
4847
4843
  "Detailed project context with metrics and task data. Only included when includeContext is true."
4848
4844
  )
4849
4845
  };
4850
- async function da(e, t, r) {
4846
+ async function ca(e, t, r) {
4851
4847
  if (r) {
4852
4848
  const [i, a, c] = await Promise.all([
4853
4849
  e.getProjectProgress(t),
@@ -4862,16 +4858,11 @@ async function da(e, t, r) {
4862
4858
  ]);
4863
4859
  return { progress: o, health: n };
4864
4860
  }
4865
- function la(e, { progress: t, health: r, context: o }) {
4861
+ function da(e, { progress: t, health: r, context: o }) {
4866
4862
  const n = [`# Project Health: ${e}`, ""];
4867
4863
  if (n.push(`**Status:** ${r.status}`), r.isStale && n.push("**Note:** Health data is stale and may not reflect recent changes."), r.updateInProgress && n.push("**Note:** A health analysis update is currently in progress."), r.updatedAt && n.push(`**Last Updated:** ${r.updatedAt.toISOString()}`), n.push(""), n.push("## Progress"), n.push(
4868
4864
  `**Completed:** ${t.completedCount} | **Active:** ${t.activeCount} | **Progress:** ${t.progressPercent}%`
4869
- ), r.description && (n.push(""), n.push("## Health Description"), n.push(r.description)), r.taskRecommendations && r.taskRecommendations.length > 0) {
4870
- n.push(""), n.push("## Task Recommendations");
4871
- for (const i of r.taskRecommendations)
4872
- n.push(`- **Task ${i.taskId}**: ${i.recommendation}`);
4873
- }
4874
- if (o) {
4865
+ ), r.description && (n.push(""), n.push("## Health Description"), n.push(r.description)), o) {
4875
4866
  n.push(""), n.push("## Project Metrics");
4876
4867
  const i = o.projectMetrics;
4877
4868
  if (n.push(`- **Total Tasks:** ${i.totalTasks}`), n.push(`- **Completed:** ${i.completedTasks}`), n.push(`- **Overdue:** ${i.overdueTasks}`), n.push(`- **Created This Week:** ${i.tasksCreatedThisWeek}`), n.push(`- **Completed This Week:** ${i.tasksCompletedThisWeek}`), i.averageCompletionTime !== null && n.push(`- **Avg Completion Time:** ${i.averageCompletionTime} days`), o.tasks.length > 0) {
@@ -4885,18 +4876,18 @@ function la(e, { progress: t, health: r, context: o }) {
4885
4876
  return n.join(`
4886
4877
  `);
4887
4878
  }
4888
- const ua = {
4879
+ const la = {
4889
4880
  name: g.GET_PROJECT_HEALTH,
4890
- description: "Get a comprehensive health assessment for a project including completion progress, health status (EXCELLENT, ON_TRACK, AT_RISK, CRITICAL), and optional detailed context with project metrics and task-level recommendations. Use includeContext=true for full detail including task data.",
4881
+ description: "Get a comprehensive health assessment for a project including completion progress, health status (EXCELLENT, ON_TRACK, AT_RISK, CRITICAL), and optional detailed context with project metrics and task-level data. Use includeContext=true for that full detail.",
4891
4882
  parameters: na,
4892
- outputSchema: ca,
4883
+ outputSchema: aa,
4893
4884
  annotations: {
4894
4885
  readOnlyHint: !0,
4895
4886
  destructiveHint: !1,
4896
4887
  idempotentHint: !0
4897
4888
  },
4898
4889
  async execute(e, t) {
4899
- const { projectId: r, includeContext: o } = e, n = await da(t, r, o), i = n.context?.projectName ?? `Project ${r}`, a = la(i, n), c = n.context ? {
4890
+ const { projectId: r, includeContext: o } = e, n = await ca(t, r, o), i = n.context?.projectName ?? `Project ${r}`, a = da(i, n), c = n.context ? {
4900
4891
  projectDescription: n.context.projectDescription ?? void 0,
4901
4892
  projectMetrics: {
4902
4893
  ...n.context.projectMetrics,
@@ -4926,7 +4917,6 @@ const ua = {
4926
4917
  status: n.health.status,
4927
4918
  description: n.health.description ?? void 0,
4928
4919
  descriptionSummary: n.health.descriptionSummary ?? void 0,
4929
- taskRecommendations: n.health.taskRecommendations ?? void 0,
4930
4920
  isStale: n.health.isStale,
4931
4921
  updateInProgress: n.health.updateInProgress,
4932
4922
  updatedAt: n.health.updatedAt?.toISOString()
@@ -4935,12 +4925,12 @@ const ua = {
4935
4925
  }
4936
4926
  };
4937
4927
  }
4938
- }, pa = {
4928
+ }, ua = {
4939
4929
  workspaceIdOrName: s.string().min(1).describe(
4940
4930
  "The workspace ID or name. Supports exact ID, exact name match (case-insensitive), or unique partial name match."
4941
4931
  ),
4942
4932
  projectIds: s.array(s.string().min(1)).min(1).optional().describe("Optional list of project IDs to scope insights to specific projects.")
4943
- }, ma = s.object({
4933
+ }, pa = s.object({
4944
4934
  projectId: s.string().describe("The project ID."),
4945
4935
  health: s.object({
4946
4936
  status: s.enum(Ge).describe("The health status of the project."),
@@ -4955,11 +4945,11 @@ const ua = {
4955
4945
  }), ha = {
4956
4946
  workspaceId: s.string().describe("The resolved workspace ID."),
4957
4947
  workspaceName: s.string().describe("The resolved workspace name."),
4958
- projectInsights: s.array(ma).describe("Health and progress insights for each project in the workspace.")
4959
- }, fa = {
4948
+ projectInsights: s.array(pa).describe("Health and progress insights for each project in the workspace.")
4949
+ }, ma = {
4960
4950
  name: g.GET_WORKSPACE_INSIGHTS,
4961
4951
  description: "Get aggregated health and progress insights across all projects in a workspace. Accepts workspace name or ID, with optional project ID filtering. Useful for a cross-project health overview.",
4962
- parameters: pa,
4952
+ parameters: ua,
4963
4953
  outputSchema: ha,
4964
4954
  annotations: {
4965
4955
  readOnlyHint: !0,
@@ -5000,7 +4990,7 @@ const ua = {
5000
4990
  };
5001
4991
  }
5002
4992
  };
5003
- function ba(e) {
4993
+ function fa(e) {
5004
4994
  const t = e.trim();
5005
4995
  if (!/^https?:\/\//i.test(t))
5006
4996
  return t;
@@ -5010,7 +5000,7 @@ function ba(e) {
5010
5000
  } catch {
5011
5001
  throw new Error(`Could not read a template ID from "${t}".`);
5012
5002
  }
5013
- if (!ga(r.hostname))
5003
+ if (!ba(r.hostname))
5014
5004
  throw new Error(
5015
5005
  `"${r.hostname}" is not a Todoist domain. Pass a todoist.com template URL or the template ID itself.`
5016
5006
  );
@@ -5022,11 +5012,11 @@ function ba(e) {
5022
5012
  throw new Error(`Could not read a template ID from "${t}".`);
5023
5013
  return i;
5024
5014
  }
5025
- function ga(e) {
5015
+ function ba(e) {
5026
5016
  const t = e.toLowerCase();
5027
5017
  return t === "todoist.com" || t.endsWith(".todoist.com");
5028
5018
  }
5029
- const ya = {
5019
+ const ga = {
5030
5020
  projectId: s.string().min(1).describe("The ID of the existing project to import the template into."),
5031
5021
  templateId: s.string().optional().describe(
5032
5022
  'The template to import — either a gallery slug ("product-launch"), a personal template ID ("UT_28Ex..."), or a full Todoist template URL, which is reduced to the ID automatically. Gallery templates work for anyone; personal templates only for the account that owns them. There is no way to list templates through this server, so only use the ID or URL the user supplied. Provide either this or `csvFileContent`, not both.'
@@ -5035,16 +5025,16 @@ const ya = {
5035
5025
  "Raw CSV template content, as produced by export-project-template. Provide either this or `templateId`, not both."
5036
5026
  ),
5037
5027
  locale: s.string().optional().describe('Locale for the imported content when using `templateId`. Defaults to "en".')
5038
- }, Ta = {
5028
+ }, ya = {
5039
5029
  sections: s.array(X).describe("Sections created by the import."),
5040
5030
  tasks: s.array(F).describe("Tasks created by the import."),
5041
5031
  comments: s.array(ye).describe("Comments created by the import."),
5042
5032
  totalCount: s.number().describe("The total number of objects created by the import.")
5043
- }, ka = {
5033
+ }, Ta = {
5044
5034
  name: g.IMPORT_PROJECT_TEMPLATE,
5045
5035
  description: "Import a template into an existing project, adding its tasks, sections and comments to whatever is already there. Source it by template ID/URL or by passing CSV content from export-project-template. To start a new project from a template, create the project with add-projects first, then import into it. This writes immediately and cannot be undone, so only run it against a project the user named.",
5046
- parameters: ya,
5047
- outputSchema: Ta,
5036
+ parameters: ga,
5037
+ outputSchema: ya,
5048
5038
  annotations: { readOnlyHint: !1, destructiveHint: !1, idempotentHint: !1 },
5049
5039
  async execute({ projectId: e, templateId: t, csvFileContent: r, locale: o }, n) {
5050
5040
  if (!!t == !!r)
@@ -5053,7 +5043,7 @@ const ya = {
5053
5043
  );
5054
5044
  const i = t ? await n.importTemplateFromId({
5055
5045
  projectId: e,
5056
- templateId: ba(t),
5046
+ templateId: fa(t),
5057
5047
  locale: o
5058
5048
  }) : await n.importTemplateIntoProject({
5059
5049
  projectId: e,
@@ -5061,7 +5051,7 @@ const ya = {
5061
5051
  fileName: "template.csv"
5062
5052
  }), a = i.sections.map(q), c = i.tasks.map(P), d = i.comments.map(ge), l = i.projects.length + a.length + c.length + d.length;
5063
5053
  return {
5064
- textContent: wa({
5054
+ textContent: ka({
5065
5055
  projectId: e,
5066
5056
  counts: {
5067
5057
  projects: i.projects.length,
@@ -5075,7 +5065,7 @@ const ya = {
5075
5065
  };
5076
5066
  }
5077
5067
  };
5078
- function wa({
5068
+ function ka({
5079
5069
  projectId: e,
5080
5070
  counts: t,
5081
5071
  totalCount: r
@@ -5085,7 +5075,7 @@ function wa({
5085
5075
  const o = Object.entries(t).filter(([, n]) => n > 0).map(([n, i]) => `${i} ${i === 1 ? n.replace(/s$/, "") : n}`);
5086
5076
  return `Imported template into project (id=${e}): ${o.join(", ")}.`;
5087
5077
  }
5088
- const va = {}, Ia = {
5078
+ const wa = {}, va = {
5089
5079
  id: s.string().describe("The unique identifier for the workspace."),
5090
5080
  name: s.string().describe("The name of the workspace."),
5091
5081
  plan: s.enum(Hs).describe("The workspace plan type."),
@@ -5094,12 +5084,12 @@ const va = {}, Ia = {
5094
5084
  isGuestAllowed: s.boolean().describe("Whether guests are allowed in the workspace."),
5095
5085
  createdAt: s.string().optional().describe("The ISO 8601 timestamp when the workspace was created."),
5096
5086
  creatorId: s.string().describe("The ID of the user who created the workspace.")
5097
- }, Sa = {
5087
+ }, Ia = {
5098
5088
  type: s.literal("workspaces").describe("The type of the response."),
5099
- workspaces: s.array(s.object(Ia)).describe("List of workspaces."),
5089
+ workspaces: s.array(s.object(va)).describe("List of workspaces."),
5100
5090
  count: s.number().describe("The total number of workspaces.")
5101
5091
  };
5102
- async function ja(e) {
5092
+ async function Sa(e) {
5103
5093
  const r = (await e.getWorkspaces()).map((a) => ({
5104
5094
  id: a.id,
5105
5095
  name: a.name,
@@ -5130,22 +5120,22 @@ async function ja(e) {
5130
5120
  };
5131
5121
  return { textContent: n, structuredContent: i };
5132
5122
  }
5133
- const Ca = {
5123
+ const ja = {
5134
5124
  name: g.LIST_WORKSPACES,
5135
5125
  description: "Get all workspaces for the authenticated user. Returns workspace details including ID, name, plan type (STARTER/BUSINESS), user role (ADMIN/MEMBER/GUEST), link sharing settings, guest permissions, creation date, and creator ID.",
5136
- parameters: va,
5137
- outputSchema: Sa,
5126
+ parameters: wa,
5127
+ outputSchema: Ia,
5138
5128
  annotations: { readOnlyHint: !0, destructiveHint: !1, idempotentHint: !0 },
5139
5129
  async execute(e, t) {
5140
- const r = await ja(t);
5130
+ const r = await Sa(t);
5141
5131
  return {
5142
5132
  textContent: r.textContent,
5143
5133
  structuredContent: r.structuredContent
5144
5134
  };
5145
5135
  }
5146
- }, { FIND_TASKS: $a, FIND_PROJECT_COLLABORATORS: Et, UPDATE_TASKS: Da } = g, xa = 50, Aa = {
5136
+ }, { FIND_TASKS: Ca, FIND_PROJECT_COLLABORATORS: Et, UPDATE_TASKS: $a } = g, Da = 50, xa = {
5147
5137
  operation: s.enum(["assign", "unassign", "reassign"]).describe("The assignment operation to perform."),
5148
- taskIds: s.array(s.string()).min(1).max(xa).describe("The IDs of the tasks to operate on (max 50)."),
5138
+ taskIds: s.array(s.string()).min(1).max(Da).describe("The IDs of the tasks to operate on (max 50)."),
5149
5139
  responsibleUser: s.string().optional().describe(
5150
5140
  'The user to assign tasks to. Can be "me" (assigns to current user), a user ID, name, or email. Required for assign and reassign operations.'
5151
5141
  ),
@@ -5153,7 +5143,7 @@ const Ca = {
5153
5143
  "For reassign operations: the current assignee to reassign from. Can be user ID, name, or email. Optional - if not provided, reassigns from any current assignee."
5154
5144
  ),
5155
5145
  dryRun: s.boolean().optional().default(!1).describe("If true, validates operations without executing them.")
5156
- }, Ea = {
5146
+ }, Aa = {
5157
5147
  results: s.array(
5158
5148
  s.object({
5159
5149
  taskId: s.string().describe("The ID of the task."),
@@ -5169,11 +5159,11 @@ const Ca = {
5169
5159
  failed: s.number().describe("Number of failed operations."),
5170
5160
  dryRun: s.boolean().describe("Whether this was a dry run.")
5171
5161
  }).optional().describe("Summary of the operation.")
5172
- }, Oa = {
5162
+ }, Ea = {
5173
5163
  name: g.MANAGE_ASSIGNMENTS,
5174
5164
  description: "Bulk assignment operations for multiple tasks. Supports assign, unassign, and reassign operations with atomic rollback on failures.",
5175
- parameters: Aa,
5176
- outputSchema: Ea,
5165
+ parameters: xa,
5166
+ outputSchema: Aa,
5177
5167
  annotations: { readOnlyHint: !1, destructiveHint: !0, idempotentHint: !1 },
5178
5168
  async execute(e, t) {
5179
5169
  const { operation: r, taskIds: o, responsibleUser: n, fromAssigneeUser: i, dryRun: a } = e;
@@ -5275,13 +5265,13 @@ const Ca = {
5275
5265
  }
5276
5266
  };
5277
5267
  }
5278
- const m = await at.validateBulkAssignment(
5268
+ const h = await at.validateBulkAssignment(
5279
5269
  t,
5280
5270
  p
5281
- ), h = [], y = [];
5271
+ ), m = [], y = [];
5282
5272
  for (let k = 0; k < p.length; k++) {
5283
- const I = p[k], x = m[k];
5284
- I && x?.isValid ? h.push({ assignment: I, validation: x }) : I?.taskId && y.push({
5273
+ const I = p[k], x = h[k];
5274
+ I && x?.isValid ? m.push({ assignment: I, validation: x }) : I?.taskId && y.push({
5285
5275
  taskId: I.taskId,
5286
5276
  success: !1,
5287
5277
  error: x?.error?.message || "Validation failed"
@@ -5336,7 +5326,7 @@ const Ca = {
5336
5326
  );
5337
5327
  return Promise.all(T);
5338
5328
  }
5339
- const v = await f(h, !a), j = [...v, ...y, ...l];
5329
+ const v = await f(m, !a), j = [...v, ...y, ...l];
5340
5330
  if (j.length > 0 && j.every((k) => !k.success)) {
5341
5331
  const k = j.map((I) => `"${I.taskId}": ${I.error}`).join("; ");
5342
5332
  throw new Error(`All ${j.length} ${r} operation(s) failed: ${k}`);
@@ -5396,8 +5386,8 @@ function Oe({
5396
5386
  `;
5397
5387
  }
5398
5388
  return !r && o.length > 0 ? (c += `**Next steps:**
5399
- `, c += `• Use ${$a} with responsibleUser to see ${e === "unassign" ? "unassigned" : "newly assigned"} tasks
5400
- `, c += `• Use ${Da} for individual assignment changes
5389
+ `, c += `• Use ${Ca} with responsibleUser to see ${e === "unassign" ? "unassigned" : "newly assigned"} tasks
5390
+ `, c += `• Use ${$a} for individual assignment changes
5401
5391
  `, n.length > 0 && (c += `• Check failed tasks and use ${Et} to verify collaborator access
5402
5392
  `)) : r ? (c += `**To execute:**
5403
5393
  `, c += `• Remove dryRun parameter and run again to execute changes
@@ -5409,17 +5399,17 @@ function Oe({
5409
5399
  `, c += `• Use dryRun=true to validate before executing
5410
5400
  `), c;
5411
5401
  }
5412
- const Pa = {
5402
+ const Oa = {
5413
5403
  action: s.enum(["archive", "unarchive"]).describe("The action to perform on the project."),
5414
5404
  projectId: s.string().min(1).describe("The ID of the project.")
5415
- }, _a = {
5405
+ }, Pa = {
5416
5406
  project: Q.describe("The updated project."),
5417
5407
  success: s.boolean().describe("Whether the action was successful.")
5418
- }, Ra = {
5408
+ }, _a = {
5419
5409
  name: g.PROJECT_MANAGEMENT,
5420
5410
  description: "Archive or unarchive a project by its ID.",
5421
- parameters: Pa,
5422
- outputSchema: _a,
5411
+ parameters: Oa,
5412
+ outputSchema: Pa,
5423
5413
  annotations: { readOnlyHint: !1, destructiveHint: !1, idempotentHint: !0 },
5424
5414
  async execute(e, t) {
5425
5415
  const r = e.action === "archive" ? await t.archiveProject(e.projectId) : await t.unarchiveProject(e.projectId), o = Z(r);
@@ -5431,7 +5421,7 @@ const Pa = {
5431
5421
  }
5432
5422
  };
5433
5423
  }
5434
- }, Ua = {
5424
+ }, Ra = {
5435
5425
  action: s.enum(["move-to-workspace", "move-to-personal"]).describe("The action to perform on the project."),
5436
5426
  projectId: s.string().min(1).describe("The ID of the project to move."),
5437
5427
  workspaceId: s.string().min(1).optional().describe("The target workspace ID. Required when action is move-to-workspace."),
@@ -5439,14 +5429,14 @@ const Pa = {
5439
5429
  visibility: s.enum(["restricted", "team", "public"]).optional().describe(
5440
5430
  "Optional access visibility for the project in the workspace (restricted, team, or public)."
5441
5431
  )
5442
- }, La = {
5432
+ }, Ua = {
5443
5433
  project: Q.describe("The moved project."),
5444
5434
  success: s.boolean().describe("Whether the move was successful.")
5445
- }, Na = {
5435
+ }, La = {
5446
5436
  name: g.PROJECT_MOVE,
5447
5437
  description: "Move a project between personal and workspace contexts.",
5448
- parameters: Ua,
5449
- outputSchema: La,
5438
+ parameters: Ra,
5439
+ outputSchema: Ua,
5450
5440
  annotations: { readOnlyHint: !1, destructiveHint: !1, idempotentHint: !0 },
5451
5441
  async execute(e, t) {
5452
5442
  let r;
@@ -5469,7 +5459,7 @@ const Pa = {
5469
5459
  }
5470
5460
  };
5471
5461
  }
5472
- }, Is = ["project", "section"], Ma = {
5462
+ }, Is = ["project", "section"], Na = {
5473
5463
  type: s.enum(Is).describe(
5474
5464
  'The type of entity to reorder. "project" reorders sibling projects within the same parent (and can move projects to a new parent). "section" reorders sections within the same project.'
5475
5465
  ),
@@ -5486,17 +5476,17 @@ const Pa = {
5486
5476
  ).min(1).describe(
5487
5477
  "The items to reorder or move. Each item must have at least order or parentId. Items with parentId will be moved first, then items with order will be reordered. All items being reordered should be siblings for predictable results."
5488
5478
  )
5489
- }, Fa = {
5479
+ }, Ma = {
5490
5480
  type: s.enum(Is).describe("The type of entity that was reordered/moved."),
5491
5481
  movedCount: s.number().describe("The number of entities moved to a new parent."),
5492
5482
  reorderedCount: s.number().describe("The number of entities reordered."),
5493
5483
  affectedIds: s.array(s.string()).describe("The IDs of all affected entities."),
5494
5484
  success: s.boolean().describe("Whether the operation was successful.")
5495
- }, Ha = {
5485
+ }, Fa = {
5496
5486
  name: g.REORDER_OBJECTS,
5497
5487
  description: 'Reorder sibling projects or sections, and optionally move projects to a new parent. For projects: set order to reorder siblings, and/or set parentId to move under a new parent (use "root" for top level). For sections: set order to reorder within a project.',
5498
- parameters: Ma,
5499
- outputSchema: Fa,
5488
+ parameters: Na,
5489
+ outputSchema: Ma,
5500
5490
  annotations: { readOnlyHint: !1, destructiveHint: !1, idempotentHint: !0 },
5501
5491
  async execute(e, t) {
5502
5492
  const { type: r, items: o } = e, n = /* @__PURE__ */ new Set();
@@ -5514,11 +5504,11 @@ const Pa = {
5514
5504
  }
5515
5505
  const i = [], a = o.filter((p) => p.parentId !== void 0);
5516
5506
  for (const p of a) {
5517
- const m = p.parentId;
5507
+ const h = p.parentId;
5518
5508
  i.push(
5519
5509
  V("project_move", {
5520
5510
  id: p.id,
5521
- parentId: m === "root" ? null : m
5511
+ parentId: h === "root" ? null : h
5522
5512
  })
5523
5513
  );
5524
5514
  }
@@ -5543,8 +5533,8 @@ const Pa = {
5543
5533
  try {
5544
5534
  await t.sync({ commands: i });
5545
5535
  } catch (p) {
5546
- const m = p instanceof Error ? p.message : String(p);
5547
- throw new Error(`Reorder failed: ${m}`);
5536
+ const h = p instanceof Error ? p.message : String(p);
5537
+ throw new Error(`Reorder failed: ${h}`);
5548
5538
  }
5549
5539
  const d = r === "project" ? "projects" : "sections", l = o.map((p) => p.id), u = [];
5550
5540
  return a.length > 0 && u.push(`moved ${a.length}`), c.length > 0 && u.push(`reordered ${c.length}`), {
@@ -5558,22 +5548,22 @@ const Pa = {
5558
5548
  }
5559
5549
  };
5560
5550
  }
5561
- }, Wa = s.object({
5551
+ }, Ha = s.object({
5562
5552
  id: s.string().min(1).describe("The ID of the task to reschedule."),
5563
5553
  date: s.string().min(1).describe(
5564
5554
  "The new date for the task. Use YYYY-MM-DD for date-only, or YYYY-MM-DDTHH:MM:SS for datetime. If date-only is provided and the task already has a specific time, the existing time is preserved."
5565
5555
  )
5566
- }), Ba = {
5567
- tasks: s.array(Wa).min(1).describe("The tasks to reschedule with their new dates.")
5568
- }, za = {
5556
+ }), Wa = {
5557
+ tasks: s.array(Ha).min(1).describe("The tasks to reschedule with their new dates.")
5558
+ }, Ba = {
5569
5559
  tasks: s.array(F).describe("The rescheduled tasks."),
5570
5560
  totalCount: s.number().describe("The total number of tasks rescheduled."),
5571
5561
  rescheduledTaskIds: s.array(s.string()).describe("The IDs of the rescheduled tasks.")
5572
- }, qa = {
5562
+ }, za = {
5573
5563
  name: g.RESCHEDULE_TASKS,
5574
5564
  description: "Reschedule tasks to new dates while preserving recurring schedules. Unlike update-tasks (which replaces the entire due string and can wipe recurrence), this tool changes only the date, keeping recurrence patterns intact. Use this when moving recurring tasks to a different date without altering their repeat pattern.",
5575
- parameters: Ba,
5576
- outputSchema: za,
5565
+ parameters: Wa,
5566
+ outputSchema: Ba,
5577
5567
  annotations: { readOnlyHint: !1, destructiveHint: !0, idempotentHint: !1 },
5578
5568
  async execute(e, t) {
5579
5569
  const { tasks: r } = e, n = (await Promise.all(
@@ -5586,7 +5576,7 @@ const Pa = {
5586
5576
  throw new Error(
5587
5577
  `Task "${l.content}" (${l.id}) has no due date. Rescheduling requires an existing due date.`
5588
5578
  );
5589
- const u = Ka(d.date, l.due);
5579
+ const u = qa(d.date, l.due);
5590
5580
  return V("item_update", {
5591
5581
  id: d.id,
5592
5582
  due: {
@@ -5617,16 +5607,16 @@ const Pa = {
5617
5607
  };
5618
5608
  }
5619
5609
  };
5620
- function Ka(e, t) {
5610
+ function qa(e, t) {
5621
5611
  if (/^\d{4}-\d{2}-\d{2}$/.test(e) && t.datetime) {
5622
5612
  const o = t.datetime.substring(10);
5623
5613
  return e + o;
5624
5614
  }
5625
5615
  return e;
5626
5616
  }
5627
- const Ya = {
5617
+ const Ka = {
5628
5618
  query: s.string().min(1).describe("The search query string to find tasks and projects.")
5629
- }, Ga = {
5619
+ }, Ya = {
5630
5620
  results: s.array(
5631
5621
  s.object({
5632
5622
  id: s.string().describe("The ID of the result."),
@@ -5635,11 +5625,11 @@ const Ya = {
5635
5625
  })
5636
5626
  ).describe("The search results."),
5637
5627
  totalCount: s.number().describe("Total number of results found.")
5638
- }, Va = {
5628
+ }, Ga = {
5639
5629
  name: g.SEARCH,
5640
5630
  description: "Search across tasks and projects in Todoist. Returns a list of relevant results with IDs, titles, and URLs.",
5641
- parameters: Ya,
5642
- outputSchema: Ga,
5631
+ parameters: Ka,
5632
+ outputSchema: Ya,
5643
5633
  annotations: { readOnlyHint: !0, destructiveHint: !1, idempotentHint: !0 },
5644
5634
  async execute(e, t) {
5645
5635
  const { query: r } = e, [o, n] = await Promise.all([
@@ -5668,19 +5658,19 @@ const Ya = {
5668
5658
  structuredContent: { results: i, totalCount: i.length }
5669
5659
  };
5670
5660
  }
5671
- }, Ja = {
5661
+ }, Va = {
5672
5662
  ids: s.array(s.string().min(1)).min(1).describe("The IDs of the tasks to uncomplete.")
5673
- }, Xa = {
5663
+ }, Ja = {
5674
5664
  uncompleted: s.array(s.string()).describe("The IDs of successfully uncompleted tasks."),
5675
5665
  failures: s.array(ee).describe("Failed task uncompletion with error details."),
5676
5666
  totalRequested: s.number().describe("The total number of tasks requested to uncomplete."),
5677
5667
  successCount: s.number().describe("The number of successfully uncompleted tasks."),
5678
5668
  failureCount: s.number().describe("The number of failed task uncompletions.")
5679
- }, Za = {
5669
+ }, Xa = {
5680
5670
  name: g.UNCOMPLETE_TASKS,
5681
5671
  description: "Uncomplete (reopen) one or more completed tasks by their IDs.",
5682
- parameters: Ja,
5683
- outputSchema: Xa,
5672
+ parameters: Va,
5673
+ outputSchema: Ja,
5684
5674
  annotations: { readOnlyHint: !1, destructiveHint: !1, idempotentHint: !1 },
5685
5675
  async execute(e, t) {
5686
5676
  const r = [], o = [];
@@ -5695,7 +5685,7 @@ const Ya = {
5695
5685
  });
5696
5686
  }
5697
5687
  return {
5698
- textContent: Qa({
5688
+ textContent: Za({
5699
5689
  uncompleted: r,
5700
5690
  failures: o,
5701
5691
  args: e
@@ -5710,7 +5700,7 @@ const Ya = {
5710
5700
  };
5711
5701
  }
5712
5702
  };
5713
- function Qa({
5703
+ function Za({
5714
5704
  uncompleted: e,
5715
5705
  failures: t,
5716
5706
  args: r
@@ -5724,28 +5714,28 @@ function Qa({
5724
5714
  failures: t
5725
5715
  });
5726
5716
  }
5727
- const ec = s.object({
5717
+ const Qa = s.object({
5728
5718
  id: s.string().min(1).describe("The ID of the comment to update."),
5729
5719
  content: s.string().min(1).describe("The new content for the comment.")
5730
- }), tc = {
5731
- comments: s.array(ec).min(1).describe("The comments to update.")
5732
- }, sc = {
5720
+ }), ec = {
5721
+ comments: s.array(Qa).min(1).describe("The comments to update.")
5722
+ }, tc = {
5733
5723
  comments: s.array(ye).describe("The updated comments."),
5734
5724
  totalCount: s.number().describe("The total number of comments updated."),
5735
5725
  updatedCommentIds: s.array(s.string()).describe("The IDs of the updated comments."),
5736
5726
  appliedOperations: s.object({
5737
5727
  updateCount: s.number().describe("The number of comments updated.")
5738
5728
  }).describe("Summary of operations performed.")
5739
- }, rc = {
5729
+ }, sc = {
5740
5730
  name: g.UPDATE_COMMENTS,
5741
5731
  description: "Update multiple existing comments with new content.",
5742
- parameters: tc,
5743
- outputSchema: sc,
5732
+ parameters: ec,
5733
+ outputSchema: tc,
5744
5734
  annotations: { readOnlyHint: !1, destructiveHint: !0, idempotentHint: !1 },
5745
5735
  async execute(e, t) {
5746
5736
  const { comments: r } = e, o = r.map(async (c) => await t.updateComment(c.id, { content: c.content })), i = (await Promise.all(o)).map(ge);
5747
5737
  return {
5748
- textContent: oc({
5738
+ textContent: rc({
5749
5739
  comments: i
5750
5740
  }),
5751
5741
  structuredContent: {
@@ -5759,7 +5749,7 @@ const ec = s.object({
5759
5749
  };
5760
5750
  }
5761
5751
  };
5762
- function oc({ comments: e }) {
5752
+ function rc({ comments: e }) {
5763
5753
  const t = e.filter((i) => i.taskId).length, r = e.filter((i) => i.projectId).length, o = [];
5764
5754
  if (t > 0) {
5765
5755
  const i = t > 1 ? "comments" : "comment";
@@ -5771,7 +5761,7 @@ function oc({ comments: e }) {
5771
5761
  }
5772
5762
  return o.length > 0 ? `Updated ${o.join(" and ")}` : "No comments updated";
5773
5763
  }
5774
- const nc = s.object({
5764
+ const oc = s.object({
5775
5765
  id: s.string().min(1).describe("The ID of the filter to update."),
5776
5766
  name: s.string().min(1).optional().describe("The new name of the filter."),
5777
5767
  query: s.string().min(1).optional().describe(
@@ -5779,9 +5769,9 @@ const nc = s.object({
5779
5769
  ),
5780
5770
  color: le,
5781
5771
  isFavorite: s.boolean().optional().describe("Whether to mark the filter as a favorite.")
5782
- }), ic = {
5783
- filters: s.array(nc).min(1).describe("The filters to update.")
5784
- }, ac = {
5772
+ }), nc = {
5773
+ filters: s.array(oc).min(1).describe("The filters to update.")
5774
+ }, ic = {
5785
5775
  filters: s.array(rt).describe("The updated filters."),
5786
5776
  totalCount: s.number().describe("The total number of filters updated."),
5787
5777
  updatedFilterIds: s.array(s.string()).describe("The IDs of the updated filters."),
@@ -5789,17 +5779,17 @@ const nc = s.object({
5789
5779
  updateCount: s.number().describe("The number of filters actually updated."),
5790
5780
  skippedCount: s.number().describe("The number of filters skipped (no changes).")
5791
5781
  }).describe("Summary of operations performed.")
5792
- }, cc = {
5782
+ }, ac = {
5793
5783
  name: g.UPDATE_FILTERS,
5794
5784
  description: "Update one or more existing personal filters with new values.",
5795
- parameters: ic,
5796
- outputSchema: ac,
5785
+ parameters: nc,
5786
+ outputSchema: ic,
5797
5787
  annotations: { readOnlyHint: !1, destructiveHint: !0, idempotentHint: !1 },
5798
5788
  async execute(e, t) {
5799
- const { filters: r } = e, o = [], i = r.map((m) => {
5800
- const h = lc(m);
5801
- return h !== null ? { kind: "skipped", reason: h } : (o.push(m), { kind: "updated", filter: m });
5802
- }).filter((m) => m.kind === "skipped").length;
5789
+ const { filters: r } = e, o = [], i = r.map((h) => {
5790
+ const m = dc(h);
5791
+ return m !== null ? { kind: "skipped", reason: m } : (o.push(h), { kind: "updated", filter: h });
5792
+ }).filter((h) => h.kind === "skipped").length;
5803
5793
  if (o.length === 0)
5804
5794
  return {
5805
5795
  textContent: `Updated 0 filters (${i} skipped - no changes)`,
@@ -5810,29 +5800,29 @@ const nc = s.object({
5810
5800
  appliedOperations: { updateCount: 0, skippedCount: i }
5811
5801
  }
5812
5802
  };
5813
- const a = o.map((m) => {
5814
- const { id: h, color: y, ...f } = m;
5803
+ const a = o.map((h) => {
5804
+ const { id: m, color: y, ...f } = h;
5815
5805
  return V("filter_update", {
5816
- id: h,
5806
+ id: m,
5817
5807
  ...f,
5818
5808
  ...y !== void 0 ? { color: y } : {}
5819
5809
  });
5820
5810
  });
5821
5811
  await t.sync({ commands: a });
5822
- const d = ((await t.sync({ resourceTypes: ["filters"], syncToken: "*" })).filters ?? []).filter((m) => !m.isDeleted), l = new Set(o.map((m) => m.id)), u = d.filter((m) => l.has(m.id)).map((m) => ({
5823
- id: m.id,
5824
- name: m.name,
5825
- query: m.query,
5826
- color: ue.parse(m.color),
5827
- isFavorite: m.isFavorite,
5828
- itemOrder: m.itemOrder
5812
+ const d = ((await t.sync({ resourceTypes: ["filters"], syncToken: "*" })).filters ?? []).filter((h) => !h.isDeleted), l = new Set(o.map((h) => h.id)), u = d.filter((h) => l.has(h.id)).map((h) => ({
5813
+ id: h.id,
5814
+ name: h.name,
5815
+ query: h.query,
5816
+ color: ue.parse(h.color),
5817
+ isFavorite: h.isFavorite,
5818
+ itemOrder: h.itemOrder
5829
5819
  }));
5830
5820
  return {
5831
- textContent: dc({ filters: u, skippedCount: i }),
5821
+ textContent: cc({ filters: u, skippedCount: i }),
5832
5822
  structuredContent: {
5833
5823
  filters: u,
5834
5824
  totalCount: u.length,
5835
- updatedFilterIds: u.map((m) => m.id),
5825
+ updatedFilterIds: u.map((h) => h.id),
5836
5826
  appliedOperations: {
5837
5827
  updateCount: u.length,
5838
5828
  skippedCount: i
@@ -5841,7 +5831,7 @@ const nc = s.object({
5841
5831
  };
5842
5832
  }
5843
5833
  };
5844
- function dc({
5834
+ function cc({
5845
5835
  filters: e,
5846
5836
  skippedCount: t
5847
5837
  }) {
@@ -5855,55 +5845,55 @@ ${n}`;
5855
5845
  }
5856
5846
  return o;
5857
5847
  }
5858
- function lc({ id: e, ...t }) {
5848
+ function dc({ id: e, ...t }) {
5859
5849
  return Object.values(t).every((o) => o === void 0) ? "no-fields" : null;
5860
5850
  }
5861
- const uc = s.object({
5851
+ const lc = s.object({
5862
5852
  labelType: s.literal("personal").describe("Update a personal label, identified by its ID."),
5863
5853
  id: s.string().min(1).describe("The ID of the personal label to update."),
5864
5854
  name: s.string().min(1).max(128).optional().describe("The new name of the label."),
5865
5855
  color: le,
5866
5856
  order: s.number().int().optional().describe("The new position of the label in the label list."),
5867
5857
  isFavorite: s.boolean().optional().describe("Whether to mark the label as a favorite.")
5868
- }), pc = s.object({
5858
+ }), uc = s.object({
5869
5859
  labelType: s.literal("shared").describe(
5870
5860
  "Rename a shared label across all tasks. Shared labels are identified by name; only renaming is supported (no color, order, or favorite)."
5871
5861
  ),
5872
5862
  name: s.string().min(1).describe("The current name of the shared label."),
5873
5863
  newName: s.string().min(1).describe("The new name for the shared label.")
5874
- }), mc = s.discriminatedUnion("labelType", [
5875
- uc,
5876
- pc
5864
+ }), pc = s.discriminatedUnion("labelType", [
5865
+ lc,
5866
+ uc
5877
5867
  ]), hc = {
5878
- labels: s.array(mc).min(1).describe(
5868
+ labels: s.array(pc).min(1).describe(
5879
5869
  'The labels to update. Use labelType="personal" with an ID to update a personal label, or labelType="shared" with name+newName to rename a shared label.'
5880
5870
  )
5881
- }, fc = s.object({
5871
+ }, mc = s.object({
5882
5872
  name: s.string().describe("The previous name of the shared label."),
5883
5873
  newName: s.string().describe("The new name of the shared label.")
5884
- }), bc = {
5874
+ }), fc = {
5885
5875
  updatedLabels: s.array(pe).describe("The updated personal labels."),
5886
- renamedSharedLabels: s.array(fc).describe("The shared labels that were renamed."),
5876
+ renamedSharedLabels: s.array(mc).describe("The shared labels that were renamed."),
5887
5877
  totalCount: s.number().describe("The total number of successful operations (personal + shared)."),
5888
5878
  appliedOperations: s.object({
5889
5879
  updateCount: s.number().describe("Number of personal labels updated."),
5890
5880
  renameCount: s.number().describe("Number of shared labels renamed."),
5891
5881
  skippedCount: s.number().describe("Number of operations skipped (no changes or shared label not found).")
5892
5882
  }).describe("Summary of operations performed.")
5893
- }, gc = {
5883
+ }, bc = {
5894
5884
  name: g.UPDATE_LABELS,
5895
5885
  description: "Update one or more existing labels. Personal labels (identified by ID) can have their name, color, order, and favorite flag updated. Shared labels (identified by name) can only be renamed.",
5896
5886
  parameters: hc,
5897
- outputSchema: bc,
5887
+ outputSchema: fc,
5898
5888
  annotations: { readOnlyHint: !1, destructiveHint: !0, idempotentHint: !1 },
5899
5889
  async execute(e, t) {
5900
5890
  const { labels: r } = e, o = await Promise.all(
5901
5891
  r.map(async (u) => {
5902
5892
  if (u.labelType === "personal") {
5903
- const m = Tc(u);
5904
- if (m !== null) return { kind: "skipped", reason: m };
5905
- const { id: h, labelType: y, ...f } = u;
5906
- return { kind: "updated", label: await t.updateLabel(h, f) };
5893
+ const h = yc(u);
5894
+ if (h !== null) return { kind: "skipped", reason: h };
5895
+ const { id: m, labelType: y, ...f } = u;
5896
+ return { kind: "updated", label: await t.updateLabel(m, f) };
5907
5897
  }
5908
5898
  return await t.renameSharedLabel({
5909
5899
  name: u.name,
@@ -5918,7 +5908,7 @@ const uc = s.object({
5918
5908
  (u) => u.kind === "skipped" && u.reason === "not-found"
5919
5909
  ).length;
5920
5910
  return {
5921
- textContent: yc({
5911
+ textContent: gc({
5922
5912
  updatedLabels: n,
5923
5913
  renamedSharedLabels: i,
5924
5914
  skippedNoFields: c,
@@ -5937,7 +5927,7 @@ const uc = s.object({
5937
5927
  };
5938
5928
  }
5939
5929
  };
5940
- function yc({
5930
+ function gc({
5941
5931
  updatedLabels: e,
5942
5932
  renamedSharedLabels: t,
5943
5933
  skippedNoFields: r,
@@ -5959,14 +5949,14 @@ function yc({
5959
5949
  return c.join(`
5960
5950
  `);
5961
5951
  }
5962
- function Tc({
5952
+ function yc({
5963
5953
  id: e,
5964
5954
  labelType: t,
5965
5955
  ...r
5966
5956
  }) {
5967
5957
  return Object.values(r).every((n) => n === void 0) ? "no-fields" : null;
5968
5958
  }
5969
- const kc = s.object({
5959
+ const Tc = s.object({
5970
5960
  id: s.string().min(1).describe("The ID of the project to update."),
5971
5961
  name: s.string().min(1).optional().describe("The new name of the project."),
5972
5962
  isFavorite: s.boolean().optional().describe("Whether the project is a favorite."),
@@ -5981,9 +5971,9 @@ const kc = s.object({
5981
5971
  )
5982
5972
  ).optional(),
5983
5973
  color: le
5984
- }), wc = {
5985
- projects: s.array(kc).min(1).describe("The projects to update.")
5986
- }, vc = {
5974
+ }), kc = {
5975
+ projects: s.array(Tc).min(1).describe("The projects to update.")
5976
+ }, wc = {
5987
5977
  projects: s.array(Q).describe("The updated projects."),
5988
5978
  totalCount: s.number().describe("The total number of projects updated."),
5989
5979
  updatedProjectIds: s.array(s.string()).describe("The IDs of the updated projects."),
@@ -5995,19 +5985,19 @@ const kc = s.object({
5995
5985
  skippedCount: s.number().describe("The number of projects skipped (no changes)."),
5996
5986
  failureCount: s.number().describe("The number of projects that failed to update.")
5997
5987
  }).describe("Summary of operations performed.")
5998
- }, Ic = {
5988
+ }, vc = {
5999
5989
  name: g.UPDATE_PROJECTS,
6000
5990
  description: "Update multiple existing projects with new values.",
6001
- parameters: wc,
6002
- outputSchema: vc,
5991
+ parameters: kc,
5992
+ outputSchema: wc,
6003
5993
  annotations: { readOnlyHint: !1, destructiveHint: !0, idempotentHint: !1 },
6004
5994
  async execute(e, t) {
6005
5995
  const { projects: r } = e, o = await Promise.allSettled(
6006
5996
  r.map(async (l) => {
6007
- const u = jc(l);
5997
+ const u = Sc(l);
6008
5998
  if (u !== null) return { kind: "skipped", reason: u };
6009
- const { id: p, ...m } = l;
6010
- return { kind: "updated", project: await O(() => t.updateProject(p, m)) };
5999
+ const { id: p, ...h } = l;
6000
+ return { kind: "updated", project: await O(() => t.updateProject(p, h)) };
6011
6001
  })
6012
6002
  ), n = [], i = [];
6013
6003
  let a = 0, c = 0;
@@ -6022,7 +6012,7 @@ const kc = s.object({
6022
6012
  u.value.kind === "updated" ? n.push(Z(u.value.project)) : u.value.reason === "no-fields" ? a++ : c++;
6023
6013
  }
6024
6014
  return {
6025
- textContent: Sc({
6015
+ textContent: Ic({
6026
6016
  projects: n,
6027
6017
  skippedNoFields: a,
6028
6018
  skippedNoValidValues: c,
@@ -6042,7 +6032,7 @@ const kc = s.object({
6042
6032
  };
6043
6033
  }
6044
6034
  };
6045
- function Sc({
6035
+ function Ic({
6046
6036
  projects: e,
6047
6037
  skippedNoFields: t,
6048
6038
  skippedNoValidValues: r,
@@ -6055,23 +6045,23 @@ function Sc({
6055
6045
  return t > 0 && c.push(`${t} skipped - no changes`), r > 0 && c.push(`${r} skipped - no valid field values`), c.length > 0 && (a += ` (${c.join(", ")})`), n > 0 && (a += `:
6056
6046
  ${i}`), it(a, o);
6057
6047
  }
6058
- function jc({ id: e, ...t }) {
6048
+ function Sc({ id: e, ...t }) {
6059
6049
  const r = Object.values(t);
6060
6050
  return r.length === 0 ? "no-fields" : r.every((o) => o === void 0) ? "no-valid-values" : null;
6061
6051
  }
6062
- const Cc = s.object({
6052
+ const jc = s.object({
6063
6053
  type: s.literal("relative"),
6064
6054
  id: s.string().min(1).describe("The ID of the relative reminder to update."),
6065
6055
  minuteOffset: s.number().int().min(0).optional().describe("New minute offset before task due time."),
6066
6056
  service: je.optional().describe('New delivery method: "email" or "push".'),
6067
6057
  isUrgent: Ce
6068
- }), $c = s.object({
6058
+ }), Cc = s.object({
6069
6059
  type: s.literal("absolute"),
6070
6060
  id: s.string().min(1).describe("The ID of the absolute reminder to update."),
6071
6061
  due: cs.optional().describe("New due date/time for the reminder."),
6072
6062
  service: je.optional().describe('New delivery method: "email" or "push".'),
6073
6063
  isUrgent: Ce
6074
- }), Dc = s.object({
6064
+ }), $c = s.object({
6075
6065
  type: s.literal("location"),
6076
6066
  id: s.string().min(1).describe("The ID of the location reminder to update."),
6077
6067
  name: s.string().optional().describe("New location name."),
@@ -6081,23 +6071,23 @@ const Cc = s.object({
6081
6071
  'New trigger condition: "on_enter" or "on_leave".'
6082
6072
  ),
6083
6073
  radius: s.number().int().optional().describe("New radius in meters.")
6084
- }), xc = s.discriminatedUnion("type", [
6074
+ }), Dc = s.discriminatedUnion("type", [
6075
+ jc,
6085
6076
  Cc,
6086
- $c,
6087
- Dc
6088
- ]), Ac = {
6089
- reminders: s.array(xc).min(1).max(we).describe(
6077
+ $c
6078
+ ]), xc = {
6079
+ reminders: s.array(Dc).min(1).max(we).describe(
6090
6080
  `Array of reminders to update (max ${we}). Each must include the reminder type and ID. Only include fields that need to change.`
6091
6081
  )
6092
- }, Ec = {
6082
+ }, Ac = {
6093
6083
  reminders: s.array(st).describe("The updated reminders."),
6094
6084
  totalCount: s.number().describe("Total reminders updated."),
6095
6085
  updatedReminderIds: s.array(s.string()).describe("IDs of updated reminders.")
6096
- }, Oc = {
6086
+ }, Ec = {
6097
6087
  name: g.UPDATE_REMINDERS,
6098
6088
  description: 'Update existing reminders. Each reminder must specify its type ("relative", "absolute", or "location") and ID. Only include fields that need to change.',
6099
- parameters: Ac,
6100
- outputSchema: Ec,
6089
+ parameters: xc,
6090
+ outputSchema: Ac,
6101
6091
  annotations: { readOnlyHint: !1, destructiveHint: !0, idempotentHint: !0 },
6102
6092
  async execute(e, t) {
6103
6093
  const { reminders: r } = e, o = r.map(async (d) => {
@@ -6131,7 +6121,7 @@ const Cc = s.object({
6131
6121
  }
6132
6122
  };
6133
6123
  }
6134
- }, Pc = s.object({
6124
+ }, Oc = s.object({
6135
6125
  id: s.string().min(1).describe("The ID of the section to update."),
6136
6126
  name: s.string().min(1).optional().describe("The new name of the section."),
6137
6127
  description: s.preprocess(
@@ -6146,17 +6136,17 @@ const Cc = s.object({
6146
6136
  ).optional()
6147
6137
  }).refine((e) => e.name !== void 0 || e.description !== void 0, {
6148
6138
  message: 'Provide at least one of "name" or "description" to update.'
6149
- }), _c = {
6150
- sections: s.array(Pc).min(1).describe("The sections to update.")
6151
- }, Rc = {
6139
+ }), Pc = {
6140
+ sections: s.array(Oc).min(1).describe("The sections to update.")
6141
+ }, _c = {
6152
6142
  sections: s.array(X).describe("The updated sections."),
6153
6143
  totalCount: s.number().describe("The total number of sections updated."),
6154
6144
  updatedSectionIds: s.array(s.string()).describe("The IDs of the updated sections.")
6155
- }, Uc = {
6145
+ }, Rc = {
6156
6146
  name: g.UPDATE_SECTIONS,
6157
6147
  description: "Update multiple existing sections with new values.",
6158
- parameters: _c,
6159
- outputSchema: Rc,
6148
+ parameters: Pc,
6149
+ outputSchema: _c,
6160
6150
  annotations: { readOnlyHint: !1, destructiveHint: !0, idempotentHint: !1 },
6161
6151
  async execute({ sections: e }, t) {
6162
6152
  const r = await Promise.all(
@@ -6169,7 +6159,7 @@ const Cc = s.object({
6169
6159
  })
6170
6160
  );
6171
6161
  return {
6172
- textContent: Lc({
6162
+ textContent: Uc({
6173
6163
  sections: r
6174
6164
  }),
6175
6165
  structuredContent: {
@@ -6180,7 +6170,7 @@ const Cc = s.object({
6180
6170
  };
6181
6171
  }
6182
6172
  };
6183
- function Lc({ sections: e }) {
6173
+ function Uc({ sections: e }) {
6184
6174
  const t = e.length, r = e.map((n) => `• ${n.name} (id=${n.id}, projectId=${n.projectId})`).join(`
6185
6175
  `);
6186
6176
  return `Updated ${t} section${t === 1 ? "" : "s"}:
@@ -6189,27 +6179,27 @@ ${r}`;
6189
6179
  function Ss(e, t) {
6190
6180
  return t.projectId !== void 0 ? e.projectId === t.projectId && !e.sectionId && !e.parentId : t.sectionId !== void 0 ? e.sectionId === t.sectionId && !e.parentId : e.parentId === t.parentId;
6191
6181
  }
6192
- function Nc(e, t) {
6182
+ function Lc(e, t) {
6193
6183
  return t.projectId !== void 0 ? e.projectId === t.projectId : t.sectionId !== void 0 ? e.sectionId === t.sectionId : e.parentId === t.parentId;
6194
6184
  }
6195
- function Mc(e) {
6185
+ function Nc(e) {
6196
6186
  return e.projectId !== void 0 ? `project:${e.projectId}` : e.sectionId !== void 0 ? `section:${e.sectionId}` : `parent:${e.parentId}`;
6197
6187
  }
6198
- function Fc(e) {
6188
+ function Mc(e) {
6199
6189
  const t = [];
6200
6190
  return e.projectId && t.push({ projectId: e.projectId }), e.sectionId && t.push({ sectionId: e.sectionId }), e.parentId && t.push({ parentId: e.parentId }), t;
6201
6191
  }
6202
- function Hc({
6192
+ function Fc({
6203
6193
  taskId: e,
6204
6194
  request: t,
6205
6195
  current: r
6206
6196
  }) {
6207
- const o = Fc(t);
6197
+ const o = Mc(t);
6208
6198
  if (o.length === 0)
6209
6199
  return { redundantMoveSkipped: !1 };
6210
6200
  let n = o, i = !1;
6211
6201
  if (r) {
6212
- const a = o.length === 1 ? (c) => Ss(r, c) : (c) => Nc(r, c);
6202
+ const a = o.length === 1 ? (c) => Ss(r, c) : (c) => Lc(r, c);
6213
6203
  n = o.filter((c) => !a(c)), i = n.length < o.length;
6214
6204
  }
6215
6205
  if (n.length === 0)
@@ -6220,7 +6210,7 @@ function Hc({
6220
6210
  );
6221
6211
  return { move: n[0], redundantMoveSkipped: i };
6222
6212
  }
6223
- const Wc = s.object({
6213
+ const Hc = s.object({
6224
6214
  id: s.string().min(1).describe("The ID of the task to update."),
6225
6215
  content: s.string().optional().describe(
6226
6216
  'The new task name/title. Should be concise and actionable (e.g., "Review PR #123", "Call dentist"). For longer content, use the description field instead. Supports Markdown.'
@@ -6265,9 +6255,9 @@ const Wc = s.object({
6265
6255
  isUncompletable: s.boolean().optional().describe(
6266
6256
  "Whether this task should be uncompletable (organizational header). Tasks with isUncompletable: true appear as organizational headers and cannot be completed."
6267
6257
  )
6268
- }), Bc = (e) => !!(e.projectId || e.sectionId || e.parentId), js = (e) => Object.keys(e).length > 0, zc = ["remove", "no date"], qc = ["remove", "no date", "no deadline"], Kc = "no date", Ye = qt.TASKS_PER_OPERATION, Ot = {
6269
- tasks: s.array(Wc).min(1).max(Ye).describe(`The tasks to update (max ${Ye}).`)
6270
- }, Yc = {
6258
+ }), Wc = (e) => !!(e.projectId || e.sectionId || e.parentId), js = (e) => Object.keys(e).length > 0, Bc = ["remove", "no date"], zc = ["remove", "no date", "no deadline"], qc = "no date", Ye = qt.TASKS_PER_OPERATION, Ot = {
6259
+ tasks: s.array(Hc).min(1).max(Ye).describe(`The tasks to update (max ${Ye}).`)
6260
+ }, Kc = {
6271
6261
  tasks: s.array(F).describe("The updated tasks."),
6272
6262
  totalCount: s.number().describe("The total number of tasks updated."),
6273
6263
  updatedTaskIds: s.array(s.string()).describe("The IDs of the updated tasks."),
@@ -6282,22 +6272,22 @@ const Wc = s.object({
6282
6272
  "Moves not performed because the task was already in the requested destination. A non-zero count means container fields were sent that did not need to be."
6283
6273
  )
6284
6274
  }).describe("Summary of operations performed.")
6285
- }, Gc = {
6275
+ }, Yc = {
6286
6276
  name: g.UPDATE_TASKS,
6287
6277
  description: "Update existing tasks including content, dates, priorities, and assignments. Send only the fields that change.",
6288
6278
  parameters: Ot,
6289
- outputSchema: Yc,
6279
+ outputSchema: Kc,
6290
6280
  annotations: { readOnlyHint: !1, destructiveHint: !0, idempotentHint: !1 },
6291
6281
  async execute(e, t) {
6292
6282
  const { tasks: r } = s.object(Ot).parse(e), o = r.map(() => ({ kind: "skipped" })), n = (T, b) => {
6293
6283
  o[T] = { kind: "failed", error: b };
6294
6284
  }, i = (T, b) => {
6295
6285
  n(T, z(b));
6296
- }, a = r.map((T, b) => ({ task: T, index: b })).filter(({ task: T }) => rd(T)), c = await Jc(
6286
+ }, a = r.map((T, b) => ({ task: T, index: b })).filter(({ task: T }) => sd(T)), c = await Vc(
6297
6287
  a.map(({ task: T }) => T),
6298
6288
  t
6299
6289
  ), d = await Promise.allSettled(
6300
- a.map(({ task: T, index: b }) => ed({ task: T, index: b, client: t, inbox: c }))
6290
+ a.map(({ task: T, index: b }) => Qc({ task: T, index: b, client: t, inbox: c }))
6301
6291
  ), l = [];
6302
6292
  for (const [T, b] of d.entries()) {
6303
6293
  const S = a[T]?.index ?? T;
@@ -6307,13 +6297,13 @@ const Wc = s.object({
6307
6297
  client: t,
6308
6298
  ids: [
6309
6299
  ...new Set(
6310
- l.filter((T) => Bc(T.moveRequest)).map((T) => T.id)
6300
+ l.filter((T) => Wc(T.moveRequest)).map((T) => T.id)
6311
6301
  )
6312
6302
  ]
6313
6303
  }), p = [];
6314
6304
  for (const T of l)
6315
6305
  try {
6316
- const b = Hc({
6306
+ const b = Fc({
6317
6307
  taskId: T.id,
6318
6308
  request: T.moveRequest,
6319
6309
  current: u.get(T.id)
@@ -6322,17 +6312,17 @@ const Wc = s.object({
6322
6312
  } catch (b) {
6323
6313
  i(T.index, b), T.failed = !0;
6324
6314
  }
6325
- const m = /* @__PURE__ */ new Map(), h = [], y = (T) => {
6315
+ const h = /* @__PURE__ */ new Map(), m = [], y = (T) => {
6326
6316
  const b = T.filter((S) => !S.failed);
6327
- b.length !== 0 && h.push(
6328
- Qc({
6317
+ b.length !== 0 && m.push(
6318
+ Zc({
6329
6319
  client: t,
6330
6320
  items: b,
6331
6321
  onUpdated: (S, $) => {
6332
6322
  o[S.index] = { kind: "updated", task: $ };
6333
6323
  },
6334
6324
  onFailed: (S, $) => {
6335
- const D = m.get(S.index);
6325
+ const D = h.get(S.index);
6336
6326
  if (D && "task" in D) {
6337
6327
  o[S.index] = {
6338
6328
  kind: "partial",
@@ -6346,14 +6336,14 @@ const Wc = s.object({
6346
6336
  })
6347
6337
  );
6348
6338
  }, f = new Set(p.map(({ item: T }) => T.index));
6349
- y(l.filter((T) => !f.has(T.index))), await Xc({
6339
+ y(l.filter((T) => !f.has(T.index))), await Jc({
6350
6340
  client: t,
6351
6341
  moving: p,
6352
- results: m,
6342
+ results: h,
6353
6343
  onResolved: (T) => {
6354
6344
  const b = [];
6355
6345
  for (const { item: S } of T) {
6356
- const $ = m.get(S.index);
6346
+ const $ = h.get(S.index);
6357
6347
  if ($ && "error" in $) {
6358
6348
  n(S.index, $.error), S.failed = !0;
6359
6349
  continue;
@@ -6362,16 +6352,16 @@ const Wc = s.object({
6362
6352
  }
6363
6353
  y(b);
6364
6354
  }
6365
- }), await Promise.all(h);
6355
+ }), await Promise.all(m);
6366
6356
  for (const T of l) {
6367
6357
  if (T.failed || js(T.updateArgs))
6368
6358
  continue;
6369
- const b = m.get(T.index);
6359
+ const b = h.get(T.index);
6370
6360
  b && "task" in b && (o[T.index] = { kind: "updated", task: b.task });
6371
6361
  }
6372
- const { updatedTasks: v, failures: j, skippedCount: A } = Vc({ tasks: r, outcomes: o }), k = l.filter((T) => T.redundantMoveSkipped).length, I = v.map(P);
6362
+ const { updatedTasks: v, failures: j, skippedCount: A } = Gc({ tasks: r, outcomes: o }), k = l.filter((T) => T.redundantMoveSkipped).length, I = v.map(P);
6373
6363
  return {
6374
- textContent: sd({
6364
+ textContent: td({
6375
6365
  tasks: I,
6376
6366
  failures: j,
6377
6367
  skippedCount: A,
@@ -6392,7 +6382,7 @@ const Wc = s.object({
6392
6382
  };
6393
6383
  }
6394
6384
  };
6395
- function Vc({ tasks: e, outcomes: t }) {
6385
+ function Gc({ tasks: e, outcomes: t }) {
6396
6386
  const r = [], o = [];
6397
6387
  let n = 0;
6398
6388
  for (const [i, a] of t.entries()) {
@@ -6409,7 +6399,7 @@ function Vc({ tasks: e, outcomes: t }) {
6409
6399
  }
6410
6400
  return { updatedTasks: r, failures: o, skippedCount: n };
6411
6401
  }
6412
- async function Jc(e, t) {
6402
+ async function Vc(e, t) {
6413
6403
  if (!e.some((r) => N(r.projectId)))
6414
6404
  return {};
6415
6405
  try {
@@ -6436,7 +6426,7 @@ async function Cs({
6436
6426
  }
6437
6427
  return r;
6438
6428
  }
6439
- async function Xc({
6429
+ async function Jc({
6440
6430
  client: e,
6441
6431
  moving: t,
6442
6432
  results: r,
@@ -6446,7 +6436,7 @@ async function Xc({
6446
6436
  return;
6447
6437
  const n = /* @__PURE__ */ new Map();
6448
6438
  for (const c of t) {
6449
- const d = Mc(c.move), l = n.get(d);
6439
+ const d = Nc(c.move), l = n.get(d);
6450
6440
  l ? l.push(c) : n.set(d, [c]);
6451
6441
  }
6452
6442
  const i = lr(e), a = [];
@@ -6462,12 +6452,12 @@ async function Xc({
6462
6452
  }
6463
6453
  const p = await i(
6464
6454
  () => O(() => e.moveTasks(d, l))
6465
- ), m = new Map(p.map((f) => [f.id, f])), h = [], y = [];
6455
+ ), h = new Map(p.map((f) => [f.id, f])), m = [], y = [];
6466
6456
  for (const f of c) {
6467
- const v = m.get(f.item.id);
6468
- v ? (r.set(f.item.index, { task: v }), y.push(f)) : h.push(f);
6457
+ const v = h.get(f.item.id);
6458
+ v ? (r.set(f.item.index, { task: v }), y.push(f)) : m.push(f);
6469
6459
  }
6470
- o(y), h.length > 0 && a.push({ group: h, destination: l });
6460
+ o(y), m.length > 0 && a.push({ group: m, destination: l });
6471
6461
  } catch (p) {
6472
6462
  if (u) {
6473
6463
  r.set(u.item.index, { error: z(p) }), o(c);
@@ -6477,12 +6467,12 @@ async function Xc({
6477
6467
  }
6478
6468
  }
6479
6469
  if (a.length > 0) {
6480
- await Zc({ client: e, unresolved: a, results: r });
6470
+ await Xc({ client: e, unresolved: a, results: r });
6481
6471
  for (const { group: c } of a)
6482
6472
  o(c);
6483
6473
  }
6484
6474
  }
6485
- async function Zc({
6475
+ async function Xc({
6486
6476
  client: e,
6487
6477
  unresolved: t,
6488
6478
  results: r
@@ -6500,7 +6490,7 @@ async function Zc({
6500
6490
  }
6501
6491
  }
6502
6492
  }
6503
- async function Qc({
6493
+ async function Zc({
6504
6494
  client: e,
6505
6495
  items: t,
6506
6496
  onUpdated: r,
@@ -6520,7 +6510,7 @@ async function Qc({
6520
6510
  })
6521
6511
  );
6522
6512
  }
6523
- async function ed({
6513
+ async function Qc({
6524
6514
  task: e,
6525
6515
  index: t,
6526
6516
  client: r,
@@ -6535,8 +6525,8 @@ async function ed({
6535
6525
  duration: l,
6536
6526
  responsibleUser: u,
6537
6527
  priority: p,
6538
- labels: m,
6539
- deadlineDate: h,
6528
+ labels: h,
6529
+ deadlineDate: m,
6540
6530
  ...y
6541
6531
  } = e;
6542
6532
  if (N(i) && o.error !== void 0)
@@ -6544,16 +6534,16 @@ async function ed({
6544
6534
  const f = N(i) ? o.projectId : i;
6545
6535
  let v = {
6546
6536
  ...y,
6547
- ...m !== void 0 && { labels: m }
6537
+ ...h !== void 0 && { labels: h }
6548
6538
  };
6549
6539
  p && (v.priority = Zt(p));
6550
6540
  const j = Pt(
6551
6541
  d,
6552
- zc,
6553
- Kc
6542
+ Bc,
6543
+ qc
6554
6544
  );
6555
6545
  j !== void 0 && (v = { ...v, dueString: j });
6556
- const A = Pt(h, qc, null);
6546
+ const A = Pt(m, zc, null);
6557
6547
  if (A !== void 0 && (v = { ...v, deadlineDate: A }), l)
6558
6548
  try {
6559
6549
  const { minutes: k } = Xt(l);
@@ -6567,7 +6557,7 @@ async function ed({
6567
6557
  }
6568
6558
  return u !== void 0 && (v = {
6569
6559
  ...v,
6570
- assigneeId: await td(r, n, u)
6560
+ assigneeId: await ed(r, n, u)
6571
6561
  }), {
6572
6562
  index: t,
6573
6563
  id: n,
@@ -6581,7 +6571,7 @@ async function ed({
6581
6571
  failed: !1
6582
6572
  };
6583
6573
  }
6584
- async function td(e, t, r) {
6574
+ async function ed(e, t, r) {
6585
6575
  if (r === null || r === "unassign")
6586
6576
  return null;
6587
6577
  const o = await at.validateTaskUpdateAssignment(
@@ -6595,7 +6585,7 @@ async function td(e, t, r) {
6595
6585
  }
6596
6586
  return o.resolvedUser?.userId;
6597
6587
  }
6598
- function sd({
6588
+ function td({
6599
6589
  tasks: e,
6600
6590
  failures: t,
6601
6591
  skippedCount: r,
@@ -6616,7 +6606,7 @@ function sd({
6616
6606
  Failed (${t.length}) - address or drop these items:
6617
6607
  ${l}${u}`;
6618
6608
  }
6619
- function rd({ id: e, ...t }) {
6609
+ function sd({ id: e, ...t }) {
6620
6610
  return Object.keys(t).length > 0;
6621
6611
  }
6622
6612
  function Pt(e, t, r) {
@@ -6627,7 +6617,7 @@ function Pt(e, t, r) {
6627
6617
  const o = e.trim().toLowerCase();
6628
6618
  return t.includes(o) ? r : e;
6629
6619
  }
6630
- const od = {}, nd = {
6620
+ const rd = {}, od = {
6631
6621
  type: s.literal("user_info").describe("The type of the response."),
6632
6622
  userId: s.string().describe("The user ID."),
6633
6623
  fullName: s.string().describe("The full name of the user."),
@@ -6644,25 +6634,25 @@ const od = {}, nd = {
6644
6634
  email: s.string().describe("The email address of the user."),
6645
6635
  plan: s.enum(["Todoist Free", "Todoist Pro", "Todoist Business"]).describe("The user plan.")
6646
6636
  };
6647
- function id(e) {
6637
+ function nd(e) {
6648
6638
  return e.businessAccountId ? "Todoist Business" : e.isPremium ? "Todoist Pro" : "Todoist Free";
6649
6639
  }
6650
- function ad(e, t) {
6640
+ function id(e, t) {
6651
6641
  const o = ((e.getDay() || 7) - t + 7) % 7, n = new Date(e);
6652
6642
  return n.setDate(e.getDate() - o), n;
6653
6643
  }
6654
- function cd(e) {
6644
+ function ad(e) {
6655
6645
  const t = new Date(e);
6656
6646
  return t.setDate(e.getDate() + 6), t;
6657
6647
  }
6658
- function dd(e) {
6648
+ function cd(e) {
6659
6649
  const t = new Date(e.getFullYear(), 0, 1), r = (e.getTime() - t.getTime()) / 864e5;
6660
6650
  return Math.ceil((r + t.getDay() + 1) / 7);
6661
6651
  }
6662
- function ld(e) {
6652
+ function dd(e) {
6663
6653
  return ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][e === 7 ? 0 : e] ?? "Unknown";
6664
6654
  }
6665
- function ud(e) {
6655
+ function ld(e) {
6666
6656
  try {
6667
6657
  return new Intl.DateTimeFormat("en-US", { timeZone: e }), !0;
6668
6658
  } catch {
@@ -6670,9 +6660,9 @@ function ud(e) {
6670
6660
  }
6671
6661
  }
6672
6662
  function $s(e) {
6673
- return ud(e) ? e : "UTC";
6663
+ return ld(e) ? e : "UTC";
6674
6664
  }
6675
- function pd(e, t) {
6665
+ function ud(e, t) {
6676
6666
  const r = $s(t);
6677
6667
  return e.toLocaleString("en-US", {
6678
6668
  timeZone: r,
@@ -6685,8 +6675,8 @@ function pd(e, t) {
6685
6675
  hour12: !1
6686
6676
  });
6687
6677
  }
6688
- async function md(e) {
6689
- const t = await e.getUser(), r = t.tzInfo?.timezone ?? "UTC", o = $s(r), n = /* @__PURE__ */ new Date(), i = pd(n, o), a = t.startDay ?? 1, c = ld(a), d = id(t), l = new Date(n.toLocaleString("en-US", { timeZone: o })), u = ad(l, a), p = cd(u), m = dd(l), y = [
6678
+ async function pd(e) {
6679
+ const t = await e.getUser(), r = t.tzInfo?.timezone ?? "UTC", o = $s(r), n = /* @__PURE__ */ new Date(), i = ud(n, o), a = t.startDay ?? 1, c = dd(a), d = nd(t), l = new Date(n.toLocaleString("en-US", { timeZone: o })), u = id(l, a), p = ad(u), h = cd(l), y = [
6690
6680
  "# User Information",
6691
6681
  "",
6692
6682
  `**User ID:** ${t.id}`,
@@ -6697,7 +6687,7 @@ async function md(e) {
6697
6687
  "",
6698
6688
  "## Week Settings",
6699
6689
  `**Week Start Day:** ${c} (${a})`,
6700
- `**Current Week:** Week ${m}`,
6690
+ `**Current Week:** Week ${h}`,
6701
6691
  `**Week Start Date:** ${ae(u)}`,
6702
6692
  `**Week End Date:** ${ae(p)}`,
6703
6693
  "",
@@ -6719,7 +6709,7 @@ async function md(e) {
6719
6709
  startDayName: c,
6720
6710
  weekStartDate: ae(u),
6721
6711
  weekEndDate: ae(p),
6722
- currentWeekNumber: m,
6712
+ currentWeekNumber: h,
6723
6713
  completedToday: t.completedToday,
6724
6714
  dailyGoal: t.dailyGoal,
6725
6715
  weeklyGoal: t.weeklyGoal,
@@ -6731,23 +6721,23 @@ async function md(e) {
6731
6721
  const hd = {
6732
6722
  name: g.USER_INFO,
6733
6723
  description: "Get comprehensive user information including user ID, full name, email, timezone with current local time, week start day preferences, current week dates, daily/weekly goal progress, and user plan (Free/Pro/Business).",
6734
- parameters: od,
6735
- outputSchema: nd,
6724
+ parameters: rd,
6725
+ outputSchema: od,
6736
6726
  annotations: { readOnlyHint: !0, destructiveHint: !1, idempotentHint: !0 },
6737
6727
  async execute(e, t) {
6738
- const r = await md(t);
6728
+ const r = await pd(t);
6739
6729
  return {
6740
6730
  textContent: r.textContent,
6741
6731
  structuredContent: r.structuredContent
6742
6732
  };
6743
6733
  }
6744
- }, _t = 10 * 1024 * 1024, fd = /* @__PURE__ */ new Set([
6734
+ }, _t = 10 * 1024 * 1024, md = /* @__PURE__ */ new Set([
6745
6735
  "image/png",
6746
6736
  "image/jpeg",
6747
6737
  "image/gif",
6748
6738
  "image/webp",
6749
6739
  "image/svg+xml"
6750
- ]), bd = /* @__PURE__ */ new Set([
6740
+ ]), fd = /* @__PURE__ */ new Set([
6751
6741
  "text/plain",
6752
6742
  "text/csv",
6753
6743
  "text/html",
@@ -6755,7 +6745,7 @@ const hd = {
6755
6745
  "application/json",
6756
6746
  "application/xml",
6757
6747
  "text/xml"
6758
- ]), gd = {
6748
+ ]), bd = {
6759
6749
  ".png": "image/png",
6760
6750
  ".jpg": "image/jpeg",
6761
6751
  ".jpeg": "image/jpeg",
@@ -6770,23 +6760,23 @@ const hd = {
6770
6760
  ".xml": "application/xml",
6771
6761
  ".pdf": "application/pdf"
6772
6762
  };
6773
- function yd(e) {
6774
- return fd.has(e) ? "image" : bd.has(e) || e.startsWith("text/") ? "text" : "binary";
6763
+ function gd(e) {
6764
+ return md.has(e) ? "image" : fd.has(e) || e.startsWith("text/") ? "text" : "binary";
6775
6765
  }
6776
- function Td(e) {
6766
+ function yd(e) {
6777
6767
  return (e.split(";")[0] ?? e).trim().toLowerCase();
6778
6768
  }
6779
- function kd(e) {
6769
+ function Td(e) {
6780
6770
  try {
6781
6771
  const t = new URL(e).pathname, r = t.lastIndexOf(".");
6782
6772
  if (r === -1) return;
6783
6773
  const o = t.slice(r).toLowerCase();
6784
- return gd[o];
6774
+ return bd[o];
6785
6775
  } catch {
6786
6776
  return;
6787
6777
  }
6788
6778
  }
6789
- function wd(e) {
6779
+ function kd(e) {
6790
6780
  try {
6791
6781
  const t = new URL(e).pathname, r = t.lastIndexOf("/");
6792
6782
  return r === -1 ? void 0 : t.slice(r + 1) || void 0;
@@ -6794,21 +6784,21 @@ function wd(e) {
6794
6784
  return;
6795
6785
  }
6796
6786
  }
6797
- const vd = {
6787
+ const wd = {
6798
6788
  fileUrl: s.url().describe(
6799
6789
  "The URL of the attachment file to view. Get this from the fileUrl field in a comment's fileAttachment."
6800
6790
  )
6801
- }, Id = {
6791
+ }, vd = {
6802
6792
  name: g.VIEW_ATTACHMENT,
6803
6793
  description: "View a file attachment from a Todoist comment. Pass the fileUrl from a comment's fileAttachment field. Supports images (returned inline), text files (returned as text), and binary files like PDFs (returned as embedded resources).",
6804
- parameters: vd,
6794
+ parameters: wd,
6805
6795
  annotations: {
6806
6796
  readOnlyHint: !0,
6807
6797
  destructiveHint: !1,
6808
6798
  idempotentHint: !0
6809
6799
  },
6810
6800
  async execute({ fileUrl: e }, t) {
6811
- const r = await t.viewAttachment(e), o = r.headers["content-length"], n = o ? Number.parseInt(o, 10) : void 0, i = wd(e), a = r.headers["content-type"], c = a ? Td(a) : void 0, d = c && c !== "application/octet-stream" ? c : kd(e) ?? c ?? "application/octet-stream";
6801
+ const r = await t.viewAttachment(e), o = r.headers["content-length"], n = o ? Number.parseInt(o, 10) : void 0, i = kd(e), a = r.headers["content-type"], c = a ? yd(a) : void 0, d = c && c !== "application/octet-stream" ? c : Td(e) ?? c ?? "application/octet-stream";
6812
6802
  if (n && n > _t)
6813
6803
  return {
6814
6804
  textContent: `Attachment "${i ?? e}" is too large to display inline (${(n / 1024 / 1024).toFixed(1)}MB, limit is 10MB). File type: ${d}`
@@ -6818,15 +6808,15 @@ const vd = {
6818
6808
  return {
6819
6809
  textContent: `Attachment "${i ?? e}" is too large to display inline (${(u / 1024 / 1024).toFixed(1)}MB, limit is 10MB). File type: ${d}`
6820
6810
  };
6821
- const p = yd(d), m = [];
6822
- return p === "image" ? m.push({
6811
+ const p = gd(d), h = [];
6812
+ return p === "image" ? h.push({
6823
6813
  type: "image",
6824
6814
  data: l.toString("base64"),
6825
6815
  mimeType: d
6826
- }) : p === "text" ? m.push({
6816
+ }) : p === "text" ? h.push({
6827
6817
  type: "text",
6828
6818
  text: l.toString("utf-8")
6829
- }) : m.push({
6819
+ }) : h.push({
6830
6820
  type: "resource",
6831
6821
  resource: {
6832
6822
  uri: e,
@@ -6835,80 +6825,80 @@ const vd = {
6835
6825
  }
6836
6826
  }), {
6837
6827
  textContent: `Attachment: ${i ?? "unknown"} (${d}, ${(u / 1024).toFixed(1)}KB)`,
6838
- contentItems: m
6828
+ contentItems: h
6839
6829
  };
6840
6830
  }
6841
- }, Sd = {
6831
+ }, Id = {
6842
6832
  ...Pi,
6843
6833
  _meta: {
6844
6834
  ui: {
6845
6835
  resourceUri: Le
6846
6836
  }
6847
6837
  }
6848
- }, jd = {
6838
+ }, Sd = {
6849
6839
  // Task management tools
6850
6840
  addTasks: pn,
6851
6841
  completeTasks: wn,
6852
- uncompleteTasks: Za,
6853
- updateTasks: Gc,
6854
- rescheduleTasks: qa,
6842
+ uncompleteTasks: Xa,
6843
+ updateTasks: Yc,
6844
+ rescheduleTasks: za,
6855
6845
  findTasks: Fi,
6856
- findTasksByDate: Sd,
6846
+ findTasksByDate: Id,
6857
6847
  findCompletedTasks: ii,
6858
6848
  // Project management tools
6859
6849
  addProjects: Yo,
6860
- updateProjects: Ic,
6850
+ updateProjects: vc,
6861
6851
  findProjects: ki,
6862
- projectManagement: Ra,
6863
- projectMove: Na,
6852
+ projectManagement: _a,
6853
+ projectMove: La,
6864
6854
  // Section management tools
6865
6855
  addSections: an,
6866
- updateSections: Uc,
6856
+ updateSections: Rc,
6867
6857
  findSections: xi,
6868
6858
  // Comment management tools
6869
6859
  addComments: Io,
6870
6860
  findComments: Xn,
6871
- updateComments: rc,
6861
+ updateComments: sc,
6872
6862
  // Reminder management tools
6873
6863
  addReminders: tn,
6874
6864
  findReminders: Si,
6875
- updateReminders: Oc,
6865
+ updateReminders: Ec,
6876
6866
  // Attachment tools
6877
- viewAttachment: Id,
6867
+ viewAttachment: vd,
6878
6868
  // Label management tools
6879
6869
  addLabels: Uo,
6880
- updateLabels: gc,
6870
+ updateLabels: bc,
6881
6871
  findLabels: li,
6882
6872
  // Filter management tools
6883
6873
  findFilters: $o,
6884
6874
  addFilters: Oo,
6885
- updateFilters: cc,
6875
+ updateFilters: ac,
6886
6876
  // Activity and audit tools
6887
6877
  findActivity: zn,
6888
6878
  getProductivityStats: Qi,
6889
6879
  // Health and insights tools
6890
- getProjectHealth: ua,
6880
+ getProjectHealth: la,
6891
6881
  getProjectActivityStats: oa,
6892
6882
  analyzeProjectHealth: yn,
6893
- getWorkspaceInsights: fa,
6883
+ getWorkspaceInsights: ma,
6894
6884
  // General tools
6895
6885
  getOverview: Ji,
6896
6886
  deleteObject: jn,
6897
6887
  fetchObject: Ln,
6898
- reorderObjects: Ha,
6888
+ reorderObjects: Fa,
6899
6889
  userInfo: hd,
6900
6890
  // Assignment and collaboration tools
6901
- findProjectCollaborators: hi,
6902
- manageAssignments: Oa,
6891
+ findProjectCollaborators: mi,
6892
+ manageAssignments: Ea,
6903
6893
  // Template tools
6904
6894
  exportProjectTemplate: Dn,
6905
- importProjectTemplate: ka,
6895
+ importProjectTemplate: Ta,
6906
6896
  // Workspace tools
6907
- listWorkspaces: Ca,
6897
+ listWorkspaces: ja,
6908
6898
  // OpenAI MCP tools
6909
- search: Va,
6899
+ search: Ga,
6910
6900
  fetch: Fn
6911
- }, Cd = Object.values(jd), $d = `
6901
+ }, jd = Object.values(Sd), Cd = `
6912
6902
  ## Todoist Task and Project Management Tools
6913
6903
 
6914
6904
  You have access to comprehensive Todoist management tools for personal productivity and team collaboration. Use these tools to help users manage tasks, projects, sections, comments, and assignments effectively.
@@ -6960,7 +6950,7 @@ Use the **productivity-analysis** prompt for a combined productivity review —
6960
6950
 
6961
6951
  Always provide clear, actionable task titles and descriptions. Use the overview tools to give users context about their workload and project status.
6962
6952
  `;
6963
- function Hd({
6953
+ function Fd({
6964
6954
  todoistApiKey: e,
6965
6955
  baseUrl: t,
6966
6956
  features: r = []
@@ -6972,21 +6962,21 @@ function Hd({
6972
6962
  tools: { listChanged: !0 },
6973
6963
  prompts: { listChanged: !0 }
6974
6964
  },
6975
- instructions: $d
6965
+ instructions: Cd
6976
6966
  }
6977
6967
  ), n = jr(e, { baseUrl: t });
6978
6968
  Gs(o);
6979
6969
  const i = { server: o, client: n, features: r };
6980
- for (const a of Cd)
6970
+ for (const a of jd)
6981
6971
  qr({ tool: a, ...i });
6982
6972
  return o.registerPrompt(
6983
- he.name,
6973
+ me.name,
6984
6974
  {
6985
- title: he.title,
6986
- description: he.description,
6987
- argsSchema: he.argsSchema
6975
+ title: me.title,
6976
+ description: me.description,
6977
+ argsSchema: me.argsSchema
6988
6978
  },
6989
- he.callback
6979
+ me.callback
6990
6980
  ), o;
6991
6981
  }
6992
6982
  export {
@@ -6994,28 +6984,28 @@ export {
6994
6984
  Ji as A,
6995
6985
  Qi as B,
6996
6986
  oa as C,
6997
- ua as D,
6998
- fa as E,
6999
- Fd as F,
7000
- ka as G,
7001
- Ca as H,
7002
- Oa as I,
7003
- Ra as J,
7004
- Na as K,
7005
- Cd as L,
7006
- Ha as M,
7007
- qa as N,
7008
- Va as O,
7009
- Za as P,
7010
- rc as Q,
7011
- cc as R,
7012
- gc as S,
7013
- Ic as T,
7014
- Oc as U,
7015
- Uc as V,
7016
- Gc as W,
6987
+ la as D,
6988
+ ma as E,
6989
+ Md as F,
6990
+ Ta as G,
6991
+ ja as H,
6992
+ Ea as I,
6993
+ _a as J,
6994
+ La as K,
6995
+ jd as L,
6996
+ Fa as M,
6997
+ za as N,
6998
+ Ga as O,
6999
+ Xa as P,
7000
+ sc as Q,
7001
+ ac as R,
7002
+ bc as S,
7003
+ vc as T,
7004
+ Ec as U,
7005
+ Rc as V,
7006
+ Yc as W,
7017
7007
  hd as X,
7018
- Id as Y,
7008
+ vd as Y,
7019
7009
  jr as Z,
7020
7010
  br as _,
7021
7011
  Io as a,
@@ -7024,7 +7014,7 @@ export {
7024
7014
  Yo as d,
7025
7015
  tn as e,
7026
7016
  an as f,
7027
- Hd as g,
7017
+ Fd as g,
7028
7018
  pn as h,
7029
7019
  yn as i,
7030
7020
  wn as j,
@@ -7037,8 +7027,8 @@ export {
7037
7027
  ii as q,
7038
7028
  $o as r,
7039
7029
  li as s,
7040
- jd as t,
7041
- hi as u,
7030
+ Sd as t,
7031
+ mi as u,
7042
7032
  ki as v,
7043
7033
  Si as w,
7044
7034
  xi as x,