sphereai-cli 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 (70) hide show
  1. package/README.md +529 -0
  2. package/dist/commands/auth.d.ts +3 -0
  3. package/dist/commands/auth.d.ts.map +1 -0
  4. package/dist/commands/auth.js +194 -0
  5. package/dist/commands/auth.js.map +1 -0
  6. package/dist/commands/execute.d.ts +3 -0
  7. package/dist/commands/execute.d.ts.map +1 -0
  8. package/dist/commands/execute.js +165 -0
  9. package/dist/commands/execute.js.map +1 -0
  10. package/dist/commands/files.d.ts +3 -0
  11. package/dist/commands/files.d.ts.map +1 -0
  12. package/dist/commands/files.js +235 -0
  13. package/dist/commands/files.js.map +1 -0
  14. package/dist/commands/models.d.ts +3 -0
  15. package/dist/commands/models.d.ts.map +1 -0
  16. package/dist/commands/models.js +70 -0
  17. package/dist/commands/models.js.map +1 -0
  18. package/dist/commands/prompts.d.ts +3 -0
  19. package/dist/commands/prompts.d.ts.map +1 -0
  20. package/dist/commands/prompts.js +72 -0
  21. package/dist/commands/prompts.js.map +1 -0
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +103 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/services/api-client.d.ts +16 -0
  27. package/dist/services/api-client.d.ts.map +1 -0
  28. package/dist/services/api-client.js +125 -0
  29. package/dist/services/api-client.js.map +1 -0
  30. package/dist/services/auth-service.d.ts +28 -0
  31. package/dist/services/auth-service.d.ts.map +1 -0
  32. package/dist/services/auth-service.js +171 -0
  33. package/dist/services/auth-service.js.map +1 -0
  34. package/dist/services/cli-api-client.d.ts +20 -0
  35. package/dist/services/cli-api-client.d.ts.map +1 -0
  36. package/dist/services/cli-api-client.js +83 -0
  37. package/dist/services/cli-api-client.js.map +1 -0
  38. package/dist/services/config-service.d.ts +43 -0
  39. package/dist/services/config-service.d.ts.map +1 -0
  40. package/dist/services/config-service.js +97 -0
  41. package/dist/services/config-service.js.map +1 -0
  42. package/dist/services/file-tracking-service.d.ts +62 -0
  43. package/dist/services/file-tracking-service.d.ts.map +1 -0
  44. package/dist/services/file-tracking-service.js +207 -0
  45. package/dist/services/file-tracking-service.js.map +1 -0
  46. package/dist/types/api-types.d.ts +67 -0
  47. package/dist/types/api-types.d.ts.map +1 -0
  48. package/dist/types/api-types.js +10 -0
  49. package/dist/types/api-types.js.map +1 -0
  50. package/dist/utils/errors.d.ts +35 -0
  51. package/dist/utils/errors.d.ts.map +1 -0
  52. package/dist/utils/errors.js +82 -0
  53. package/dist/utils/errors.js.map +1 -0
  54. package/dist/utils/file-walker.d.ts +31 -0
  55. package/dist/utils/file-walker.d.ts.map +1 -0
  56. package/dist/utils/file-walker.js +118 -0
  57. package/dist/utils/file-walker.js.map +1 -0
  58. package/dist/utils/formatters.d.ts +35 -0
  59. package/dist/utils/formatters.d.ts.map +1 -0
  60. package/dist/utils/formatters.js +101 -0
  61. package/dist/utils/formatters.js.map +1 -0
  62. package/dist/utils/ignore-parser.d.ts +21 -0
  63. package/dist/utils/ignore-parser.d.ts.map +1 -0
  64. package/dist/utils/ignore-parser.js +170 -0
  65. package/dist/utils/ignore-parser.js.map +1 -0
  66. package/dist/utils/sphereignore.d.ts +34 -0
  67. package/dist/utils/sphereignore.d.ts.map +1 -0
  68. package/dist/utils/sphereignore.js +148 -0
  69. package/dist/utils/sphereignore.js.map +1 -0
  70. package/package.json +48 -0
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerAuthCommands = registerAuthCommands;
7
+ const ora_1 = __importDefault(require("ora"));
8
+ const config_service_1 = require("../services/config-service");
9
+ const api_client_1 = require("../services/api-client");
10
+ const auth_service_1 = require("../services/auth-service");
11
+ const formatters_1 = require("../utils/formatters");
12
+ const errors_1 = require("../utils/errors");
13
+ function registerAuthCommands(program) {
14
+ const auth = program
15
+ .command('auth')
16
+ .description('Authentication commands');
17
+ // Login command with UserChannelKey (key-based authentication)
18
+ auth
19
+ .command('login')
20
+ .description('Authenticate using UserChannelKey')
21
+ .argument('<key>', 'UserChannelKey for authentication')
22
+ .action(async (key) => {
23
+ try {
24
+ const spinner = (0, ora_1.default)('Authenticating...').start();
25
+ // Authenticate with the API using the key
26
+ const authResponse = await auth_service_1.authService.authenticateWithKey(key);
27
+ // Save token
28
+ config_service_1.configService.setToken(authResponse.jwtToken);
29
+ api_client_1.apiClient.setAuthToken(authResponse.jwtToken);
30
+ // Save user info from auth response
31
+ const user = {
32
+ id: authResponse.userId,
33
+ customerId: authResponse.channelId, // Using channelId as customerId
34
+ customerName: authResponse.channelName,
35
+ name: authResponse.userName,
36
+ email: null,
37
+ role: 'User',
38
+ active: true,
39
+ createdAt: new Date().toISOString(),
40
+ updatedAt: null,
41
+ deletedAt: null
42
+ };
43
+ config_service_1.configService.setUser(user);
44
+ spinner.succeed('Successfully authenticated!');
45
+ (0, formatters_1.success)(`Logged in as: ${authResponse.userName}`);
46
+ (0, formatters_1.info)(`Channel: ${authResponse.channelName}`);
47
+ (0, formatters_1.info)(`Token expires in: ${authResponse.expiresIn} seconds`);
48
+ (0, formatters_1.info)(`Token expiration: ${new Date(authResponse.tokenExpiration).toLocaleString()}`);
49
+ }
50
+ catch (err) {
51
+ (0, errors_1.handleError)(err);
52
+ }
53
+ });
54
+ // Login command with OAuth2 (legacy)
55
+ auth
56
+ .command('login-oauth')
57
+ .description('Authenticate using OAuth2 flow (legacy)')
58
+ .action(async () => {
59
+ try {
60
+ const spinner = (0, ora_1.default)('Authenticating...').start();
61
+ // OAuth2 flow - get URL from config or env
62
+ const authUrl = config_service_1.configService.getAuthUrl();
63
+ if (!authUrl) {
64
+ spinner.stop();
65
+ (0, formatters_1.error)('OAuth2 authorization URL not configured.');
66
+ (0, formatters_1.info)('Please set SPHEREAI_AUTH_URL in your .env file');
67
+ process.exit(1);
68
+ }
69
+ spinner.stop();
70
+ (0, formatters_1.info)('Opening browser for authentication...');
71
+ (0, formatters_1.info)('If the browser does not open automatically, please copy and paste the URL shown.');
72
+ const code = await auth_service_1.authService.startOAuth2Flow(authUrl);
73
+ spinner.start('Exchanging authorization code for token...');
74
+ const token = await auth_service_1.authService.exchangeCodeForToken(code);
75
+ // Save token
76
+ config_service_1.configService.setToken(token);
77
+ api_client_1.apiClient.setAuthToken(token);
78
+ // Try to get user info
79
+ try {
80
+ const user = await api_client_1.apiClient.getCurrentUser();
81
+ config_service_1.configService.setUser(user);
82
+ spinner.succeed('Successfully authenticated!');
83
+ (0, formatters_1.success)(`Logged in as: ${user.email || user.name || 'User'}`);
84
+ }
85
+ catch (err) {
86
+ // If getting user info fails, still consider login successful
87
+ spinner.succeed('Successfully authenticated!');
88
+ (0, formatters_1.success)('Token saved successfully');
89
+ }
90
+ }
91
+ catch (err) {
92
+ (0, errors_1.handleError)(err);
93
+ }
94
+ });
95
+ // Logout command
96
+ auth
97
+ .command('logout')
98
+ .description('Clear stored credentials and logout')
99
+ .action(async () => {
100
+ try {
101
+ const hasToken = config_service_1.configService.hasToken();
102
+ if (!hasToken) {
103
+ (0, formatters_1.info)('You are not currently logged in');
104
+ return;
105
+ }
106
+ config_service_1.configService.clearToken();
107
+ config_service_1.configService.clearUser();
108
+ api_client_1.apiClient.clearAuthToken();
109
+ (0, formatters_1.success)('Successfully logged out');
110
+ (0, formatters_1.info)(`Configuration cleared from: ${config_service_1.configService.getConfigPath()}`);
111
+ }
112
+ catch (err) {
113
+ (0, errors_1.handleError)(err);
114
+ }
115
+ });
116
+ // Whoami command
117
+ auth
118
+ .command('whoami')
119
+ .description('Display current user information')
120
+ .option('-o, --output <format>', 'Output format (json|table)', 'table')
121
+ .action(async (options) => {
122
+ try {
123
+ const token = config_service_1.configService.getToken();
124
+ console.log(token);
125
+ if (!token) {
126
+ (0, formatters_1.error)('Not authenticated. Please login using "sphereai auth login"');
127
+ process.exit(1);
128
+ }
129
+ const spinner = (0, ora_1.default)('Fetching user information...').start();
130
+ // Try to get user from config first
131
+ let user = config_service_1.configService.getUser();
132
+ // If not in config, fetch from API
133
+ if (!user) {
134
+ user = await api_client_1.apiClient.getCurrentUser();
135
+ config_service_1.configService.setUser(user);
136
+ }
137
+ spinner.stop();
138
+ const format = options.output;
139
+ console.log((0, formatters_1.formatUser)(user, format));
140
+ }
141
+ catch (err) {
142
+ (0, errors_1.handleError)(err);
143
+ }
144
+ });
145
+ // Config command for setting token manually
146
+ auth
147
+ .command('set-token')
148
+ .description('Manually set authentication token')
149
+ .argument('<token>', 'JWT token to set')
150
+ .action(async (token) => {
151
+ try {
152
+ config_service_1.configService.setToken(token);
153
+ api_client_1.apiClient.setAuthToken(token);
154
+ const spinner = (0, ora_1.default)('Validating token...').start();
155
+ // Try to validate token by fetching user info
156
+ try {
157
+ const user = await api_client_1.apiClient.getCurrentUser();
158
+ config_service_1.configService.setUser(user);
159
+ spinner.succeed('Token set and validated successfully!');
160
+ (0, formatters_1.success)(`Logged in as: ${user.email || user.name || 'User'}`);
161
+ }
162
+ catch (err) {
163
+ spinner.warn('Token set but validation failed');
164
+ (0, formatters_1.info)('The token was saved but could not be validated. It may be invalid or expired.');
165
+ }
166
+ }
167
+ catch (err) {
168
+ (0, errors_1.handleError)(err);
169
+ }
170
+ });
171
+ // Config info command
172
+ auth
173
+ .command('config')
174
+ .description('Display current configuration')
175
+ .action(() => {
176
+ try {
177
+ const hasToken = config_service_1.configService.hasToken();
178
+ const user = config_service_1.configService.getUser();
179
+ const configPath = config_service_1.configService.getConfigPath();
180
+ (0, formatters_1.info)('Current Configuration:');
181
+ console.log(` Config Path: ${configPath}`);
182
+ console.log(` Authenticated: ${hasToken ? 'Yes' : 'No'}`);
183
+ if (user) {
184
+ console.log(` User: ${user.email || user.name || 'Unknown'}`);
185
+ console.log(` User ID: ${user.id}`);
186
+ console.log(` Customer ID: ${user.customerId}`);
187
+ }
188
+ }
189
+ catch (err) {
190
+ (0, errors_1.handleError)(err);
191
+ }
192
+ });
193
+ }
194
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerExecuteCommands(program: Command): void;
3
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+K9D"}
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerExecuteCommands = registerExecuteCommands;
7
+ const ora_1 = __importDefault(require("ora"));
8
+ const api_client_1 = require("../services/api-client");
9
+ const config_service_1 = require("../services/config-service");
10
+ const formatters_1 = require("../utils/formatters");
11
+ const errors_1 = require("../utils/errors");
12
+ function registerExecuteCommands(program) {
13
+ const execute = program
14
+ .command('execute')
15
+ .alias('exec')
16
+ .description('Execution management commands');
17
+ // Run execution command
18
+ execute
19
+ .command('run')
20
+ .description('Start a new repository execution')
21
+ .requiredOption('-r, --repo-id <id>', 'Repository (Git) ID', parseInt)
22
+ .requiredOption('-v, --vendor-id <id>', 'AI Vendor ID', parseInt)
23
+ .requiredOption('-m, --model-id <id>', 'AI Model ID', parseInt)
24
+ .requiredOption('-p, --prompt-id <id>', 'Prompt ID', parseInt)
25
+ .option('-t, --temperature <number>', 'Temperature (0.0 - 2.0)', parseFloat, 0.7)
26
+ .option('-s, --subfolder <path>', 'Working subfolder')
27
+ .option('-d, --depth <number>', 'Folder depth limit', parseInt)
28
+ .option('-e, --exclude <patterns>', 'Additional exclude patterns')
29
+ .option('--include-root-md', 'Include root markdown files', false)
30
+ .option('-o, --output <format>', 'Output format (json|table)', 'table')
31
+ .action(async (options) => {
32
+ try {
33
+ const token = config_service_1.configService.getToken();
34
+ (0, errors_1.requireAuth)(token);
35
+ const spinner = (0, ora_1.default)('Creating execution...').start();
36
+ const executionData = {
37
+ gitId: options.repoId,
38
+ aiVendorId: options.vendorId,
39
+ aiModelId: options.modelId,
40
+ promptId: options.promptId,
41
+ temperature: options.temperature,
42
+ workingSubfolder: options.subfolder,
43
+ folderDepthLimit: options.depth,
44
+ additionalExcludePatterns: options.exclude,
45
+ includeRootMarkdownFiles: options.includeRootMd
46
+ };
47
+ const execution = await api_client_1.apiClient.createExecution(executionData);
48
+ spinner.succeed('Execution created successfully!');
49
+ const format = options.output;
50
+ console.log((0, formatters_1.formatExecution)(execution, format));
51
+ (0, formatters_1.info)(`Execution ID: ${execution.id}`);
52
+ if (execution.uniqueHash) {
53
+ (0, formatters_1.info)(`Unique Hash: ${execution.uniqueHash}`);
54
+ }
55
+ }
56
+ catch (err) {
57
+ (0, errors_1.handleError)(err);
58
+ }
59
+ });
60
+ // Get execution command
61
+ execute
62
+ .command('get')
63
+ .description('Get execution details by ID or hash')
64
+ .argument('<id-or-hash>', 'Execution ID or unique hash')
65
+ .option('-o, --output <format>', 'Output format (json|table)', 'table')
66
+ .action(async (idOrHash, options) => {
67
+ try {
68
+ const token = config_service_1.configService.getToken();
69
+ (0, errors_1.requireAuth)(token);
70
+ const spinner = (0, ora_1.default)('Fetching execution...').start();
71
+ let execution;
72
+ // Check if it's a hash (non-numeric) or ID (numeric)
73
+ if (isNaN(Number(idOrHash))) {
74
+ execution = await api_client_1.apiClient.getExecutionByHash(idOrHash);
75
+ }
76
+ else {
77
+ execution = await api_client_1.apiClient.getExecution(parseInt(idOrHash));
78
+ }
79
+ spinner.stop();
80
+ const format = options.output;
81
+ console.log((0, formatters_1.formatExecution)(execution, format));
82
+ }
83
+ catch (err) {
84
+ (0, errors_1.handleError)(err);
85
+ }
86
+ });
87
+ // List executions command
88
+ execute
89
+ .command('list')
90
+ .alias('ls')
91
+ .description('List executions')
92
+ .option('-p, --page <number>', 'Page number', parseInt, 1)
93
+ .option('-s, --size <number>', 'Page size', parseInt, 20)
94
+ .option('-o, --output <format>', 'Output format (json|table)', 'table')
95
+ .action(async (options) => {
96
+ try {
97
+ const token = config_service_1.configService.getToken();
98
+ (0, errors_1.requireAuth)(token);
99
+ const spinner = (0, ora_1.default)('Fetching executions...').start();
100
+ const executions = await api_client_1.apiClient.listExecutions({
101
+ _page: options.page,
102
+ _size: options.size,
103
+ _order: '-createdAt' // Most recent first
104
+ });
105
+ spinner.stop();
106
+ const format = options.output;
107
+ console.log((0, formatters_1.formatExecutionsList)(executions, format));
108
+ (0, formatters_1.info)(`Showing page ${options.page} (${executions.length} results)`);
109
+ }
110
+ catch (err) {
111
+ (0, errors_1.handleError)(err);
112
+ }
113
+ });
114
+ // Get execution steps command
115
+ execute
116
+ .command('steps')
117
+ .description('Get execution steps')
118
+ .argument('<execution-id>', 'Execution ID', parseInt)
119
+ .option('-o, --output <format>', 'Output format (json|table)', 'table')
120
+ .action(async (executionId, options) => {
121
+ try {
122
+ const token = config_service_1.configService.getToken();
123
+ (0, errors_1.requireAuth)(token);
124
+ const spinner = (0, ora_1.default)('Fetching execution steps...').start();
125
+ const steps = await api_client_1.apiClient.getExecutionSteps(executionId);
126
+ spinner.stop();
127
+ const format = options.output;
128
+ console.log((0, formatters_1.formatExecutionSteps)(steps, format));
129
+ if (steps.length === 0) {
130
+ (0, formatters_1.info)('No steps found for this execution');
131
+ }
132
+ else {
133
+ (0, formatters_1.info)(`Total steps: ${steps.length}`);
134
+ }
135
+ }
136
+ catch (err) {
137
+ (0, errors_1.handleError)(err);
138
+ }
139
+ });
140
+ // Update execution temperature
141
+ execute
142
+ .command('update-temp')
143
+ .description('Update execution temperature')
144
+ .argument('<execution-id>', 'Execution ID', parseInt)
145
+ .argument('<temperature>', 'New temperature (0.0 - 2.0)', parseFloat)
146
+ .action(async (executionId, temperature) => {
147
+ try {
148
+ const token = config_service_1.configService.getToken();
149
+ (0, errors_1.requireAuth)(token);
150
+ // Validate temperature
151
+ if (temperature < 0 || temperature > 2) {
152
+ (0, formatters_1.error)('Temperature must be between 0.0 and 2.0');
153
+ process.exit(1);
154
+ }
155
+ const spinner = (0, ora_1.default)('Updating execution temperature...').start();
156
+ await api_client_1.apiClient.updateExecutionTemperature(executionId, temperature);
157
+ spinner.succeed('Temperature updated successfully!');
158
+ (0, formatters_1.success)(`Execution ${executionId} temperature set to ${temperature.toFixed(2)}`);
159
+ }
160
+ catch (err) {
161
+ (0, errors_1.handleError)(err);
162
+ }
163
+ });
164
+ }
165
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerFilesCommands(program: Command): void;
3
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqP5D"}
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerFilesCommands = registerFilesCommands;
7
+ const file_tracking_service_1 = require("../services/file-tracking-service");
8
+ const formatters_1 = require("../utils/formatters");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const cli_table3_1 = __importDefault(require("cli-table3"));
11
+ function registerFilesCommands(program) {
12
+ const files = program
13
+ .command('files')
14
+ .description('Manage tracked files (similar to git staging)');
15
+ // Add files from current directory
16
+ files
17
+ .command('add')
18
+ .description('Add files to tracking')
19
+ .argument('[path]', 'File or directory path to add (defaults to current directory)', '.')
20
+ .action(async (path) => {
21
+ try {
22
+ // Check if path is a single file or directory
23
+ const isCurrentDir = path === '.';
24
+ if (isCurrentDir) {
25
+ (0, formatters_1.info)('Adding all files from current directory...');
26
+ const result = file_tracking_service_1.fileTrackingService.addDirectory(path);
27
+ if (result.added.length > 0) {
28
+ (0, formatters_1.success)(`Added ${result.added.length} file(s) to tracking`);
29
+ // Show first 10 added files
30
+ const displayFiles = result.added.slice(0, 10);
31
+ displayFiles.forEach(file => console.log(chalk_1.default.green(` + ${file}`)));
32
+ if (result.added.length > 10) {
33
+ console.log(chalk_1.default.gray(` ... and ${result.added.length - 10} more`));
34
+ }
35
+ }
36
+ if (result.ignored.length > 0) {
37
+ console.log(chalk_1.default.gray(`\nIgnored ${result.ignored.length} file(s) (see .sphereignore)`));
38
+ }
39
+ if (result.errors.length > 0) {
40
+ console.log(chalk_1.default.yellow(`\nWarnings:`));
41
+ result.errors.forEach(err => console.log(chalk_1.default.yellow(` ${err}`)));
42
+ }
43
+ if (result.added.length === 0 && result.errors.length === 0) {
44
+ (0, formatters_1.info)('No new files to add');
45
+ }
46
+ }
47
+ else {
48
+ // Add single file or directory
49
+ const addResult = file_tracking_service_1.fileTrackingService.addFile(path);
50
+ if (addResult.added) {
51
+ (0, formatters_1.success)(`Added file: ${path}`);
52
+ }
53
+ else {
54
+ // If it's a directory, try adding all files from it
55
+ const result = file_tracking_service_1.fileTrackingService.addDirectory(path);
56
+ if (result.added.length > 0) {
57
+ (0, formatters_1.success)(`Added ${result.added.length} file(s) from: ${path}`);
58
+ const displayFiles = result.added.slice(0, 10);
59
+ displayFiles.forEach(file => console.log(chalk_1.default.green(` + ${file}`)));
60
+ if (result.added.length > 10) {
61
+ console.log(chalk_1.default.gray(` ... and ${result.added.length - 10} more`));
62
+ }
63
+ }
64
+ else if (addResult.reason) {
65
+ (0, formatters_1.error)(addResult.reason);
66
+ process.exit(1);
67
+ }
68
+ }
69
+ }
70
+ }
71
+ catch (err) {
72
+ (0, formatters_1.error)(`Failed to add files: ${err instanceof Error ? err.message : String(err)}`);
73
+ process.exit(1);
74
+ }
75
+ });
76
+ // List tracked files
77
+ files
78
+ .command('list')
79
+ .alias('ls')
80
+ .description('List all tracked files')
81
+ .option('-v, --verbose', 'Show detailed information')
82
+ .action(async (options) => {
83
+ try {
84
+ const tracked = file_tracking_service_1.fileTrackingService.getTrackedFiles();
85
+ if (tracked.length === 0) {
86
+ (0, formatters_1.info)('No files are currently tracked');
87
+ console.log(chalk_1.default.gray('Use \'sphere files add .\' to add files'));
88
+ return;
89
+ }
90
+ if (options.verbose) {
91
+ const table = new cli_table3_1.default({
92
+ head: ['File', 'Size', 'Added At', 'Status'],
93
+ style: { head: ['cyan'] }
94
+ });
95
+ tracked.forEach(file => {
96
+ const sizeKB = (file.size / 1024).toFixed(2);
97
+ const date = new Date(file.addedAt).toLocaleString();
98
+ const status = file.exists ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
99
+ table.push([file.path, `${sizeKB} KB`, date, status]);
100
+ });
101
+ console.log(table.toString());
102
+ console.log(chalk_1.default.cyan(`\nTotal: ${tracked.length} file(s)`));
103
+ }
104
+ else {
105
+ (0, formatters_1.success)(`Tracked files (${tracked.length}):`);
106
+ tracked.forEach(file => {
107
+ const status = file.exists ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
108
+ console.log(` ${status} ${file.path}`);
109
+ });
110
+ }
111
+ }
112
+ catch (err) {
113
+ (0, formatters_1.error)(`Failed to list files: ${err instanceof Error ? err.message : String(err)}`);
114
+ process.exit(1);
115
+ }
116
+ });
117
+ // Remove file from tracking
118
+ files
119
+ .command('remove')
120
+ .alias('rm')
121
+ .description('Remove a file from tracking')
122
+ .argument('<path>', 'File path to remove')
123
+ .action(async (path) => {
124
+ try {
125
+ const result = file_tracking_service_1.fileTrackingService.removeFile(path);
126
+ if (result.removed) {
127
+ (0, formatters_1.success)(`Removed file from tracking: ${path}`);
128
+ }
129
+ else {
130
+ (0, formatters_1.error)(result.reason || 'Failed to remove file');
131
+ process.exit(1);
132
+ }
133
+ }
134
+ catch (err) {
135
+ (0, formatters_1.error)(`Failed to remove file: ${err instanceof Error ? err.message : String(err)}`);
136
+ process.exit(1);
137
+ }
138
+ });
139
+ // Clear all tracked files
140
+ files
141
+ .command('clear')
142
+ .description('Clear all tracked files')
143
+ .option('-f, --force', 'Skip confirmation prompt')
144
+ .action(async (options) => {
145
+ try {
146
+ const tracked = file_tracking_service_1.fileTrackingService.getTrackedFiles();
147
+ if (tracked.length === 0) {
148
+ (0, formatters_1.info)('No files are currently tracked');
149
+ return;
150
+ }
151
+ if (!options.force) {
152
+ (0, formatters_1.warning)(`This will remove ${tracked.length} file(s) from tracking`);
153
+ console.log(chalk_1.default.yellow('Use --force to confirm'));
154
+ return;
155
+ }
156
+ const count = file_tracking_service_1.fileTrackingService.clearAll();
157
+ (0, formatters_1.success)(`Cleared ${count} file(s) from tracking`);
158
+ }
159
+ catch (err) {
160
+ (0, formatters_1.error)(`Failed to clear files: ${err instanceof Error ? err.message : String(err)}`);
161
+ process.exit(1);
162
+ }
163
+ });
164
+ // Show status of tracked files
165
+ files
166
+ .command('status')
167
+ .description('Show status of tracked files')
168
+ .action(async () => {
169
+ try {
170
+ const status = file_tracking_service_1.fileTrackingService.getStatus();
171
+ if (status.total === 0) {
172
+ (0, formatters_1.info)('No files are currently tracked');
173
+ console.log(chalk_1.default.gray('Use \'sphere files add .\' to add files'));
174
+ return;
175
+ }
176
+ console.log(chalk_1.default.cyan.bold('\nTracked Files Status\n'));
177
+ if (status.exists.length > 0) {
178
+ console.log(chalk_1.default.green(`✓ ${status.exists.length} file(s) exist and are tracked:`));
179
+ status.exists.forEach(file => {
180
+ const sizeKB = (file.size / 1024).toFixed(2);
181
+ console.log(chalk_1.default.gray(` ${file.path} (${sizeKB} KB)`));
182
+ });
183
+ }
184
+ if (status.missing.length > 0) {
185
+ console.log(chalk_1.default.red(`\n✗ ${status.missing.length} file(s) are missing:`));
186
+ status.missing.forEach(file => {
187
+ console.log(chalk_1.default.gray(` ${file.path}`));
188
+ });
189
+ }
190
+ console.log(chalk_1.default.cyan(`\nTotal: ${status.total} file(s) tracked`));
191
+ // Show .sphereignore info
192
+ const sphereIgnore = file_tracking_service_1.fileTrackingService.getSphereIgnore();
193
+ if (sphereIgnore.exists()) {
194
+ console.log(chalk_1.default.gray(`\nUsing .sphereignore file: ${sphereIgnore.getFilePath()}`));
195
+ }
196
+ else {
197
+ console.log(chalk_1.default.yellow(`\nNo .sphereignore file found, using default patterns`));
198
+ }
199
+ }
200
+ catch (err) {
201
+ (0, formatters_1.error)(`Failed to get status: ${err instanceof Error ? err.message : String(err)}`);
202
+ process.exit(1);
203
+ }
204
+ });
205
+ // Show .sphereignore patterns
206
+ files
207
+ .command('ignore')
208
+ .description('Show current .sphereignore patterns')
209
+ .option('-r, --reload', 'Reload .sphereignore file')
210
+ .action(async (options) => {
211
+ try {
212
+ if (options.reload) {
213
+ file_tracking_service_1.fileTrackingService.reloadIgnorePatterns();
214
+ (0, formatters_1.success)('Reloaded .sphereignore patterns');
215
+ }
216
+ const sphereIgnore = file_tracking_service_1.fileTrackingService.getSphereIgnore();
217
+ const patterns = sphereIgnore.getPatterns();
218
+ if (sphereIgnore.exists()) {
219
+ console.log(chalk_1.default.cyan(`\n.sphereignore patterns from: ${sphereIgnore.getFilePath()}\n`));
220
+ }
221
+ else {
222
+ console.log(chalk_1.default.yellow('\nNo .sphereignore file found. Using default patterns:\n'));
223
+ }
224
+ patterns.forEach(pattern => {
225
+ console.log(chalk_1.default.gray(` ${pattern}`));
226
+ });
227
+ console.log(chalk_1.default.cyan(`\nTotal: ${patterns.length} pattern(s)`));
228
+ }
229
+ catch (err) {
230
+ (0, formatters_1.error)(`Failed to show ignore patterns: ${err instanceof Error ? err.message : String(err)}`);
231
+ process.exit(1);
232
+ }
233
+ });
234
+ }
235
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"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"}