skyboard-cli 0.1.1 → 0.1.3
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/dist/__tests__/auth-state.test.d.ts +1 -0
- package/dist/__tests__/auth-state.test.js +86 -0
- package/dist/__tests__/auth-state.test.js.map +1 -0
- package/dist/__tests__/card-ref.test.d.ts +1 -0
- package/dist/__tests__/card-ref.test.js +36 -0
- package/dist/__tests__/card-ref.test.js.map +1 -0
- package/dist/__tests__/column-match.test.d.ts +1 -0
- package/dist/__tests__/column-match.test.js +49 -0
- package/dist/__tests__/column-match.test.js.map +1 -0
- package/dist/__tests__/commands.test.d.ts +1 -0
- package/dist/__tests__/commands.test.js +243 -0
- package/dist/__tests__/commands.test.js.map +1 -0
- package/dist/__tests__/helpers.d.ts +50 -0
- package/dist/__tests__/helpers.js +135 -0
- package/dist/__tests__/helpers.js.map +1 -0
- package/dist/__tests__/materialize.test.d.ts +1 -0
- package/dist/__tests__/materialize.test.js +186 -0
- package/dist/__tests__/materialize.test.js.map +1 -0
- package/dist/__tests__/pds.test.d.ts +1 -0
- package/dist/__tests__/pds.test.js +80 -0
- package/dist/__tests__/pds.test.js.map +1 -0
- package/dist/commands/add.d.ts +1 -0
- package/dist/commands/add.js +41 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/boards.d.ts +3 -0
- package/dist/commands/boards.js +54 -0
- package/dist/commands/boards.js.map +1 -0
- package/dist/commands/cards.d.ts +7 -0
- package/dist/commands/cards.js +54 -0
- package/dist/commands/cards.js.map +1 -0
- package/dist/commands/cols.d.ts +4 -0
- package/dist/commands/cols.js +44 -0
- package/dist/commands/cols.js.map +1 -0
- package/dist/commands/comment.d.ts +4 -0
- package/dist/commands/comment.js +55 -0
- package/dist/commands/comment.js.map +1 -0
- package/dist/commands/edit.d.ts +7 -0
- package/dist/commands/edit.js +80 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/login.d.ts +1 -0
- package/dist/commands/login.js +20 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +1 -0
- package/dist/commands/logout.js +14 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/mv.d.ts +4 -0
- package/dist/commands/mv.js +74 -0
- package/dist/commands/mv.js.map +1 -0
- package/dist/commands/new.d.ts +6 -0
- package/dist/commands/new.js +72 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/rm.d.ts +5 -0
- package/dist/commands/rm.js +67 -0
- package/dist/commands/rm.js.map +1 -0
- package/dist/commands/show.d.ts +4 -0
- package/dist/commands/show.js +90 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.js +71 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/use.d.ts +1 -0
- package/dist/commands/use.js +61 -0
- package/dist/commands/use.js.map +1 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.js +23 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +126 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth.d.ts +28 -0
- package/dist/lib/auth.js +219 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/card-ref.d.ts +7 -0
- package/dist/lib/card-ref.js +23 -0
- package/dist/lib/card-ref.js.map +1 -0
- package/dist/lib/column-match.d.ts +6 -0
- package/dist/lib/column-match.js +35 -0
- package/dist/lib/column-match.js.map +1 -0
- package/dist/lib/config.d.ts +32 -0
- package/dist/lib/config.js +153 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/display.d.ts +11 -0
- package/dist/lib/display.js +97 -0
- package/dist/lib/display.js.map +1 -0
- package/dist/lib/materialize.d.ts +2 -0
- package/dist/lib/materialize.js +111 -0
- package/dist/lib/materialize.js.map +1 -0
- package/dist/lib/pds.d.ts +26 -0
- package/dist/lib/pds.js +187 -0
- package/dist/lib/pds.js.map +1 -0
- package/dist/lib/permissions.d.ts +4 -0
- package/dist/lib/permissions.js +13 -0
- package/dist/lib/permissions.js.map +1 -0
- package/dist/lib/schemas.d.ts +209 -0
- package/dist/lib/schemas.js +82 -0
- package/dist/lib/schemas.js.map +1 -0
- package/dist/lib/tid.d.ts +9 -0
- package/dist/lib/tid.js +16 -0
- package/dist/lib/tid.js.map +1 -0
- package/dist/lib/types.d.ts +129 -0
- package/dist/lib/types.js +3 -0
- package/dist/lib/types.js.map +1 -0
- package/package.json +5 -2
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { requireAgent } from "../lib/auth.js";
|
|
2
|
+
import { fetchBoardData } from "../lib/pds.js";
|
|
3
|
+
import { getDefaultBoard } from "../lib/config.js";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
export async function colsCommand(opts) {
|
|
6
|
+
const { did } = await requireAgent();
|
|
7
|
+
const boardRef = resolveBoard(opts.board);
|
|
8
|
+
const data = await fetchBoardData(boardRef.did, boardRef.rkey, did);
|
|
9
|
+
if (!data) {
|
|
10
|
+
console.error(chalk.red("Board not found."));
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
const sortedColumns = [...data.board.columns].sort((a, b) => a.order - b.order);
|
|
14
|
+
if (opts.json) {
|
|
15
|
+
console.log(JSON.stringify(sortedColumns.map((col, i) => ({
|
|
16
|
+
index: i + 1,
|
|
17
|
+
id: col.id,
|
|
18
|
+
name: col.name,
|
|
19
|
+
taskCount: data.tasks.filter((t) => t.effectiveColumnId === col.id).length,
|
|
20
|
+
})), null, 2));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
console.log(chalk.bold(data.board.name) + "\n");
|
|
24
|
+
for (let i = 0; i < sortedColumns.length; i++) {
|
|
25
|
+
const col = sortedColumns[i];
|
|
26
|
+
const count = data.tasks.filter((t) => t.effectiveColumnId === col.id).length;
|
|
27
|
+
console.log(` ${chalk.dim(`${i + 1}.`)} ${col.name} ${chalk.dim(`(${count})`)}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function resolveBoard(boardOpt) {
|
|
31
|
+
if (boardOpt) {
|
|
32
|
+
// TODO: support full board ref parsing like use command
|
|
33
|
+
const defaultBoard = getDefaultBoard();
|
|
34
|
+
if (defaultBoard)
|
|
35
|
+
return defaultBoard;
|
|
36
|
+
}
|
|
37
|
+
const defaultBoard = getDefaultBoard();
|
|
38
|
+
if (!defaultBoard) {
|
|
39
|
+
console.error(chalk.red("No default board set. Run `sb use <board>` first."));
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
return defaultBoard;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=cols.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cols.js","sourceRoot":"","sources":["../../src/commands/cols.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { requireAgent } from "../lib/auth.js";
|
|
2
|
+
import { fetchBoardData } from "../lib/pds.js";
|
|
3
|
+
import { getDefaultBoard } from "../lib/config.js";
|
|
4
|
+
import { resolveCardRef } from "../lib/card-ref.js";
|
|
5
|
+
import { generateTID, buildAtUri, TASK_COLLECTION, COMMENT_COLLECTION, BOARD_COLLECTION } from "../lib/tid.js";
|
|
6
|
+
import { shortRkey } from "../lib/display.js";
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
export async function commentCommand(cardRef, text, opts) {
|
|
9
|
+
const { agent, did } = await requireAgent();
|
|
10
|
+
const boardRef = resolveBoard(opts.board);
|
|
11
|
+
const data = await fetchBoardData(boardRef.did, boardRef.rkey, did);
|
|
12
|
+
if (!data) {
|
|
13
|
+
console.error(chalk.red("Board not found."));
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
let task;
|
|
17
|
+
try {
|
|
18
|
+
task = resolveCardRef(cardRef, data.tasks);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
const boardUri = buildAtUri(boardRef.did, BOARD_COLLECTION, boardRef.rkey);
|
|
25
|
+
const taskUri = buildAtUri(task.did, TASK_COLLECTION, task.rkey);
|
|
26
|
+
const commentRkey = generateTID();
|
|
27
|
+
await agent.com.atproto.repo.putRecord({
|
|
28
|
+
repo: did,
|
|
29
|
+
collection: COMMENT_COLLECTION,
|
|
30
|
+
rkey: commentRkey,
|
|
31
|
+
record: {
|
|
32
|
+
$type: "dev.skyboard.comment",
|
|
33
|
+
targetTaskUri: taskUri,
|
|
34
|
+
boardUri,
|
|
35
|
+
text,
|
|
36
|
+
createdAt: new Date().toISOString(),
|
|
37
|
+
},
|
|
38
|
+
validate: false,
|
|
39
|
+
});
|
|
40
|
+
if (opts.json) {
|
|
41
|
+
console.log(JSON.stringify({ rkey: commentRkey, taskRkey: task.rkey, text }));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.log(chalk.green(`Comment added to ${shortRkey(task.rkey)} "${task.effectiveTitle}"`));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function resolveBoard(boardOpt) {
|
|
48
|
+
const defaultBoard = getDefaultBoard();
|
|
49
|
+
if (!defaultBoard) {
|
|
50
|
+
console.error(chalk.red("No default board set. Run `sb use <board>` first."));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
return defaultBoard;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=comment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/commands/comment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { requireAgent } from "../lib/auth.js";
|
|
2
|
+
import { fetchBoardData } from "../lib/pds.js";
|
|
3
|
+
import { getDefaultBoard } from "../lib/config.js";
|
|
4
|
+
import { resolveCardRef } from "../lib/card-ref.js";
|
|
5
|
+
import { generateTID, buildAtUri, TASK_COLLECTION, OP_COLLECTION, BOARD_COLLECTION } from "../lib/tid.js";
|
|
6
|
+
import { shortRkey } from "../lib/display.js";
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
export async function editCommand(cardRef, opts) {
|
|
9
|
+
const { agent, did } = await requireAgent();
|
|
10
|
+
const boardRef = resolveBoard(opts.board);
|
|
11
|
+
const data = await fetchBoardData(boardRef.did, boardRef.rkey, did);
|
|
12
|
+
if (!data) {
|
|
13
|
+
console.error(chalk.red("Board not found."));
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
let task;
|
|
17
|
+
try {
|
|
18
|
+
task = resolveCardRef(cardRef, data.tasks);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
const fields = {};
|
|
25
|
+
if (opts.title)
|
|
26
|
+
fields.title = opts.title;
|
|
27
|
+
if (opts.description)
|
|
28
|
+
fields.description = opts.description;
|
|
29
|
+
if (opts.label && opts.label.length > 0) {
|
|
30
|
+
// Resolve label names to IDs
|
|
31
|
+
const labelIds = [];
|
|
32
|
+
for (const name of opts.label) {
|
|
33
|
+
const label = data.board.labels?.find((l) => l.name.toLowerCase() === name.toLowerCase());
|
|
34
|
+
if (label) {
|
|
35
|
+
labelIds.push(label.id);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
console.error(chalk.yellow(`Warning: label "${name}" not found, skipping.`));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (labelIds.length > 0)
|
|
42
|
+
fields.labelIds = labelIds;
|
|
43
|
+
}
|
|
44
|
+
if (Object.keys(fields).length === 0) {
|
|
45
|
+
console.error(chalk.red("Nothing to edit. Use -t, -d, or -l flags."));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
const boardUri = buildAtUri(boardRef.did, BOARD_COLLECTION, boardRef.rkey);
|
|
49
|
+
const taskUri = buildAtUri(task.did, TASK_COLLECTION, task.rkey);
|
|
50
|
+
const opRkey = generateTID();
|
|
51
|
+
await agent.com.atproto.repo.putRecord({
|
|
52
|
+
repo: did,
|
|
53
|
+
collection: OP_COLLECTION,
|
|
54
|
+
rkey: opRkey,
|
|
55
|
+
record: {
|
|
56
|
+
$type: "dev.skyboard.op",
|
|
57
|
+
targetTaskUri: taskUri,
|
|
58
|
+
boardUri,
|
|
59
|
+
fields,
|
|
60
|
+
createdAt: new Date().toISOString(),
|
|
61
|
+
},
|
|
62
|
+
validate: false,
|
|
63
|
+
});
|
|
64
|
+
if (opts.json) {
|
|
65
|
+
console.log(JSON.stringify({ rkey: task.rkey, fields }));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
const changes = Object.keys(fields).join(", ");
|
|
69
|
+
console.log(chalk.green(`Edited ${shortRkey(task.rkey)} "${task.effectiveTitle}" (${changes})`));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function resolveBoard(boardOpt) {
|
|
73
|
+
const defaultBoard = getDefaultBoard();
|
|
74
|
+
if (!defaultBoard) {
|
|
75
|
+
console.error(chalk.red("No default board set. Run `sb use <board>` first."));
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
return defaultBoard;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function loginCommand(handle: string): Promise<void>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { login } from "../lib/auth.js";
|
|
2
|
+
import { loadAuthInfo, clearDefaultBoard } from "../lib/config.js";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
export async function loginCommand(handle) {
|
|
5
|
+
const previousAuth = loadAuthInfo();
|
|
6
|
+
try {
|
|
7
|
+
console.log(`Logging in as ${chalk.bold(handle)}...`);
|
|
8
|
+
const { did, handle: resolvedHandle } = await login(handle);
|
|
9
|
+
// Clear board selection when switching accounts
|
|
10
|
+
if (previousAuth && previousAuth.did !== did) {
|
|
11
|
+
clearDefaultBoard();
|
|
12
|
+
}
|
|
13
|
+
console.log(chalk.green(`Logged in as ${resolvedHandle} (${did})`));
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
console.error(chalk.red(`Login failed: ${err instanceof Error ? err.message : err}`));
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAC/C,MAAM,YAAY,GAAG,YAAY,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5D,gDAAgD;QAChD,IAAI,YAAY,IAAI,YAAY,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC7C,iBAAiB,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,cAAc,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function logoutCommand(): void;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { logout } from "../lib/auth.js";
|
|
2
|
+
import { loadAuthInfo, clearDefaultBoard } from "../lib/config.js";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
export function logoutCommand() {
|
|
5
|
+
const info = loadAuthInfo();
|
|
6
|
+
if (!info) {
|
|
7
|
+
console.log("Not logged in.");
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
logout();
|
|
11
|
+
clearDefaultBoard();
|
|
12
|
+
console.log(chalk.green(`Logged out (was ${info.handle}).`));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,aAAa;IAC3B,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,MAAM,EAAE,CAAC;IACT,iBAAiB,EAAE,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { requireAgent } from "../lib/auth.js";
|
|
2
|
+
import { fetchBoardData } from "../lib/pds.js";
|
|
3
|
+
import { getDefaultBoard } from "../lib/config.js";
|
|
4
|
+
import { resolveCardRef } from "../lib/card-ref.js";
|
|
5
|
+
import { resolveColumn } from "../lib/column-match.js";
|
|
6
|
+
import { generateTID, buildAtUri, TASK_COLLECTION, OP_COLLECTION, BOARD_COLLECTION } from "../lib/tid.js";
|
|
7
|
+
import { shortRkey } from "../lib/display.js";
|
|
8
|
+
import { generateKeyBetween } from "fractional-indexing";
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
export async function mvCommand(cardRef, columnRef, opts) {
|
|
11
|
+
const { agent, did } = await requireAgent();
|
|
12
|
+
const boardRef = resolveBoard(opts.board);
|
|
13
|
+
const data = await fetchBoardData(boardRef.did, boardRef.rkey, did);
|
|
14
|
+
if (!data) {
|
|
15
|
+
console.error(chalk.red("Board not found."));
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
let task;
|
|
19
|
+
try {
|
|
20
|
+
task = resolveCardRef(cardRef, data.tasks);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
let targetCol;
|
|
27
|
+
try {
|
|
28
|
+
targetCol = resolveColumn(columnRef, data.board.columns);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
// Generate position at end of target column
|
|
35
|
+
const colTasks = data.tasks
|
|
36
|
+
.filter((t) => t.effectiveColumnId === targetCol.id)
|
|
37
|
+
.sort((a, b) => a.effectivePosition.localeCompare(b.effectivePosition));
|
|
38
|
+
const lastPos = colTasks.length > 0 ? colTasks[colTasks.length - 1].effectivePosition : null;
|
|
39
|
+
const position = generateKeyBetween(lastPos, null);
|
|
40
|
+
const boardUri = buildAtUri(boardRef.did, BOARD_COLLECTION, boardRef.rkey);
|
|
41
|
+
const taskUri = buildAtUri(task.did, TASK_COLLECTION, task.rkey);
|
|
42
|
+
const opRkey = generateTID();
|
|
43
|
+
await agent.com.atproto.repo.putRecord({
|
|
44
|
+
repo: did,
|
|
45
|
+
collection: OP_COLLECTION,
|
|
46
|
+
rkey: opRkey,
|
|
47
|
+
record: {
|
|
48
|
+
$type: "dev.skyboard.op",
|
|
49
|
+
targetTaskUri: taskUri,
|
|
50
|
+
boardUri,
|
|
51
|
+
fields: {
|
|
52
|
+
columnId: targetCol.id,
|
|
53
|
+
position,
|
|
54
|
+
},
|
|
55
|
+
createdAt: new Date().toISOString(),
|
|
56
|
+
},
|
|
57
|
+
validate: false,
|
|
58
|
+
});
|
|
59
|
+
if (opts.json) {
|
|
60
|
+
console.log(JSON.stringify({ rkey: task.rkey, column: targetCol.name }));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.log(chalk.green(`Moved ${shortRkey(task.rkey)} "${task.effectiveTitle}" → ${targetCol.name}`));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function resolveBoard(boardOpt) {
|
|
67
|
+
const defaultBoard = getDefaultBoard();
|
|
68
|
+
if (!defaultBoard) {
|
|
69
|
+
console.error(chalk.red("No default board set. Run `sb use <board>` first."));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
return defaultBoard;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=mv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mv.js","sourceRoot":"","sources":["../../src/commands/mv.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { requireAgent } from "../lib/auth.js";
|
|
2
|
+
import { fetchBoardData } from "../lib/pds.js";
|
|
3
|
+
import { getDefaultBoard } from "../lib/config.js";
|
|
4
|
+
import { resolveColumn } from "../lib/column-match.js";
|
|
5
|
+
import { generateTID, buildAtUri, TASK_COLLECTION, BOARD_COLLECTION } from "../lib/tid.js";
|
|
6
|
+
import { shortRkey } from "../lib/display.js";
|
|
7
|
+
import { generateKeyBetween } from "fractional-indexing";
|
|
8
|
+
import chalk from "chalk";
|
|
9
|
+
export async function newCommand(title, opts) {
|
|
10
|
+
const { agent, did } = await requireAgent();
|
|
11
|
+
const boardRef = resolveBoard(opts.board);
|
|
12
|
+
const data = await fetchBoardData(boardRef.did, boardRef.rkey, did);
|
|
13
|
+
if (!data) {
|
|
14
|
+
console.error(chalk.red("Board not found."));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
// Determine target column
|
|
18
|
+
const sortedColumns = [...data.board.columns].sort((a, b) => a.order - b.order);
|
|
19
|
+
let targetCol;
|
|
20
|
+
if (opts.column) {
|
|
21
|
+
try {
|
|
22
|
+
targetCol = resolveColumn(opts.column, data.board.columns);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
targetCol = sortedColumns[0];
|
|
31
|
+
}
|
|
32
|
+
// Generate position at end of column
|
|
33
|
+
const colTasks = data.tasks
|
|
34
|
+
.filter((t) => t.effectiveColumnId === targetCol.id)
|
|
35
|
+
.sort((a, b) => a.effectivePosition.localeCompare(b.effectivePosition));
|
|
36
|
+
const lastPos = colTasks.length > 0 ? colTasks[colTasks.length - 1].effectivePosition : null;
|
|
37
|
+
const position = generateKeyBetween(lastPos, null);
|
|
38
|
+
const boardUri = buildAtUri(boardRef.did, BOARD_COLLECTION, boardRef.rkey);
|
|
39
|
+
const rkey = generateTID();
|
|
40
|
+
const now = new Date().toISOString();
|
|
41
|
+
await agent.com.atproto.repo.putRecord({
|
|
42
|
+
repo: did,
|
|
43
|
+
collection: TASK_COLLECTION,
|
|
44
|
+
rkey,
|
|
45
|
+
record: {
|
|
46
|
+
$type: "dev.skyboard.task",
|
|
47
|
+
title,
|
|
48
|
+
...(opts.description ? { description: opts.description } : {}),
|
|
49
|
+
columnId: targetCol.id,
|
|
50
|
+
boardUri,
|
|
51
|
+
position,
|
|
52
|
+
order: 0,
|
|
53
|
+
createdAt: now,
|
|
54
|
+
},
|
|
55
|
+
validate: false,
|
|
56
|
+
});
|
|
57
|
+
if (opts.json) {
|
|
58
|
+
console.log(JSON.stringify({ rkey, title, column: targetCol.name, position }));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
console.log(chalk.green(`Created: ${shortRkey(rkey)} ${title} → ${targetCol.name}`));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function resolveBoard(boardOpt) {
|
|
65
|
+
const defaultBoard = getDefaultBoard();
|
|
66
|
+
if (!defaultBoard) {
|
|
67
|
+
console.error(chalk.red("No default board set. Run `sb use <board>` first."));
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
return defaultBoard;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=new.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { requireAgent } from "../lib/auth.js";
|
|
2
|
+
import { fetchBoardData } from "../lib/pds.js";
|
|
3
|
+
import { getDefaultBoard } from "../lib/config.js";
|
|
4
|
+
import { resolveCardRef } from "../lib/card-ref.js";
|
|
5
|
+
import { shortRkey } from "../lib/display.js";
|
|
6
|
+
import { TASK_COLLECTION } from "../lib/tid.js";
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
import { createInterface } from "node:readline";
|
|
9
|
+
export async function rmCommand(cardRef, opts) {
|
|
10
|
+
const { agent, did } = await requireAgent();
|
|
11
|
+
const boardRef = resolveBoard(opts.board);
|
|
12
|
+
const data = await fetchBoardData(boardRef.did, boardRef.rkey, did);
|
|
13
|
+
if (!data) {
|
|
14
|
+
console.error(chalk.red("Board not found."));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
let task;
|
|
18
|
+
try {
|
|
19
|
+
task = resolveCardRef(cardRef, data.tasks);
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
// Can only delete your own tasks
|
|
26
|
+
if (task.did !== did) {
|
|
27
|
+
console.error(chalk.red("You can only delete your own tasks."));
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
// Confirm unless --force
|
|
31
|
+
if (!opts.force) {
|
|
32
|
+
const confirmed = await confirm(`Delete "${task.effectiveTitle}" (${shortRkey(task.rkey)})? [y/N] `);
|
|
33
|
+
if (!confirmed) {
|
|
34
|
+
console.log("Cancelled.");
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
await agent.com.atproto.repo.deleteRecord({
|
|
39
|
+
repo: did,
|
|
40
|
+
collection: TASK_COLLECTION,
|
|
41
|
+
rkey: task.rkey,
|
|
42
|
+
});
|
|
43
|
+
if (opts.json) {
|
|
44
|
+
console.log(JSON.stringify({ deleted: task.rkey }));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
console.log(chalk.green(`Deleted ${shortRkey(task.rkey)} "${task.effectiveTitle}"`));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function confirm(prompt) {
|
|
51
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
52
|
+
return new Promise((resolve) => {
|
|
53
|
+
rl.question(prompt, (answer) => {
|
|
54
|
+
rl.close();
|
|
55
|
+
resolve(answer.toLowerCase() === "y" || answer.toLowerCase() === "yes");
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function resolveBoard(boardOpt) {
|
|
60
|
+
const defaultBoard = getDefaultBoard();
|
|
61
|
+
if (!defaultBoard) {
|
|
62
|
+
console.error(chalk.red("No default board set. Run `sb use <board>` first."));
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
return defaultBoard;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=rm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rm.js","sourceRoot":"","sources":["../../src/commands/rm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { requireAgent } from "../lib/auth.js";
|
|
2
|
+
import { fetchBoardData } from "../lib/pds.js";
|
|
3
|
+
import { getDefaultBoard } from "../lib/config.js";
|
|
4
|
+
import { resolveCardRef } from "../lib/card-ref.js";
|
|
5
|
+
import { shortRkey, formatDate } from "../lib/display.js";
|
|
6
|
+
import { buildAtUri, TASK_COLLECTION } from "../lib/tid.js";
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
export async function showCommand(ref, opts) {
|
|
9
|
+
const { did } = await requireAgent();
|
|
10
|
+
const boardRef = resolveBoard(opts.board);
|
|
11
|
+
const data = await fetchBoardData(boardRef.did, boardRef.rkey, did);
|
|
12
|
+
if (!data) {
|
|
13
|
+
console.error(chalk.red("Board not found."));
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
let task;
|
|
17
|
+
try {
|
|
18
|
+
task = resolveCardRef(ref, data.tasks);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
const col = data.board.columns.find((c) => c.id === task.effectiveColumnId);
|
|
25
|
+
const labels = task.effectiveLabelIds
|
|
26
|
+
.map((id) => data.board.labels?.find((l) => l.id === id))
|
|
27
|
+
.filter(Boolean);
|
|
28
|
+
const taskUri = buildAtUri(task.did, TASK_COLLECTION, task.rkey);
|
|
29
|
+
const comments = data.comments
|
|
30
|
+
.filter((c) => c.targetTaskUri === taskUri)
|
|
31
|
+
.sort((a, b) => a.createdAt.localeCompare(b.createdAt));
|
|
32
|
+
if (opts.json) {
|
|
33
|
+
console.log(JSON.stringify({
|
|
34
|
+
rkey: task.rkey,
|
|
35
|
+
did: task.did,
|
|
36
|
+
title: task.effectiveTitle,
|
|
37
|
+
description: task.effectiveDescription,
|
|
38
|
+
column: col?.name,
|
|
39
|
+
labels: labels.map((l) => ({ id: l.id, name: l.name, color: l.color })),
|
|
40
|
+
createdAt: task.createdAt,
|
|
41
|
+
lastModifiedAt: task.lastModifiedAt,
|
|
42
|
+
lastModifiedBy: task.lastModifiedBy,
|
|
43
|
+
opsApplied: task.appliedOps.length,
|
|
44
|
+
comments: comments.map((c) => ({
|
|
45
|
+
did: c.did,
|
|
46
|
+
text: c.text,
|
|
47
|
+
createdAt: c.createdAt,
|
|
48
|
+
})),
|
|
49
|
+
}, null, 2));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
console.log();
|
|
53
|
+
console.log(chalk.bold(task.effectiveTitle));
|
|
54
|
+
console.log(chalk.dim(`${shortRkey(task.rkey)} by ${task.did.slice(0, 20)}... ${formatDate(task.createdAt)}`));
|
|
55
|
+
console.log();
|
|
56
|
+
if (col) {
|
|
57
|
+
console.log(`${chalk.bold("Column:")} ${col.name}`);
|
|
58
|
+
}
|
|
59
|
+
if (labels.length > 0) {
|
|
60
|
+
const labelStr = labels.map((l) => chalk.hex(l.color)(`[${l.name}]`)).join(" ");
|
|
61
|
+
console.log(`${chalk.bold("Labels:")} ${labelStr}`);
|
|
62
|
+
}
|
|
63
|
+
if (task.effectiveDescription) {
|
|
64
|
+
console.log();
|
|
65
|
+
console.log(task.effectiveDescription);
|
|
66
|
+
}
|
|
67
|
+
if (task.appliedOps.length > 0) {
|
|
68
|
+
console.log();
|
|
69
|
+
console.log(chalk.dim(`${task.appliedOps.length} edit(s) applied`));
|
|
70
|
+
}
|
|
71
|
+
if (comments.length > 0) {
|
|
72
|
+
console.log();
|
|
73
|
+
console.log(chalk.bold.underline("Comments"));
|
|
74
|
+
for (const comment of comments) {
|
|
75
|
+
console.log();
|
|
76
|
+
console.log(` ${chalk.dim(comment.did.slice(0, 20) + "...")} ${chalk.dim(formatDate(comment.createdAt))}`);
|
|
77
|
+
console.log(` ${comment.text}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
console.log();
|
|
81
|
+
}
|
|
82
|
+
function resolveBoard(boardOpt) {
|
|
83
|
+
const defaultBoard = getDefaultBoard();
|
|
84
|
+
if (!defaultBoard) {
|
|
85
|
+
console.error(chalk.red("No default board set. Run `sb use <board>` first."));
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
return defaultBoard;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"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"}
|