@signaliz/cli 1.0.58 → 1.0.61
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.
- package/README.md +7 -4
- package/dist/bin.js +38 -14
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -115,7 +115,8 @@ REST, MCP, SDK, and CLI recovery. The four row-oriented core products use one
|
|
|
115
115
|
recoverable REST job for inputs larger than 25; the CLI waits by default or
|
|
116
116
|
returns `job_id`, `idempotency_key`, and an exact resume command with
|
|
117
117
|
`--no-wait`. Find Email, Verify Email, and Company Signal Enrichment use 25-row
|
|
118
|
-
pages; Signal to Copy uses 100-row pages.
|
|
118
|
+
pages; Signal to Copy uses 100-row pages. Large Find Email and Verify Email
|
|
119
|
+
batches honor `--max-wait-ms` and `--poll-interval-ms`. Durable Signal to Copy jobs use
|
|
119
120
|
persisted, eligible company-signal data only and never start live providers or
|
|
120
121
|
deep research. Large Copy inputs with fresh, deep, skip-cache, per-row
|
|
121
122
|
idempotency, or synchronous-only controls fail locally before HTTP; split those
|
|
@@ -127,9 +128,11 @@ diagnostics; use `--include-candidate-evidence` only with batches of at most 25.
|
|
|
127
128
|
Every command uses the authenticated workspace. Find Email and Verify Email
|
|
128
129
|
honor that workspace's configured cache window; eligible hits cost 0 credits,
|
|
129
130
|
while fresh discovery or verification is charged on every plan. Builder, Team,
|
|
130
|
-
Agency, and Pay-As-You-Go include fresh Company Signals and
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
Agency, and Pay-As-You-Go include fresh Company Signals. Team and Agency also
|
|
132
|
+
include Unlimited Signal to Copy AI; Signal to Copy remains callable on other
|
|
133
|
+
plans under the standard product contract. These plans still check eligible
|
|
134
|
+
workspace signal data first even when Company Signals is set to No cache.
|
|
135
|
+
`--lookback-days` remains a hard evidence-age bound for both
|
|
133
136
|
cached and fresh Company Signals and Signal to Copy results.
|
|
134
137
|
|
|
135
138
|
Signals Everything is a query-first company discovery command rather than a
|
package/dist/bin.js
CHANGED
|
@@ -95,6 +95,12 @@ function numberFlag(name) {
|
|
|
95
95
|
if (!Number.isFinite(parsed)) fail(`--${name} must be a number`);
|
|
96
96
|
return parsed;
|
|
97
97
|
}
|
|
98
|
+
function requireIntegerInRange(value, name, minimum, maximum) {
|
|
99
|
+
if (value === void 0) return;
|
|
100
|
+
if (!Number.isInteger(value) || value < minimum || value > maximum) {
|
|
101
|
+
throw new RangeError(`${name} must be an integer between ${minimum} and ${maximum}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
98
104
|
function csvFlag(name) {
|
|
99
105
|
const value = flag(name);
|
|
100
106
|
return value?.split(",").map((item) => item.trim()).filter(Boolean);
|
|
@@ -491,9 +497,9 @@ function normalizeSignalsEverythingResult(request, value) {
|
|
|
491
497
|
source: stringValue(item.source)
|
|
492
498
|
};
|
|
493
499
|
}).filter((item) => Boolean(item.url)) : [];
|
|
494
|
-
const eventDate = stringValue(signal.event_date || signal.date)
|
|
495
|
-
const sourceUrl = stringValue(signal.source_url || signal.url)
|
|
496
|
-
if (!eventDate || !sourceUrl || !evidence.some((item) =>
|
|
500
|
+
const eventDate = stringValue(signal.event_date || signal.date);
|
|
501
|
+
const sourceUrl = stringValue(signal.source_url || signal.url);
|
|
502
|
+
if (!eventDate || !sourceUrl || !evidence.some((item) => item.url === sourceUrl && item.publishedAt === eventDate)) {
|
|
497
503
|
throw new Error("Signals Everything response violated the dated-evidence and source-URL contract.");
|
|
498
504
|
}
|
|
499
505
|
return {
|
|
@@ -516,6 +522,7 @@ function normalizeSignalsEverythingResult(request, value) {
|
|
|
516
522
|
const status = statuses.has(statusValue) ? statusValue : signals2.length > 0 ? "completed" : "failed";
|
|
517
523
|
const guardrail = record(value.cost_guardrail);
|
|
518
524
|
const maxCost = numberValue(guardrail.max_cost_per_qualified_signal_usd);
|
|
525
|
+
const costSource = stringValue(guardrail.cost_source);
|
|
519
526
|
const identityCostSource = stringValue(guardrail.identity_cost_source);
|
|
520
527
|
const warnings = Array.isArray(value.warnings) ? value.warnings.filter((warning) => typeof warning === "string") : void 0;
|
|
521
528
|
return {
|
|
@@ -533,6 +540,13 @@ function normalizeSignalsEverythingResult(request, value) {
|
|
|
533
540
|
...maxCost === void 0 ? {} : {
|
|
534
541
|
costGuardrail: {
|
|
535
542
|
maxCostPerQualifiedSignalUsd: maxCost,
|
|
543
|
+
projectedSourceCostUsd: nullableNumberValue(guardrail.projected_source_cost_usd),
|
|
544
|
+
maxSourceCostUsd: nullableNumberValue(guardrail.max_source_cost_usd),
|
|
545
|
+
projectedCostPerRequestedCompanySignalUsd: nullableNumberValue(
|
|
546
|
+
guardrail.projected_cost_per_requested_company_signal_usd
|
|
547
|
+
),
|
|
548
|
+
sourceCostUsd: nullableNumberValue(guardrail.source_cost_usd),
|
|
549
|
+
costSource: ["observed", "catalog_preflight", "catalog_bounded", "mixed", "unavailable"].includes(costSource) ? costSource : void 0,
|
|
536
550
|
costPerQualifiedSignalUsd: nullableNumberValue(guardrail.cost_per_qualified_signal_usd),
|
|
537
551
|
identityResolutionCostUsd: nullableNumberValue(guardrail.identity_resolution_cost_usd),
|
|
538
552
|
identityCostSource: [
|
|
@@ -541,7 +555,13 @@ function normalizeSignalsEverythingResult(request, value) {
|
|
|
541
555
|
"not_used",
|
|
542
556
|
"unavailable"
|
|
543
557
|
].includes(identityCostSource) ? identityCostSource : void 0,
|
|
544
|
-
identityProviderRequests: numberValue(guardrail.identity_provider_requests)
|
|
558
|
+
identityProviderRequests: numberValue(guardrail.identity_provider_requests),
|
|
559
|
+
qualifiedCompanySignalCount: numberValue(guardrail.qualified_company_signal_count),
|
|
560
|
+
returnedCompanySignalCount: numberValue(guardrail.returned_company_signal_count),
|
|
561
|
+
availableCompanySignalCount: numberValue(guardrail.available_company_signal_count),
|
|
562
|
+
acquisitionCandidateLimit: numberValue(guardrail.acquisition_candidate_limit),
|
|
563
|
+
minimumQualifiedCompanySignals: numberValue(guardrail.minimum_qualified_company_signals),
|
|
564
|
+
withinLimit: guardrail.within_limit === true
|
|
545
565
|
}
|
|
546
566
|
},
|
|
547
567
|
...warnings?.length ? { warnings } : {},
|
|
@@ -693,8 +713,7 @@ async function findEmail() {
|
|
|
693
713
|
"linkedin-url",
|
|
694
714
|
"company-name",
|
|
695
715
|
"run-id",
|
|
696
|
-
"skip-cache"
|
|
697
|
-
"idempotency-key"
|
|
716
|
+
"skip-cache"
|
|
698
717
|
].filter(hasFlag);
|
|
699
718
|
if (conflicts.length > 0) {
|
|
700
719
|
fail(`Find Email --job-id cannot be combined with ${conflicts.map((name) => `--${name}`).join(", ")}.`);
|
|
@@ -703,7 +722,8 @@ async function findEmail() {
|
|
|
703
722
|
pageSize: numberFlag("page-size"),
|
|
704
723
|
maxWaitMs: numberFlag("max-wait-ms"),
|
|
705
724
|
pollIntervalMs: numberFlag("poll-interval-ms"),
|
|
706
|
-
compactDuplicates: !hasFlag("expand-duplicates")
|
|
725
|
+
compactDuplicates: !hasFlag("expand-duplicates"),
|
|
726
|
+
idempotencyKey: flag("idempotency-key")
|
|
707
727
|
});
|
|
708
728
|
batchOutput(customerEmailBatch(result2, "find"));
|
|
709
729
|
return;
|
|
@@ -792,7 +812,6 @@ async function verifyEmail(args) {
|
|
|
792
812
|
"email",
|
|
793
813
|
"verification-run-id",
|
|
794
814
|
"skip-cache",
|
|
795
|
-
"idempotency-key",
|
|
796
815
|
"no-wait"
|
|
797
816
|
].filter(hasFlag);
|
|
798
817
|
if (positionalEmail || conflicts.length > 0) {
|
|
@@ -806,7 +825,8 @@ async function verifyEmail(args) {
|
|
|
806
825
|
pageSize: numberFlag("page-size"),
|
|
807
826
|
maxWaitMs: numberFlag("max-wait-ms"),
|
|
808
827
|
pollIntervalMs: numberFlag("poll-interval-ms"),
|
|
809
|
-
compactDuplicates: !hasFlag("expand-duplicates")
|
|
828
|
+
compactDuplicates: !hasFlag("expand-duplicates"),
|
|
829
|
+
idempotencyKey: flag("idempotency-key")
|
|
810
830
|
});
|
|
811
831
|
batchOutput(customerEmailBatch(result2, "verify"));
|
|
812
832
|
return;
|
|
@@ -937,8 +957,8 @@ async function companySignals() {
|
|
|
937
957
|
companyName: row.companyName || row.company_name || row.name,
|
|
938
958
|
researchPrompt: row.researchPrompt || row.research_prompt || flag("research-prompt") || flag("prompt"),
|
|
939
959
|
signalTypes: row.signalTypes || row.signal_types || csvFlag("signal-types"),
|
|
940
|
-
targetSignalCount: row.targetSignalCount
|
|
941
|
-
lookbackDays: row.lookbackDays
|
|
960
|
+
targetSignalCount: row.targetSignalCount ?? row.target_signal_count ?? numberFlag("target-signal-count"),
|
|
961
|
+
lookbackDays: row.lookbackDays ?? row.lookback_days ?? numberFlag("lookback-days"),
|
|
942
962
|
online,
|
|
943
963
|
enableDeepSearch: row.enableDeepSearch ?? row.enable_deep_search ?? (online && !hasFlag("shallow")),
|
|
944
964
|
searchMode: companySignalSearchMode(row.searchMode ?? row.search_mode ?? flag("search-mode")),
|
|
@@ -947,10 +967,14 @@ async function companySignals() {
|
|
|
947
967
|
enablePredictiveIntelligence: row.enablePredictiveIntelligence ?? row.enable_predictive_intelligence,
|
|
948
968
|
skipCache: row.skipCache ?? row.skip_cache ?? hasFlag("skip-cache"),
|
|
949
969
|
includeCandidateEvidence: row.includeCandidateEvidence ?? row.include_candidate_evidence ?? hasFlag("include-candidate-evidence"),
|
|
950
|
-
maxWaitMs: row.maxWaitMs
|
|
970
|
+
maxWaitMs: row.maxWaitMs ?? row.max_wait_ms ?? (durableBatch ? void 0 : numberFlag("max-wait-ms")),
|
|
951
971
|
idempotencyKey: row.idempotencyKey || row.idempotency_key
|
|
952
972
|
};
|
|
953
973
|
});
|
|
974
|
+
for (const request2 of requests) {
|
|
975
|
+
requireIntegerInRange(request2.targetSignalCount, "targetSignalCount", 1, 15);
|
|
976
|
+
requireIntegerInRange(request2.lookbackDays, "lookbackDays", 1, 365);
|
|
977
|
+
}
|
|
954
978
|
if (hasFlag("dry-run")) {
|
|
955
979
|
if (hasFlag("no-wait")) fail("Company Signals --no-wait cannot be combined with --dry-run.");
|
|
956
980
|
const result3 = await createClient().enrichCompanies(requests, { ...batchOptions(), dryRun: true });
|
|
@@ -1181,11 +1205,11 @@ async function signalToCopy() {
|
|
|
1181
1205
|
title: row.title,
|
|
1182
1206
|
campaignOffer: row.campaignOffer || row.campaign_offer || row.offer,
|
|
1183
1207
|
researchPrompt: row.researchPrompt || row.research_prompt || flag("research-prompt") || flag("prompt"),
|
|
1184
|
-
lookbackDays: row.lookbackDays
|
|
1208
|
+
lookbackDays: row.lookbackDays ?? row.lookback_days ?? numberFlag("lookback-days"),
|
|
1185
1209
|
signalRunId: row.signalRunId || row.signal_run_id,
|
|
1186
1210
|
skipCache: row.skipCache ?? row.skip_cache ?? hasFlag("skip-cache"),
|
|
1187
1211
|
enableDeepSearch: row.enableDeepSearch ?? row.enable_deep_search ?? hasFlag("deep-search"),
|
|
1188
|
-
maxWaitMs: row.maxWaitMs
|
|
1212
|
+
maxWaitMs: row.maxWaitMs ?? row.max_wait_ms ?? (durableBatch ? void 0 : numberFlag("max-wait-ms")),
|
|
1189
1213
|
idempotencyKey: row.idempotencyKey || row.idempotency_key
|
|
1190
1214
|
};
|
|
1191
1215
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signaliz/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.61",
|
|
4
4
|
"description": "Signaliz CLI for Signals Everything, Find Email, Verify Email, Company Signal Enrichment, and Signal to Copy AI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"signaliz": "dist/bin.js"
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"node": ">=18"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@signaliz/sdk": "^1.0.
|
|
32
|
+
"@signaliz/sdk": "^1.0.63"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"tsup": "^8.0.0",
|