deepline 0.3.372 → 0.3.373

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 (113) hide show
  1. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  2. package/dist/bundling-sources/shared_libs/plays/email-status.ts +95 -0
  3. package/dist/bundling-sources/shared_libs/plays/extractor-targets.ts +14 -0
  4. package/dist/bundling-sources/shared_libs/plays/field-catalog.ts +253 -0
  5. package/dist/bundling-sources/shared_libs/plays/tool-result-types.ts +2 -0
  6. package/dist/cli/{auth-ODSACXLF.mjs → auth-7BMCDCRH.mjs} +4 -4
  7. package/dist/cli/auth-BWCNRUG3.js +33 -0
  8. package/dist/cli/{billing-4ERXY2DZ.js → billing-GKI7B4JF.js} +73 -73
  9. package/dist/cli/{billing-OPIOZLAN.mjs → billing-RZEHHMPU.mjs} +4 -4
  10. package/dist/cli/{chunk-E5UD3JDQ.js → chunk-3VN4FTE3.js} +289 -5
  11. package/dist/cli/{chunk-BVUGPOU3.mjs → chunk-6JCVL7CE.mjs} +2 -2
  12. package/dist/cli/{chunk-RJ7JJMQO.js → chunk-BM47AKUZ.js} +266 -254
  13. package/dist/cli/{chunk-DM5QUZJR.js → chunk-CLEB5KUZ.js} +1 -1
  14. package/dist/cli/{chunk-AQFA7HMN.js → chunk-D2CZ4Y5G.js} +15 -15
  15. package/dist/cli/{chunk-3GK3SH3G.mjs → chunk-E6BZWURC.mjs} +200 -13
  16. package/dist/cli/{chunk-RUYZAREB.js → chunk-E7MGPPM5.js} +9 -9
  17. package/dist/cli/{chunk-DONL233W.mjs → chunk-ECA6NQYL.mjs} +4 -4
  18. package/dist/cli/{chunk-GZQKUFM5.js → chunk-EYXSAB7O.js} +26 -26
  19. package/dist/cli/{chunk-MIMV5LTU.mjs → chunk-HNLXC5BP.mjs} +1 -1
  20. package/dist/cli/{chunk-6MDAGRZP.js → chunk-IHQQNWU4.js} +2 -2
  21. package/dist/cli/{chunk-FGHRRJ3D.mjs → chunk-IUYKSTWB.mjs} +1 -1
  22. package/dist/cli/{chunk-VVFH745L.js → chunk-JHUMUIU6.js} +6 -6
  23. package/dist/cli/{chunk-BFLPCGOR.mjs → chunk-JP2YA3AV.mjs} +1 -1
  24. package/dist/cli/{chunk-ML2ZY7YD.js → chunk-ND4BVWWZ.js} +4 -4
  25. package/dist/cli/{chunk-EFJL5FCU.js → chunk-NVZAZGHA.js} +8 -8
  26. package/dist/cli/{chunk-IUWPC5K6.js → chunk-ORBVXCTL.js} +50 -50
  27. package/dist/cli/{chunk-JAERLCMH.mjs → chunk-P5JPGZNI.mjs} +1 -1
  28. package/dist/cli/{chunk-KC2YOJTU.mjs → chunk-PZ26EKNC.mjs} +319 -115
  29. package/dist/cli/{chunk-U3W7E5WT.mjs → chunk-QSV76EMO.mjs} +27 -15
  30. package/dist/cli/{chunk-4LIUZ4QR.mjs → chunk-R6TPSZLN.mjs} +2 -2
  31. package/dist/cli/{chunk-N5TPMNTT.js → chunk-S5OTS6H5.js} +8 -8
  32. package/dist/cli/{chunk-XSPAI6MF.mjs → chunk-TB73PXE3.mjs} +2 -2
  33. package/dist/cli/{chunk-D6O3NJHX.js → chunk-W3H422KP.js} +60 -60
  34. package/dist/cli/{chunk-WJWO74MM.js → chunk-XJYUQBHY.js} +390 -186
  35. package/dist/cli/{chunk-3CTB7V5F.mjs → chunk-XMME4SCK.mjs} +2 -2
  36. package/dist/cli/{chunk-2RC5JQ3C.mjs → chunk-Y32GUTEN.mjs} +1 -1
  37. package/dist/cli/{chunk-JB6ERQUV.mjs → chunk-Y6VOGHF2.mjs} +284 -0
  38. package/dist/cli/{chunk-5HYD3GMS.mjs → chunk-YHHY2YHK.mjs} +3 -3
  39. package/dist/cli/{chunk-2JRRXXTA.js → chunk-YPVTQRUM.js} +201 -14
  40. package/dist/cli/{client-KF2J754U.mjs → client-FO6LMHT4.mjs} +3 -3
  41. package/dist/cli/client-KAWK7FJR.js +20 -0
  42. package/dist/cli/{csv-UL3MCD5D.mjs → csv-3FNCVMWA.mjs} +3 -3
  43. package/dist/cli/{csv-UJ3M7NFP.js → csv-NFQYQWWO.js} +12 -12
  44. package/dist/cli/{db-444XYOTV.js → db-CTLGRV3X.js} +29 -29
  45. package/dist/cli/{db-SIOWA63T.mjs → db-VA7HULGR.mjs} +4 -4
  46. package/dist/cli/{describe-GI5GHAKO.mjs → describe-GXGRMP2M.mjs} +46 -17
  47. package/dist/cli/{describe-RRBESS3S.js → describe-IUHOEPKY.js} +61 -32
  48. package/dist/cli/{executions-ERXZUOL5.js → executions-DSK3HRPU.js} +6 -6
  49. package/dist/cli/{executions-4YDP6BXI.mjs → executions-OZQDZQIK.mjs} +4 -4
  50. package/dist/cli/{feedback-3M7D7DZQ.js → feedback-KTMLMWKV.js} +7 -7
  51. package/dist/cli/{feedback-CPWQL5LU.mjs → feedback-ZOY7R4JD.mjs} +3 -3
  52. package/dist/cli/git-5P5FLEUC.js +23 -0
  53. package/dist/cli/{git-XN6C3TJZ.mjs → git-FIOI4IA2.mjs} +4 -4
  54. package/dist/cli/index.js +81 -81
  55. package/dist/cli/index.mjs +32 -32
  56. package/dist/cli/{legacy-noops-KXQ6TFFL.mjs → legacy-noops-KQZWSABN.mjs} +4 -4
  57. package/dist/cli/{legacy-noops-5XDGOFWH.js → legacy-noops-WXAYRQMQ.js} +7 -7
  58. package/dist/cli/{monitors-KH22PDOC.js → monitors-LPUCHRNJ.js} +85 -85
  59. package/dist/cli/{monitors-33IU5JR6.mjs → monitors-VHNWIF4V.mjs} +4 -4
  60. package/dist/cli/{org-X4NSLQG5.js → org-GWHWBCMD.js} +64 -64
  61. package/dist/cli/{org-MHYMWUEP.mjs → org-UW7NPGEY.mjs} +4 -4
  62. package/dist/cli/play-EVBIC7Z5.js +155 -0
  63. package/dist/cli/{play-LCZKHKW2.mjs → play-FNM2E66T.mjs} +8 -8
  64. package/dist/cli/{providers-J6LWCF5R.js → providers-6D6R3PWX.js} +7 -7
  65. package/dist/cli/{providers-L5FJTSEA.mjs → providers-XAZMYDWS.mjs} +4 -4
  66. package/dist/cli/{quickstart-OOPFA4MX.js → quickstart-HBUWBVH6.js} +5 -5
  67. package/dist/cli/{quickstart-NE3BTWGL.mjs → quickstart-OK65PGZL.mjs} +3 -3
  68. package/dist/cli/search-6ZY2XWP2.js +26 -0
  69. package/dist/cli/{search-DBXOEOIE.mjs → search-XY6JOTS2.mjs} +5 -5
  70. package/dist/cli/{secrets-WPMU7UBD.js → secrets-6CYCPK7T.js} +13 -13
  71. package/dist/cli/{secrets-U2MLWZH2.mjs → secrets-W2LDLU2W.mjs} +4 -4
  72. package/dist/cli/{sessions-YYZ3UJDS.js → sessions-GOYEKNTJ.js} +5 -5
  73. package/dist/cli/{sessions-WYNC4AUE.mjs → sessions-JAX7PGXU.mjs} +4 -4
  74. package/dist/cli/{settings-FQZSHFC6.mjs → settings-OACUQOCM.mjs} +7 -7
  75. package/dist/cli/{settings-WQDFX3X6.js → settings-QMFYFCT7.js} +74 -74
  76. package/dist/cli/{setup-JKYJT35S.mjs → setup-2KA5TZBZ.mjs} +6 -6
  77. package/dist/cli/{setup-DKYVNDTM.js → setup-36VOOGVA.js} +41 -41
  78. package/dist/cli/skills-6GPIEPTP.js +28 -0
  79. package/dist/cli/{skills-VHVCJJJY.mjs → skills-QY4BX5ZX.mjs} +4 -4
  80. package/dist/cli/tools-RTECP4WT.js +40 -0
  81. package/dist/cli/{tools-E23PU7KM.mjs → tools-UCB2QRVC.mjs} +8 -8
  82. package/dist/cli/{update-4A4VU6CW.mjs → update-327MHUO4.mjs} +6 -6
  83. package/dist/cli/update-WR65EHBN.js +28 -0
  84. package/dist/cli/{workflow-WB2USWAA.js → workflow-G7BU54KW.js} +15 -15
  85. package/dist/cli/{workflow-2ZR2ECTG.mjs → workflow-HJN4GA5A.mjs} +5 -5
  86. package/dist/{client-Cw0e2Uec.d.mts → client-Cn-txrXv.d.mts} +1 -1
  87. package/dist/{client-CwdiawoG.d.ts → client-fPoIN-3V.d.ts} +1 -1
  88. package/dist/{compiler-manifest-DgdW0q0b.d.mts → compiler-manifest-CY2v8ab0.d.mts} +2 -0
  89. package/dist/{compiler-manifest-DgdW0q0b.d.ts → compiler-manifest-CY2v8ab0.d.ts} +2 -0
  90. package/dist/{index-C3nQQTI-.d.mts → index-B9fBZH1g.d.mts} +1 -1
  91. package/dist/{index-CEYQAfS0.d.ts → index-BZ6uzZJl.d.ts} +1 -1
  92. package/dist/index.d.mts +5 -5
  93. package/dist/index.d.ts +5 -5
  94. package/dist/index.js +79 -249
  95. package/dist/index.mjs +10 -180
  96. package/dist/install-integrity.json +85 -84
  97. package/dist/plays/bundle-play-file.d.mts +3 -3
  98. package/dist/plays/bundle-play-file.d.ts +3 -3
  99. package/dist/plays/run-request.d.mts +2 -2
  100. package/dist/plays/run-request.d.ts +2 -2
  101. package/dist/release.d.mts +1 -1
  102. package/dist/release.d.ts +1 -1
  103. package/dist/release.js +2 -2
  104. package/dist/release.mjs +1 -1
  105. package/package.json +1 -1
  106. package/dist/cli/auth-4SXMV3CD.js +0 -33
  107. package/dist/cli/client-UUNLXOHF.js +0 -20
  108. package/dist/cli/git-ITSCNUVB.js +0 -23
  109. package/dist/cli/play-4QRPOBWW.js +0 -155
  110. package/dist/cli/search-UGQDBP76.js +0 -26
  111. package/dist/cli/skills-VBQMXDAX.js +0 -28
  112. package/dist/cli/tools-ACEJZMJD.js +0 -40
  113. package/dist/cli/update-V5KMYHVE.js +0 -28
@@ -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.372',
203
+ version: '0.3.373',
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: {
@@ -53,6 +53,101 @@ export type EmailStatus = {
53
53
  };
54
54
  };
55
55
 
56
+ const nullable = (type: string) => ({ type: [type, 'null'] });
57
+ const oneOf = (values: readonly string[]) => ({ type: 'string', enum: values });
58
+
59
+ /** `EmailStatus` as a JSON schema, for describing it where TypeScript types are not at hand. */
60
+ export const EMAIL_STATUS_JSON_SCHEMA = {
61
+ type: 'object',
62
+ required: [
63
+ 'verdict',
64
+ 'status',
65
+ 'verified',
66
+ 'confidence',
67
+ 'reasons',
68
+ 'signals',
69
+ 'provider',
70
+ ],
71
+ properties: {
72
+ verdict: oneOf([
73
+ 'send',
74
+ 'send_with_caution',
75
+ 'verify_next',
76
+ 'hold',
77
+ 'drop',
78
+ ] satisfies EmailStatusVerdict[]),
79
+ status: oneOf([
80
+ 'valid',
81
+ 'invalid',
82
+ 'catch_all',
83
+ 'valid_catch_all',
84
+ 'unknown',
85
+ 'do_not_mail',
86
+ 'spamtrap',
87
+ 'abuse',
88
+ 'disposable',
89
+ ] satisfies EmailStatusValue[]),
90
+ verified: { type: 'boolean' },
91
+ confidence: nullable('number'),
92
+ reasons: { type: 'array', items: { type: 'string' } },
93
+ signals: {
94
+ type: 'object',
95
+ required: [
96
+ 'catch_all',
97
+ 'deliverability',
98
+ 'mx_class',
99
+ 'mx_provider',
100
+ 'mx_record',
101
+ 'fraud_score',
102
+ 'disposable',
103
+ 'role_based',
104
+ 'free_email',
105
+ 'abuse',
106
+ 'spamtrap',
107
+ 'suspect',
108
+ 'valid',
109
+ ] satisfies Array<keyof EmailStatus['signals']>,
110
+ properties: {
111
+ catch_all: nullable('boolean'),
112
+ deliverability: oneOf([
113
+ 'high',
114
+ 'medium',
115
+ 'low',
116
+ 'unknown',
117
+ ] satisfies EmailDeliverability[]),
118
+ mx_class: oneOf([
119
+ 'consumer_mailbox',
120
+ 'workspace_mailbox',
121
+ 'security_gateway',
122
+ 'on_prem',
123
+ 'unknown',
124
+ ] satisfies EmailMxClass[]),
125
+ mx_provider: nullable('string'),
126
+ mx_record: nullable('string'),
127
+ fraud_score: nullable('number'),
128
+ disposable: nullable('boolean'),
129
+ role_based: nullable('boolean'),
130
+ free_email: nullable('boolean'),
131
+ abuse: nullable('boolean'),
132
+ spamtrap: nullable('boolean'),
133
+ suspect: nullable('boolean'),
134
+ valid: nullable('boolean'),
135
+ },
136
+ },
137
+ provider: {
138
+ type: 'object',
139
+ required: ['name', 'raw_status', 'raw_score'] satisfies Array<
140
+ keyof EmailStatus['provider']
141
+ >,
142
+ properties: {
143
+ name: { type: 'string' },
144
+ raw_status: { type: ['string', 'boolean', 'number', 'null'] },
145
+ raw_score: nullable('number'),
146
+ },
147
+ },
148
+ },
149
+ } as const;
150
+
56
151
  export type EmailStatusMapEntry = {
57
152
  status: EmailStatusValue;
58
153
  verdict?: EmailStatusVerdict;
@@ -18,6 +18,20 @@ export type JobChangeGetterValue = {
18
18
  new_title: string | null;
19
19
  };
20
20
 
21
+ /** `JobChangeGetterValue` as a JSON schema. */
22
+ export const JOB_CHANGE_JSON_SCHEMA = {
23
+ type: 'object',
24
+ required: ['status', 'date', 'new_company', 'new_title'] satisfies Array<
25
+ keyof JobChangeGetterValue
26
+ >,
27
+ properties: {
28
+ status: { type: 'string', enum: JOB_CHANGE_STATUS_VALUES },
29
+ date: { type: ['string', 'null'] },
30
+ new_company: { type: ['string', 'null'] },
31
+ new_title: { type: ['string', 'null'] },
32
+ },
33
+ } as const;
34
+
21
35
  export const PHONE_STATUS_VALUES = ['valid', 'invalid', 'unknown'] as const;
22
36
 
23
37
  export type PhoneStatus = (typeof PHONE_STATUS_VALUES)[number];
@@ -0,0 +1,253 @@
1
+ import type { DeeplineExtractorTarget } from './extractor-targets';
2
+
3
+ /**
4
+ * The catalog of things a tool or play can take or return about a person or
5
+ * a company, named by what they are instead of by what a provider calls them.
6
+ *
7
+ * An id is a dotted path that always ends in a leaf:
8
+ *
9
+ * person.email.value any email for the person
10
+ * person.email.work.value their work email
11
+ * person.email.work.validated whether that work email was validated
12
+ *
13
+ * It reads `<entity>.<group>[.<kind>].<leaf>`. A group is one thing about the
14
+ * entity (an email). A leaf is one fact about that thing (its value, whether
15
+ * it was validated). A kind narrows which one is meant (work, personal). No
16
+ * id is both a field and a parent of fields, so `person.email` alone is never
17
+ * a field; the plain value is `person.email.value`.
18
+ *
19
+ * A kind is a narrowing, so a field with a kind also answers for the same
20
+ * field without it: a tool that returns `person.email.work.value` satisfies a
21
+ * request for `person.email.value`. A tool that cannot tell which kind it has
22
+ * declares the id without one.
23
+ *
24
+ * This is an addition. Existing short names (`email`, `name`) keep working;
25
+ * `EXTRACTOR_TARGET_FIELDS` records what each can mean.
26
+ */
27
+ type Leaf = { type: string; description: string };
28
+
29
+ type Group = {
30
+ description: string;
31
+ leaves: Record<string, Leaf>;
32
+ /** Narrowings of this group. Each has every leaf the group has. */
33
+ kinds?: Record<string, string>;
34
+ };
35
+
36
+ const value = (description: string): Leaf => ({ type: 'string', description });
37
+
38
+ const SOURCE: Leaf = {
39
+ type: 'string',
40
+ description: 'The provider or step that found it.',
41
+ };
42
+
43
+ export const FIELD_CATALOG = {
44
+ person: {
45
+ name: {
46
+ description: "The person's name.",
47
+ leaves: {
48
+ value: value('Full name.'),
49
+ first: value('First (given) name.'),
50
+ last: value('Last (family) name.'),
51
+ },
52
+ },
53
+ email: {
54
+ description: 'An email address for the person.',
55
+ leaves: {
56
+ value: value('The address.'),
57
+ validated: {
58
+ type: 'boolean',
59
+ description: 'Whether the address passed validation.',
60
+ },
61
+ status: {
62
+ type: 'EmailStatus',
63
+ description: 'The validation verdict and its signals.',
64
+ },
65
+ source: SOURCE,
66
+ },
67
+ kinds: {
68
+ work: 'At their employer.',
69
+ personal: 'Their own, not tied to an employer.',
70
+ },
71
+ },
72
+ phone: {
73
+ description: 'A phone number for the person.',
74
+ leaves: {
75
+ value: value('The number.'),
76
+ validated: {
77
+ type: 'boolean',
78
+ description: 'Whether the number passed validation.',
79
+ },
80
+ status: {
81
+ type: '"valid" | "invalid" | "unknown"',
82
+ description: 'The validation verdict.',
83
+ },
84
+ line_type: value('Mobile, landline, VoIP and so on.'),
85
+ carrier: value('The carrier serving the number.'),
86
+ source: SOURCE,
87
+ },
88
+ kinds: {
89
+ mobile: 'Their mobile.',
90
+ work: 'A direct line at their employer.',
91
+ },
92
+ },
93
+ linkedin: {
94
+ description: "The person's LinkedIn profile.",
95
+ leaves: { url: value('The profile URL.') },
96
+ },
97
+ job: {
98
+ description: "The person's current role.",
99
+ leaves: {
100
+ title: value('Job title.'),
101
+ change: {
102
+ type: 'JobChange',
103
+ description: 'Whether they changed jobs, and to what.',
104
+ },
105
+ change_status: {
106
+ type: 'JobChangeStatus',
107
+ description: 'The job-change verdict alone.',
108
+ },
109
+ },
110
+ },
111
+ record: {
112
+ description: "A provider's own record of the person.",
113
+ leaves: { id: value("The provider's id for the person.") },
114
+ },
115
+ },
116
+ company: {
117
+ name: {
118
+ description: "The company's name.",
119
+ leaves: { value: value('The name.') },
120
+ kinds: { legal: 'As registered with a government.' },
121
+ },
122
+ domain: {
123
+ description: "The company's web domain.",
124
+ leaves: { value: value('The bare domain, such as example.com.') },
125
+ },
126
+ website: {
127
+ description: "The company's website.",
128
+ leaves: { url: value('The site URL.') },
129
+ },
130
+ linkedin: {
131
+ description: "The company's LinkedIn page.",
132
+ leaves: { url: value('The page URL.') },
133
+ },
134
+ phone: {
135
+ description: 'A phone number for the company.',
136
+ leaves: { value: value('The number.') },
137
+ },
138
+ industry: {
139
+ description: 'The industry the company is in.',
140
+ leaves: { value: value('The industry.') },
141
+ },
142
+ record: {
143
+ description: "A provider's own record of the company.",
144
+ leaves: { id: value("The provider's id for the company.") },
145
+ },
146
+ },
147
+ } as const satisfies Record<string, Record<string, Group>>;
148
+
149
+ export type FieldEntity = keyof typeof FIELD_CATALOG;
150
+
151
+ export type CatalogField = Leaf & {
152
+ id: string;
153
+ entity: FieldEntity;
154
+ group: string;
155
+ kind?: string;
156
+ leaf: string;
157
+ };
158
+
159
+ /** Every field in the catalog, with and without each kind. */
160
+ export function catalogFields(): CatalogField[] {
161
+ return Object.entries(FIELD_CATALOG).flatMap(([entity, groups]) =>
162
+ Object.entries<Group>(groups).flatMap(([group, definition]) =>
163
+ [undefined, ...Object.keys(definition.kinds ?? {})].flatMap((kind) =>
164
+ Object.entries(definition.leaves).map(([leaf, described]) => ({
165
+ ...described,
166
+ id: [entity, group, kind, leaf].filter(Boolean).join('.'),
167
+ entity: entity as FieldEntity,
168
+ group,
169
+ ...(kind ? { kind } : {}),
170
+ leaf,
171
+ })),
172
+ ),
173
+ ),
174
+ );
175
+ }
176
+
177
+ const FIELDS_BY_ID = new Map(catalogFields().map((field) => [field.id, field]));
178
+
179
+ export function catalogField(id: string): CatalogField | undefined {
180
+ return FIELDS_BY_ID.get(id);
181
+ }
182
+
183
+ /** The same field without its kind, or null when it has none to drop. */
184
+ export function generalField(id: string): string | null {
185
+ const field = FIELDS_BY_ID.get(id);
186
+ return field?.kind ? [field.entity, field.group, field.leaf].join('.') : null;
187
+ }
188
+
189
+ /** Whether a tool returning `offered` gives a caller what `wanted` asks for. */
190
+ export function fieldSatisfies(offered: string, wanted: string): boolean {
191
+ return offered === wanted || generalField(offered) === wanted;
192
+ }
193
+
194
+ /**
195
+ * What each existing short output name can mean, as the general field: a tool
196
+ * may also declare any narrowing of one (`email` as `person.email.work.value`).
197
+ * One entry means the name means that everywhere unless a tool narrows it.
198
+ * Several mean it depends on the tool, which has to say. None means the name
199
+ * is used for things outside the catalog and stays a per-tool name.
200
+ */
201
+ export const EXTRACTOR_TARGET_FIELDS: Record<
202
+ DeeplineExtractorTarget,
203
+ readonly string[]
204
+ > = {
205
+ email: ['person.email.value'],
206
+ personal_email: ['person.email.personal.value'],
207
+ email_status: ['person.email.status'],
208
+ phone: ['person.phone.value', 'company.phone.value'],
209
+ phone_status: ['person.phone.status'],
210
+ first_name: ['person.name.first'],
211
+ last_name: ['person.name.last'],
212
+ full_name: ['person.name.value'],
213
+ // Also used for a list name, a channel title and a search suggestion.
214
+ name: ['person.name.value', 'company.name.value'],
215
+ linkedin: ['person.linkedin.url', 'company.linkedin.url'],
216
+ linkedin_url: ['person.linkedin.url'],
217
+ title: ['person.job.title'],
218
+ job_change: ['person.job.change'],
219
+ job_change_status: ['person.job.change_status'],
220
+ company: ['company.name.value'],
221
+ company_name: ['company.name.value'],
222
+ organization_name: ['company.name.value'],
223
+ company_domain: ['company.domain.value'],
224
+ domain: ['company.domain.value'],
225
+ company_website: ['company.website.url'],
226
+ // Also used for a podcast URL.
227
+ website: ['company.website.url'],
228
+ company_linkedin_url: ['company.linkedin.url'],
229
+ industry: ['company.industry.value'],
230
+ id: ['person.record.id', 'company.record.id'],
231
+ // Used for unrelated provider statuses; none is a catalog field.
232
+ status: [],
233
+ };
234
+
235
+ /**
236
+ * The catalog field a short name stands for on one tool: what the tool
237
+ * declares, or else the name's one meaning. Undefined when the name is
238
+ * ambiguous and the tool has not said, or when what it said is not something
239
+ * the name can mean.
240
+ */
241
+ export function fieldOfName(
242
+ name: string,
243
+ declared?: string,
244
+ ): string | undefined {
245
+ const meanings: readonly string[] =
246
+ EXTRACTOR_TARGET_FIELDS[name as DeeplineExtractorTarget] ?? [];
247
+ if (declared === undefined) {
248
+ return meanings.length === 1 ? meanings[0] : undefined;
249
+ }
250
+ return meanings.some((meaning) => fieldSatisfies(declared, meaning))
251
+ ? declared
252
+ : undefined;
253
+ }
@@ -55,6 +55,8 @@ export type ToolResultListMetadata = {
55
55
 
56
56
  export type ToolResultExtractorDescriptor = {
57
57
  paths: readonly string[];
58
+ /** The field catalog id this output is on this tool, when it declares one. */
59
+ means?: string;
58
60
  transforms?: readonly string[];
59
61
  enum?: readonly string[];
60
62
  overrides?: readonly ToolResultExtractorOverride[];
@@ -10,12 +10,12 @@ import {
10
10
  registerAuthCommands,
11
11
  reportSetupCompleted,
12
12
  resolvePendingAuthClaimForResume
13
- } from "./chunk-3CTB7V5F.mjs";
14
- import "./chunk-MIMV5LTU.mjs";
15
- import "./chunk-FGHRRJ3D.mjs";
13
+ } from "./chunk-XMME4SCK.mjs";
14
+ import "./chunk-HNLXC5BP.mjs";
15
+ import "./chunk-IUYKSTWB.mjs";
16
16
  import "./chunk-DLIRSHV6.mjs";
17
17
  import "./chunk-NXGCO4JB.mjs";
18
- import "./chunk-JAERLCMH.mjs";
18
+ import "./chunk-P5JPGZNI.mjs";
19
19
  import "./chunk-WZYKRD7T.mjs";
20
20
  import "./chunk-KRD6H754.mjs";
21
21
  export {
@@ -0,0 +1,33 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+ var _chunkORBVXCTLjs = require('./chunk-ORBVXCTL.js');
14
+ require('./chunk-JHUMUIU6.js');
15
+ require('./chunk-ND4BVWWZ.js');
16
+ require('./chunk-XNYIZMNQ.js');
17
+ require('./chunk-7P5AA3SN.js');
18
+ require('./chunk-CLEB5KUZ.js');
19
+ require('./chunk-OG64RBAC.js');
20
+ require('./chunk-COGTRVWW.js');
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+ exports.EXIT_WORKSPACE_MISMATCH = _chunkORBVXCTLjs.EXIT_WORKSPACE_MISMATCH; exports.authStatusLine = _chunkORBVXCTLjs.authStatusLine; exports.clearPendingClaim = _chunkORBVXCTLjs.clearPendingClaim; exports.clearSatisfiedPendingClaim = _chunkORBVXCTLjs.clearSatisfiedPendingClaim; exports.handleRegister = _chunkORBVXCTLjs.handleRegister; exports.handleStatus = _chunkORBVXCTLjs.handleStatus; exports.handleWait = _chunkORBVXCTLjs.handleWait; exports.readPendingAuthClaim = _chunkORBVXCTLjs.readPendingAuthClaim; exports.registerAuthCommands = _chunkORBVXCTLjs.registerAuthCommands; exports.reportSetupCompleted = _chunkORBVXCTLjs.reportSetupCompleted; exports.resolvePendingAuthClaimForResume = _chunkORBVXCTLjs.resolvePendingAuthClaimForResume;