@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,498 @@
1
+ /**
2
+ * Deal Commands
3
+ *
4
+ * CLI commands for managing deals in the CRM.
5
+ */
6
+ import { printSuccess, printError, printWarning, printTable, printJSON, printHeader, printDivider, formatStatus, formatCurrency, formatRelativeTime, formatDate, truncate, output, } from '../utils/output.js';
7
+ import { prompt, promptRequired, promptNumber, promptTags, confirm, select, previewAndConfirm, Spinner, } from '../utils/prompt.js';
8
+ import { loadConfig, addRecentDeal } from '../utils/config.js';
9
+ import { CRMStorageClient } from '../../mcp/storage/client.js';
10
+ // Deal stage options
11
+ const DEAL_STAGES = [
12
+ 'prospecting',
13
+ 'qualification',
14
+ 'needs_analysis',
15
+ 'proposal',
16
+ 'negotiation',
17
+ 'closed_won',
18
+ 'closed_lost',
19
+ ];
20
+ // Deal priority options
21
+ const DEAL_PRIORITIES = ['low', 'medium', 'high', 'urgent'];
22
+ // Currency options
23
+ const CURRENCIES = [
24
+ 'USD',
25
+ 'EUR',
26
+ 'GBP',
27
+ 'CAD',
28
+ 'AUD',
29
+ 'JPY',
30
+ 'CNY',
31
+ 'INR',
32
+ 'BRL',
33
+ 'MXN',
34
+ ];
35
+ // Stage display names
36
+ const STAGE_LABELS = {
37
+ prospecting: 'Prospecting',
38
+ qualification: 'Qualification',
39
+ needs_analysis: 'Needs Analysis',
40
+ proposal: 'Proposal',
41
+ negotiation: 'Negotiation',
42
+ closed_won: 'Closed Won',
43
+ closed_lost: 'Closed Lost',
44
+ };
45
+ // Storage client singleton
46
+ let _storage = null;
47
+ /**
48
+ * Get storage client (lazy initialization)
49
+ */
50
+ async function getStorage() {
51
+ if (!_storage) {
52
+ _storage = new CRMStorageClient({
53
+ path: process.env.CRM_DB_PATH || './data/crm-cli',
54
+ mapSize: 256 * 1024 * 1024, // 256MB
55
+ maxDbs: 20,
56
+ });
57
+ await _storage.initialize();
58
+ }
59
+ return _storage;
60
+ }
61
+ /**
62
+ * Get all deals
63
+ */
64
+ async function getDeals() {
65
+ const storage = await getStorage();
66
+ return storage.list('deals');
67
+ }
68
+ /**
69
+ * Get deal by ID
70
+ */
71
+ async function getDeal(id) {
72
+ const storage = await getStorage();
73
+ return storage.get('deals', id);
74
+ }
75
+ /**
76
+ * Create deal
77
+ */
78
+ async function createDeal(data) {
79
+ const storage = await getStorage();
80
+ return storage.insert('deals', {
81
+ title: data.title || '',
82
+ contactId: data.contactId || '',
83
+ companyId: data.companyId,
84
+ value: data.value || 0,
85
+ currency: data.currency || 'USD',
86
+ stage: data.stage || 'prospecting',
87
+ probability: data.probability || 0,
88
+ expectedClose: data.expectedClose || new Date().toISOString(),
89
+ actualClose: data.actualClose,
90
+ priority: data.priority || 'medium',
91
+ lineItems: data.lineItems || [],
92
+ discount: data.discount,
93
+ discountType: data.discountType,
94
+ totalValue: data.totalValue || data.value || 0,
95
+ notes: data.notes || '',
96
+ tags: data.tags || [],
97
+ competitors: data.competitors || [],
98
+ lossReason: data.lossReason,
99
+ nextSteps: data.nextSteps,
100
+ ownerId: data.ownerId,
101
+ source: data.source,
102
+ customFields: data.customFields || [],
103
+ lastActivityAt: data.lastActivityAt,
104
+ });
105
+ }
106
+ /**
107
+ * Update deal
108
+ */
109
+ async function updateDeal(id, data) {
110
+ const storage = await getStorage();
111
+ const existing = await storage.get('deals', id);
112
+ if (!existing)
113
+ return null;
114
+ return storage.update('deals', id, data);
115
+ }
116
+ /**
117
+ * Delete deal
118
+ */
119
+ async function deleteDeal(id) {
120
+ const storage = await getStorage();
121
+ const existing = await storage.get('deals', id);
122
+ if (!existing)
123
+ return false;
124
+ await storage.delete('deals', id);
125
+ return true;
126
+ }
127
+ /**
128
+ * Filter deals by stage
129
+ */
130
+ async function filterByStage(stage) {
131
+ const deals = await getDeals();
132
+ return deals.filter((d) => d.stage === stage);
133
+ }
134
+ /**
135
+ * Get probability for stage
136
+ */
137
+ function getStageProbability(stage) {
138
+ const probabilities = {
139
+ prospecting: 10,
140
+ qualification: 20,
141
+ needs_analysis: 40,
142
+ proposal: 60,
143
+ negotiation: 80,
144
+ closed_won: 100,
145
+ closed_lost: 0,
146
+ };
147
+ return probabilities[stage];
148
+ }
149
+ /**
150
+ * Register deal commands
151
+ */
152
+ export function registerDealCommands(program) {
153
+ const deals = program.command('deals').description('Manage deals');
154
+ // List deals
155
+ deals
156
+ .command('list')
157
+ .description('List all deals')
158
+ .option('-s, --stage <stage>', 'Filter by stage')
159
+ .option('--priority <priority>', 'Filter by priority')
160
+ .option('--json', 'Output as JSON')
161
+ .option('--limit <number>', 'Limit results', '20')
162
+ .action(async (options) => {
163
+ let dealsList = await getDeals();
164
+ if (options.stage) {
165
+ dealsList = dealsList.filter((d) => d.stage.toLowerCase() === options.stage.toLowerCase());
166
+ }
167
+ if (options.priority) {
168
+ dealsList = dealsList.filter((d) => d.priority.toLowerCase() === options.priority.toLowerCase());
169
+ }
170
+ const limit = parseInt(options.limit);
171
+ dealsList = dealsList.slice(0, limit);
172
+ if (options.json) {
173
+ printJSON(dealsList);
174
+ return;
175
+ }
176
+ if (dealsList.length === 0) {
177
+ printWarning('No deals found');
178
+ return;
179
+ }
180
+ // Calculate pipeline value
181
+ const totalValue = dealsList.reduce((sum, d) => sum + d.totalValue, 0);
182
+ const weightedValue = dealsList.reduce((sum, d) => sum + d.totalValue * (d.probability / 100), 0);
183
+ printHeader(`Deals (${dealsList.length})`);
184
+ console.log(`${output.dim('Pipeline:')} ${formatCurrency(totalValue)} | ` +
185
+ `${output.dim('Weighted:')} ${formatCurrency(weightedValue)}`);
186
+ console.log();
187
+ printTable(dealsList, [
188
+ { key: 'id', header: 'ID', width: 8, format: (v) => truncate(String(v), 8) },
189
+ { key: 'title', header: 'Title', width: 25, format: (v) => truncate(String(v), 25) },
190
+ {
191
+ key: 'value',
192
+ header: 'Value',
193
+ width: 12,
194
+ format: (v, row) => formatCurrency(Number(v), row.currency),
195
+ },
196
+ { key: 'stage', header: 'Stage', format: (v) => formatStatus(String(v)) },
197
+ { key: 'probability', header: 'Prob', width: 5, format: (v) => `${v}%` },
198
+ {
199
+ key: 'expectedClose',
200
+ header: 'Close Date',
201
+ format: (v) => formatDate(String(v)),
202
+ },
203
+ ]);
204
+ });
205
+ // Get deal details
206
+ deals
207
+ .command('get <id>')
208
+ .description('Get deal details')
209
+ .option('--json', 'Output as JSON')
210
+ .action(async (id, options) => {
211
+ const deal = await getDeal(id);
212
+ if (!deal) {
213
+ printError(`Deal not found: ${id}`);
214
+ process.exit(1);
215
+ }
216
+ addRecentDeal(id);
217
+ if (options.json) {
218
+ printJSON(deal);
219
+ return;
220
+ }
221
+ printHeader(`Deal: ${deal.title}`);
222
+ console.log(`${output.dim('ID:')} ${deal.id}`);
223
+ console.log(`${output.dim('Stage:')} ${formatStatus(deal.stage)}`);
224
+ console.log(`${output.dim('Priority:')} ${formatStatus(deal.priority)}`);
225
+ console.log();
226
+ // Deal Info
227
+ console.log(output.bold('Deal Information'));
228
+ printDivider('-');
229
+ console.log(`${output.dim('Value:')} ${formatCurrency(deal.value, deal.currency)}`);
230
+ console.log(`${output.dim('Total Value:')} ${formatCurrency(deal.totalValue, deal.currency)}`);
231
+ console.log(`${output.dim('Probability:')} ${deal.probability}%`);
232
+ console.log(`${output.dim('Expected Close:')} ${formatDate(deal.expectedClose)}`);
233
+ if (deal.actualClose) {
234
+ console.log(`${output.dim('Actual Close:')} ${formatDate(deal.actualClose)}`);
235
+ }
236
+ if (deal.discount) {
237
+ const discountStr = deal.discountType === 'percentage'
238
+ ? `${deal.discount}%`
239
+ : formatCurrency(deal.discount, deal.currency);
240
+ console.log(`${output.dim('Discount:')} ${discountStr}`);
241
+ }
242
+ console.log();
243
+ // Contact Info
244
+ console.log(output.bold('Associated Contact'));
245
+ printDivider('-');
246
+ console.log(`${output.dim('Contact ID:')} ${deal.contactId}`);
247
+ if (deal.companyId) {
248
+ console.log(`${output.dim('Company ID:')} ${deal.companyId}`);
249
+ }
250
+ console.log();
251
+ // Tags
252
+ if (deal.tags.length > 0) {
253
+ console.log(output.bold('Tags'));
254
+ printDivider('-');
255
+ console.log(deal.tags.map((t) => output.info(`#${t}`)).join(' '));
256
+ console.log();
257
+ }
258
+ // Notes
259
+ if (deal.notes) {
260
+ console.log(output.bold('Notes'));
261
+ printDivider('-');
262
+ console.log(deal.notes);
263
+ console.log();
264
+ }
265
+ // Metadata
266
+ console.log(output.bold('Metadata'));
267
+ printDivider('-');
268
+ console.log(`${output.dim('Created:')} ${new Date(deal.createdAt).toLocaleString()}`);
269
+ console.log(`${output.dim('Updated:')} ${new Date(deal.updatedAt).toLocaleString()}`);
270
+ if (deal.lastActivityAt) {
271
+ console.log(`${output.dim('Last Activity:')} ${formatRelativeTime(deal.lastActivityAt)}`);
272
+ }
273
+ console.log();
274
+ });
275
+ // Create deal
276
+ deals
277
+ .command('create')
278
+ .description('Create a new deal')
279
+ .option('--title <title>', 'Deal title')
280
+ .option('--contact <id>', 'Contact ID')
281
+ .option('--value <amount>', 'Deal value')
282
+ .option('--currency <currency>', 'Currency')
283
+ .option('--stage <stage>', 'Deal stage')
284
+ .option('--priority <priority>', 'Deal priority')
285
+ .option('--tags <tags>', 'Tags (comma-separated)')
286
+ .option('--notes <notes>', 'Deal notes')
287
+ .action(async (options) => {
288
+ printHeader('Create Deal');
289
+ // Gather data
290
+ const title = options.title || (await promptRequired('Deal Title'));
291
+ const contactId = options.contact || (await promptRequired('Contact ID'));
292
+ const value = options.value !== undefined
293
+ ? parseFloat(options.value)
294
+ : await promptNumber('Deal Value', 0, 0);
295
+ const config = loadConfig();
296
+ const currency = options.currency || config.currency;
297
+ let stage = 'prospecting';
298
+ if (options.stage) {
299
+ stage = options.stage;
300
+ }
301
+ else {
302
+ stage = await select('Stage', DEAL_STAGES, 'prospecting');
303
+ }
304
+ const probability = getStageProbability(stage);
305
+ let priority = 'medium';
306
+ if (options.priority) {
307
+ priority = options.priority;
308
+ }
309
+ else {
310
+ priority = await select('Priority', DEAL_PRIORITIES, 'medium');
311
+ }
312
+ const tags = options.tags
313
+ ? options.tags.split(',').map((t) => t.trim())
314
+ : await promptTags('Tags (comma-separated)');
315
+ const notes = options.notes || (await prompt('Notes'));
316
+ // Expected close date
317
+ const defaultCloseDate = new Date();
318
+ defaultCloseDate.setMonth(defaultCloseDate.getMonth() + 1);
319
+ const expectedCloseStr = await prompt('Expected Close Date (YYYY-MM-DD)', defaultCloseDate.toISOString().split('T')[0]);
320
+ const expectedClose = new Date(expectedCloseStr).toISOString();
321
+ // Preview
322
+ const confirmed = await previewAndConfirm('Deal Preview', {
323
+ Title: title,
324
+ 'Contact ID': contactId,
325
+ Value: formatCurrency(value, currency),
326
+ Stage: stage,
327
+ Probability: `${probability}%`,
328
+ Priority: priority,
329
+ 'Expected Close': formatDate(expectedClose),
330
+ Tags: tags.length > 0 ? tags.join(', ') : '(none)',
331
+ Notes: notes || '(none)',
332
+ });
333
+ if (!confirmed) {
334
+ printWarning('Deal creation cancelled');
335
+ return;
336
+ }
337
+ // Create deal
338
+ const spinner = new Spinner('Creating deal...').start();
339
+ const deal = await createDeal({
340
+ title,
341
+ contactId,
342
+ value,
343
+ currency,
344
+ stage,
345
+ probability,
346
+ priority,
347
+ tags,
348
+ notes,
349
+ expectedClose,
350
+ totalValue: value,
351
+ });
352
+ spinner.succeed('Deal created successfully');
353
+ printSuccess(`Deal ID: ${deal.id}`);
354
+ console.log();
355
+ });
356
+ // Update deal
357
+ deals
358
+ .command('update <id>')
359
+ .description('Update a deal')
360
+ .option('--title <title>', 'Deal title')
361
+ .option('--value <amount>', 'Deal value')
362
+ .option('--stage <stage>', 'Deal stage')
363
+ .option('--priority <priority>', 'Deal priority')
364
+ .option('--probability <percent>', 'Win probability')
365
+ .option('--notes <notes>', 'Deal notes')
366
+ .action(async (id, options) => {
367
+ const deal = await getDeal(id);
368
+ if (!deal) {
369
+ printError(`Deal not found: ${id}`);
370
+ process.exit(1);
371
+ }
372
+ printHeader(`Update Deal: ${deal.title}`);
373
+ const updates = {};
374
+ if (options.title)
375
+ updates.title = options.title;
376
+ if (options.value !== undefined) {
377
+ updates.value = parseFloat(options.value);
378
+ updates.totalValue = updates.value;
379
+ }
380
+ if (options.stage)
381
+ updates.stage = options.stage;
382
+ if (options.priority)
383
+ updates.priority = options.priority;
384
+ if (options.probability !== undefined) {
385
+ updates.probability = parseInt(options.probability);
386
+ }
387
+ if (options.notes)
388
+ updates.notes = options.notes;
389
+ if (Object.keys(updates).length === 0) {
390
+ printWarning('No changes to update');
391
+ return;
392
+ }
393
+ const confirmed = await confirm('Save changes?');
394
+ if (!confirmed) {
395
+ printWarning('Update cancelled');
396
+ return;
397
+ }
398
+ const spinner = new Spinner('Updating deal...').start();
399
+ await updateDeal(id, updates);
400
+ spinner.succeed('Deal updated successfully');
401
+ });
402
+ // Move deal to stage
403
+ deals
404
+ .command('move <id> <stage>')
405
+ .description('Move a deal to a different stage')
406
+ .action(async (id, stageStr) => {
407
+ const deal = await getDeal(id);
408
+ if (!deal) {
409
+ printError(`Deal not found: ${id}`);
410
+ process.exit(1);
411
+ }
412
+ const stage = stageStr.toLowerCase();
413
+ if (!DEAL_STAGES.includes(stage)) {
414
+ printError(`Invalid stage: ${stageStr}`);
415
+ console.log(`Valid stages: ${DEAL_STAGES.join(', ')}`);
416
+ process.exit(1);
417
+ }
418
+ const probability = getStageProbability(stage);
419
+ console.log(`\nMoving "${deal.title}" from ${formatStatus(deal.stage)} to ${formatStatus(stage)}`);
420
+ console.log(`Probability: ${deal.probability}% -> ${probability}%\n`);
421
+ const confirmed = await confirm('Proceed?');
422
+ if (!confirmed) {
423
+ printWarning('Move cancelled');
424
+ return;
425
+ }
426
+ const spinner = new Spinner('Moving deal...').start();
427
+ await updateDeal(id, { stage, probability });
428
+ if (stage === 'closed_won' || stage === 'closed_lost') {
429
+ await updateDeal(id, { actualClose: new Date().toISOString() });
430
+ }
431
+ spinner.succeed(`Deal moved to ${STAGE_LABELS[stage]}`);
432
+ });
433
+ // Delete deal
434
+ deals
435
+ .command('delete <id>')
436
+ .description('Delete a deal')
437
+ .option('-f, --force', 'Skip confirmation')
438
+ .action(async (id, options) => {
439
+ const deal = await getDeal(id);
440
+ if (!deal) {
441
+ printError(`Deal not found: ${id}`);
442
+ process.exit(1);
443
+ }
444
+ if (!options.force) {
445
+ console.log(`\nDeal: ${output.bold(deal.title)}`);
446
+ console.log(`Value: ${formatCurrency(deal.value, deal.currency)}`);
447
+ console.log(`Stage: ${deal.stage}\n`);
448
+ const confirmed = await confirm('Are you sure you want to delete this deal?');
449
+ if (!confirmed) {
450
+ printWarning('Deletion cancelled');
451
+ return;
452
+ }
453
+ }
454
+ const spinner = new Spinner('Deleting deal...').start();
455
+ await deleteDeal(id);
456
+ spinner.succeed('Deal deleted successfully');
457
+ });
458
+ // Pipeline summary
459
+ deals
460
+ .command('pipeline')
461
+ .description('Show pipeline summary')
462
+ .option('--json', 'Output as JSON')
463
+ .action(async (options) => {
464
+ const dealsList = await getDeals();
465
+ if (options.json) {
466
+ const summary = await Promise.all(DEAL_STAGES.map(async (stage) => {
467
+ const stageDeals = await filterByStage(stage);
468
+ return {
469
+ stage,
470
+ count: stageDeals.length,
471
+ value: stageDeals.reduce((sum, d) => sum + d.totalValue, 0),
472
+ };
473
+ }));
474
+ printJSON(summary);
475
+ return;
476
+ }
477
+ printHeader('Pipeline Summary');
478
+ let totalValue = 0;
479
+ let totalWeighted = 0;
480
+ for (const stage of DEAL_STAGES) {
481
+ const stageDeals = await filterByStage(stage);
482
+ const value = stageDeals.reduce((sum, d) => sum + d.totalValue, 0);
483
+ const weighted = value * (getStageProbability(stage) / 100);
484
+ totalValue += value;
485
+ totalWeighted += weighted;
486
+ const bar = '\u2588'.repeat(Math.min(20, Math.floor(stageDeals.length / 2)));
487
+ console.log(`${formatStatus(stage).padEnd(20)} ` +
488
+ `${output.dim(stageDeals.length.toString().padStart(3))} ` +
489
+ `${output.info(bar)}` +
490
+ ` ${formatCurrency(value)}`);
491
+ }
492
+ console.log();
493
+ console.log(`${output.bold('Total Pipeline:')} ${formatCurrency(totalValue)}`);
494
+ console.log(`${output.bold('Weighted Pipeline:')} ${formatCurrency(totalWeighted)}`);
495
+ console.log();
496
+ });
497
+ }
498
+ //# sourceMappingURL=deals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deals.js","sourceRoot":"","sources":["../../../src/cli/commands/deals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Media Commands
3
+ *
4
+ * CLI commands for managing media files in the CRM.
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Register media commands
9
+ */
10
+ export declare function registerMediaCommands(program: Command): void;
11
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/media.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyLpC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsU5D"}