@workdynamite/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 (54) hide show
  1. package/README.md +39 -0
  2. package/bin/workdynamite.js +3 -0
  3. package/dist/commands/config.d.ts +3 -0
  4. package/dist/commands/config.d.ts.map +1 -0
  5. package/dist/commands/config.js +62 -0
  6. package/dist/commands/config.js.map +1 -0
  7. package/dist/commands/login.d.ts +3 -0
  8. package/dist/commands/login.d.ts.map +1 -0
  9. package/dist/commands/login.js +99 -0
  10. package/dist/commands/login.js.map +1 -0
  11. package/dist/commands/logout.d.ts +3 -0
  12. package/dist/commands/logout.d.ts.map +1 -0
  13. package/dist/commands/logout.js +24 -0
  14. package/dist/commands/logout.js.map +1 -0
  15. package/dist/commands/pick.d.ts +3 -0
  16. package/dist/commands/pick.d.ts.map +1 -0
  17. package/dist/commands/pick.js +81 -0
  18. package/dist/commands/pick.js.map +1 -0
  19. package/dist/commands/projects.d.ts +3 -0
  20. package/dist/commands/projects.d.ts.map +1 -0
  21. package/dist/commands/projects.js +119 -0
  22. package/dist/commands/projects.js.map +1 -0
  23. package/dist/commands/status.d.ts +3 -0
  24. package/dist/commands/status.d.ts.map +1 -0
  25. package/dist/commands/status.js +80 -0
  26. package/dist/commands/status.js.map +1 -0
  27. package/dist/commands/tasks.d.ts +3 -0
  28. package/dist/commands/tasks.d.ts.map +1 -0
  29. package/dist/commands/tasks.js +102 -0
  30. package/dist/commands/tasks.js.map +1 -0
  31. package/dist/index.d.ts +2 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +51 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/lib/api.d.ts +70 -0
  36. package/dist/lib/api.d.ts.map +1 -0
  37. package/dist/lib/api.js +71 -0
  38. package/dist/lib/api.js.map +1 -0
  39. package/dist/lib/config.d.ts +20 -0
  40. package/dist/lib/config.d.ts.map +1 -0
  41. package/dist/lib/config.js +55 -0
  42. package/dist/lib/config.js.map +1 -0
  43. package/package.json +47 -0
  44. package/src/commands/config.ts +69 -0
  45. package/src/commands/login.ts +116 -0
  46. package/src/commands/logout.ts +21 -0
  47. package/src/commands/pick.ts +80 -0
  48. package/src/commands/projects.ts +139 -0
  49. package/src/commands/status.ts +87 -0
  50. package/src/commands/tasks.ts +112 -0
  51. package/src/index.ts +50 -0
  52. package/src/lib/api.ts +128 -0
  53. package/src/lib/config.ts +61 -0
  54. package/tsconfig.json +20 -0
package/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # WorkDynamite CLI
2
+
3
+ A command-line interface for managing WorkDynamite tasks directly from your terminal.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ # From the cli directory
9
+ cd cli
10
+ npm install
11
+ npm run build
12
+ npm link
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ```bash
18
+ # Login
19
+ workdynamite login
20
+
21
+ # List tasks
22
+ workdynamite tasks
23
+
24
+ # Pick a task reference for commits
25
+ workdynamite pick 42
26
+
27
+ # Check status
28
+ workdynamite status
29
+ ```
30
+
31
+ ## Commands
32
+
33
+ - `login` - Authenticate with WorkDynamite
34
+ - `logout` - Sign out
35
+ - `tasks` - List your assigned tasks
36
+ - `pick <number>` - Copy task reference to clipboard
37
+ - `projects` - List and manage projects
38
+ - `status` - Show current status
39
+ - `config` - Manage CLI configuration
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ import('../dist/index.js');
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const configCommand: Command;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SACgB,CAAC"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.configCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const config_js_1 = require("../lib/config.js");
11
+ const api_js_1 = require("../lib/api.js");
12
+ exports.configCommand = new commander_1.Command('config')
13
+ .description('Manage CLI configuration');
14
+ exports.configCommand
15
+ .command('set-token <token>')
16
+ .description('Set the API token manually')
17
+ .action(async (token) => {
18
+ if (!token.startsWith('wk_')) {
19
+ console.log(chalk_1.default.yellow('Warning: Token should start with "wk_"'));
20
+ }
21
+ const spinner = (0, ora_1.default)('Validating token...').start();
22
+ // Temporarily set the token to validate it
23
+ (0, config_js_1.setToken)(token);
24
+ const { data, error } = await (0, api_js_1.getMe)();
25
+ if (error) {
26
+ // Clear invalid token
27
+ (0, config_js_1.clearConfig)();
28
+ spinner.fail(chalk_1.default.red(`Invalid token: ${error}`));
29
+ return;
30
+ }
31
+ (0, config_js_1.setUser)(data.user);
32
+ spinner.succeed(chalk_1.default.green(`Authenticated as ${data.user.email}`));
33
+ console.log(chalk_1.default.dim('\nYou can now use WorkDynamite CLI commands.'));
34
+ console.log(chalk_1.default.dim('Try "workdynamite status" or "workdynamite tasks".\n'));
35
+ });
36
+ exports.configCommand
37
+ .command('show')
38
+ .description('Show current configuration')
39
+ .action(() => {
40
+ const config = (0, config_js_1.getConfig)();
41
+ console.log(chalk_1.default.bold('\nāš™ļø Configuration\n'));
42
+ console.log(chalk_1.default.dim('─'.repeat(40)));
43
+ console.log(` ${chalk_1.default.dim('API URL:')} ${config.api_url}`);
44
+ console.log(` ${chalk_1.default.dim('Token:')} ${config.token ? `${config.token.substring(0, 12)}...` : chalk_1.default.yellow('(not set)')}`);
45
+ console.log(` ${chalk_1.default.dim('User:')} ${config.user?.email || chalk_1.default.yellow('(not logged in)')}`);
46
+ console.log(` ${chalk_1.default.dim('Project:')} ${config.default_project || chalk_1.default.dim('(all projects)')}`);
47
+ console.log(chalk_1.default.dim('─'.repeat(40)));
48
+ console.log('');
49
+ });
50
+ exports.configCommand
51
+ .command('clear')
52
+ .description('Clear all stored configuration')
53
+ .action(() => {
54
+ if (!(0, config_js_1.isAuthenticated)()) {
55
+ console.log(chalk_1.default.yellow('No configuration to clear.'));
56
+ return;
57
+ }
58
+ (0, config_js_1.clearConfig)();
59
+ console.log(chalk_1.default.green('āœ“ Configuration cleared.'));
60
+ console.log(chalk_1.default.dim('Run "workdynamite login" to authenticate again.'));
61
+ });
62
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const loginCommand: Command;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,YAAY,SAwGrB,CAAC"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loginCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const open_1 = __importDefault(require("open"));
11
+ const api_js_1 = require("../lib/api.js");
12
+ const config_js_1 = require("../lib/config.js");
13
+ exports.loginCommand = new commander_1.Command('login')
14
+ .description('Authenticate with WorkDynamite')
15
+ .option('--token <token>', 'Use an existing API token instead of browser auth')
16
+ .action(async (options) => {
17
+ // Check if already authenticated
18
+ if ((0, config_js_1.isAuthenticated)()) {
19
+ const config = (0, config_js_1.getConfig)();
20
+ console.log(chalk_1.default.yellow(`Already logged in as ${config.user?.email}`));
21
+ console.log(chalk_1.default.dim('Run "workdynamite logout" to sign out first.'));
22
+ return;
23
+ }
24
+ // If token provided directly, use it
25
+ if (options.token) {
26
+ const spinner = (0, ora_1.default)('Validating token...').start();
27
+ (0, config_js_1.setToken)(options.token);
28
+ const { data, error } = await (0, api_js_1.getMe)();
29
+ if (error) {
30
+ (0, config_js_1.setToken)('');
31
+ spinner.fail(chalk_1.default.red(`Invalid token: ${error}`));
32
+ return;
33
+ }
34
+ (0, config_js_1.setUser)(data.user);
35
+ spinner.succeed(chalk_1.default.green(`Authenticated as ${data.user.email}`));
36
+ return;
37
+ }
38
+ // Start device authorization flow
39
+ console.log(chalk_1.default.bold('\nšŸš€ WorkDynamite CLI Login\n'));
40
+ const initSpinner = (0, ora_1.default)('Initializing login...').start();
41
+ const { data: initData, error: initError } = await (0, api_js_1.initLogin)();
42
+ if (initError) {
43
+ initSpinner.fail(chalk_1.default.red(`Failed to start login: ${initError}`));
44
+ return;
45
+ }
46
+ initSpinner.succeed('Login initialized');
47
+ const { device_code, user_code, verification_uri_complete } = initData;
48
+ console.log('\n' + chalk_1.default.bold('To complete login:'));
49
+ console.log(chalk_1.default.dim('─────────────────────────────────────'));
50
+ console.log(`\n 1. Open this URL in your browser:\n`);
51
+ console.log(` ${chalk_1.default.cyan.underline(verification_uri_complete)}\n`);
52
+ console.log(` 2. Enter this code if prompted:\n`);
53
+ console.log(` ${chalk_1.default.bold.yellow(user_code)}\n`);
54
+ console.log(chalk_1.default.dim('─────────────────────────────────────\n'));
55
+ // Try to open browser automatically
56
+ try {
57
+ await (0, open_1.default)(verification_uri_complete);
58
+ console.log(chalk_1.default.dim('(Browser opened automatically)\n'));
59
+ }
60
+ catch {
61
+ console.log(chalk_1.default.dim('(Open the URL manually)\n'));
62
+ }
63
+ // Poll for authorization
64
+ const pollSpinner = (0, ora_1.default)('Waiting for authorization...').start();
65
+ const maxAttempts = 60; // 5 minutes with 5-second intervals
66
+ let attempts = 0;
67
+ while (attempts < maxAttempts) {
68
+ await sleep(5000); // Wait 5 seconds between polls
69
+ attempts++;
70
+ const { data: pollData, error: pollError } = await (0, api_js_1.pollLogin)(device_code);
71
+ if (pollError === 'authorization_pending') {
72
+ pollSpinner.text = `Waiting for authorization... (${Math.floor((maxAttempts - attempts) * 5 / 60)}m remaining)`;
73
+ continue;
74
+ }
75
+ if (pollError === 'expired_token') {
76
+ pollSpinner.fail(chalk_1.default.red('Authorization expired. Please run login again.'));
77
+ return;
78
+ }
79
+ if (pollError) {
80
+ pollSpinner.fail(chalk_1.default.red(`Authorization failed: ${pollError}`));
81
+ return;
82
+ }
83
+ if (pollData) {
84
+ // Authorization successful - but we need the token from the web UI
85
+ pollSpinner.succeed(chalk_1.default.green('Authorization complete!'));
86
+ console.log(chalk_1.default.yellow('\nāš ļø Please copy the API token shown in your browser.'));
87
+ console.log(chalk_1.default.dim('Then run: workdynamite config set-token <your-token>\n'));
88
+ if (pollData.user) {
89
+ console.log(chalk_1.default.dim(`Authorized for: ${pollData.user.email}`));
90
+ }
91
+ return;
92
+ }
93
+ }
94
+ pollSpinner.fail(chalk_1.default.red('Authorization timed out. Please try again.'));
95
+ });
96
+ function sleep(ms) {
97
+ return new Promise(resolve => setTimeout(resolve, ms));
98
+ }
99
+ //# 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 const logoutCommand: 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;AAIpC,eAAO,MAAM,aAAa,SAgBtB,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.logoutCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const config_js_1 = require("../lib/config.js");
10
+ exports.logoutCommand = new commander_1.Command('logout')
11
+ .description('Sign out of WorkDynamite')
12
+ .action(async () => {
13
+ if (!(0, config_js_1.isAuthenticated)()) {
14
+ console.log(chalk_1.default.yellow('Not currently logged in.'));
15
+ return;
16
+ }
17
+ const config = (0, config_js_1.getConfig)();
18
+ const email = config.user?.email || 'unknown';
19
+ (0, config_js_1.clearConfig)();
20
+ console.log(chalk_1.default.green(`āœ“ Logged out from ${email}`));
21
+ console.log(chalk_1.default.dim('Your API token has been removed from local storage.'));
22
+ console.log(chalk_1.default.dim('To revoke the token entirely, visit Workspace Settings in the web app.'));
23
+ });
24
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,gDAA2E;AAE9D,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC,IAAA,2BAAe,GAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,SAAS,CAAC;IAE9C,IAAA,uBAAW,GAAE,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC,CAAC;AACnG,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const pickCommand: Command;
3
+ //# sourceMappingURL=pick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick.d.ts","sourceRoot":"","sources":["../../src/commands/pick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,WAAW,SAwEpB,CAAC"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.pickCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const clipboardy_1 = __importDefault(require("clipboardy"));
11
+ const api_js_1 = require("../lib/api.js");
12
+ const config_js_1 = require("../lib/config.js");
13
+ exports.pickCommand = new commander_1.Command('pick')
14
+ .description('Copy a task reference to clipboard for commit messages')
15
+ .argument('<number>', 'Task number to pick')
16
+ .option('-w, --wip', 'Use WIP prefix')
17
+ .option('-f, --fixes', 'Use Fixes prefix (default)')
18
+ .option('-c, --closes', 'Use Closes prefix')
19
+ .option('-r, --refs', 'Use Refs prefix')
20
+ .action(async (taskNumber, options) => {
21
+ if (!(0, config_js_1.isAuthenticated)()) {
22
+ console.log(chalk_1.default.red('Not logged in. Run "workdynamite login" first.'));
23
+ return;
24
+ }
25
+ const spinner = (0, ora_1.default)('Finding task...').start();
26
+ const config = (0, config_js_1.getConfig)();
27
+ // Fetch tasks to find the one matching the number
28
+ const { data, error } = await (0, api_js_1.getTasks)({
29
+ project: config.default_project || undefined,
30
+ limit: 100,
31
+ });
32
+ if (error) {
33
+ spinner.fail(chalk_1.default.red(`Failed to fetch tasks: ${error}`));
34
+ return;
35
+ }
36
+ const task = data.tasks.find(t => t.number === parseInt(taskNumber, 10));
37
+ if (!task) {
38
+ spinner.fail(chalk_1.default.red(`Task #${taskNumber} not found in your assigned tasks.`));
39
+ console.log(chalk_1.default.dim('Make sure you\'re looking at the right project.'));
40
+ console.log(chalk_1.default.dim('Run "workdynamite tasks" to see available tasks.'));
41
+ return;
42
+ }
43
+ // Determine which prefix to use
44
+ let refType = 'fixes';
45
+ if (options.wip)
46
+ refType = 'wip';
47
+ else if (options.closes)
48
+ refType = 'closes';
49
+ else if (options.refs)
50
+ refType = 'refs';
51
+ // else default to fixes
52
+ const reference = task.refs[refType];
53
+ try {
54
+ await clipboardy_1.default.write(reference);
55
+ spinner.succeed(chalk_1.default.green('Copied to clipboard!'));
56
+ console.log('\n' + chalk_1.default.dim('─'.repeat(50)));
57
+ console.log('\n ' + chalk_1.default.bold(reference));
58
+ console.log('\n' + chalk_1.default.dim('─'.repeat(50)));
59
+ console.log(chalk_1.default.dim('\nPaste this in your commit message or PR title.'));
60
+ console.log(chalk_1.default.dim('The webhook will automatically update the task.\n'));
61
+ // Show other options
62
+ console.log(chalk_1.default.dim('Other formats:'));
63
+ if (refType !== 'wip')
64
+ console.log(chalk_1.default.dim(` -w, --wip → ${task.refs.wip}`));
65
+ if (refType !== 'fixes')
66
+ console.log(chalk_1.default.dim(` -f, --fixes → ${task.refs.fixes}`));
67
+ if (refType !== 'closes')
68
+ console.log(chalk_1.default.dim(` -c, --closes → ${task.refs.closes}`));
69
+ if (refType !== 'refs')
70
+ console.log(chalk_1.default.dim(` -r, --refs → ${task.refs.refs}`));
71
+ console.log('');
72
+ }
73
+ catch (clipboardError) {
74
+ spinner.warn(chalk_1.default.yellow('Could not copy to clipboard.'));
75
+ console.log('\n' + chalk_1.default.dim('─'.repeat(50)));
76
+ console.log('\n ' + chalk_1.default.bold(reference));
77
+ console.log('\n' + chalk_1.default.dim('─'.repeat(50)));
78
+ console.log(chalk_1.default.dim('\nCopy the text above manually.\n'));
79
+ }
80
+ });
81
+ //# sourceMappingURL=pick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick.js","sourceRoot":"","sources":["../../src/commands/pick.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const projectsCommand: Command;
3
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,eAAe,SAmFxB,CAAC"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.projectsCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const api_js_1 = require("../lib/api.js");
12
+ const config_js_1 = require("../lib/config.js");
13
+ exports.projectsCommand = new commander_1.Command('projects')
14
+ .description('List and manage projects')
15
+ .option('--set', 'Interactively set the default project')
16
+ .action(async (options) => {
17
+ if (!(0, config_js_1.isAuthenticated)()) {
18
+ console.log(chalk_1.default.red('Not logged in. Run "workdynamite login" first.'));
19
+ return;
20
+ }
21
+ const spinner = (0, ora_1.default)('Fetching projects...').start();
22
+ const { data, error } = await (0, api_js_1.getProjects)();
23
+ if (error) {
24
+ spinner.fail(chalk_1.default.red(`Failed to fetch projects: ${error}`));
25
+ return;
26
+ }
27
+ spinner.stop();
28
+ const projects = data.projects;
29
+ const config = (0, config_js_1.getConfig)();
30
+ if (projects.length === 0) {
31
+ console.log(chalk_1.default.yellow('\nNo projects found.'));
32
+ console.log(chalk_1.default.dim('Create a project in the web app to see it here.'));
33
+ return;
34
+ }
35
+ if (options.set) {
36
+ // Interactive project selection
37
+ const { selectedProject } = await inquirer_1.default.prompt([
38
+ {
39
+ type: 'list',
40
+ name: 'selectedProject',
41
+ message: 'Select default project:',
42
+ choices: [
43
+ { name: '(None - show all projects)', value: null },
44
+ ...projects.map(p => ({
45
+ name: `${p.name} (${p.status})`,
46
+ value: p.id,
47
+ })),
48
+ ],
49
+ },
50
+ ]);
51
+ (0, config_js_1.setDefaultProject)(selectedProject);
52
+ if (selectedProject) {
53
+ const project = projects.find(p => p.id === selectedProject);
54
+ console.log(chalk_1.default.green(`\nāœ“ Default project set to: ${project?.name}`));
55
+ }
56
+ else {
57
+ console.log(chalk_1.default.green('\nāœ“ Default project cleared. Tasks from all projects will be shown.'));
58
+ }
59
+ return;
60
+ }
61
+ // List projects
62
+ console.log(chalk_1.default.bold('\nšŸ“ Your Projects\n'));
63
+ console.log(chalk_1.default.dim('─'.repeat(60)));
64
+ for (const project of projects) {
65
+ const isDefault = project.id === config.default_project;
66
+ const statusColor = getStatusColor(project.status);
67
+ console.log(` ${isDefault ? chalk_1.default.green('→') : ' '} ` +
68
+ `${chalk_1.default.bold(project.name.padEnd(30))} ` +
69
+ `${statusColor(project.status.padEnd(12))} ` +
70
+ `${chalk_1.default.dim(`${project.progress}%`)} ` +
71
+ `${chalk_1.default.dim(`[${project.role}]`)}`);
72
+ }
73
+ console.log(chalk_1.default.dim('─'.repeat(60)));
74
+ console.log(chalk_1.default.dim(`\n${projects.length} project(s)`));
75
+ if (config.default_project) {
76
+ const defaultProject = projects.find(p => p.id === config.default_project);
77
+ console.log(chalk_1.default.dim(`Default: ${defaultProject?.name || 'Unknown'}`));
78
+ }
79
+ console.log(chalk_1.default.dim('\nRun "workdynamite projects --set" to change the default project.\n'));
80
+ });
81
+ exports.projectsCommand
82
+ .command('set <name>')
83
+ .description('Set default project by name')
84
+ .action(async (name) => {
85
+ if (!(0, config_js_1.isAuthenticated)()) {
86
+ console.log(chalk_1.default.red('Not logged in. Run "workdynamite login" first.'));
87
+ return;
88
+ }
89
+ const spinner = (0, ora_1.default)('Fetching projects...').start();
90
+ const { data, error } = await (0, api_js_1.getProjects)();
91
+ if (error) {
92
+ spinner.fail(chalk_1.default.red(`Failed to fetch projects: ${error}`));
93
+ return;
94
+ }
95
+ const project = data.projects.find(p => p.name.toLowerCase() === name.toLowerCase() || p.id === name);
96
+ if (!project) {
97
+ spinner.fail(chalk_1.default.red(`Project "${name}" not found.`));
98
+ console.log(chalk_1.default.dim('Run "workdynamite projects" to see available projects.'));
99
+ return;
100
+ }
101
+ (0, config_js_1.setDefaultProject)(project.id);
102
+ spinner.succeed(chalk_1.default.green(`Default project set to: ${project.name}`));
103
+ });
104
+ function getStatusColor(status) {
105
+ switch (status.toLowerCase()) {
106
+ case 'active':
107
+ case 'in_progress':
108
+ return chalk_1.default.green;
109
+ case 'planning':
110
+ return chalk_1.default.blue;
111
+ case 'on_hold':
112
+ return chalk_1.default.yellow;
113
+ case 'completed':
114
+ return chalk_1.default.gray;
115
+ default:
116
+ return chalk_1.default.white;
117
+ }
118
+ }
119
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAsB;AACtB,wDAAgC;AAChC,0CAA4C;AAC5C,gDAAiF;AAEpE,QAAA,eAAe,GAAG,IAAI,mBAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,OAAO,EAAE,uCAAuC,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC,IAAA,2BAAe,GAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEpD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,oBAAW,GAAE,CAAC;IAE5C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,MAAM,QAAQ,GAAG,IAAK,CAAC,QAAQ,CAAC;IAChC,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;IAE3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,gCAAgC;QAChC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YAChD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,yBAAyB;gBAClC,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE;oBACnD,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACpB,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG;wBAC/B,KAAK,EAAE,CAAC,CAAC,EAAE;qBACZ,CAAC,CAAC;iBACJ;aACF;SACF,CAAC,CAAC;QAEH,IAAA,6BAAiB,EAAC,eAAe,CAAC,CAAC;QAEnC,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,eAAe,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,+BAA+B,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC,CAAC;QAClG,CAAC;QACD,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,eAAe,CAAC;QACxD,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEnD,OAAO,CAAC,GAAG,CACT,KAAK,SAAS,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;YAC1C,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG;YACzC,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG;YAC5C,GAAG,eAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,GAAG;YACvC,GAAG,eAAK,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CACpC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;IAE1D,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,eAAe,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,cAAc,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC;AAEL,uBAAe;KACZ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC,IAAA,2BAAe,GAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEpD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,oBAAW,GAAE,CAAC;IAE5C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAK,CAAC,QAAQ,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAClE,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;QACjF,OAAO;IACT,CAAC;IAED,IAAA,6BAAiB,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9B,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,2BAA2B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEL,SAAS,cAAc,CAAC,MAAc;IACpC,QAAQ,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,KAAK,QAAQ,CAAC;QACd,KAAK,aAAa;YAChB,OAAO,eAAK,CAAC,KAAK,CAAC;QACrB,KAAK,UAAU;YACb,OAAO,eAAK,CAAC,IAAI,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,eAAK,CAAC,MAAM,CAAC;QACtB,KAAK,WAAW;YACd,OAAO,eAAK,CAAC,IAAI,CAAC;QACpB;YACE,OAAO,eAAK,CAAC,KAAK,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const statusCommand: Command;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SAgFtB,CAAC"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.statusCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const api_js_1 = require("../lib/api.js");
11
+ const config_js_1 = require("../lib/config.js");
12
+ exports.statusCommand = new commander_1.Command('status')
13
+ .description('Show current login status and context')
14
+ .action(async () => {
15
+ const config = (0, config_js_1.getConfig)();
16
+ console.log(chalk_1.default.bold('\nšŸ”§ WorkDynamite CLI Status\n'));
17
+ console.log(chalk_1.default.dim('─'.repeat(50)));
18
+ if (!(0, config_js_1.isAuthenticated)()) {
19
+ console.log('\n ' + chalk_1.default.red('āœ—') + ' Not logged in');
20
+ console.log(chalk_1.default.dim('\n Run "workdynamite login" to authenticate.\n'));
21
+ return;
22
+ }
23
+ const spinner = (0, ora_1.default)('Fetching status...').start();
24
+ // Fetch user info
25
+ const { data: meData, error: meError } = await (0, api_js_1.getMe)();
26
+ if (meError) {
27
+ spinner.fail(chalk_1.default.red(`Failed to fetch status: ${meError}`));
28
+ return;
29
+ }
30
+ // Fetch projects and tasks count
31
+ const { data: projectsData } = await (0, api_js_1.getProjects)();
32
+ const { data: tasksData } = await (0, api_js_1.getTasks)({ limit: 100 });
33
+ spinner.stop();
34
+ const user = meData.user;
35
+ const projects = projectsData?.projects || [];
36
+ const tasks = tasksData?.tasks || [];
37
+ // Count tasks by state
38
+ const tasksByState = tasks.reduce((acc, task) => {
39
+ const state = task.state || 'unknown';
40
+ acc[state] = (acc[state] || 0) + 1;
41
+ return acc;
42
+ }, {});
43
+ console.log('\n ' + chalk_1.default.green('āœ“') + ' Logged in');
44
+ console.log('');
45
+ console.log(' ' + chalk_1.default.dim('User: ') + chalk_1.default.bold(user.name || user.email));
46
+ console.log(' ' + chalk_1.default.dim('Email: ') + user.email);
47
+ console.log(' ' + chalk_1.default.dim('Projects: ') + projects.length);
48
+ console.log('');
49
+ // Default project
50
+ if (config.default_project) {
51
+ const defaultProject = projects.find(p => p.id === config.default_project);
52
+ console.log(' ' + chalk_1.default.dim('Default Project: ') + chalk_1.default.cyan(defaultProject?.name || 'Unknown'));
53
+ }
54
+ else {
55
+ console.log(' ' + chalk_1.default.dim('Default Project: ') + chalk_1.default.yellow('(none set)'));
56
+ }
57
+ console.log('');
58
+ console.log(chalk_1.default.dim('─'.repeat(50)));
59
+ console.log(chalk_1.default.bold('\nšŸ“‹ Task Summary\n'));
60
+ if (tasks.length === 0) {
61
+ console.log(' ' + chalk_1.default.dim('No tasks assigned'));
62
+ }
63
+ else {
64
+ const inProgress = tasksByState['in_progress'] || 0;
65
+ const open = tasksByState['open'] || tasksByState['todo'] || 0;
66
+ const done = tasksByState['done'] || tasksByState['completed'] || 0;
67
+ console.log(' ' + chalk_1.default.yellow(`In Progress: ${inProgress}`));
68
+ console.log(' ' + chalk_1.default.blue(`Open: ${open}`));
69
+ console.log(' ' + chalk_1.default.green(`Done: ${done}`));
70
+ console.log(' ' + chalk_1.default.dim(`Total: ${tasks.length}`));
71
+ }
72
+ console.log('');
73
+ console.log(chalk_1.default.dim('─'.repeat(50)));
74
+ console.log(chalk_1.default.dim('\nQuick commands:'));
75
+ console.log(chalk_1.default.dim(' workdynamite tasks List your tasks'));
76
+ console.log(chalk_1.default.dim(' workdynamite pick <#> Copy task ref to clipboard'));
77
+ console.log(chalk_1.default.dim(' workdynamite projects List your projects'));
78
+ console.log('');
79
+ });
80
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const tasksCommand: Command;
3
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,YAAY,SAuErB,CAAC"}