@closedloop-ai/cli 0.2.3 → 0.3.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.
- package/README.md +106 -258
- package/dist/THIRD_PARTY_NOTICES.txt +24 -0
- package/dist/closedloop.js +156 -0
- package/package.json +31 -62
- package/CONTRIBUTING.md +0 -437
- package/LICENSE +0 -21
- package/docs/CLI_COMMANDS.md +0 -508
- package/packages/cli/dist/__tests__/cli.test.js +0 -37
- package/packages/cli/dist/__tests__/cli.test.js.map +0 -1
- package/packages/cli/dist/__tests__/config.test.js +0 -33
- package/packages/cli/dist/__tests__/config.test.js.map +0 -1
- package/packages/cli/dist/__tests__/errors.test.js +0 -109
- package/packages/cli/dist/__tests__/errors.test.js.map +0 -1
- package/packages/cli/dist/__tests__/setup.js +0 -20
- package/packages/cli/dist/__tests__/setup.js.map +0 -1
- package/packages/cli/dist/__tests__/validation.test.js +0 -124
- package/packages/cli/dist/__tests__/validation.test.js.map +0 -1
- package/packages/cli/dist/api/auth.js +0 -27
- package/packages/cli/dist/api/auth.js.map +0 -1
- package/packages/cli/dist/api/feedback.js +0 -70
- package/packages/cli/dist/api/feedback.js.map +0 -1
- package/packages/cli/dist/api/input.js +0 -60
- package/packages/cli/dist/api/input.js.map +0 -1
- package/packages/cli/dist/api/team.js +0 -45
- package/packages/cli/dist/api/team.js.map +0 -1
- package/packages/cli/dist/api/usage.js +0 -49
- package/packages/cli/dist/api/usage.js.map +0 -1
- package/packages/cli/dist/cli.js +0 -163
- package/packages/cli/dist/cli.js.map +0 -1
- package/packages/cli/dist/commands/config.js +0 -186
- package/packages/cli/dist/commands/config.js.map +0 -1
- package/packages/cli/dist/commands/feedback.js +0 -234
- package/packages/cli/dist/commands/feedback.js.map +0 -1
- package/packages/cli/dist/commands/input.js +0 -370
- package/packages/cli/dist/commands/input.js.map +0 -1
- package/packages/cli/dist/commands/list.js +0 -81
- package/packages/cli/dist/commands/list.js.map +0 -1
- package/packages/cli/dist/commands/status.js +0 -93
- package/packages/cli/dist/commands/status.js.map +0 -1
- package/packages/cli/dist/commands/submit.js +0 -225
- package/packages/cli/dist/commands/submit.js.map +0 -1
- package/packages/cli/dist/commands/team.js +0 -44
- package/packages/cli/dist/commands/team.js.map +0 -1
- package/packages/cli/dist/commands/usage.js +0 -168
- package/packages/cli/dist/commands/usage.js.map +0 -1
- package/packages/cli/dist/config/constants.js +0 -37
- package/packages/cli/dist/config/constants.js.map +0 -1
- package/packages/cli/dist/config/index.js +0 -84
- package/packages/cli/dist/config/index.js.map +0 -1
- package/packages/cli/dist/types/index.js +0 -3
- package/packages/cli/dist/types/index.js.map +0 -1
- package/packages/cli/dist/utils/config.js +0 -55
- package/packages/cli/dist/utils/config.js.map +0 -1
- package/packages/cli/dist/utils/errors.js +0 -70
- package/packages/cli/dist/utils/errors.js.map +0 -1
- package/packages/cli/dist/utils/validation.js +0 -133
- package/packages/cli/dist/utils/validation.js.map +0 -1
|
@@ -1,186 +0,0 @@
|
|
|
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.default = exports.configCommand = void 0;
|
|
7
|
-
const commander_1 = require("commander");
|
|
8
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const ora_1 = __importDefault(require("ora"));
|
|
10
|
-
const config_1 = require("../config");
|
|
11
|
-
const auth_1 = require("../api/auth");
|
|
12
|
-
const validation_1 = require("../utils/validation");
|
|
13
|
-
// Create config command
|
|
14
|
-
exports.configCommand = new commander_1.Command('config')
|
|
15
|
-
.description('Configure your API key and settings')
|
|
16
|
-
.option('--set-api-key <key>', 'Set your API key')
|
|
17
|
-
.option('--set-team <team>', 'Set your team (future feature)')
|
|
18
|
-
.option('--json', 'Output in JSON format')
|
|
19
|
-
.action(async (options) => {
|
|
20
|
-
try {
|
|
21
|
-
await handleConfig(options);
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
handleError(error, options);
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
exports.default = exports.configCommand;
|
|
28
|
-
// Create config subcommands
|
|
29
|
-
const configSetCommand = new commander_1.Command('set')
|
|
30
|
-
.description('Set configuration values')
|
|
31
|
-
.option('--api-key <key>', 'Set API key')
|
|
32
|
-
.option('--team <team>', 'Set team (future feature)')
|
|
33
|
-
.action(async (options) => {
|
|
34
|
-
try {
|
|
35
|
-
await handleConfigSet(options);
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
handleError(error, options);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
const configShowCommand = new commander_1.Command('show')
|
|
42
|
-
.description('Show current configuration')
|
|
43
|
-
.option('--json', 'Output in JSON format')
|
|
44
|
-
.action(async (options) => {
|
|
45
|
-
try {
|
|
46
|
-
await handleConfigShow(options);
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
handleError(error, options);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
// Add subcommands to main config command
|
|
53
|
-
exports.configCommand.addCommand(configSetCommand);
|
|
54
|
-
exports.configCommand.addCommand(configShowCommand);
|
|
55
|
-
// Helper functions
|
|
56
|
-
async function handleConfig(options) {
|
|
57
|
-
const currentConfig = config_1.config.get();
|
|
58
|
-
if (options.setApiKey) {
|
|
59
|
-
await setApiKey(options.setApiKey, options);
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
if (options.setTeam) {
|
|
63
|
-
console.log(chalk_1.default.yellow('⚠️ Team configuration is not yet implemented'));
|
|
64
|
-
console.log(chalk_1.default.black('This feature will be available in a future update.'));
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
// Show current config
|
|
68
|
-
await showConfig(currentConfig, options);
|
|
69
|
-
}
|
|
70
|
-
async function handleConfigSet(options) {
|
|
71
|
-
if (options.apiKey) {
|
|
72
|
-
await setApiKey(options.apiKey, options);
|
|
73
|
-
}
|
|
74
|
-
else if (options.team) {
|
|
75
|
-
console.log(chalk_1.default.yellow('⚠️ Team configuration is not yet implemented'));
|
|
76
|
-
console.log(chalk_1.default.black('This feature will be available in a future update.'));
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
console.log(chalk_1.default.red('❌ No configuration option specified'));
|
|
80
|
-
console.log(chalk_1.default.black('Use --api-key or --team to set values'));
|
|
81
|
-
process.exit(1);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
async function handleConfigShow(options) {
|
|
85
|
-
const currentConfig = config_1.config.get();
|
|
86
|
-
await showConfig(currentConfig, options);
|
|
87
|
-
}
|
|
88
|
-
async function setApiKey(apiKey, options) {
|
|
89
|
-
try {
|
|
90
|
-
// Validate API key format
|
|
91
|
-
const validatedApiKey = (0, validation_1.validateApiKey)(apiKey);
|
|
92
|
-
// Validate API key by making a test request
|
|
93
|
-
const spinner = (0, ora_1.default)('Validating API key...').start();
|
|
94
|
-
try {
|
|
95
|
-
await (0, auth_1.validateApiKey)(validatedApiKey);
|
|
96
|
-
spinner.succeed('API key validated successfully!');
|
|
97
|
-
// Save the API key
|
|
98
|
-
config_1.config.set('apiKey', validatedApiKey);
|
|
99
|
-
if (options.json) {
|
|
100
|
-
console.log(JSON.stringify({
|
|
101
|
-
success: true,
|
|
102
|
-
message: 'API key set successfully',
|
|
103
|
-
data: {
|
|
104
|
-
apiKey: validatedApiKey.substring(0, 8) + '...',
|
|
105
|
-
configFile: config_1.config.getConfigPath(),
|
|
106
|
-
configured: true
|
|
107
|
-
}
|
|
108
|
-
}, null, 2));
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
console.log(chalk_1.default.green('✅ API key set successfully!'));
|
|
112
|
-
console.log(chalk_1.default.black(`Config file: ${config_1.config.getConfigPath()}`));
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
catch (error) {
|
|
116
|
-
spinner.fail('API key validation failed');
|
|
117
|
-
if (error.response?.status === 401) {
|
|
118
|
-
console.error(chalk_1.default.red('❌ Invalid API key'));
|
|
119
|
-
console.log(chalk_1.default.black('\n💡 To get a valid API key:'));
|
|
120
|
-
console.log(chalk_1.default.black(' 1. Visit: https://closedloop.sh'));
|
|
121
|
-
console.log(chalk_1.default.black(' 2. Sign up or log in'));
|
|
122
|
-
console.log(chalk_1.default.black(' 3. Generate an API key'));
|
|
123
|
-
console.log(chalk_1.default.black(' 4. Run: cl config set-api-key <your-key>'));
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
console.error(chalk_1.default.red('❌ Validation Error:'), error.message);
|
|
127
|
-
console.log(chalk_1.default.black('\n💡 Check your internet connection and try again'));
|
|
128
|
-
}
|
|
129
|
-
process.exit(1);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
catch (error) {
|
|
133
|
-
console.error(chalk_1.default.red('❌ Invalid API key. Get your free API key at https://closedloop.sh'));
|
|
134
|
-
process.exit(1);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
async function showConfig(currentConfig, options) {
|
|
138
|
-
if (options.json) {
|
|
139
|
-
console.log(JSON.stringify({
|
|
140
|
-
success: true,
|
|
141
|
-
data: {
|
|
142
|
-
apiKey: currentConfig.apiKey ? currentConfig.apiKey.substring(0, 8) + '...' : null,
|
|
143
|
-
configFile: config_1.config.getConfigPath(),
|
|
144
|
-
configured: !!currentConfig.apiKey
|
|
145
|
-
}
|
|
146
|
-
}, null, 2));
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
console.log(chalk_1.default.blue('\n⚙️ Configuration:'));
|
|
150
|
-
console.log(chalk_1.default.black('─'.repeat(40)));
|
|
151
|
-
if (currentConfig.apiKey) {
|
|
152
|
-
console.log(chalk_1.default.blue('API Key:'), chalk_1.default.green('✓ Configured'));
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
console.log(chalk_1.default.blue('API Key:'), chalk_1.default.red('✗ Not configured'));
|
|
156
|
-
console.log(chalk_1.default.black('Run: cl config set-api-key <your-key>'));
|
|
157
|
-
}
|
|
158
|
-
console.log(chalk_1.default.blue('Config File:'), config_1.config.getConfigPath());
|
|
159
|
-
if (!currentConfig.apiKey) {
|
|
160
|
-
console.log(chalk_1.default.yellow('\n💡 Get started:'));
|
|
161
|
-
console.log(chalk_1.default.black(' 1. Get your free API key at: https://closedloop.sh'));
|
|
162
|
-
console.log(chalk_1.default.black(' 2. Run: cl config set-api-key <your-key>'));
|
|
163
|
-
console.log(chalk_1.default.black(' 3. Submit your first input: cl input "Your feedback here"'));
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
function handleError(error, options) {
|
|
167
|
-
if (options.json) {
|
|
168
|
-
console.log(JSON.stringify({
|
|
169
|
-
success: false,
|
|
170
|
-
error: error.message,
|
|
171
|
-
details: error.response?.data || 'Unknown error occurred'
|
|
172
|
-
}, null, 2));
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED') {
|
|
176
|
-
console.error(chalk_1.default.red('❌ Connection Error:'), 'Cannot connect to ClosedLoop AI servers');
|
|
177
|
-
console.log(chalk_1.default.black('\n💡 Check your internet connection and try again'));
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
181
|
-
console.log(chalk_1.default.black('\n💡 Get help: cl --help'));
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
process.exit(1);
|
|
185
|
-
}
|
|
186
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,234 +0,0 @@
|
|
|
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.handleFeedbackCommand = handleFeedbackCommand;
|
|
7
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
const table_1 = require("table");
|
|
9
|
-
const feedback_1 = require("../api/feedback");
|
|
10
|
-
const validation_1 = require("../utils/validation");
|
|
11
|
-
// UUID regex pattern for detecting IDs
|
|
12
|
-
const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
13
|
-
// Main feedback command handler
|
|
14
|
-
async function handleFeedbackCommand(id, options) {
|
|
15
|
-
// If ID provided, show specific feedback details
|
|
16
|
-
if (id) {
|
|
17
|
-
if (!(0, validation_1.validateUuid)(id)) {
|
|
18
|
-
console.log(chalk_1.default.yellow('💡 Invalid feedback ID format'));
|
|
19
|
-
console.log(chalk_1.default.black('Feedback ID should be a UUID like: 2ea8f556-052b-4f5c-bf86-833780b3d00d'));
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
return await showFeedback(id, options);
|
|
23
|
-
}
|
|
24
|
-
// If search query provided, search feedback
|
|
25
|
-
if (options.search) {
|
|
26
|
-
return await searchFeedback(options.search, options);
|
|
27
|
-
}
|
|
28
|
-
// Otherwise, list all feedback
|
|
29
|
-
return await listFeedback(options);
|
|
30
|
-
}
|
|
31
|
-
// Helper functions
|
|
32
|
-
async function listFeedback(options) {
|
|
33
|
-
const { page, limit } = (0, validation_1.validatePagination)(options.page, options.limit);
|
|
34
|
-
const status = options.status;
|
|
35
|
-
const search = options.search;
|
|
36
|
-
const result = await (0, feedback_1.listFeedbacks)({
|
|
37
|
-
page,
|
|
38
|
-
limit,
|
|
39
|
-
status,
|
|
40
|
-
search
|
|
41
|
-
});
|
|
42
|
-
if (options.json) {
|
|
43
|
-
console.log(JSON.stringify({ success: true, data: result }, null, 2));
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const feedbacks = result.feedbacks || [];
|
|
47
|
-
if (feedbacks.length === 0) {
|
|
48
|
-
console.log(chalk_1.default.yellow('📝 No feedback found'));
|
|
49
|
-
if (search) {
|
|
50
|
-
console.log(chalk_1.default.gray(`Try a different search term or remove --search to see all feedback`));
|
|
51
|
-
}
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
console.log(chalk_1.default.blue('\n🎯 AI-Generated Feedback:'));
|
|
55
|
-
const tableData = [
|
|
56
|
-
[
|
|
57
|
-
chalk_1.default.bold('ID'),
|
|
58
|
-
chalk_1.default.bold('Title'),
|
|
59
|
-
chalk_1.default.bold('Severity'),
|
|
60
|
-
chalk_1.default.bold('Input ID'),
|
|
61
|
-
chalk_1.default.bold('Created')
|
|
62
|
-
]
|
|
63
|
-
];
|
|
64
|
-
feedbacks.forEach((feedback) => {
|
|
65
|
-
tableData.push([
|
|
66
|
-
feedback.id,
|
|
67
|
-
feedback.title || chalk_1.default.gray('null'),
|
|
68
|
-
feedback.severity || 'medium',
|
|
69
|
-
feedback.input_id || chalk_1.default.gray('null'),
|
|
70
|
-
feedback.timestamp ? new Date(feedback.timestamp).toLocaleString() : 'Unknown'
|
|
71
|
-
]);
|
|
72
|
-
});
|
|
73
|
-
console.log((0, table_1.table)(tableData, {
|
|
74
|
-
border: {
|
|
75
|
-
topBody: '─',
|
|
76
|
-
topJoin: '┬',
|
|
77
|
-
topLeft: '┌',
|
|
78
|
-
topRight: '┐',
|
|
79
|
-
bottomBody: '─',
|
|
80
|
-
bottomJoin: '┴',
|
|
81
|
-
bottomLeft: '└',
|
|
82
|
-
bottomRight: '┘',
|
|
83
|
-
bodyLeft: '│',
|
|
84
|
-
bodyRight: '│',
|
|
85
|
-
bodyJoin: '│',
|
|
86
|
-
joinBody: '─',
|
|
87
|
-
joinLeft: '├',
|
|
88
|
-
joinRight: '┤',
|
|
89
|
-
joinJoin: '┼'
|
|
90
|
-
}
|
|
91
|
-
}));
|
|
92
|
-
if (result.pagination) {
|
|
93
|
-
console.log(chalk_1.default.black(`\nPage ${result.pagination.page} of ${result.pagination.pages} (${result.pagination.total} total feedback)`));
|
|
94
|
-
if (result.pagination.page < result.pagination.pages) {
|
|
95
|
-
console.log(chalk_1.default.gray(`💡 Use --page ${result.pagination.page + 1} to see next page`));
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
async function showFeedback(id, options) {
|
|
100
|
-
try {
|
|
101
|
-
const result = await (0, feedback_1.getFeedbackDetail)(id);
|
|
102
|
-
if (options.json) {
|
|
103
|
-
console.log(JSON.stringify({ success: true, data: result }, null, 2));
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
console.log(chalk_1.default.blue('\n🎯 Feedback Details:'));
|
|
107
|
-
console.log(chalk_1.default.black('─'.repeat(50)));
|
|
108
|
-
console.log(chalk_1.default.blue('ID:'), result.id);
|
|
109
|
-
console.log(chalk_1.default.blue('Title:'), result.title || chalk_1.default.gray('null'));
|
|
110
|
-
console.log(chalk_1.default.blue('Clarity:'), result.clarity || chalk_1.default.gray('null'));
|
|
111
|
-
console.log(chalk_1.default.blue('Deal Blocker:'), result.deal_blocker ? chalk_1.default.red('Yes') : chalk_1.default.green('No'));
|
|
112
|
-
console.log(chalk_1.default.blue('Pain Point:'), result.pain_point || chalk_1.default.gray('null'));
|
|
113
|
-
console.log(chalk_1.default.blue('Workaround:'), result.workaround || chalk_1.default.gray('null'));
|
|
114
|
-
console.log(chalk_1.default.blue('Competitor Gap:'), result.competitor_gap || chalk_1.default.gray('null'));
|
|
115
|
-
console.log(chalk_1.default.blue('Willingness to Pay:'), result.willingness_to_pay || chalk_1.default.gray('null'));
|
|
116
|
-
console.log(chalk_1.default.blue('Use Case:'), result.use_case || chalk_1.default.gray('null'));
|
|
117
|
-
console.log(chalk_1.default.blue('Feature Area:'), result.feature_area || chalk_1.default.gray('null'));
|
|
118
|
-
console.log(chalk_1.default.blue('Source URL:'), result.source_url || chalk_1.default.gray('null'));
|
|
119
|
-
console.log(chalk_1.default.blue('Created:'), result.timestamp ? new Date(result.timestamp).toLocaleString() : 'Unknown');
|
|
120
|
-
}
|
|
121
|
-
catch (error) {
|
|
122
|
-
if (options.json) {
|
|
123
|
-
console.log(JSON.stringify({
|
|
124
|
-
success: false,
|
|
125
|
-
error: error.message,
|
|
126
|
-
details: error.response?.data || 'Unknown error occurred'
|
|
127
|
-
}, null, 2));
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
if (error.response?.status === 404) {
|
|
131
|
-
console.error(chalk_1.default.red('❌ Feedback not found'));
|
|
132
|
-
console.log(chalk_1.default.black('The feedback ID you provided does not exist or is not accessible.'));
|
|
133
|
-
}
|
|
134
|
-
else if (error.response?.status === 401) {
|
|
135
|
-
console.error(chalk_1.default.red('❌ Authentication Error:'), 'Invalid API key');
|
|
136
|
-
console.log(chalk_1.default.black('\n💡 To fix:'));
|
|
137
|
-
console.log(chalk_1.default.black(' 1. Get your free API key at: https://closedloop.sh'));
|
|
138
|
-
console.log(chalk_1.default.black(' 2. Run: cl config set --api-key <your-key>'));
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
142
|
-
console.log(chalk_1.default.black('\n💡 Get help: cl --help'));
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
process.exit(1);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
async function searchFeedback(query, options) {
|
|
149
|
-
const page = parseInt(options.page) || 1;
|
|
150
|
-
const limit = parseInt(options.limit) || 20;
|
|
151
|
-
const result = await (0, feedback_1.listFeedbacks)({
|
|
152
|
-
page,
|
|
153
|
-
limit,
|
|
154
|
-
search: query
|
|
155
|
-
});
|
|
156
|
-
if (options.json) {
|
|
157
|
-
console.log(JSON.stringify({ success: true, data: result }, null, 2));
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
const feedbacks = result.feedbacks || [];
|
|
161
|
-
if (feedbacks.length === 0) {
|
|
162
|
-
console.log(chalk_1.default.yellow(`📝 No feedback found for "${query}"`));
|
|
163
|
-
console.log(chalk_1.default.gray('Try a different search term or remove --search to see all feedback'));
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
console.log(chalk_1.default.blue(`\n🔍 Search Results for "${query}":`));
|
|
167
|
-
const tableData = [
|
|
168
|
-
[
|
|
169
|
-
chalk_1.default.bold('ID'),
|
|
170
|
-
chalk_1.default.bold('Title'),
|
|
171
|
-
chalk_1.default.bold('Severity'),
|
|
172
|
-
chalk_1.default.bold('Input ID'),
|
|
173
|
-
chalk_1.default.bold('Created')
|
|
174
|
-
]
|
|
175
|
-
];
|
|
176
|
-
feedbacks.forEach((feedback) => {
|
|
177
|
-
tableData.push([
|
|
178
|
-
feedback.id,
|
|
179
|
-
feedback.title || chalk_1.default.gray('null'),
|
|
180
|
-
feedback.severity || 'medium',
|
|
181
|
-
feedback.input_id || chalk_1.default.gray('null'),
|
|
182
|
-
feedback.timestamp ? new Date(feedback.timestamp).toLocaleString() : 'Unknown'
|
|
183
|
-
]);
|
|
184
|
-
});
|
|
185
|
-
console.log((0, table_1.table)(tableData, {
|
|
186
|
-
border: {
|
|
187
|
-
topBody: '─',
|
|
188
|
-
topJoin: '┬',
|
|
189
|
-
topLeft: '┌',
|
|
190
|
-
topRight: '┐',
|
|
191
|
-
bottomBody: '─',
|
|
192
|
-
bottomJoin: '┴',
|
|
193
|
-
bottomLeft: '└',
|
|
194
|
-
bottomRight: '┘',
|
|
195
|
-
bodyLeft: '│',
|
|
196
|
-
bodyRight: '│',
|
|
197
|
-
bodyJoin: '│',
|
|
198
|
-
joinBody: '─',
|
|
199
|
-
joinLeft: '├',
|
|
200
|
-
joinRight: '┤',
|
|
201
|
-
joinJoin: '┼'
|
|
202
|
-
}
|
|
203
|
-
}));
|
|
204
|
-
if (result.pagination) {
|
|
205
|
-
console.log(chalk_1.default.black(`Page ${result.pagination.page} of ${result.pagination.pages} (${result.pagination.total} total results)`));
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
function handleError(error, options) {
|
|
209
|
-
if (options.json) {
|
|
210
|
-
console.log(JSON.stringify({
|
|
211
|
-
success: false,
|
|
212
|
-
error: error.message,
|
|
213
|
-
details: error.response?.data || 'Unknown error occurred'
|
|
214
|
-
}, null, 2));
|
|
215
|
-
}
|
|
216
|
-
else {
|
|
217
|
-
if (error.response?.status === 404) {
|
|
218
|
-
console.error(chalk_1.default.red('❌ Not found'));
|
|
219
|
-
console.log(chalk_1.default.black('The requested resource does not exist or is not accessible.'));
|
|
220
|
-
}
|
|
221
|
-
else if (error.response?.status === 401) {
|
|
222
|
-
console.error(chalk_1.default.red('❌ Authentication Error:'), 'Invalid API key');
|
|
223
|
-
console.log(chalk_1.default.black('\n💡 To fix:'));
|
|
224
|
-
console.log(chalk_1.default.black(' 1. Get your free API key at: https://closedloop.sh'));
|
|
225
|
-
console.log(chalk_1.default.black(' 2. Run: cl config set --api-key <your-key>'));
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
229
|
-
console.log(chalk_1.default.black('\n💡 Get help: cl --help'));
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
process.exit(1);
|
|
233
|
-
}
|
|
234
|
-
//# sourceMappingURL=feedback.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/commands/feedback.ts"],"names":[],"mappings":"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"}
|