skyboard-cli 0.1.0 → 0.1.2
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 +172 -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 +48 -0
- package/dist/lib/pds.js +355 -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/{src/lib/tid.ts → dist/lib/tid.js} +5 -11
- 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 +6 -2
- package/src/__tests__/auth-state.test.ts +0 -111
- package/src/__tests__/card-ref.test.ts +0 -42
- package/src/__tests__/column-match.test.ts +0 -57
- package/src/__tests__/commands.test.ts +0 -326
- package/src/__tests__/helpers.ts +0 -154
- package/src/__tests__/materialize.test.ts +0 -257
- package/src/__tests__/pds.test.ts +0 -213
- package/src/commands/add.ts +0 -47
- package/src/commands/boards.ts +0 -64
- package/src/commands/cards.ts +0 -65
- package/src/commands/cols.ts +0 -51
- package/src/commands/comment.ts +0 -64
- package/src/commands/edit.ts +0 -89
- package/src/commands/login.ts +0 -19
- package/src/commands/logout.ts +0 -14
- package/src/commands/mv.ts +0 -84
- package/src/commands/new.ts +0 -80
- package/src/commands/rm.ts +0 -79
- package/src/commands/show.ts +0 -100
- package/src/commands/status.ts +0 -78
- package/src/commands/use.ts +0 -72
- package/src/commands/whoami.ts +0 -22
- package/src/index.ts +0 -143
- package/src/lib/auth.ts +0 -244
- package/src/lib/card-ref.ts +0 -32
- package/src/lib/column-match.ts +0 -45
- package/src/lib/config.ts +0 -182
- package/src/lib/display.ts +0 -112
- package/src/lib/materialize.ts +0 -138
- package/src/lib/pds.ts +0 -440
- package/src/lib/permissions.ts +0 -28
- package/src/lib/schemas.ts +0 -97
- package/src/lib/types.ts +0 -144
- package/tsconfig.json +0 -15
- package/vitest.config.ts +0 -7
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { requireAgent } from "../lib/auth.js";
|
|
2
|
+
import { fetchBoardData } from "../lib/pds.js";
|
|
3
|
+
import { getDefaultBoard } from "../lib/config.js";
|
|
4
|
+
import { printBoardCards, shortRkey } from "../lib/display.js";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
export async function cardsCommand(opts) {
|
|
7
|
+
const { did } = await requireAgent();
|
|
8
|
+
const boardRef = resolveBoard(opts.board);
|
|
9
|
+
const data = await fetchBoardData(boardRef.did, boardRef.rkey, did);
|
|
10
|
+
if (!data) {
|
|
11
|
+
console.error(chalk.red("Board not found."));
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
if (opts.json) {
|
|
15
|
+
const sorted = [...data.board.columns].sort((a, b) => a.order - b.order);
|
|
16
|
+
const result = sorted.map((col) => ({
|
|
17
|
+
column: col.name,
|
|
18
|
+
cards: data.tasks
|
|
19
|
+
.filter((t) => t.effectiveColumnId === col.id)
|
|
20
|
+
.sort((a, b) => a.effectivePosition.localeCompare(b.effectivePosition))
|
|
21
|
+
.map((t) => ({
|
|
22
|
+
rkey: t.rkey,
|
|
23
|
+
shortRef: shortRkey(t.rkey),
|
|
24
|
+
title: t.effectiveTitle,
|
|
25
|
+
description: t.effectiveDescription,
|
|
26
|
+
labels: t.effectiveLabelIds,
|
|
27
|
+
createdAt: t.createdAt,
|
|
28
|
+
lastModifiedAt: t.lastModifiedAt,
|
|
29
|
+
})),
|
|
30
|
+
}));
|
|
31
|
+
console.log(JSON.stringify(result, null, 2));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
console.log(chalk.bold(data.board.name));
|
|
35
|
+
printBoardCards(data.board, data.tasks, {
|
|
36
|
+
column: opts.column,
|
|
37
|
+
label: opts.label,
|
|
38
|
+
search: opts.search,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
function resolveBoard(boardOpt) {
|
|
42
|
+
if (boardOpt) {
|
|
43
|
+
const defaultBoard = getDefaultBoard();
|
|
44
|
+
if (defaultBoard)
|
|
45
|
+
return defaultBoard;
|
|
46
|
+
}
|
|
47
|
+
const defaultBoard = getDefaultBoard();
|
|
48
|
+
if (!defaultBoard) {
|
|
49
|
+
console.error(chalk.red("No default board set. Run `sb use <board>` first."));
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
return defaultBoard;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=cards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cards.js","sourceRoot":"","sources":["../../src/commands/cards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAMlC;IACC,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;IAErC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE1C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAClC,MAAM,EAAE,GAAG,CAAC,IAAI;YAChB,KAAK,EAAE,IAAI,CAAC,KAAK;iBACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,GAAG,CAAC,EAAE,CAAC;iBAC7C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;iBACtE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC3B,KAAK,EAAE,CAAC,CAAC,cAAc;gBACvB,WAAW,EAAE,CAAC,CAAC,oBAAoB;gBACnC,MAAM,EAAE,CAAC,CAAC,iBAAiB;gBAC3B,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,cAAc,EAAE,CAAC,CAAC,cAAc;aACjC,CAAC,CAAC;SACN,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;QACtC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,QAAiB;IACrC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,IAAI,YAAY;YAAE,OAAO,YAAY,CAAC;IACxC,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -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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"}
|