@vibetasks/cli 0.6.0 → 0.6.1
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/dist/bin/vibetasks.js +52 -96
- package/package.json +67 -67
package/dist/bin/vibetasks.js
CHANGED
|
@@ -45,12 +45,7 @@ ${url}
|
|
|
45
45
|
`));
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
const authManager = new AuthManager();
|
|
50
|
-
const configUrl = await authManager.getConfig("auth-url");
|
|
51
|
-
if (configUrl) {
|
|
52
|
-
return String(configUrl);
|
|
53
|
-
}
|
|
48
|
+
function getAuthBaseUrl() {
|
|
54
49
|
if (process.env.VIBETASKS_AUTH_URL) {
|
|
55
50
|
return process.env.VIBETASKS_AUTH_URL;
|
|
56
51
|
}
|
|
@@ -63,7 +58,6 @@ async function loginWithBrowser() {
|
|
|
63
58
|
console.log(chalk.blue.bold("\n\u{1F510} VibeTasks Browser Login\n"));
|
|
64
59
|
const spinner = ora("Starting local server...").start();
|
|
65
60
|
const port = await getAvailablePort();
|
|
66
|
-
const baseUrl = await getAuthBaseUrl();
|
|
67
61
|
return new Promise((resolve, reject) => {
|
|
68
62
|
let timeoutId = null;
|
|
69
63
|
const server = createServer(async (req, res) => {
|
|
@@ -134,36 +128,6 @@ async function loginWithBrowser() {
|
|
|
134
128
|
<title>Authentication Successful</title>
|
|
135
129
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
136
130
|
<style>
|
|
137
|
-
:root {
|
|
138
|
-
--background: oklch(1 0 0);
|
|
139
|
-
--foreground: oklch(0.145 0 0);
|
|
140
|
-
--card: oklch(1 0 0);
|
|
141
|
-
--card-foreground: oklch(0.145 0 0);
|
|
142
|
-
--primary: oklch(0.205 0 0);
|
|
143
|
-
--primary-foreground: oklch(0.985 0 0);
|
|
144
|
-
--muted: oklch(0.97 0 0);
|
|
145
|
-
--muted-foreground: oklch(0.556 0 0);
|
|
146
|
-
--accent: oklch(0.97 0 0);
|
|
147
|
-
--accent-foreground: oklch(0.205 0 0);
|
|
148
|
-
--border: oklch(0.922 0 0);
|
|
149
|
-
--success: oklch(0.7 0.15 160);
|
|
150
|
-
}
|
|
151
|
-
@media (prefers-color-scheme: dark) {
|
|
152
|
-
:root {
|
|
153
|
-
--background: oklch(0.145 0 0);
|
|
154
|
-
--foreground: oklch(0.985 0 0);
|
|
155
|
-
--card: oklch(0.205 0 0);
|
|
156
|
-
--card-foreground: oklch(0.985 0 0);
|
|
157
|
-
--primary: oklch(0.922 0 0);
|
|
158
|
-
--primary-foreground: oklch(0.205 0 0);
|
|
159
|
-
--muted: oklch(0.269 0 0);
|
|
160
|
-
--muted-foreground: oklch(0.708 0 0);
|
|
161
|
-
--accent: oklch(0.269 0 0);
|
|
162
|
-
--accent-foreground: oklch(0.985 0 0);
|
|
163
|
-
--border: oklch(1 0 0 / 10%);
|
|
164
|
-
--success: oklch(0.75 0.15 160);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
131
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
168
132
|
body {
|
|
169
133
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
@@ -171,36 +135,35 @@ async function loginWithBrowser() {
|
|
|
171
135
|
align-items: center;
|
|
172
136
|
justify-content: center;
|
|
173
137
|
min-height: 100vh;
|
|
174
|
-
background:
|
|
175
|
-
color: var(--foreground);
|
|
138
|
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
176
139
|
padding: 20px;
|
|
177
140
|
}
|
|
178
141
|
.container {
|
|
179
142
|
text-align: center;
|
|
180
|
-
padding:
|
|
181
|
-
background:
|
|
182
|
-
border:
|
|
183
|
-
|
|
143
|
+
padding: 60px 40px;
|
|
144
|
+
background: white;
|
|
145
|
+
border-radius: 20px;
|
|
146
|
+
box-shadow: 0 20px 60px rgba(0,0,0,0.3);
|
|
184
147
|
max-width: 450px;
|
|
185
148
|
width: 100%;
|
|
186
149
|
}
|
|
187
150
|
.checkmark {
|
|
188
|
-
width:
|
|
189
|
-
height:
|
|
151
|
+
width: 80px;
|
|
152
|
+
height: 80px;
|
|
190
153
|
border-radius: 50%;
|
|
191
154
|
display: block;
|
|
192
|
-
stroke-width:
|
|
193
|
-
stroke:
|
|
155
|
+
stroke-width: 3;
|
|
156
|
+
stroke: #4CAF50;
|
|
194
157
|
stroke-miterlimit: 10;
|
|
195
158
|
margin: 0 auto 24px;
|
|
196
|
-
animation: scale 0.3s ease-in-out 0.9s both;
|
|
159
|
+
animation: fill 0.4s ease-in-out 0.4s forwards, scale 0.3s ease-in-out 0.9s both;
|
|
197
160
|
}
|
|
198
161
|
.checkmark-circle {
|
|
199
162
|
stroke-dasharray: 166;
|
|
200
163
|
stroke-dashoffset: 166;
|
|
201
|
-
stroke-width:
|
|
164
|
+
stroke-width: 3;
|
|
202
165
|
stroke-miterlimit: 10;
|
|
203
|
-
stroke:
|
|
166
|
+
stroke: #4CAF50;
|
|
204
167
|
fill: none;
|
|
205
168
|
animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards;
|
|
206
169
|
}
|
|
@@ -218,65 +181,66 @@ async function loginWithBrowser() {
|
|
|
218
181
|
50% { transform: scale3d(1.1, 1.1, 1); }
|
|
219
182
|
}
|
|
220
183
|
h1 {
|
|
221
|
-
color:
|
|
222
|
-
font-size:
|
|
223
|
-
font-weight:
|
|
224
|
-
margin-bottom:
|
|
184
|
+
color: #2d3748;
|
|
185
|
+
font-size: 28px;
|
|
186
|
+
font-weight: 700;
|
|
187
|
+
margin-bottom: 12px;
|
|
225
188
|
}
|
|
226
189
|
.email {
|
|
227
|
-
font-weight:
|
|
228
|
-
color:
|
|
229
|
-
font-size:
|
|
230
|
-
margin-bottom:
|
|
190
|
+
font-weight: 600;
|
|
191
|
+
color: #667eea;
|
|
192
|
+
font-size: 16px;
|
|
193
|
+
margin-bottom: 24px;
|
|
231
194
|
}
|
|
232
195
|
.message {
|
|
233
|
-
color:
|
|
234
|
-
font-size:
|
|
235
|
-
line-height: 1.
|
|
196
|
+
color: #718096;
|
|
197
|
+
font-size: 15px;
|
|
198
|
+
line-height: 1.6;
|
|
236
199
|
}
|
|
237
200
|
.success-badge {
|
|
238
201
|
display: inline-block;
|
|
239
|
-
background:
|
|
240
|
-
color:
|
|
241
|
-
padding:
|
|
242
|
-
border-radius:
|
|
243
|
-
font-size:
|
|
244
|
-
font-weight:
|
|
245
|
-
margin-top:
|
|
202
|
+
background: #f0fdf4;
|
|
203
|
+
color: #15803d;
|
|
204
|
+
padding: 8px 16px;
|
|
205
|
+
border-radius: 20px;
|
|
206
|
+
font-size: 14px;
|
|
207
|
+
font-weight: 600;
|
|
208
|
+
margin-top: 20px;
|
|
246
209
|
}
|
|
247
210
|
.button-group {
|
|
248
|
-
margin-top:
|
|
211
|
+
margin-top: 32px;
|
|
249
212
|
display: flex;
|
|
250
|
-
gap:
|
|
213
|
+
gap: 12px;
|
|
251
214
|
justify-content: center;
|
|
252
|
-
flex-wrap: wrap;
|
|
253
215
|
}
|
|
254
216
|
.button {
|
|
255
|
-
padding:
|
|
217
|
+
padding: 12px 24px;
|
|
256
218
|
border-radius: 8px;
|
|
257
|
-
font-weight:
|
|
219
|
+
font-weight: 600;
|
|
258
220
|
font-size: 14px;
|
|
259
221
|
cursor: pointer;
|
|
260
222
|
transition: all 0.2s;
|
|
261
223
|
text-decoration: none;
|
|
262
224
|
display: inline-block;
|
|
263
|
-
border: none;
|
|
264
225
|
}
|
|
265
226
|
.button-primary {
|
|
266
|
-
background:
|
|
267
|
-
color:
|
|
227
|
+
background: #667eea;
|
|
228
|
+
color: white;
|
|
229
|
+
border: none;
|
|
268
230
|
}
|
|
269
231
|
.button-primary:hover {
|
|
270
|
-
|
|
232
|
+
background: #5568d3;
|
|
271
233
|
transform: translateY(-1px);
|
|
234
|
+
box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
|
|
272
235
|
}
|
|
273
236
|
.button-secondary {
|
|
274
|
-
background:
|
|
275
|
-
color:
|
|
237
|
+
background: #f7fafc;
|
|
238
|
+
color: #4a5568;
|
|
239
|
+
border: 2px solid #e2e8f0;
|
|
276
240
|
}
|
|
277
241
|
.button-secondary:hover {
|
|
278
|
-
background:
|
|
279
|
-
color:
|
|
242
|
+
background: #edf2f7;
|
|
243
|
+
border-color: #cbd5e0;
|
|
280
244
|
}
|
|
281
245
|
</style>
|
|
282
246
|
</head>
|
|
@@ -286,15 +250,15 @@ async function loginWithBrowser() {
|
|
|
286
250
|
<circle class="checkmark-circle" cx="26" cy="26" r="25" fill="none"/>
|
|
287
251
|
<path class="checkmark-check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
|
|
288
252
|
</svg>
|
|
289
|
-
<h1>Authentication Successful
|
|
253
|
+
<h1>Authentication Successful!</h1>
|
|
290
254
|
<p class="email">${email}</p>
|
|
291
255
|
<p class="message">
|
|
292
|
-
Your VibeTasks CLI is now connected.<br>
|
|
293
|
-
|
|
256
|
+
Your VibeTasks CLI is now connected to your account.<br>
|
|
257
|
+
You can close this window and return to your terminal.
|
|
294
258
|
</p>
|
|
295
259
|
<div class="success-badge">Ready to use</div>
|
|
296
260
|
<div class="button-group">
|
|
297
|
-
<a href="
|
|
261
|
+
<a href="https://vibetasks.dev/dashboard" class="button button-primary">Go to Dashboard</a>
|
|
298
262
|
<button onclick="window.close()" class="button button-secondary">Close Window</button>
|
|
299
263
|
</div>
|
|
300
264
|
</div>
|
|
@@ -350,6 +314,7 @@ Error: ${error.message}`));
|
|
|
350
314
|
});
|
|
351
315
|
server.listen(port, async () => {
|
|
352
316
|
spinner.text = "Opening browser...";
|
|
317
|
+
const baseUrl = getAuthBaseUrl();
|
|
353
318
|
const authUrl = `${baseUrl}/cli-auth?port=${port}`;
|
|
354
319
|
spinner.text = "Waiting for authentication in browser...";
|
|
355
320
|
console.log(chalk.gray(`
|
|
@@ -398,7 +363,6 @@ async function getAvailablePort(startPort = 3737) {
|
|
|
398
363
|
var loginCommand = new Command("login").description("Authenticate with VibeTasks via browser (Google OAuth)").option("-b, --browser", "Login via browser (default)").action(async () => {
|
|
399
364
|
console.log(chalk2.blue.bold("\n\u{1F510} VibeTasks Login\n"));
|
|
400
365
|
console.log(chalk2.gray("Opening browser for Google sign-in...\n"));
|
|
401
|
-
console.log(chalk2.gray("Tip: For local development, run: vibetasks config auth-url http://localhost:3847\n"));
|
|
402
366
|
await loginWithBrowser();
|
|
403
367
|
});
|
|
404
368
|
|
|
@@ -977,15 +941,7 @@ ${filterMessages[filter] || "No tasks found"}.
|
|
|
977
941
|
const subtasks = task.subtasks_json || task.subtasks || [];
|
|
978
942
|
const doneCount = subtasks.filter((s) => s.done).length;
|
|
979
943
|
const totalCount = subtasks.length;
|
|
980
|
-
|
|
981
|
-
if (totalCount > 0) {
|
|
982
|
-
const percentage = doneCount / totalCount * 100;
|
|
983
|
-
const barLength = 5;
|
|
984
|
-
const filled = Math.round(doneCount / totalCount * barLength);
|
|
985
|
-
const bar = "\u2588".repeat(filled) + "\u2591".repeat(barLength - filled);
|
|
986
|
-
const barColor = percentage === 100 ? chalk4.green : percentage >= 50 ? chalk4.cyan : chalk4.yellow;
|
|
987
|
-
progress = `${barColor(bar)} ${chalk4.cyan(`${doneCount}/${totalCount}`)}`;
|
|
988
|
-
}
|
|
944
|
+
const progress = totalCount > 0 ? chalk4.cyan(`${doneCount}/${totalCount}`) : chalk4.gray("-");
|
|
989
945
|
if (options.shortIds) {
|
|
990
946
|
table.push([shortId, status, titleWithAI, progress, dueDate]);
|
|
991
947
|
} else {
|
|
@@ -1798,7 +1754,7 @@ async function runBrowserAuth() {
|
|
|
1798
1754
|
res.end();
|
|
1799
1755
|
});
|
|
1800
1756
|
server.listen(port, async () => {
|
|
1801
|
-
const taskflowPort = process.env.TASKFLOW_WEB_PORT || "
|
|
1757
|
+
const taskflowPort = process.env.TASKFLOW_WEB_PORT || "2843";
|
|
1802
1758
|
const authUrl = `http://localhost:${taskflowPort}/cli-auth?port=${port}`;
|
|
1803
1759
|
console.log(chalk13.gray(`
|
|
1804
1760
|
If browser doesn't open, visit:`));
|
package/package.json
CHANGED
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@vibetasks/cli",
|
|
3
|
-
"version": "0.6.
|
|
4
|
-
"description": "VibeTasks CLI - Lightning-fast task management from your terminal. Works with Claude Code, Cursor, and all AI coding tools.",
|
|
5
|
-
"author": "Vyas",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"main": "./dist/bin/vibetasks.js",
|
|
9
|
-
"bin": {
|
|
10
|
-
"vibetasks": "./dist/bin/vibetasks.js"
|
|
11
|
-
},
|
|
12
|
-
"files": [
|
|
13
|
-
"dist",
|
|
14
|
-
"hooks",
|
|
15
|
-
"package.json"
|
|
16
|
-
],
|
|
17
|
-
"keywords": [
|
|
18
|
-
"vibetasks",
|
|
19
|
-
"vibe",
|
|
20
|
-
"vibecoding",
|
|
21
|
-
"cli",
|
|
22
|
-
"task-management",
|
|
23
|
-
"productivity",
|
|
24
|
-
"mcp",
|
|
25
|
-
"claude-code",
|
|
26
|
-
"cursor",
|
|
27
|
-
"ai-tools",
|
|
28
|
-
"terminal"
|
|
29
|
-
],
|
|
30
|
-
"repository": {
|
|
31
|
-
"type": "git",
|
|
32
|
-
"url": "https://github.com/vyassathya/vibetasks.git",
|
|
33
|
-
"directory": "packages/cli"
|
|
34
|
-
},
|
|
35
|
-
"homepage": "https://vibetasks.dev",
|
|
36
|
-
"bugs": {
|
|
37
|
-
"url": "https://github.com/vyassathya/vibetasks/issues"
|
|
38
|
-
},
|
|
39
|
-
"publishConfig": {
|
|
40
|
-
"access": "public"
|
|
41
|
-
},
|
|
42
|
-
"scripts": {
|
|
43
|
-
"dev": "tsx bin/vibetasks.ts",
|
|
44
|
-
"build": "tsup bin/vibetasks.ts src/daemon-worker.ts --format esm --clean --outDir dist --shims",
|
|
45
|
-
"typecheck": "tsc --noEmit"
|
|
46
|
-
},
|
|
47
|
-
"dependencies": {
|
|
48
|
-
"@vibetasks/core": "^0.5.4",
|
|
49
|
-
"@vibetasks/shared": "^1.
|
|
50
|
-
"commander": "^11.1.0",
|
|
51
|
-
"chalk": "^5.3.0",
|
|
52
|
-
"ora": "^8.0.1",
|
|
53
|
-
"cli-table3": "^0.6.3",
|
|
54
|
-
"inquirer": "^9.2.12",
|
|
55
|
-
"date-fns": "^3.0.0",
|
|
56
|
-
"clipboardy": "^4.0.0",
|
|
57
|
-
"node-notifier": "^10.0.1",
|
|
58
|
-
"node-global-key-listener": "^0.3.0"
|
|
59
|
-
},
|
|
60
|
-
"devDependencies": {
|
|
61
|
-
"@types/inquirer": "^9.0.7",
|
|
62
|
-
"@types/node": "^20.0.0",
|
|
63
|
-
"tsx": "^4.7.0",
|
|
64
|
-
"tsup": "^8.0.0",
|
|
65
|
-
"typescript": "^5.3.3"
|
|
66
|
-
}
|
|
67
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@vibetasks/cli",
|
|
3
|
+
"version": "0.6.1",
|
|
4
|
+
"description": "VibeTasks CLI - Lightning-fast task management from your terminal. Works with Claude Code, Cursor, and all AI coding tools.",
|
|
5
|
+
"author": "Vyas",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/bin/vibetasks.js",
|
|
9
|
+
"bin": {
|
|
10
|
+
"vibetasks": "./dist/bin/vibetasks.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"hooks",
|
|
15
|
+
"package.json"
|
|
16
|
+
],
|
|
17
|
+
"keywords": [
|
|
18
|
+
"vibetasks",
|
|
19
|
+
"vibe",
|
|
20
|
+
"vibecoding",
|
|
21
|
+
"cli",
|
|
22
|
+
"task-management",
|
|
23
|
+
"productivity",
|
|
24
|
+
"mcp",
|
|
25
|
+
"claude-code",
|
|
26
|
+
"cursor",
|
|
27
|
+
"ai-tools",
|
|
28
|
+
"terminal"
|
|
29
|
+
],
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "https://github.com/vyassathya/vibetasks.git",
|
|
33
|
+
"directory": "packages/cli"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://vibetasks.dev",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/vyassathya/vibetasks/issues"
|
|
38
|
+
},
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"dev": "tsx bin/vibetasks.ts",
|
|
44
|
+
"build": "tsup bin/vibetasks.ts src/daemon-worker.ts --format esm --clean --outDir dist --shims",
|
|
45
|
+
"typecheck": "tsc --noEmit"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@vibetasks/core": "^0.5.4",
|
|
49
|
+
"@vibetasks/shared": "^1.4.1",
|
|
50
|
+
"commander": "^11.1.0",
|
|
51
|
+
"chalk": "^5.3.0",
|
|
52
|
+
"ora": "^8.0.1",
|
|
53
|
+
"cli-table3": "^0.6.3",
|
|
54
|
+
"inquirer": "^9.2.12",
|
|
55
|
+
"date-fns": "^3.0.0",
|
|
56
|
+
"clipboardy": "^4.0.0",
|
|
57
|
+
"node-notifier": "^10.0.1",
|
|
58
|
+
"node-global-key-listener": "^0.3.0"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@types/inquirer": "^9.0.7",
|
|
62
|
+
"@types/node": "^20.0.0",
|
|
63
|
+
"tsx": "^4.7.0",
|
|
64
|
+
"tsup": "^8.0.0",
|
|
65
|
+
"typescript": "^5.3.3"
|
|
66
|
+
}
|
|
67
|
+
}
|