@klarocards/cli 1.0.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.
Files changed (166) hide show
  1. package/README.md +125 -0
  2. package/dist/commands/cheatsheet.d.ts +3 -0
  3. package/dist/commands/cheatsheet.d.ts.map +1 -0
  4. package/dist/commands/cheatsheet.js +80 -0
  5. package/dist/commands/cheatsheet.js.map +1 -0
  6. package/dist/commands/completion.d.ts +3 -0
  7. package/dist/commands/completion.d.ts.map +1 -0
  8. package/dist/commands/completion.js +191 -0
  9. package/dist/commands/completion.js.map +1 -0
  10. package/dist/commands/config.d.ts +3 -0
  11. package/dist/commands/config.d.ts.map +1 -0
  12. package/dist/commands/config.js +77 -0
  13. package/dist/commands/config.js.map +1 -0
  14. package/dist/commands/create.d.ts +3 -0
  15. package/dist/commands/create.d.ts.map +1 -0
  16. package/dist/commands/create.js +121 -0
  17. package/dist/commands/create.js.map +1 -0
  18. package/dist/commands/del.d.ts +3 -0
  19. package/dist/commands/del.d.ts.map +1 -0
  20. package/dist/commands/del.js +49 -0
  21. package/dist/commands/del.js.map +1 -0
  22. package/dist/commands/describe.d.ts +3 -0
  23. package/dist/commands/describe.d.ts.map +1 -0
  24. package/dist/commands/describe.js +105 -0
  25. package/dist/commands/describe.js.map +1 -0
  26. package/dist/commands/edit.d.ts +3 -0
  27. package/dist/commands/edit.d.ts.map +1 -0
  28. package/dist/commands/edit.js +91 -0
  29. package/dist/commands/edit.js.map +1 -0
  30. package/dist/commands/fetch.d.ts +3 -0
  31. package/dist/commands/fetch.d.ts.map +1 -0
  32. package/dist/commands/fetch.js +129 -0
  33. package/dist/commands/fetch.js.map +1 -0
  34. package/dist/commands/init.d.ts +3 -0
  35. package/dist/commands/init.d.ts.map +1 -0
  36. package/dist/commands/init.js +122 -0
  37. package/dist/commands/init.js.map +1 -0
  38. package/dist/commands/login.d.ts +7 -0
  39. package/dist/commands/login.d.ts.map +1 -0
  40. package/dist/commands/login.js +101 -0
  41. package/dist/commands/login.js.map +1 -0
  42. package/dist/commands/logout.d.ts +3 -0
  43. package/dist/commands/logout.d.ts.map +1 -0
  44. package/dist/commands/logout.js +34 -0
  45. package/dist/commands/logout.js.map +1 -0
  46. package/dist/commands/ls.d.ts +3 -0
  47. package/dist/commands/ls.d.ts.map +1 -0
  48. package/dist/commands/ls.js +174 -0
  49. package/dist/commands/ls.js.map +1 -0
  50. package/dist/commands/read.d.ts +3 -0
  51. package/dist/commands/read.d.ts.map +1 -0
  52. package/dist/commands/read.js +64 -0
  53. package/dist/commands/read.js.map +1 -0
  54. package/dist/commands/set.d.ts +3 -0
  55. package/dist/commands/set.d.ts.map +1 -0
  56. package/dist/commands/set.js +61 -0
  57. package/dist/commands/set.js.map +1 -0
  58. package/dist/commands/sync.d.ts +3 -0
  59. package/dist/commands/sync.d.ts.map +1 -0
  60. package/dist/commands/sync.js +157 -0
  61. package/dist/commands/sync.js.map +1 -0
  62. package/dist/commands/update.d.ts +4 -0
  63. package/dist/commands/update.d.ts.map +1 -0
  64. package/dist/commands/update.js +68 -0
  65. package/dist/commands/update.js.map +1 -0
  66. package/dist/commands/use.d.ts +3 -0
  67. package/dist/commands/use.d.ts.map +1 -0
  68. package/dist/commands/use.js +29 -0
  69. package/dist/commands/use.js.map +1 -0
  70. package/dist/commands/whoami.d.ts +3 -0
  71. package/dist/commands/whoami.d.ts.map +1 -0
  72. package/dist/commands/whoami.js +30 -0
  73. package/dist/commands/whoami.js.map +1 -0
  74. package/dist/completions/bash.d.ts +2 -0
  75. package/dist/completions/bash.d.ts.map +1 -0
  76. package/dist/completions/bash.js +134 -0
  77. package/dist/completions/bash.js.map +1 -0
  78. package/dist/completions/commands.d.ts +18 -0
  79. package/dist/completions/commands.d.ts.map +1 -0
  80. package/dist/completions/commands.js +173 -0
  81. package/dist/completions/commands.js.map +1 -0
  82. package/dist/completions/fish.d.ts +2 -0
  83. package/dist/completions/fish.d.ts.map +1 -0
  84. package/dist/completions/fish.js +84 -0
  85. package/dist/completions/fish.js.map +1 -0
  86. package/dist/completions/zsh.d.ts +2 -0
  87. package/dist/completions/zsh.d.ts.map +1 -0
  88. package/dist/completions/zsh.js +113 -0
  89. package/dist/completions/zsh.js.map +1 -0
  90. package/dist/index.d.ts +3 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +158 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/lib/api.d.ts +34 -0
  95. package/dist/lib/api.d.ts.map +1 -0
  96. package/dist/lib/api.js +146 -0
  97. package/dist/lib/api.js.map +1 -0
  98. package/dist/lib/completion-cache.d.ts +34 -0
  99. package/dist/lib/completion-cache.d.ts.map +1 -0
  100. package/dist/lib/completion-cache.js +99 -0
  101. package/dist/lib/completion-cache.js.map +1 -0
  102. package/dist/lib/config.d.ts +12 -0
  103. package/dist/lib/config.d.ts.map +1 -0
  104. package/dist/lib/config.js +111 -0
  105. package/dist/lib/config.js.map +1 -0
  106. package/dist/lib/connector.d.ts +17 -0
  107. package/dist/lib/connector.d.ts.map +1 -0
  108. package/dist/lib/connector.js +2 -0
  109. package/dist/lib/connector.js.map +1 -0
  110. package/dist/lib/defaults.d.ts +9 -0
  111. package/dist/lib/defaults.d.ts.map +1 -0
  112. package/dist/lib/defaults.js +58 -0
  113. package/dist/lib/defaults.js.map +1 -0
  114. package/dist/lib/trace.d.ts +4 -0
  115. package/dist/lib/trace.d.ts.map +1 -0
  116. package/dist/lib/trace.js +13 -0
  117. package/dist/lib/trace.js.map +1 -0
  118. package/dist/lib/types.d.ts +70 -0
  119. package/dist/lib/types.d.ts.map +1 -0
  120. package/dist/lib/types.js +2 -0
  121. package/dist/lib/types.js.map +1 -0
  122. package/dist/utils/content.d.ts +26 -0
  123. package/dist/utils/content.d.ts.map +1 -0
  124. package/dist/utils/content.js +52 -0
  125. package/dist/utils/content.js.map +1 -0
  126. package/dist/utils/dimensions.d.ts +17 -0
  127. package/dist/utils/dimensions.d.ts.map +1 -0
  128. package/dist/utils/dimensions.js +41 -0
  129. package/dist/utils/dimensions.js.map +1 -0
  130. package/dist/utils/editor.d.ts +14 -0
  131. package/dist/utils/editor.d.ts.map +1 -0
  132. package/dist/utils/editor.js +56 -0
  133. package/dist/utils/editor.js.map +1 -0
  134. package/dist/utils/format.d.ts +17 -0
  135. package/dist/utils/format.d.ts.map +1 -0
  136. package/dist/utils/format.js +27 -0
  137. package/dist/utils/format.js.map +1 -0
  138. package/dist/utils/markdown.d.ts +24 -0
  139. package/dist/utils/markdown.d.ts.map +1 -0
  140. package/dist/utils/markdown.js +50 -0
  141. package/dist/utils/markdown.js.map +1 -0
  142. package/dist/utils/objects.d.ts +12 -0
  143. package/dist/utils/objects.d.ts.map +1 -0
  144. package/dist/utils/objects.js +31 -0
  145. package/dist/utils/objects.js.map +1 -0
  146. package/dist/utils/slugify.d.ts +10 -0
  147. package/dist/utils/slugify.d.ts.map +1 -0
  148. package/dist/utils/slugify.js +18 -0
  149. package/dist/utils/slugify.js.map +1 -0
  150. package/dist/utils/story-editor.d.ts +15 -0
  151. package/dist/utils/story-editor.d.ts.map +1 -0
  152. package/dist/utils/story-editor.js +43 -0
  153. package/dist/utils/story-editor.js.map +1 -0
  154. package/dist/utils/story-markdown.d.ts +36 -0
  155. package/dist/utils/story-markdown.d.ts.map +1 -0
  156. package/dist/utils/story-markdown.js +114 -0
  157. package/dist/utils/story-markdown.js.map +1 -0
  158. package/dist/utils/table.d.ts +18 -0
  159. package/dist/utils/table.d.ts.map +1 -0
  160. package/dist/utils/table.js +57 -0
  161. package/dist/utils/table.js.map +1 -0
  162. package/dist/utils/validation.d.ts +8 -0
  163. package/dist/utils/validation.d.ts.map +1 -0
  164. package/dist/utils/validation.js +17 -0
  165. package/dist/utils/validation.js.map +1 -0
  166. package/package.json +45 -0
@@ -0,0 +1,101 @@
1
+ import { createInterface } from 'node:readline';
2
+ import { Command } from 'commander';
3
+ import { KlaroApi, KlaroApiError } from '../lib/api.js';
4
+ import { readConfig, writeConfig } from '../lib/config.js';
5
+ async function prompt(question, hidden = false) {
6
+ if (hidden && process.stdin.isTTY) {
7
+ return new Promise((resolve) => {
8
+ process.stdout.write(question);
9
+ let input = '';
10
+ process.stdin.setRawMode(true);
11
+ process.stdin.resume();
12
+ process.stdin.setEncoding('utf8');
13
+ const onData = (char) => {
14
+ if (char === '\n' || char === '\r' || char === '\u0004') {
15
+ process.stdin.setRawMode(false);
16
+ process.stdin.pause();
17
+ process.stdin.removeListener('data', onData);
18
+ process.stdout.write('\n');
19
+ resolve(input);
20
+ }
21
+ else if (char === '\u0003') {
22
+ process.stdin.setRawMode(false);
23
+ process.exit(1);
24
+ }
25
+ else if (char === '\u007F' || char === '\b') {
26
+ if (input.length > 0) {
27
+ input = input.slice(0, -1);
28
+ process.stdout.write('\b \b');
29
+ }
30
+ }
31
+ else {
32
+ input += char;
33
+ process.stdout.write('*');
34
+ }
35
+ };
36
+ process.stdin.on('data', onData);
37
+ });
38
+ }
39
+ const rl = createInterface({
40
+ input: process.stdin,
41
+ output: process.stdout,
42
+ });
43
+ return new Promise((resolve) => {
44
+ rl.question(question, (answer) => {
45
+ rl.close();
46
+ resolve(answer);
47
+ });
48
+ });
49
+ }
50
+ export function credentialsFromEnv() {
51
+ const email = process.env.KLARO_LOGIN;
52
+ const password = process.env.KLARO_PASSWORD;
53
+ if (!email || !password) {
54
+ console.error('KLARO_LOGIN and KLARO_PASSWORD environment variables are required when using --env.');
55
+ process.exit(1);
56
+ }
57
+ return { email, password };
58
+ }
59
+ async function loginAction(options) {
60
+ let email;
61
+ let password;
62
+ if (options.env) {
63
+ ({ email, password } = credentialsFromEnv());
64
+ }
65
+ else {
66
+ email = await prompt('Email: ');
67
+ password = await prompt('Password: ', true);
68
+ }
69
+ if (!email || !password) {
70
+ console.error('Email and password are required.');
71
+ process.exit(1);
72
+ }
73
+ try {
74
+ console.log('Logging in...');
75
+ const api = new KlaroApi('app'); // subdomain not needed for login
76
+ const result = await api.login(email, password);
77
+ const config = readConfig();
78
+ config.token = result.access_token;
79
+ config.email = email;
80
+ writeConfig(config);
81
+ const expiresInDays = Math.round(result.expires_in / 86400);
82
+ console.log(`Successfully logged in as ${email}`);
83
+ console.log(`Token expires in ${expiresInDays} days`);
84
+ }
85
+ catch (error) {
86
+ if (error instanceof KlaroApiError) {
87
+ console.error(`Login failed: ${error.message}`);
88
+ }
89
+ else {
90
+ console.error('Login failed: An unexpected error occurred');
91
+ }
92
+ process.exit(1);
93
+ }
94
+ }
95
+ export function createLoginCommand() {
96
+ return new Command('login')
97
+ .description('Login to Klaro Cards')
98
+ .option('--env', 'Read credentials from KLARO_LOGIN and KLARO_PASSWORD environment variables')
99
+ .action(loginAction);
100
+ }
101
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createLogoutCommand(): Command;
3
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,wBAAgB,mBAAmB,IAAI,OAAO,CAI7C"}
@@ -0,0 +1,34 @@
1
+ import { Command } from 'commander';
2
+ import { KlaroApi, KlaroApiError } from '../lib/api.js';
3
+ import { readConfig, writeConfig, getToken } from '../lib/config.js';
4
+ async function logoutAction() {
5
+ const token = getToken();
6
+ if (!token) {
7
+ console.log('Not logged in.');
8
+ return;
9
+ }
10
+ try {
11
+ const api = new KlaroApi('app', token);
12
+ await api.logout();
13
+ }
14
+ catch (error) {
15
+ if (error instanceof KlaroApiError) {
16
+ console.error(`Failed to invalidate token: ${error.message}`);
17
+ }
18
+ else {
19
+ console.error('Failed to invalidate token: An unexpected error occurred');
20
+ }
21
+ // Still clear local config even if server call fails
22
+ }
23
+ const config = readConfig();
24
+ delete config.token;
25
+ delete config.email;
26
+ writeConfig(config);
27
+ console.log('Logged out successfully.');
28
+ }
29
+ export function createLogoutCommand() {
30
+ return new Command('logout')
31
+ .description('Logout from Klaro Cards')
32
+ .action(logoutAction);
33
+ }
34
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAErE,KAAK,UAAU,YAAY;IACzB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC5E,CAAC;QACD,qDAAqD;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,KAAK,CAAC;IACpB,OAAO,MAAM,CAAC,KAAK,CAAC;IACpB,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createLsCommand(): Command;
3
+ //# sourceMappingURL=ls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2LpC,wBAAgB,eAAe,IAAI,OAAO,CAUzC"}
@@ -0,0 +1,174 @@
1
+ import chalk from 'chalk';
2
+ import { Command } from 'commander';
3
+ import { createClient, KlaroApiError } from '../lib/api.js';
4
+ import { requireProject, requireToken } from '../lib/config.js';
5
+ import { resolveBoard, resolveDims } from '../lib/defaults.js';
6
+ import { parseDimensions } from '../utils/dimensions.js';
7
+ import { formatDimensionValues } from '../utils/format.js';
8
+ import { printTable } from '../utils/table.js';
9
+ async function lsCardsAction(options, command) {
10
+ try {
11
+ const globalOpts = command.optsWithGlobals();
12
+ const project = requireProject(globalOpts.project);
13
+ const token = requireToken();
14
+ const board = resolveBoard(globalOpts.board ?? options.board, project);
15
+ const dims = resolveDims(globalOpts.dims ?? options.dims, project);
16
+ const limit = options.limit ? parseInt(options.limit, 10) : 20;
17
+ const filters = parseDimensions(options.filter);
18
+ const api = createClient(project, token);
19
+ const stories = await api.listStories(board, { limit, filters });
20
+ if (stories.length === 0) {
21
+ console.log(`No cards found in board ${board}.`);
22
+ const dimExample = dims
23
+ ? ' ' + dims.split(',').map(d => `${d.trim()}=value`).join(' ')
24
+ : '';
25
+ console.log(chalk.cyan(`\n💡 Hint: klaro create "My first card"${dimExample}`));
26
+ return;
27
+ }
28
+ // Default columns plus any user-specified dims columns
29
+ const columns = ['identifier', 'title'];
30
+ if (dims) {
31
+ columns.push(...dims.split(',').map(d => d.trim()));
32
+ }
33
+ printTable(stories, columns);
34
+ console.log(`\nShowing ${stories.length} card(s) in board ${board}`);
35
+ }
36
+ catch (error) {
37
+ if (error instanceof KlaroApiError) {
38
+ console.error(`Error: ${error.message}`);
39
+ }
40
+ else if (error instanceof Error) {
41
+ console.error(`Error: ${error.message}`);
42
+ }
43
+ else {
44
+ console.error('An unexpected error occurred');
45
+ }
46
+ process.exit(1);
47
+ }
48
+ }
49
+ async function lsProjectsAction(_options, command) {
50
+ try {
51
+ const globalOpts = command.optsWithGlobals();
52
+ const project = requireProject(globalOpts.project);
53
+ const token = requireToken();
54
+ const api = createClient(project, token);
55
+ const projects = await api.listProjects();
56
+ if (projects.length === 0) {
57
+ console.log('No projects found.');
58
+ return;
59
+ }
60
+ const columns = ['subdomain', 'name'];
61
+ printTable(projects, columns);
62
+ console.log(`\nShowing ${projects.length} project(s)`);
63
+ }
64
+ catch (error) {
65
+ if (error instanceof KlaroApiError) {
66
+ console.error(`Error: ${error.message}`);
67
+ }
68
+ else if (error instanceof Error) {
69
+ console.error(`Error: ${error.message}`);
70
+ }
71
+ else {
72
+ console.error('An unexpected error occurred');
73
+ }
74
+ process.exit(1);
75
+ }
76
+ }
77
+ async function lsBoardsAction(_options, command) {
78
+ try {
79
+ const globalOpts = command.optsWithGlobals();
80
+ const project = requireProject(globalOpts.project);
81
+ const token = requireToken();
82
+ const api = createClient(project, token);
83
+ const boards = await api.listBoards();
84
+ if (boards.length === 0) {
85
+ console.log('No boards found.');
86
+ return;
87
+ }
88
+ const columns = ['location', 'label'];
89
+ printTable(boards, columns);
90
+ console.log(`\nShowing ${boards.length} board(s)`);
91
+ }
92
+ catch (error) {
93
+ if (error instanceof KlaroApiError) {
94
+ console.error(`Error: ${error.message}`);
95
+ }
96
+ else if (error instanceof Error) {
97
+ console.error(`Error: ${error.message}`);
98
+ }
99
+ else {
100
+ console.error('An unexpected error occurred');
101
+ }
102
+ process.exit(1);
103
+ }
104
+ }
105
+ const HIDDEN_DIMENSIONS = ['identifier', 'title', 'specification'];
106
+ async function lsDimensionsAction(_options, command) {
107
+ try {
108
+ const globalOpts = command.optsWithGlobals();
109
+ const project = requireProject(globalOpts.project);
110
+ const token = requireToken();
111
+ const api = createClient(project, token);
112
+ const allDimensions = await api.listDimensions();
113
+ const dimensions = allDimensions.filter(d => !HIDDEN_DIMENSIONS.includes(d.code));
114
+ if (dimensions.length === 0) {
115
+ console.log('No dimensions found.');
116
+ return;
117
+ }
118
+ // Format values for display
119
+ const dimensionsWithValues = dimensions.map(dim => ({
120
+ ...dim,
121
+ values: formatDimensionValues(dim.values),
122
+ }));
123
+ const columns = ['code', 'name', 'datatype', 'values'];
124
+ printTable(dimensionsWithValues, columns);
125
+ console.log(`\nShowing ${dimensions.length} dimension(s)`);
126
+ }
127
+ catch (error) {
128
+ if (error instanceof KlaroApiError) {
129
+ console.error(`Error: ${error.message}`);
130
+ }
131
+ else if (error instanceof Error) {
132
+ console.error(`Error: ${error.message}`);
133
+ }
134
+ else {
135
+ console.error('An unexpected error occurred');
136
+ }
137
+ process.exit(1);
138
+ }
139
+ }
140
+ function createCardsSubcommand(isDefault = false) {
141
+ const cmd = new Command('cards')
142
+ .description('List cards in a board' + (isDefault ? ' (default)' : ''))
143
+ .option('-b, --board <board>', 'Board identifier (default: "all")')
144
+ .option('-l, --limit <number>', 'Maximum number of cards to show', '20')
145
+ .option('--dims <columns>', 'Dimensions to include (comma-separated)')
146
+ .option('-f, --filter <key=value>', 'Filter cards (can be used multiple times)', (value, previous) => previous.concat([value]), [])
147
+ .action(lsCardsAction);
148
+ return cmd;
149
+ }
150
+ function createProjectsSubcommand() {
151
+ return new Command('projects')
152
+ .description('List projects')
153
+ .action(lsProjectsAction);
154
+ }
155
+ function createBoardsSubcommand() {
156
+ return new Command('boards')
157
+ .description('List boards')
158
+ .action(lsBoardsAction);
159
+ }
160
+ function createDimensionsSubcommand() {
161
+ return new Command('dimensions')
162
+ .description('List dimensions')
163
+ .action(lsDimensionsAction);
164
+ }
165
+ export function createLsCommand() {
166
+ const cmd = new Command('ls')
167
+ .description('List cards, projects, boards, or dimensions');
168
+ cmd.addCommand(createCardsSubcommand(true), { isDefault: true });
169
+ cmd.addCommand(createProjectsSubcommand());
170
+ cmd.addCommand(createBoardsSubcommand());
171
+ cmd.addCommand(createDimensionsSubcommand());
172
+ return cmd;
173
+ }
174
+ //# sourceMappingURL=ls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createReadCommand(): Command;
3
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgEpC,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C"}
@@ -0,0 +1,64 @@
1
+ import { Command } from 'commander';
2
+ import { createClient, KlaroApiError } from '../lib/api.js';
3
+ import { requireProject, requireToken } from '../lib/config.js';
4
+ import { resolveBoard, resolveDims } from '../lib/defaults.js';
5
+ import { renderMarkdownWithFrontmatter } from '../utils/markdown.js';
6
+ import { formatStoryMarkdown } from '../utils/story-markdown.js';
7
+ async function readAction(identifiers, options, command) {
8
+ try {
9
+ if (identifiers.length === 0) {
10
+ console.error('Error: At least one identifier is required');
11
+ process.exit(1);
12
+ return;
13
+ }
14
+ const numericIds = identifiers.map(id => {
15
+ const num = parseInt(id, 10);
16
+ if (isNaN(num)) {
17
+ throw new Error(`Invalid identifier "${id}": must be a number`);
18
+ }
19
+ return num;
20
+ });
21
+ const globalOpts = command.optsWithGlobals();
22
+ const project = requireProject(globalOpts.project);
23
+ const token = requireToken();
24
+ const board = resolveBoard(globalOpts.board ?? options.board, project);
25
+ const api = createClient(project, token);
26
+ const stories = await api.getStories(board, numericIds);
27
+ if (stories.length === 0) {
28
+ console.error('No cards found with the specified identifier(s)');
29
+ process.exit(1);
30
+ return;
31
+ }
32
+ // Output each story as markdown
33
+ const dimsOpt = resolveDims(globalOpts.dims ?? options.dims, project);
34
+ const dimensions = dimsOpt?.split(',').map((d) => d.trim());
35
+ const parts = stories.map(s => {
36
+ const md = formatStoryMarkdown(s, dimensions);
37
+ return renderMarkdownWithFrontmatter(md, options.raw ?? false);
38
+ });
39
+ const output = parts.join('\n---\n\n');
40
+ process.stdout.write(output);
41
+ }
42
+ catch (error) {
43
+ if (error instanceof KlaroApiError) {
44
+ console.error(`Error: ${error.message}`);
45
+ }
46
+ else if (error instanceof Error) {
47
+ console.error(`Error: ${error.message}`);
48
+ }
49
+ else {
50
+ console.error('An unexpected error occurred');
51
+ }
52
+ process.exit(1);
53
+ }
54
+ }
55
+ export function createReadCommand() {
56
+ return new Command('read')
57
+ .description('Read one or more cards and display as markdown')
58
+ .argument('<identifiers...>', 'Card identifier(s) to read')
59
+ .option('-b, --board <board>', 'Board identifier (default: "all")')
60
+ .option('--dims <dimensions>', 'Dimensions to include (comma-separated)')
61
+ .option('--raw', 'Output raw markdown without highlighting')
62
+ .action(readAction);
63
+ }
64
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createSetCommand(): Command;
3
+ //# sourceMappingURL=set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/commands/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8DpC,wBAAgB,gBAAgB,IAAI,OAAO,CAM1C"}
@@ -0,0 +1,61 @@
1
+ import { Command } from 'commander';
2
+ import { createClient, KlaroApiError } from '../lib/api.js';
3
+ import { requireProject, requireToken } from '../lib/config.js';
4
+ import { resolveBoard } from '../lib/defaults.js';
5
+ import { splitArgs, parseDimensions } from '../utils/dimensions.js';
6
+ import { printTable } from '../utils/table.js';
7
+ async function setAction(args, options, command) {
8
+ try {
9
+ // Split args into identifiers and key=value dimensions
10
+ const { regularArgs, dimensionArgs } = splitArgs(args);
11
+ if (regularArgs.length === 0) {
12
+ console.error('Error: At least one identifier is required');
13
+ process.exit(1);
14
+ return;
15
+ }
16
+ const numericIds = regularArgs.map(id => {
17
+ const num = parseInt(id, 10);
18
+ if (isNaN(num)) {
19
+ throw new Error(`Invalid identifier "${id}": must be a number`);
20
+ }
21
+ return num;
22
+ });
23
+ const dimensions = parseDimensions(dimensionArgs);
24
+ if (Object.keys(dimensions).length === 0) {
25
+ console.error('Error: At least one dimension is required (key=value)');
26
+ process.exit(1);
27
+ return;
28
+ }
29
+ const globalOpts = command.optsWithGlobals();
30
+ const project = requireProject(globalOpts.project);
31
+ const token = requireToken();
32
+ const board = resolveBoard(globalOpts.board ?? options.board, project);
33
+ const api = createClient(project, token);
34
+ const updates = numericIds.map(identifier => ({ identifier, ...dimensions }));
35
+ const stories = await api.updateStories(board, updates);
36
+ if (stories.length > 0) {
37
+ const columns = ['identifier', 'title', ...Object.keys(dimensions)];
38
+ printTable(stories, columns);
39
+ }
40
+ }
41
+ catch (error) {
42
+ if (error instanceof KlaroApiError) {
43
+ console.error(`Error: ${error.message}`);
44
+ }
45
+ else if (error instanceof Error) {
46
+ console.error(`Error: ${error.message}`);
47
+ }
48
+ else {
49
+ console.error('An unexpected error occurred');
50
+ }
51
+ process.exit(1);
52
+ }
53
+ }
54
+ export function createSetCommand() {
55
+ return new Command('set')
56
+ .description('Update one or more cards by identifier')
57
+ .argument('<args...>', 'Card identifier(s) followed by key=value dimension(s)')
58
+ .option('-b, --board <board>', 'Board identifier (default: "all")')
59
+ .action(setAction);
60
+ }
61
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/commands/set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createSyncCommand(): Command;
3
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+KpC,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C"}