@signaliz/cli 1.0.45 → 1.0.47

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 (3) hide show
  1. package/README.md +6 -13
  2. package/dist/bin.js +26 -15
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -24,17 +24,12 @@ signaliz verify-email jane@example.com --dry-run --json
24
24
  signaliz verify-email jane@example.com --skip-cache --no-wait --json
25
25
  signaliz verify-email --verification-run-id run_... --json
26
26
  signaliz company-signals --domain example.com --research-prompt "expansion priorities"
27
- # Resume a queued run in a later agent/process without duplicate spend
28
- signaliz company-signals --signal-run-id run_...
29
27
  signaliz signal-to-copy \
30
28
  --company-domain example.com \
31
29
  --person-name "Jane Doe" \
32
30
  --title "VP Sales" \
33
31
  --campaign-offer "pipeline intelligence"
34
32
 
35
- # Resume a queued copy request with the returned ID only
36
- signaliz signal-to-copy --signal-run-id copy_... --json
37
-
38
33
  # Force fresh signals or opt into slower deep research only when needed
39
34
  signaliz signal-to-copy --company-domain example.com --person-name "Jane Doe" \
40
35
  --title "VP Sales" --campaign-offer "pipeline intelligence" --skip-cache --deep-search
@@ -73,7 +68,7 @@ Failed result lines preserve `errorCode`, `retryEligible`, and
73
68
  `retryAfterSeconds` when the API supplies recovery guidance.
74
69
 
75
70
  If a single request or batch submission response is lost, rerun the same
76
- command with `--idempotency-key <key>` to recover the original request or job
71
+ command with `--idempotency-key <key>` to recover the original request or supported email job
77
72
  without duplicate work. Add `--dry-run` to any product command, including one
78
73
  using `--input`, to receive a conservative credit ceiling without provider
79
74
  calls, jobs, writes, or spend.
@@ -82,13 +77,11 @@ Batch input is capped at 5,000 records, concurrency is bounded to `1-50`, input
82
77
  order is preserved, and a failed item does not abort successful items.
83
78
  Exact duplicate tasks are single-flighted across the full input before
84
79
  transport. Find Email and Verify Email inputs larger than 25 use one cache-aware
85
- recoverable REST job with 500-row result pages. Uniform Company Signal
86
- Enrichment inputs larger than 25 use one cache-aware recoverable REST job with
87
- 25-row result pages; heterogeneous, no-wait, and per-run recovery inputs keep
88
- the 25-row request path. Signal to Copy inputs larger than 25 use one
89
- recoverable REST job when they can reuse available signal data; fresh or
90
- deep-search requests keep the 25-row path. Signal to Copy also shares company
91
- research across recipients.
80
+ recoverable REST job with 500-row result pages. Company Signal Enrichment and
81
+ Signal to Copy inputs larger than 25 are chunked client-side into synchronous
82
+ requests of at most 25; the CLI waits for every chunk and emits only complete
83
+ results or terminal per-row errors. Signal to Copy also shares company research
84
+ across recipients.
92
85
 
93
86
  Connection commands are limited to access infrastructure:
94
87
 
package/dist/bin.js CHANGED
@@ -14,12 +14,12 @@ var HELP = `Signaliz CLI
14
14
  Four product commands:
15
15
  signaliz find-email --company-domain example.com --full-name "Jane Doe" [--skip-cache]
16
16
  signaliz verify-email [jane@example.com] [--verification-run-id run_...] [--no-wait] [--max-wait-ms 600000]
17
- signaliz company-signals --domain example.com [--research-prompt "..."] [--no-summary] [--max-wait-ms 1200000]
18
- signaliz company-signals --signal-run-id run_... Resume without duplicate spend
17
+ signaliz company-signals --domain example.com [--research-prompt "..."] [--search-mode fast|balanced|coverage] [--no-summary] [--max-wait-ms 120000]
18
+ signaliz company-signals --signal-run-id run_... Read a completed run without duplicate spend
19
19
  signaliz signal-to-copy --company-domain example.com --person-name "Jane Doe" \\
20
20
  --title "VP Sales" --campaign-offer "pipeline intelligence" [--signal-run-id run_...] \\
21
- [--skip-cache] [--deep-search] [--max-wait-ms 1200000]
22
- signaliz signal-to-copy --signal-run-id copy_... Resume with the returned ID only
21
+ [--skip-cache] [--deep-search] [--max-wait-ms 120000]
22
+ signaliz signal-to-copy --signal-run-id copy_... Reuse a completed signal run
23
23
 
24
24
  Access and connection:
25
25
  signaliz auth login
@@ -41,6 +41,8 @@ Common flags:
41
41
  --concurrency <1-50> Simultaneous API requests for batch input (default: 10)
42
42
  --idempotency-key <key> Reuse after an ambiguous response to recover the same request or job
43
43
  --dry-run Return a no-spend plan without provider calls, jobs, or writes
44
+
45
+ Company Signals and Signal to Copy always wait for complete results or terminal errors.
44
46
  `;
45
47
  function loadConfig() {
46
48
  if (!(0, import_node_fs.existsSync)(CONFIG_FILE)) return {};
@@ -85,6 +87,11 @@ function csvFlag(name) {
85
87
  const value = flag(name);
86
88
  return value?.split(",").map((item) => item.trim()).filter(Boolean);
87
89
  }
90
+ function companySignalSearchMode(value) {
91
+ if (value === void 0 || value === null || value === "") return void 0;
92
+ if (value === "fast" || value === "balanced" || value === "coverage") return value;
93
+ fail("--search-mode must be fast, balanced, or coverage");
94
+ }
88
95
  function readBatchInput() {
89
96
  const path = flag("input");
90
97
  if (!path) return null;
@@ -122,6 +129,11 @@ function batchOptions() {
122
129
  compactDuplicates: !hasFlag("expand-duplicates")
123
130
  };
124
131
  }
132
+ function rejectAsyncSignalFlags() {
133
+ if (hasFlag("no-wait") || hasFlag("poll-interval-ms")) {
134
+ fail("Company Signals and Signal to Copy are always synchronous; --no-wait and --poll-interval-ms are not supported.");
135
+ }
136
+ }
125
137
  function batchOutput(value) {
126
138
  if (hasFlag("jsonl")) {
127
139
  for (const result of value.results) {
@@ -350,14 +362,17 @@ async function verifyEmail(args) {
350
362
  `);
351
363
  return;
352
364
  }
353
- process.stdout.write(`${result.email}: ${result.isDeliverable ? "deliverable" : "not deliverable"}
365
+ process.stdout.write(`${result.email}: ${result.verifiedForSending ? "verified for sending" : "not verified for sending"}
354
366
  `);
355
367
  process.stdout.write(`Valid: ${result.isValid}
368
+ Deliverable: ${result.isDeliverable}
356
369
  Catch-all: ${result.isCatchAll}
370
+ Verdict: ${result.verificationVerdict}
357
371
  `);
358
372
  });
359
373
  }
360
374
  async function companySignals() {
375
+ rejectAsyncSignalFlags();
361
376
  const rows = readBatchInput();
362
377
  if (rows) {
363
378
  const requests = rows.map((value) => {
@@ -373,13 +388,12 @@ async function companySignals() {
373
388
  lookbackDays: row.lookbackDays || row.lookback_days || numberFlag("lookback-days"),
374
389
  online,
375
390
  enableDeepSearch: row.enableDeepSearch ?? row.enable_deep_search ?? (online && !hasFlag("shallow")),
391
+ searchMode: companySignalSearchMode(row.searchMode ?? row.search_mode ?? flag("search-mode")),
376
392
  includeSummary: row.includeSummary ?? row.include_summary ?? !hasFlag("no-summary"),
377
393
  enableOutreachIntelligence: row.enableOutreachIntelligence ?? row.enable_outreach_intelligence,
378
394
  enablePredictiveIntelligence: row.enablePredictiveIntelligence ?? row.enable_predictive_intelligence,
379
395
  skipCache: row.skipCache ?? row.skip_cache ?? hasFlag("skip-cache"),
380
- waitForResult: row.waitForResult ?? row.wait_for_result ?? !hasFlag("no-wait"),
381
- maxWaitMs: row.maxWaitMs || row.max_wait_ms || numberFlag("max-wait-ms"),
382
- pollIntervalMs: row.pollIntervalMs || row.poll_interval_ms || numberFlag("poll-interval-ms")
396
+ maxWaitMs: row.maxWaitMs || row.max_wait_ms || numberFlag("max-wait-ms")
383
397
  };
384
398
  });
385
399
  if (hasFlag("dry-run")) {
@@ -405,13 +419,12 @@ async function companySignals() {
405
419
  lookbackDays: numberFlag("lookback-days"),
406
420
  online: !hasFlag("offline"),
407
421
  enableDeepSearch: !hasFlag("offline") && !hasFlag("shallow"),
422
+ searchMode: companySignalSearchMode(flag("search-mode")),
408
423
  includeSummary: !hasFlag("no-summary"),
409
424
  enableOutreachIntelligence: hasFlag("outreach-intelligence") || void 0,
410
425
  enablePredictiveIntelligence: hasFlag("predictive-intelligence") || void 0,
411
426
  skipCache: hasFlag("skip-cache"),
412
- waitForResult: !hasFlag("no-wait"),
413
427
  maxWaitMs: numberFlag("max-wait-ms"),
414
- pollIntervalMs: numberFlag("poll-interval-ms"),
415
428
  idempotencyKey: flag("idempotency-key")
416
429
  };
417
430
  if (hasFlag("dry-run")) {
@@ -431,6 +444,7 @@ Signals: ${result.signalCount}
431
444
  });
432
445
  }
433
446
  async function signalToCopy() {
447
+ rejectAsyncSignalFlags();
434
448
  const rows = readBatchInput();
435
449
  if (rows) {
436
450
  const requests = rows.map((value) => {
@@ -444,9 +458,7 @@ async function signalToCopy() {
444
458
  signalRunId: row.signalRunId || row.signal_run_id,
445
459
  skipCache: row.skipCache ?? row.skip_cache ?? hasFlag("skip-cache"),
446
460
  enableDeepSearch: row.enableDeepSearch ?? row.enable_deep_search ?? hasFlag("deep-search"),
447
- waitForResult: row.waitForResult ?? row.wait_for_result ?? !hasFlag("no-wait"),
448
- maxWaitMs: row.maxWaitMs || row.max_wait_ms || numberFlag("max-wait-ms"),
449
- pollIntervalMs: row.pollIntervalMs || row.poll_interval_ms || numberFlag("poll-interval-ms")
461
+ maxWaitMs: row.maxWaitMs || row.max_wait_ms || numberFlag("max-wait-ms")
450
462
  };
451
463
  });
452
464
  if (hasFlag("dry-run")) {
@@ -476,7 +488,6 @@ async function signalToCopy() {
476
488
  skipCache: hasFlag("skip-cache"),
477
489
  enableDeepSearch: hasFlag("deep-search"),
478
490
  maxWaitMs: numberFlag("max-wait-ms"),
479
- pollIntervalMs: numberFlag("poll-interval-ms"),
480
491
  idempotencyKey: flag("idempotency-key")
481
492
  };
482
493
  if (hasFlag("dry-run")) {
@@ -579,7 +590,7 @@ main().catch((error) => {
579
590
  process.stdout.write(`${stringifyMachineJson({
580
591
  success: false,
581
592
  error: "product_request_failed",
582
- error_code: signalizError?.code || "CLI_ERROR",
593
+ error_code: signalizError?.code || (error instanceof RangeError ? "INPUT_001" : "CLI_ERROR"),
583
594
  message,
584
595
  retry_eligible: signalizError?.isRetryable ?? false,
585
596
  ...signalizError?.retryAfter !== void 0 ? {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signaliz/cli",
3
- "version": "1.0.45",
3
+ "version": "1.0.47",
4
4
  "description": "Signaliz CLI for Find Email, Verify Email, Company Signal Enrichment, and Signal to Copy AI.",
5
5
  "bin": {
6
6
  "signaliz": "dist/bin.js"
@@ -28,7 +28,7 @@
28
28
  "node": ">=18"
29
29
  },
30
30
  "dependencies": {
31
- "@signaliz/sdk": "^1.0.47"
31
+ "@signaliz/sdk": "^1.0.49"
32
32
  },
33
33
  "devDependencies": {
34
34
  "tsup": "^8.0.0",