deepline 0.3.241 → 0.3.243

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.
@@ -200,7 +200,7 @@ export const SDK_RELEASE = {
200
200
  // getters keep their established compatibility behavior.
201
201
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
202
202
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
203
- version: '0.3.241',
203
+ version: '0.3.243',
204
204
  updateSummary:
205
205
  'Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.',
206
206
  packageCapabilities: {
@@ -1,4 +1,4 @@
1
- import { OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS } from '../../shared_libs/integration-contracts/opensosdata/execution-policy.js';
1
+ import { resolveLookupClientTimeoutMs } from '../../shared_libs/integration-contracts/lookup-execution-policy.js';
2
2
  import type { ToolResultBilling } from '../../shared_libs/plays/tool-result-types.js';
3
3
  import { resolveTheirstackClientTimeoutMs } from '../../shared_libs/integration-contracts/theirstack/execution-policy.js';
4
4
  import { resolveWaterfallClientTimeoutMs } from '../../shared_libs/integration-contracts/waterfall/execution-policy.js';
@@ -173,9 +173,8 @@ function resolveToolExecuteTimeoutMs(
173
173
  input: Record<string, unknown>,
174
174
  ): number | undefined {
175
175
  const normalized = toolId.trim().toLowerCase();
176
- if (normalized === 'opensosdata_business_lookup') {
177
- return OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS;
178
- }
176
+ const lookupTimeoutMs = resolveLookupClientTimeoutMs(normalized);
177
+ if (lookupTimeoutMs !== undefined) return lookupTimeoutMs;
179
178
  if (normalized === 'apify_run_actor_sync') {
180
179
  const requestedTimeoutMs = input.timeoutMs ?? APIFY_SYNC_DEFAULT_TIMEOUT_MS;
181
180
  if (
@@ -0,0 +1,21 @@
1
+ import { OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS } from './opensosdata/execution-policy';
2
+
3
+ // Preserve the existing integration HTTP deadline for this single POST. A
4
+ // timeout does not authorize retrying an ambiguous provider outcome.
5
+ export const DROPLEADS_EMAIL_FINDER_REQUEST_TIMEOUT_MS = 120_000;
6
+
7
+ // The client must also allow admission and response/settlement overhead around
8
+ // that provider request. This changes only the SDK wait, not provider execution.
9
+ const DROPLEADS_EMAIL_FINDER_CLIENT_TIMEOUT_MS =
10
+ 60_000 + DROPLEADS_EMAIL_FINDER_REQUEST_TIMEOUT_MS + 15_000;
11
+
12
+ const lookupClientTimeouts: ReadonlyMap<string, number> = new Map([
13
+ ['opensosdata_business_lookup', OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS],
14
+ ['dropleads_email_finder', DROPLEADS_EMAIL_FINDER_CLIENT_TIMEOUT_MS],
15
+ ]);
16
+
17
+ export function resolveLookupClientTimeoutMs(
18
+ toolId: string,
19
+ ): number | undefined {
20
+ return lookupClientTimeouts.get(toolId.trim().toLowerCase());
21
+ }
@@ -952,6 +952,7 @@ function isRetryableAppRuntimeAction(
952
952
  action === 'mark_runtime_step_receipts_queued' ||
953
953
  action === 'complete_runtime_step_receipt' ||
954
954
  action === 'complete_runtime_step_receipts' ||
955
+ action === 'complete_runtime_step_receipts_by_reference' ||
955
956
  action === 'fail_runtime_step_receipt' ||
956
957
  action === 'fail_runtime_step_receipts' ||
957
958
  action === 'rate_state_acquire' ||
@@ -983,6 +984,7 @@ function isRuntimeStepReceiptAction(
983
984
  action === 'mark_runtime_step_receipts_queued' ||
984
985
  action === 'complete_runtime_step_receipt' ||
985
986
  action === 'complete_runtime_step_receipts' ||
987
+ action === 'complete_runtime_step_receipts_by_reference' ||
986
988
  action === 'fail_runtime_step_receipt' ||
987
989
  action === 'fail_runtime_step_receipts' ||
988
990
  action === 'release_runtime_step_receipt' ||
@@ -555,29 +555,28 @@ export const ABSURD_RUNTIME_POOL_MAX_CLIENTS =
555
555
  RUNTIME_SCHEDULER_CONTROL_PLANE_MAX_CLIENTS;
556
556
 
557
557
  /**
558
- * A Vercel invocation has its own module cache and pool. Letting every
559
- * short-lived launch hold the worker-sized cap multiplies the shared
560
- * PgBouncer budget under a burst of webhook deliveries. A launch submits one
561
- * durable transaction at a time, so one checkout preserves correctness while
562
- * the long-lived Fly worker keeps its two-client control-plane budget.
558
+ * Vercel Fluid invocations share a process and its scheduler pool. A single
559
+ * client serializes unrelated launches, reads, and critical lease lookups;
560
+ * one held connection can make every other request hit its acquire timeout.
561
+ * Use the shared two-client control-plane budget so another request can make
562
+ * progress while keeping each instance's PgBouncer footprint bounded.
563
563
  */
564
- export const ABSURD_SERVERLESS_POOL_MAX_CLIENTS = 1;
564
+ export const ABSURD_SERVERLESS_POOL_MAX_CLIENTS =
565
+ RUNTIME_SCHEDULER_CONTROL_PLANE_MAX_CLIENTS;
565
566
 
566
567
  /**
567
- * A Vercel isolate may survive long after its one webhook has returned. Keep
568
- * its single scheduler client only long enough to reuse it for an immediate
569
- * follow-up, then return that scarce PgBouncer client before the source's
570
- * delayed Workpool recovery is due. The worker fleet deliberately keeps the
571
- * ordinary 30-second idle lifetime.
568
+ * A Vercel isolate may survive long after a webhook has returned. Keep its
569
+ * scheduler clients only long enough to reuse them for an immediate follow-up,
570
+ * then return idle PgBouncer clients before the source's delayed Workpool
571
+ * recovery is due. The worker fleet keeps the ordinary 30-second idle lifetime.
572
572
  */
573
573
  export const ABSURD_SERVERLESS_POOL_IDLE_TIMEOUT_MS = 1_000;
574
574
 
575
- // A normal Vercel request submits exactly one Run and must retain the one-client
576
- // ceiling. The private batch adapter is different: Workpool elects one global
577
- // up-to-1,024-source collection before entering this context, so one batch
578
- // request may use the bounded scheduler capacity without multiplying it per
579
- // source request.
580
- // Other one-client Workpool adapters can still overlap during rollout.
575
+ // Ordinary Vercel requests share the bounded control-plane pool above. The
576
+ // private batch adapter is different: Workpool elects one global up-to-1,024-
577
+ // source collection before entering this context, so one batch request may use
578
+ // its larger bounded scheduler capacity without multiplying it per source.
579
+ // Other Workpool adapters can still overlap during rollout.
581
580
  type ServerlessAdmissionPoolContext = {
582
581
  maxClients: number;
583
582
  maxAcquireQueueDepth: number;
@@ -527,6 +527,82 @@ export function isConnectionCategoryError(error: unknown): boolean {
527
527
  return inspect(error);
528
528
  }
529
529
 
530
+ /**
531
+ * HTTP callers must distinguish an unavailable scheduler from a permanent SQL
532
+ * failure. The pool's connection-category classifier is intentionally broader:
533
+ * 08P01 also covers malformed bind/protocol messages, which cannot recover by
534
+ * retrying the same request. Only the known pooler recovery message qualifies.
535
+ */
536
+ export function isRuntimeSchedulerServerUnavailableError(
537
+ error: unknown,
538
+ ): boolean {
539
+ const recoveryMessage =
540
+ /^(?:server login has been failing, cached error: )?the database system is in recovery mode(?: \(server_login_retry\))?$/i;
541
+ const legacyConnectionMessage =
542
+ /pool is saturated|connection terminated|connection reset|ECONNRESET|timeout exceeded when trying to connect|Connection terminated due to connection timeout|database system is shutting down|terminating connection due to administrator command/i;
543
+ const ancestors = new Set<object>();
544
+ const inspect = (candidate: unknown): boolean => {
545
+ if (typeof candidate === 'string') {
546
+ return (
547
+ // node-postgres emits this uncoded error when its query response
548
+ // deadline expires. Preserve the pool's retryable classification after
549
+ // its bounded retries; structured SQL errors still win below.
550
+ candidate.trim() === 'Query read timeout' ||
551
+ recoveryMessage.test(candidate.trim()) ||
552
+ legacyConnectionMessage.test(candidate)
553
+ );
554
+ }
555
+ if (
556
+ !candidate ||
557
+ typeof candidate !== 'object' ||
558
+ ancestors.has(candidate)
559
+ ) {
560
+ return false;
561
+ }
562
+ ancestors.add(candidate);
563
+ try {
564
+ const { code, message, cause } = candidate as {
565
+ code?: unknown;
566
+ message?: unknown;
567
+ cause?: unknown;
568
+ };
569
+ const hasCode = typeof code === 'string' && code.length > 0;
570
+ const legacyConnectionCode =
571
+ (typeof code === 'string' &&
572
+ /^08[0-9A-Z]{3}$/.test(code) &&
573
+ code !== '08P01') ||
574
+ code === 'ECONNREFUSED' ||
575
+ code === 'ETIMEDOUT' ||
576
+ code === 'EPIPE' ||
577
+ code === 'ENOTFOUND';
578
+ const unavailableCode =
579
+ code === 'ECONNRESET' ||
580
+ code === '57P01' ||
581
+ code === '57P02' ||
582
+ code === '57P03' ||
583
+ (code === '08P01' &&
584
+ typeof message === 'string' &&
585
+ recoveryMessage.test(message.trim())) ||
586
+ // Preserve legacy connection messages without accepting every 08* code.
587
+ (legacyConnectionCode &&
588
+ typeof message === 'string' &&
589
+ legacyConnectionMessage.test(message));
590
+ // Structured failures win over a misleading wrapper message or cause.
591
+ if (hasCode && !unavailableCode) return false;
592
+ if (candidate instanceof AggregateError) {
593
+ return candidate.errors.length > 0 && candidate.errors.every(inspect);
594
+ }
595
+ if (unavailableCode) return true;
596
+ if (cause !== undefined && cause !== null) return inspect(cause);
597
+ return typeof message === 'string' && inspect(message);
598
+ } finally {
599
+ // Shared children may occur more than once; only an ancestor is a cycle.
600
+ ancestors.delete(candidate);
601
+ }
602
+ };
603
+ return inspect(error);
604
+ }
605
+
530
606
  /**
531
607
  * These PostgreSQL errors abort only the current transaction. Scheduler
532
608
  * operations already carry stable operation identities, so re-running the
@@ -16289,6 +16289,10 @@ export async function renewPostgresRunLedgerDelivery(
16289
16289
  throw new RunLedgerProjectionLeaseLostError('delivery_lease_not_current');
16290
16290
  }
16291
16291
 
16292
+ // A projection receipt has always admitted at most eight ordered outbox facts.
16293
+ // Share that existing boundary between its SQL snapshot and prefix validation.
16294
+ const RUN_LEDGER_PROJECTION_PREFIX_MAX_FACTS = 8;
16295
+
16292
16296
  /** Only the currently claimed causal prefix may use the projection write path. */
16293
16297
  export async function assertPostgresRunLedgerDelivery(
16294
16298
  client: PostgresSchedulerQueryClient,
@@ -16329,6 +16333,10 @@ export async function assertPostgresRunLedgerDelivery(
16329
16333
  WHERE outbox.run_id = $1 AND runs.org_id = $2
16330
16334
  AND outbox.delivered_at IS NULL
16331
16335
  ORDER BY ${runLedgerOrderSql('outbox')}
16336
+ -- Later producer facts cannot belong to this receipt. Do not hydrate their
16337
+ -- payloads while proving the current causal prefix; the next lease proves
16338
+ -- their own delivery without changing the drain's convergence behavior.
16339
+ LIMIT ${RUN_LEDGER_PROJECTION_PREFIX_MAX_FACTS}
16332
16340
  `,
16333
16341
  [input.runId, input.orgId],
16334
16342
  );
@@ -16461,7 +16469,7 @@ export async function assertPostgresRunLedgerDelivery(
16461
16469
  ) {
16462
16470
  break;
16463
16471
  }
16464
- if (terminal || prefix.length >= 8) {
16472
+ if (terminal || prefix.length >= RUN_LEDGER_PROJECTION_PREFIX_MAX_FACTS) {
16465
16473
  break;
16466
16474
  }
16467
16475
  }
@@ -17685,7 +17693,7 @@ export async function dispatchRunLedgerOutboxToLedgerThroughEventWithClientScope
17685
17693
  input.maxEvents === undefined
17686
17694
  ? null
17687
17695
  : Math.max(1, Math.min(32, input.maxEvents));
17688
- const batchSize = 8;
17696
+ const batchSize = RUN_LEDGER_PROJECTION_PREFIX_MAX_FACTS;
17689
17697
  const eventIds: string[] = [];
17690
17698
  const failedEventIds: string[] = [];
17691
17699
  const retryingEventIds: string[] = [];
package/dist/cli/index.js CHANGED
@@ -3007,6 +3007,17 @@ var OPENSOSDATA_POLL_INTERVAL_MS = 3e3;
3007
3007
  var OPENSOSDATA_POLL_TIMEOUT_MS = 9e4;
3008
3008
  var OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS = 6e4 + OPENSOSDATA_LOOKUP_REQUEST_TIMEOUT_MS + OPENSOSDATA_POLL_TIMEOUT_MS + OPENSOSDATA_POLL_INTERVAL_MS + OPENSOSDATA_LOOKUP_REQUEST_TIMEOUT_MS + 15e3;
3009
3009
 
3010
+ // ../integration-contracts/lookup-execution-policy.ts
3011
+ var DROPLEADS_EMAIL_FINDER_REQUEST_TIMEOUT_MS = 12e4;
3012
+ var DROPLEADS_EMAIL_FINDER_CLIENT_TIMEOUT_MS = 6e4 + DROPLEADS_EMAIL_FINDER_REQUEST_TIMEOUT_MS + 15e3;
3013
+ var lookupClientTimeouts = /* @__PURE__ */ new Map([
3014
+ ["opensosdata_business_lookup", OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS],
3015
+ ["dropleads_email_finder", DROPLEADS_EMAIL_FINDER_CLIENT_TIMEOUT_MS]
3016
+ ]);
3017
+ function resolveLookupClientTimeoutMs(toolId) {
3018
+ return lookupClientTimeouts.get(toolId.trim().toLowerCase());
3019
+ }
3020
+
3010
3021
  // ../integration-contracts/theirstack/execution-policy.ts
3011
3022
  var THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS = 135e3;
3012
3023
  var THEIRSTACK_SLOW_JOB_SEARCH_CLIENT_TIMEOUT_MS = 6e4 + THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS + 15e3;
@@ -3157,9 +3168,8 @@ var APIFY_SYNC_DEFAULT_TIMEOUT_MS = 3e5;
3157
3168
  var APIFY_SYNC_RESPONSE_GRACE_MS = 9e4;
3158
3169
  function resolveToolExecuteTimeoutMs(toolId, input2) {
3159
3170
  const normalized = toolId.trim().toLowerCase();
3160
- if (normalized === "opensosdata_business_lookup") {
3161
- return OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS;
3162
- }
3171
+ const lookupTimeoutMs = resolveLookupClientTimeoutMs(normalized);
3172
+ if (lookupTimeoutMs !== void 0) return lookupTimeoutMs;
3163
3173
  if (normalized === "apify_run_actor_sync") {
3164
3174
  const requestedTimeoutMs = input2.timeoutMs ?? APIFY_SYNC_DEFAULT_TIMEOUT_MS;
3165
3175
  if (typeof requestedTimeoutMs === "number" && Number.isFinite(requestedTimeoutMs) && requestedTimeoutMs > 0) {
@@ -3463,7 +3473,7 @@ var SDK_RELEASE = {
3463
3473
  // getters keep their established compatibility behavior.
3464
3474
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
3465
3475
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
3466
- version: "0.3.241",
3476
+ version: "0.3.243",
3467
3477
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
3468
3478
  packageCapabilities: {
3469
3479
  updatePreferences: 1
@@ -3002,6 +3002,17 @@ var OPENSOSDATA_POLL_INTERVAL_MS = 3e3;
3002
3002
  var OPENSOSDATA_POLL_TIMEOUT_MS = 9e4;
3003
3003
  var OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS = 6e4 + OPENSOSDATA_LOOKUP_REQUEST_TIMEOUT_MS + OPENSOSDATA_POLL_TIMEOUT_MS + OPENSOSDATA_POLL_INTERVAL_MS + OPENSOSDATA_LOOKUP_REQUEST_TIMEOUT_MS + 15e3;
3004
3004
 
3005
+ // ../integration-contracts/lookup-execution-policy.ts
3006
+ var DROPLEADS_EMAIL_FINDER_REQUEST_TIMEOUT_MS = 12e4;
3007
+ var DROPLEADS_EMAIL_FINDER_CLIENT_TIMEOUT_MS = 6e4 + DROPLEADS_EMAIL_FINDER_REQUEST_TIMEOUT_MS + 15e3;
3008
+ var lookupClientTimeouts = /* @__PURE__ */ new Map([
3009
+ ["opensosdata_business_lookup", OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS],
3010
+ ["dropleads_email_finder", DROPLEADS_EMAIL_FINDER_CLIENT_TIMEOUT_MS]
3011
+ ]);
3012
+ function resolveLookupClientTimeoutMs(toolId) {
3013
+ return lookupClientTimeouts.get(toolId.trim().toLowerCase());
3014
+ }
3015
+
3005
3016
  // ../integration-contracts/theirstack/execution-policy.ts
3006
3017
  var THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS = 135e3;
3007
3018
  var THEIRSTACK_SLOW_JOB_SEARCH_CLIENT_TIMEOUT_MS = 6e4 + THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS + 15e3;
@@ -3152,9 +3163,8 @@ var APIFY_SYNC_DEFAULT_TIMEOUT_MS = 3e5;
3152
3163
  var APIFY_SYNC_RESPONSE_GRACE_MS = 9e4;
3153
3164
  function resolveToolExecuteTimeoutMs(toolId, input2) {
3154
3165
  const normalized = toolId.trim().toLowerCase();
3155
- if (normalized === "opensosdata_business_lookup") {
3156
- return OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS;
3157
- }
3166
+ const lookupTimeoutMs = resolveLookupClientTimeoutMs(normalized);
3167
+ if (lookupTimeoutMs !== void 0) return lookupTimeoutMs;
3158
3168
  if (normalized === "apify_run_actor_sync") {
3159
3169
  const requestedTimeoutMs = input2.timeoutMs ?? APIFY_SYNC_DEFAULT_TIMEOUT_MS;
3160
3170
  if (typeof requestedTimeoutMs === "number" && Number.isFinite(requestedTimeoutMs) && requestedTimeoutMs > 0) {
@@ -3458,7 +3468,7 @@ var SDK_RELEASE = {
3458
3468
  // getters keep their established compatibility behavior.
3459
3469
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
3460
3470
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
3461
- version: "0.3.241",
3471
+ version: "0.3.243",
3462
3472
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
3463
3473
  packageCapabilities: {
3464
3474
  updatePreferences: 1
package/dist/index.js CHANGED
@@ -820,6 +820,17 @@ var OPENSOSDATA_POLL_INTERVAL_MS = 3e3;
820
820
  var OPENSOSDATA_POLL_TIMEOUT_MS = 9e4;
821
821
  var OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS = 6e4 + OPENSOSDATA_LOOKUP_REQUEST_TIMEOUT_MS + OPENSOSDATA_POLL_TIMEOUT_MS + OPENSOSDATA_POLL_INTERVAL_MS + OPENSOSDATA_LOOKUP_REQUEST_TIMEOUT_MS + 15e3;
822
822
 
823
+ // ../integration-contracts/lookup-execution-policy.ts
824
+ var DROPLEADS_EMAIL_FINDER_REQUEST_TIMEOUT_MS = 12e4;
825
+ var DROPLEADS_EMAIL_FINDER_CLIENT_TIMEOUT_MS = 6e4 + DROPLEADS_EMAIL_FINDER_REQUEST_TIMEOUT_MS + 15e3;
826
+ var lookupClientTimeouts = /* @__PURE__ */ new Map([
827
+ ["opensosdata_business_lookup", OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS],
828
+ ["dropleads_email_finder", DROPLEADS_EMAIL_FINDER_CLIENT_TIMEOUT_MS]
829
+ ]);
830
+ function resolveLookupClientTimeoutMs(toolId) {
831
+ return lookupClientTimeouts.get(toolId.trim().toLowerCase());
832
+ }
833
+
823
834
  // ../integration-contracts/theirstack/execution-policy.ts
824
835
  var THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS = 135e3;
825
836
  var THEIRSTACK_SLOW_JOB_SEARCH_CLIENT_TIMEOUT_MS = 6e4 + THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS + 15e3;
@@ -970,9 +981,8 @@ var APIFY_SYNC_DEFAULT_TIMEOUT_MS = 3e5;
970
981
  var APIFY_SYNC_RESPONSE_GRACE_MS = 9e4;
971
982
  function resolveToolExecuteTimeoutMs(toolId, input) {
972
983
  const normalized = toolId.trim().toLowerCase();
973
- if (normalized === "opensosdata_business_lookup") {
974
- return OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS;
975
- }
984
+ const lookupTimeoutMs = resolveLookupClientTimeoutMs(normalized);
985
+ if (lookupTimeoutMs !== void 0) return lookupTimeoutMs;
976
986
  if (normalized === "apify_run_actor_sync") {
977
987
  const requestedTimeoutMs = input.timeoutMs ?? APIFY_SYNC_DEFAULT_TIMEOUT_MS;
978
988
  if (typeof requestedTimeoutMs === "number" && Number.isFinite(requestedTimeoutMs) && requestedTimeoutMs > 0) {
@@ -1276,7 +1286,7 @@ var SDK_RELEASE = {
1276
1286
  // getters keep their established compatibility behavior.
1277
1287
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
1278
1288
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
1279
- version: "0.3.241",
1289
+ version: "0.3.243",
1280
1290
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
1281
1291
  packageCapabilities: {
1282
1292
  updatePreferences: 1
package/dist/index.mjs CHANGED
@@ -724,6 +724,17 @@ var OPENSOSDATA_POLL_INTERVAL_MS = 3e3;
724
724
  var OPENSOSDATA_POLL_TIMEOUT_MS = 9e4;
725
725
  var OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS = 6e4 + OPENSOSDATA_LOOKUP_REQUEST_TIMEOUT_MS + OPENSOSDATA_POLL_TIMEOUT_MS + OPENSOSDATA_POLL_INTERVAL_MS + OPENSOSDATA_LOOKUP_REQUEST_TIMEOUT_MS + 15e3;
726
726
 
727
+ // ../integration-contracts/lookup-execution-policy.ts
728
+ var DROPLEADS_EMAIL_FINDER_REQUEST_TIMEOUT_MS = 12e4;
729
+ var DROPLEADS_EMAIL_FINDER_CLIENT_TIMEOUT_MS = 6e4 + DROPLEADS_EMAIL_FINDER_REQUEST_TIMEOUT_MS + 15e3;
730
+ var lookupClientTimeouts = /* @__PURE__ */ new Map([
731
+ ["opensosdata_business_lookup", OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS],
732
+ ["dropleads_email_finder", DROPLEADS_EMAIL_FINDER_CLIENT_TIMEOUT_MS]
733
+ ]);
734
+ function resolveLookupClientTimeoutMs(toolId) {
735
+ return lookupClientTimeouts.get(toolId.trim().toLowerCase());
736
+ }
737
+
727
738
  // ../integration-contracts/theirstack/execution-policy.ts
728
739
  var THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS = 135e3;
729
740
  var THEIRSTACK_SLOW_JOB_SEARCH_CLIENT_TIMEOUT_MS = 6e4 + THEIRSTACK_SLOW_JOB_SEARCH_PROVIDER_TIMEOUT_MS + 15e3;
@@ -874,9 +885,8 @@ var APIFY_SYNC_DEFAULT_TIMEOUT_MS = 3e5;
874
885
  var APIFY_SYNC_RESPONSE_GRACE_MS = 9e4;
875
886
  function resolveToolExecuteTimeoutMs(toolId, input) {
876
887
  const normalized = toolId.trim().toLowerCase();
877
- if (normalized === "opensosdata_business_lookup") {
878
- return OPENSOSDATA_LOOKUP_CLIENT_TIMEOUT_MS;
879
- }
888
+ const lookupTimeoutMs = resolveLookupClientTimeoutMs(normalized);
889
+ if (lookupTimeoutMs !== void 0) return lookupTimeoutMs;
880
890
  if (normalized === "apify_run_actor_sync") {
881
891
  const requestedTimeoutMs = input.timeoutMs ?? APIFY_SYNC_DEFAULT_TIMEOUT_MS;
882
892
  if (typeof requestedTimeoutMs === "number" && Number.isFinite(requestedTimeoutMs) && requestedTimeoutMs > 0) {
@@ -1180,7 +1190,7 @@ var SDK_RELEASE = {
1180
1190
  // getters keep their established compatibility behavior.
1181
1191
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
1182
1192
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
1183
- version: "0.3.241",
1193
+ version: "0.3.243",
1184
1194
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
1185
1195
  packageCapabilities: {
1186
1196
  updatePreferences: 1
@@ -31,6 +31,7 @@
31
31
  "dist/bundling-sources/shared_libs/integration-contracts/AGENTS.md",
32
32
  "dist/bundling-sources/shared_libs/integration-contracts/bettercontact/execution-policy.ts",
33
33
  "dist/bundling-sources/shared_libs/integration-contracts/index.ts",
34
+ "dist/bundling-sources/shared_libs/integration-contracts/lookup-execution-policy.ts",
34
35
  "dist/bundling-sources/shared_libs/integration-contracts/monitor-fleet-contract.ts",
35
36
  "dist/bundling-sources/shared_libs/integration-contracts/monitor-input-contract.ts",
36
37
  "dist/bundling-sources/shared_libs/integration-contracts/opensosdata/execution-policy.ts",
@@ -149,7 +149,7 @@ type SdkRelease = {
149
149
  supportPolicy: SdkSupportPolicy;
150
150
  };
151
151
  declare const SDK_RELEASE: {
152
- readonly version: "0.3.241";
152
+ readonly version: "0.3.243";
153
153
  readonly updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.";
154
154
  readonly packageCapabilities: {
155
155
  readonly updatePreferences: 1;
package/dist/release.d.ts CHANGED
@@ -149,7 +149,7 @@ type SdkRelease = {
149
149
  supportPolicy: SdkSupportPolicy;
150
150
  };
151
151
  declare const SDK_RELEASE: {
152
- readonly version: "0.3.241";
152
+ readonly version: "0.3.243";
153
153
  readonly updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.";
154
154
  readonly packageCapabilities: {
155
155
  readonly updatePreferences: 1;
package/dist/release.js CHANGED
@@ -74,7 +74,7 @@ var SDK_RELEASE = {
74
74
  // getters keep their established compatibility behavior.
75
75
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
76
76
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
77
- version: "0.3.241",
77
+ version: "0.3.243",
78
78
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
79
79
  packageCapabilities: {
80
80
  updatePreferences: 1
package/dist/release.mjs CHANGED
@@ -48,7 +48,7 @@ var SDK_RELEASE = {
48
48
  // getters keep their established compatibility behavior.
49
49
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
50
50
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
51
- version: "0.3.241",
51
+ version: "0.3.243",
52
52
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
53
53
  packageCapabilities: {
54
54
  updatePreferences: 1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepline",
3
- "version": "0.3.241",
3
+ "version": "0.3.243",
4
4
  "description": "GTM data CLI and TypeScript SDK for coding agents",
5
5
  "license": "MIT",
6
6
  "homepage": "https://code.deepline.com",