tabstax-cli 0.1.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 (59) hide show
  1. package/README.md +110 -0
  2. package/bin/hey.js +2 -0
  3. package/dist/__tests__/api.test.d.ts +6 -0
  4. package/dist/__tests__/api.test.d.ts.map +1 -0
  5. package/dist/__tests__/api.test.js +146 -0
  6. package/dist/__tests__/api.test.js.map +1 -0
  7. package/dist/__tests__/config.test.d.ts +6 -0
  8. package/dist/__tests__/config.test.d.ts.map +1 -0
  9. package/dist/__tests__/config.test.js +78 -0
  10. package/dist/__tests__/config.test.js.map +1 -0
  11. package/dist/__tests__/output.test.d.ts +6 -0
  12. package/dist/__tests__/output.test.d.ts.map +1 -0
  13. package/dist/__tests__/output.test.js +104 -0
  14. package/dist/__tests__/output.test.js.map +1 -0
  15. package/dist/commands/add.d.ts +12 -0
  16. package/dist/commands/add.d.ts.map +1 -0
  17. package/dist/commands/add.js +76 -0
  18. package/dist/commands/add.js.map +1 -0
  19. package/dist/commands/auth.d.ts +11 -0
  20. package/dist/commands/auth.d.ts.map +1 -0
  21. package/dist/commands/auth.js +135 -0
  22. package/dist/commands/auth.js.map +1 -0
  23. package/dist/commands/context.d.ts +15 -0
  24. package/dist/commands/context.d.ts.map +1 -0
  25. package/dist/commands/context.js +75 -0
  26. package/dist/commands/context.js.map +1 -0
  27. package/dist/commands/done.d.ts +13 -0
  28. package/dist/commands/done.d.ts.map +1 -0
  29. package/dist/commands/done.js +76 -0
  30. package/dist/commands/done.js.map +1 -0
  31. package/dist/commands/edit.d.ts +27 -0
  32. package/dist/commands/edit.d.ts.map +1 -0
  33. package/dist/commands/edit.js +170 -0
  34. package/dist/commands/edit.js.map +1 -0
  35. package/dist/commands/list.d.ts +11 -0
  36. package/dist/commands/list.d.ts.map +1 -0
  37. package/dist/commands/list.js +112 -0
  38. package/dist/commands/list.js.map +1 -0
  39. package/dist/commands/remove.d.ts +9 -0
  40. package/dist/commands/remove.d.ts.map +1 -0
  41. package/dist/commands/remove.js +69 -0
  42. package/dist/commands/remove.js.map +1 -0
  43. package/dist/index.d.ts +7 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +113 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/lib/api.d.ts +69 -0
  48. package/dist/lib/api.d.ts.map +1 -0
  49. package/dist/lib/api.js +303 -0
  50. package/dist/lib/api.js.map +1 -0
  51. package/dist/lib/config.d.ts +51 -0
  52. package/dist/lib/config.d.ts.map +1 -0
  53. package/dist/lib/config.js +131 -0
  54. package/dist/lib/config.js.map +1 -0
  55. package/dist/lib/output.d.ts +37 -0
  56. package/dist/lib/output.d.ts.map +1 -0
  57. package/dist/lib/output.js +209 -0
  58. package/dist/lib/output.js.map +1 -0
  59. package/package.json +64 -0
@@ -0,0 +1,112 @@
1
+ /**
2
+ * List commands for Hey CLI
3
+ * hey ls, hey ls stax, hey ls <project>
4
+ */
5
+ import { config } from '../lib/config.js';
6
+ import { api } from '../lib/api.js';
7
+ import { printActions, printStaxList, printStaxExpanded, printError, printWarning, } from '../lib/output.js';
8
+ function requireAuth() {
9
+ if (!config.isAuthenticated()) {
10
+ printError('Not logged in. Run: hey login');
11
+ process.exit(1);
12
+ }
13
+ }
14
+ export async function list(target, options = {}) {
15
+ requireAuth();
16
+ try {
17
+ // hey ls stax - list all stax with priorities
18
+ if (target === 'stax') {
19
+ await listStax(options);
20
+ return;
21
+ }
22
+ // hey ls --all - expanded view
23
+ if (options.all && !target) {
24
+ await listExpanded();
25
+ return;
26
+ }
27
+ // hey ls <project> or hey ls (default project)
28
+ await listProject(target, options);
29
+ }
30
+ catch (error) {
31
+ const message = error instanceof Error ? error.message : 'Failed to list';
32
+ printError(message);
33
+ process.exit(1);
34
+ }
35
+ }
36
+ async function listStax(options) {
37
+ const staxList = await api.getStaxWithActions();
38
+ if (staxList.length === 0) {
39
+ printWarning('No stax found. Create one in the TabStax extension.');
40
+ return;
41
+ }
42
+ printStaxList(staxList);
43
+ }
44
+ async function listExpanded() {
45
+ const staxList = await api.getStaxWithActions();
46
+ if (staxList.length === 0) {
47
+ printWarning('No stax found.');
48
+ return;
49
+ }
50
+ printStaxExpanded(staxList, 3);
51
+ }
52
+ async function listProject(name, options = {}) {
53
+ const context = config.getContext();
54
+ const targetName = name ?? context.lastProject;
55
+ if (!targetName) {
56
+ printError('No project specified. Use: hey ls <project> or hey use <project>');
57
+ process.exit(1);
58
+ }
59
+ // Find the stax
60
+ const matches = await api.fuzzyFindStax(targetName);
61
+ if (matches.length === 0) {
62
+ printError(`Project "${targetName}" not found`);
63
+ const allStax = await api.getAllStax();
64
+ if (allStax.length > 0) {
65
+ console.log();
66
+ console.log('Available projects:');
67
+ allStax.slice(0, 5).forEach(s => console.log(` - ${s.name}`));
68
+ }
69
+ process.exit(1);
70
+ }
71
+ if (matches.length > 1) {
72
+ printWarning(`Multiple matches for "${targetName}":`);
73
+ matches.forEach(s => console.log(` - ${s.name}`));
74
+ console.log();
75
+ console.log('Be more specific or use: hey use <project>');
76
+ process.exit(1);
77
+ }
78
+ const stax = matches[0];
79
+ // Update last project
80
+ config.setLastProject(stax.name, stax.id);
81
+ // Get actions and breadcrumbs
82
+ const actions = await api.getActions(stax.id, false);
83
+ const attention = await api.getAttentionBlock(stax.id);
84
+ let breadcrumbs = [];
85
+ if (!options.done) {
86
+ // Show both actions and recent breadcrumbs
87
+ breadcrumbs = await api.getRecentBreadcrumbs(stax.id, config.getDisplay().showBreadcrumbsDays);
88
+ }
89
+ else {
90
+ // --done flag: show only breadcrumbs
91
+ breadcrumbs = await api.getRecentBreadcrumbs(stax.id, 30);
92
+ }
93
+ if (options.done) {
94
+ // Only breadcrumbs
95
+ console.log(`${stax.name} - Breadcrumbs`);
96
+ console.log();
97
+ if (breadcrumbs.length === 0) {
98
+ console.log(' No recent breadcrumbs');
99
+ }
100
+ else {
101
+ const { formatBreadcrumb } = await import('../lib/output.js');
102
+ breadcrumbs.forEach(bc => {
103
+ console.log(formatBreadcrumb(bc));
104
+ });
105
+ }
106
+ }
107
+ else {
108
+ // Normal view
109
+ printActions(stax, actions, breadcrumbs, attention?.priority);
110
+ }
111
+ }
112
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Remove command for Hey CLI
3
+ * hey rm <n> - removes action #n (does not mark as done)
4
+ */
5
+ export interface RemoveOptions {
6
+ project?: string;
7
+ }
8
+ export declare function remove(index: string, options?: RemoveOptions): Promise<void>;
9
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AASD,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmEtF"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Remove command for Hey CLI
3
+ * hey rm <n> - removes action #n (does not mark as done)
4
+ */
5
+ import { config } from '../lib/config.js';
6
+ import { api } from '../lib/api.js';
7
+ import { printSuccess, printError, printWarning, } from '../lib/output.js';
8
+ function requireAuth() {
9
+ if (!config.isAuthenticated()) {
10
+ printError('Not logged in. Run: hey login');
11
+ process.exit(1);
12
+ }
13
+ }
14
+ export async function remove(index, options = {}) {
15
+ requireAuth();
16
+ try {
17
+ const context = config.getContext();
18
+ const projectName = options.project ?? context.lastProject;
19
+ if (!projectName) {
20
+ printError('No project specified. Use: hey rm -p <project> <n> or hey use <project>');
21
+ process.exit(1);
22
+ }
23
+ // Parse index
24
+ const num = parseInt(index, 10);
25
+ if (isNaN(num) || num < 1) {
26
+ printError('Invalid action number. Use: hey rm <n> where n is 1, 2, 3...');
27
+ process.exit(1);
28
+ }
29
+ // Find the stax
30
+ const matches = await api.fuzzyFindStax(projectName);
31
+ if (matches.length === 0) {
32
+ printError(`Project "${projectName}" not found`);
33
+ process.exit(1);
34
+ }
35
+ if (matches.length > 1) {
36
+ printWarning(`Multiple matches for "${projectName}":`);
37
+ matches.forEach(s => console.log(` - ${s.name}`));
38
+ console.log();
39
+ console.log('Be more specific or use: hey use <project>');
40
+ process.exit(1);
41
+ }
42
+ const stax = matches[0];
43
+ // Get current actions
44
+ const actions = await api.getActions(stax.id, false);
45
+ if (actions.length === 0) {
46
+ printWarning(`${stax.name} has no pending actions`);
47
+ process.exit(0);
48
+ }
49
+ if (num > actions.length) {
50
+ printError(`Action #${num} not found. ${stax.name} has ${actions.length} actions.`);
51
+ console.log();
52
+ console.log('Current actions:');
53
+ actions.forEach((a, i) => console.log(` ${i + 1}. ${a.content}`));
54
+ process.exit(1);
55
+ }
56
+ // Delete the action
57
+ const actionToDelete = actions[num - 1];
58
+ await api.deleteAction(actionToDelete.id);
59
+ // Update context
60
+ config.setLastProject(stax.name, stax.id);
61
+ printSuccess(`Removed action #${num}: "${actionToDelete.content}"`);
62
+ }
63
+ catch (error) {
64
+ const message = error instanceof Error ? error.message : 'Failed to remove action';
65
+ printError(message);
66
+ process.exit(1);
67
+ }
68
+ }
69
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Hey CLI - TabStax command-line interface
4
+ * A conversational way to manage Next Actions and Breadcrumbs
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
package/dist/index.js ADDED
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Hey CLI - TabStax command-line interface
4
+ * A conversational way to manage Next Actions and Breadcrumbs
5
+ */
6
+ import { Command } from 'commander';
7
+ import { login, logout, whoami, status } from './commands/auth.js';
8
+ import { list } from './commands/list.js';
9
+ import { add } from './commands/add.js';
10
+ import { done, doneFirst } from './commands/done.js';
11
+ import { remove } from './commands/remove.js';
12
+ import { edit, priority, move } from './commands/edit.js';
13
+ import { use, which } from './commands/context.js';
14
+ const program = new Command();
15
+ program
16
+ .name('hey')
17
+ .description('TabStax CLI - Manage your Next Actions from the terminal')
18
+ .version('0.1.0');
19
+ // Default command: hey "message" adds a next action
20
+ program
21
+ .argument('[message]', 'Add a next action (or breadcrumb with -x)')
22
+ .option('-x, --breadcrumb', 'Add as breadcrumb (completed action)')
23
+ .option('-p, --project <name>', 'Target project')
24
+ .option('--force', 'Force add even if at limit')
25
+ .action(async (message, options) => {
26
+ if (message) {
27
+ await add(message, options);
28
+ }
29
+ else {
30
+ // No message: show help
31
+ program.help();
32
+ }
33
+ });
34
+ // hey login
35
+ program
36
+ .command('login')
37
+ .description('Log in to TabStax')
38
+ .option('-t, --token <token>', 'Use access token directly')
39
+ .action(login);
40
+ // hey logout
41
+ program
42
+ .command('logout')
43
+ .description('Log out of TabStax')
44
+ .action(logout);
45
+ // hey whoami
46
+ program
47
+ .command('whoami')
48
+ .description('Show current user')
49
+ .action(whoami);
50
+ // hey status
51
+ program
52
+ .command('status')
53
+ .description('Show CLI status')
54
+ .action(status);
55
+ // hey ls [target]
56
+ program
57
+ .command('ls [target]')
58
+ .description('List stax, actions, or breadcrumbs')
59
+ .option('-a, --all', 'Show expanded view with actions for each stax')
60
+ .option('-d, --done', 'Show breadcrumbs only')
61
+ .option('-c, --count <n>', 'Number of items to show')
62
+ .action(async (target, options) => {
63
+ await list(target, options);
64
+ });
65
+ // hey done [n]
66
+ program
67
+ .command('done [n]')
68
+ .description('Mark action #n as done (default: first action)')
69
+ .option('-p, --project <name>', 'Target project')
70
+ .action(async (n, options) => {
71
+ if (n) {
72
+ await done(n, options);
73
+ }
74
+ else {
75
+ await doneFirst(options);
76
+ }
77
+ });
78
+ // hey rm <n>
79
+ program
80
+ .command('rm <n>')
81
+ .description('Remove action #n')
82
+ .option('-p, --project <name>', 'Target project')
83
+ .action(remove);
84
+ // hey edit <n> <content>
85
+ program
86
+ .command('edit <n> <content>')
87
+ .description('Edit action #n content')
88
+ .option('-p, --project <name>', 'Target project')
89
+ .action(edit);
90
+ // hey pri <project> <level>
91
+ program
92
+ .command('pri <project> <level>')
93
+ .description('Set project priority (must/should/good/meh)')
94
+ .action(priority);
95
+ // hey mv <from> <to>
96
+ program
97
+ .command('mv <from> <to>')
98
+ .description('Move action from position to another')
99
+ .option('-p, --project <name>', 'Target project')
100
+ .action(move);
101
+ // hey use <project>
102
+ program
103
+ .command('use <project>')
104
+ .description('Set default project')
105
+ .action(use);
106
+ // hey which
107
+ program
108
+ .command('which')
109
+ .description('Show current context')
110
+ .action(which);
111
+ // Parse and run
112
+ program.parse();
113
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Supabase API client for Hey CLI
3
+ * Handles all database operations
4
+ */
5
+ export interface Stax {
6
+ id: string;
7
+ name: string;
8
+ user_id: string;
9
+ tags: string[];
10
+ is_public: boolean;
11
+ created_at: string;
12
+ updated_at: string;
13
+ last_activity_at?: string;
14
+ }
15
+ export interface NextAction {
16
+ id: string;
17
+ stax_id: string;
18
+ user_id: string;
19
+ content: string;
20
+ done: boolean;
21
+ position: number;
22
+ priority?: string | null;
23
+ source: string;
24
+ created_at: string;
25
+ completed_at?: string | null;
26
+ completed_by?: string | null;
27
+ cli_context?: Record<string, unknown> | null;
28
+ }
29
+ export interface AttentionBlock {
30
+ id: string;
31
+ stax_id: string;
32
+ user_id: string;
33
+ priority: 'must' | 'should' | 'good' | 'meh';
34
+ created_at: string;
35
+ }
36
+ export interface StaxWithActions extends Stax {
37
+ actions: NextAction[];
38
+ actionCount: number;
39
+ completedCount: number;
40
+ priority?: string | null;
41
+ }
42
+ declare class ApiClient {
43
+ private client;
44
+ private getClient;
45
+ resetClient(): void;
46
+ signIn(email: string, password: string): Promise<{
47
+ userId: string;
48
+ email: string;
49
+ }>;
50
+ signOut(): Promise<void>;
51
+ getAllStax(): Promise<Stax[]>;
52
+ getStaxByName(name: string): Promise<Stax | null>;
53
+ fuzzyFindStax(query: string): Promise<Stax[]>;
54
+ getActions(staxId: string, includeCompleted?: boolean): Promise<NextAction[]>;
55
+ getRecentBreadcrumbs(staxId: string, days?: number): Promise<NextAction[]>;
56
+ addAction(staxId: string, content: string, isCompleted?: boolean): Promise<NextAction>;
57
+ completeAction(actionId: string): Promise<NextAction>;
58
+ deleteAction(actionId: string): Promise<void>;
59
+ editAction(actionId: string, content: string): Promise<NextAction>;
60
+ updateActionPosition(actionId: string, position: number): Promise<void>;
61
+ countActiveActions(staxId: string): Promise<number>;
62
+ getAttentionBlock(staxId: string): Promise<AttentionBlock | null>;
63
+ setAttentionBlock(staxId: string, priority: 'must' | 'should' | 'good' | 'meh'): Promise<AttentionBlock>;
64
+ getStaxWithActions(): Promise<StaxWithActions[]>;
65
+ private updateStaxActivity;
66
+ }
67
+ export declare const api: ApiClient;
68
+ export {};
69
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}