@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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/__tests__/errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Test setup file
|
|
3
|
-
// This file runs before each test file
|
|
4
|
-
// Mock console methods to avoid cluttering test output
|
|
5
|
-
global.console = {
|
|
6
|
-
...console,
|
|
7
|
-
log: jest.fn(),
|
|
8
|
-
error: jest.fn(),
|
|
9
|
-
warn: jest.fn(),
|
|
10
|
-
info: jest.fn()
|
|
11
|
-
};
|
|
12
|
-
// Mock process.exit to prevent tests from actually exiting
|
|
13
|
-
const originalExit = process.exit;
|
|
14
|
-
beforeAll(() => {
|
|
15
|
-
process.exit = jest.fn();
|
|
16
|
-
});
|
|
17
|
-
afterAll(() => {
|
|
18
|
-
process.exit = originalExit;
|
|
19
|
-
});
|
|
20
|
-
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/__tests__/setup.ts"],"names":[],"mappings":";AAAA,kBAAkB;AAClB,uCAAuC;AAEvC,uDAAuD;AACvD,MAAM,CAAC,OAAO,GAAG;IACf,GAAG,OAAO;IACV,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;IACd,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;IAChB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;IACf,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;CAChB,CAAC;AAEF,2DAA2D;AAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;AAClC,SAAS,CAAC,GAAG,EAAE;IACb,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,GAAG,EAAE;IACZ,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;AAC9B,CAAC,CAAC,CAAC"}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const validation_1 = require("../utils/validation");
|
|
4
|
-
const errors_1 = require("../utils/errors");
|
|
5
|
-
describe('Validation Utils', () => {
|
|
6
|
-
describe('validateUuid', () => {
|
|
7
|
-
it('should validate correct UUIDs', () => {
|
|
8
|
-
expect((0, validation_1.validateUuid)('123e4567-e89b-12d3-a456-426614174000')).toBe(true);
|
|
9
|
-
expect((0, validation_1.validateUuid)('00000000-0000-0000-0000-000000000000')).toBe(true);
|
|
10
|
-
});
|
|
11
|
-
it('should reject invalid UUIDs', () => {
|
|
12
|
-
expect((0, validation_1.validateUuid)('invalid-uuid')).toBe(false);
|
|
13
|
-
expect((0, validation_1.validateUuid)('123e4567-e89b-12d3-a456')).toBe(false);
|
|
14
|
-
expect((0, validation_1.validateUuid)('')).toBe(false);
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
describe('validateInputContent', () => {
|
|
18
|
-
it('should validate correct content', () => {
|
|
19
|
-
expect((0, validation_1.validateInputContent)('Valid content')).toBe('Valid content');
|
|
20
|
-
expect((0, validation_1.validateInputContent)(' Valid content ')).toBe('Valid content');
|
|
21
|
-
});
|
|
22
|
-
it('should reject empty content', () => {
|
|
23
|
-
expect(() => (0, validation_1.validateInputContent)('')).toThrow(errors_1.CliError);
|
|
24
|
-
expect(() => (0, validation_1.validateInputContent)(' ')).toThrow(errors_1.CliError);
|
|
25
|
-
});
|
|
26
|
-
it('should reject content that is too long', () => {
|
|
27
|
-
const longContent = 'a'.repeat(10001);
|
|
28
|
-
expect(() => (0, validation_1.validateInputContent)(longContent)).toThrow(errors_1.CliError);
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
describe('validateApiKey', () => {
|
|
32
|
-
it('should validate correct API keys', () => {
|
|
33
|
-
expect((0, validation_1.validateApiKey)('valid-api-key-123')).toBe('valid-api-key-123');
|
|
34
|
-
expect((0, validation_1.validateApiKey)(' valid-api-key-123 ')).toBe('valid-api-key-123');
|
|
35
|
-
});
|
|
36
|
-
it('should reject empty API keys', () => {
|
|
37
|
-
expect(() => (0, validation_1.validateApiKey)('')).toThrow(errors_1.CliError);
|
|
38
|
-
expect(() => (0, validation_1.validateApiKey)(' ')).toThrow(errors_1.CliError);
|
|
39
|
-
});
|
|
40
|
-
it('should reject API keys that are too short', () => {
|
|
41
|
-
expect(() => (0, validation_1.validateApiKey)('short')).toThrow(errors_1.CliError);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
describe('validateEmail', () => {
|
|
45
|
-
it('should validate correct emails', () => {
|
|
46
|
-
expect((0, validation_1.validateEmail)('test@example.com')).toBe('test@example.com');
|
|
47
|
-
expect((0, validation_1.validateEmail)(' TEST@EXAMPLE.COM ')).toBe('test@example.com');
|
|
48
|
-
});
|
|
49
|
-
it('should reject invalid emails', () => {
|
|
50
|
-
expect(() => (0, validation_1.validateEmail)('invalid-email')).toThrow(errors_1.CliError);
|
|
51
|
-
expect(() => (0, validation_1.validateEmail)('test@')).toThrow(errors_1.CliError);
|
|
52
|
-
expect(() => (0, validation_1.validateEmail)('@example.com')).toThrow(errors_1.CliError);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
describe('validateUrl', () => {
|
|
56
|
-
it('should validate correct URLs', () => {
|
|
57
|
-
expect((0, validation_1.validateUrl)('https://example.com')).toBe('https://example.com/');
|
|
58
|
-
expect((0, validation_1.validateUrl)('http://example.com')).toBe('http://example.com/');
|
|
59
|
-
});
|
|
60
|
-
it('should reject invalid URLs', () => {
|
|
61
|
-
expect(() => (0, validation_1.validateUrl)('invalid-url')).toThrow(errors_1.CliError);
|
|
62
|
-
expect(() => (0, validation_1.validateUrl)('ftp://example.com')).toThrow(errors_1.CliError);
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
describe('validatePagination', () => {
|
|
66
|
-
it('should validate correct pagination', () => {
|
|
67
|
-
expect((0, validation_1.validatePagination)(1, 20)).toEqual({ page: 1, limit: 20 });
|
|
68
|
-
expect((0, validation_1.validatePagination)(undefined, undefined)).toEqual({ page: 1, limit: 20 });
|
|
69
|
-
});
|
|
70
|
-
it('should enforce minimum values', () => {
|
|
71
|
-
expect((0, validation_1.validatePagination)(0, 0)).toEqual({ page: 1, limit: 20 });
|
|
72
|
-
expect((0, validation_1.validatePagination)(-1, -1)).toEqual({ page: 1, limit: 1 });
|
|
73
|
-
});
|
|
74
|
-
it('should enforce maximum limit', () => {
|
|
75
|
-
const result = (0, validation_1.validatePagination)(1, 1000);
|
|
76
|
-
expect(result.limit).toBeLessThanOrEqual(100);
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
describe('sanitizeInput', () => {
|
|
80
|
-
it('should sanitize dangerous content', () => {
|
|
81
|
-
expect((0, validation_1.sanitizeInput)('<script>alert("xss")</script>')).toBe('scriptalert("xss")/script');
|
|
82
|
-
expect((0, validation_1.sanitizeInput)('javascript:alert("xss")')).toBe('alert("xss")');
|
|
83
|
-
expect((0, validation_1.sanitizeInput)('onclick="alert(\'xss\')"')).toBe('"alert(\'xss\')"');
|
|
84
|
-
});
|
|
85
|
-
it('should preserve safe content', () => {
|
|
86
|
-
expect((0, validation_1.sanitizeInput)('Safe content')).toBe('Safe content');
|
|
87
|
-
expect((0, validation_1.sanitizeInput)(' Safe content ')).toBe('Safe content');
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
describe('validateAndSanitizeInput', () => {
|
|
91
|
-
it('should validate and sanitize complete input data', () => {
|
|
92
|
-
const inputData = {
|
|
93
|
-
content: 'Test content',
|
|
94
|
-
title: 'Test title',
|
|
95
|
-
source_url: 'https://example.com',
|
|
96
|
-
customer_id: 'customer-123',
|
|
97
|
-
reporter_name: 'John Doe',
|
|
98
|
-
reporter_email: 'john@example.com'
|
|
99
|
-
};
|
|
100
|
-
const result = (0, validation_1.validateAndSanitizeInput)(inputData);
|
|
101
|
-
expect(result.content).toBe('Test content');
|
|
102
|
-
expect(result.title).toBe('Test title');
|
|
103
|
-
expect(result.source_url).toBe('https://example.com/');
|
|
104
|
-
expect(result.customer_id).toBe('customer-123');
|
|
105
|
-
expect(result.reporter_name).toBe('John Doe');
|
|
106
|
-
expect(result.reporter_email).toBe('john@example.com');
|
|
107
|
-
});
|
|
108
|
-
it('should handle optional fields', () => {
|
|
109
|
-
const inputData = {
|
|
110
|
-
content: 'Test content'
|
|
111
|
-
};
|
|
112
|
-
const result = (0, validation_1.validateAndSanitizeInput)(inputData);
|
|
113
|
-
expect(result.content).toBe('Test content');
|
|
114
|
-
expect(result.title).toBeUndefined();
|
|
115
|
-
});
|
|
116
|
-
it('should reject invalid content', () => {
|
|
117
|
-
const inputData = {
|
|
118
|
-
content: ''
|
|
119
|
-
};
|
|
120
|
-
expect(() => (0, validation_1.validateAndSanitizeInput)(inputData)).toThrow(errors_1.CliError);
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
//# sourceMappingURL=validation.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../../src/__tests__/validation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +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.validateApiKey = validateApiKey;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const constants_1 = require("../config/constants");
|
|
9
|
-
const errors_1 = require("../utils/errors");
|
|
10
|
-
async function validateApiKey(apiKey) {
|
|
11
|
-
try {
|
|
12
|
-
const response = await axios_1.default.get(`${constants_1.CONFIG.API_BASE_URL}/health`, {
|
|
13
|
-
headers: {
|
|
14
|
-
'Authorization': `Bearer ${apiKey}`
|
|
15
|
-
},
|
|
16
|
-
timeout: constants_1.CONFIG.TIMEOUT_MS
|
|
17
|
-
});
|
|
18
|
-
return response.status === 200;
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
if (error.response?.status === 401) {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
throw (0, errors_1.handleApiError)(error);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":";;;;;AAIA,wCAgBC;AApBD,kDAA0B;AAC1B,mDAA6C;AAC7C,4CAAwE;AAEjE,KAAK,UAAU,cAAc,CAAC,MAAc;IACjD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,kBAAM,CAAC,YAAY,SAAS,EAAE;YAChE,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,MAAM,EAAE;aACpC;YACD,OAAO,EAAE,kBAAM,CAAC,UAAU;SAC3B,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;IACjC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -1,70 +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.submitFeedback = submitFeedback;
|
|
7
|
-
exports.listFeedbacks = listFeedbacks;
|
|
8
|
-
exports.getFeedbackStatus = getFeedbackStatus;
|
|
9
|
-
exports.getFeedbackDetail = getFeedbackDetail;
|
|
10
|
-
const axios_1 = __importDefault(require("axios"));
|
|
11
|
-
const config_1 = require("../config");
|
|
12
|
-
const constants_1 = require("../config/constants");
|
|
13
|
-
const errors_1 = require("../utils/errors");
|
|
14
|
-
const getClient = () => {
|
|
15
|
-
const apiKey = config_1.config.get('apiKey');
|
|
16
|
-
if (!apiKey) {
|
|
17
|
-
throw new errors_1.CliError(constants_1.MESSAGES.NO_API_KEY, errors_1.ERROR_CODES.NO_API_KEY);
|
|
18
|
-
}
|
|
19
|
-
return axios_1.default.create({
|
|
20
|
-
baseURL: constants_1.CONFIG.API_BASE_URL,
|
|
21
|
-
headers: {
|
|
22
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
23
|
-
'Content-Type': 'application/json',
|
|
24
|
-
'User-Agent': constants_1.CONFIG.USER_AGENT
|
|
25
|
-
},
|
|
26
|
-
timeout: constants_1.CONFIG.TIMEOUT_MS
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
async function submitFeedback(data) {
|
|
30
|
-
try {
|
|
31
|
-
const client = getClient();
|
|
32
|
-
const response = await client.post('/feedbacks', data);
|
|
33
|
-
return response.data.data;
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
throw (0, errors_1.handleApiError)(error);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
async function listFeedbacks(params, isNew = false) {
|
|
40
|
-
try {
|
|
41
|
-
const client = getClient();
|
|
42
|
-
const endpoint = isNew ? '/feedbacks/new' : '/feedbacks';
|
|
43
|
-
const response = await client.get(endpoint, { params });
|
|
44
|
-
return response.data.data;
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
throw (0, errors_1.handleApiError)(error);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
async function getFeedbackStatus(id) {
|
|
51
|
-
try {
|
|
52
|
-
const client = getClient();
|
|
53
|
-
const response = await client.get(`/feedbacks/new/${id}`);
|
|
54
|
-
return response.data.data;
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
throw (0, errors_1.handleApiError)(error);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
async function getFeedbackDetail(id) {
|
|
61
|
-
try {
|
|
62
|
-
const client = getClient();
|
|
63
|
-
const response = await client.get(`/feedbacks/${id}`);
|
|
64
|
-
return response.data.data;
|
|
65
|
-
}
|
|
66
|
-
catch (error) {
|
|
67
|
-
throw (0, errors_1.handleApiError)(error);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=feedback.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/api/feedback.ts"],"names":[],"mappings":";;;;;AAwBA,wCAQC;AAED,sCASC;AAED,8CAQC;AAED,8CAQC;AA/DD,kDAA0B;AAC1B,sCAAmC;AAEnC,mDAAuD;AACvD,4CAAwE;AAExE,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,MAAM,MAAM,GAAG,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,iBAAQ,CAAC,oBAAQ,CAAC,UAAU,EAAE,oBAAW,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,eAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,kBAAM,CAAC,YAAY;QAC5B,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,EAAE;YACnC,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,kBAAM,CAAC,UAAU;SAChC;QACD,OAAO,EAAE,kBAAM,CAAC,UAAU;KAC3B,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,KAAK,UAAU,cAAc,CAAC,IAAwB;IAC3D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,MAAsB,EAAE,KAAK,GAAG,KAAK;IACvE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACxD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,EAAU;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,EAAU;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACtD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -1,60 +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.listInputs = listInputs;
|
|
7
|
-
exports.getInputDetail = getInputDetail;
|
|
8
|
-
exports.getInputStatus = getInputStatus;
|
|
9
|
-
const axios_1 = __importDefault(require("axios"));
|
|
10
|
-
const config_1 = require("../config");
|
|
11
|
-
const constants_1 = require("../config/constants");
|
|
12
|
-
const errors_1 = require("../utils/errors");
|
|
13
|
-
const getClient = () => {
|
|
14
|
-
const apiKey = config_1.config.get('apiKey');
|
|
15
|
-
if (!apiKey) {
|
|
16
|
-
throw new errors_1.CliError(constants_1.MESSAGES.NO_API_KEY, errors_1.ERROR_CODES.NO_API_KEY);
|
|
17
|
-
}
|
|
18
|
-
return axios_1.default.create({
|
|
19
|
-
baseURL: constants_1.CONFIG.API_BASE_URL,
|
|
20
|
-
headers: {
|
|
21
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
22
|
-
'Content-Type': 'application/json',
|
|
23
|
-
'User-Agent': constants_1.CONFIG.USER_AGENT
|
|
24
|
-
},
|
|
25
|
-
timeout: constants_1.CONFIG.TIMEOUT_MS
|
|
26
|
-
});
|
|
27
|
-
};
|
|
28
|
-
async function listInputs(page = 1, limit = 20) {
|
|
29
|
-
try {
|
|
30
|
-
const client = getClient();
|
|
31
|
-
const response = await client.get('/inputs', {
|
|
32
|
-
params: { page, limit }
|
|
33
|
-
});
|
|
34
|
-
return response.data.data;
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
throw (0, errors_1.handleApiError)(error);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
async function getInputDetail(id) {
|
|
41
|
-
try {
|
|
42
|
-
const client = getClient();
|
|
43
|
-
const response = await client.get(`/inputs/${id}`);
|
|
44
|
-
return response.data.data;
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
throw (0, errors_1.handleApiError)(error);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
async function getInputStatus(id) {
|
|
51
|
-
try {
|
|
52
|
-
const client = getClient();
|
|
53
|
-
const response = await client.get(`/inputs/${id}`);
|
|
54
|
-
return response.data.data;
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
throw (0, errors_1.handleApiError)(error);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=input.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/api/input.ts"],"names":[],"mappings":";;;;;AAwBA,gCAUC;AAED,wCAQC;AAED,wCAQC;AAtDD,kDAA0B;AAC1B,sCAAmC;AAEnC,mDAAuD;AACvD,4CAAwE;AAExE,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,MAAM,MAAM,GAAG,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,iBAAQ,CAAC,oBAAQ,CAAC,UAAU,EAAE,oBAAW,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,eAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,kBAAM,CAAC,YAAY;QAC5B,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,EAAE;YACnC,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,kBAAM,CAAC,UAAU;SAChC;QACD,OAAO,EAAE,kBAAM,CAAC,UAAU;KAC3B,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,KAAK,UAAU,UAAU,CAAC,OAAe,CAAC,EAAE,QAAgB,EAAE;IACnE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;YAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;SACxB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,EAAU;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACnD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,EAAU;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACnD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -1,45 +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.updateTeamWebsite = updateTeamWebsite;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const config_1 = require("../config");
|
|
9
|
-
const constants_1 = require("../config/constants");
|
|
10
|
-
const errors_1 = require("../utils/errors");
|
|
11
|
-
const getClient = () => {
|
|
12
|
-
const apiKey = config_1.config.get('apiKey');
|
|
13
|
-
if (!apiKey) {
|
|
14
|
-
throw new errors_1.CliError('API key not configured. Run: cl config set --api-key <key>', errors_1.ERROR_CODES.NO_API_KEY);
|
|
15
|
-
}
|
|
16
|
-
return axios_1.default.create({
|
|
17
|
-
baseURL: constants_1.CONFIG.API_BASE_URL,
|
|
18
|
-
headers: {
|
|
19
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
20
|
-
'Content-Type': 'application/json',
|
|
21
|
-
},
|
|
22
|
-
timeout: 30000,
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
|
-
async function updateTeamWebsite(website) {
|
|
26
|
-
// Validate website URL format
|
|
27
|
-
const websiteRegex = /^https?:\/\/.+\..+/;
|
|
28
|
-
if (!websiteRegex.test(website)) {
|
|
29
|
-
throw new Error('Invalid website URL format. Must include protocol (http:// or https://) and domain');
|
|
30
|
-
}
|
|
31
|
-
try {
|
|
32
|
-
const client = getClient();
|
|
33
|
-
const response = await client.post('/team/website', {
|
|
34
|
-
website
|
|
35
|
-
});
|
|
36
|
-
if (!response.data.success) {
|
|
37
|
-
throw new Error('Failed to update team website');
|
|
38
|
-
}
|
|
39
|
-
return response.data.data;
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
throw (0, errors_1.handleApiError)(error);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=team.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/api/team.ts"],"names":[],"mappings":";;;;;AA4BA,8CAqBC;AAjDD,kDAA0B;AAC1B,sCAAmC;AAEnC,mDAA6C;AAC7C,4CAAwE;AAOxE,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,MAAM,MAAM,GAAG,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,iBAAQ,CAAC,4DAA4D,EAAE,oBAAW,CAAC,UAAU,CAAC,CAAC;IAC3G,CAAC;IAED,OAAO,eAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,kBAAM,CAAC,YAAY;QAC5B,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,EAAE;YACnC,cAAc,EAAE,kBAAkB;SACnC;QACD,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,KAAK,UAAU,iBAAiB,CAAC,OAAe;IACrD,8BAA8B;IAC9B,MAAM,YAAY,GAAG,oBAAoB,CAAC;IAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;IACxG,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAA+B,eAAe,EAAE;YAChF,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -1,49 +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.listUsage = listUsage;
|
|
7
|
-
exports.getUsageDetail = getUsageDetail;
|
|
8
|
-
const axios_1 = __importDefault(require("axios"));
|
|
9
|
-
const config_1 = require("../config");
|
|
10
|
-
const constants_1 = require("../config/constants");
|
|
11
|
-
const errors_1 = require("../utils/errors");
|
|
12
|
-
const getClient = () => {
|
|
13
|
-
const apiKey = config_1.config.get('apiKey');
|
|
14
|
-
if (!apiKey) {
|
|
15
|
-
throw new errors_1.CliError(constants_1.MESSAGES.NO_API_KEY, errors_1.ERROR_CODES.NO_API_KEY);
|
|
16
|
-
}
|
|
17
|
-
return axios_1.default.create({
|
|
18
|
-
baseURL: constants_1.CONFIG.API_BASE_URL,
|
|
19
|
-
headers: {
|
|
20
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
21
|
-
'Content-Type': 'application/json',
|
|
22
|
-
'User-Agent': constants_1.CONFIG.USER_AGENT
|
|
23
|
-
},
|
|
24
|
-
timeout: constants_1.CONFIG.TIMEOUT_MS
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
async function listUsage(page = 1, limit = 20) {
|
|
28
|
-
try {
|
|
29
|
-
const client = getClient();
|
|
30
|
-
const response = await client.get('/usage', {
|
|
31
|
-
params: { page, limit }
|
|
32
|
-
});
|
|
33
|
-
return response.data.data;
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
throw (0, errors_1.handleApiError)(error);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
async function getUsageDetail(id) {
|
|
40
|
-
try {
|
|
41
|
-
const client = getClient();
|
|
42
|
-
const response = await client.get(`/usage/${id}`);
|
|
43
|
-
return response.data.data;
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
throw (0, errors_1.handleApiError)(error);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=usage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/api/usage.ts"],"names":[],"mappings":";;;;;AAwBA,8BAUC;AAED,wCAQC;AA5CD,kDAA0B;AAC1B,sCAAmC;AAEnC,mDAAuD;AACvD,4CAAwE;AAExE,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,MAAM,MAAM,GAAG,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,iBAAQ,CAAC,oBAAQ,CAAC,UAAU,EAAE,oBAAW,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,eAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,kBAAM,CAAC,YAAY;QAC5B,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,EAAE;YACnC,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,kBAAM,CAAC,UAAU;SAChC;QACD,OAAO,EAAE,kBAAM,CAAC,UAAU;KAC3B,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,KAAK,UAAU,SAAS,CAAC,OAAe,CAAC,EAAE,QAAgB,EAAE;IAClE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE;YAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;SACxB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,EAAU;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
package/packages/cli/dist/cli.js
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
-
};
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
const commander_1 = require("commander");
|
|
8
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const input_1 = require("./commands/input");
|
|
10
|
-
const feedback_1 = require("./commands/feedback");
|
|
11
|
-
const config_1 = require("./commands/config");
|
|
12
|
-
const team_1 = require("./commands/team");
|
|
13
|
-
const errors_1 = require("./utils/errors");
|
|
14
|
-
// Create the main program
|
|
15
|
-
const program = new commander_1.Command();
|
|
16
|
-
program
|
|
17
|
-
.name('cl')
|
|
18
|
-
.description('ClosedLoop AI CLI - AI-powered customer feedback analysis for product management')
|
|
19
|
-
.version('0.2.0')
|
|
20
|
-
.addHelpText('before', chalk_1.default.blue(`
|
|
21
|
-
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
22
|
-
ā ClosedLoop AI CLI v0.2.0 ā
|
|
23
|
-
ā AI-Powered Customer Feedback Analysis ā
|
|
24
|
-
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
25
|
-
`))
|
|
26
|
-
.addHelpText('after', chalk_1.default.black(`
|
|
27
|
-
Commands:
|
|
28
|
-
input [content] Submit customer input for AI analysis
|
|
29
|
-
input List all customer inputs
|
|
30
|
-
input <id> Show specific input details
|
|
31
|
-
|
|
32
|
-
feedback List AI-generated feedback
|
|
33
|
-
feedback <id> Show specific feedback details
|
|
34
|
-
|
|
35
|
-
team Manage team settings
|
|
36
|
-
team website update <url> Update team website
|
|
37
|
-
|
|
38
|
-
config Show current configuration
|
|
39
|
-
config set --api-key <key> Set API key
|
|
40
|
-
|
|
41
|
-
version Show version information
|
|
42
|
-
help [command] Show help for a command
|
|
43
|
-
|
|
44
|
-
Examples:
|
|
45
|
-
$ cl input "Dashboard is confusing"
|
|
46
|
-
$ cl input
|
|
47
|
-
$ cl input 74e3dd87-878f-41cf-8e5a-87527bbf7770
|
|
48
|
-
$ cl feedback
|
|
49
|
-
$ cl feedback 2ea8f556-052b-4f5c-bf86-833780b3d00d
|
|
50
|
-
$ cl team website update "https://example.com"
|
|
51
|
-
$ cl config set --api-key your-api-key-here
|
|
52
|
-
|
|
53
|
-
Pagination:
|
|
54
|
-
$ cl input --page 2 --limit 10
|
|
55
|
-
$ cl feedback --page 2
|
|
56
|
-
|
|
57
|
-
Get API keys for free at https://closedloop.sh
|
|
58
|
-
`));
|
|
59
|
-
// Add input command
|
|
60
|
-
program
|
|
61
|
-
.command('input [content]')
|
|
62
|
-
.description('Submit customer input for AI analysis or list inputs')
|
|
63
|
-
.option('-t, --title <title>', 'Title for this input')
|
|
64
|
-
.option('-u, --url <url>', 'Source URL (support ticket, survey, etc.)')
|
|
65
|
-
.option('-c, --customer <id>', 'Customer identifier')
|
|
66
|
-
.option('-n, --name <name>', 'Name of person who provided the input')
|
|
67
|
-
.option('-e, --email <email>', 'Email of person who provided the input')
|
|
68
|
-
.option('--interactive', 'Fill in details step by step')
|
|
69
|
-
.option('-w, --wait', 'Wait until processing is completed')
|
|
70
|
-
.option('--json', 'Output in JSON format')
|
|
71
|
-
.option('--page <number>', 'Page number for list', '1')
|
|
72
|
-
.option('--limit <number>', 'Items per page for list', '20')
|
|
73
|
-
.option('--status <status>', 'Filter by status (processing, completed, failed)')
|
|
74
|
-
.option('--search <query>', 'Search in input content')
|
|
75
|
-
.action(async (content, options) => {
|
|
76
|
-
try {
|
|
77
|
-
await (0, input_1.handleInputCommand)(content, options);
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
handleError(error, options);
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
// Add feedback command
|
|
84
|
-
program
|
|
85
|
-
.command('feedback [id]')
|
|
86
|
-
.description('List AI-generated feedback or show specific feedback details')
|
|
87
|
-
.option('--json', 'Output in JSON format')
|
|
88
|
-
.option('--page <number>', 'Page number for list', '1')
|
|
89
|
-
.option('--limit <number>', 'Items per page for list', '20')
|
|
90
|
-
.option('--search <query>', 'Search feedback by content')
|
|
91
|
-
.action(async (id, options) => {
|
|
92
|
-
try {
|
|
93
|
-
await (0, feedback_1.handleFeedbackCommand)(id, options);
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
handleError(error, options);
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
// Add config command
|
|
100
|
-
program.addCommand(config_1.configCommand);
|
|
101
|
-
// Add team command
|
|
102
|
-
program.addCommand(team_1.teamCommand);
|
|
103
|
-
// Add version command
|
|
104
|
-
program
|
|
105
|
-
.command('version')
|
|
106
|
-
.description('Show version information')
|
|
107
|
-
.action(() => {
|
|
108
|
-
console.log(chalk_1.default.blue('ClosedLoop AI CLI v0.2.0'));
|
|
109
|
-
console.log(chalk_1.default.gray('AI-Powered Customer Feedback Analysis'));
|
|
110
|
-
console.log(chalk_1.default.gray('Get started: https://closedloop.sh'));
|
|
111
|
-
});
|
|
112
|
-
// Add help command
|
|
113
|
-
program
|
|
114
|
-
.command('help [command]')
|
|
115
|
-
.description('Show help for a command')
|
|
116
|
-
.action((command) => {
|
|
117
|
-
if (command) {
|
|
118
|
-
program.outputHelp();
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
program.outputHelp();
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
// Error handling function
|
|
125
|
-
function handleError(error, options) {
|
|
126
|
-
if (options.json) {
|
|
127
|
-
console.log(JSON.stringify({
|
|
128
|
-
success: false,
|
|
129
|
-
error: error.message,
|
|
130
|
-
code: error.code || 'UNKNOWN_ERROR',
|
|
131
|
-
details: error.response?.data || 'Unknown error occurred'
|
|
132
|
-
}, null, 2));
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
if (error instanceof errors_1.CliError) {
|
|
136
|
-
console.error(chalk_1.default.red('ā Error:'), error.message);
|
|
137
|
-
if (error.code === 'NO_API_KEY') {
|
|
138
|
-
console.log(chalk_1.default.black('\nš” To fix:'));
|
|
139
|
-
console.log(chalk_1.default.black(' 1. Get your free API key at: https://closedloop.sh'));
|
|
140
|
-
console.log(chalk_1.default.black(' 2. Run: cl config set --api-key <your-key>'));
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
const cliError = (0, errors_1.handleApiError)(error);
|
|
145
|
-
console.error(chalk_1.default.red('ā Error:'), cliError.message);
|
|
146
|
-
console.log(chalk_1.default.black('\nš” Get help: cl --help'));
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
process.exit(error.exitCode || 1);
|
|
150
|
-
}
|
|
151
|
-
// Handle unknown commands
|
|
152
|
-
program.on('command:*', (operands) => {
|
|
153
|
-
console.error(chalk_1.default.red(`Unknown command: ${operands[0]}`));
|
|
154
|
-
console.log(chalk_1.default.gray('Run "cl --help" to see available commands'));
|
|
155
|
-
process.exit(1);
|
|
156
|
-
});
|
|
157
|
-
// Parse command line arguments
|
|
158
|
-
program.parse();
|
|
159
|
-
// If no command provided, show help
|
|
160
|
-
if (!process.argv.slice(2).length) {
|
|
161
|
-
program.outputHelp();
|
|
162
|
-
}
|
|
163
|
-
//# sourceMappingURL=cli.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|