@krodak/clickup-cli 1.12.0 → 1.13.0

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "clickup-cli",
3
3
  "description": "ClickUp CLI skills for managing tasks, sprints, comments, checklists, custom fields, tags, and time tracking via the cup command",
4
- "version": "1.12.0",
4
+ "version": "1.13.0",
5
5
  "author": {
6
6
  "name": "Krzysztof Rodak"
7
7
  },
package/dist/index.js CHANGED
@@ -1143,19 +1143,57 @@ function computeWidths(rows, columns) {
1143
1143
  function formatTable(rows, columns) {
1144
1144
  const widths = computeWidths(rows, columns);
1145
1145
  const header = columns.map((c, i) => cell(c.label, widths[i])).join(" ");
1146
- const divider = "-".repeat(header.replace(/\x1b\[[0-9;]*m/g, "").length);
1146
+ const divider = chalk.dim("-".repeat(header.replace(/\x1b\[[0-9;]*m/g, "").length));
1147
1147
  const lines = [chalk.bold(header), divider];
1148
1148
  for (const row of rows) {
1149
- lines.push(columns.map((c, i) => cell(String(row[c.key] ?? ""), widths[i])).join(" "));
1149
+ lines.push(
1150
+ columns.map((c, i) => {
1151
+ const raw = String(row[c.key] ?? "");
1152
+ const width = widths[i];
1153
+ const truncated = raw.length > width ? raw.slice(0, width - 1) + "\u2026" : raw;
1154
+ const padding = " ".repeat(Math.max(0, width - truncated.length));
1155
+ return c.format ? c.format(truncated, row) + padding : truncated + padding;
1156
+ }).join(" ")
1157
+ );
1150
1158
  }
1151
1159
  return lines.join("\n");
1152
1160
  }
1161
+ function colorStatus(status) {
1162
+ const lower = status.toLowerCase();
1163
+ if (lower.includes("done") || lower.includes("complete") || lower.includes("closed"))
1164
+ return chalk.green(status);
1165
+ if (lower.includes("progress") || lower.includes("review") || lower.includes("active"))
1166
+ return chalk.yellow(status);
1167
+ if (lower.includes("block") || lower.includes("stuck")) return chalk.red(status);
1168
+ return chalk.dim(status);
1169
+ }
1170
+ function colorPriority(priority) {
1171
+ const lower = priority.toLowerCase();
1172
+ if (lower === "urgent") return chalk.red(priority);
1173
+ if (lower === "high") return chalk.yellow(priority);
1174
+ if (lower === "normal") return priority;
1175
+ if (lower === "low") return chalk.dim(priority);
1176
+ return priority;
1177
+ }
1178
+ function colorDueDate(dateStr, rawTimestamp) {
1179
+ if (!dateStr) return dateStr;
1180
+ if (rawTimestamp) {
1181
+ const ts = Number(rawTimestamp);
1182
+ if (Number.isFinite(ts) && ts < Date.now()) return chalk.red(dateStr);
1183
+ }
1184
+ return dateStr;
1185
+ }
1153
1186
  var TASK_COLUMNS = [
1154
1187
  { key: "id", label: "ID" },
1155
1188
  { key: "name", label: "NAME", maxWidth: 60 },
1156
- { key: "status", label: "STATUS" },
1157
- { key: "priority", label: "PRIORITY" },
1158
- { key: "due_date", label: "DUE" },
1189
+ { key: "status", label: "STATUS", maxWidth: 20, format: (v) => colorStatus(v) },
1190
+ { key: "priority", label: "PRIORITY", maxWidth: 10, format: (v) => colorPriority(v) },
1191
+ {
1192
+ key: "due_date",
1193
+ label: "DUE",
1194
+ maxWidth: 15,
1195
+ format: (v, row) => v ? colorDueDate(v, row.dueRaw) : ""
1196
+ },
1159
1197
  { key: "list", label: "LIST" }
1160
1198
  ];
1161
1199
 
@@ -1369,16 +1407,16 @@ function formatTaskDetail(task) {
1369
1407
  lines.push("");
1370
1408
  const fields = [
1371
1409
  ["ID", task.id],
1372
- ["Status", task.status?.status],
1410
+ ["Status", task.status?.status ? colorStatus(task.status.status) : void 0],
1373
1411
  ["Type", typeLabel],
1374
1412
  ["List", task.list?.name],
1375
1413
  [
1376
1414
  "Assignees",
1377
1415
  task.assignees?.length ? task.assignees.map((a) => a.username).join(", ") : void 0
1378
1416
  ],
1379
- ["Priority", task.priority?.priority],
1417
+ ["Priority", task.priority?.priority ? colorPriority(task.priority.priority) : void 0],
1380
1418
  ["Start", task.start_date ? formatDate(task.start_date) : void 0],
1381
- ["Due", task.due_date ? formatDate(task.due_date) : void 0],
1419
+ ["Due", task.due_date ? colorDueDate(formatDate(task.due_date), task.due_date) : void 0],
1382
1420
  ["Estimate", task.time_estimate ? formatDuration(task.time_estimate) : void 0],
1383
1421
  ["Tracked", task.time_spent ? formatDuration(task.time_spent) : void 0],
1384
1422
  ["Tags", task.tags?.length ? task.tags.map((t) => t.name).join(", ") : void 0],
@@ -1444,8 +1482,9 @@ function formatTaskDetail(task) {
1444
1482
  function formatChoiceName(task) {
1445
1483
  const id = task.id.padEnd(12);
1446
1484
  const name = task.name.length > 50 ? task.name.slice(0, 49) + "\u2026" : task.name.padEnd(50);
1447
- const status = task.status;
1448
- return `${id} ${name} ${chalk2.dim(status)}`;
1485
+ const status = colorStatus(task.status);
1486
+ const priority = task.priority !== "none" ? colorPriority(task.priority) : "";
1487
+ return `${id} ${name} ${status}${priority ? " " + priority : ""}`;
1449
1488
  }
1450
1489
  async function interactiveTaskPicker(tasks) {
1451
1490
  if (tasks.length === 0) return [];
@@ -1541,6 +1580,7 @@ function summarize(task, typeMap) {
1541
1580
  task_type: resolveTaskType(task, typeMap ?? /* @__PURE__ */ new Map()),
1542
1581
  priority: task.priority?.priority ?? "none",
1543
1582
  due_date: formatDueDate(task.due_date),
1583
+ ...task.due_date ? { dueRaw: task.due_date } : {},
1544
1584
  list: task.list.name,
1545
1585
  url: task.url,
1546
1586
  ...task.parent ? { parent: task.parent } : {}
@@ -1994,9 +2034,15 @@ Using: ${sprintLists[sprintLists.length - 1].name}
1994
2034
  }
1995
2035
 
1996
2036
  // src/commands/sprints.ts
2037
+ import chalk3 from "chalk";
1997
2038
  var SPRINT_COLUMNS = [
1998
2039
  { key: "id", label: "ID" },
1999
- { key: "sprint", label: "SPRINT", maxWidth: 60 },
2040
+ {
2041
+ key: "sprint",
2042
+ label: "SPRINT",
2043
+ maxWidth: 60,
2044
+ format: (v, row) => row.active ? chalk3.green(v) : v
2045
+ },
2000
2046
  { key: "dates", label: "DATES" }
2001
2047
  ];
2002
2048
  function formatSprintDate(d) {
@@ -2067,7 +2113,8 @@ async function listSprints(config, opts = {}) {
2067
2113
  return {
2068
2114
  id: s.id,
2069
2115
  sprint: s.active ? `* ${s.name}` : s.name,
2070
- dates: dateStr
2116
+ dates: dateStr,
2117
+ active: s.active
2071
2118
  };
2072
2119
  });
2073
2120
  if (!isTTY()) {
@@ -2106,7 +2153,7 @@ async function postComment(config, taskId, text, notifyAll) {
2106
2153
  }
2107
2154
 
2108
2155
  // src/commands/comments.ts
2109
- import chalk3 from "chalk";
2156
+ import chalk4 from "chalk";
2110
2157
  async function fetchComments(config, taskId) {
2111
2158
  const client = new ClickUpClient(config);
2112
2159
  const comments = await client.getTaskComments(taskId);
@@ -2130,11 +2177,11 @@ function printComments(comments, forceJson) {
2130
2177
  console.log("No comments found.");
2131
2178
  return;
2132
2179
  }
2133
- const separator = chalk3.dim("-".repeat(60));
2180
+ const separator = chalk4.dim("-".repeat(60));
2134
2181
  for (let i = 0; i < comments.length; i++) {
2135
2182
  const c = comments[i];
2136
2183
  if (i > 0) console.log(separator);
2137
- console.log(`${chalk3.bold(c.user)} ${chalk3.dim(formatTimestamp(c.date))}`);
2184
+ console.log(`${chalk4.bold(c.user)} ${chalk4.dim(formatTimestamp(c.date))}`);
2138
2185
  console.log(c.text);
2139
2186
  if (i < comments.length - 1) console.log("");
2140
2187
  }
@@ -2601,7 +2648,7 @@ async function assignTask(config, taskId, opts) {
2601
2648
  }
2602
2649
 
2603
2650
  // src/commands/activity.ts
2604
- import chalk4 from "chalk";
2651
+ import chalk5 from "chalk";
2605
2652
  async function fetchActivity(config, taskId) {
2606
2653
  const client = new ClickUpClient(config);
2607
2654
  const [task, rawComments] = await Promise.all([
@@ -2633,8 +2680,8 @@ ${commentsMd}`);
2633
2680
  }
2634
2681
  console.log(formatTaskDetail(result.task));
2635
2682
  console.log("");
2636
- console.log(chalk4.bold("Comments"));
2637
- console.log(chalk4.dim("-".repeat(60)));
2683
+ console.log(chalk5.bold("Comments"));
2684
+ console.log(chalk5.dim("-".repeat(60)));
2638
2685
  if (result.comments.length === 0) {
2639
2686
  console.log("No comments.");
2640
2687
  return;
@@ -2643,9 +2690,9 @@ ${commentsMd}`);
2643
2690
  const c = result.comments[i];
2644
2691
  if (i > 0) {
2645
2692
  console.log("");
2646
- console.log(chalk4.dim("-".repeat(60)));
2693
+ console.log(chalk5.dim("-".repeat(60)));
2647
2694
  }
2648
- console.log(`${chalk4.bold(c.user)} ${chalk4.dim(formatTimestamp(c.date))}`);
2695
+ console.log(`${chalk5.bold(c.user)} ${chalk5.dim(formatTimestamp(c.date))}`);
2649
2696
  console.log(c.text);
2650
2697
  }
2651
2698
  }
@@ -4548,7 +4595,7 @@ async function manageTags(config, taskId, opts) {
4548
4595
  }
4549
4596
 
4550
4597
  // src/commands/checklist.ts
4551
- import chalk5 from "chalk";
4598
+ import chalk6 from "chalk";
4552
4599
  async function viewChecklists(config, taskId) {
4553
4600
  const client = new ClickUpClient(config);
4554
4601
  const task = await client.getTask(taskId);
@@ -4581,13 +4628,13 @@ function formatChecklists(checklists) {
4581
4628
  const lines = [];
4582
4629
  for (const cl of checklists) {
4583
4630
  const resolved = cl.items.filter((i) => i.resolved).length;
4584
- lines.push(chalk5.bold(`${cl.name} (${resolved}/${cl.items.length})`));
4585
- lines.push(chalk5.dim(` ID: ${cl.id}`));
4631
+ lines.push(chalk6.bold(`${cl.name} (${resolved}/${cl.items.length})`));
4632
+ lines.push(chalk6.dim(` ID: ${cl.id}`));
4586
4633
  for (const item of cl.items) {
4587
- const check = item.resolved ? chalk5.green("[x]") : chalk5.dim("[ ]");
4588
- const assignee = item.assignee ? chalk5.dim(` @${item.assignee.username}`) : "";
4634
+ const check = item.resolved ? chalk6.green("[x]") : chalk6.dim("[ ]");
4635
+ const assignee = item.assignee ? chalk6.dim(` @${item.assignee.username}`) : "";
4589
4636
  lines.push(` ${check} ${item.name}${assignee}`);
4590
- lines.push(chalk5.dim(` item-id: ${item.id}`));
4637
+ lines.push(chalk6.dim(` item-id: ${item.id}`));
4591
4638
  }
4592
4639
  }
4593
4640
  return lines.join("\n");
@@ -4618,7 +4665,7 @@ async function deleteComment(config, commentId) {
4618
4665
  }
4619
4666
 
4620
4667
  // src/commands/replies.ts
4621
- import chalk6 from "chalk";
4668
+ import chalk7 from "chalk";
4622
4669
  async function getReplies(config, commentId) {
4623
4670
  const client = new ClickUpClient(config);
4624
4671
  return client.getThreadedComments(commentId);
@@ -4633,7 +4680,7 @@ function formatReplies(replies) {
4633
4680
  return replies.map((r) => {
4634
4681
  const user = r.user?.username ?? "Unknown";
4635
4682
  const date = formatTimestamp(Number(r.date));
4636
- return `${chalk6.bold(user)} ${chalk6.dim(date)}
4683
+ return `${chalk7.bold(user)} ${chalk7.dim(date)}
4637
4684
  ${r.comment_text}`;
4638
4685
  }).join("\n\n");
4639
4686
  }
@@ -4672,7 +4719,7 @@ async function attachFile(config, taskId, filePath) {
4672
4719
  }
4673
4720
 
4674
4721
  // src/commands/docs.ts
4675
- import chalk7 from "chalk";
4722
+ import chalk8 from "chalk";
4676
4723
  async function listDocs(config, query) {
4677
4724
  const client = new ClickUpClient(config);
4678
4725
  const docs = await client.getDocs(config.teamId);
@@ -4684,7 +4731,7 @@ async function listDocs(config, query) {
4684
4731
  }
4685
4732
  function formatDocs(docs) {
4686
4733
  if (docs.length === 0) return "No docs found";
4687
- return docs.map((d) => `${chalk7.bold(d.name)} ${chalk7.dim(d.id)}`).join("\n");
4734
+ return docs.map((d) => `${chalk8.bold(d.name)} ${chalk8.dim(d.id)}`).join("\n");
4688
4735
  }
4689
4736
  function formatDocsMarkdown(docs) {
4690
4737
  if (docs.length === 0) return "No docs found";
@@ -4692,7 +4739,7 @@ function formatDocsMarkdown(docs) {
4692
4739
  }
4693
4740
 
4694
4741
  // src/commands/doc.ts
4695
- import chalk8 from "chalk";
4742
+ import chalk9 from "chalk";
4696
4743
  async function getDocInfo(config, docId) {
4697
4744
  const client = new ClickUpClient(config);
4698
4745
  const [doc, pages] = await Promise.all([
@@ -4704,14 +4751,14 @@ async function getDocInfo(config, docId) {
4704
4751
  function formatDocInfo(doc, pages, indent = 0) {
4705
4752
  const lines = [];
4706
4753
  if (indent === 0) {
4707
- lines.push(`${chalk8.bold(doc.name)} ${chalk8.dim(doc.id)}`);
4754
+ lines.push(`${chalk9.bold(doc.name)} ${chalk9.dim(doc.id)}`);
4708
4755
  if (pages.length === 0) {
4709
4756
  lines.push(" (no pages)");
4710
4757
  }
4711
4758
  }
4712
4759
  for (const page of pages) {
4713
4760
  const prefix = " ".repeat(indent + 1);
4714
- lines.push(`${prefix}${page.name} ${chalk8.dim(page.id)}`);
4761
+ lines.push(`${prefix}${page.name} ${chalk9.dim(page.id)}`);
4715
4762
  if (page.pages && page.pages.length > 0) {
4716
4763
  lines.push(formatDocInfo(doc, page.pages, indent + 1));
4717
4764
  }
@@ -4790,7 +4837,7 @@ async function deleteDocPage(config, docId, pageId) {
4790
4837
  }
4791
4838
 
4792
4839
  // src/commands/folders.ts
4793
- import chalk9 from "chalk";
4840
+ import chalk10 from "chalk";
4794
4841
  async function listFolders(config, spaceId, nameFilter) {
4795
4842
  const client = new ClickUpClient(config);
4796
4843
  const folders = await client.getFolders(spaceId);
@@ -4809,9 +4856,9 @@ async function listFolders(config, spaceId, nameFilter) {
4809
4856
  function formatFolders(folders) {
4810
4857
  if (folders.length === 0) return "No folders found";
4811
4858
  return folders.map((f) => {
4812
- const header = `${chalk9.bold(f.name)} ${chalk9.dim(f.id)}`;
4859
+ const header = `${chalk10.bold(f.name)} ${chalk10.dim(f.id)}`;
4813
4860
  if (f.lists.length === 0) return header;
4814
- const listLines = f.lists.map((l) => ` ${l.name} ${chalk9.dim(l.id)}`);
4861
+ const listLines = f.lists.map((l) => ` ${l.name} ${chalk10.dim(l.id)}`);
4815
4862
  return [header, ...listLines].join("\n");
4816
4863
  }).join("\n\n");
4817
4864
  }
@@ -4826,7 +4873,7 @@ function formatFoldersMarkdown(folders) {
4826
4873
  }
4827
4874
 
4828
4875
  // src/commands/time.ts
4829
- import chalk10 from "chalk";
4876
+ import chalk11 from "chalk";
4830
4877
  async function startTimer(config, taskId, description) {
4831
4878
  const client = new ClickUpClient(config);
4832
4879
  return client.startTimeEntry(config.teamId, taskId, description);
@@ -4876,8 +4923,8 @@ function formatTimeEntry(entry) {
4876
4923
  const isRunning = entry.duration < 0;
4877
4924
  const elapsed = isRunning ? Date.now() - Number(entry.start) : entry.duration;
4878
4925
  const durationStr = formatDuration(elapsed);
4879
- const status = isRunning ? chalk10.green("RUNNING") : "";
4880
- lines.push(`${chalk10.bold(taskName)} ${chalk10.dim(taskId)} ${status}`);
4926
+ const status = isRunning ? chalk11.green("RUNNING") : "";
4927
+ lines.push(`${chalk11.bold(taskName)} ${chalk11.dim(taskId)} ${status}`);
4881
4928
  lines.push(
4882
4929
  ` ${durationStr} - ${formatTimestamp(entry.start)}${entry.description ? ` - ${entry.description}` : ""}`
4883
4930
  );
@@ -4902,7 +4949,7 @@ function formatTimeEntriesMarkdown(entries) {
4902
4949
  }
4903
4950
 
4904
4951
  // src/commands/tags.ts
4905
- import chalk11 from "chalk";
4952
+ import chalk12 from "chalk";
4906
4953
  async function listSpaceTags(config, spaceId) {
4907
4954
  const client = new ClickUpClient(config);
4908
4955
  return client.getSpaceTags(spaceId);
@@ -4925,7 +4972,7 @@ async function updateSpaceTag(config, spaceId, tagName, updates) {
4925
4972
  }
4926
4973
  function formatTags(tags) {
4927
4974
  if (tags.length === 0) return "No tags found";
4928
- return tags.map((t) => chalk11.bold(t.name)).join(", ");
4975
+ return tags.map((t) => chalk12.bold(t.name)).join(", ");
4929
4976
  }
4930
4977
  function formatTagsMarkdown(tags) {
4931
4978
  if (tags.length === 0) return "No tags found";
@@ -4933,14 +4980,14 @@ function formatTagsMarkdown(tags) {
4933
4980
  }
4934
4981
 
4935
4982
  // src/commands/members.ts
4936
- import chalk12 from "chalk";
4983
+ import chalk13 from "chalk";
4937
4984
  async function listMembers(config) {
4938
4985
  const client = new ClickUpClient(config);
4939
4986
  return client.getWorkspaceMembers(config.teamId);
4940
4987
  }
4941
4988
  function formatMembers(members) {
4942
4989
  if (members.length === 0) return "No members found";
4943
- return members.map((m) => `${chalk12.bold(m.username)} ${chalk12.dim(`(${m.id})`)} ${m.email}`).join("\n");
4990
+ return members.map((m) => `${chalk13.bold(m.username)} ${chalk13.dim(`(${m.id})`)} ${m.email}`).join("\n");
4944
4991
  }
4945
4992
  function formatMembersMarkdown(members) {
4946
4993
  if (members.length === 0) return "No members found";
@@ -4948,7 +4995,7 @@ function formatMembersMarkdown(members) {
4948
4995
  }
4949
4996
 
4950
4997
  // src/commands/fields.ts
4951
- import chalk13 from "chalk";
4998
+ import chalk14 from "chalk";
4952
4999
  async function listFields(config, listId) {
4953
5000
  const client = new ClickUpClient(config);
4954
5001
  return client.getListCustomFields(listId);
@@ -4957,8 +5004,8 @@ function formatFields(fields) {
4957
5004
  if (fields.length === 0) return "No custom fields";
4958
5005
  return fields.map((f) => {
4959
5006
  const options = f.type_config?.options?.map((o) => o.name).join(", ");
4960
- const optStr = options ? ` ${chalk13.dim(`[${options}]`)}` : "";
4961
- return `${chalk13.bold(f.name)} ${chalk13.dim(f.type)}${f.required ? chalk13.yellow(" (required)") : ""}${optStr}`;
5007
+ const optStr = options ? ` ${chalk14.dim(`[${options}]`)}` : "";
5008
+ return `${chalk14.bold(f.name)} ${chalk14.dim(f.type)}${f.required ? chalk14.yellow(" (required)") : ""}${optStr}`;
4962
5009
  }).join("\n");
4963
5010
  }
4964
5011
  function formatFieldsMarkdown(fields) {
@@ -5002,7 +5049,7 @@ async function bulkUpdateStatus(config, taskIds, status) {
5002
5049
  }
5003
5050
 
5004
5051
  // src/commands/goals.ts
5005
- import chalk14 from "chalk";
5052
+ import chalk15 from "chalk";
5006
5053
  async function listGoals(config) {
5007
5054
  const client = new ClickUpClient(config);
5008
5055
  return client.getGoals(config.teamId);
@@ -5042,8 +5089,8 @@ function formatGoals(goals) {
5042
5089
  if (goals.length === 0) return "No goals found";
5043
5090
  return goals.map((g) => {
5044
5091
  const pct = Math.round(g.percent_completed * 100);
5045
- const owner = g.owner ? ` ${chalk14.dim(`@${g.owner.username}`)}` : "";
5046
- return `${chalk14.bold(g.name)} ${chalk14.dim(`(${g.id})`)} ${chalk14.cyan(`${pct}%`)}${owner}`;
5092
+ const owner = g.owner ? ` ${chalk15.dim(`@${g.owner.username}`)}` : "";
5093
+ return `${chalk15.bold(g.name)} ${chalk15.dim(`(${g.id})`)} ${chalk15.cyan(`${pct}%`)}${owner}`;
5047
5094
  }).join("\n");
5048
5095
  }
5049
5096
  function formatGoalsMarkdown(goals) {
@@ -5058,7 +5105,7 @@ function formatKeyResults(keyResults) {
5058
5105
  if (keyResults.length === 0) return "No key results found";
5059
5106
  return keyResults.map((kr) => {
5060
5107
  const pct = Math.round(kr.percent_completed * 100);
5061
- return `${chalk14.bold(kr.name)} ${chalk14.dim(`(${kr.id})`)} ${chalk14.cyan(`${kr.steps_current}/${kr.steps_end}`)} ${chalk14.dim(`${pct}%`)}`;
5108
+ return `${chalk15.bold(kr.name)} ${chalk15.dim(`(${kr.id})`)} ${chalk15.cyan(`${kr.steps_current}/${kr.steps_end}`)} ${chalk15.dim(`${pct}%`)}`;
5062
5109
  }).join("\n");
5063
5110
  }
5064
5111
  function formatKeyResultsMarkdown(keyResults) {
@@ -5070,14 +5117,14 @@ function formatKeyResultsMarkdown(keyResults) {
5070
5117
  }
5071
5118
 
5072
5119
  // src/commands/task-types.ts
5073
- import chalk15 from "chalk";
5120
+ import chalk16 from "chalk";
5074
5121
  async function listTaskTypes(config) {
5075
5122
  const client = new ClickUpClient(config);
5076
5123
  return client.getCustomTaskTypes(config.teamId);
5077
5124
  }
5078
5125
  function formatTaskTypes(types) {
5079
5126
  if (types.length === 0) return "No custom task types";
5080
- return types.map((t) => `${chalk15.bold(t.name)} ${chalk15.dim(`(${t.id})`)}`).join("\n");
5127
+ return types.map((t) => `${chalk16.bold(t.name)} ${chalk16.dim(`(${t.id})`)}`).join("\n");
5081
5128
  }
5082
5129
  function formatTaskTypesMarkdown(types) {
5083
5130
  if (types.length === 0) return "No custom task types";
@@ -5085,14 +5132,14 @@ function formatTaskTypesMarkdown(types) {
5085
5132
  }
5086
5133
 
5087
5134
  // src/commands/templates.ts
5088
- import chalk16 from "chalk";
5135
+ import chalk17 from "chalk";
5089
5136
  async function listTemplates(config) {
5090
5137
  const client = new ClickUpClient(config);
5091
5138
  return client.getTaskTemplates(config.teamId);
5092
5139
  }
5093
5140
  function formatTemplates(templates) {
5094
5141
  if (templates.length === 0) return "No task templates";
5095
- return templates.map((t) => `${chalk16.bold(t.name)} ${chalk16.dim(`(${t.id})`)}`).join("\n");
5142
+ return templates.map((t) => `${chalk17.bold(t.name)} ${chalk17.dim(`(${t.id})`)}`).join("\n");
5096
5143
  }
5097
5144
  function formatTemplatesMarkdown(templates) {
5098
5145
  if (templates.length === 0) return "No task templates";
@@ -5100,14 +5147,14 @@ function formatTemplatesMarkdown(templates) {
5100
5147
  }
5101
5148
 
5102
5149
  // src/commands/list-templates.ts
5103
- import chalk17 from "chalk";
5150
+ import chalk18 from "chalk";
5104
5151
  async function listListTemplates(config) {
5105
5152
  const client = new ClickUpClient(config);
5106
5153
  return client.getListTemplates(config.teamId);
5107
5154
  }
5108
5155
  function formatListTemplates(templates) {
5109
5156
  if (templates.length === 0) return "No list templates";
5110
- return templates.map((t) => `${chalk17.bold(t.name)} ${chalk17.dim(`(${t.id})`)}`).join("\n");
5157
+ return templates.map((t) => `${chalk18.bold(t.name)} ${chalk18.dim(`(${t.id})`)}`).join("\n");
5111
5158
  }
5112
5159
  function formatListTemplatesMarkdown(templates) {
5113
5160
  if (templates.length === 0) return "No list templates";
@@ -5115,14 +5162,14 @@ function formatListTemplatesMarkdown(templates) {
5115
5162
  }
5116
5163
 
5117
5164
  // src/commands/folder-templates.ts
5118
- import chalk18 from "chalk";
5165
+ import chalk19 from "chalk";
5119
5166
  async function listFolderTemplates(config) {
5120
5167
  const client = new ClickUpClient(config);
5121
5168
  return client.getFolderTemplates(config.teamId);
5122
5169
  }
5123
5170
  function formatFolderTemplates(templates) {
5124
5171
  if (templates.length === 0) return "No folder templates";
5125
- return templates.map((t) => `${chalk18.bold(t.name)} ${chalk18.dim(`(${t.id})`)}`).join("\n");
5172
+ return templates.map((t) => `${chalk19.bold(t.name)} ${chalk19.dim(`(${t.id})`)}`).join("\n");
5126
5173
  }
5127
5174
  function formatFolderTemplatesMarkdown(templates) {
5128
5175
  if (templates.length === 0) return "No folder templates";
@@ -5145,7 +5192,7 @@ async function createListFromTemplate(config, name, opts) {
5145
5192
  }
5146
5193
 
5147
5194
  // src/commands/views.ts
5148
- import chalk19 from "chalk";
5195
+ import chalk20 from "chalk";
5149
5196
  async function listViews(config, listId) {
5150
5197
  const client = new ClickUpClient(config);
5151
5198
  const data = await client.getListViews(listId);
@@ -5153,7 +5200,7 @@ async function listViews(config, listId) {
5153
5200
  }
5154
5201
  function formatViews(views) {
5155
5202
  if (views.length === 0) return "No views";
5156
- return views.map((v) => `${chalk19.bold(v.name)} ${chalk19.dim(`(${v.id})`)} ${chalk19.dim(v.type)}`).join("\n");
5203
+ return views.map((v) => `${chalk20.bold(v.name)} ${chalk20.dim(`(${v.id})`)} ${chalk20.dim(v.type)}`).join("\n");
5157
5204
  }
5158
5205
  function formatViewsMarkdown(views) {
5159
5206
  if (views.length === 0) return "No views";
@@ -5161,20 +5208,20 @@ function formatViewsMarkdown(views) {
5161
5208
  }
5162
5209
 
5163
5210
  // src/commands/view.ts
5164
- import chalk20 from "chalk";
5211
+ import chalk21 from "chalk";
5165
5212
  async function getView(config, viewId) {
5166
5213
  const client = new ClickUpClient(config);
5167
5214
  return client.getView(viewId);
5168
5215
  }
5169
5216
  function formatView(view) {
5170
5217
  const lines = [];
5171
- lines.push(chalk20.bold.underline(view.name));
5218
+ lines.push(chalk21.bold.underline(view.name));
5172
5219
  lines.push("");
5173
- lines.push(` ${chalk20.bold("ID")} ${view.id}`);
5174
- lines.push(` ${chalk20.bold("Type")} ${view.type}`);
5175
- if (view.visibility) lines.push(` ${chalk20.bold("Visibility")} ${view.visibility}`);
5176
- if (view.date_created) lines.push(` ${chalk20.bold("Created")} ${formatDate(view.date_created)}`);
5177
- if (view.protected !== void 0) lines.push(` ${chalk20.bold("Protected")} ${view.protected}`);
5220
+ lines.push(` ${chalk21.bold("ID")} ${view.id}`);
5221
+ lines.push(` ${chalk21.bold("Type")} ${view.type}`);
5222
+ if (view.visibility) lines.push(` ${chalk21.bold("Visibility")} ${view.visibility}`);
5223
+ if (view.date_created) lines.push(` ${chalk21.bold("Created")} ${formatDate(view.date_created)}`);
5224
+ if (view.protected !== void 0) lines.push(` ${chalk21.bold("Protected")} ${view.protected}`);
5178
5225
  return lines.join("\n");
5179
5226
  }
5180
5227
  function formatViewMarkdown(view) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@krodak/clickup-cli",
3
- "version": "1.12.0",
3
+ "version": "1.13.0",
4
4
  "description": "ClickUp CLI for AI agents and humans",
5
5
  "type": "module",
6
6
  "license": "MIT",