@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,458 @@
1
+ /**
2
+ * Contact Commands
3
+ *
4
+ * CLI commands for managing contacts in the CRM.
5
+ */
6
+ import { printSuccess, printError, printWarning, printTable, printJSON, printHeader, printDivider, formatStatus, formatRelativeTime, truncate, output, } from '../utils/output.js';
7
+ import { prompt, promptRequired, promptEmail, promptTags, confirm, select, previewAndConfirm, Spinner, } from '../utils/prompt.js';
8
+ import { addRecentContact } from '../utils/config.js';
9
+ import { CRMStorageClient } from '../../mcp/storage/client.js';
10
+ // Contact status options
11
+ const CONTACT_STATUSES = [
12
+ 'lead',
13
+ 'prospect',
14
+ 'qualified',
15
+ 'customer',
16
+ 'churned',
17
+ 'archived',
18
+ ];
19
+ // Contact source options
20
+ const CONTACT_SOURCES = [
21
+ 'organic',
22
+ 'referral',
23
+ 'advertisement',
24
+ 'social_media',
25
+ 'email_campaign',
26
+ 'website',
27
+ 'event',
28
+ 'cold_outreach',
29
+ 'partner',
30
+ 'other',
31
+ ];
32
+ // Storage client singleton
33
+ let _storage = null;
34
+ /**
35
+ * Get storage client (lazy initialization)
36
+ */
37
+ async function getStorage() {
38
+ if (!_storage) {
39
+ _storage = new CRMStorageClient({
40
+ path: process.env.CRM_DB_PATH || './data/crm-cli',
41
+ mapSize: 256 * 1024 * 1024, // 256MB
42
+ maxDbs: 20,
43
+ });
44
+ await _storage.initialize();
45
+ }
46
+ return _storage;
47
+ }
48
+ /**
49
+ * Get all contacts
50
+ */
51
+ async function getContacts() {
52
+ const storage = await getStorage();
53
+ return storage.list('contacts');
54
+ }
55
+ /**
56
+ * Get contact by ID
57
+ */
58
+ async function getContact(id) {
59
+ const storage = await getStorage();
60
+ return storage.get('contacts', id);
61
+ }
62
+ /**
63
+ * Create contact
64
+ */
65
+ async function createContact(data) {
66
+ const storage = await getStorage();
67
+ return storage.insert('contacts', {
68
+ name: data.name || '',
69
+ firstName: data.firstName,
70
+ lastName: data.lastName,
71
+ emails: data.emails || [],
72
+ phones: data.phones || [],
73
+ addresses: data.addresses || [],
74
+ company: data.company,
75
+ title: data.title,
76
+ department: data.department,
77
+ socialProfiles: data.socialProfiles || [],
78
+ website: data.website,
79
+ tags: data.tags || [],
80
+ customFields: data.customFields || [],
81
+ source: data.source,
82
+ status: data.status || 'lead',
83
+ ownerId: data.ownerId,
84
+ avatar: data.avatar,
85
+ preferredContact: data.preferredContact,
86
+ language: data.language,
87
+ timezone: data.timezone,
88
+ preferences: data.preferences,
89
+ leadScore: data.leadScore,
90
+ doNotContact: data.doNotContact || false,
91
+ lastContactedAt: data.lastContactedAt,
92
+ nextFollowUpAt: data.nextFollowUpAt,
93
+ });
94
+ }
95
+ /**
96
+ * Update contact
97
+ */
98
+ async function updateContact(id, data) {
99
+ const storage = await getStorage();
100
+ const existing = await storage.get('contacts', id);
101
+ if (!existing)
102
+ return null;
103
+ return storage.update('contacts', id, data);
104
+ }
105
+ /**
106
+ * Delete contact
107
+ */
108
+ async function deleteContact(id) {
109
+ const storage = await getStorage();
110
+ const existing = await storage.get('contacts', id);
111
+ if (!existing)
112
+ return false;
113
+ await storage.delete('contacts', id);
114
+ return true;
115
+ }
116
+ /**
117
+ * Search contacts
118
+ */
119
+ async function searchContacts(query) {
120
+ const contacts = await getContacts();
121
+ const q = query.toLowerCase();
122
+ return contacts.filter((c) => {
123
+ return (c.name.toLowerCase().includes(q) ||
124
+ c.emails.some((e) => e.email.toLowerCase().includes(q)) ||
125
+ c.company?.toLowerCase().includes(q) ||
126
+ c.tags.some((t) => t.toLowerCase().includes(q)));
127
+ });
128
+ }
129
+ /**
130
+ * Filter contacts by tag
131
+ */
132
+ async function filterByTag(tag) {
133
+ const contacts = await getContacts();
134
+ return contacts.filter((c) => c.tags.some((t) => t.toLowerCase() === tag.toLowerCase()));
135
+ }
136
+ /**
137
+ * Register contact commands
138
+ */
139
+ export function registerContactCommands(program) {
140
+ const contacts = program.command('contacts').description('Manage contacts');
141
+ // List contacts
142
+ contacts
143
+ .command('list')
144
+ .description('List all contacts')
145
+ .option('-s, --search <query>', 'Search contacts')
146
+ .option('-t, --tag <tag>', 'Filter by tag')
147
+ .option('--status <status>', 'Filter by status')
148
+ .option('--json', 'Output as JSON')
149
+ .option('--limit <number>', 'Limit results', '20')
150
+ .action(async (options) => {
151
+ let contacts;
152
+ if (options.search) {
153
+ contacts = await searchContacts(options.search);
154
+ }
155
+ else if (options.tag) {
156
+ contacts = await filterByTag(options.tag);
157
+ }
158
+ else {
159
+ contacts = await getContacts();
160
+ }
161
+ if (options.status) {
162
+ contacts = contacts.filter((c) => c.status.toLowerCase() === options.status.toLowerCase());
163
+ }
164
+ const limit = parseInt(options.limit);
165
+ contacts = contacts.slice(0, limit);
166
+ if (options.json) {
167
+ printJSON(contacts);
168
+ return;
169
+ }
170
+ if (contacts.length === 0) {
171
+ printWarning('No contacts found');
172
+ return;
173
+ }
174
+ printHeader(`Contacts (${contacts.length})`);
175
+ printTable(contacts, [
176
+ { key: 'id', header: 'ID', width: 8, format: (v) => truncate(String(v), 8) },
177
+ { key: 'name', header: 'Name', width: 20 },
178
+ {
179
+ key: 'emails',
180
+ header: 'Email',
181
+ width: 25,
182
+ format: (v) => {
183
+ const emails = v;
184
+ const primary = emails.find((e) => e.primary) || emails[0];
185
+ return primary?.email || '';
186
+ },
187
+ },
188
+ { key: 'company', header: 'Company', width: 15, format: (v) => truncate(String(v || ''), 15) },
189
+ { key: 'status', header: 'Status', format: (v) => formatStatus(String(v)) },
190
+ {
191
+ key: 'updatedAt',
192
+ header: 'Updated',
193
+ format: (v) => formatRelativeTime(String(v)),
194
+ },
195
+ ]);
196
+ });
197
+ // Get contact details
198
+ contacts
199
+ .command('get <id>')
200
+ .description('Get contact details')
201
+ .option('--json', 'Output as JSON')
202
+ .action(async (id, options) => {
203
+ const contact = await getContact(id);
204
+ if (!contact) {
205
+ printError(`Contact not found: ${id}`);
206
+ process.exit(1);
207
+ }
208
+ addRecentContact(id);
209
+ if (options.json) {
210
+ printJSON(contact);
211
+ return;
212
+ }
213
+ printHeader(`Contact: ${contact.name}`);
214
+ console.log(`${output.dim('ID:')} ${contact.id}`);
215
+ console.log(`${output.dim('Status:')} ${formatStatus(contact.status)}`);
216
+ console.log();
217
+ // Contact Info
218
+ console.log(output.bold('Contact Information'));
219
+ printDivider('-');
220
+ if (contact.emails.length > 0) {
221
+ contact.emails.forEach((e) => {
222
+ const primary = e.primary ? ' (primary)' : '';
223
+ console.log(`${output.dim('Email:')} ${e.email}${primary}`);
224
+ });
225
+ }
226
+ if (contact.phones.length > 0) {
227
+ contact.phones.forEach((p) => {
228
+ const primary = p.primary ? ' (primary)' : '';
229
+ console.log(`${output.dim('Phone:')} ${p.number} [${p.type}]${primary}`);
230
+ });
231
+ }
232
+ if (contact.company) {
233
+ console.log(`${output.dim('Company:')} ${contact.company}`);
234
+ }
235
+ if (contact.title) {
236
+ console.log(`${output.dim('Title:')} ${contact.title}`);
237
+ }
238
+ if (contact.website) {
239
+ console.log(`${output.dim('Website:')} ${contact.website}`);
240
+ }
241
+ console.log();
242
+ // Tags
243
+ if (contact.tags.length > 0) {
244
+ console.log(output.bold('Tags'));
245
+ printDivider('-');
246
+ console.log(contact.tags.map((t) => output.info(`#${t}`)).join(' '));
247
+ console.log();
248
+ }
249
+ // Metadata
250
+ console.log(output.bold('Metadata'));
251
+ printDivider('-');
252
+ console.log(`${output.dim('Created:')} ${new Date(contact.createdAt).toLocaleString()}`);
253
+ console.log(`${output.dim('Updated:')} ${new Date(contact.updatedAt).toLocaleString()}`);
254
+ if (contact.source) {
255
+ console.log(`${output.dim('Source:')} ${contact.source}`);
256
+ }
257
+ if (contact.leadScore !== undefined) {
258
+ console.log(`${output.dim('Lead Score:')} ${contact.leadScore}`);
259
+ }
260
+ console.log();
261
+ });
262
+ // Create contact
263
+ contacts
264
+ .command('create')
265
+ .description('Create a new contact')
266
+ .option('--name <name>', 'Contact name')
267
+ .option('--email <email>', 'Email address')
268
+ .option('--phone <phone>', 'Phone number')
269
+ .option('--company <company>', 'Company name')
270
+ .option('--title <title>', 'Job title')
271
+ .option('--status <status>', 'Contact status')
272
+ .option('--tags <tags>', 'Tags (comma-separated)')
273
+ .option('--source <source>', 'Contact source')
274
+ .option('--no-prompt', 'Skip interactive prompts')
275
+ .action(async (options) => {
276
+ printHeader('Create Contact');
277
+ // Gather data
278
+ const name = options.name || (await promptRequired('Name'));
279
+ const email = options.email || (await promptEmail('Email (primary)'));
280
+ const phone = options.phone || (await prompt('Phone'));
281
+ const company = options.company || (await prompt('Company'));
282
+ const title = options.title || (await prompt('Title'));
283
+ let status = 'lead';
284
+ if (options.status) {
285
+ status = options.status;
286
+ }
287
+ else if (!options.noPrompt) {
288
+ status = await select('Status', CONTACT_STATUSES, 'lead');
289
+ }
290
+ let tags = [];
291
+ if (options.tags) {
292
+ tags = options.tags.split(',').map((t) => t.trim());
293
+ }
294
+ else if (!options.noPrompt) {
295
+ tags = await promptTags('Tags (comma-separated)');
296
+ }
297
+ let source;
298
+ if (options.source) {
299
+ source = options.source;
300
+ }
301
+ else if (!options.noPrompt) {
302
+ const hasSource = await confirm('Add contact source?');
303
+ if (hasSource) {
304
+ source = await select('Source', CONTACT_SOURCES);
305
+ }
306
+ }
307
+ // Build contact data
308
+ const contactData = {
309
+ name,
310
+ emails: [{ email, type: 'personal', primary: true }],
311
+ phones: phone ? [{ number: phone, type: 'mobile', primary: true }] : [],
312
+ company,
313
+ title,
314
+ status,
315
+ tags,
316
+ source,
317
+ };
318
+ // Preview
319
+ console.log();
320
+ const confirmed = await previewAndConfirm('Contact Preview', {
321
+ Name: name,
322
+ Email: email,
323
+ Phone: phone || '(none)',
324
+ Company: company || '(none)',
325
+ Title: title || '(none)',
326
+ Status: status,
327
+ Tags: tags.length > 0 ? tags.join(', ') : '(none)',
328
+ Source: source || '(none)',
329
+ });
330
+ if (!confirmed) {
331
+ printWarning('Contact creation cancelled');
332
+ return;
333
+ }
334
+ // Create contact
335
+ const spinner = new Spinner('Creating contact...').start();
336
+ const contact = await createContact(contactData);
337
+ spinner.succeed('Contact created successfully');
338
+ printSuccess(`Contact ID: ${contact.id}`);
339
+ console.log();
340
+ });
341
+ // Update contact
342
+ contacts
343
+ .command('update <id>')
344
+ .description('Update a contact')
345
+ .option('--name <name>', 'Contact name')
346
+ .option('--email <email>', 'Email address')
347
+ .option('--phone <phone>', 'Phone number')
348
+ .option('--company <company>', 'Company name')
349
+ .option('--title <title>', 'Job title')
350
+ .option('--status <status>', 'Contact status')
351
+ .option('--tags <tags>', 'Tags (comma-separated)')
352
+ .action(async (id, options) => {
353
+ const contact = await getContact(id);
354
+ if (!contact) {
355
+ printError(`Contact not found: ${id}`);
356
+ process.exit(1);
357
+ }
358
+ printHeader(`Update Contact: ${contact.name}`);
359
+ const updates = {};
360
+ if (options.name) {
361
+ updates.name = options.name;
362
+ }
363
+ else {
364
+ const name = await prompt('Name', contact.name);
365
+ if (name !== contact.name)
366
+ updates.name = name;
367
+ }
368
+ if (options.email) {
369
+ updates.emails = [{ email: options.email, type: 'personal', primary: true }];
370
+ }
371
+ if (options.phone) {
372
+ updates.phones = [{ number: options.phone, type: 'mobile', primary: true }];
373
+ }
374
+ if (options.company) {
375
+ updates.company = options.company;
376
+ }
377
+ if (options.title) {
378
+ updates.title = options.title;
379
+ }
380
+ if (options.status) {
381
+ updates.status = options.status;
382
+ }
383
+ if (options.tags) {
384
+ updates.tags = options.tags.split(',').map((t) => t.trim());
385
+ }
386
+ if (Object.keys(updates).length === 0) {
387
+ printWarning('No changes to update');
388
+ return;
389
+ }
390
+ const confirmed = await confirm('Save changes?');
391
+ if (!confirmed) {
392
+ printWarning('Update cancelled');
393
+ return;
394
+ }
395
+ const spinner = new Spinner('Updating contact...').start();
396
+ const updated = await updateContact(id, updates);
397
+ spinner.succeed('Contact updated successfully');
398
+ if (updated) {
399
+ printSuccess(`Updated ${Object.keys(updates).join(', ')}`);
400
+ }
401
+ });
402
+ // Delete contact
403
+ contacts
404
+ .command('delete <id>')
405
+ .description('Delete a contact')
406
+ .option('-f, --force', 'Skip confirmation')
407
+ .action(async (id, options) => {
408
+ const contact = await getContact(id);
409
+ if (!contact) {
410
+ printError(`Contact not found: ${id}`);
411
+ process.exit(1);
412
+ }
413
+ if (!options.force) {
414
+ console.log(`\nContact: ${output.bold(contact.name)}`);
415
+ console.log(`Email: ${contact.emails[0]?.email || 'N/A'}`);
416
+ console.log(`Company: ${contact.company || 'N/A'}\n`);
417
+ const confirmed = await confirm('Are you sure you want to delete this contact?');
418
+ if (!confirmed) {
419
+ printWarning('Deletion cancelled');
420
+ return;
421
+ }
422
+ }
423
+ const spinner = new Spinner('Deleting contact...').start();
424
+ await deleteContact(id);
425
+ spinner.succeed('Contact deleted successfully');
426
+ });
427
+ // Add tags
428
+ contacts
429
+ .command('tag <id> <tags>')
430
+ .description('Add tags to a contact')
431
+ .action(async (id, tagsStr) => {
432
+ const contact = await getContact(id);
433
+ if (!contact) {
434
+ printError(`Contact not found: ${id}`);
435
+ process.exit(1);
436
+ }
437
+ const newTags = tagsStr.split(',').map((t) => t.trim());
438
+ const allTags = [...new Set([...contact.tags, ...newTags])];
439
+ await updateContact(id, { tags: allTags });
440
+ printSuccess(`Added tags: ${newTags.join(', ')}`);
441
+ });
442
+ // Remove tags
443
+ contacts
444
+ .command('untag <id> <tags>')
445
+ .description('Remove tags from a contact')
446
+ .action(async (id, tagsStr) => {
447
+ const contact = await getContact(id);
448
+ if (!contact) {
449
+ printError(`Contact not found: ${id}`);
450
+ process.exit(1);
451
+ }
452
+ const removeTags = tagsStr.split(',').map((t) => t.trim().toLowerCase());
453
+ const filteredTags = contact.tags.filter((t) => !removeTags.includes(t.toLowerCase()));
454
+ await updateContact(id, { tags: filteredTags });
455
+ printSuccess(`Removed tags: ${removeTags.join(', ')}`);
456
+ });
457
+ }
458
+ //# sourceMappingURL=contacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../../src/cli/commands/contacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Deal Commands
3
+ *
4
+ * CLI commands for managing deals in the CRM.
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Register deal commands
9
+ */
10
+ export declare function registerDealCommands(program: Command): void;
11
+ //# sourceMappingURL=deals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deals.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/deals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoLpC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+b3D"}