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.
- package/README.md +110 -0
- package/bin/hey.js +2 -0
- package/dist/__tests__/api.test.d.ts +6 -0
- package/dist/__tests__/api.test.d.ts.map +1 -0
- package/dist/__tests__/api.test.js +146 -0
- package/dist/__tests__/api.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +6 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +78 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/output.test.d.ts +6 -0
- package/dist/__tests__/output.test.d.ts.map +1 -0
- package/dist/__tests__/output.test.js +104 -0
- package/dist/__tests__/output.test.js.map +1 -0
- package/dist/commands/add.d.ts +12 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +76 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/auth.d.ts +11 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +135 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/context.d.ts +15 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +75 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/done.d.ts +13 -0
- package/dist/commands/done.d.ts.map +1 -0
- package/dist/commands/done.js +76 -0
- package/dist/commands/done.js.map +1 -0
- package/dist/commands/edit.d.ts +27 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +170 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/list.d.ts +11 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +112 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/remove.d.ts +9 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +69 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +113 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +69 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +303 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +51 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +131 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/output.d.ts +37 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +209 -0
- package/dist/lib/output.js.map +1 -0
- 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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AACnC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,GACb,MAAM,kBAAkB,CAAA;AAMzB,SAAS,WAAW;IAClB,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;QAC9B,UAAU,CAAC,+BAA+B,CAAC,CAAA;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAa,EAAE,UAAyB,EAAE;IACrE,WAAW,EAAE,CAAA;IAEb,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;QACnC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,CAAA;QAE1D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,UAAU,CAAC,yEAAyE,CAAC,CAAA;YACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,cAAc;QACd,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC/B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YAC1B,UAAU,CAAC,8DAA8D,CAAC,CAAA;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,gBAAgB;QAChB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;QAEpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,UAAU,CAAC,YAAY,WAAW,aAAa,CAAC,CAAA;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,YAAY,CAAC,yBAAyB,WAAW,IAAI,CAAC,CAAA;YACtD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAClD,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAA;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QAEvB,sBAAsB;QACtB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAEpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,YAAY,CAAC,GAAG,IAAI,CAAC,IAAI,yBAAyB,CAAC,CAAA;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACzB,UAAU,CAAC,WAAW,GAAG,eAAe,IAAI,CAAC,IAAI,QAAQ,OAAO,CAAC,MAAM,WAAW,CAAC,CAAA;YACnF,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;YAC/B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,oBAAoB;QACpB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;QACvC,MAAM,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;QAEzC,iBAAiB;QACjB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QAEzC,YAAY,CAAC,mBAAmB,GAAG,MAAM,cAAc,CAAC,OAAO,GAAG,CAAC,CAAA;IAErE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAA;QAClF,UAAU,CAAC,OAAO,CAAC,CAAA;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -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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"}
|