vibetracking 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 (46) hide show
  1. package/README.md +77 -0
  2. package/dist/auth.d.ts +17 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +162 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/cli.d.ts +8 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +440 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/credentials.d.ts +36 -0
  11. package/dist/credentials.d.ts.map +1 -0
  12. package/dist/credentials.js +82 -0
  13. package/dist/credentials.js.map +1 -0
  14. package/dist/cursor.d.ts +136 -0
  15. package/dist/cursor.d.ts.map +1 -0
  16. package/dist/cursor.js +400 -0
  17. package/dist/cursor.js.map +1 -0
  18. package/dist/graph-types.d.ts +152 -0
  19. package/dist/graph-types.d.ts.map +1 -0
  20. package/dist/graph-types.js +6 -0
  21. package/dist/graph-types.js.map +1 -0
  22. package/dist/native-runner.d.ts +11 -0
  23. package/dist/native-runner.d.ts.map +1 -0
  24. package/dist/native-runner.js +61 -0
  25. package/dist/native-runner.js.map +1 -0
  26. package/dist/native.d.ts +98 -0
  27. package/dist/native.d.ts.map +1 -0
  28. package/dist/native.js +309 -0
  29. package/dist/native.js.map +1 -0
  30. package/dist/sessions/types.d.ts +28 -0
  31. package/dist/sessions/types.d.ts.map +1 -0
  32. package/dist/sessions/types.js +27 -0
  33. package/dist/sessions/types.js.map +1 -0
  34. package/dist/spinner.d.ts +75 -0
  35. package/dist/spinner.d.ts.map +1 -0
  36. package/dist/spinner.js +203 -0
  37. package/dist/spinner.js.map +1 -0
  38. package/dist/submit.d.ts +23 -0
  39. package/dist/submit.d.ts.map +1 -0
  40. package/dist/submit.js +144 -0
  41. package/dist/submit.js.map +1 -0
  42. package/dist/table.d.ts +6 -0
  43. package/dist/table.d.ts.map +1 -0
  44. package/dist/table.js +10 -0
  45. package/dist/table.js.map +1 -0
  46. package/package.json +61 -0
package/README.md ADDED
@@ -0,0 +1,77 @@
1
+ # vibetracking
2
+
3
+ Track AI coding assistant usage across Claude Code, Codex, Cursor, Gemini, Amp, and more.
4
+
5
+ ## Requirements
6
+
7
+ - [Bun](https://bun.sh) >= 1.0
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ # One-off execution
13
+ bunx vibetracking
14
+
15
+ # Global install
16
+ bun add -g vibetracking
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ```bash
22
+ # First run - scans local data and opens browser to import
23
+ vibetracking
24
+
25
+ # Login to sync data automatically
26
+ vibetracking login
27
+
28
+ # Sync data (after login)
29
+ vibetracking sync
30
+
31
+ # Check current user
32
+ vibetracking whoami
33
+
34
+ # Logout
35
+ vibetracking logout
36
+ ```
37
+
38
+ ### Cursor Integration
39
+
40
+ ```bash
41
+ # Login to Cursor to include usage data
42
+ vibetracking cursor login
43
+
44
+ # Check Cursor status
45
+ vibetracking cursor status
46
+
47
+ # Logout from Cursor
48
+ vibetracking cursor logout
49
+ ```
50
+
51
+ ## Supported Tools
52
+
53
+ | Tool | Data Location |
54
+ |------|---------------|
55
+ | Claude Code | `~/.claude/projects/` |
56
+ | Codex | `~/.codex/` |
57
+ | OpenCode | `~/.local/share/opencode/` |
58
+ | Gemini | `~/.gemini/` |
59
+ | Amp | `~/.ampcode/` |
60
+ | Cursor | API sync (requires login) |
61
+
62
+ ## How It Works
63
+
64
+ 1. **Scan**: Vibetracking scans your local AI coding tool data
65
+ 2. **Parse**: Native Rust module parses session files in parallel
66
+ 3. **Calculate**: Estimates costs using real-time model pricing from LiteLLM
67
+ 4. **Import**: Opens browser to import data to vibetracking.dev
68
+ 5. **Share**: View your stats, compare on leaderboards, share your profile
69
+
70
+ ## Links
71
+
72
+ - Website: https://vibetracking.dev
73
+ - GitHub: https://github.com/lfglabs/vibetracking
74
+
75
+ ## License
76
+
77
+ MIT
package/dist/auth.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Vibetracking CLI Authentication Commands
3
+ * Handles login, logout, and whoami commands
4
+ */
5
+ /**
6
+ * Login command - initiates device flow authentication
7
+ */
8
+ export declare function login(): Promise<void>;
9
+ /**
10
+ * Logout command - clears stored credentials
11
+ */
12
+ export declare function logout(): Promise<void>;
13
+ /**
14
+ * Whoami command - displays current user info
15
+ */
16
+ export declare function whoami(): Promise<void>;
17
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+BH;;GAEG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA4F3C;AAED;;GAEG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB5C;AAED;;GAEG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAa5C"}
package/dist/auth.js ADDED
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Vibetracking CLI Authentication Commands
3
+ * Handles login, logout, and whoami commands
4
+ */
5
+ import pc from "picocolors";
6
+ import * as os from "node:os";
7
+ import { saveCredentials, loadCredentials, clearCredentials, getApiBaseUrl, } from "./credentials.js";
8
+ const MAX_POLL_ATTEMPTS = 180; // 15 minutes max
9
+ /**
10
+ * Login command - initiates device flow authentication
11
+ */
12
+ export async function login() {
13
+ const credentials = loadCredentials();
14
+ if (credentials) {
15
+ console.log(pc.yellow(`\n Already logged in as ${pc.bold(credentials.username)}`));
16
+ console.log(pc.gray(" Run 'vibetracking logout' to sign out first.\n"));
17
+ return;
18
+ }
19
+ const baseUrl = getApiBaseUrl();
20
+ console.log(pc.cyan("\n Vibetracking - Login\n"));
21
+ // Step 1: Request device code
22
+ console.log(pc.gray(" Requesting authorization code..."));
23
+ let deviceCodeData;
24
+ try {
25
+ const response = await fetch(`${baseUrl}/api/auth/device`, {
26
+ method: "POST",
27
+ headers: { "Content-Type": "application/json" },
28
+ body: JSON.stringify({ deviceName: getDeviceName() }),
29
+ });
30
+ if (!response.ok) {
31
+ throw new Error(`Server returned ${response.status}`);
32
+ }
33
+ deviceCodeData = await response.json();
34
+ }
35
+ catch (error) {
36
+ console.error(pc.red(`\n Error: Failed to connect to server.`));
37
+ console.error(pc.gray(` ${error.message}\n`));
38
+ process.exit(1);
39
+ }
40
+ // Step 2: Display instructions
41
+ console.log();
42
+ console.log(pc.white(" Open this URL in your browser:"));
43
+ console.log(pc.cyan(` ${deviceCodeData.verificationUrl}\n`));
44
+ console.log(pc.white(" Enter this code:"));
45
+ console.log(pc.bold(pc.green(` ${deviceCodeData.userCode}\n`)));
46
+ // Try to open browser automatically
47
+ await openBrowser(deviceCodeData.verificationUrl);
48
+ console.log(pc.gray(" Waiting for authorization..."));
49
+ // Step 3: Poll for completion
50
+ let attempts = 0;
51
+ const pollInterval = (deviceCodeData.interval || 5) * 1000;
52
+ while (attempts < MAX_POLL_ATTEMPTS) {
53
+ await sleep(pollInterval);
54
+ attempts++;
55
+ try {
56
+ const response = await fetch(`${baseUrl}/api/auth/device/poll`, {
57
+ method: "POST",
58
+ headers: { "Content-Type": "application/json" },
59
+ body: JSON.stringify({ deviceCode: deviceCodeData.deviceCode }),
60
+ });
61
+ const data = await response.json();
62
+ if (data.status === "complete" && data.token && data.user) {
63
+ // Success!
64
+ saveCredentials({
65
+ token: data.token,
66
+ username: data.user.username,
67
+ avatarUrl: data.user.avatarUrl,
68
+ createdAt: new Date().toISOString(),
69
+ });
70
+ console.log(pc.green(`\n Success! Logged in as ${pc.bold(data.user.username)}`));
71
+ console.log(pc.gray(" You can now use 'vibetracking submit' to share your usage.\n"));
72
+ return;
73
+ }
74
+ if (data.status === "expired") {
75
+ console.error(pc.red("\n Authorization code expired. Please try again.\n"));
76
+ process.exit(1);
77
+ }
78
+ // Still pending - show a dot to indicate progress
79
+ process.stdout.write(pc.gray("."));
80
+ }
81
+ catch (error) {
82
+ // Network error - continue polling
83
+ process.stdout.write(pc.red("!"));
84
+ }
85
+ }
86
+ console.error(pc.red("\n\n Timeout: Authorization took too long. Please try again.\n"));
87
+ process.exit(1);
88
+ }
89
+ /**
90
+ * Logout command - clears stored credentials
91
+ */
92
+ export async function logout() {
93
+ const credentials = loadCredentials();
94
+ if (!credentials) {
95
+ console.log(pc.yellow("\n Not logged in.\n"));
96
+ return;
97
+ }
98
+ const username = credentials.username;
99
+ const cleared = clearCredentials();
100
+ if (cleared) {
101
+ console.log(pc.green(`\n Logged out from ${pc.bold(username)}\n`));
102
+ }
103
+ else {
104
+ console.error(pc.red("\n Failed to clear credentials.\n"));
105
+ process.exit(1);
106
+ }
107
+ }
108
+ /**
109
+ * Whoami command - displays current user info
110
+ */
111
+ export async function whoami() {
112
+ const credentials = loadCredentials();
113
+ if (!credentials) {
114
+ console.log(pc.yellow("\n Not logged in."));
115
+ console.log(pc.gray(" Run 'vibetracking login' to authenticate.\n"));
116
+ return;
117
+ }
118
+ console.log(pc.cyan("\n Vibetracking - Account Info\n"));
119
+ console.log(pc.white(` Username: ${pc.bold(credentials.username)}`));
120
+ console.log(pc.gray(` Logged in: ${new Date(credentials.createdAt).toLocaleDateString()}`));
121
+ console.log();
122
+ }
123
+ /**
124
+ * Get a device name for the token
125
+ */
126
+ function getDeviceName() {
127
+ return `CLI on ${os.hostname()}`;
128
+ }
129
+ /**
130
+ * Sleep helper
131
+ */
132
+ function sleep(ms) {
133
+ return new Promise((resolve) => setTimeout(resolve, ms));
134
+ }
135
+ /**
136
+ * Try to open browser automatically
137
+ */
138
+ async function openBrowser(url) {
139
+ try {
140
+ const { exec } = await import("node:child_process");
141
+ const platform = process.platform;
142
+ let command;
143
+ if (platform === "darwin") {
144
+ command = `open "${url}"`;
145
+ }
146
+ else if (platform === "win32") {
147
+ command = `start "" "${url}"`;
148
+ }
149
+ else {
150
+ command = `xdg-open "${url}"`;
151
+ }
152
+ exec(command, (error) => {
153
+ if (error) {
154
+ // Silent fail - user can still open manually
155
+ }
156
+ });
157
+ }
158
+ catch {
159
+ // Silent fail
160
+ }
161
+ }
162
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Vibetracking CLI
4
+ * Track AI coding assistant usage across Claude Code, Codex, Cursor, and more.
5
+ * Browser-first experience - data is viewed and shared on vibetracking.dev
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG"}