@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.
Files changed (187) hide show
  1. package/README.md +174 -0
  2. package/dist/cli/commands/activities.d.ts +11 -0
  3. package/dist/cli/commands/activities.d.ts.map +1 -0
  4. package/dist/cli/commands/activities.js +427 -0
  5. package/dist/cli/commands/activities.js.map +1 -0
  6. package/dist/cli/commands/contacts.d.ts +11 -0
  7. package/dist/cli/commands/contacts.d.ts.map +1 -0
  8. package/dist/cli/commands/contacts.js +458 -0
  9. package/dist/cli/commands/contacts.js.map +1 -0
  10. package/dist/cli/commands/deals.d.ts +11 -0
  11. package/dist/cli/commands/deals.d.ts.map +1 -0
  12. package/dist/cli/commands/deals.js +498 -0
  13. package/dist/cli/commands/deals.js.map +1 -0
  14. package/dist/cli/commands/media.d.ts +11 -0
  15. package/dist/cli/commands/media.d.ts.map +1 -0
  16. package/dist/cli/commands/media.js +417 -0
  17. package/dist/cli/commands/media.js.map +1 -0
  18. package/dist/cli/commands/search.d.ts +11 -0
  19. package/dist/cli/commands/search.d.ts.map +1 -0
  20. package/dist/cli/commands/search.js +346 -0
  21. package/dist/cli/commands/search.js.map +1 -0
  22. package/dist/cli/index.d.ts +13 -0
  23. package/dist/cli/index.d.ts.map +1 -0
  24. package/dist/cli/index.js +173 -0
  25. package/dist/cli/index.js.map +1 -0
  26. package/dist/cli/repl.d.ts +15 -0
  27. package/dist/cli/repl.d.ts.map +1 -0
  28. package/dist/cli/repl.js +318 -0
  29. package/dist/cli/repl.js.map +1 -0
  30. package/dist/cli/utils/config.d.ts +91 -0
  31. package/dist/cli/utils/config.d.ts.map +1 -0
  32. package/dist/cli/utils/config.js +212 -0
  33. package/dist/cli/utils/config.js.map +1 -0
  34. package/dist/cli/utils/output.d.ts +136 -0
  35. package/dist/cli/utils/output.d.ts.map +1 -0
  36. package/dist/cli/utils/output.js +323 -0
  37. package/dist/cli/utils/output.js.map +1 -0
  38. package/dist/cli/utils/prompt.d.ts +81 -0
  39. package/dist/cli/utils/prompt.d.ts.map +1 -0
  40. package/dist/cli/utils/prompt.js +341 -0
  41. package/dist/cli/utils/prompt.js.map +1 -0
  42. package/dist/cli.d.ts +3 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +8 -0
  45. package/dist/cli.js.map +1 -0
  46. package/dist/core/index.d.ts +6 -0
  47. package/dist/core/index.d.ts.map +1 -0
  48. package/dist/core/index.js +32 -0
  49. package/dist/core/index.js.map +1 -0
  50. package/dist/core/schemas.d.ts +3050 -0
  51. package/dist/core/schemas.d.ts.map +1 -0
  52. package/dist/core/schemas.js +667 -0
  53. package/dist/core/schemas.js.map +1 -0
  54. package/dist/core/types.d.ts +597 -0
  55. package/dist/core/types.d.ts.map +1 -0
  56. package/dist/core/types.js +8 -0
  57. package/dist/core/types.js.map +1 -0
  58. package/dist/index.d.ts +7 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +8 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/mcp/index.d.ts +14 -0
  63. package/dist/mcp/index.d.ts.map +1 -0
  64. package/dist/mcp/index.js +11 -0
  65. package/dist/mcp/index.js.map +1 -0
  66. package/dist/mcp/server.d.ts +13 -0
  67. package/dist/mcp/server.d.ts.map +1 -0
  68. package/dist/mcp/server.js +18 -0
  69. package/dist/mcp/server.js.map +1 -0
  70. package/dist/mcp/storage/client.d.ts +109 -0
  71. package/dist/mcp/storage/client.d.ts.map +1 -0
  72. package/dist/mcp/storage/client.js +355 -0
  73. package/dist/mcp/storage/client.js.map +1 -0
  74. package/dist/mcp/storage/index.d.ts +7 -0
  75. package/dist/mcp/storage/index.d.ts.map +1 -0
  76. package/dist/mcp/storage/index.js +6 -0
  77. package/dist/mcp/storage/index.js.map +1 -0
  78. package/dist/mcp/storage/types.d.ts +44 -0
  79. package/dist/mcp/storage/types.d.ts.map +1 -0
  80. package/dist/mcp/storage/types.js +35 -0
  81. package/dist/mcp/storage/types.js.map +1 -0
  82. package/dist/mcp/tools/definitions.d.ts +16 -0
  83. package/dist/mcp/tools/definitions.d.ts.map +1 -0
  84. package/dist/mcp/tools/definitions.js +914 -0
  85. package/dist/mcp/tools/definitions.js.map +1 -0
  86. package/dist/mcp/tools/handlers.d.ts +50 -0
  87. package/dist/mcp/tools/handlers.d.ts.map +1 -0
  88. package/dist/mcp/tools/handlers.js +760 -0
  89. package/dist/mcp/tools/handlers.js.map +1 -0
  90. package/dist/mcp/tools/index.d.ts +7 -0
  91. package/dist/mcp/tools/index.d.ts.map +1 -0
  92. package/dist/mcp/tools/index.js +6 -0
  93. package/dist/mcp/tools/index.js.map +1 -0
  94. package/dist/mcp/tools/types.d.ts +314 -0
  95. package/dist/mcp/tools/types.d.ts.map +1 -0
  96. package/dist/mcp/tools/types.js +5 -0
  97. package/dist/mcp/tools/types.js.map +1 -0
  98. package/dist/mcp/transports/stdio.d.ts +27 -0
  99. package/dist/mcp/transports/stdio.d.ts.map +1 -0
  100. package/dist/mcp/transports/stdio.js +237 -0
  101. package/dist/mcp/transports/stdio.js.map +1 -0
  102. package/dist/telemetry/index.d.ts +58 -0
  103. package/dist/telemetry/index.d.ts.map +1 -0
  104. package/dist/telemetry/index.js +109 -0
  105. package/dist/telemetry/index.js.map +1 -0
  106. package/dist/telemetry/logger.d.ts +116 -0
  107. package/dist/telemetry/logger.d.ts.map +1 -0
  108. package/dist/telemetry/logger.js +256 -0
  109. package/dist/telemetry/logger.js.map +1 -0
  110. package/dist/telemetry/metrics.d.ts +115 -0
  111. package/dist/telemetry/metrics.d.ts.map +1 -0
  112. package/dist/telemetry/metrics.js +292 -0
  113. package/dist/telemetry/metrics.js.map +1 -0
  114. package/dist/telemetry/tracer.d.ts +227 -0
  115. package/dist/telemetry/tracer.d.ts.map +1 -0
  116. package/dist/telemetry/tracer.js +355 -0
  117. package/dist/telemetry/tracer.js.map +1 -0
  118. package/dist/web/app.d.ts +2 -0
  119. package/dist/web/app.d.ts.map +1 -0
  120. package/dist/web/app.js +115 -0
  121. package/dist/web/app.js.map +1 -0
  122. package/dist/web/components/ContactList.d.ts +3 -0
  123. package/dist/web/components/ContactList.d.ts.map +1 -0
  124. package/dist/web/components/ContactList.js +262 -0
  125. package/dist/web/components/ContactList.js.map +1 -0
  126. package/dist/web/components/Dashboard.d.ts +3 -0
  127. package/dist/web/components/Dashboard.d.ts.map +1 -0
  128. package/dist/web/components/Dashboard.js +158 -0
  129. package/dist/web/components/Dashboard.js.map +1 -0
  130. package/dist/web/components/DealPipeline.d.ts +3 -0
  131. package/dist/web/components/DealPipeline.d.ts.map +1 -0
  132. package/dist/web/components/DealPipeline.js +306 -0
  133. package/dist/web/components/DealPipeline.js.map +1 -0
  134. package/dist/web/index.d.ts +2 -0
  135. package/dist/web/index.d.ts.map +1 -0
  136. package/dist/web/index.js +269 -0
  137. package/dist/web/index.js.map +1 -0
  138. package/dist/web/types.d.ts +75 -0
  139. package/dist/web/types.d.ts.map +1 -0
  140. package/dist/web/types.js +3 -0
  141. package/dist/web/types.js.map +1 -0
  142. package/native/index.d.ts +571 -0
  143. package/native/index.js +687 -0
  144. package/package.json +105 -0
  145. package/src/cli/commands/activities.ts +543 -0
  146. package/src/cli/commands/contacts.ts +563 -0
  147. package/src/cli/commands/deals.ts +637 -0
  148. package/src/cli/commands/media.ts +521 -0
  149. package/src/cli/commands/search.ts +426 -0
  150. package/src/cli/index.ts +203 -0
  151. package/src/cli/repl.ts +379 -0
  152. package/src/cli/utils/config.ts +299 -0
  153. package/src/cli/utils/output.ts +386 -0
  154. package/src/cli/utils/prompt.ts +444 -0
  155. package/src/cli.ts +11 -0
  156. package/src/core/index.ts +184 -0
  157. package/src/core/schemas.ts +770 -0
  158. package/src/core/types.ts +969 -0
  159. package/src/index.ts +8 -0
  160. package/src/mcp/index.ts +17 -0
  161. package/src/mcp/server.ts +26 -0
  162. package/src/mcp/storage/client.ts +408 -0
  163. package/src/mcp/storage/index.ts +7 -0
  164. package/src/mcp/storage/types.ts +72 -0
  165. package/src/mcp/tools/definitions.ts +961 -0
  166. package/src/mcp/tools/handlers.ts +805 -0
  167. package/src/mcp/tools/index.ts +7 -0
  168. package/src/mcp/tools/types.ts +390 -0
  169. package/src/mcp/transports/stdio.ts +225 -0
  170. package/src/telemetry/index.ts +131 -0
  171. package/src/telemetry/logger.ts +318 -0
  172. package/src/telemetry/metrics.ts +393 -0
  173. package/src/telemetry/tracer.ts +487 -0
  174. package/src/web/api/activities.ts +41 -0
  175. package/src/web/api/contacts.ts +114 -0
  176. package/src/web/api/deals.ts +108 -0
  177. package/src/web/api/media.ts +98 -0
  178. package/src/web/app.tsx +143 -0
  179. package/src/web/components/ActivityFeed.tsx +195 -0
  180. package/src/web/components/ContactList.tsx +340 -0
  181. package/src/web/components/Dashboard.tsx +214 -0
  182. package/src/web/components/DealPipeline.tsx +405 -0
  183. package/src/web/components/MediaGallery.tsx +334 -0
  184. package/src/web/index.html +14 -0
  185. package/src/web/index.ts +326 -0
  186. package/src/web/styles/main.css +180 -0
  187. package/src/web/types.ts +311 -0
@@ -0,0 +1,346 @@
1
+ /**
2
+ * Search Commands
3
+ *
4
+ * CLI commands for searching across CRM entities.
5
+ */
6
+ import { printError, printWarning, printTable, printJSON, printHeader, printDivider, formatStatus, formatCurrency, formatRelativeTime, truncate, output, } from '../utils/output.js';
7
+ import { Spinner } from '../utils/prompt.js';
8
+ import { CRMStorageClient } from '../../mcp/storage/client.js';
9
+ // Storage client singleton
10
+ let _storage = null;
11
+ /**
12
+ * Get storage client (lazy initialization)
13
+ */
14
+ async function getStorage() {
15
+ if (!_storage) {
16
+ _storage = new CRMStorageClient({
17
+ path: process.env.CRM_DB_PATH || './data/crm-cli',
18
+ mapSize: 256 * 1024 * 1024, // 256MB
19
+ maxDbs: 20,
20
+ });
21
+ await _storage.initialize();
22
+ }
23
+ return _storage;
24
+ }
25
+ /**
26
+ * Get all contacts
27
+ */
28
+ async function getContacts() {
29
+ const storage = await getStorage();
30
+ return storage.list('contacts');
31
+ }
32
+ /**
33
+ * Get all deals
34
+ */
35
+ async function getDeals() {
36
+ const storage = await getStorage();
37
+ return storage.list('deals');
38
+ }
39
+ /**
40
+ * Get all activities
41
+ */
42
+ async function getActivities() {
43
+ const storage = await getStorage();
44
+ return storage.list('activities');
45
+ }
46
+ /**
47
+ * Register search commands
48
+ */
49
+ export function registerSearchCommands(program) {
50
+ const search = program.command('search').description('Search across all entities');
51
+ // Global search
52
+ search
53
+ .command('<query>')
54
+ .description('Search contacts, deals, and activities')
55
+ .option('-t, --type <type>', 'Filter by entity type (contact, deal, activity)')
56
+ .option('--json', 'Output as JSON')
57
+ .option('--limit <number>', 'Limit results per type', '10')
58
+ .action(async (query, options) => {
59
+ if (!query || query.length < 2) {
60
+ printError('Search query must be at least 2 characters');
61
+ process.exit(1);
62
+ }
63
+ const spinner = new Spinner(`Searching for "${query}"...`).start();
64
+ await new Promise((r) => setTimeout(r, 300));
65
+ const results = [];
66
+ const q = query.toLowerCase();
67
+ const limit = parseInt(options.limit);
68
+ // Search contacts
69
+ if (!options.type || options.type === 'contact') {
70
+ const contacts = await getContacts();
71
+ for (const contact of contacts) {
72
+ const matches = [];
73
+ // Check name
74
+ if (contact.name.toLowerCase().includes(q)) {
75
+ matches.push({ field: 'name', value: contact.name });
76
+ }
77
+ // Check emails
78
+ for (const email of contact.emails) {
79
+ if (email.email.toLowerCase().includes(q)) {
80
+ matches.push({ field: 'email', value: email.email });
81
+ }
82
+ }
83
+ // Check company
84
+ if (contact.company?.toLowerCase().includes(q)) {
85
+ matches.push({ field: 'company', value: contact.company });
86
+ }
87
+ // Check tags
88
+ for (const tag of contact.tags) {
89
+ if (tag.toLowerCase().includes(q)) {
90
+ matches.push({ field: 'tag', value: tag });
91
+ }
92
+ }
93
+ if (matches.length > 0) {
94
+ results.push({
95
+ type: 'contact',
96
+ id: contact.id,
97
+ title: contact.name,
98
+ subtitle: contact.company || contact.emails[0]?.email || 'No details',
99
+ matchField: matches[0].field,
100
+ matchValue: matches[0].value,
101
+ });
102
+ }
103
+ if (results.filter((r) => r.type === 'contact').length >= limit)
104
+ break;
105
+ }
106
+ }
107
+ // Search deals
108
+ if (!options.type || options.type === 'deal') {
109
+ const deals = await getDeals();
110
+ for (const deal of deals) {
111
+ const matches = [];
112
+ // Check title
113
+ if (deal.title.toLowerCase().includes(q)) {
114
+ matches.push({ field: 'title', value: deal.title });
115
+ }
116
+ // Check notes
117
+ if (deal.notes?.toLowerCase().includes(q)) {
118
+ matches.push({ field: 'notes', value: truncate(deal.notes, 50) });
119
+ }
120
+ // Check tags
121
+ for (const tag of deal.tags) {
122
+ if (tag.toLowerCase().includes(q)) {
123
+ matches.push({ field: 'tag', value: tag });
124
+ }
125
+ }
126
+ if (matches.length > 0) {
127
+ results.push({
128
+ type: 'deal',
129
+ id: deal.id,
130
+ title: deal.title,
131
+ subtitle: `${formatCurrency(deal.value, deal.currency)} - ${deal.stage}`,
132
+ matchField: matches[0].field,
133
+ matchValue: matches[0].value,
134
+ });
135
+ }
136
+ if (results.filter((r) => r.type === 'deal').length >= limit)
137
+ break;
138
+ }
139
+ }
140
+ // Search activities
141
+ if (!options.type || options.type === 'activity') {
142
+ const activities = await getActivities();
143
+ for (const activity of activities) {
144
+ const matches = [];
145
+ // Check title
146
+ if (activity.title.toLowerCase().includes(q)) {
147
+ matches.push({ field: 'title', value: activity.title });
148
+ }
149
+ // Check description
150
+ if (activity.description?.toLowerCase().includes(q)) {
151
+ matches.push({ field: 'description', value: truncate(activity.description, 50) });
152
+ }
153
+ if (matches.length > 0) {
154
+ results.push({
155
+ type: 'activity',
156
+ id: activity.id,
157
+ title: activity.title,
158
+ subtitle: `${activity.type} - ${formatRelativeTime(activity.timestamp)}`,
159
+ matchField: matches[0].field,
160
+ matchValue: matches[0].value,
161
+ });
162
+ }
163
+ if (results.filter((r) => r.type === 'activity').length >= limit)
164
+ break;
165
+ }
166
+ }
167
+ spinner.succeed(`Found ${results.length} results`);
168
+ if (options.json) {
169
+ printJSON(results);
170
+ return;
171
+ }
172
+ if (results.length === 0) {
173
+ printWarning(`No results found for "${query}"`);
174
+ return;
175
+ }
176
+ // Group by type
177
+ const byType = results.reduce((acc, r) => {
178
+ if (!acc[r.type])
179
+ acc[r.type] = [];
180
+ acc[r.type].push(r);
181
+ return acc;
182
+ }, {});
183
+ // Display contacts
184
+ if (byType.contact?.length) {
185
+ console.log();
186
+ console.log(output.bold(`\u{1F464} Contacts (${byType.contact.length})`));
187
+ printDivider('-');
188
+ printTable(byType.contact, [
189
+ { key: 'id', header: 'ID', width: 8, format: (v) => truncate(String(v), 8) },
190
+ { key: 'title', header: 'Name', width: 25 },
191
+ { key: 'subtitle', header: 'Details', width: 30, format: (v) => truncate(String(v), 30) },
192
+ {
193
+ key: 'matchField',
194
+ header: 'Match',
195
+ format: (v, row) => `${v}: ${row.matchValue}`,
196
+ },
197
+ ]);
198
+ }
199
+ // Display deals
200
+ if (byType.deal?.length) {
201
+ console.log();
202
+ console.log(output.bold(`\u{1F4B0} Deals (${byType.deal.length})`));
203
+ printDivider('-');
204
+ printTable(byType.deal, [
205
+ { key: 'id', header: 'ID', width: 8, format: (v) => truncate(String(v), 8) },
206
+ { key: 'title', header: 'Title', width: 25, format: (v) => truncate(String(v), 25) },
207
+ { key: 'subtitle', header: 'Value/Stage', width: 30, format: (v) => truncate(String(v), 30) },
208
+ {
209
+ key: 'matchField',
210
+ header: 'Match',
211
+ format: (v, row) => `${v}: ${row.matchValue}`,
212
+ },
213
+ ]);
214
+ }
215
+ // Display activities
216
+ if (byType.activity?.length) {
217
+ console.log();
218
+ console.log(output.bold(`\u{1F4DD} Activities (${byType.activity.length})`));
219
+ printDivider('-');
220
+ printTable(byType.activity, [
221
+ { key: 'id', header: 'ID', width: 8, format: (v) => truncate(String(v), 8) },
222
+ { key: 'title', header: 'Title', width: 30, format: (v) => truncate(String(v), 30) },
223
+ { key: 'subtitle', header: 'When', width: 20 },
224
+ {
225
+ key: 'matchField',
226
+ header: 'Match',
227
+ format: (v, row) => `${v}: ${row.matchValue}`,
228
+ },
229
+ ]);
230
+ }
231
+ console.log();
232
+ });
233
+ // Quick search (alias)
234
+ search
235
+ .command('quick <query>')
236
+ .description('Quick search with minimal output')
237
+ .action(async (query) => {
238
+ const results = [];
239
+ const q = query.toLowerCase();
240
+ // Quick contact search
241
+ const contacts = await getContacts();
242
+ for (const contact of contacts) {
243
+ if (contact.name.toLowerCase().includes(q)) {
244
+ results.push({
245
+ type: 'contact',
246
+ id: contact.id,
247
+ title: contact.name,
248
+ subtitle: contact.emails[0]?.email || '',
249
+ });
250
+ if (results.length >= 5)
251
+ break;
252
+ }
253
+ }
254
+ // Quick deal search
255
+ const deals = await getDeals();
256
+ for (const deal of deals) {
257
+ if (deal.title.toLowerCase().includes(q)) {
258
+ results.push({
259
+ type: 'deal',
260
+ id: deal.id,
261
+ title: deal.title,
262
+ subtitle: formatCurrency(deal.value, deal.currency),
263
+ });
264
+ if (results.length >= 10)
265
+ break;
266
+ }
267
+ }
268
+ if (results.length === 0) {
269
+ printWarning('No quick results');
270
+ return;
271
+ }
272
+ for (const r of results) {
273
+ const icon = r.type === 'contact' ? '\u{1F464}' : '\u{1F4B0}';
274
+ console.log(`${icon} ${output.bold(r.id.slice(0, 8))} ${r.title} ${output.dim(r.subtitle)}`);
275
+ }
276
+ });
277
+ // Recent items
278
+ search
279
+ .command('recent')
280
+ .description('Show recent items')
281
+ .option('-t, --type <type>', 'Filter by type (contact, deal, activity)')
282
+ .option('--limit <number>', 'Limit results', '10')
283
+ .action(async (options) => {
284
+ const limit = parseInt(options.limit);
285
+ const results = [];
286
+ // Get recent contacts
287
+ if (!options.type || options.type === 'contact') {
288
+ const contacts = (await getContacts())
289
+ .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime())
290
+ .slice(0, limit);
291
+ for (const c of contacts) {
292
+ results.push({
293
+ type: 'contact',
294
+ id: c.id,
295
+ title: c.name,
296
+ subtitle: `Updated ${formatRelativeTime(c.updatedAt)}`,
297
+ });
298
+ }
299
+ }
300
+ // Get recent deals
301
+ if (!options.type || options.type === 'deal') {
302
+ const deals = (await getDeals())
303
+ .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime())
304
+ .slice(0, limit);
305
+ for (const d of deals) {
306
+ results.push({
307
+ type: 'deal',
308
+ id: d.id,
309
+ title: d.title,
310
+ subtitle: `${formatStatus(d.stage)} - Updated ${formatRelativeTime(d.updatedAt)}`,
311
+ });
312
+ }
313
+ }
314
+ // Get recent activities
315
+ if (!options.type || options.type === 'activity') {
316
+ const activities = (await getActivities())
317
+ .sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime())
318
+ .slice(0, limit);
319
+ for (const a of activities) {
320
+ results.push({
321
+ type: 'activity',
322
+ id: a.id,
323
+ title: a.title,
324
+ subtitle: `${a.type} - ${formatRelativeTime(a.timestamp)}`,
325
+ });
326
+ }
327
+ }
328
+ if (results.length === 0) {
329
+ printWarning('No recent items');
330
+ return;
331
+ }
332
+ printHeader('Recent Items');
333
+ for (const r of results) {
334
+ const icons = {
335
+ contact: '\u{1F464}',
336
+ deal: '\u{1F4B0}',
337
+ activity: '\u{1F4DD}',
338
+ };
339
+ const icon = icons[r.type];
340
+ console.log(`${icon} ${output.dim(r.type.padEnd(8))} ${output.bold(truncate(r.id, 8))} ${r.title}`);
341
+ console.log(` ${output.dim(r.subtitle)}`);
342
+ }
343
+ console.log();
344
+ });
345
+ }
346
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * CRM CLI Entry Point
4
+ *
5
+ * Terminal-based CLI for CRM operations.
6
+ */
7
+ import { Command } from 'commander';
8
+ /**
9
+ * Create and configure the CLI program
10
+ */
11
+ declare function createProgram(): Command;
12
+ export { createProgram };
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC;;GAEG;AACH,iBAAS,aAAa,IAAI,OAAO,CAwIhC;AAuCD,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,173 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * CRM CLI Entry Point
4
+ *
5
+ * Terminal-based CLI for CRM operations.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { printError, printHeader, output, } from './utils/output.js';
9
+ import { loadConfig, applyEnvOverrides } from './utils/config.js';
10
+ import { registerContactCommands } from './commands/contacts.js';
11
+ import { registerDealCommands } from './commands/deals.js';
12
+ import { registerActivityCommands } from './commands/activities.js';
13
+ import { registerMediaCommands } from './commands/media.js';
14
+ import { registerSearchCommands } from './commands/search.js';
15
+ import { registerREPLCommand } from './repl.js';
16
+ // Package version (would be read from package.json in production)
17
+ const VERSION = '1.0.0';
18
+ /**
19
+ * Create and configure the CLI program
20
+ */
21
+ function createProgram() {
22
+ const program = new Command();
23
+ // Program metadata
24
+ program
25
+ .name('crm')
26
+ .description('Terminal-based CRM CLI')
27
+ .version(VERSION, '-v, --version', 'Show version')
28
+ .helpOption('-h, --help', 'Show help');
29
+ // Global options
30
+ program
31
+ .option('--json', 'Output as JSON')
32
+ .option('--no-color', 'Disable colored output')
33
+ .option('--api <url>', 'API endpoint URL');
34
+ // Register command modules
35
+ registerContactCommands(program);
36
+ registerDealCommands(program);
37
+ registerActivityCommands(program);
38
+ registerMediaCommands(program);
39
+ registerSearchCommands(program);
40
+ registerREPLCommand(program);
41
+ // Config command
42
+ program
43
+ .command('config')
44
+ .description('Manage CLI configuration')
45
+ .argument('[action]', 'Action (show, init, location)')
46
+ .action(async (action = 'show') => {
47
+ const { displayConfig, initConfig, getConfigLocation } = await import('./utils/config.js');
48
+ switch (action) {
49
+ case 'init':
50
+ await initConfig();
51
+ break;
52
+ case 'location':
53
+ console.log(`\nConfig file: ${getConfigLocation()}\n`);
54
+ break;
55
+ case 'show':
56
+ default:
57
+ displayConfig();
58
+ }
59
+ });
60
+ // Init command (alias)
61
+ program
62
+ .command('init')
63
+ .description('Initialize CLI configuration')
64
+ .action(async () => {
65
+ const { initConfig } = await import('./utils/config.js');
66
+ await initConfig();
67
+ });
68
+ // Status command
69
+ program
70
+ .command('status')
71
+ .description('Show CRM status overview')
72
+ .option('--json', 'Output as JSON')
73
+ .action(async (options) => {
74
+ const { printTable, printJSON, formatCurrency } = await import('./utils/output.js');
75
+ // Mock data (would come from API)
76
+ const status = {
77
+ contacts: { total: 156, leads: 45, customers: 89 },
78
+ deals: {
79
+ total: 34,
80
+ pipeline: 245000,
81
+ won: 89000,
82
+ weighted: 156000,
83
+ },
84
+ activities: { today: 12, thisWeek: 67 },
85
+ };
86
+ if (options.json) {
87
+ printJSON(status);
88
+ return;
89
+ }
90
+ printHeader('CRM Status');
91
+ console.log(output.bold('\u{1F464} Contacts'));
92
+ console.log(` Total: ${status.contacts.total}`);
93
+ console.log(` Leads: ${status.contacts.leads}`);
94
+ console.log(` Customers: ${status.contacts.customers}`);
95
+ console.log();
96
+ console.log(output.bold('\u{1F4B0} Deals'));
97
+ console.log(` Total: ${status.deals.total}`);
98
+ console.log(` Pipeline Value: ${formatCurrency(status.deals.pipeline)}`);
99
+ console.log(` Won This Month: ${formatCurrency(status.deals.won)}`);
100
+ console.log(` Weighted Pipeline: ${formatCurrency(status.deals.weighted)}`);
101
+ console.log();
102
+ console.log(output.bold('\u{1F4DD} Activities'));
103
+ console.log(` Today: ${status.activities.today}`);
104
+ console.log(` This Week: ${status.activities.thisWeek}`);
105
+ console.log();
106
+ });
107
+ // Quick commands
108
+ program
109
+ .command('ls')
110
+ .description('List contacts (alias for contacts list)')
111
+ .allowUnknownOption(true)
112
+ .action(async () => {
113
+ const args = process.argv.slice(process.argv.indexOf('ls') + 1);
114
+ await program.parseAsync(['contacts', 'list', ...args], { from: 'user' });
115
+ });
116
+ program
117
+ .command('new')
118
+ .description('Create new entity')
119
+ .argument('<type>', 'Entity type (contact, deal, activity)')
120
+ .action(async (type) => {
121
+ switch (type) {
122
+ case 'contact':
123
+ await program.parseAsync(['contacts', 'create'], { from: 'user' });
124
+ break;
125
+ case 'deal':
126
+ await program.parseAsync(['deals', 'create'], { from: 'user' });
127
+ break;
128
+ case 'activity':
129
+ await program.parseAsync(['activities', 'create'], { from: 'user' });
130
+ break;
131
+ default:
132
+ printError(`Unknown entity type: ${type}`);
133
+ console.log('Valid types: contact, deal, activity');
134
+ }
135
+ });
136
+ return program;
137
+ }
138
+ /**
139
+ * Main entry point
140
+ */
141
+ async function main() {
142
+ // Load and apply configuration
143
+ let config = loadConfig();
144
+ config = applyEnvOverrides(config);
145
+ // Create program
146
+ const program = createProgram();
147
+ // Handle unknown commands
148
+ program.on('command:*', (operands) => {
149
+ printError(`Unknown command: ${operands[0]}`);
150
+ console.log(`Run ${output.info('crm --help')} for available commands.`);
151
+ process.exit(1);
152
+ });
153
+ // Parse arguments
154
+ try {
155
+ await program.parseAsync(process.argv);
156
+ }
157
+ catch (error) {
158
+ if (error instanceof Error) {
159
+ printError(error.message);
160
+ }
161
+ else {
162
+ printError('An unexpected error occurred');
163
+ }
164
+ process.exit(1);
165
+ }
166
+ }
167
+ // Run main
168
+ main().catch((error) => {
169
+ console.error('Fatal error:', error);
170
+ process.exit(1);
171
+ });
172
+ export { createProgram };
173
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Interactive REPL Mode
3
+ *
4
+ * Provides an interactive shell for CRM operations.
5
+ */
6
+ import type { Command } from 'commander';
7
+ /**
8
+ * Start REPL
9
+ */
10
+ export declare function startREPL(program: Command): Promise<void>;
11
+ /**
12
+ * Register REPL command
13
+ */
14
+ export declare function registerREPLCommand(program: Command): void;
15
+ //# sourceMappingURL=repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/cli/repl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyTzC;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC/D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAO1D"}