@coldiq/mcp 0.1.19 → 0.2.5

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 (50) hide show
  1. package/dist/client.d.ts +2 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +7 -1
  4. package/dist/client.js.map +1 -1
  5. package/dist/executor.d.ts +11 -0
  6. package/dist/executor.d.ts.map +1 -1
  7. package/dist/executor.js +72 -11
  8. package/dist/executor.js.map +1 -1
  9. package/dist/index.js +2 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/registry.d.ts +1 -0
  12. package/dist/registry.d.ts.map +1 -1
  13. package/dist/registry.js +35 -9
  14. package/dist/registry.js.map +1 -1
  15. package/dist/tools/find-emails.d.ts +2 -7
  16. package/dist/tools/find-emails.d.ts.map +1 -1
  17. package/dist/tools/find-emails.js +193 -67
  18. package/dist/tools/find-emails.js.map +1 -1
  19. package/dist/tools/find-people.d.ts +3 -2
  20. package/dist/tools/find-people.d.ts.map +1 -1
  21. package/dist/tools/find-people.js +65 -7
  22. package/dist/tools/find-people.js.map +1 -1
  23. package/dist/tools/get-credit-balance.d.ts +17 -0
  24. package/dist/tools/get-credit-balance.d.ts.map +1 -0
  25. package/dist/tools/get-credit-balance.js +20 -0
  26. package/dist/tools/get-credit-balance.js.map +1 -0
  27. package/dist/utils/compact-people.d.ts +24 -0
  28. package/dist/utils/compact-people.d.ts.map +1 -0
  29. package/dist/utils/compact-people.js +311 -0
  30. package/dist/utils/compact-people.js.map +1 -0
  31. package/dist/utils/provider-resolver.d.ts.map +1 -1
  32. package/dist/utils/provider-resolver.js +12 -1
  33. package/dist/utils/provider-resolver.js.map +1 -1
  34. package/package.json +1 -1
  35. package/src/client.ts +9 -1
  36. package/src/executor.ts +89 -17
  37. package/src/index.ts +8 -0
  38. package/src/registry.ts +41 -9
  39. package/src/tools/find-emails.ts +251 -80
  40. package/src/tools/find-people.ts +70 -7
  41. package/src/tools/get-credit-balance.ts +24 -0
  42. package/src/utils/compact-people.ts +323 -0
  43. package/src/utils/provider-resolver.ts +12 -1
  44. package/tests/executor.test.ts +165 -0
  45. package/tests/registry-find-people.test.ts +39 -7
  46. package/tests/registry-search-companies.test.ts +46 -7
  47. package/tests/tools/find-emails.test.ts +267 -1
  48. package/tests/tools/find-people.test.ts +269 -5
  49. package/tests/tools/get-credit-balance.test.ts +56 -0
  50. package/tests/utils/compact-people.test.ts +487 -0
@@ -5,6 +5,12 @@ import { resolvePreferredProviders, buildAllFailedError, FIND_EMAILS_PROVIDERS }
5
5
  // Single-find_email registry providers that the bulk pipeline does NOT already cover.
6
6
  // Used as a fallback waterfall for residual misses after Prospeo + FullEnrich + Findymail + Icypeas.
7
7
  const SINGLE_ONLY_FIND_EMAIL_PROVIDERS = ['limadata-work-email', 'blitzapi', 'limadata-work-email-linkedin', 'linkupapi'];
8
+ // Chunk inputs of >10 people into independent waterfalls. Empirically, Prospeo bulk on 25-50
9
+ // names regularly exceeds the 30s client timeout; 10 keeps each Prospeo call well under it.
10
+ export const FIND_EMAILS_CHUNK_SIZE = 10;
11
+ // Concurrency cap keeps peak in-flight calls (per-chunk fan-out × concurrent chunks) under
12
+ // the undici Agent's 32-connection budget (client.ts).
13
+ const CHUNK_CONCURRENCY = 3;
8
14
  // Pulls a string email from any of the provider-specific response shapes used in the
9
15
  // find_email registry (registry.ts:1228-1413). Keep in sync with the providers covered there.
10
16
  function extractEmail(data) {
@@ -37,11 +43,14 @@ export const findEmailsName = 'find_emails';
37
43
  export const findEmailsDescription = 'Find professional emails for multiple people in one batch. ' +
38
44
  'Uses Prospeo bulk first; for any misses, runs FullEnrich and FindyMail/IcyPeas in parallel — ' +
39
45
  'whichever provider returns an email first wins. ' +
40
- 'Much faster than calling find_email one-by-one. Max 50 people per call. ' +
46
+ 'Much faster than calling find_email one-by-one. Max 50 people per call ' +
47
+ `inputs are split into chunks of ${FIND_EMAILS_CHUNK_SIZE} internally for reliability, so larger batches work transparently. ` +
41
48
  'Each person needs a unique id to match results back. ' +
42
49
  'Always pass first_name, last_name, and domain — they are the primary enrichment signal. ' +
43
50
  'Also pass linkedin_url when available, but never rely on it alone as some providers cannot resolve vanity URLs. ' +
44
- 'ColdIQ automatically picks the best waterfall — pass use_providers only if you need specific tools.';
51
+ 'ColdIQ automatically picks the best waterfall — pass use_providers only if you need specific tools. ' +
52
+ 'Response includes `_meta.batch_status` (complete|partial|failed) and per-provider call stats so callers can ' +
53
+ 'tell a real "no coverage" result apart from a provider-level failure.';
45
54
  export const findEmailsSchema = {
46
55
  people: z
47
56
  .array(z.object({
@@ -56,13 +65,88 @@ export const findEmailsSchema = {
56
65
  .describe('People to find emails for (max 50)'),
57
66
  use_providers: z.array(z.string()).optional().describe(`Optional ordered list of providers to use. Leave empty to let ColdIQ automatically run the best waterfall — recommended for most use cases. Available providers: ${FIND_EMAILS_PROVIDERS.join(', ')}. Provider names are matched fuzzily, so minor typos are tolerated.`),
58
67
  };
68
+ function newBatchStats() {
69
+ return {
70
+ prospeo: { attempted: 0, failed: 0 },
71
+ fullenrich: { attempted: 0, failed: 0 },
72
+ findymail: { attempted: 0, failed: 0 },
73
+ icypeas: { attempted: 0, failed: 0 },
74
+ single_fallback: { attempted: 0, failed: 0 },
75
+ };
76
+ }
77
+ function mergeStats(into, from) {
78
+ for (const key of Object.keys(into)) {
79
+ into[key].attempted += from[key].attempted;
80
+ into[key].failed += from[key].failed;
81
+ }
82
+ }
83
+ function totalFailures(s) {
84
+ let n = 0;
85
+ for (const key of Object.keys(s))
86
+ n += s[key].failed;
87
+ return n;
88
+ }
89
+ // A call counts as a "failure" when callApi never received a usable response: network error,
90
+ // abort/timeout (status === 0), or upstream 5xx. Upstream 4xx is a data-shape problem, not a
91
+ // provider outage — we don't surface it as a batch-level failure.
92
+ function isCallFailure(res) {
93
+ return !res.ok && (res.status === 0 || res.status >= 500);
94
+ }
59
95
  function sleep(ms) {
60
96
  return new Promise((resolve) => setTimeout(resolve, ms));
61
97
  }
62
98
  function missesOf(people, results) {
63
99
  return people.filter((p) => !results.find((r) => r.id === p.id)?.email);
64
100
  }
65
- async function fullEnrichStep(misses, results) {
101
+ function chunkArray(arr, size) {
102
+ if (arr.length <= size)
103
+ return [arr];
104
+ const out = [];
105
+ for (let i = 0; i < arr.length; i += size)
106
+ out.push(arr.slice(i, i + size));
107
+ return out;
108
+ }
109
+ async function withConcurrency(items, concurrency, fn) {
110
+ const results = new Array(items.length);
111
+ let cursor = 0;
112
+ const workerCount = Math.min(concurrency, items.length);
113
+ const workers = Array.from({ length: workerCount }, async () => {
114
+ while (true) {
115
+ const i = cursor++;
116
+ if (i >= items.length)
117
+ return;
118
+ results[i] = await fn(items[i], i);
119
+ }
120
+ });
121
+ await Promise.all(workers);
122
+ return results;
123
+ }
124
+ async function prospeoBulkStep(chunk, results, stats) {
125
+ const bulkBody = {
126
+ data: chunk.map((p) => p.linkedin_url
127
+ ? { identifier: p.id, linkedin_url: p.linkedin_url }
128
+ : { identifier: p.id, first_name: p.first_name, last_name: p.last_name, company_name: p.domain }),
129
+ };
130
+ stats.prospeo.attempted += 1;
131
+ const bulkRes = await callApi('POST', '/prospeo/bulk-enrich-person', bulkBody);
132
+ if (isCallFailure(bulkRes))
133
+ stats.prospeo.failed += 1;
134
+ if (!bulkRes.ok)
135
+ return;
136
+ const data = bulkRes.data;
137
+ for (const item of data.results ?? []) {
138
+ const email = item.person?.email?.email;
139
+ if (typeof email === 'string' && email.includes('@')) {
140
+ const hit = results.find((r) => r.id === item.identifier);
141
+ if (hit) {
142
+ hit.email = email;
143
+ hit.provider = 'prospeo';
144
+ }
145
+ }
146
+ }
147
+ }
148
+ async function fullEnrichStep(misses, results, stats) {
149
+ stats.fullenrich.attempted += 1;
66
150
  const feBody = {
67
151
  name: 'mcp-enrich-batch',
68
152
  data: misses.map((p) => ({
@@ -75,11 +159,16 @@ async function fullEnrichStep(misses, results) {
75
159
  })),
76
160
  };
77
161
  const feCreateRes = await callApi('POST', '/fullenrich/contact/enrich/bulk', feBody);
78
- if (!feCreateRes.ok)
162
+ if (!feCreateRes.ok) {
163
+ if (isCallFailure(feCreateRes))
164
+ stats.fullenrich.failed += 1;
79
165
  return;
166
+ }
80
167
  const enrichmentId = feCreateRes.data.enrichment_id;
81
- if (!enrichmentId)
168
+ if (!enrichmentId) {
169
+ // No id returned but POST 2xx — treat as a soft skip, not a network failure.
82
170
  return;
171
+ }
83
172
  // Tightened from 90s → 45s: Step 3 runs in parallel and typically fills misses
84
173
  // faster, so FullEnrich's marginal value decays past this point.
85
174
  const deadline = Date.now() + 45_000;
@@ -110,8 +199,11 @@ async function fullEnrichStep(misses, results) {
110
199
  }
111
200
  return;
112
201
  }
202
+ // Polling deadline reached without DONE/FAILED — count as a failure so the caller
203
+ // sees fullenrich didn't actually finish.
204
+ stats.fullenrich.failed += 1;
113
205
  }
114
- async function findymailIcypeasStep(misses, results, allowedProviders) {
206
+ async function findymailIcypeasStep(misses, results, stats, allowedProviders) {
115
207
  const useFindymail = !allowedProviders || allowedProviders.includes('findymail');
116
208
  const useIcypeas = !allowedProviders || allowedProviders.includes('icypeas');
117
209
  await Promise.all(misses.map(async (person) => {
@@ -123,10 +215,13 @@ async function findymailIcypeasStep(misses, results, allowedProviders) {
123
215
  return;
124
216
  if (useFindymail) {
125
217
  const fullName = [person.first_name, person.last_name].filter(Boolean).join(' ');
218
+ stats.findymail.attempted += 1;
126
219
  const fmRes = await callApi('POST', '/findymail/search/name', {
127
220
  name: fullName,
128
221
  domain: person.domain,
129
222
  });
223
+ if (isCallFailure(fmRes))
224
+ stats.findymail.failed += 1;
130
225
  if (!hit.email && fmRes.ok) {
131
226
  const d = fmRes.data;
132
227
  if (typeof d.email === 'string' && d.email.includes('@')) {
@@ -138,11 +233,14 @@ async function findymailIcypeasStep(misses, results, allowedProviders) {
138
233
  }
139
234
  if (hit.email || !useIcypeas)
140
235
  return;
236
+ stats.icypeas.attempted += 1;
141
237
  const icyRes = await callApi('POST', '/icypeas/email-search', {
142
238
  firstname: person.first_name,
143
239
  lastname: person.last_name,
144
240
  domainOrCompany: person.domain,
145
241
  });
242
+ if (isCallFailure(icyRes))
243
+ stats.icypeas.failed += 1;
146
244
  if (!hit.email && icyRes.ok) {
147
245
  const d = icyRes.data;
148
246
  const email = typeof d.email === 'string' && d.email.includes('@')
@@ -157,37 +255,51 @@ async function findymailIcypeasStep(misses, results, allowedProviders) {
157
255
  }
158
256
  }));
159
257
  }
160
- export async function findEmailsHandler(input) {
161
- const { use_providers: rawUseProviders, ...restInput } = input;
162
- const people = restInput.people;
163
- const resolved = resolvePreferredProviders('find_emails', restInput, rawUseProviders);
164
- if (!resolved.ok) {
165
- return { content: [{ type: 'text', text: JSON.stringify(resolved.error) }], isError: true };
166
- }
167
- const allowedProviders = resolved.providers;
168
- const isConstrained = allowedProviders.length > 0;
169
- const results = people.map((p) => ({ id: p.id, email: null, provider: null }));
170
- // Step 1: Prospeo bulk — 1 call for all people
171
- if (!isConstrained || allowedProviders.includes('prospeo')) {
172
- const bulkBody = {
173
- data: people.map((p) => p.linkedin_url
174
- ? { identifier: p.id, linkedin_url: p.linkedin_url }
175
- : { identifier: p.id, first_name: p.first_name, last_name: p.last_name, company_name: p.domain }),
258
+ async function singleFallbackStep(stragglers, results, stats, fallbackProviders) {
259
+ if (fallbackProviders.length === 0 || stragglers.length === 0)
260
+ return;
261
+ await Promise.all(stragglers.map(async (person) => {
262
+ const hit = results.find((r) => r.id === person.id);
263
+ if (!hit || hit.email)
264
+ return;
265
+ const singleInput = {
266
+ first_name: person.first_name,
267
+ last_name: person.last_name,
268
+ domain: person.domain,
269
+ linkedin_url: person.linkedin_url,
176
270
  };
177
- const bulkRes = await callApi('POST', '/prospeo/bulk-enrich-person', bulkBody);
178
- if (bulkRes.ok) {
179
- const data = bulkRes.data;
180
- for (const item of data.results ?? []) {
181
- const email = item.person?.email?.email;
182
- if (typeof email === 'string' && email.includes('@')) {
183
- const hit = results.find((r) => r.id === item.identifier);
184
- if (hit) {
185
- hit.email = email;
186
- hit.provider = 'prospeo';
187
- }
188
- }
189
- }
271
+ stats.single_fallback.attempted += 1;
272
+ // Per-person 30s ceiling so one slow provider doesn't block the rest.
273
+ const exec = executeWithFallback('find_email', singleInput, { providers: fallbackProviders });
274
+ const timeout = new Promise((resolve) => setTimeout(() => resolve(null), 30_000));
275
+ const raced = await Promise.race([exec, timeout]);
276
+ if (!raced) {
277
+ // Race timed out none of the fallback providers returned in time.
278
+ stats.single_fallback.failed += 1;
279
+ return;
280
+ }
281
+ if (isExecutionError(raced)) {
282
+ // Every fallback provider returned an error. Only count as `failed` when at least
283
+ // one of them looked like a real network/upstream failure — providers that responded
284
+ // 200 with no result are legitimate "no coverage", not a batch failure.
285
+ const hadRealFailure = raced.providers_tried.some((p) => p.status === 0 || p.status >= 500);
286
+ if (hadRealFailure)
287
+ stats.single_fallback.failed += 1;
288
+ return;
190
289
  }
290
+ const email = extractEmail(raced.data);
291
+ if (email && !hit.email) {
292
+ hit.email = email;
293
+ hit.provider = raced._meta.provider;
294
+ }
295
+ }));
296
+ }
297
+ async function processChunk(chunk, allowedProviders, isConstrained) {
298
+ const results = chunk.map((p) => ({ id: p.id, email: null, provider: null }));
299
+ const stats = newBatchStats();
300
+ // Step 1: Prospeo bulk — 1 call for everyone in this chunk.
301
+ if (!isConstrained || allowedProviders.includes('prospeo')) {
302
+ await prospeoBulkStep(chunk, results, stats);
191
303
  }
192
304
  // Steps 2 & 3 run concurrently for misses.
193
305
  // Step 2: FullEnrich bulk async (slow tail, better European coverage)
@@ -195,14 +307,14 @@ export async function findEmailsHandler(input) {
195
307
  // Both branches write to the shared `results` array; every write site checks
196
308
  // `if (hit.email)` first so whichever provider arrives first wins and the
197
309
  // other does not overwrite.
198
- const misses = missesOf(people, results);
310
+ const misses = missesOf(chunk, results);
199
311
  if (misses.length > 0) {
200
312
  const steps = [];
201
313
  if (!isConstrained || allowedProviders.includes('fullenrich')) {
202
- steps.push(fullEnrichStep(misses, results));
314
+ steps.push(fullEnrichStep(misses, results, stats));
203
315
  }
204
316
  if (!isConstrained || allowedProviders.includes('findymail') || allowedProviders.includes('icypeas')) {
205
- steps.push(findymailIcypeasStep(misses, results, isConstrained ? allowedProviders : undefined));
317
+ steps.push(findymailIcypeasStep(misses, results, stats, isConstrained ? allowedProviders : undefined));
206
318
  }
207
319
  if (steps.length > 0)
208
320
  await Promise.allSettled(steps);
@@ -211,51 +323,65 @@ export async function findEmailsHandler(input) {
211
323
  // Bulk covers Prospeo + FullEnrich + FindyMail + IcyPeas. The single-find_email registry
212
324
  // (registry.ts:1228-1413) additionally covers LimaData, BlitzAPI, LimaData-LinkedIn, LinkupAPI.
213
325
  // Without this step, agents would observe bulk return 0 and fall back to N+1 single calls.
214
- const stragglers = missesOf(people, results);
326
+ const stragglers = missesOf(chunk, results);
215
327
  if (stragglers.length > 0) {
216
328
  const fallbackProviders = isConstrained
217
329
  ? allowedProviders.filter((p) => SINGLE_ONLY_FIND_EMAIL_PROVIDERS.includes(p))
218
330
  : [...SINGLE_ONLY_FIND_EMAIL_PROVIDERS];
219
- if (fallbackProviders.length > 0) {
220
- await Promise.all(stragglers.map(async (person) => {
221
- const hit = results.find((r) => r.id === person.id);
222
- if (!hit || hit.email)
223
- return;
224
- const singleInput = {
225
- first_name: person.first_name,
226
- last_name: person.last_name,
227
- domain: person.domain,
228
- linkedin_url: person.linkedin_url,
229
- };
230
- // Per-person 30s ceiling so one slow provider doesn't block the rest.
231
- const exec = executeWithFallback('find_email', singleInput, { providers: fallbackProviders });
232
- const timeout = new Promise((resolve) => setTimeout(() => resolve(null), 30_000));
233
- const raced = await Promise.race([exec, timeout]);
234
- if (!raced || isExecutionError(raced))
235
- return;
236
- const email = extractEmail(raced.data);
237
- if (email && !hit.email) {
238
- hit.email = email;
239
- hit.provider = raced._meta.provider;
240
- }
241
- }));
242
- }
331
+ await singleFallbackStep(stragglers, results, stats, fallbackProviders);
332
+ }
333
+ return { results, stats };
334
+ }
335
+ function computeBatchStatus(found, total, stats) {
336
+ const failures = totalFailures(stats);
337
+ if (failures === 0)
338
+ return 'complete';
339
+ if (found === 0 && total > 0)
340
+ return 'failed';
341
+ return 'partial';
342
+ }
343
+ export async function findEmailsHandler(input) {
344
+ const { use_providers: rawUseProviders, ...restInput } = input;
345
+ const people = restInput.people;
346
+ const resolved = resolvePreferredProviders('find_emails', restInput, rawUseProviders);
347
+ if (!resolved.ok) {
348
+ return { content: [{ type: 'text', text: JSON.stringify(resolved.error) }], isError: true };
243
349
  }
350
+ const allowedProviders = resolved.providers;
351
+ const isConstrained = allowedProviders.length > 0;
352
+ const chunks = chunkArray(people, FIND_EMAILS_CHUNK_SIZE);
353
+ const chunkOutputs = await withConcurrency(chunks, CHUNK_CONCURRENCY, (chunk) => processChunk(chunk, allowedProviders, isConstrained));
354
+ const results = chunkOutputs.flatMap((c) => c.results);
355
+ const aggregateStats = newBatchStats();
356
+ for (const c of chunkOutputs)
357
+ mergeStats(aggregateStats, c.stats);
244
358
  const found = results.filter((r) => r.email !== null).length;
359
+ const batchStatus = computeBatchStatus(found, people.length, aggregateStats);
360
+ // Constrained-mode behaviour preserved: if the caller pinned providers and got zero, push back.
245
361
  if (isConstrained && found === 0) {
246
362
  const err = buildAllFailedError(allowedProviders, 'find_emails', FIND_EMAILS_PROVIDERS);
247
363
  return { content: [{ type: 'text', text: JSON.stringify(err) }], isError: true };
248
364
  }
249
- const meta = resolved.matchedFrom && Object.keys(resolved.matchedFrom).length > 0
250
- ? { matchedFrom: resolved.matchedFrom }
251
- : undefined;
365
+ const meta = {
366
+ providers: aggregateStats,
367
+ batch_status: batchStatus,
368
+ chunk_size: FIND_EMAILS_CHUNK_SIZE,
369
+ chunk_count: chunks.length,
370
+ };
371
+ if (resolved.matchedFrom && Object.keys(resolved.matchedFrom).length > 0) {
372
+ meta.matchedFrom = resolved.matchedFrom;
373
+ }
374
+ // Surface the silent-failure case the user reported: 200 OK with all-nulls is misleading
375
+ // when the nulls were caused by provider failures rather than legitimate no-coverage.
376
+ const isError = batchStatus === 'failed';
252
377
  return {
253
378
  content: [
254
379
  {
255
380
  type: 'text',
256
- text: JSON.stringify({ data: { results, found, total: people.length }, ...(meta ? { _meta: meta } : {}) }),
381
+ text: JSON.stringify({ data: { results, found, total: people.length }, _meta: meta }),
257
382
  },
258
383
  ],
384
+ ...(isError ? { isError: true } : {}),
259
385
  };
260
386
  }
261
387
  //# sourceMappingURL=find-emails.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-emails.js","sourceRoot":"","sources":["../../src/tools/find-emails.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-emails.js","sourceRoot":"","sources":["../../src/tools/find-emails.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export declare const findPeopleSchema: {
9
9
  locations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
10
10
  keywords: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
11
11
  limit: z.ZodDefault<z.ZodNumber>;
12
+ fields: z.ZodDefault<z.ZodEnum<["compact", "verbose"]>>;
13
+ reveal: z.ZodOptional<z.ZodBoolean>;
12
14
  use_providers: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
13
15
  };
14
16
  export declare function findPeopleHandler(input: Record<string, unknown>): Promise<{
@@ -16,12 +18,11 @@ export declare function findPeopleHandler(input: Record<string, unknown>): Promi
16
18
  type: "text";
17
19
  text: string;
18
20
  }[];
19
- isError: boolean;
20
21
  } | {
21
22
  content: {
22
23
  type: "text";
23
24
  text: string;
24
25
  }[];
25
- isError?: undefined;
26
+ isError: boolean;
26
27
  }>;
27
28
  //# sourceMappingURL=find-people.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-people.d.ts","sourceRoot":"","sources":["../../src/tools/find-people.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAE3C,eAAO,MAAM,qBAAqB,QAS0B,CAAA;AAE5D,eAAO,MAAM,gBAAgB;;;;;;;;;CAS5B,CAAA;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;GA6CrE"}
1
+ {"version":3,"file":"find-people.d.ts","sourceRoot":"","sources":["../../src/tools/find-people.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAE3C,eAAO,MAAM,qBAAqB,QAWiJ,CAAA;AAEnL,eAAO,MAAM,gBAAgB;;;;;;;;;;;CAW5B,CAAA;AAYD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;GA6FrE"}
@@ -3,6 +3,7 @@ import { executeWithFallback, isExecutionError } from '../executor.js';
3
3
  import { callApi } from '../client.js';
4
4
  import { getProviders } from '../registry.js';
5
5
  import { resolvePreferredProviders, getProvidersForCapability } from '../utils/provider-resolver.js';
6
+ import { compactPayload } from '../utils/compact-people.js';
6
7
  export const findPeopleName = 'find_people';
7
8
  export const findPeopleDescription = 'Find people at specific companies by job title. ' +
8
9
  'Use this — never search_web — to find contacts, executives, or LinkedIn profiles at known companies. ' +
@@ -12,7 +13,9 @@ export const findPeopleDescription = 'Find people at specific companies by job t
12
13
  'Prefer company_linkedin_urls when available — they make the search faster. Only pass company_domains when you have no LinkedIn URLs. ' +
13
14
  'Pass job_titles EXACTLY as stated — never expand or generate variants (e.g. do NOT turn "CEO" into ["CEO", "Chief Executive Officer", "Founder"]). LeadsFactory handles fuzzy title matching internally; adding variants wastes personas and degrades results. ' +
14
15
  'Do NOT pass seniorities unless explicitly asked — job titles alone produce better results. ' +
15
- 'Returns names, titles, LinkedIn URLs. Default limit: 25.';
16
+ 'Returns names, titles, LinkedIn URLs, plus company name/domain/linkedin/headcount when available. Default limit: 25. ' +
17
+ 'Response is compact by default (~99% smaller than the raw provider payload). Set fields="verbose" only when you specifically need employment history, skills, languages, or company descriptions. ' +
18
+ 'When the matched provider is Apollo, last names are partially obfuscated and emails/LinkedIn URLs are omitted unless reveal=true is passed (adds 1 credit per revealed person).';
16
19
  export const findPeopleSchema = {
17
20
  company_linkedin_urls: z.array(z.string()).optional().describe('Company LinkedIn URLs (preferred over domains when available, e.g. ["https://linkedin.com/company/microsoft"])'),
18
21
  company_domains: z.array(z.string()).optional().describe('Company domains to search (e.g. ["microsoft.com", "google.com"]). Use only when LinkedIn URLs are not available.'),
@@ -20,11 +23,21 @@ export const findPeopleSchema = {
20
23
  seniorities: z.array(z.string()).optional().describe('Seniority levels (e.g. ["c_suite", "vp", "director"])'),
21
24
  locations: z.array(z.string()).optional().describe('Person locations as either ISO-2 country codes ("BR") or English country names ("Brazil") — both are accepted and normalized internally. LeadsFactory uses these to scope contacts to the country; other providers fall back to free-text matching.'),
22
25
  keywords: z.array(z.string()).optional().describe('Free-text keyword search terms (e.g. ["growth", "AI"])'),
23
- limit: z.number().min(1).max(500).default(25).describe('Max results across all companies combined (default: 25, max: 500). For multiple companies multiply: e.g. 10 companies × 5 each = 50.'),
26
+ limit: z.number().min(1).max(500).default(25).describe('Max results across all companies combined (default: 25, max: 500). For multiple companies multiply: e.g. 10 companies × 5 each = 50. Note: when the matched provider is Apollo, results are capped at 100 per call (Apollo upstream limit).'),
27
+ fields: z.enum(['compact', 'verbose']).default('compact').describe('Response shape. "compact" (default) returns a small, predictable per-person record: name, title, linkedin_url, company {name, domain, linkedin_url, headcount}, plus seniority/email/location when the upstream provider includes them. "verbose" returns the raw provider passthrough (~30KB+ per record from FullEnrich: employment history, every company office, descriptions, skills, languages) — only use when you specifically need those fields.'),
28
+ reveal: z.boolean().optional().describe('Apollo-only: when true, follow the obfuscated Apollo people-search results with /apollo/people/bulk-match to reveal full names, emails, and LinkedIn URLs. Costs 1 extra credit per revealed person on top of the search credit. Has no effect for other providers (their data is already unobfuscated). Default false to protect credits.'),
24
29
  use_providers: z.array(z.string()).optional().describe(`Optional ordered list of providers to use. Leave empty to let ColdIQ automatically pick the best tool for your inputs — recommended for most use cases. Available providers: ${getProvidersForCapability('find_people').join(', ')}. Provider names are matched fuzzily, so minor typos are tolerated.`),
25
30
  };
31
+ function buildSuccess(result, fields) {
32
+ const payload = fields === 'compact'
33
+ ? { ...result, data: compactPayload(result.data, result._meta.provider) }
34
+ : result;
35
+ return { content: [{ type: 'text', text: JSON.stringify(payload) }] };
36
+ }
26
37
  export async function findPeopleHandler(input) {
27
- const { use_providers: rawUseProviders, ...restInput } = input;
38
+ const { use_providers: rawUseProviders, reveal: rawReveal, fields: rawFields, ...restInput } = input;
39
+ const reveal = rawReveal === true;
40
+ const fields = rawFields === 'verbose' ? 'verbose' : 'compact';
28
41
  const resolved = resolvePreferredProviders('find_people', restInput, rawUseProviders);
29
42
  if (!resolved.ok) {
30
43
  return { content: [{ type: 'text', text: JSON.stringify(resolved.error) }], isError: true };
@@ -33,6 +46,53 @@ export async function findPeopleHandler(input) {
33
46
  if (isExecutionError(result)) {
34
47
  return { content: [{ type: 'text', text: JSON.stringify(result) }], isError: true };
35
48
  }
49
+ // Apollo's /people/search returns obfuscated data (last names like "Ar***t",
50
+ // no emails). When the caller opts in with reveal=true, follow up with
51
+ // /apollo/people/bulk-match (10 IDs per call, Apollo's bulk cap) to swap each
52
+ // person object for its fully-revealed counterpart. Costs 1 extra credit per
53
+ // revealed person on top of the original search credit.
54
+ if (reveal && result._meta.provider === 'apollo') {
55
+ const data = result.data;
56
+ const people = data.people ?? [];
57
+ const ids = people
58
+ .map((p) => p.id)
59
+ .filter((id) => typeof id === 'string' && id.length > 0);
60
+ if (ids.length > 0) {
61
+ const matches = [];
62
+ for (let i = 0; i < ids.length; i += 10) {
63
+ const chunk = ids.slice(i, i + 10);
64
+ const res = await callApi('POST', '/apollo/people/bulk-match', {
65
+ details: chunk.map((id) => ({ id })),
66
+ reveal_personal_emails: true,
67
+ });
68
+ if (res.ok && res.data && typeof res.data === 'object') {
69
+ const body = res.data;
70
+ const chunkMatches = body.matches ?? [];
71
+ matches.push(...chunkMatches);
72
+ }
73
+ }
74
+ if (matches.length > 0) {
75
+ const matchById = new Map();
76
+ for (const m of matches) {
77
+ const id = m.id;
78
+ if (typeof id === 'string')
79
+ matchById.set(id, m);
80
+ }
81
+ const revealedPeople = people.map((p) => {
82
+ const id = p.id;
83
+ if (typeof id === 'string' && matchById.has(id))
84
+ return matchById.get(id);
85
+ return p;
86
+ });
87
+ // Only claim `revealed: true` when bulk-match returned a result for every ID.
88
+ // Partial reveals (some entries remain obfuscated) would otherwise mislead
89
+ // callers into trusting `last_name` / `email` that aren't actually filled.
90
+ const fullyRevealed = matchById.size >= ids.length;
91
+ const merged = { ...data, people: revealedPeople, revealed: fullyRevealed };
92
+ return buildSuccess({ ...result, data: merged }, fields);
93
+ }
94
+ }
95
+ }
36
96
  // Gap-fill: if LeadsFactory missed some domains, try Apollo for those.
37
97
  // Only runs when domains were the input — if we sent LinkedIn URLs, no_results_domains
38
98
  // is unreliable (LF may resolve arbitrary domains from URLs, e.g. linkedin.com itself).
@@ -56,13 +116,11 @@ export async function findPeopleHandler(input) {
56
116
  ...apolloRes.data,
57
117
  },
58
118
  };
59
- return {
60
- content: [{ type: 'text', text: JSON.stringify({ ...result, data: merged }) }],
61
- };
119
+ return buildSuccess({ ...result, data: merged }, fields);
62
120
  }
63
121
  }
64
122
  }
65
123
  }
66
- return { content: [{ type: 'text', text: JSON.stringify(result) }] };
124
+ return buildSuccess(result, fields);
67
125
  }
68
126
  //# sourceMappingURL=find-people.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-people.js","sourceRoot":"","sources":["../../src/tools/find-people.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-people.js","sourceRoot":"","sources":["../../src/tools/find-people.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAA;AAE3C,MAAM,CAAC,MAAM,qBAAqB,GAChC,kDAAkD;IAClD,uGAAuG;IACvG,yHAAyH;IACzH,qFAAqF;IACrF,qEAAqE;IACrE,uIAAuI;IACvI,iQAAiQ;IACjQ,6FAA6F;IAC7F,uHAAuH;IACvH,oMAAoM;IACpM,iLAAiL,CAAA;AAEnL,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gHAAgH,CAAC;IAChL,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kHAAkH,CAAC;IAC5K,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IACtG,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;IAC7G,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qPAAqP,CAAC;IACzS,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;IAC3G,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,6OAA6O,CAAC;IACrS,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,2bAA2b,CAAC;IAC/f,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4UAA4U,CAAC;IACrX,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gLAAgL,yBAAyB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,qEAAqE,CAAC;CACjW,CAAA;AAED,SAAS,YAAY,CACnB,MAA+G,EAC/G,MAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS;QAClC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACzE,CAAC,CAAC,MAAM,CAAA;IACV,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAA;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAA8B;IACpE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAA;IACpG,MAAM,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IACjC,MAAM,MAAM,GAA0B,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;IACrF,MAAM,QAAQ,GAAG,yBAAyB,CAAC,aAAa,EAAE,SAAS,EAAE,eAAe,CAAC,CAAA;IACrF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACtG,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;IACxI,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC9F,CAAC;IAED,6EAA6E;IAC7E,uEAAuE;IACvE,8EAA8E;IAC9E,6EAA6E;IAC7E,wDAAwD;IACxD,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAA+B,CAAA;QACnD,MAAM,MAAM,GAAI,IAAI,CAAC,MAAqD,IAAI,EAAE,CAAA;QAChF,MAAM,GAAG,GAAG,MAAM;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAExE,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,OAAO,GAAmC,EAAE,CAAA;YAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;gBAClC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,2BAA2B,EAAE;oBAC7D,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACpC,sBAAsB,EAAE,IAAI;iBAC7B,CAAC,CAAA;gBACF,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACvD,MAAM,IAAI,GAAG,GAAG,CAAC,IAA+B,CAAA;oBAChD,MAAM,YAAY,GAAI,IAAI,CAAC,OAAsD,IAAI,EAAE,CAAA;oBACvF,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;gBAC/B,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmC,CAAA;gBAC5D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAA;oBACf,IAAI,OAAO,EAAE,KAAK,QAAQ;wBAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;gBAClD,CAAC;gBACD,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACtC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAA;oBACf,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAE,OAAO,SAAS,CAAC,GAAG,CAAC,EAAE,CAAE,CAAA;oBAC1E,OAAO,CAAC,CAAA;gBACV,CAAC,CAAC,CAAA;gBACF,8EAA8E;gBAC9E,2EAA2E;gBAC3E,2EAA2E;gBAC3E,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAA;gBAClD,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAA;gBAC3E,OAAO,YAAY,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAA;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,uFAAuF;IACvF,wFAAwF;IACxF,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,IAAK,SAAS,CAAC,eAA6B,CAAC,MAAM,GAAG,CAAC,CAAA;IACvH,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAK,SAAS,CAAC,qBAAmC,CAAC,MAAM,GAAG,CAAC,CAAA;IACxI,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,cAAc,IAAI,eAAe,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5H,MAAM,IAAI,GAAG,MAAM,CAAC,IAA+B,CAAA;QACnD,MAAM,aAAa,GAAI,IAAI,CAAC,kBAA2C,IAAI,EAAE,CAAA;QAE7E,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAA;YACzE,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,QAAQ,GAAG,EAAE,GAAG,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,SAAS,EAAE,CAAA;gBACnG,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;gBAC1C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;gBAElG,IAAI,SAAS,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrD,MAAM,MAAM,GAAG;wBACb,GAAG,IAAI;wBACP,QAAQ,EAAE;4BACR,QAAQ,EAAE,QAAQ;4BAClB,OAAO,EAAE,aAAa;4BACtB,GAAI,SAAS,CAAC,IAAgC;yBAC/C;qBACF,CAAA;oBACD,OAAO,YAAY,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAA;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AACrC,CAAC"}
@@ -0,0 +1,17 @@
1
+ export declare const getCreditBalanceName = "get_credit_balance";
2
+ export declare const getCreditBalanceDescription = "Get the current ColdIQ credit balance and month-to-date usage for the authenticated account. Use before bulk or fan-out operations (e.g. find_emails over many people) to project cost and avoid mid-run insufficient-credit failures. Returns { balance, usedThisMonth }.";
3
+ export declare const getCreditBalanceSchema: {};
4
+ export declare function getCreditBalanceHandler(_input: Record<string, unknown>): Promise<{
5
+ content: {
6
+ type: "text";
7
+ text: string;
8
+ }[];
9
+ isError: boolean;
10
+ } | {
11
+ content: {
12
+ type: "text";
13
+ text: string;
14
+ }[];
15
+ isError?: undefined;
16
+ }>;
17
+ //# sourceMappingURL=get-credit-balance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-credit-balance.d.ts","sourceRoot":"","sources":["../../src/tools/get-credit-balance.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,uBAAuB,CAAA;AAExD,eAAO,MAAM,2BAA2B,+QACsO,CAAA;AAE9Q,eAAO,MAAM,sBAAsB,IAAK,CAAA;AAExC,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;GAc5E"}