@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.
- package/.claude-plugin/plugin.json +1 -1
- package/dist/index.js +114 -67
- package/package.json +1 -1
|
@@ -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.
|
|
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(
|
|
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
|
-
{
|
|
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
|
-
|
|
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
|
-
{
|
|
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
|
|
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 =
|
|
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(`${
|
|
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
|
|
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(
|
|
2637
|
-
console.log(
|
|
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(
|
|
2693
|
+
console.log(chalk5.dim("-".repeat(60)));
|
|
2647
2694
|
}
|
|
2648
|
-
console.log(`${
|
|
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
|
|
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(
|
|
4585
|
-
lines.push(
|
|
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 ?
|
|
4588
|
-
const assignee = item.assignee ?
|
|
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(
|
|
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
|
|
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 `${
|
|
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
|
|
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) => `${
|
|
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
|
|
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(`${
|
|
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} ${
|
|
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
|
|
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 = `${
|
|
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} ${
|
|
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
|
|
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 ?
|
|
4880
|
-
lines.push(`${
|
|
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
|
|
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) =>
|
|
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
|
|
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) => `${
|
|
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
|
|
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 ? ` ${
|
|
4961
|
-
return `${
|
|
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
|
|
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 ? ` ${
|
|
5046
|
-
return `${
|
|
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 `${
|
|
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
|
|
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) => `${
|
|
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
|
|
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) => `${
|
|
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
|
|
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) => `${
|
|
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
|
|
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) => `${
|
|
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
|
|
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) => `${
|
|
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
|
|
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(
|
|
5218
|
+
lines.push(chalk21.bold.underline(view.name));
|
|
5172
5219
|
lines.push("");
|
|
5173
|
-
lines.push(` ${
|
|
5174
|
-
lines.push(` ${
|
|
5175
|
-
if (view.visibility) lines.push(` ${
|
|
5176
|
-
if (view.date_created) lines.push(` ${
|
|
5177
|
-
if (view.protected !== void 0) lines.push(` ${
|
|
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) {
|