@commit451/salamander 1.0.5 → 1.0.7

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 CHANGED
@@ -1,55 +1,55 @@
1
- # Salamander CLI
2
-
3
- Never be AFK.
4
-
5
- Command-line interface for Salamander AI runners. This tool allows you to run AI-powered command execution on your local machine and receive commands from the Salamander app.
6
-
7
- ## Installation
8
- You should first install [Claude's CLI](https://docs.anthropic.com/en/docs/claude-code/cli-reference) so that your machine has the needed `claude` command available.
9
-
10
- ```bash
11
- npm install -g @commit451/salamander
12
- ```
13
-
14
- ## Usage
15
-
16
- ### Start the CLI (main interface)
17
- ```bash
18
- salamander
19
- ```
20
-
21
- ### Create a new runner
22
- ```bash
23
- salamander create
24
- ```
25
-
26
- ### Start runner selection
27
- ```bash
28
- salamander start
29
- ```
30
-
31
- ### Logout
32
- ```bash
33
- salamander logout
34
- ```
35
-
36
- ## Development
37
-
38
- ```bash
39
- # Install dependencies
40
- npm install
41
-
42
- # Run in development mode
43
- npm run dev
44
-
45
- # Build the project
46
- npm run build
47
-
48
- # Run the built version
49
- npm start
50
- ```
51
-
52
- ## Publish
53
- ```
54
- npm run pub
55
- ```
1
+ # Salamander CLI
2
+
3
+ Never be AFK.
4
+
5
+ Command-line interface for Salamander AI runners. This tool allows you to run AI-powered command execution on your local machine and receive commands from the Salamander app.
6
+
7
+ ## Installation
8
+ You should first install [Claude's CLI](https://docs.anthropic.com/en/docs/claude-code/cli-reference) so that your machine has the needed `claude` command available.
9
+
10
+ ```bash
11
+ npm install -g @commit451/salamander
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ ### Start the CLI (main interface)
17
+ ```bash
18
+ salamander
19
+ ```
20
+
21
+ ### Create a new runner
22
+ ```bash
23
+ salamander create
24
+ ```
25
+
26
+ ### Start runner selection
27
+ ```bash
28
+ salamander start
29
+ ```
30
+
31
+ ### Logout
32
+ ```bash
33
+ salamander logout
34
+ ```
35
+
36
+ ## Development
37
+
38
+ ```bash
39
+ # Install dependencies
40
+ npm install
41
+
42
+ # Run in development mode
43
+ npm run dev
44
+
45
+ # Build the project
46
+ npm run build
47
+
48
+ # Run the built version
49
+ npm start
50
+ ```
51
+
52
+ ## Publish
53
+ ```
54
+ npm run pub
55
+ ```
package/bin/salamander.js CHANGED
@@ -1,2 +1,2 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
  import('../dist/index.js').then(m => m.default()).catch(console.error);
@@ -1 +1 @@
1
- {"version":3,"file":"create-runner.d.ts","sourceRoot":"","sources":["../../src/commands/create-runner.ts"],"names":[],"mappings":"AAOA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuDtD"}
1
+ {"version":3,"file":"create-runner.d.ts","sourceRoot":"","sources":["../../src/commands/create-runner.ts"],"names":[],"mappings":"AAQA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAyEtD"}
@@ -3,11 +3,27 @@ import { resolve } from 'path';
3
3
  import { access } from 'fs/promises';
4
4
  import chalk from 'chalk';
5
5
  import { RunnerService } from '../services/runner.js';
6
+ import { UserService } from '../services/user.js';
6
7
  import { RunnerType } from '../types/runner.js';
7
8
  export async function createRunnerFlow() {
8
9
  console.log(chalk.blue('\n🚀 Create New Runner'));
9
10
  console.log('Set up a new runner to execute commands in a specific directory.\n');
10
11
  try {
12
+ // Check user's remaining runners
13
+ const user = await UserService.getCurrentUser();
14
+ if (!user) {
15
+ console.error(chalk.red('❌ Unable to fetch user information'));
16
+ console.log('');
17
+ return;
18
+ }
19
+ console.log(chalk.gray(`Runners remaining: ${user.runnersRemaining}`));
20
+ if (user.runnersRemaining <= 0) {
21
+ console.error(chalk.red('❌ You have reached your runner limit and cannot create more runners. Please delete a runner, or you can purchase a Pro plan to get 25 total runners, or contact us'));
22
+ console.error(chalk.yellow('https://salamander.space'));
23
+ console.log('');
24
+ return;
25
+ }
26
+ console.log('');
11
27
  // Get runner name
12
28
  const name = await input({
13
29
  message: 'Runner name:',
@@ -1 +1 @@
1
- {"version":3,"file":"create-runner.js","sourceRoot":"","sources":["../../src/commands/create-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAElF,IAAI,CAAC;QACD,kBAAkB;QAClB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC;YACrB,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;oBAChB,OAAO,4BAA4B,CAAC;gBACxC,CAAC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC;SACJ,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC;YAC/B,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;YACtB,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtB,IAAI,CAAC;oBACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;oBAChC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACvB,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAAC,MAAM,CAAC;oBACL,OAAO,+CAA+C,CAAC;gBAC3D,CAAC;YACL,CAAC;SACJ,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;QAE1C,gCAAgC;QAChC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;QAErC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YACjB,SAAS;YACT,UAAU;SACb,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IAEzE,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"create-runner.js","sourceRoot":"","sources":["../../src/commands/create-runner.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAqIA,MAAM,CAAC,OAAO,UAAU,IAAI,SAE3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA0IA,MAAM,CAAC,OAAO,UAAU,IAAI,SAE3B"}
package/dist/index.js CHANGED
@@ -10,6 +10,7 @@ import { runnerSelectionFlow } from './commands/runner-selection.js';
10
10
  import { createRunnerFlow } from './commands/create-runner.js';
11
11
  import { deleteRunnerFlow } from './commands/delete-runner.js';
12
12
  import { isVersionOutdated } from './utils/version.js';
13
+ import { generateDeviceId } from './utils/device.js';
13
14
  const __dirname = dirname(fileURLToPath(import.meta.url));
14
15
  const packageJsonPath = join(__dirname, '..', 'package.json');
15
16
  const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
@@ -83,6 +84,9 @@ async function initializeAndRun(action) {
83
84
  // Fetch global configuration first
84
85
  await ConfigService.fetchConfig();
85
86
  console.log(chalk.gray('✓ Global config loaded'));
87
+ // Print machine ID for debugging
88
+ const machineId = generateDeviceId();
89
+ console.log(chalk.gray(`🖥️ Machine ID: ${machineId}`));
86
90
  // Check if app is disabled
87
91
  if (ConfigService.isAppDisabled()) {
88
92
  console.log(chalk.red('❌ Salamander CLI is currently disabled. Please try again later.'));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ interface CreateRunnerRequest {
2
+ directory: string;
3
+ machineId: string;
4
+ machineName: string;
5
+ name: string;
6
+ }
7
+ interface UpdateRunnerRequest {
8
+ name?: string;
9
+ clearPendingCommand?: boolean | null;
10
+ updateLastUsed?: boolean | null;
11
+ lastMessage?: string;
12
+ }
13
+ export declare class ApiService {
14
+ private static getAuthToken;
15
+ private static makeRequest;
16
+ static createRunner(request: CreateRunnerRequest): Promise<any>;
17
+ static updateRunner(runnerId: string, request: UpdateRunnerRequest): Promise<any>;
18
+ static deleteRunner(runnerId: string): Promise<void>;
19
+ }
20
+ export {};
21
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"AAeA,UAAU,mBAAmB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,mBAAmB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,cAAc,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,UAAU;mBACE,YAAY;mBAUZ,WAAW;WAwCnB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;WAOxD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;WAO1E,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK7D"}
@@ -0,0 +1,68 @@
1
+ import { AuthService } from './auth.js';
2
+ const API_BASE_URL = 'https://api.salamander.space/v1';
3
+ class ApiError extends Error {
4
+ status;
5
+ response;
6
+ constructor(message, status, response) {
7
+ super(message);
8
+ this.status = status;
9
+ this.response = response;
10
+ this.name = 'ApiError';
11
+ }
12
+ }
13
+ export class ApiService {
14
+ static async getAuthToken() {
15
+ await AuthService.initialize();
16
+ if (!AuthService.isAuthenticated || !AuthService.user) {
17
+ throw new Error('User not authenticated');
18
+ }
19
+ return await AuthService.user.getIdToken();
20
+ }
21
+ static async makeRequest(endpoint, options = {}) {
22
+ const token = await this.getAuthToken();
23
+ const url = `${API_BASE_URL}${endpoint}`;
24
+ const config = {
25
+ ...options,
26
+ headers: {
27
+ 'Authorization': `Bearer ${token}`,
28
+ 'Content-Type': 'application/json',
29
+ ...options.headers,
30
+ },
31
+ };
32
+ const response = await fetch(url, config);
33
+ if (!response.ok) {
34
+ let errorMessage = `HTTP ${response.status}`;
35
+ let errorResponse;
36
+ try {
37
+ errorResponse = await response.json();
38
+ errorMessage = errorResponse.message || errorMessage;
39
+ }
40
+ catch {
41
+ errorMessage = await response.text() || errorMessage;
42
+ }
43
+ throw new ApiError(errorMessage, response.status, errorResponse);
44
+ }
45
+ if (response.status === 204) {
46
+ return {};
47
+ }
48
+ return await response.json();
49
+ }
50
+ static async createRunner(request) {
51
+ return await this.makeRequest('/runner', {
52
+ method: 'POST',
53
+ body: JSON.stringify(request),
54
+ });
55
+ }
56
+ static async updateRunner(runnerId, request) {
57
+ return await this.makeRequest(`/runner/${runnerId}`, {
58
+ method: 'PATCH',
59
+ body: JSON.stringify(request),
60
+ });
61
+ }
62
+ static async deleteRunner(runnerId) {
63
+ await this.makeRequest(`/runner/${runnerId}`, {
64
+ method: 'DELETE',
65
+ });
66
+ }
67
+ }
68
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAEtC,MAAM,YAAY,GAAG,iCAAiC,CAAC;AAEvD,MAAM,QAAS,SAAQ,KAAK;IAGb;IACA;IAHX,YACI,OAAe,EACR,MAAc,EACd,QAAc;QAErB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAM;QAGrB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IAC3B,CAAC;CACJ;AAgBD,MAAM,OAAO,UAAU;IACX,MAAM,CAAC,KAAK,CAAC,YAAY;QAC7B,MAAM,WAAW,CAAC,UAAU,EAAE,CAAC;QAE/B,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,MAAM,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IAC/C,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,WAAW,CAC5B,QAAgB,EAChB,UAAuB,EAAE;QAEzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAExC,MAAM,GAAG,GAAG,GAAG,YAAY,GAAG,QAAQ,EAAE,CAAC;QAEzC,MAAM,MAAM,GAAgB;YACxB,GAAG,OAAO;YACV,OAAO,EAAE;gBACL,eAAe,EAAE,UAAU,KAAK,EAAE;gBAClC,cAAc,EAAE,kBAAkB;gBAClC,GAAG,OAAO,CAAC,OAAO;aACrB;SACJ,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,IAAI,YAAY,GAAG,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,aAAa,CAAC;YAElB,IAAI,CAAC;gBACD,aAAa,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACtC,YAAY,GAAG,aAAa,CAAC,OAAO,IAAI,YAAY,CAAC;YACzD,CAAC;YAAC,MAAM,CAAC;gBACL,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC;YACzD,CAAC;YAED,MAAM,IAAI,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,OAAO,EAAO,CAAC;QACnB,CAAC;QAED,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,OAA4B;QAClD,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAChC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,OAA4B;QACpE,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,QAAQ,EAAE,EAAE;YACjD,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAChC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,QAAgB;QACtC,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,QAAQ,EAAE,EAAE;YAC1C,MAAM,EAAE,QAAQ;SACnB,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -58,34 +58,34 @@ export class AuthService {
58
58
  }
59
59
  if (code) {
60
60
  res.writeHead(200, { 'Content-Type': 'text/html' });
61
- res.end(`
62
- <!DOCTYPE html>
63
- <html>
64
- <head>
65
- <title>Authentication Successful</title>
66
- <style>
67
- body {
68
- background-color: #000000;
69
- color: #ffffff;
70
- font-family: Arial, sans-serif;
71
- text-align: center;
72
- padding: 50px;
73
- margin: 0;
74
- }
75
- h1 {
76
- font-size: 2.5em;
77
- margin-bottom: 20px;
78
- }
79
- p {
80
- font-size: 1.2em;
81
- }
82
- </style>
83
- </head>
84
- <body>
85
- <h1>Authentication Successful!</h1>
86
- <p>You can close this window and return to the CLI.</p>
87
- </body>
88
- </html>
61
+ res.end(`
62
+ <!DOCTYPE html>
63
+ <html>
64
+ <head>
65
+ <title>Authentication Successful</title>
66
+ <style>
67
+ body {
68
+ background-color: #000000;
69
+ color: #ffffff;
70
+ font-family: Arial, sans-serif;
71
+ text-align: center;
72
+ padding: 50px;
73
+ margin: 0;
74
+ }
75
+ h1 {
76
+ font-size: 2.5em;
77
+ margin-bottom: 20px;
78
+ }
79
+ p {
80
+ font-size: 1.2em;
81
+ }
82
+ </style>
83
+ </head>
84
+ <body>
85
+ <h1>Authentication Successful!</h1>
86
+ <p>You can close this window and return to the CLI.</p>
87
+ </body>
88
+ </html>
89
89
  `);
90
90
  authCodeResolve(code);
91
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command-listener.d.ts","sourceRoot":"","sources":["../../src/services/command-listener.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAK1C,qBAAa,eAAe;IACxB,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,cAAc,CAAS;IAEzB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2F7C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAcvD"}
1
+ {"version":3,"file":"command-listener.d.ts","sourceRoot":"","sources":["../../src/services/command-listener.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAK1C,qBAAa,eAAe;IACxB,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,cAAc,CAAS;IAEzB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiG7C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQvD"}
@@ -15,8 +15,6 @@ export class CommandListener {
15
15
  if (runner.machineId !== deviceId) {
16
16
  throw new Error('Cannot listen to non-local runner');
17
17
  }
18
- // Set runner as online
19
- await RunnerService.setRunnerOnline(runner.id);
20
18
  console.log(chalk.blue(`👂 Started listening for commands on runner "${runner.name}"`));
21
19
  console.log(chalk.gray(` Directory: ${runner.directory}`));
22
20
  console.log(chalk.gray(` Type: ${runner.runnerType}`));
@@ -41,7 +39,7 @@ export class CommandListener {
41
39
  // Create assistant message for the result
42
40
  await RunnerService.createMessage({
43
41
  content: result.output,
44
- senderName: '',
42
+ senderName: runner.name,
45
43
  type: 'runner',
46
44
  runnerId: runner.id
47
45
  });
@@ -57,7 +55,7 @@ export class CommandListener {
57
55
  // Create assistant message for the error
58
56
  await RunnerService.createMessage({
59
57
  content: errorMessage,
60
- senderName: '',
58
+ senderName: runner.name,
61
59
  type: 'runner',
62
60
  runnerId: runner.id
63
61
  });
@@ -78,21 +76,20 @@ export class CommandListener {
78
76
  console.log(chalk.blue(`👋 Stopped runner "${runner.name}"`));
79
77
  process.exit(0);
80
78
  };
79
+ // Remove any existing listeners for these signals to avoid duplicates
80
+ process.removeAllListeners('SIGINT');
81
+ process.removeAllListeners('SIGTERM');
81
82
  process.on('SIGINT', cleanup);
82
83
  process.on('SIGTERM', cleanup);
84
+ // Also handle uncaught exceptions
85
+ process.on('uncaughtException', cleanup);
86
+ process.on('unhandledRejection', cleanup);
83
87
  }
84
88
  async stopListening(runnerId) {
85
89
  const unsubscribe = this.activeListeners.get(runnerId);
86
90
  if (unsubscribe) {
87
91
  unsubscribe();
88
92
  this.activeListeners.delete(runnerId);
89
- // Set runner as offline
90
- try {
91
- await RunnerService.setRunnerOffline(runnerId);
92
- }
93
- catch (error) {
94
- console.error(chalk.red('Failed to set runner offline'));
95
- }
96
93
  }
97
94
  }
98
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command-listener.js","sourceRoot":"","sources":["../../src/services/command-listener.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-listener.js","sourceRoot":"","sources":["../../src/services/command-listener.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,8 @@ export declare class RunnerService {
5
5
  static getAllRunners(): Promise<Runner[]>;
6
6
  static createRunner(data: CreateRunnerData): Promise<Runner>;
7
7
  static deleteRunner(runnerId: string): Promise<void>;
8
- static sendCommand(runnerId: string, command: string): Promise<void>;
9
8
  static clearPendingCommand(runnerId: string): Promise<void>;
10
9
  static updateRunnerAfterCommand(runnerId: string, result: string): Promise<void>;
11
- static setRunnerOnline(runnerId: string): Promise<void>;
12
- static setRunnerOffline(runnerId: string): Promise<void>;
13
10
  static createMessage(data: CreateMessageData): Promise<Message>;
14
11
  static listenToRunner(runnerId: string, callback: (runner: Runner | null) => void): () => void;
15
12
  private static docToRunner;
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/services/runner.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,oBAAoB,CAAC;AAIxH,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAa;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAc;WAE5C,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;WAkBlC,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;WAsDrD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAwB7C,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAO7D,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAOpD,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAQzE,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAOhD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAOjD,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkCrE,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI;IAa9F,OAAO,CAAC,MAAM,CAAC,WAAW;IAiB1B,OAAO,CAAC,MAAM,CAAC,eAAe;CAWjC"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/services/runner.ts"],"names":[],"mappings":"AAcA,OAAO,EAAC,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,oBAAoB,CAAC;AAGxH,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAa;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAc;WAE5C,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;WAkBlC,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;WAiCrD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAK7C,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAMpD,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAQzE,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkCrE,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI;IAa9F,OAAO,CAAC,MAAM,CAAC,WAAW;IAiB1B,OAAO,CAAC,MAAM,CAAC,eAAe;CAWjC"}
@@ -1,9 +1,9 @@
1
- import { addDoc, collection, doc, getDocs, onSnapshot, orderBy, query, serverTimestamp, updateDoc, where, writeBatch } from 'firebase/firestore';
1
+ import { addDoc, collection, doc, getDocs, onSnapshot, orderBy, query, serverTimestamp, where, } from 'firebase/firestore';
2
2
  import { db } from '../config/firebase.js';
3
3
  import { AuthService } from './auth.js';
4
+ import { ApiService } from './api.js';
4
5
  import { RunnerType } from '../types/runner.js';
5
6
  import { generateDeviceId, getDeviceDisplayName } from '../utils/device.js';
6
- import { loadRunners, saveRunners } from '../utils/storage.js';
7
7
  export class RunnerService {
8
8
  static RUNNERS_COLLECTION = 'runners';
9
9
  static MESSAGES_COLLECTION = 'messages';
@@ -24,33 +24,14 @@ export class RunnerService {
24
24
  }
25
25
  const deviceId = generateDeviceId();
26
26
  const deviceName = getDeviceDisplayName();
27
- const runnerData = {
27
+ // Create runner via API
28
+ const response = await ApiService.createRunner({
28
29
  name: data.name,
29
30
  directory: data.directory,
30
- userId,
31
- runnerType: data.runnerType,
32
- createdAt: serverTimestamp(),
33
- lastUsed: serverTimestamp(),
34
31
  machineId: deviceId,
35
- machineName: deviceName,
36
- lastMessage: null,
37
- pendingCommand: null,
38
- online: false
39
- };
40
- const docRef = await addDoc(collection(db, this.RUNNERS_COLLECTION), runnerData);
41
- const runnerId = docRef.id;
42
- // Store locally as well
43
- const storedRunner = {
44
- id: runnerId,
45
- name: data.name,
46
- directory: data.directory,
47
- runnerType: data.runnerType,
48
- machineId: deviceId,
49
- createdAt: new Date().toISOString()
50
- };
51
- const localRunners = await loadRunners();
52
- localRunners.push(storedRunner);
53
- await saveRunners(localRunners);
32
+ machineName: deviceName
33
+ });
34
+ const runnerId = response.id;
54
35
  return {
55
36
  id: runnerId,
56
37
  name: data.name,
@@ -65,54 +46,20 @@ export class RunnerService {
65
46
  };
66
47
  }
67
48
  static async deleteRunner(runnerId) {
68
- const batch = writeBatch(db);
69
- // Delete all messages in the subcollection
70
- const runnerDocRef = doc(db, this.RUNNERS_COLLECTION, runnerId);
71
- const messagesCollectionRef = collection(runnerDocRef, this.MESSAGES_COLLECTION);
72
- const messagesSnapshot = await getDocs(messagesCollectionRef);
73
- for (const messageDoc of messagesSnapshot.docs) {
74
- batch.delete(messageDoc.ref);
75
- }
76
- // Delete the runner document
77
- batch.delete(runnerDocRef);
78
- // Commit the batch
79
- await batch.commit();
80
- // Remove from local storage
81
- const localRunners = await loadRunners();
82
- const filteredRunners = localRunners.filter(r => r.id !== runnerId);
83
- await saveRunners(filteredRunners);
84
- }
85
- static async sendCommand(runnerId, command) {
86
- const runnerDoc = doc(db, this.RUNNERS_COLLECTION, runnerId);
87
- await updateDoc(runnerDoc, {
88
- pendingCommand: command
89
- });
49
+ // Call the API to delete the runner
50
+ await ApiService.deleteRunner(runnerId);
90
51
  }
91
52
  static async clearPendingCommand(runnerId) {
92
- const runnerDoc = doc(db, this.RUNNERS_COLLECTION, runnerId);
93
- await updateDoc(runnerDoc, {
94
- pendingCommand: null
53
+ await ApiService.updateRunner(runnerId, {
54
+ clearPendingCommand: true
95
55
  });
96
56
  }
97
57
  static async updateRunnerAfterCommand(runnerId, result) {
98
- const runnerDoc = doc(db, this.RUNNERS_COLLECTION, runnerId);
99
- await updateDoc(runnerDoc, {
100
- lastUsed: serverTimestamp(),
58
+ await ApiService.updateRunner(runnerId, {
59
+ updateLastUsed: true,
101
60
  lastMessage: result ?? ''
102
61
  });
103
62
  }
104
- static async setRunnerOnline(runnerId) {
105
- const runnerDoc = doc(db, this.RUNNERS_COLLECTION, runnerId);
106
- await updateDoc(runnerDoc, {
107
- online: true
108
- });
109
- }
110
- static async setRunnerOffline(runnerId) {
111
- const runnerDoc = doc(db, this.RUNNERS_COLLECTION, runnerId);
112
- await updateDoc(runnerDoc, {
113
- online: false
114
- });
115
- }
116
63
  static async createMessage(data) {
117
64
  const userId = AuthService.userId;
118
65
  if (!userId) {
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/services/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/services/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,UAAU,EACV,GAAG,EACH,OAAO,EACP,UAAU,EACV,OAAO,EACP,KAAK,EACL,eAAe,EACf,KAAK,GACR,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,EAAE,EAAC,MAAM,uBAAuB,CAAC;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AACtC,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAA2E,UAAU,EAAC,MAAM,oBAAoB,CAAC;AACxH,OAAO,EAAC,gBAAgB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAE1E,MAAM,OAAO,aAAa;IACd,MAAM,CAAU,kBAAkB,GAAG,SAAS,CAAC;IAC/C,MAAM,CAAU,mBAAmB,GAAG,UAAU,CAAC;IAEzD,MAAM,CAAC,KAAK,CAAC,aAAa;QACtB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QAClC,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,CAAC,GAAG,KAAK,CACX,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,EACvC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAC7B,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,EAClC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAC9B,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAsB;QAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;QAE1C,wBAAwB;QACxB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC;YAC3C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,UAAU;SAC1B,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC;QAE7B,OAAO;YACH,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,QAAQ,EAAE,IAAI,IAAI,EAAE;YACpB,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,UAAU;YACvB,MAAM,EAAE,KAAK;SAChB,CAAC;IACN,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,QAAgB;QACtC,oCAAoC;QACpC,MAAM,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAgB;QAC7C,MAAM,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE;YACpC,mBAAmB,EAAE,IAAI;SAC5B,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,QAAgB,EAAE,MAAc;QAClE,MAAM,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE;YACpC,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,MAAM,IAAI,EAAE;SAC5B,CAAC,CAAC;IACP,CAAC;IAGD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAuB;QAC9C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,WAAW,GAAG;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YACjC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM;YACN,SAAS,EAAE,eAAe,EAAE;SAC/B,CAAC;QAEF,uDAAuD;QACvD,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,qBAAqB,GAAG,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;QAEhE,OAAO;YACH,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SAC1B,CAAC;IACN,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,QAAgB,EAAE,QAAyC;QAC7E,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAE7D,OAAO,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YACjC,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;gBACf,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpD,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACJ,QAAQ,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,IAAS,EAAE,EAAU;QAC5C,OAAO;YACH,EAAE;YACF,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;YACzB,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;YACjD,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,IAAI;YAC3C,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,IAAI;YACzC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS;YAC1C,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS;YAC1C,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;YACtC,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,SAAS;YAChD,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;SAC/B,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,IAAY;QACvC,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,OAAO;gBACR,OAAO,UAAU,CAAC,KAAK,CAAC;YAC5B,KAAK,QAAQ;gBACT,OAAO,UAAU,CAAC,MAAM,CAAC;YAC7B,KAAK,QAAQ,CAAC;YACd;gBACI,OAAO,UAAU,CAAC,MAAM,CAAC;QACjC,CAAC;IACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type User } from '../types/runner.js';
2
+ export declare class UserService {
3
+ private static readonly USERS_COLLECTION;
4
+ static getCurrentUser(): Promise<User | null>;
5
+ private static docToUser;
6
+ }
7
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/services/user.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,KAAK,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAE7C,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAW;WAEtC,cAAc,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAiBnD,OAAO,CAAC,MAAM,CAAC,SAAS;CAS3B"}
@@ -0,0 +1,29 @@
1
+ import { doc, getDoc } from 'firebase/firestore';
2
+ import { db } from '../config/firebase.js';
3
+ import { AuthService } from './auth.js';
4
+ export class UserService {
5
+ static USERS_COLLECTION = 'users';
6
+ static async getCurrentUser() {
7
+ const userId = AuthService.userId;
8
+ if (!userId) {
9
+ throw new Error('User not authenticated');
10
+ }
11
+ const userDoc = doc(db, this.USERS_COLLECTION, userId);
12
+ const docSnapshot = await getDoc(userDoc);
13
+ if (!docSnapshot.exists()) {
14
+ return null;
15
+ }
16
+ const data = docSnapshot.data();
17
+ return this.docToUser(data, docSnapshot.id);
18
+ }
19
+ static docToUser(data, id) {
20
+ return {
21
+ id,
22
+ email: data.email || '',
23
+ runnersRemaining: data.runnersRemaining || 0,
24
+ createdAt: data.createdAt?.toDate() || null,
25
+ lastUsed: data.lastUsed?.toDate() || null,
26
+ };
27
+ }
28
+ }
29
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/services/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAC,EAAE,EAAC,MAAM,uBAAuB,CAAC;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAGtC,MAAM,OAAO,WAAW;IACZ,MAAM,CAAU,gBAAgB,GAAG,OAAO,CAAC;IAEnD,MAAM,CAAC,KAAK,CAAC,cAAc;QACvB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAE1C,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAEO,MAAM,CAAC,SAAS,CAAC,IAAS,EAAE,EAAU;QAC1C,OAAO;YACH,EAAE;YACF,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;YACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,CAAC;YAC5C,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,IAAI;YAC3C,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,IAAI;SAC5C,CAAC;IACN,CAAC"}
@@ -37,4 +37,11 @@ export interface CreateMessageData {
37
37
  type: 'user' | 'runner' | 'error';
38
38
  runnerId: string;
39
39
  }
40
+ export interface User {
41
+ id: string;
42
+ email: string;
43
+ runnersRemaining: number;
44
+ createdAt: Date | null;
45
+ lastUsed: Date | null;
46
+ }
40
47
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/types/runner.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IAClB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,MAAM,WAAW;CACpB;AAED,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;CAC1B;AAED,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/types/runner.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IAClB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,MAAM,WAAW;CACpB;AAED,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;CAC1B;AAED,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB"}
@@ -1,7 +1,7 @@
1
1
  import { hostname, platform } from 'os';
2
2
  import { createHash } from 'crypto';
3
3
  export function getDeviceDisplayName() {
4
- return `${hostname()} (${platform()})`;
4
+ return hostname();
5
5
  }
6
6
  export function generateDeviceId() {
7
7
  const deviceInfo = `${hostname()}-${platform()}`;
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/utils/device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAC,MAAM,IAAI,CAAC;AACtC,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAC;AAElC,MAAM,UAAU,oBAAoB;IAChC,OAAO,GAAG,QAAQ,EAAE,KAAK,QAAQ,EAAE,GAAG,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC5B,MAAM,UAAU,GAAG,GAAG,QAAQ,EAAE,IAAI,QAAQ,EAAE,EAAE,CAAC;IACjD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/utils/device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAC,MAAM,IAAI,CAAC;AACtC,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAC;AAElC,MAAM,UAAU,oBAAoB;IAChC,OAAO,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC5B,MAAM,UAAU,GAAG,GAAG,QAAQ,EAAE,IAAI,QAAQ,EAAE,EAAE,CAAC;IACjD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC"}
@@ -1,19 +1,9 @@
1
- export interface StoredRunner {
2
- id: string;
3
- name: string;
4
- directory: string;
5
- runnerType: string;
6
- machineId: string;
7
- createdAt: string;
8
- }
9
1
  export interface StoredAuth {
10
2
  refreshToken?: string;
11
3
  accessToken?: string;
12
4
  userId?: string;
13
5
  email?: string;
14
6
  }
15
- export declare function saveRunners(runners: StoredRunner[]): Promise<void>;
16
- export declare function loadRunners(): Promise<StoredRunner[]>;
17
7
  export declare function saveAuth(auth: StoredAuth): Promise<void>;
18
8
  export declare function loadAuth(): Promise<StoredAuth | null>;
19
9
  export declare function clearAuth(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/utils/storage.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAO3D;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9D;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAO3D;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAM/C"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/utils/storage.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,UAAU;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAWD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9D;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAO3D;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAM/C"}
@@ -2,7 +2,6 @@ import { promises as fs } from 'fs';
2
2
  import { join } from 'path';
3
3
  import { homedir } from 'os';
4
4
  const CONFIG_DIR = join(homedir(), '.salamander');
5
- const RUNNERS_FILE = join(CONFIG_DIR, 'runners.json');
6
5
  const AUTH_FILE = join(CONFIG_DIR, 'auth.json');
7
6
  async function ensureConfigDir() {
8
7
  try {
@@ -12,19 +11,6 @@ async function ensureConfigDir() {
12
11
  await fs.mkdir(CONFIG_DIR, { recursive: true });
13
12
  }
14
13
  }
15
- export async function saveRunners(runners) {
16
- await ensureConfigDir();
17
- await fs.writeFile(RUNNERS_FILE, JSON.stringify(runners, null, 2));
18
- }
19
- export async function loadRunners() {
20
- try {
21
- const data = await fs.readFile(RUNNERS_FILE, 'utf-8');
22
- return JSON.parse(data);
23
- }
24
- catch {
25
- return [];
26
- }
27
- }
28
14
  export async function saveAuth(auth) {
29
15
  await ensureConfigDir();
30
16
  await fs.writeFile(AUTH_FILE, JSON.stringify(auth, null, 2));
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/utils/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,IAAI,EAAE,EAAC,MAAM,IAAI,CAAC;AAClC,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAC,OAAO,EAAC,MAAM,IAAI,CAAC;AAE3B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAClD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AACtD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAkBhD,KAAK,UAAU,eAAe;IAC1B,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAClD,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB;IACrD,MAAM,eAAe,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAgB;IAC3C,MAAM,eAAe,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC1B,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACL,oCAAoC;IACxC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/utils/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,IAAI,EAAE,EAAC,MAAM,IAAI,CAAC;AAClC,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAC,OAAO,EAAC,MAAM,IAAI,CAAC;AAE3B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAUhD,KAAK,UAAU,eAAe;IAC1B,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAClD,CAAC;AACL,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAgB;IAC3C,MAAM,eAAe,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC1B,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACL,oCAAoC;IACxC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,54 +1,54 @@
1
- {
2
- "name": "@commit451/salamander",
3
- "version": "1.0.5",
4
- "description": "Never be AFK",
5
- "main": "dist/index.js",
6
- "type": "module",
7
- "bin": {
8
- "salamander": "bin/salamander.js"
9
- },
10
- "scripts": {
11
- "build": "tsc",
12
- "dev": "tsx src/index.ts",
13
- "start": "node dist/index.js",
14
- "prepare": "npm run build",
15
- "pub": "npm publish --access public"
16
- },
17
- "engines": {
18
- "node": ">=18.0.0"
19
- },
20
- "dependencies": {
21
- "@inquirer/prompts": "^7.8.4",
22
- "chalk": "^5.6.2",
23
- "commander": "^14.0.0",
24
- "firebase": "^12.2.1",
25
- "uuid": "^13.0.0"
26
- },
27
- "devDependencies": {
28
- "@types/node": "^24.3.1",
29
- "@types/uuid": "^10.0.0",
30
- "tsx": "^4.20.5",
31
- "typescript": "^5.9.2"
32
- },
33
- "keywords": [
34
- "cli",
35
- "afk",
36
- "automation",
37
- "tool"
38
- ],
39
- "author": "",
40
- "license": "ISC",
41
- "repository": {
42
- "type": "git",
43
- "url": ""
44
- },
45
- "homepage": "",
46
- "bugs": {
47
- "url": ""
48
- },
49
- "files": [
50
- "dist/**/*",
51
- "bin/**/*",
52
- "README.md"
53
- ]
54
- }
1
+ {
2
+ "name": "@commit451/salamander",
3
+ "version": "1.0.7",
4
+ "description": "Never be AFK",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "bin": {
8
+ "salamander": "bin/salamander.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsx src/index.ts",
13
+ "start": "node dist/index.js",
14
+ "prepare": "npm run build",
15
+ "pub": "npm publish --access public"
16
+ },
17
+ "engines": {
18
+ "node": ">=18.0.0"
19
+ },
20
+ "dependencies": {
21
+ "@inquirer/prompts": "^7.8.4",
22
+ "chalk": "^5.6.2",
23
+ "commander": "^14.0.0",
24
+ "firebase": "^12.2.1",
25
+ "uuid": "^13.0.0"
26
+ },
27
+ "devDependencies": {
28
+ "@types/node": "^24.3.1",
29
+ "@types/uuid": "^10.0.0",
30
+ "tsx": "^4.20.5",
31
+ "typescript": "^5.9.2"
32
+ },
33
+ "keywords": [
34
+ "cli",
35
+ "afk",
36
+ "automation",
37
+ "tool"
38
+ ],
39
+ "author": "",
40
+ "license": "ISC",
41
+ "repository": {
42
+ "type": "git",
43
+ "url": ""
44
+ },
45
+ "homepage": "",
46
+ "bugs": {
47
+ "url": ""
48
+ },
49
+ "files": [
50
+ "dist/**/*",
51
+ "bin/**/*",
52
+ "README.md"
53
+ ]
54
+ }