@closedloop-ai/cli 0.2.4 → 0.3.1
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 +176 -270
- 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 -522
- package/packages/cli/dist/__tests__/api.test.js +0 -151
- package/packages/cli/dist/__tests__/api.test.js.map +0 -1
- 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__/performance.test.js +0 -221
- package/packages/cli/dist/__tests__/performance.test.js.map +0 -1
- package/packages/cli/dist/__tests__/setup.js +0 -50
- package/packages/cli/dist/__tests__/setup.js.map +0 -1
- package/packages/cli/dist/__tests__/team-simple.test.js +0 -38
- package/packages/cli/dist/__tests__/team-simple.test.js.map +0 -1
- package/packages/cli/dist/__tests__/test-factories.js +0 -148
- package/packages/cli/dist/__tests__/test-factories.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/ingest.js +0 -60
- package/packages/cli/dist/api/ingest.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 -59
- 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 -201
- 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/ingest.js +0 -391
- package/packages/cli/dist/commands/ingest.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/insight.js +0 -234
- package/packages/cli/dist/commands/insight.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 -82
- 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 -38
- 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,168 +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.handleUsageCommand = handleUsageCommand;
|
|
7
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
const table_1 = require("table");
|
|
9
|
-
const usage_1 = require("../api/usage");
|
|
10
|
-
// UUID regex pattern for detecting IDs
|
|
11
|
-
const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
12
|
-
// Main usage command handler
|
|
13
|
-
async function handleUsageCommand(id, options) {
|
|
14
|
-
// If ID provided, show specific usage details
|
|
15
|
-
if (id) {
|
|
16
|
-
if (!UUID_REGEX.test(id)) {
|
|
17
|
-
console.log(chalk_1.default.yellow('💡 Invalid usage ID format'));
|
|
18
|
-
console.log(chalk_1.default.black('Usage ID should be a UUID like: 74e3dd87-878f-41cf-8e5a-87527bbf7770'));
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
return await showUsage(id, options);
|
|
22
|
-
}
|
|
23
|
-
// Otherwise, list all usage
|
|
24
|
-
return await listUsageData(options);
|
|
25
|
-
}
|
|
26
|
-
// Helper functions
|
|
27
|
-
async function listUsageData(options) {
|
|
28
|
-
const page = parseInt(options.page) || 1;
|
|
29
|
-
const limit = parseInt(options.limit) || 20;
|
|
30
|
-
const result = await (0, usage_1.listUsage)(page, limit);
|
|
31
|
-
if (options.json) {
|
|
32
|
-
console.log(JSON.stringify({ success: true, data: result }, null, 2));
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
const usage = result.usage || [];
|
|
36
|
-
if (usage.length === 0) {
|
|
37
|
-
console.log(chalk_1.default.yellow('💰 No usage data found'));
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
console.log(chalk_1.default.blue('\n💰 Usage Summary:'));
|
|
41
|
-
const tableData = [
|
|
42
|
-
[
|
|
43
|
-
chalk_1.default.bold('ID'),
|
|
44
|
-
chalk_1.default.bold('Title'),
|
|
45
|
-
chalk_1.default.bold('Status'),
|
|
46
|
-
chalk_1.default.bold('Credits Used'),
|
|
47
|
-
chalk_1.default.bold('AI Feedback'),
|
|
48
|
-
chalk_1.default.bold('Submitted')
|
|
49
|
-
]
|
|
50
|
-
];
|
|
51
|
-
usage.forEach((item) => {
|
|
52
|
-
tableData.push([
|
|
53
|
-
item.id,
|
|
54
|
-
item.title || chalk_1.default.gray('null'),
|
|
55
|
-
item.status || 'unknown',
|
|
56
|
-
item.credits_consumed || 0,
|
|
57
|
-
item.feedback_count || 0,
|
|
58
|
-
item.created_at ? new Date(item.created_at).toLocaleString() : 'Unknown'
|
|
59
|
-
]);
|
|
60
|
-
});
|
|
61
|
-
console.log((0, table_1.table)(tableData, {
|
|
62
|
-
border: {
|
|
63
|
-
topBody: '─',
|
|
64
|
-
topJoin: '┬',
|
|
65
|
-
topLeft: '┌',
|
|
66
|
-
topRight: '┐',
|
|
67
|
-
bottomBody: '─',
|
|
68
|
-
bottomJoin: '┴',
|
|
69
|
-
bottomLeft: '└',
|
|
70
|
-
bottomRight: '┘',
|
|
71
|
-
bodyLeft: '│',
|
|
72
|
-
bodyRight: '│',
|
|
73
|
-
bodyJoin: '│',
|
|
74
|
-
joinBody: '─',
|
|
75
|
-
joinLeft: '├',
|
|
76
|
-
joinRight: '┤',
|
|
77
|
-
joinJoin: '┼'
|
|
78
|
-
}
|
|
79
|
-
}));
|
|
80
|
-
if (result.pagination) {
|
|
81
|
-
console.log(chalk_1.default.black(`\nPage ${result.pagination.page} of ${result.pagination.pages} (${result.pagination.total} total submissions)`));
|
|
82
|
-
if (result.pagination.page < result.pagination.pages) {
|
|
83
|
-
console.log(chalk_1.default.gray(`💡 Use --page ${result.pagination.page + 1} to see next page`));
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
// Show total credits
|
|
87
|
-
const totalCredits = usage.reduce((sum, item) => sum + (item.credits_consumed || 0), 0);
|
|
88
|
-
console.log(chalk_1.default.blue(`\n💰 Total Credits Used: ${totalCredits}`));
|
|
89
|
-
}
|
|
90
|
-
async function showUsage(id, options) {
|
|
91
|
-
try {
|
|
92
|
-
const result = await (0, usage_1.getUsageDetail)(id);
|
|
93
|
-
if (options.json) {
|
|
94
|
-
console.log(JSON.stringify({ success: true, data: result }, null, 2));
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
console.log(chalk_1.default.blue('\n💰 Usage Details:'));
|
|
98
|
-
console.log(chalk_1.default.black('─'.repeat(50)));
|
|
99
|
-
console.log(chalk_1.default.blue('ID:'), result.id);
|
|
100
|
-
console.log(chalk_1.default.blue('Title:'), result.title || chalk_1.default.gray('null'));
|
|
101
|
-
console.log(chalk_1.default.blue('Status:'), result.status || 'unknown');
|
|
102
|
-
console.log(chalk_1.default.blue('Credits Used:'), result.credits_consumed || 0);
|
|
103
|
-
console.log(chalk_1.default.blue('AI Feedback Generated:'), result.feedback_count || 0);
|
|
104
|
-
console.log(chalk_1.default.blue('Submitted:'), result.created_at ? new Date(result.created_at).toLocaleString() : 'Unknown');
|
|
105
|
-
console.log(chalk_1.default.blue('Updated:'), result.updated_at ? new Date(result.updated_at).toLocaleString() : 'Unknown');
|
|
106
|
-
if (result.feedbacks && result.feedbacks.length > 0) {
|
|
107
|
-
console.log(chalk_1.default.blue('\nGenerated Feedback:'));
|
|
108
|
-
result.feedbacks.forEach((feedback, index) => {
|
|
109
|
-
console.log(chalk_1.default.black(` ${index + 1}. ${feedback.title || 'Untitled'}`));
|
|
110
|
-
console.log(chalk_1.default.gray(` ID: ${feedback.id}`));
|
|
111
|
-
console.log(chalk_1.default.gray(` Created: ${feedback.created_at ? new Date(feedback.created_at).toLocaleString() : 'Unknown'}`));
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
catch (error) {
|
|
116
|
-
if (options.json) {
|
|
117
|
-
console.log(JSON.stringify({
|
|
118
|
-
success: false,
|
|
119
|
-
error: error.message,
|
|
120
|
-
details: error.response?.data || 'Unknown error occurred'
|
|
121
|
-
}, null, 2));
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
if (error.response?.status === 404) {
|
|
125
|
-
console.error(chalk_1.default.red('❌ Usage record not found'));
|
|
126
|
-
console.log(chalk_1.default.black('The usage ID you provided does not exist or is not accessible.'));
|
|
127
|
-
}
|
|
128
|
-
else if (error.response?.status === 401) {
|
|
129
|
-
console.error(chalk_1.default.red('❌ Authentication Error:'), 'Invalid API key');
|
|
130
|
-
console.log(chalk_1.default.black('\n💡 To fix:'));
|
|
131
|
-
console.log(chalk_1.default.black(' 1. Get your free API key at: https://closedloop.sh'));
|
|
132
|
-
console.log(chalk_1.default.black(' 2. Run: cl config set --api-key <your-key>'));
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
136
|
-
console.log(chalk_1.default.black('\n💡 Get help: cl --help'));
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
process.exit(1);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
function handleError(error, options) {
|
|
143
|
-
if (options.json) {
|
|
144
|
-
console.log(JSON.stringify({
|
|
145
|
-
success: false,
|
|
146
|
-
error: error.message,
|
|
147
|
-
details: error.response?.data || 'Unknown error occurred'
|
|
148
|
-
}, null, 2));
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
if (error.response?.status === 404) {
|
|
152
|
-
console.error(chalk_1.default.red('❌ Not found'));
|
|
153
|
-
console.log(chalk_1.default.black('The requested resource does not exist or is not accessible.'));
|
|
154
|
-
}
|
|
155
|
-
else if (error.response?.status === 401) {
|
|
156
|
-
console.error(chalk_1.default.red('❌ Authentication Error:'), 'Invalid API key');
|
|
157
|
-
console.log(chalk_1.default.black('\n💡 To fix:'));
|
|
158
|
-
console.log(chalk_1.default.black(' 1. Get your free API key at: https://closedloop.sh'));
|
|
159
|
-
console.log(chalk_1.default.black(' 2. Run: cl config set --api-key <your-key>'));
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
163
|
-
console.log(chalk_1.default.black('\n💡 Get help: cl --help'));
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
process.exit(1);
|
|
167
|
-
}
|
|
168
|
-
//# sourceMappingURL=usage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.URLS = exports.MESSAGES = exports.CONFIG = exports.VERSION = void 0;
|
|
4
|
-
exports.VERSION = '0.2.4';
|
|
5
|
-
exports.CONFIG = {
|
|
6
|
-
API_BASE_URL: process.env.CLOSEDLOOP_API_URL || 'https://mcp.closedloop.sh',
|
|
7
|
-
USER_AGENT: `closedloop-cli/${exports.VERSION}`,
|
|
8
|
-
MAX_RETRY_ATTEMPTS: 100,
|
|
9
|
-
POLL_INTERVAL_MS: 3000,
|
|
10
|
-
DEFAULT_PAGE_SIZE: 20,
|
|
11
|
-
MAX_PAGE_SIZE: 100,
|
|
12
|
-
MIN_API_KEY_LENGTH: 10,
|
|
13
|
-
MAX_CONTENT_LENGTH: 50000,
|
|
14
|
-
TIMEOUT_MS: 30000
|
|
15
|
-
};
|
|
16
|
-
exports.MESSAGES = {
|
|
17
|
-
NO_API_KEY: `🔑 No API key configured!
|
|
18
|
-
|
|
19
|
-
To get started:
|
|
20
|
-
1. Go to https://closedloop.sh
|
|
21
|
-
2. Sign up for a free account
|
|
22
|
-
3. Generate your API key
|
|
23
|
-
4. Run: cl config --set-api-key <your-key>
|
|
24
|
-
|
|
25
|
-
Get your free API key at: https://closedloop.sh`,
|
|
26
|
-
INVALID_API_KEY: '❌ Invalid API key. Get your free API key at https://closedloop.sh',
|
|
27
|
-
CONNECTION_ERROR: '❌ Connection Error: Cannot connect to ClosedLoop AI servers',
|
|
28
|
-
CHECK_INTERNET: 'Check your internet connection and try again',
|
|
29
|
-
GET_HELP: 'Get help: cl --help',
|
|
30
|
-
PROCESSING_ERROR: '❌ Processing Error: Unable to process feedback',
|
|
31
|
-
VALIDATION_ERROR: '❌ Validation Error:',
|
|
32
|
-
UNKNOWN_ERROR: 'Unknown error occurred'
|
|
33
|
-
};
|
|
34
|
-
exports.URLS = {
|
|
35
|
-
CLOSEDLOOP_HOME: 'https://closedloop.sh',
|
|
36
|
-
GET_API_KEY: 'https://closedloop.sh'
|
|
37
|
-
};
|
|
38
|
-
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,OAAO,CAAC;AAElB,QAAA,MAAM,GAAG;IACpB,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,2BAA2B;IAC3E,UAAU,EAAE,kBAAkB,eAAO,EAAE;IACvC,kBAAkB,EAAE,GAAG;IACvB,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,EAAE;IACrB,aAAa,EAAE,GAAG;IAClB,kBAAkB,EAAE,EAAE;IACtB,kBAAkB,EAAE,KAAK;IACzB,UAAU,EAAE,KAAK;CACT,CAAC;AAEE,QAAA,QAAQ,GAAG;IACtB,UAAU,EAAE;;;;;;;;gDAQkC;IAE9C,eAAe,EAAE,mEAAmE;IACpF,gBAAgB,EAAE,6DAA6D;IAC/E,cAAc,EAAE,8CAA8C;IAC9D,QAAQ,EAAE,qBAAqB;IAC/B,gBAAgB,EAAE,gDAAgD;IAClE,gBAAgB,EAAE,qBAAqB;IACvC,aAAa,EAAE,wBAAwB;CAC/B,CAAC;AAEE,QAAA,IAAI,GAAG;IAClB,eAAe,EAAE,uBAAuB;IACxC,WAAW,EAAE,uBAAuB;CAC5B,CAAC"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.config = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const path = __importStar(require("path"));
|
|
39
|
-
const os = __importStar(require("os"));
|
|
40
|
-
class ConfigManager {
|
|
41
|
-
constructor() {
|
|
42
|
-
this.config = {};
|
|
43
|
-
this.configPath = path.join(os.homedir(), '.closedloop', 'config.json');
|
|
44
|
-
this.load();
|
|
45
|
-
}
|
|
46
|
-
load() {
|
|
47
|
-
try {
|
|
48
|
-
if (fs.existsSync(this.configPath)) {
|
|
49
|
-
const data = fs.readFileSync(this.configPath, 'utf8');
|
|
50
|
-
this.config = JSON.parse(data);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
// Ignore config load errors
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
save() {
|
|
58
|
-
try {
|
|
59
|
-
const dir = path.dirname(this.configPath);
|
|
60
|
-
if (!fs.existsSync(dir)) {
|
|
61
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
62
|
-
}
|
|
63
|
-
fs.writeFileSync(this.configPath, JSON.stringify(this.config, null, 2));
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
throw new Error('Failed to save configuration');
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
get(key) {
|
|
70
|
-
if (key) {
|
|
71
|
-
return this.config[key];
|
|
72
|
-
}
|
|
73
|
-
return { ...this.config };
|
|
74
|
-
}
|
|
75
|
-
set(key, value) {
|
|
76
|
-
this.config[key] = value;
|
|
77
|
-
this.save();
|
|
78
|
-
}
|
|
79
|
-
getConfigPath() {
|
|
80
|
-
return fs.existsSync(this.configPath) ? this.configPath : 'Not created yet';
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
exports.config = new ConfigManager();
|
|
84
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAOzB,MAAM,aAAa;IAIjB;QAFQ,WAAM,GAAW,EAAE,CAAC;QAG1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,IAAI;QACV,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACtD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4BAA4B;QAC9B,CAAC;IACH,CAAC;IAEO,IAAI;QACV,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAkB;QACpB,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,GAAiB,EAAE,KAAU;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,aAAa;QACX,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC9E,CAAC;CACF;AAEY,QAAA,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -1,55 +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.ConfigManager = void 0;
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const os_1 = __importDefault(require("os"));
|
|
10
|
-
class ConfigManager {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.config = {};
|
|
13
|
-
// Use XDG config directory if available, fallback to home directory
|
|
14
|
-
const configDir = process.env.XDG_CONFIG_HOME || path_1.default.join(os_1.default.homedir(), '.config');
|
|
15
|
-
const cliDir = path_1.default.join(configDir, 'closedloop');
|
|
16
|
-
// Ensure directory exists
|
|
17
|
-
if (!fs_1.default.existsSync(cliDir)) {
|
|
18
|
-
fs_1.default.mkdirSync(cliDir, { recursive: true });
|
|
19
|
-
}
|
|
20
|
-
this.configPath = path_1.default.join(cliDir, 'config.json');
|
|
21
|
-
this.loadConfig();
|
|
22
|
-
}
|
|
23
|
-
loadConfig() {
|
|
24
|
-
try {
|
|
25
|
-
if (fs_1.default.existsSync(this.configPath)) {
|
|
26
|
-
const data = fs_1.default.readFileSync(this.configPath, 'utf8');
|
|
27
|
-
this.config = JSON.parse(data);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
// If config file is corrupted, start fresh
|
|
32
|
-
this.config = {};
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
saveConfig() {
|
|
36
|
-
try {
|
|
37
|
-
fs_1.default.writeFileSync(this.configPath, JSON.stringify(this.config, null, 2));
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
throw new Error(`Failed to save config: ${error}`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
getConfig() {
|
|
44
|
-
return { ...this.config };
|
|
45
|
-
}
|
|
46
|
-
setConfig(newConfig) {
|
|
47
|
-
this.config = { ...this.config, ...newConfig };
|
|
48
|
-
this.saveConfig();
|
|
49
|
-
}
|
|
50
|
-
getConfigPath() {
|
|
51
|
-
return this.configPath;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
exports.ConfigManager = ConfigManager;
|
|
55
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,MAAa,aAAa;IAIxB;QAFQ,WAAM,GAAQ,EAAE,CAAC;QAGvB,oEAAoE;QACpE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAElD,0BAA0B;QAC1B,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,YAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC;YACH,IAAI,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACtD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,2CAA2C;YAC3C,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC;YACH,YAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,SAAS,CAAC,SAAc;QACtB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;QAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF;AAlDD,sCAkDC"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ERROR_CODES = exports.CliError = void 0;
|
|
4
|
-
exports.handleApiError = handleApiError;
|
|
5
|
-
exports.handleValidationError = handleValidationError;
|
|
6
|
-
exports.handleInputError = handleInputError;
|
|
7
|
-
exports.handleProcessingError = handleProcessingError;
|
|
8
|
-
class CliError extends Error {
|
|
9
|
-
constructor(message, code, exitCode = 1) {
|
|
10
|
-
super(message);
|
|
11
|
-
this.code = code;
|
|
12
|
-
this.exitCode = exitCode;
|
|
13
|
-
this.name = 'CliError';
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
exports.CliError = CliError;
|
|
17
|
-
exports.ERROR_CODES = {
|
|
18
|
-
NO_API_KEY: 'NO_API_KEY',
|
|
19
|
-
INVALID_API_KEY: 'INVALID_API_KEY',
|
|
20
|
-
INVALID_INPUT: 'INVALID_INPUT',
|
|
21
|
-
API_ERROR: 'API_ERROR',
|
|
22
|
-
VALIDATION_ERROR: 'VALIDATION_ERROR',
|
|
23
|
-
CONNECTION_ERROR: 'CONNECTION_ERROR',
|
|
24
|
-
PROCESSING_ERROR: 'PROCESSING_ERROR',
|
|
25
|
-
NOT_FOUND: 'NOT_FOUND',
|
|
26
|
-
UNAUTHORIZED: 'UNAUTHORIZED',
|
|
27
|
-
RATE_LIMITED: 'RATE_LIMITED',
|
|
28
|
-
SERVER_ERROR: 'SERVER_ERROR',
|
|
29
|
-
UNKNOWN_ERROR: 'UNKNOWN_ERROR'
|
|
30
|
-
};
|
|
31
|
-
function handleApiError(error) {
|
|
32
|
-
if (error.response) {
|
|
33
|
-
const status = error.response.status;
|
|
34
|
-
const data = error.response.data;
|
|
35
|
-
switch (status) {
|
|
36
|
-
case 401:
|
|
37
|
-
return new CliError('Invalid API key. Please check your configuration.', exports.ERROR_CODES.UNAUTHORIZED, 1);
|
|
38
|
-
case 404:
|
|
39
|
-
return new CliError('Resource not found. Please check the ID and try again.', exports.ERROR_CODES.NOT_FOUND, 1);
|
|
40
|
-
case 429:
|
|
41
|
-
return new CliError('Rate limit exceeded. Please wait a moment and try again.', exports.ERROR_CODES.RATE_LIMITED, 1);
|
|
42
|
-
case 500:
|
|
43
|
-
case 502:
|
|
44
|
-
case 503:
|
|
45
|
-
case 504:
|
|
46
|
-
return new CliError('Server error. Please try again later.', exports.ERROR_CODES.SERVER_ERROR, 1);
|
|
47
|
-
default:
|
|
48
|
-
return new CliError(data?.message || `API error (${status})`, exports.ERROR_CODES.API_ERROR, 1);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
else if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED') {
|
|
52
|
-
return new CliError('Cannot connect to ClosedLoop AI servers. Please check your internet connection.', exports.ERROR_CODES.CONNECTION_ERROR, 1);
|
|
53
|
-
}
|
|
54
|
-
else if (error.code === 'ETIMEDOUT') {
|
|
55
|
-
return new CliError('Request timed out. Please try again.', exports.ERROR_CODES.CONNECTION_ERROR, 1);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
return new CliError(error.message || 'An unknown error occurred', exports.ERROR_CODES.UNKNOWN_ERROR, 1);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
function handleValidationError(message) {
|
|
62
|
-
return new CliError(message, exports.ERROR_CODES.VALIDATION_ERROR, 1);
|
|
63
|
-
}
|
|
64
|
-
function handleInputError(message) {
|
|
65
|
-
return new CliError(message, exports.ERROR_CODES.INVALID_INPUT, 1);
|
|
66
|
-
}
|
|
67
|
-
function handleProcessingError(message) {
|
|
68
|
-
return new CliError(message, exports.ERROR_CODES.PROCESSING_ERROR, 1);
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateUuid = validateUuid;
|
|
4
|
-
exports.validateInputContent = validateInputContent;
|
|
5
|
-
exports.validateApiKey = validateApiKey;
|
|
6
|
-
exports.validateEmail = validateEmail;
|
|
7
|
-
exports.validateUrl = validateUrl;
|
|
8
|
-
exports.validatePagination = validatePagination;
|
|
9
|
-
exports.validateTitle = validateTitle;
|
|
10
|
-
exports.validateCustomerId = validateCustomerId;
|
|
11
|
-
exports.validateName = validateName;
|
|
12
|
-
exports.sanitizeInput = sanitizeInput;
|
|
13
|
-
exports.validateAndSanitizeInput = validateAndSanitizeInput;
|
|
14
|
-
const errors_1 = require("./errors");
|
|
15
|
-
const constants_1 = require("../config/constants");
|
|
16
|
-
// UUID validation
|
|
17
|
-
function validateUuid(id) {
|
|
18
|
-
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
19
|
-
return uuidRegex.test(id);
|
|
20
|
-
}
|
|
21
|
-
// Content validation
|
|
22
|
-
function validateInputContent(content) {
|
|
23
|
-
if (!content || content.trim().length === 0) {
|
|
24
|
-
throw (0, errors_1.handleInputError)('Content cannot be empty');
|
|
25
|
-
}
|
|
26
|
-
if (content.length > constants_1.CONFIG.MAX_CONTENT_LENGTH) {
|
|
27
|
-
throw (0, errors_1.handleInputError)(`Content too long (max ${constants_1.CONFIG.MAX_CONTENT_LENGTH} characters)`);
|
|
28
|
-
}
|
|
29
|
-
return content.trim();
|
|
30
|
-
}
|
|
31
|
-
// API key validation
|
|
32
|
-
function validateApiKey(apiKey) {
|
|
33
|
-
if (!apiKey || apiKey.trim().length === 0 || apiKey.length < constants_1.CONFIG.MIN_API_KEY_LENGTH) {
|
|
34
|
-
throw (0, errors_1.handleValidationError)('Invalid API key. Get your free API key at https://closedloop.sh');
|
|
35
|
-
}
|
|
36
|
-
return apiKey.trim();
|
|
37
|
-
}
|
|
38
|
-
// Email validation
|
|
39
|
-
function validateEmail(email) {
|
|
40
|
-
if (!email || email.trim().length === 0) {
|
|
41
|
-
throw (0, errors_1.handleValidationError)('Email cannot be empty');
|
|
42
|
-
}
|
|
43
|
-
const trimmedEmail = email.trim();
|
|
44
|
-
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
45
|
-
if (!emailRegex.test(trimmedEmail)) {
|
|
46
|
-
throw (0, errors_1.handleValidationError)('Invalid email format');
|
|
47
|
-
}
|
|
48
|
-
return trimmedEmail.toLowerCase();
|
|
49
|
-
}
|
|
50
|
-
// URL validation
|
|
51
|
-
function validateUrl(url) {
|
|
52
|
-
if (!url || url.trim().length === 0) {
|
|
53
|
-
throw (0, errors_1.handleValidationError)('URL cannot be empty');
|
|
54
|
-
}
|
|
55
|
-
try {
|
|
56
|
-
const urlObj = new URL(url);
|
|
57
|
-
if (!['http:', 'https:'].includes(urlObj.protocol)) {
|
|
58
|
-
throw (0, errors_1.handleValidationError)('URL must use HTTP or HTTPS protocol');
|
|
59
|
-
}
|
|
60
|
-
return urlObj.toString();
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
throw (0, errors_1.handleValidationError)('Invalid URL format');
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
// Pagination validation
|
|
67
|
-
function validatePagination(page, limit) {
|
|
68
|
-
const validatedPage = Math.max(1, page || 1);
|
|
69
|
-
const validatedLimit = Math.min(Math.max(1, limit || constants_1.CONFIG.DEFAULT_PAGE_SIZE), constants_1.CONFIG.MAX_PAGE_SIZE);
|
|
70
|
-
return { page: validatedPage, limit: validatedLimit };
|
|
71
|
-
}
|
|
72
|
-
// Title validation
|
|
73
|
-
function validateTitle(title) {
|
|
74
|
-
if (!title || title.trim().length === 0) {
|
|
75
|
-
throw (0, errors_1.handleValidationError)('Title cannot be empty');
|
|
76
|
-
}
|
|
77
|
-
if (title.length > 200) {
|
|
78
|
-
throw (0, errors_1.handleValidationError)('Title too long (max 200 characters)');
|
|
79
|
-
}
|
|
80
|
-
return title.trim();
|
|
81
|
-
}
|
|
82
|
-
// Customer ID validation
|
|
83
|
-
function validateCustomerId(customerId) {
|
|
84
|
-
if (!customerId || customerId.trim().length === 0) {
|
|
85
|
-
throw (0, errors_1.handleValidationError)('Customer ID cannot be empty');
|
|
86
|
-
}
|
|
87
|
-
if (customerId.length > 100) {
|
|
88
|
-
throw (0, errors_1.handleValidationError)('Customer ID too long (max 100 characters)');
|
|
89
|
-
}
|
|
90
|
-
return customerId.trim();
|
|
91
|
-
}
|
|
92
|
-
// Name validation
|
|
93
|
-
function validateName(name) {
|
|
94
|
-
if (!name || name.trim().length === 0) {
|
|
95
|
-
throw (0, errors_1.handleValidationError)('Name cannot be empty');
|
|
96
|
-
}
|
|
97
|
-
if (name.length > 100) {
|
|
98
|
-
throw (0, errors_1.handleValidationError)('Name too long (max 100 characters)');
|
|
99
|
-
}
|
|
100
|
-
return name.trim();
|
|
101
|
-
}
|
|
102
|
-
// Sanitize input to prevent XSS
|
|
103
|
-
function sanitizeInput(input) {
|
|
104
|
-
return input
|
|
105
|
-
.replace(/[<>]/g, '') // Remove < and >
|
|
106
|
-
.replace(/javascript:/gi, '') // Remove javascript: protocol
|
|
107
|
-
.replace(/on\w+=/gi, '') // Remove event handlers
|
|
108
|
-
.trim();
|
|
109
|
-
}
|
|
110
|
-
// Validate and sanitize all input data
|
|
111
|
-
function validateAndSanitizeInput(data) {
|
|
112
|
-
const validated = {};
|
|
113
|
-
// Required fields
|
|
114
|
-
validated.content = sanitizeInput(validateInputContent(data.content));
|
|
115
|
-
// Optional fields
|
|
116
|
-
if (data.title) {
|
|
117
|
-
validated.title = sanitizeInput(validateTitle(data.title));
|
|
118
|
-
}
|
|
119
|
-
if (data.source_url) {
|
|
120
|
-
validated.source_url = validateUrl(data.source_url);
|
|
121
|
-
}
|
|
122
|
-
if (data.customer_id) {
|
|
123
|
-
validated.customer_id = sanitizeInput(validateCustomerId(data.customer_id));
|
|
124
|
-
}
|
|
125
|
-
if (data.reporter_name) {
|
|
126
|
-
validated.reporter_name = sanitizeInput(validateName(data.reporter_name));
|
|
127
|
-
}
|
|
128
|
-
if (data.reporter_email) {
|
|
129
|
-
validated.reporter_email = validateEmail(data.reporter_email);
|
|
130
|
-
}
|
|
131
|
-
return validated;
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
|