@ebowwa/crm 0.1.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 +174 -0
- package/dist/cli/commands/activities.d.ts +11 -0
- package/dist/cli/commands/activities.d.ts.map +1 -0
- package/dist/cli/commands/activities.js +427 -0
- package/dist/cli/commands/activities.js.map +1 -0
- package/dist/cli/commands/contacts.d.ts +11 -0
- package/dist/cli/commands/contacts.d.ts.map +1 -0
- package/dist/cli/commands/contacts.js +458 -0
- package/dist/cli/commands/contacts.js.map +1 -0
- package/dist/cli/commands/deals.d.ts +11 -0
- package/dist/cli/commands/deals.d.ts.map +1 -0
- package/dist/cli/commands/deals.js +498 -0
- package/dist/cli/commands/deals.js.map +1 -0
- package/dist/cli/commands/media.d.ts +11 -0
- package/dist/cli/commands/media.d.ts.map +1 -0
- package/dist/cli/commands/media.js +417 -0
- package/dist/cli/commands/media.js.map +1 -0
- package/dist/cli/commands/search.d.ts +11 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +346 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +173 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/repl.d.ts +15 -0
- package/dist/cli/repl.d.ts.map +1 -0
- package/dist/cli/repl.js +318 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/utils/config.d.ts +91 -0
- package/dist/cli/utils/config.d.ts.map +1 -0
- package/dist/cli/utils/config.js +212 -0
- package/dist/cli/utils/config.js.map +1 -0
- package/dist/cli/utils/output.d.ts +136 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +323 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/cli/utils/prompt.d.ts +81 -0
- package/dist/cli/utils/prompt.d.ts.map +1 -0
- package/dist/cli/utils/prompt.js +341 -0
- package/dist/cli/utils/prompt.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +32 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/schemas.d.ts +3050 -0
- package/dist/core/schemas.d.ts.map +1 -0
- package/dist/core/schemas.js +667 -0
- package/dist/core/schemas.js.map +1 -0
- package/dist/core/types.d.ts +597 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +8 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +14 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +13 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +18 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/storage/client.d.ts +109 -0
- package/dist/mcp/storage/client.d.ts.map +1 -0
- package/dist/mcp/storage/client.js +355 -0
- package/dist/mcp/storage/client.js.map +1 -0
- package/dist/mcp/storage/index.d.ts +7 -0
- package/dist/mcp/storage/index.d.ts.map +1 -0
- package/dist/mcp/storage/index.js +6 -0
- package/dist/mcp/storage/index.js.map +1 -0
- package/dist/mcp/storage/types.d.ts +44 -0
- package/dist/mcp/storage/types.d.ts.map +1 -0
- package/dist/mcp/storage/types.js +35 -0
- package/dist/mcp/storage/types.js.map +1 -0
- package/dist/mcp/tools/definitions.d.ts +16 -0
- package/dist/mcp/tools/definitions.d.ts.map +1 -0
- package/dist/mcp/tools/definitions.js +914 -0
- package/dist/mcp/tools/definitions.js.map +1 -0
- package/dist/mcp/tools/handlers.d.ts +50 -0
- package/dist/mcp/tools/handlers.d.ts.map +1 -0
- package/dist/mcp/tools/handlers.js +760 -0
- package/dist/mcp/tools/handlers.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +7 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +6 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/types.d.ts +314 -0
- package/dist/mcp/tools/types.d.ts.map +1 -0
- package/dist/mcp/tools/types.js +5 -0
- package/dist/mcp/tools/types.js.map +1 -0
- package/dist/mcp/transports/stdio.d.ts +27 -0
- package/dist/mcp/transports/stdio.d.ts.map +1 -0
- package/dist/mcp/transports/stdio.js +237 -0
- package/dist/mcp/transports/stdio.js.map +1 -0
- package/dist/telemetry/index.d.ts +58 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +109 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/logger.d.ts +116 -0
- package/dist/telemetry/logger.d.ts.map +1 -0
- package/dist/telemetry/logger.js +256 -0
- package/dist/telemetry/logger.js.map +1 -0
- package/dist/telemetry/metrics.d.ts +115 -0
- package/dist/telemetry/metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics.js +292 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/telemetry/tracer.d.ts +227 -0
- package/dist/telemetry/tracer.d.ts.map +1 -0
- package/dist/telemetry/tracer.js +355 -0
- package/dist/telemetry/tracer.js.map +1 -0
- package/dist/web/app.d.ts +2 -0
- package/dist/web/app.d.ts.map +1 -0
- package/dist/web/app.js +115 -0
- package/dist/web/app.js.map +1 -0
- package/dist/web/components/ContactList.d.ts +3 -0
- package/dist/web/components/ContactList.d.ts.map +1 -0
- package/dist/web/components/ContactList.js +262 -0
- package/dist/web/components/ContactList.js.map +1 -0
- package/dist/web/components/Dashboard.d.ts +3 -0
- package/dist/web/components/Dashboard.d.ts.map +1 -0
- package/dist/web/components/Dashboard.js +158 -0
- package/dist/web/components/Dashboard.js.map +1 -0
- package/dist/web/components/DealPipeline.d.ts +3 -0
- package/dist/web/components/DealPipeline.d.ts.map +1 -0
- package/dist/web/components/DealPipeline.js +306 -0
- package/dist/web/components/DealPipeline.js.map +1 -0
- package/dist/web/index.d.ts +2 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +269 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/types.d.ts +75 -0
- package/dist/web/types.d.ts.map +1 -0
- package/dist/web/types.js +3 -0
- package/dist/web/types.js.map +1 -0
- package/native/index.d.ts +571 -0
- package/native/index.js +687 -0
- package/package.json +105 -0
- package/src/cli/commands/activities.ts +543 -0
- package/src/cli/commands/contacts.ts +563 -0
- package/src/cli/commands/deals.ts +637 -0
- package/src/cli/commands/media.ts +521 -0
- package/src/cli/commands/search.ts +426 -0
- package/src/cli/index.ts +203 -0
- package/src/cli/repl.ts +379 -0
- package/src/cli/utils/config.ts +299 -0
- package/src/cli/utils/output.ts +386 -0
- package/src/cli/utils/prompt.ts +444 -0
- package/src/cli.ts +11 -0
- package/src/core/index.ts +184 -0
- package/src/core/schemas.ts +770 -0
- package/src/core/types.ts +969 -0
- package/src/index.ts +8 -0
- package/src/mcp/index.ts +17 -0
- package/src/mcp/server.ts +26 -0
- package/src/mcp/storage/client.ts +408 -0
- package/src/mcp/storage/index.ts +7 -0
- package/src/mcp/storage/types.ts +72 -0
- package/src/mcp/tools/definitions.ts +961 -0
- package/src/mcp/tools/handlers.ts +805 -0
- package/src/mcp/tools/index.ts +7 -0
- package/src/mcp/tools/types.ts +390 -0
- package/src/mcp/transports/stdio.ts +225 -0
- package/src/telemetry/index.ts +131 -0
- package/src/telemetry/logger.ts +318 -0
- package/src/telemetry/metrics.ts +393 -0
- package/src/telemetry/tracer.ts +487 -0
- package/src/web/api/activities.ts +41 -0
- package/src/web/api/contacts.ts +114 -0
- package/src/web/api/deals.ts +108 -0
- package/src/web/api/media.ts +98 -0
- package/src/web/app.tsx +143 -0
- package/src/web/components/ActivityFeed.tsx +195 -0
- package/src/web/components/ContactList.tsx +340 -0
- package/src/web/components/Dashboard.tsx +214 -0
- package/src/web/components/DealPipeline.tsx +405 -0
- package/src/web/components/MediaGallery.tsx +334 -0
- package/src/web/index.html +14 -0
- package/src/web/index.ts +326 -0
- package/src/web/styles/main.css +180 -0
- package/src/web/types.ts +311 -0
package/dist/cli/repl.js
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive REPL Mode
|
|
3
|
+
*
|
|
4
|
+
* Provides an interactive shell for CRM operations.
|
|
5
|
+
*/
|
|
6
|
+
import * as readline from 'readline';
|
|
7
|
+
import { printSuccess, printError, printHeader, printDivider, output, colorize, } from './utils/output.js';
|
|
8
|
+
import { displayConfig, getConfigLocation } from './utils/config.js';
|
|
9
|
+
/**
|
|
10
|
+
* REPL history
|
|
11
|
+
*/
|
|
12
|
+
const history = [];
|
|
13
|
+
const context = {
|
|
14
|
+
currentContact: null,
|
|
15
|
+
currentDeal: null,
|
|
16
|
+
lastResults: [],
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Available commands in REPL
|
|
20
|
+
*/
|
|
21
|
+
const REPL_COMMANDS = {
|
|
22
|
+
help: {
|
|
23
|
+
description: 'Show available commands',
|
|
24
|
+
usage: 'help [command]',
|
|
25
|
+
},
|
|
26
|
+
contacts: {
|
|
27
|
+
description: 'Manage contacts',
|
|
28
|
+
usage: 'contacts list|get|create|update|delete [args...]',
|
|
29
|
+
example: 'contacts list --search john',
|
|
30
|
+
},
|
|
31
|
+
deals: {
|
|
32
|
+
description: 'Manage deals',
|
|
33
|
+
usage: 'deals list|get|create|update|delete|move [args...]',
|
|
34
|
+
example: 'deals list --stage proposal',
|
|
35
|
+
},
|
|
36
|
+
activities: {
|
|
37
|
+
description: 'Manage activities',
|
|
38
|
+
usage: 'activities list|log|create|delete [args...]',
|
|
39
|
+
example: 'activities log <contact-id> call "Follow up call"',
|
|
40
|
+
},
|
|
41
|
+
media: {
|
|
42
|
+
description: 'Manage media files',
|
|
43
|
+
usage: 'media list|upload|get|delete [args...]',
|
|
44
|
+
example: 'media upload ./doc.pdf --contact <id>',
|
|
45
|
+
},
|
|
46
|
+
search: {
|
|
47
|
+
description: 'Search across entities',
|
|
48
|
+
usage: 'search <query>',
|
|
49
|
+
example: 'search john smith',
|
|
50
|
+
},
|
|
51
|
+
recent: {
|
|
52
|
+
description: 'Show recent items',
|
|
53
|
+
usage: 'recent [contacts|deals|activities]',
|
|
54
|
+
},
|
|
55
|
+
use: {
|
|
56
|
+
description: 'Set context (current contact/deal)',
|
|
57
|
+
usage: 'use contact|deal <id>',
|
|
58
|
+
example: 'use contact abc-123',
|
|
59
|
+
},
|
|
60
|
+
context: {
|
|
61
|
+
description: 'Show current context',
|
|
62
|
+
usage: 'context',
|
|
63
|
+
},
|
|
64
|
+
clear: {
|
|
65
|
+
description: 'Clear the screen',
|
|
66
|
+
usage: 'clear',
|
|
67
|
+
},
|
|
68
|
+
config: {
|
|
69
|
+
description: 'Show or manage configuration',
|
|
70
|
+
usage: 'config [location]',
|
|
71
|
+
},
|
|
72
|
+
history: {
|
|
73
|
+
description: 'Show command history',
|
|
74
|
+
usage: 'history [n]',
|
|
75
|
+
},
|
|
76
|
+
exit: {
|
|
77
|
+
description: 'Exit REPL',
|
|
78
|
+
usage: 'exit',
|
|
79
|
+
},
|
|
80
|
+
quit: {
|
|
81
|
+
description: 'Exit REPL (alias)',
|
|
82
|
+
usage: 'quit',
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Create readline interface
|
|
87
|
+
*/
|
|
88
|
+
function createRL() {
|
|
89
|
+
return readline.createInterface({
|
|
90
|
+
input: process.stdin,
|
|
91
|
+
output: process.stdout,
|
|
92
|
+
history: history,
|
|
93
|
+
historySize: 100,
|
|
94
|
+
removeHistoryDuplicates: true,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get prompt string
|
|
99
|
+
*/
|
|
100
|
+
function getPrompt() {
|
|
101
|
+
const parts = [];
|
|
102
|
+
if (context.currentContact) {
|
|
103
|
+
parts.push(output.info(`c:${context.currentContact.slice(0, 4)}`));
|
|
104
|
+
}
|
|
105
|
+
if (context.currentDeal) {
|
|
106
|
+
parts.push(output.info(`d:${context.currentDeal.slice(0, 4)}`));
|
|
107
|
+
}
|
|
108
|
+
const contextStr = parts.length > 0 ? `(${parts.join(',')})` : '';
|
|
109
|
+
return `${contextStr}crm> `;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Show help
|
|
113
|
+
*/
|
|
114
|
+
function showHelp(command) {
|
|
115
|
+
if (command && REPL_COMMANDS[command]) {
|
|
116
|
+
const cmd = REPL_COMMANDS[command];
|
|
117
|
+
console.log();
|
|
118
|
+
console.log(output.bold(command));
|
|
119
|
+
console.log(` ${cmd.description}`);
|
|
120
|
+
console.log();
|
|
121
|
+
console.log(` Usage: ${cmd.usage}`);
|
|
122
|
+
if (cmd.example) {
|
|
123
|
+
console.log(` Example: ${cmd.example}`);
|
|
124
|
+
}
|
|
125
|
+
console.log();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
console.log();
|
|
129
|
+
console.log(output.bold('CRM REPL Commands'));
|
|
130
|
+
printDivider();
|
|
131
|
+
const maxCmd = Math.max(...Object.keys(REPL_COMMANDS).map((c) => c.length));
|
|
132
|
+
for (const [cmd, info] of Object.entries(REPL_COMMANDS)) {
|
|
133
|
+
console.log(` ${colorize(cmd.padEnd(maxCmd + 2), 'cyan')}${info.description}`);
|
|
134
|
+
}
|
|
135
|
+
console.log();
|
|
136
|
+
console.log(`Type ${output.info('help <command>')} for detailed usage.`);
|
|
137
|
+
console.log();
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Show context
|
|
141
|
+
*/
|
|
142
|
+
function showContext() {
|
|
143
|
+
console.log();
|
|
144
|
+
console.log(output.bold('Current Context'));
|
|
145
|
+
printDivider('-');
|
|
146
|
+
if (context.currentContact) {
|
|
147
|
+
console.log(` Contact: ${context.currentContact}`);
|
|
148
|
+
}
|
|
149
|
+
if (context.currentDeal) {
|
|
150
|
+
console.log(` Deal: ${context.currentDeal}`);
|
|
151
|
+
}
|
|
152
|
+
if (!context.currentContact && !context.currentDeal) {
|
|
153
|
+
console.log(' (no context set)');
|
|
154
|
+
}
|
|
155
|
+
console.log();
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Set context
|
|
159
|
+
*/
|
|
160
|
+
function setContext(type, id) {
|
|
161
|
+
if (type === 'contact') {
|
|
162
|
+
context.currentContact = id;
|
|
163
|
+
printSuccess(`Context set to contact: ${id}`);
|
|
164
|
+
}
|
|
165
|
+
else if (type === 'deal') {
|
|
166
|
+
context.currentDeal = id;
|
|
167
|
+
printSuccess(`Context set to deal: ${id}`);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
printError(`Unknown context type: ${type}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Show history
|
|
175
|
+
*/
|
|
176
|
+
function showHistory(n = 10) {
|
|
177
|
+
console.log();
|
|
178
|
+
const count = Math.min(n, history.length);
|
|
179
|
+
const start = Math.max(0, history.length - count);
|
|
180
|
+
for (let i = start; i < history.length; i++) {
|
|
181
|
+
const num = String(i + 1).padStart(3);
|
|
182
|
+
console.log(` ${output.dim(num)} ${history[i]}`);
|
|
183
|
+
}
|
|
184
|
+
console.log();
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Parse and execute command
|
|
188
|
+
*/
|
|
189
|
+
async function executeCommand(input, program) {
|
|
190
|
+
const trimmed = input.trim();
|
|
191
|
+
if (!trimmed)
|
|
192
|
+
return true;
|
|
193
|
+
// Add to history
|
|
194
|
+
history.push(trimmed);
|
|
195
|
+
// Parse command
|
|
196
|
+
const parts = trimmed.split(/\s+/);
|
|
197
|
+
const cmd = parts[0]?.toLowerCase();
|
|
198
|
+
const args = parts.slice(1);
|
|
199
|
+
switch (cmd) {
|
|
200
|
+
case 'help':
|
|
201
|
+
case '?':
|
|
202
|
+
showHelp(args[0]);
|
|
203
|
+
break;
|
|
204
|
+
case 'exit':
|
|
205
|
+
case 'quit':
|
|
206
|
+
case 'q':
|
|
207
|
+
console.log('\nGoodbye!');
|
|
208
|
+
return false;
|
|
209
|
+
case 'clear':
|
|
210
|
+
console.clear();
|
|
211
|
+
break;
|
|
212
|
+
case 'context':
|
|
213
|
+
showContext();
|
|
214
|
+
break;
|
|
215
|
+
case 'use':
|
|
216
|
+
if (args.length < 2) {
|
|
217
|
+
printError('Usage: use contact|deal <id>');
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
setContext(args[0], args[1]);
|
|
221
|
+
}
|
|
222
|
+
break;
|
|
223
|
+
case 'recent':
|
|
224
|
+
// Delegate to search recent
|
|
225
|
+
try {
|
|
226
|
+
await program.parseAsync(['recent', ...args], { from: 'user' });
|
|
227
|
+
}
|
|
228
|
+
catch (e) {
|
|
229
|
+
printError(String(e));
|
|
230
|
+
}
|
|
231
|
+
break;
|
|
232
|
+
case 'history':
|
|
233
|
+
showHistory(args[0] ? parseInt(args[0]) : 10);
|
|
234
|
+
break;
|
|
235
|
+
case 'config':
|
|
236
|
+
if (args[0] === 'location') {
|
|
237
|
+
console.log(`\nConfig file: ${getConfigLocation()}\n`);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
displayConfig();
|
|
241
|
+
}
|
|
242
|
+
break;
|
|
243
|
+
case 'contacts':
|
|
244
|
+
case 'deals':
|
|
245
|
+
case 'activities':
|
|
246
|
+
case 'media':
|
|
247
|
+
case 'search':
|
|
248
|
+
// Delegate to main program
|
|
249
|
+
try {
|
|
250
|
+
// Add context if not specified
|
|
251
|
+
const fullArgs = [...args];
|
|
252
|
+
if (cmd === 'activities' && !args.includes('-c') && !args.includes('--contact') && context.currentContact) {
|
|
253
|
+
if (args[0] === 'list') {
|
|
254
|
+
fullArgs.push('-c', context.currentContact);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (cmd === 'media' && !args.includes('-c') && !args.includes('--contact') && context.currentContact) {
|
|
258
|
+
if (args[0] === 'list') {
|
|
259
|
+
fullArgs.push('-c', context.currentContact);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
await program.parseAsync([cmd, ...fullArgs], { from: 'user' });
|
|
263
|
+
}
|
|
264
|
+
catch (e) {
|
|
265
|
+
printError(String(e));
|
|
266
|
+
}
|
|
267
|
+
break;
|
|
268
|
+
default:
|
|
269
|
+
printError(`Unknown command: ${cmd}`);
|
|
270
|
+
console.log(`Type ${output.info('help')} for available commands.`);
|
|
271
|
+
}
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Start REPL
|
|
276
|
+
*/
|
|
277
|
+
export async function startREPL(program) {
|
|
278
|
+
printHeader('CRM Interactive Mode');
|
|
279
|
+
console.log(`Type ${output.info('help')} for commands, ${output.info('exit')} to quit.`);
|
|
280
|
+
console.log();
|
|
281
|
+
const rl = createRL();
|
|
282
|
+
const promptForInput = () => {
|
|
283
|
+
rl.question(getPrompt(), async (input) => {
|
|
284
|
+
const shouldContinue = await executeCommand(input, program);
|
|
285
|
+
if (shouldContinue) {
|
|
286
|
+
promptForInput();
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
rl.close();
|
|
290
|
+
process.exit(0);
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
};
|
|
294
|
+
// Handle Ctrl+C
|
|
295
|
+
rl.on('SIGINT', () => {
|
|
296
|
+
console.log('\n\nGoodbye!');
|
|
297
|
+
rl.close();
|
|
298
|
+
process.exit(0);
|
|
299
|
+
});
|
|
300
|
+
// Handle Ctrl+D
|
|
301
|
+
rl.on('close', () => {
|
|
302
|
+
console.log('\nGoodbye!');
|
|
303
|
+
process.exit(0);
|
|
304
|
+
});
|
|
305
|
+
promptForInput();
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Register REPL command
|
|
309
|
+
*/
|
|
310
|
+
export function registerREPLCommand(program) {
|
|
311
|
+
program
|
|
312
|
+
.command('repl')
|
|
313
|
+
.description('Start interactive REPL mode')
|
|
314
|
+
.action(async () => {
|
|
315
|
+
await startREPL(program);
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=repl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/cli/repl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Configuration Management
|
|
3
|
+
*
|
|
4
|
+
* Handles loading, saving, and managing CLI configuration.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Configuration interface
|
|
8
|
+
*/
|
|
9
|
+
export interface CLIConfig {
|
|
10
|
+
/** API endpoint for CRM backend */
|
|
11
|
+
apiEndpoint: string;
|
|
12
|
+
/** Default output format */
|
|
13
|
+
outputFormat: 'table' | 'json' | 'plain';
|
|
14
|
+
/** Default page size for lists */
|
|
15
|
+
pageSize: number;
|
|
16
|
+
/** Default currency */
|
|
17
|
+
currency: string;
|
|
18
|
+
/** Color output enabled */
|
|
19
|
+
colorEnabled: boolean;
|
|
20
|
+
/** Editor for multiline input */
|
|
21
|
+
editor?: string;
|
|
22
|
+
/** Recent contacts for quick access */
|
|
23
|
+
recentContacts: string[];
|
|
24
|
+
/** Recent deals for quick access */
|
|
25
|
+
recentDeals: string[];
|
|
26
|
+
/** Custom aliases */
|
|
27
|
+
aliases: Record<string, string>;
|
|
28
|
+
/** User preferences */
|
|
29
|
+
preferences: {
|
|
30
|
+
defaultStatus?: string;
|
|
31
|
+
defaultDealStage?: string;
|
|
32
|
+
defaultPriority?: string;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Load configuration from file
|
|
37
|
+
*/
|
|
38
|
+
export declare function loadConfig(): CLIConfig;
|
|
39
|
+
/**
|
|
40
|
+
* Save configuration to file
|
|
41
|
+
*/
|
|
42
|
+
export declare function saveConfig(config: CLIConfig): void;
|
|
43
|
+
/**
|
|
44
|
+
* Update specific config value
|
|
45
|
+
*/
|
|
46
|
+
export declare function updateConfig<K extends keyof CLIConfig>(key: K, value: CLIConfig[K]): void;
|
|
47
|
+
/**
|
|
48
|
+
* Get a config value
|
|
49
|
+
*/
|
|
50
|
+
export declare function getConfig<K extends keyof CLIConfig>(key: K): CLIConfig[K];
|
|
51
|
+
/**
|
|
52
|
+
* Add to recent contacts
|
|
53
|
+
*/
|
|
54
|
+
export declare function addRecentContact(contactId: string): void;
|
|
55
|
+
/**
|
|
56
|
+
* Add to recent deals
|
|
57
|
+
*/
|
|
58
|
+
export declare function addRecentDeal(dealId: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* Set an alias
|
|
61
|
+
*/
|
|
62
|
+
export declare function setAlias(name: string, command: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* Remove an alias
|
|
65
|
+
*/
|
|
66
|
+
export declare function removeAlias(name: string): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Resolve alias to command
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolveAlias(name: string): string | null;
|
|
71
|
+
/**
|
|
72
|
+
* Reset configuration to defaults
|
|
73
|
+
*/
|
|
74
|
+
export declare function resetConfig(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Display current configuration
|
|
77
|
+
*/
|
|
78
|
+
export declare function displayConfig(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Config file location
|
|
81
|
+
*/
|
|
82
|
+
export declare function getConfigLocation(): string;
|
|
83
|
+
/**
|
|
84
|
+
* Environment variable overrides
|
|
85
|
+
*/
|
|
86
|
+
export declare function applyEnvOverrides(config: CLIConfig): CLIConfig;
|
|
87
|
+
/**
|
|
88
|
+
* Initialize config with interactive prompts
|
|
89
|
+
*/
|
|
90
|
+
export declare function initConfig(): Promise<void>;
|
|
91
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IAEpB,4BAA4B;IAC5B,YAAY,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAEzC,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IAEjB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IAEjB,2BAA2B;IAC3B,YAAY,EAAE,OAAO,CAAC;IAEtB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,uCAAuC;IACvC,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,oCAAoC;IACpC,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhC,uBAAuB;IACvB,WAAW,EAAE;QACX,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AA4BD;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAetC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAQlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,SAAS,EACpD,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAClB,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,SAAS,EACjD,GAAG,EAAE,CAAC,GACL,SAAS,CAAC,CAAC,CAAC,CAGd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAMxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAMlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGxD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAqBpC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAoB9D;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAgDhD"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Configuration Management
|
|
3
|
+
*
|
|
4
|
+
* Handles loading, saving, and managing CLI configuration.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import * as os from 'os';
|
|
9
|
+
/**
|
|
10
|
+
* Default configuration
|
|
11
|
+
*/
|
|
12
|
+
const DEFAULT_CONFIG = {
|
|
13
|
+
apiEndpoint: 'http://localhost:3000/api',
|
|
14
|
+
outputFormat: 'table',
|
|
15
|
+
pageSize: 20,
|
|
16
|
+
currency: 'USD',
|
|
17
|
+
colorEnabled: true,
|
|
18
|
+
recentContacts: [],
|
|
19
|
+
recentDeals: [],
|
|
20
|
+
aliases: {},
|
|
21
|
+
preferences: {},
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Get config file path
|
|
25
|
+
*/
|
|
26
|
+
function getConfigPath() {
|
|
27
|
+
const configDir = path.join(os.homedir(), '.crm');
|
|
28
|
+
if (!fs.existsSync(configDir)) {
|
|
29
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
return path.join(configDir, 'config.json');
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Load configuration from file
|
|
35
|
+
*/
|
|
36
|
+
export function loadConfig() {
|
|
37
|
+
const configPath = getConfigPath();
|
|
38
|
+
if (!fs.existsSync(configPath)) {
|
|
39
|
+
return { ...DEFAULT_CONFIG };
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
43
|
+
const userConfig = JSON.parse(content);
|
|
44
|
+
return { ...DEFAULT_CONFIG, ...userConfig };
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.error('Warning: Failed to load config, using defaults');
|
|
48
|
+
return { ...DEFAULT_CONFIG };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Save configuration to file
|
|
53
|
+
*/
|
|
54
|
+
export function saveConfig(config) {
|
|
55
|
+
const configPath = getConfigPath();
|
|
56
|
+
try {
|
|
57
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error('Failed to save config:', error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Update specific config value
|
|
65
|
+
*/
|
|
66
|
+
export function updateConfig(key, value) {
|
|
67
|
+
const config = loadConfig();
|
|
68
|
+
config[key] = value;
|
|
69
|
+
saveConfig(config);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get a config value
|
|
73
|
+
*/
|
|
74
|
+
export function getConfig(key) {
|
|
75
|
+
const config = loadConfig();
|
|
76
|
+
return config[key];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Add to recent contacts
|
|
80
|
+
*/
|
|
81
|
+
export function addRecentContact(contactId) {
|
|
82
|
+
const config = loadConfig();
|
|
83
|
+
const recent = config.recentContacts.filter((id) => id !== contactId);
|
|
84
|
+
recent.unshift(contactId);
|
|
85
|
+
config.recentContacts = recent.slice(0, 10); // Keep last 10
|
|
86
|
+
saveConfig(config);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Add to recent deals
|
|
90
|
+
*/
|
|
91
|
+
export function addRecentDeal(dealId) {
|
|
92
|
+
const config = loadConfig();
|
|
93
|
+
const recent = config.recentDeals.filter((id) => id !== dealId);
|
|
94
|
+
recent.unshift(dealId);
|
|
95
|
+
config.recentDeals = recent.slice(0, 10); // Keep last 10
|
|
96
|
+
saveConfig(config);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Set an alias
|
|
100
|
+
*/
|
|
101
|
+
export function setAlias(name, command) {
|
|
102
|
+
const config = loadConfig();
|
|
103
|
+
config.aliases[name] = command;
|
|
104
|
+
saveConfig(config);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Remove an alias
|
|
108
|
+
*/
|
|
109
|
+
export function removeAlias(name) {
|
|
110
|
+
const config = loadConfig();
|
|
111
|
+
if (config.aliases[name]) {
|
|
112
|
+
delete config.aliases[name];
|
|
113
|
+
saveConfig(config);
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Resolve alias to command
|
|
120
|
+
*/
|
|
121
|
+
export function resolveAlias(name) {
|
|
122
|
+
const config = loadConfig();
|
|
123
|
+
return config.aliases[name] || null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Reset configuration to defaults
|
|
127
|
+
*/
|
|
128
|
+
export function resetConfig() {
|
|
129
|
+
saveConfig({ ...DEFAULT_CONFIG });
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Display current configuration
|
|
133
|
+
*/
|
|
134
|
+
export function displayConfig() {
|
|
135
|
+
const config = loadConfig();
|
|
136
|
+
console.log('\nCurrent Configuration:\n');
|
|
137
|
+
const entries = [
|
|
138
|
+
['API Endpoint', config.apiEndpoint],
|
|
139
|
+
['Output Format', config.outputFormat],
|
|
140
|
+
['Page Size', config.pageSize],
|
|
141
|
+
['Currency', config.currency],
|
|
142
|
+
['Color Enabled', config.colorEnabled],
|
|
143
|
+
['Editor', config.editor || '(system default)'],
|
|
144
|
+
['Recent Contacts', config.recentContacts.length],
|
|
145
|
+
['Recent Deals', config.recentDeals.length],
|
|
146
|
+
['Aliases', Object.keys(config.aliases).length],
|
|
147
|
+
];
|
|
148
|
+
for (const [key, value] of entries) {
|
|
149
|
+
console.log(` \x1b[36m${key}:\x1b[0m ${value}`);
|
|
150
|
+
}
|
|
151
|
+
console.log();
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Config file location
|
|
155
|
+
*/
|
|
156
|
+
export function getConfigLocation() {
|
|
157
|
+
return getConfigPath();
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Environment variable overrides
|
|
161
|
+
*/
|
|
162
|
+
export function applyEnvOverrides(config) {
|
|
163
|
+
const envConfig = { ...config };
|
|
164
|
+
if (process.env.CRM_API_ENDPOINT) {
|
|
165
|
+
envConfig.apiEndpoint = process.env.CRM_API_ENDPOINT;
|
|
166
|
+
}
|
|
167
|
+
if (process.env.CRM_OUTPUT_FORMAT) {
|
|
168
|
+
envConfig.outputFormat = process.env.CRM_OUTPUT_FORMAT;
|
|
169
|
+
}
|
|
170
|
+
if (process.env.CRM_CURRENCY) {
|
|
171
|
+
envConfig.currency = process.env.CRM_CURRENCY;
|
|
172
|
+
}
|
|
173
|
+
if (process.env.NO_COLOR) {
|
|
174
|
+
envConfig.colorEnabled = false;
|
|
175
|
+
}
|
|
176
|
+
return envConfig;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Initialize config with interactive prompts
|
|
180
|
+
*/
|
|
181
|
+
export async function initConfig() {
|
|
182
|
+
const { prompt, confirm, select } = await import('./prompt.js');
|
|
183
|
+
console.log('\n\x1b[1mCRM CLI Configuration\x1b[0m\n');
|
|
184
|
+
console.log('Let\'s set up your CRM CLI configuration.\n');
|
|
185
|
+
const config = loadConfig();
|
|
186
|
+
// API Endpoint
|
|
187
|
+
const apiEndpoint = await prompt('API Endpoint', config.apiEndpoint);
|
|
188
|
+
if (apiEndpoint) {
|
|
189
|
+
config.apiEndpoint = apiEndpoint;
|
|
190
|
+
}
|
|
191
|
+
// Output format
|
|
192
|
+
config.outputFormat = await select('Default output format', ['table', 'json', 'plain'], config.outputFormat);
|
|
193
|
+
// Page size
|
|
194
|
+
const pageSizeStr = await prompt('Default page size', String(config.pageSize));
|
|
195
|
+
const pageSize = parseInt(pageSizeStr);
|
|
196
|
+
if (!isNaN(pageSize) && pageSize > 0) {
|
|
197
|
+
config.pageSize = pageSize;
|
|
198
|
+
}
|
|
199
|
+
// Currency
|
|
200
|
+
config.currency = await select('Default currency', ['USD', 'EUR', 'GBP', 'CAD', 'AUD', 'JPY'], config.currency);
|
|
201
|
+
// Color
|
|
202
|
+
config.colorEnabled = await confirm('Enable color output?', config.colorEnabled);
|
|
203
|
+
// Editor
|
|
204
|
+
const editor = await prompt('Editor for multiline input (e.g., vim, code)', config.editor);
|
|
205
|
+
if (editor) {
|
|
206
|
+
config.editor = editor;
|
|
207
|
+
}
|
|
208
|
+
saveConfig(config);
|
|
209
|
+
console.log('\n\x1b[32m\u2713 Configuration saved!\x1b[0m');
|
|
210
|
+
console.log(`\nConfig file: ${getConfigPath()}\n`);
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/utils/config.ts"],"names":[],"mappings":"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"}
|