claudedesk 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 (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +431 -0
  3. package/config/repos.example.json +128 -0
  4. package/config/settings.example.json +64 -0
  5. package/config/skills/code-review.md +76 -0
  6. package/config/skills/full-check.md +26 -0
  7. package/config/skills/lint-fix.md +23 -0
  8. package/dist/api/agent-routes.d.ts +2 -0
  9. package/dist/api/agent-routes.d.ts.map +1 -0
  10. package/dist/api/agent-routes.js +251 -0
  11. package/dist/api/agent-routes.js.map +1 -0
  12. package/dist/api/app-routes.d.ts +2 -0
  13. package/dist/api/app-routes.d.ts.map +1 -0
  14. package/dist/api/app-routes.js +150 -0
  15. package/dist/api/app-routes.js.map +1 -0
  16. package/dist/api/docker-routes.d.ts +2 -0
  17. package/dist/api/docker-routes.d.ts.map +1 -0
  18. package/dist/api/docker-routes.js +167 -0
  19. package/dist/api/docker-routes.js.map +1 -0
  20. package/dist/api/middleware.d.ts +6 -0
  21. package/dist/api/middleware.d.ts.map +1 -0
  22. package/dist/api/middleware.js +293 -0
  23. package/dist/api/middleware.js.map +1 -0
  24. package/dist/api/pin-auth.d.ts +65 -0
  25. package/dist/api/pin-auth.d.ts.map +1 -0
  26. package/dist/api/pin-auth.js +218 -0
  27. package/dist/api/pin-auth.js.map +1 -0
  28. package/dist/api/routes.d.ts +2 -0
  29. package/dist/api/routes.d.ts.map +1 -0
  30. package/dist/api/routes.js +473 -0
  31. package/dist/api/routes.js.map +1 -0
  32. package/dist/api/settings-routes.d.ts +2 -0
  33. package/dist/api/settings-routes.d.ts.map +1 -0
  34. package/dist/api/settings-routes.js +570 -0
  35. package/dist/api/settings-routes.js.map +1 -0
  36. package/dist/api/skill-routes.d.ts +2 -0
  37. package/dist/api/skill-routes.d.ts.map +1 -0
  38. package/dist/api/skill-routes.js +88 -0
  39. package/dist/api/skill-routes.js.map +1 -0
  40. package/dist/api/terminal-routes.d.ts +2 -0
  41. package/dist/api/terminal-routes.d.ts.map +1 -0
  42. package/dist/api/terminal-routes.js +3524 -0
  43. package/dist/api/terminal-routes.js.map +1 -0
  44. package/dist/api/tunnel-routes.d.ts +2 -0
  45. package/dist/api/tunnel-routes.d.ts.map +1 -0
  46. package/dist/api/tunnel-routes.js +196 -0
  47. package/dist/api/tunnel-routes.js.map +1 -0
  48. package/dist/api/workspace-routes.d.ts +3 -0
  49. package/dist/api/workspace-routes.d.ts.map +1 -0
  50. package/dist/api/workspace-routes.js +649 -0
  51. package/dist/api/workspace-routes.js.map +1 -0
  52. package/dist/cli.d.ts +3 -0
  53. package/dist/cli.d.ts.map +1 -0
  54. package/dist/cli.js +276 -0
  55. package/dist/cli.js.map +1 -0
  56. package/dist/client/assets/index-B4r0njGe.js +780 -0
  57. package/dist/client/assets/index-CY_9MyE0.css +1 -0
  58. package/dist/client/favicon.svg +5 -0
  59. package/dist/client/icons/icon-192.svg +5 -0
  60. package/dist/client/icons/icon-512.svg +5 -0
  61. package/dist/client/icons/logo-with-message.png +0 -0
  62. package/dist/client/icons/logo.png +0 -0
  63. package/dist/client/index.html +25 -0
  64. package/dist/client/manifest.json +62 -0
  65. package/dist/client/sw.js +243 -0
  66. package/dist/config/agent-usage.d.ts +34 -0
  67. package/dist/config/agent-usage.d.ts.map +1 -0
  68. package/dist/config/agent-usage.js +87 -0
  69. package/dist/config/agent-usage.js.map +1 -0
  70. package/dist/config/repos.d.ts +34 -0
  71. package/dist/config/repos.d.ts.map +1 -0
  72. package/dist/config/repos.js +412 -0
  73. package/dist/config/repos.js.map +1 -0
  74. package/dist/config/settings.d.ts +634 -0
  75. package/dist/config/settings.d.ts.map +1 -0
  76. package/dist/config/settings.js +459 -0
  77. package/dist/config/settings.js.map +1 -0
  78. package/dist/config/skills.d.ts +18 -0
  79. package/dist/config/skills.d.ts.map +1 -0
  80. package/dist/config/skills.js +174 -0
  81. package/dist/config/skills.js.map +1 -0
  82. package/dist/config/workspaces.d.ts +961 -0
  83. package/dist/config/workspaces.d.ts.map +1 -0
  84. package/dist/config/workspaces.js +482 -0
  85. package/dist/config/workspaces.js.map +1 -0
  86. package/dist/core/app-manager.d.ts +85 -0
  87. package/dist/core/app-manager.d.ts.map +1 -0
  88. package/dist/core/app-manager.js +447 -0
  89. package/dist/core/app-manager.js.map +1 -0
  90. package/dist/core/claude-invoker.d.ts +49 -0
  91. package/dist/core/claude-invoker.d.ts.map +1 -0
  92. package/dist/core/claude-invoker.js +583 -0
  93. package/dist/core/claude-invoker.js.map +1 -0
  94. package/dist/core/claude-session-reader.d.ts +25 -0
  95. package/dist/core/claude-session-reader.d.ts.map +1 -0
  96. package/dist/core/claude-session-reader.js +184 -0
  97. package/dist/core/claude-session-reader.js.map +1 -0
  98. package/dist/core/claude-usage-query.d.ts +78 -0
  99. package/dist/core/claude-usage-query.d.ts.map +1 -0
  100. package/dist/core/claude-usage-query.js +294 -0
  101. package/dist/core/claude-usage-query.js.map +1 -0
  102. package/dist/core/git-credential-helper.d.ts +57 -0
  103. package/dist/core/git-credential-helper.d.ts.map +1 -0
  104. package/dist/core/git-credential-helper.js +176 -0
  105. package/dist/core/git-credential-helper.js.map +1 -0
  106. package/dist/core/git-sandbox.d.ts +135 -0
  107. package/dist/core/git-sandbox.d.ts.map +1 -0
  108. package/dist/core/git-sandbox.js +907 -0
  109. package/dist/core/git-sandbox.js.map +1 -0
  110. package/dist/core/github-integration.d.ts +66 -0
  111. package/dist/core/github-integration.d.ts.map +1 -0
  112. package/dist/core/github-integration.js +350 -0
  113. package/dist/core/github-integration.js.map +1 -0
  114. package/dist/core/github-oauth.d.ts +88 -0
  115. package/dist/core/github-oauth.d.ts.map +1 -0
  116. package/dist/core/github-oauth.js +244 -0
  117. package/dist/core/github-oauth.js.map +1 -0
  118. package/dist/core/gitlab-integration.d.ts +66 -0
  119. package/dist/core/gitlab-integration.d.ts.map +1 -0
  120. package/dist/core/gitlab-integration.js +353 -0
  121. package/dist/core/gitlab-integration.js.map +1 -0
  122. package/dist/core/gitlab-oauth.d.ts +100 -0
  123. package/dist/core/gitlab-oauth.d.ts.map +1 -0
  124. package/dist/core/gitlab-oauth.js +366 -0
  125. package/dist/core/gitlab-oauth.js.map +1 -0
  126. package/dist/core/insights-extractor.d.ts +68 -0
  127. package/dist/core/insights-extractor.d.ts.map +1 -0
  128. package/dist/core/insights-extractor.js +402 -0
  129. package/dist/core/insights-extractor.js.map +1 -0
  130. package/dist/core/logger.d.ts +27 -0
  131. package/dist/core/logger.d.ts.map +1 -0
  132. package/dist/core/logger.js +70 -0
  133. package/dist/core/logger.js.map +1 -0
  134. package/dist/core/process-runner.d.ts +27 -0
  135. package/dist/core/process-runner.d.ts.map +1 -0
  136. package/dist/core/process-runner.js +147 -0
  137. package/dist/core/process-runner.js.map +1 -0
  138. package/dist/core/project-detector.d.ts +30 -0
  139. package/dist/core/project-detector.d.ts.map +1 -0
  140. package/dist/core/project-detector.js +482 -0
  141. package/dist/core/project-detector.js.map +1 -0
  142. package/dist/core/qr-generator.d.ts +18 -0
  143. package/dist/core/qr-generator.d.ts.map +1 -0
  144. package/dist/core/qr-generator.js +61 -0
  145. package/dist/core/qr-generator.js.map +1 -0
  146. package/dist/core/remote-tunnel-manager.d.ts +59 -0
  147. package/dist/core/remote-tunnel-manager.d.ts.map +1 -0
  148. package/dist/core/remote-tunnel-manager.js +235 -0
  149. package/dist/core/remote-tunnel-manager.js.map +1 -0
  150. package/dist/core/shared-docker-manager.d.ts +41 -0
  151. package/dist/core/shared-docker-manager.d.ts.map +1 -0
  152. package/dist/core/shared-docker-manager.js +409 -0
  153. package/dist/core/shared-docker-manager.js.map +1 -0
  154. package/dist/core/skill-executor.d.ts +25 -0
  155. package/dist/core/skill-executor.d.ts.map +1 -0
  156. package/dist/core/skill-executor.js +171 -0
  157. package/dist/core/skill-executor.js.map +1 -0
  158. package/dist/core/terminal-session.d.ts +149 -0
  159. package/dist/core/terminal-session.d.ts.map +1 -0
  160. package/dist/core/terminal-session.js +2340 -0
  161. package/dist/core/terminal-session.js.map +1 -0
  162. package/dist/core/tunnel-manager.d.ts +35 -0
  163. package/dist/core/tunnel-manager.d.ts.map +1 -0
  164. package/dist/core/tunnel-manager.js +137 -0
  165. package/dist/core/tunnel-manager.js.map +1 -0
  166. package/dist/core/usage-manager.d.ts +57 -0
  167. package/dist/core/usage-manager.d.ts.map +1 -0
  168. package/dist/core/usage-manager.js +363 -0
  169. package/dist/core/usage-manager.js.map +1 -0
  170. package/dist/core/ws-manager.d.ts +39 -0
  171. package/dist/core/ws-manager.d.ts.map +1 -0
  172. package/dist/core/ws-manager.js +190 -0
  173. package/dist/core/ws-manager.js.map +1 -0
  174. package/dist/index.d.ts +7 -0
  175. package/dist/index.d.ts.map +1 -0
  176. package/dist/index.js +229 -0
  177. package/dist/index.js.map +1 -0
  178. package/dist/types.d.ts +868 -0
  179. package/dist/types.d.ts.map +1 -0
  180. package/dist/types.js +119 -0
  181. package/dist/types.js.map +1 -0
  182. package/package.json +96 -0
@@ -0,0 +1,218 @@
1
+ import { randomInt, timingSafeEqual } from 'crypto';
2
+ // PIN expiration time: 5 minutes
3
+ const PIN_EXPIRATION_MS = 5 * 60 * 1000;
4
+ // Max failed attempts per PIN
5
+ const MAX_PIN_ATTEMPTS = 5;
6
+ // Rate limiting: track validation attempts per IP
7
+ const PIN_RATE_LIMIT_WINDOW_MS = 15 * 60 * 1000; // 15 minutes
8
+ const MAX_ATTEMPTS_PER_IP = 10;
9
+ class PinAuthManager {
10
+ activePin = null;
11
+ rateLimitMap = new Map();
12
+ cleanupInterval = null;
13
+ constructor() {
14
+ // Start periodic cleanup of expired PINs and rate limit entries
15
+ this.startCleanup();
16
+ }
17
+ /**
18
+ * Generate a cryptographically secure 6-digit PIN
19
+ */
20
+ generatePin() {
21
+ // Generate random number between 0 and 999999
22
+ const num = randomInt(0, 1000000);
23
+ // Pad with zeros to ensure 6 digits
24
+ return num.toString().padStart(6, '0');
25
+ }
26
+ /**
27
+ * Generate a new pairing PIN
28
+ * Invalidates any existing PIN
29
+ */
30
+ generatePairingPin(authToken) {
31
+ const pin = this.generatePin();
32
+ const now = Date.now();
33
+ const expiresAt = now + PIN_EXPIRATION_MS;
34
+ this.activePin = {
35
+ pin,
36
+ token: authToken,
37
+ createdAt: now,
38
+ expiresAt,
39
+ attempts: 0,
40
+ };
41
+ console.log('[PinAuth] Generated new pairing PIN (expires in 5 minutes)');
42
+ return {
43
+ pin,
44
+ expiresAt,
45
+ expiresInSeconds: Math.floor(PIN_EXPIRATION_MS / 1000),
46
+ };
47
+ }
48
+ /**
49
+ * Get status of active PIN
50
+ */
51
+ getPinStatus() {
52
+ if (!this.activePin) {
53
+ return { hasActivePin: false };
54
+ }
55
+ // Check if expired
56
+ if (Date.now() >= this.activePin.expiresAt) {
57
+ this.activePin = null;
58
+ return { hasActivePin: false };
59
+ }
60
+ const expiresInMs = this.activePin.expiresAt - Date.now();
61
+ return {
62
+ hasActivePin: true,
63
+ expiresAt: this.activePin.expiresAt,
64
+ expiresInSeconds: Math.floor(expiresInMs / 1000),
65
+ };
66
+ }
67
+ /**
68
+ * Invalidate the current PIN
69
+ */
70
+ invalidatePin() {
71
+ if (this.activePin) {
72
+ this.activePin = null;
73
+ console.log('[PinAuth] PIN invalidated');
74
+ return true;
75
+ }
76
+ return false;
77
+ }
78
+ /**
79
+ * Check rate limiting for IP
80
+ */
81
+ checkRateLimit(ip) {
82
+ const entry = this.rateLimitMap.get(ip);
83
+ const now = Date.now();
84
+ if (!entry) {
85
+ // First attempt, allow and create entry
86
+ this.rateLimitMap.set(ip, { attempts: 1, windowStart: now });
87
+ return { allowed: true, attemptsRemaining: MAX_ATTEMPTS_PER_IP - 1 };
88
+ }
89
+ // Check if window expired
90
+ if (now - entry.windowStart > PIN_RATE_LIMIT_WINDOW_MS) {
91
+ // Reset window
92
+ this.rateLimitMap.set(ip, { attempts: 1, windowStart: now });
93
+ return { allowed: true, attemptsRemaining: MAX_ATTEMPTS_PER_IP - 1 };
94
+ }
95
+ // Check if limit reached
96
+ if (entry.attempts >= MAX_ATTEMPTS_PER_IP) {
97
+ const timeRemaining = Math.ceil((entry.windowStart + PIN_RATE_LIMIT_WINDOW_MS - now) / 1000);
98
+ console.warn(`[PinAuth] Rate limit exceeded for IP ${ip} (${timeRemaining}s remaining)`);
99
+ return { allowed: false };
100
+ }
101
+ // Increment attempts
102
+ entry.attempts++;
103
+ return { allowed: true, attemptsRemaining: MAX_ATTEMPTS_PER_IP - entry.attempts };
104
+ }
105
+ /**
106
+ * Validate a PIN with constant-time comparison
107
+ */
108
+ validatePin(pin, clientIp) {
109
+ // Check rate limiting first
110
+ const rateLimit = this.checkRateLimit(clientIp);
111
+ if (!rateLimit.allowed) {
112
+ return {
113
+ success: false,
114
+ error: 'Too many validation attempts. Please try again later.',
115
+ };
116
+ }
117
+ // Validate PIN format (must be exactly 6 digits)
118
+ if (!/^\d{6}$/.test(pin)) {
119
+ return {
120
+ success: false,
121
+ error: 'Invalid PIN format. Must be 6 digits.',
122
+ attemptsRemaining: rateLimit.attemptsRemaining,
123
+ };
124
+ }
125
+ // Check if there's an active PIN
126
+ if (!this.activePin) {
127
+ return {
128
+ success: false,
129
+ error: 'No active pairing PIN. Please generate a new PIN from the desktop.',
130
+ attemptsRemaining: rateLimit.attemptsRemaining,
131
+ };
132
+ }
133
+ // Check if expired
134
+ if (Date.now() >= this.activePin.expiresAt) {
135
+ this.activePin = null;
136
+ return {
137
+ success: false,
138
+ error: 'PIN has expired. Please generate a new PIN.',
139
+ attemptsRemaining: rateLimit.attemptsRemaining,
140
+ };
141
+ }
142
+ // Check if max attempts reached for this PIN
143
+ if (this.activePin.attempts >= MAX_PIN_ATTEMPTS) {
144
+ const attemptsRemaining = 0;
145
+ this.activePin = null;
146
+ console.warn('[PinAuth] PIN invalidated due to max attempts');
147
+ return {
148
+ success: false,
149
+ error: 'Maximum attempts exceeded. Please generate a new PIN.',
150
+ attemptsRemaining,
151
+ };
152
+ }
153
+ // Constant-time comparison
154
+ const providedBuffer = Buffer.from(pin, 'utf-8');
155
+ const expectedBuffer = Buffer.from(this.activePin.pin, 'utf-8');
156
+ let isValid = false;
157
+ try {
158
+ // timingSafeEqual requires buffers of same length
159
+ if (providedBuffer.length === expectedBuffer.length) {
160
+ isValid = timingSafeEqual(providedBuffer, expectedBuffer);
161
+ }
162
+ }
163
+ catch (error) {
164
+ isValid = false;
165
+ }
166
+ if (!isValid) {
167
+ // Increment attempts
168
+ this.activePin.attempts++;
169
+ const pinAttemptsRemaining = MAX_PIN_ATTEMPTS - this.activePin.attempts;
170
+ console.warn(`[PinAuth] Invalid PIN attempt from ${clientIp} (${pinAttemptsRemaining} attempts remaining for this PIN)`);
171
+ return {
172
+ success: false,
173
+ error: 'Invalid PIN. Please try again.',
174
+ attemptsRemaining: pinAttemptsRemaining,
175
+ };
176
+ }
177
+ // Success - return token and delete PIN (single-use)
178
+ const token = this.activePin.token;
179
+ this.activePin = null;
180
+ console.log('[PinAuth] PIN validated successfully');
181
+ return {
182
+ success: true,
183
+ token,
184
+ };
185
+ }
186
+ /**
187
+ * Start periodic cleanup of expired data
188
+ */
189
+ startCleanup() {
190
+ // Run cleanup every 2 minutes
191
+ this.cleanupInterval = setInterval(() => {
192
+ const now = Date.now();
193
+ // Clean expired PIN
194
+ if (this.activePin && now >= this.activePin.expiresAt) {
195
+ console.log('[PinAuth] Cleaned up expired PIN');
196
+ this.activePin = null;
197
+ }
198
+ // Clean expired rate limit entries
199
+ for (const [ip, entry] of this.rateLimitMap.entries()) {
200
+ if (now - entry.windowStart > PIN_RATE_LIMIT_WINDOW_MS) {
201
+ this.rateLimitMap.delete(ip);
202
+ }
203
+ }
204
+ }, 2 * 60 * 1000); // 2 minutes
205
+ }
206
+ /**
207
+ * Stop cleanup interval (for graceful shutdown)
208
+ */
209
+ stopCleanup() {
210
+ if (this.cleanupInterval) {
211
+ clearInterval(this.cleanupInterval);
212
+ this.cleanupInterval = null;
213
+ }
214
+ }
215
+ }
216
+ // Singleton instance
217
+ export const pinAuthManager = new PinAuthManager();
218
+ //# sourceMappingURL=pin-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pin-auth.js","sourceRoot":"","sources":["../../src/api/pin-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const apiRouter: import("express-serve-static-core").Router;
2
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,SAAS,4CAAW,CAAC"}