@oneshot-agent/sdk 0.51.0 → 0.53.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.
package/dist/types.d.ts CHANGED
@@ -238,7 +238,7 @@ export interface ToolOptions {
238
238
  * `waitForPhones: true` to keep polling at a slower cadence (every 5s)
239
239
  * until phones land or `phoneTimeoutSec` expires (default 360s = 6 min).
240
240
  * Only meaningful for tools whose upstream enrichment supports async
241
- * phone reveals (research/person, enrich/profile, …). For other tools
241
+ * phone reveals (person-dossier, person-profile, …). For other tools
242
242
  * the flag is a no-op.
243
243
  */
244
244
  waitForPhones?: boolean;
@@ -250,8 +250,8 @@ export interface ToolOptions {
250
250
  * idempotency. Those endpoints reject a conflicting body with 422.
251
251
  * Access-token enrichment requests do not receive replay or conflict
252
252
  * checks. Replay window and requirement differ by endpoint: email.send
253
- * is optional with a 24h cached-response replay window; enrichProfile /
254
- * findEmail / verifyEmail are honored when durable enrichment is enabled
253
+ * is optional with a 24h cached-response replay window; personProfile /
254
+ * personEmail / personEmailStatus are honored when durable enrichment is enabled
255
255
  * on the server AND the session authenticates with a wallet, not an
256
256
  * `accessToken` — an access-token session skips the durable-replay check
257
257
  * on these three routes entirely and always dispatches a fresh job, even
@@ -323,7 +323,9 @@ export interface ResearchToolOptions extends ToolOptions {
323
323
  topic: string;
324
324
  depth?: 'deep' | 'quick';
325
325
  }
326
- export interface PeopleSearchOptions extends ToolOptions {
326
+ export interface PersonFindOptions extends ToolOptions {
327
+ /** Off by default. Adds $0.10 × requested limit (default 100 → $10) for up to that many people; no phone hit guaranteed. */
328
+ includePhone?: boolean;
327
329
  job_titles?: string[];
328
330
  keywords?: string[];
329
331
  companies?: string[];
@@ -350,13 +352,15 @@ export interface PeopleSearchOptions extends ToolOptions {
350
352
  * regardless of which provider answers the search. */
351
353
  offset?: number;
352
354
  }
353
- export interface EnrichProfileOptions extends ToolOptions {
355
+ export interface PersonProfileOptions extends ToolOptions {
356
+ /** Off by default. Adds $0.10 for up to one person; no phone hit guaranteed. */
357
+ includePhone?: boolean;
354
358
  linkedin_url?: string;
355
359
  email?: string;
356
360
  name?: string;
357
361
  company_domain?: string;
358
362
  }
359
- export interface CompanySearchOptions extends ToolOptions {
363
+ export interface CompanyFindOptions extends ToolOptions {
360
364
  name?: string;
361
365
  domain?: string;
362
366
  industry?: string[];
@@ -368,38 +372,40 @@ export interface CompanySearchOptions extends ToolOptions {
368
372
  tags?: string[];
369
373
  limit?: number;
370
374
  }
371
- export interface EnrichCompanyOptions extends ToolOptions {
375
+ export interface CompanyProfileOptions extends ToolOptions {
372
376
  domain?: string;
373
377
  name?: string;
374
378
  linkedin_url?: string;
375
379
  ticker?: string;
376
380
  }
377
- export interface FindEmailOptions extends ToolOptions {
381
+ export interface PersonEmailOptions extends ToolOptions {
378
382
  full_name?: string;
379
383
  first_name?: string;
380
384
  last_name?: string;
381
385
  company_domain: string;
382
386
  }
383
- export interface VerifyEmailOptions extends ToolOptions {
387
+ export interface PersonEmailStatusOptions extends ToolOptions {
384
388
  email: string;
385
389
  }
386
- export interface DeepResearchPersonOptions extends ToolOptions {
390
+ export interface PersonDossierOptions extends ToolOptions {
391
+ /** Off by default. Adds $0.10 for up to one person; no phone hit guaranteed. */
392
+ includePhone?: boolean;
387
393
  email?: string;
388
394
  social_media_url?: string;
389
395
  name?: string;
390
396
  company?: string;
391
397
  }
392
- export interface SocialProfilesOptions extends ToolOptions {
398
+ export interface PersonSocialAccountsOptions extends ToolOptions {
393
399
  email?: string;
394
400
  social_media_url?: string;
395
401
  }
396
- export interface ArticleSearchOptions extends ToolOptions {
402
+ export interface PersonArticlesOptions extends ToolOptions {
397
403
  name: string;
398
404
  company: string;
399
405
  sort?: 'recent' | 'popular';
400
406
  limit?: number;
401
407
  }
402
- export interface PersonNewsfeedOptions extends ToolOptions {
408
+ export interface PersonPostsOptions extends ToolOptions {
403
409
  social_media_url: string;
404
410
  }
405
411
  export interface PersonInterestsOptions extends ToolOptions {
@@ -407,7 +413,7 @@ export interface PersonInterestsOptions extends ToolOptions {
407
413
  phone?: string;
408
414
  social_media_url?: string;
409
415
  }
410
- export interface PersonInteractionsOptions extends ToolOptions {
416
+ export interface PersonFollowersOptions extends ToolOptions {
411
417
  social_media_url: string;
412
418
  type?: 'replies' | 'followers' | 'following' | 'followers,following';
413
419
  max_results?: number;
@@ -435,7 +441,7 @@ export interface CommerceBuyOptions extends ToolOptions {
435
441
  quantity?: number;
436
442
  variant_id?: string;
437
443
  }
438
- export interface CommerceSearchOptions extends ToolOptions {
444
+ export interface ProductFindOptions extends ToolOptions {
439
445
  query: string;
440
446
  limit?: number;
441
447
  }
@@ -521,19 +527,24 @@ export interface Education {
521
527
  start_date?: string;
522
528
  end_date?: string;
523
529
  }
530
+ /**
531
+ * A normalized person record. The worker returns every scalar field below and
532
+ * uses `null`, not a missing key, for a value the provider did not have; the
533
+ * declared person_dossier schema requires exactly that shape (#1789).
534
+ */
524
535
  export interface PersonResult {
525
536
  company_address?: BusinessAddress | null;
526
- full_name?: string;
527
- first_name?: string;
528
- last_name?: string;
529
- title?: string;
530
- company?: string;
531
- company_domain?: string;
532
- linkedin_url?: string;
533
- location?: string;
534
- email?: string;
535
- phone?: string;
536
- summary?: string;
537
+ full_name?: string | null;
538
+ first_name?: string | null;
539
+ last_name?: string | null;
540
+ title?: string | null;
541
+ company?: string | null;
542
+ company_domain?: string | null;
543
+ linkedin_url?: string | null;
544
+ location?: string | null;
545
+ email?: string | null;
546
+ phone?: string | null;
547
+ summary?: string | null;
537
548
  skills?: string[];
538
549
  experience?: Experience[];
539
550
  education?: Education[];
@@ -544,7 +555,7 @@ export interface PersonResult {
544
555
  best_work_email?: string | null;
545
556
  best_personal_email?: string | null;
546
557
  }
547
- export interface PeopleSearchResult {
558
+ export interface PersonFindResult {
548
559
  status: string;
549
560
  results: PersonResult[];
550
561
  total_found: number;
@@ -673,9 +684,20 @@ export interface DomainPoolStatusResult {
673
684
  warmup_state: DomainWarmupState;
674
685
  pause_reason: DomainPauseReason;
675
686
  }
676
- export interface EnrichProfileResult {
687
+ export interface SocialAccount {
688
+ platform: string;
689
+ url: string;
690
+ handle: string | null;
691
+ }
692
+ export interface DossierSection<T> {
693
+ state: 'found' | 'none' | 'unavailable';
694
+ data: T;
695
+ }
696
+ export interface PersonProfileResult {
677
697
  status: string;
678
- profile: PersonResult;
698
+ profile: PersonResult & {
699
+ social_accounts: SocialAccount[];
700
+ };
679
701
  request_id?: string;
680
702
  /** Receipt id (`rcpt_…`) for this call. Pass to `tagReceiptValue` to annotate value later. */
681
703
  receipt_id?: string;
@@ -705,7 +727,7 @@ export interface CompanyResult {
705
727
  linkedin_url?: string;
706
728
  [key: string]: unknown;
707
729
  }
708
- export interface CompanySearchResult {
730
+ export interface CompanyFindResult {
709
731
  status: string;
710
732
  results: CompanyResult[];
711
733
  total_found: number;
@@ -717,7 +739,7 @@ export interface CompanySearchResult {
717
739
  memo?: string;
718
740
  cost?: number;
719
741
  }
720
- export interface EnrichCompanyResult {
742
+ export interface CompanyProfileResult {
721
743
  status: string;
722
744
  company: CompanyResult;
723
745
  request_id?: string;
@@ -727,7 +749,7 @@ export interface EnrichCompanyResult {
727
749
  memo?: string;
728
750
  cost?: number;
729
751
  }
730
- export interface FindEmailResult {
752
+ export interface PersonEmailResult {
731
753
  status: string;
732
754
  email: string | null;
733
755
  found: boolean;
@@ -744,7 +766,7 @@ export interface AsyncJobResult {
744
766
  request_id: string;
745
767
  status: string;
746
768
  }
747
- /** Enrichment data nested inside deep research and enrichment responses. */
769
+ /** Legacy enrichment fields retained for consumers of earlier result shapes. */
748
770
  export interface PersonEnrichment {
749
771
  displayname?: string;
750
772
  firstname?: string;
@@ -789,26 +811,41 @@ export interface PersonEnrichment {
789
811
  };
790
812
  }>;
791
813
  }
792
- export interface DeepResearchPersonResult {
814
+ /** A post can retain null metadata when the collector had no value. */
815
+ export type PersonDossierPost = Omit<PersonPostsResult['result'][number], 'platform' | 'content' | 'url' | 'posted_at'> & {
816
+ platform?: string | null;
817
+ content?: string | null;
818
+ url?: string | null;
819
+ posted_at?: string | null;
820
+ };
821
+ export interface PersonDossierResult {
793
822
  status: string;
794
823
  result: {
795
- enrichment: PersonEnrichment;
796
- following?: Record<string, unknown>[];
797
- articles?: Array<{
798
- title?: string;
799
- url?: string;
800
- source?: string;
801
- published_date?: string;
802
- snippet?: string;
803
- }>;
804
- dossier?: Record<string, unknown>;
824
+ profile: {
825
+ state: 'found';
826
+ data: PersonProfileResult['profile'];
827
+ };
828
+ social_accounts: DossierSection<SocialAccount[]>;
829
+ articles: DossierSection<Array<{
830
+ title: string | null;
831
+ url: string | null;
832
+ source: string | null;
833
+ published_date: string | null;
834
+ snippet: string | null;
835
+ }>>;
836
+ /** At most ten recent posts, using the person_posts representation. */
837
+ posts: DossierSection<PersonDossierPost[]>;
838
+ /** Section-grounded prose; one line when only the profile was found. */
839
+ summary: string;
805
840
  };
806
841
  request_id: string;
807
842
  completed_at: string;
843
+ receipt_id?: string;
844
+ decisionContext?: Record<string, unknown>;
808
845
  memo?: string;
809
846
  cost?: number;
810
847
  }
811
- export interface SocialProfilesResult {
848
+ export interface PersonSocialAccountsResult {
812
849
  status: string;
813
850
  result: Record<string, {
814
851
  url?: string;
@@ -821,7 +858,7 @@ export interface SocialProfilesResult {
821
858
  memo?: string;
822
859
  cost?: number;
823
860
  }
824
- export interface ArticleSearchResult {
861
+ export interface PersonArticlesResult {
825
862
  status: string;
826
863
  result: Array<{
827
864
  title?: string;
@@ -835,7 +872,7 @@ export interface ArticleSearchResult {
835
872
  memo?: string;
836
873
  cost?: number;
837
874
  }
838
- export interface PersonNewsfeedResult {
875
+ export interface PersonPostsResult {
839
876
  status: string;
840
877
  result: Array<{
841
878
  platform?: string;
@@ -859,7 +896,7 @@ export interface PersonInterestsResult {
859
896
  memo?: string;
860
897
  cost?: number;
861
898
  }
862
- export interface PersonInteractionsResult {
899
+ export interface PersonFollowersResult {
863
900
  status: string;
864
901
  result: {
865
902
  followers?: Array<Record<string, unknown>>;
@@ -871,7 +908,7 @@ export interface PersonInteractionsResult {
871
908
  memo?: string;
872
909
  cost?: number;
873
910
  }
874
- export interface VerifyEmailResult {
911
+ export interface PersonEmailStatusResult {
875
912
  status: string;
876
913
  email: string;
877
914
  valid: boolean;
@@ -926,7 +963,7 @@ export interface CommerceBuyResult {
926
963
  memo?: string;
927
964
  cost?: number;
928
965
  }
929
- export interface CommerceSearchProduct {
966
+ export interface ProductFindProduct {
930
967
  product_url: string;
931
968
  title: string;
932
969
  price: number;
@@ -938,13 +975,13 @@ export interface CommerceSearchProduct {
938
975
  in_stock?: boolean;
939
976
  description?: string;
940
977
  }
941
- export interface CommerceSearchResult {
978
+ export interface ProductFindResult {
942
979
  request_id?: string;
943
980
  /** Receipt id (`rcpt_…`) for this call. Pass to `tagReceiptValue` to annotate value later. */
944
981
  receipt_id?: string;
945
982
  status: string;
946
983
  query: string;
947
- products: CommerceSearchProduct[];
984
+ products: ProductFindProduct[];
948
985
  count: number;
949
986
  memo?: string;
950
987
  cost?: number;
@@ -1702,7 +1739,7 @@ export interface BusinessFindOptions extends ToolOptions {
1702
1739
  is_chain?: boolean;
1703
1740
  /** Default 'open' drops closed businesses. */
1704
1741
  operating_status?: 'open' | 'any';
1705
- /** true = only rows with a resolvable website domain (contactable via findEmail). */
1742
+ /** true = only rows with a resolvable website domain (contactable via personEmail). */
1706
1743
  has_domain?: boolean;
1707
1744
  /** 1-500, default 100. Effective max is bounded by the vendor-call cap; see `truncated`. */
1708
1745
  limit?: number;
@@ -1756,7 +1793,7 @@ export interface BusinessFindResult {
1756
1793
  }
1757
1794
  export interface BusinessResolveResult {
1758
1795
  status: string;
1759
- /** false is a completed job, not an error — the same contract as findEmail. */
1796
+ /** false is a completed job, not an error — the same contract as personEmail. */
1760
1797
  found: boolean;
1761
1798
  /** 0..1 confidence of the best candidate (0 when nothing was returned). */
1762
1799
  confidence: number;
@@ -1901,8 +1938,8 @@ export interface LinkedInConnectIntentIssued {
1901
1938
  requested_actions: string[];
1902
1939
  }
1903
1940
  export interface LinkedInCoverage {
1904
- provider_history: 'never' | 'requested' | 'running' | 'done' | 'error';
1905
- provider_history_completed_at: string | null;
1941
+ history_sync_status: 'never' | 'requested' | 'running' | 'done' | 'error';
1942
+ history_sync_completed_at: string | null;
1906
1943
  enumerated_as_of: string | null;
1907
1944
  enumerated_back_to: string | null;
1908
1945
  latest_message_at: string | null;
@@ -1910,8 +1947,7 @@ export interface LinkedInCoverage {
1910
1947
  message_count: number;
1911
1948
  conversation_count: number;
1912
1949
  last_incremental_at: string | null;
1913
- last_webhook_at: string | null;
1914
- /** provider_history done AND a windowless enumeration finished after it AND no pending cursor. */
1950
+ /** history_sync_status done AND a windowless enumeration finished after it AND no pending cursor. */
1915
1951
  complete: boolean;
1916
1952
  }
1917
1953
  export type LinkedInSyncState = 'reconnect_required' | 'never_synced' | 'syncing' | 'partial' | 'complete';
@@ -1927,8 +1963,8 @@ export interface LinkedInAccount {
1927
1963
  };
1928
1964
  };
1929
1965
  id: string;
1930
- /** deleted_upstream/revoked require a new connect; reconnect_required permits reconnect. */
1931
- status: 'connected' | 'reconnect_required' | 'error' | 'revoked' | 'deleted_upstream';
1966
+ /** connection_deleted/revoked require a new connect; reconnect_required permits reconnect. */
1967
+ status: 'connected' | 'reconnect_required' | 'error' | 'revoked' | 'connection_deleted';
1932
1968
  display_name: string | null;
1933
1969
  member_urn: string | null;
1934
1970
  allowed_actions: string[];
@@ -1937,19 +1973,18 @@ export interface LinkedInAccount {
1937
1973
  reconnected_at: string | null;
1938
1974
  last_status_at: string | null;
1939
1975
  revoked_at: string | null;
1940
- /** False for deleted_upstream: start a new connection instead of retrying reconnect. */
1976
+ /** False for connection_deleted: start a new connection instead of retrying reconnect. */
1941
1977
  reconnect_required: boolean;
1942
1978
  idle_revoke_at: string | null;
1943
- /** Why the grant ended: `agent`, `idle`, `ops` or `upstream_missing`. Null while active. */
1979
+ /** Why the grant ended: `agent`, `idle`, `ops` or `connection_missing`. Null while active. */
1944
1980
  revoked_reason: string | null;
1945
1981
  sync: {
1946
1982
  history_sync_status: string;
1947
1983
  history_sync_completed_at: string | null;
1948
1984
  coverage_earliest_at: string | null;
1949
1985
  coverage_latest_at: string | null;
1950
- last_full_enumeration_at: string | null;
1986
+ last_full_sync_at: string | null;
1951
1987
  last_incremental_at: string | null;
1952
- last_webhook_at: string | null;
1953
1988
  message_count: number;
1954
1989
  conversation_count: number;
1955
1990
  };
@@ -1968,12 +2003,12 @@ export interface LinkedInRevokeResult {
1968
2003
  status: 'revoked';
1969
2004
  revoked_at: string;
1970
2005
  cancelled_sends: number;
1971
- upstream_deleted: boolean;
2006
+ connection_deleted: boolean;
1972
2007
  }
1973
2008
  export interface LinkedInSyncRun {
1974
2009
  run_id: string;
1975
- kind: 'initial' | 'continue' | 'incremental' | 'reconcile' | 'history_request' | 'conversations';
1976
- trigger: 'paid' | 'scheduler' | 'webhook' | 'internal';
2010
+ kind: 'initial' | 'continue' | 'incremental' | 'refresh' | 'history' | 'conversations';
2011
+ trigger: 'paid' | 'scheduled' | 'event' | 'automatic';
1977
2012
  status: 'queued' | 'running' | 'succeeded' | 'failed' | 'paused' | 'superseded';
1978
2013
  continuation_of: string | null;
1979
2014
  has_next_cursor: boolean;
@@ -1981,15 +2016,13 @@ export interface LinkedInSyncRun {
1981
2016
  pages: number;
1982
2017
  requests: number;
1983
2018
  rate_limited: number;
1984
- cursor_resets: number;
1985
2019
  messages_seen: number;
1986
2020
  messages_inserted: number;
1987
2021
  messages_updated: number;
1988
2022
  conversations_inserted: number;
1989
2023
  earliest_seen_at: string | null;
1990
2024
  latest_seen_at: string | null;
1991
- provider_sync_status: string | null;
1992
- upstream_ms: number;
2025
+ history_sync_status: string | null;
1993
2026
  duration_ms: number | null;
1994
2027
  error_code: string | null;
1995
2028
  request_id: string | null;
@@ -2019,7 +2052,7 @@ export interface LinkedInSyncRunResult {
2019
2052
  kind: string;
2020
2053
  outcome: 'exhausted' | 'bounded' | 'partial' | 'not_claimed';
2021
2054
  needs_continuation: boolean;
2022
- provider_history: string;
2055
+ history_sync_status: string;
2023
2056
  pages: number;
2024
2057
  requests: number;
2025
2058
  messages_seen: number;
@@ -2029,12 +2062,11 @@ export interface LinkedInSyncRunResult {
2029
2062
  earliest_seen_at: string | null;
2030
2063
  latest_seen_at: string | null;
2031
2064
  has_next_cursor: boolean;
2032
- upstream_ms: number;
2033
2065
  duration_ms: number;
2034
2066
  [key: string]: unknown;
2035
2067
  }
2036
2068
  export interface LinkedInAttendee {
2037
- provider_id: string | null;
2069
+ external_id: string | null;
2038
2070
  name: string | null;
2039
2071
  is_self: boolean;
2040
2072
  profile_url: string | null;
@@ -2045,7 +2077,7 @@ export interface LinkedInAttendee {
2045
2077
  }
2046
2078
  export interface LinkedInConversation {
2047
2079
  id: string;
2048
- provider_chat_id: string;
2080
+ external_chat_id: string;
2049
2081
  name: string | null;
2050
2082
  subject: string | null;
2051
2083
  type: number | null;
@@ -2061,9 +2093,9 @@ export interface LinkedInConversation {
2061
2093
  export interface LinkedInMessage {
2062
2094
  id: string;
2063
2095
  conversation_id: string;
2064
- provider_message_id: string;
2096
+ external_message_id: string;
2065
2097
  direction: 'inbound' | 'outbound';
2066
- sender_provider_id: string | null;
2098
+ sender_external_id: string | null;
2067
2099
  sender_name: string | null;
2068
2100
  text: string | null;
2069
2101
  sent_at: string;
@@ -2134,14 +2166,14 @@ export interface LinkedInInviteResult {
2134
2166
  action_request_id: string;
2135
2167
  invitation_id: string;
2136
2168
  status: 'sent' | 'already_connected' | 'pending';
2137
- provider_invitation_id?: string | null;
2169
+ external_invitation_id?: string | null;
2138
2170
  tracked?: boolean;
2139
2171
  }
2140
2172
  export interface LinkedInWithdrawInvitationResult {
2141
2173
  action_request_id: string;
2142
2174
  invitation_id: string;
2143
2175
  status: 'cancelled_before_send' | 'withdrawn' | 'already_withdrawn' | 'not_pending';
2144
- provider_invitation_id?: string;
2176
+ external_invitation_id?: string;
2145
2177
  }
2146
2178
  export interface LinkedInReplyOptions extends ToolOptions {
2147
2179
  accountId: string;
@@ -2212,14 +2244,14 @@ export interface LinkedInReactOptions extends ToolOptions {
2212
2244
  export interface LinkedInWriteResult {
2213
2245
  action_request_id: string;
2214
2246
  status: 'sent';
2215
- provider_message_id?: string;
2247
+ external_message_id?: string;
2216
2248
  message_id?: string | null;
2217
2249
  sent_at?: string;
2218
2250
  [key: string]: unknown;
2219
2251
  }
2220
2252
  export interface LinkedInProfileViewResult extends LinkedInWriteResult {
2221
2253
  profile: {
2222
- provider_id: string | null;
2254
+ external_id: string | null;
2223
2255
  public_identifier: string | null;
2224
2256
  name: string | null;
2225
2257
  headline: string | null;
@@ -2238,6 +2270,7 @@ export interface LinkedInExperienceEntry {
2238
2270
  /** As LinkedIn gives it (string or null). */
2239
2271
  start: string | null;
2240
2272
  end: string | null;
2273
+ /** Derived: false when `end` is set; otherwise LinkedIn's flag, or (when LinkedIn gives none) true when `start` is set. */
2241
2274
  current: boolean;
2242
2275
  location: string | null;
2243
2276
  }