@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.
Files changed (57) hide show
  1. package/README.md +106 -258
  2. package/dist/THIRD_PARTY_NOTICES.txt +24 -0
  3. package/dist/closedloop.js +156 -0
  4. package/package.json +31 -62
  5. package/CONTRIBUTING.md +0 -437
  6. package/LICENSE +0 -21
  7. package/docs/CLI_COMMANDS.md +0 -508
  8. package/packages/cli/dist/__tests__/cli.test.js +0 -37
  9. package/packages/cli/dist/__tests__/cli.test.js.map +0 -1
  10. package/packages/cli/dist/__tests__/config.test.js +0 -33
  11. package/packages/cli/dist/__tests__/config.test.js.map +0 -1
  12. package/packages/cli/dist/__tests__/errors.test.js +0 -109
  13. package/packages/cli/dist/__tests__/errors.test.js.map +0 -1
  14. package/packages/cli/dist/__tests__/setup.js +0 -20
  15. package/packages/cli/dist/__tests__/setup.js.map +0 -1
  16. package/packages/cli/dist/__tests__/validation.test.js +0 -124
  17. package/packages/cli/dist/__tests__/validation.test.js.map +0 -1
  18. package/packages/cli/dist/api/auth.js +0 -27
  19. package/packages/cli/dist/api/auth.js.map +0 -1
  20. package/packages/cli/dist/api/feedback.js +0 -70
  21. package/packages/cli/dist/api/feedback.js.map +0 -1
  22. package/packages/cli/dist/api/input.js +0 -60
  23. package/packages/cli/dist/api/input.js.map +0 -1
  24. package/packages/cli/dist/api/team.js +0 -45
  25. package/packages/cli/dist/api/team.js.map +0 -1
  26. package/packages/cli/dist/api/usage.js +0 -49
  27. package/packages/cli/dist/api/usage.js.map +0 -1
  28. package/packages/cli/dist/cli.js +0 -163
  29. package/packages/cli/dist/cli.js.map +0 -1
  30. package/packages/cli/dist/commands/config.js +0 -186
  31. package/packages/cli/dist/commands/config.js.map +0 -1
  32. package/packages/cli/dist/commands/feedback.js +0 -234
  33. package/packages/cli/dist/commands/feedback.js.map +0 -1
  34. package/packages/cli/dist/commands/input.js +0 -370
  35. package/packages/cli/dist/commands/input.js.map +0 -1
  36. package/packages/cli/dist/commands/list.js +0 -81
  37. package/packages/cli/dist/commands/list.js.map +0 -1
  38. package/packages/cli/dist/commands/status.js +0 -93
  39. package/packages/cli/dist/commands/status.js.map +0 -1
  40. package/packages/cli/dist/commands/submit.js +0 -225
  41. package/packages/cli/dist/commands/submit.js.map +0 -1
  42. package/packages/cli/dist/commands/team.js +0 -44
  43. package/packages/cli/dist/commands/team.js.map +0 -1
  44. package/packages/cli/dist/commands/usage.js +0 -168
  45. package/packages/cli/dist/commands/usage.js.map +0 -1
  46. package/packages/cli/dist/config/constants.js +0 -37
  47. package/packages/cli/dist/config/constants.js.map +0 -1
  48. package/packages/cli/dist/config/index.js +0 -84
  49. package/packages/cli/dist/config/index.js.map +0 -1
  50. package/packages/cli/dist/types/index.js +0 -3
  51. package/packages/cli/dist/types/index.js.map +0 -1
  52. package/packages/cli/dist/utils/config.js +0 -55
  53. package/packages/cli/dist/utils/config.js.map +0 -1
  54. package/packages/cli/dist/utils/errors.js +0 -70
  55. package/packages/cli/dist/utils/errors.js.map +0 -1
  56. package/packages/cli/dist/utils/validation.js +0 -133
  57. 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"}
@@ -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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"}