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.
Files changed (138) hide show
  1. package/dist/__tests__/auth-state.test.d.ts +1 -0
  2. package/dist/__tests__/auth-state.test.js +86 -0
  3. package/dist/__tests__/auth-state.test.js.map +1 -0
  4. package/dist/__tests__/card-ref.test.d.ts +1 -0
  5. package/dist/__tests__/card-ref.test.js +36 -0
  6. package/dist/__tests__/card-ref.test.js.map +1 -0
  7. package/dist/__tests__/column-match.test.d.ts +1 -0
  8. package/dist/__tests__/column-match.test.js +49 -0
  9. package/dist/__tests__/column-match.test.js.map +1 -0
  10. package/dist/__tests__/commands.test.d.ts +1 -0
  11. package/dist/__tests__/commands.test.js +243 -0
  12. package/dist/__tests__/commands.test.js.map +1 -0
  13. package/dist/__tests__/helpers.d.ts +50 -0
  14. package/dist/__tests__/helpers.js +135 -0
  15. package/dist/__tests__/helpers.js.map +1 -0
  16. package/dist/__tests__/materialize.test.d.ts +1 -0
  17. package/dist/__tests__/materialize.test.js +186 -0
  18. package/dist/__tests__/materialize.test.js.map +1 -0
  19. package/dist/__tests__/pds.test.d.ts +1 -0
  20. package/dist/__tests__/pds.test.js +172 -0
  21. package/dist/__tests__/pds.test.js.map +1 -0
  22. package/dist/commands/add.d.ts +1 -0
  23. package/dist/commands/add.js +41 -0
  24. package/dist/commands/add.js.map +1 -0
  25. package/dist/commands/boards.d.ts +3 -0
  26. package/dist/commands/boards.js +54 -0
  27. package/dist/commands/boards.js.map +1 -0
  28. package/dist/commands/cards.d.ts +7 -0
  29. package/dist/commands/cards.js +54 -0
  30. package/dist/commands/cards.js.map +1 -0
  31. package/dist/commands/cols.d.ts +4 -0
  32. package/dist/commands/cols.js +44 -0
  33. package/dist/commands/cols.js.map +1 -0
  34. package/dist/commands/comment.d.ts +4 -0
  35. package/dist/commands/comment.js +55 -0
  36. package/dist/commands/comment.js.map +1 -0
  37. package/dist/commands/edit.d.ts +7 -0
  38. package/dist/commands/edit.js +80 -0
  39. package/dist/commands/edit.js.map +1 -0
  40. package/dist/commands/login.d.ts +1 -0
  41. package/dist/commands/login.js +20 -0
  42. package/dist/commands/login.js.map +1 -0
  43. package/dist/commands/logout.d.ts +1 -0
  44. package/dist/commands/logout.js +14 -0
  45. package/dist/commands/logout.js.map +1 -0
  46. package/dist/commands/mv.d.ts +4 -0
  47. package/dist/commands/mv.js +74 -0
  48. package/dist/commands/mv.js.map +1 -0
  49. package/dist/commands/new.d.ts +6 -0
  50. package/dist/commands/new.js +72 -0
  51. package/dist/commands/new.js.map +1 -0
  52. package/dist/commands/rm.d.ts +5 -0
  53. package/dist/commands/rm.js +67 -0
  54. package/dist/commands/rm.js.map +1 -0
  55. package/dist/commands/show.d.ts +4 -0
  56. package/dist/commands/show.js +90 -0
  57. package/dist/commands/show.js.map +1 -0
  58. package/dist/commands/status.d.ts +3 -0
  59. package/dist/commands/status.js +71 -0
  60. package/dist/commands/status.js.map +1 -0
  61. package/dist/commands/use.d.ts +1 -0
  62. package/dist/commands/use.js +61 -0
  63. package/dist/commands/use.js.map +1 -0
  64. package/dist/commands/whoami.d.ts +3 -0
  65. package/dist/commands/whoami.js +23 -0
  66. package/dist/commands/whoami.js.map +1 -0
  67. package/dist/index.d.ts +2 -0
  68. package/dist/index.js +126 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/lib/auth.d.ts +28 -0
  71. package/dist/lib/auth.js +219 -0
  72. package/dist/lib/auth.js.map +1 -0
  73. package/dist/lib/card-ref.d.ts +7 -0
  74. package/dist/lib/card-ref.js +23 -0
  75. package/dist/lib/card-ref.js.map +1 -0
  76. package/dist/lib/column-match.d.ts +6 -0
  77. package/dist/lib/column-match.js +35 -0
  78. package/dist/lib/column-match.js.map +1 -0
  79. package/dist/lib/config.d.ts +32 -0
  80. package/dist/lib/config.js +153 -0
  81. package/dist/lib/config.js.map +1 -0
  82. package/dist/lib/display.d.ts +11 -0
  83. package/dist/lib/display.js +97 -0
  84. package/dist/lib/display.js.map +1 -0
  85. package/dist/lib/materialize.d.ts +2 -0
  86. package/dist/lib/materialize.js +111 -0
  87. package/dist/lib/materialize.js.map +1 -0
  88. package/dist/lib/pds.d.ts +48 -0
  89. package/dist/lib/pds.js +355 -0
  90. package/dist/lib/pds.js.map +1 -0
  91. package/dist/lib/permissions.d.ts +4 -0
  92. package/dist/lib/permissions.js +13 -0
  93. package/dist/lib/permissions.js.map +1 -0
  94. package/dist/lib/schemas.d.ts +209 -0
  95. package/dist/lib/schemas.js +82 -0
  96. package/dist/lib/schemas.js.map +1 -0
  97. package/dist/lib/tid.d.ts +9 -0
  98. package/{src/lib/tid.ts → dist/lib/tid.js} +5 -11
  99. package/dist/lib/tid.js.map +1 -0
  100. package/dist/lib/types.d.ts +129 -0
  101. package/dist/lib/types.js +3 -0
  102. package/dist/lib/types.js.map +1 -0
  103. package/package.json +6 -2
  104. package/src/__tests__/auth-state.test.ts +0 -111
  105. package/src/__tests__/card-ref.test.ts +0 -42
  106. package/src/__tests__/column-match.test.ts +0 -57
  107. package/src/__tests__/commands.test.ts +0 -326
  108. package/src/__tests__/helpers.ts +0 -154
  109. package/src/__tests__/materialize.test.ts +0 -257
  110. package/src/__tests__/pds.test.ts +0 -213
  111. package/src/commands/add.ts +0 -47
  112. package/src/commands/boards.ts +0 -64
  113. package/src/commands/cards.ts +0 -65
  114. package/src/commands/cols.ts +0 -51
  115. package/src/commands/comment.ts +0 -64
  116. package/src/commands/edit.ts +0 -89
  117. package/src/commands/login.ts +0 -19
  118. package/src/commands/logout.ts +0 -14
  119. package/src/commands/mv.ts +0 -84
  120. package/src/commands/new.ts +0 -80
  121. package/src/commands/rm.ts +0 -79
  122. package/src/commands/show.ts +0 -100
  123. package/src/commands/status.ts +0 -78
  124. package/src/commands/use.ts +0 -72
  125. package/src/commands/whoami.ts +0 -22
  126. package/src/index.ts +0 -143
  127. package/src/lib/auth.ts +0 -244
  128. package/src/lib/card-ref.ts +0 -32
  129. package/src/lib/column-match.ts +0 -45
  130. package/src/lib/config.ts +0 -182
  131. package/src/lib/display.ts +0 -112
  132. package/src/lib/materialize.ts +0 -138
  133. package/src/lib/pds.ts +0 -440
  134. package/src/lib/permissions.ts +0 -28
  135. package/src/lib/schemas.ts +0 -97
  136. package/src/lib/types.ts +0 -144
  137. package/tsconfig.json +0 -15
  138. package/vitest.config.ts +0 -7
@@ -0,0 +1,7 @@
1
+ export declare function cardsCommand(opts: {
2
+ column?: string;
3
+ label?: string;
4
+ search?: string;
5
+ board?: string;
6
+ json?: boolean;
7
+ }): Promise<void>;
@@ -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,4 @@
1
+ export declare function colsCommand(opts: {
2
+ board?: string;
3
+ json?: boolean;
4
+ }): Promise<void>;
@@ -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,4 @@
1
+ export declare function commentCommand(cardRef: string, text: string, opts: {
2
+ board?: string;
3
+ json?: boolean;
4
+ }): Promise<void>;
@@ -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,7 @@
1
+ export declare function editCommand(cardRef: string, opts: {
2
+ title?: string;
3
+ description?: string;
4
+ label?: string[];
5
+ board?: string;
6
+ json?: boolean;
7
+ }): Promise<void>;
@@ -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,4 @@
1
+ export declare function mvCommand(cardRef: string, columnRef: string, opts: {
2
+ board?: string;
3
+ json?: boolean;
4
+ }): Promise<void>;
@@ -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,6 @@
1
+ export declare function newCommand(title: string, opts: {
2
+ column?: string;
3
+ description?: string;
4
+ board?: string;
5
+ json?: boolean;
6
+ }): Promise<void>;
@@ -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,5 @@
1
+ export declare function rmCommand(cardRef: string, opts: {
2
+ force?: boolean;
3
+ board?: string;
4
+ json?: boolean;
5
+ }): Promise<void>;
@@ -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,4 @@
1
+ export declare function showCommand(ref: string, opts: {
2
+ board?: string;
3
+ json?: boolean;
4
+ }): Promise<void>;