@elevasis/sdk 1.15.1 → 1.16.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.
Files changed (59) hide show
  1. package/dist/cli.cjs +2325 -124
  2. package/dist/index.d.ts +410 -473
  3. package/dist/index.js +96 -44
  4. package/dist/node/index.d.ts +69 -0
  5. package/dist/node/index.js +273 -0
  6. package/dist/test-utils/index.d.ts +473 -466
  7. package/dist/types/worker/platform.d.ts +2 -9
  8. package/package.json +12 -3
  9. package/reference/_navigation.md +23 -1
  10. package/reference/_reference-manifest.json +98 -0
  11. package/reference/claude-config/rules/agent-start-here.md +13 -0
  12. package/reference/claude-config/rules/organization-model.md +40 -40
  13. package/reference/claude-config/rules/organization-os.md +16 -16
  14. package/reference/claude-config/rules/vibe.md +13 -13
  15. package/reference/claude-config/skills/knowledge/SKILL.md +253 -0
  16. package/reference/claude-config/skills/{configure → knowledge}/operations/codify-level-a.md +100 -100
  17. package/reference/claude-config/skills/{configure → knowledge}/operations/codify-level-b.md +158 -158
  18. package/reference/claude-config/skills/knowledge/operations/customers.md +109 -0
  19. package/reference/claude-config/skills/knowledge/operations/features.md +113 -0
  20. package/reference/claude-config/skills/knowledge/operations/goals.md +118 -0
  21. package/reference/claude-config/skills/knowledge/operations/identity.md +93 -0
  22. package/reference/claude-config/skills/knowledge/operations/labels.md +89 -0
  23. package/reference/claude-config/skills/knowledge/operations/offerings.md +109 -0
  24. package/reference/claude-config/skills/knowledge/operations/roles.md +99 -0
  25. package/reference/claude-config/skills/knowledge/operations/techStack.md +102 -0
  26. package/reference/claude-config/skills/run-ui/SKILL.md +73 -0
  27. package/reference/claude-config/skills/setup/SKILL.md +270 -270
  28. package/reference/claude-config/skills/tutorial/SKILL.md +249 -0
  29. package/reference/claude-config/skills/tutorial/progress-template.md +74 -0
  30. package/reference/claude-config/skills/tutorial/technical.md +1309 -0
  31. package/reference/claude-config/skills/tutorial/vibe-coder.md +890 -0
  32. package/reference/claude-config/sync-notes/2026-05-04-elevasis-workspace.md +71 -0
  33. package/reference/claude-config/sync-notes/2026-05-04-template-skills-run-ui-and-tutorial.md +59 -0
  34. package/reference/deployment/index.mdx +5 -5
  35. package/reference/examples/organization-model.ts +40 -0
  36. package/reference/framework/index.mdx +1 -1
  37. package/reference/framework/tutorial-system.mdx +86 -173
  38. package/reference/packages/core/src/knowledge/README.md +32 -0
  39. package/reference/packages/ui/src/knowledge/README.md +31 -0
  40. package/reference/packages/ui/src/theme/presets/README.md +19 -0
  41. package/reference/scaffold/core/organization-model.mdx +1 -1
  42. package/reference/scaffold/recipes/add-a-feature.md +1 -1
  43. package/reference/scaffold/recipes/customize-crm-actions.md +433 -433
  44. package/reference/scaffold/recipes/customize-organization-model.md +3 -3
  45. package/reference/scaffold/recipes/extend-lead-gen.md +90 -55
  46. package/reference/scaffold/recipes/gate-by-feature-or-admin.md +1 -1
  47. package/reference/scaffold/recipes/index.md +6 -0
  48. package/reference/scaffold/reference/contracts.md +1265 -1154
  49. package/reference/scaffold/reference/feature-registry.md +2 -1
  50. package/reference/scaffold/ui/composition-extensibility.mdx +17 -0
  51. package/reference/claude-config/skills/configure/SKILL.md +0 -98
  52. package/reference/claude-config/skills/configure/operations/customers.md +0 -150
  53. package/reference/claude-config/skills/configure/operations/features.md +0 -162
  54. package/reference/claude-config/skills/configure/operations/goals.md +0 -147
  55. package/reference/claude-config/skills/configure/operations/identity.md +0 -133
  56. package/reference/claude-config/skills/configure/operations/labels.md +0 -128
  57. package/reference/claude-config/skills/configure/operations/offerings.md +0 -159
  58. package/reference/claude-config/skills/configure/operations/roles.md +0 -153
  59. package/reference/claude-config/skills/configure/operations/techStack.md +0 -139
@@ -180,15 +180,53 @@ export type OrganizationModelObjective = z.infer<typeof ObjectiveSchema>
180
180
  export type OrganizationModelKeyResult = z.infer<typeof KeyResultSchema>
181
181
  ```
182
182
 
183
+ ### `OrganizationModelKnowledge`
184
+
185
+ ```typescript
186
+ export type OrganizationModelKnowledge = z.infer<typeof KnowledgeDomainSchema>
187
+ ```
188
+
189
+ ### `OrgKnowledgeNode`
190
+
191
+ ```typescript
192
+ export type OrgKnowledgeNode = z.infer<typeof OrgKnowledgeNodeSchema>
193
+ ```
194
+
195
+ ### `OrgKnowledgeKind`
196
+
197
+ ```typescript
198
+ export type OrgKnowledgeKind = z.infer<typeof OrgKnowledgeKindSchema>
199
+ ```
200
+
201
+ ### `OrganizationModelIconToken`
202
+
203
+ ```typescript
204
+ export type OrganizationModelIconToken = z.infer<typeof OrganizationModelIconTokenSchema>
205
+ ```
206
+
207
+ ### `OrganizationModelBuiltinIconToken`
208
+
209
+ ```typescript
210
+ export type OrganizationModelBuiltinIconToken = z.infer<typeof OrganizationModelBuiltinIconTokenSchema>
211
+ ```
212
+
183
213
  ### `DeepPartial`
184
214
 
185
215
  ```typescript
186
- export type DeepPartial<T> =
216
+ export type DeepPartial<T> =
187
217
  T extends Array<infer U> ? Array<DeepPartial<U>> : T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T
188
218
  ```
189
219
 
190
220
  ## Feature System
191
221
 
222
+ ### `ElevasisOrganizationModel`
223
+
224
+ ```typescript
225
+ export type ElevasisOrganizationModel = Omit<OrganizationModel, 'knowledge'> & {
226
+ knowledge?: OrganizationModel['knowledge']
227
+ }
228
+ ```
229
+
192
230
  ### `FeatureSidebarComponent`
193
231
 
194
232
  ```typescript
@@ -327,7 +365,7 @@ export interface OrganizationGraphContextValue {
327
365
  ```typescript
328
366
  export interface ElevasisFeaturesProviderProps {
329
367
  features: FeatureModule[]
330
- organizationModel?: OrganizationModel
368
+ organizationModel?: ElevasisOrganizationModel
331
369
  timeRange?: TimeRange
332
370
  operationsApiUrl?: string
333
371
  operationsSSEManager?: SSEConnectionManagerLike
@@ -812,73 +850,73 @@ export interface DeploymentSpec {
812
850
  ### `AcqCompany`
813
851
 
814
852
  ```typescript
815
- /**
816
- * Company record in the acquisition database.
817
- * Contains enriched company data from various sources.
818
- * Transformed from AcqCompanyRow with camelCase properties.
819
- */
820
- export interface AcqCompany {
821
- id: string
822
- organizationId: string
823
- name: string
824
- domain: string | null
825
- linkedinUrl: string | null
826
- website: string | null
827
- numEmployees: number | null
828
- foundedYear: number | null
829
- locationCity: string | null
830
- locationState: string | null
831
- category: string | null
832
- categoryPain: string | null
833
- segment: string | null
834
- pipelineStatus: CompanyPipelineStatus | null
835
- enrichmentData: CompanyEnrichmentData | null
836
- source: string | null
837
- batchId: string | null
838
- status: 'active' | 'invalid'
839
- verticalResearch: string | null
840
- /** Track A: flat qualification score (null until a scoring rubric is defined). Added by W1 migration. */
841
- qualificationScore: number | null
842
- /** Track A: flat qualification signals jsonb preserving the result payload shape. Added by W1 migration. */
843
- qualificationSignals: Record<string, unknown> | null
844
- /** Track A: key identifying the rubric used for qualification. Added by W1 migration. */
845
- qualificationRubricKey: string | null
846
- createdAt: Date
847
- updatedAt: Date
853
+ /**
854
+ * Company record in the acquisition database.
855
+ * Contains enriched company data from various sources.
856
+ * Transformed from AcqCompanyRow with camelCase properties.
857
+ */
858
+ export interface AcqCompany {
859
+ id: string
860
+ organizationId: string
861
+ name: string
862
+ domain: string | null
863
+ linkedinUrl: string | null
864
+ website: string | null
865
+ numEmployees: number | null
866
+ foundedYear: number | null
867
+ locationCity: string | null
868
+ locationState: string | null
869
+ category: string | null
870
+ categoryPain: string | null
871
+ segment: string | null
872
+ pipelineStatus: CompanyPipelineStatus | null
873
+ enrichmentData: CompanyEnrichmentData | null
874
+ source: string | null
875
+ batchId: string | null
876
+ status: 'active' | 'invalid'
877
+ verticalResearch: string | null
878
+ /** Track A: flat qualification score (null until a scoring rubric is defined). Added by W1 migration. */
879
+ qualificationScore: number | null
880
+ /** Track A: flat qualification signals jsonb preserving the result payload shape. Added by W1 migration. */
881
+ qualificationSignals: Record<string, unknown> | null
882
+ /** Track A: key identifying the rubric used for qualification. Added by W1 migration. */
883
+ qualificationRubricKey: string | null
884
+ createdAt: Date
885
+ updatedAt: Date
848
886
  }
849
887
  ```
850
888
 
851
889
  ### `AcqContact`
852
890
 
853
891
  ```typescript
854
- /**
855
- * Contact record in the acquisition database.
856
- * Contains enriched contact data and personalization content.
857
- * Transformed from AcqContactRow with camelCase properties.
858
- */
859
- export interface AcqContact {
860
- id: string
861
- organizationId: string
862
- companyId: string | null
863
- email: string
864
- emailValid: 'VALID' | 'INVALID' | 'RISKY' | 'UNKNOWN' | null
865
- firstName: string | null
866
- lastName: string | null
867
- linkedinUrl: string | null
868
- title: string | null
869
- headline: string | null
870
- filterReason: string | null
871
- openingLine: string | null
872
- source: string | null
873
- sourceId: string | null
874
- pipelineStatus: ContactPipelineStatus | null
875
- enrichmentData: ContactEnrichmentData | null
876
- /** Attio Person record ID - set when contact responds and is added to CRM */
877
- attioPersonId: string | null
878
- batchId: string | null
879
- status: 'active' | 'invalid'
880
- createdAt: Date
881
- updatedAt: Date
892
+ /**
893
+ * Contact record in the acquisition database.
894
+ * Contains enriched contact data and personalization content.
895
+ * Transformed from AcqContactRow with camelCase properties.
896
+ */
897
+ export interface AcqContact {
898
+ id: string
899
+ organizationId: string
900
+ companyId: string | null
901
+ email: string
902
+ emailValid: 'VALID' | 'INVALID' | 'RISKY' | 'UNKNOWN' | null
903
+ firstName: string | null
904
+ lastName: string | null
905
+ linkedinUrl: string | null
906
+ title: string | null
907
+ headline: string | null
908
+ filterReason: string | null
909
+ openingLine: string | null
910
+ source: string | null
911
+ sourceId: string | null
912
+ pipelineStatus: ContactPipelineStatus | null
913
+ enrichmentData: ContactEnrichmentData | null
914
+ /** Attio Person record ID - set when contact responds and is added to CRM */
915
+ attioPersonId: string | null
916
+ batchId: string | null
917
+ status: 'active' | 'invalid'
918
+ createdAt: Date
919
+ updatedAt: Date
882
920
  }
883
921
  ```
884
922
 
@@ -897,23 +935,23 @@ export type DealPriorityBucketKey = 'needs_response' | 'follow_up_due' | 'waitin
897
935
  ### `DealPriority`
898
936
 
899
937
  ```typescript
900
- export interface DealPriority {
901
- bucketKey: DealPriorityBucketKey
902
- rank: number
903
- label: string
904
- color: string
905
- reason: string
906
- latestActivityAt: string | null
907
- nextActionAt: string | null
938
+ export interface DealPriority {
939
+ bucketKey: DealPriorityBucketKey
940
+ rank: number
941
+ label: string
942
+ color: string
943
+ reason: string
944
+ latestActivityAt: string | null
945
+ nextActionAt: string | null
908
946
  }
909
947
  ```
910
948
 
911
949
  ### `KanbanStageConfig`
912
950
 
913
951
  ```typescript
914
- export interface KanbanStageConfig {
915
- color: string // Mantine color token (e.g. 'blue', 'teal')
916
- label?: string // Optional display label override
952
+ export interface KanbanStageConfig {
953
+ color: string // Mantine color token (e.g. 'blue', 'teal')
954
+ label?: string // Optional display label override
917
955
  }
918
956
  ```
919
957
 
@@ -926,44 +964,44 @@ export type KanbanBoardConfig = Partial<Record<DealStage, KanbanStageConfig>>
926
964
  ### `DealContact`
927
965
 
928
966
  ```typescript
929
- export interface DealContact {
930
- id: string
931
- first_name: string | null
932
- last_name: string | null
933
- email: string
934
- title: string | null
935
- headline: string | null
936
- linkedin_url: string | null
937
- pipeline_status: Record<string, unknown> | null
938
- enrichment_data: Record<string, unknown> | null
939
- company: {
940
- id: string
941
- name: string
942
- domain: string | null
943
- website: string | null
944
- linkedin_url: string | null
945
- segment: string | null
946
- category: string | null
947
- num_employees: number | null
948
- } | null
967
+ export interface DealContact {
968
+ id: string
969
+ first_name: string | null
970
+ last_name: string | null
971
+ email: string
972
+ title: string | null
973
+ headline: string | null
974
+ linkedin_url: string | null
975
+ pipeline_status: Record<string, unknown> | null
976
+ enrichment_data: Record<string, unknown> | null
977
+ company: {
978
+ id: string
979
+ name: string
980
+ domain: string | null
981
+ website: string | null
982
+ linkedin_url: string | null
983
+ segment: string | null
984
+ category: string | null
985
+ num_employees: number | null
986
+ } | null
949
987
  }
950
988
  ```
951
989
 
952
990
  ### `DealFilters`
953
991
 
954
992
  ```typescript
955
- export interface DealFilters {
956
- stage?: DealStage
957
- search?: string
958
- limit?: number
959
- offset?: number
993
+ export interface DealFilters {
994
+ stage?: DealStage
995
+ search?: string
996
+ limit?: number
997
+ offset?: number
960
998
  }
961
999
  ```
962
1000
 
963
1001
  ### `DealListItem`
964
1002
 
965
1003
  ```typescript
966
- /** Deal list item with joined contact and company data */
1004
+ /** Deal list item with joined contact and company data */
967
1005
  export interface DealListItem extends AcqDealRow {
968
1006
  priority: DealPriority
969
1007
  ownership: 'us' | 'them' | null
@@ -981,31 +1019,31 @@ export type DealDetail = DealListItem
981
1019
  ### `AcqDealTaskKind`
982
1020
 
983
1021
  ```typescript
984
- /** Task kind options for a deal task (human follow-up action type) */
1022
+ /** Task kind options for a deal task (human follow-up action type) */
985
1023
  export type AcqDealTaskKind = 'call' | 'email' | 'meeting' | 'other'
986
1024
  ```
987
1025
 
988
1026
  ### `AcqDealTask`
989
1027
 
990
1028
  ```typescript
991
- /**
992
- * A CRM to-do item attached to a deal representing a human follow-up action.
993
- * Transformed from AcqDealTaskRow with camelCase properties.
994
- */
995
- export interface AcqDealTask {
996
- id: string
997
- organizationId: string
998
- dealId: string
999
- title: string
1000
- description: string | null
1001
- kind: AcqDealTaskKind
1002
- dueAt: string | null
1003
- assigneeUserId: string | null
1004
- completedAt: string | null
1005
- completedByUserId: string | null
1006
- createdAt: string
1007
- updatedAt: string
1008
- createdByUserId: string | null
1029
+ /**
1030
+ * A CRM to-do item attached to a deal representing a human follow-up action.
1031
+ * Transformed from AcqDealTaskRow with camelCase properties.
1032
+ */
1033
+ export interface AcqDealTask {
1034
+ id: string
1035
+ organizationId: string
1036
+ dealId: string
1037
+ title: string
1038
+ description: string | null
1039
+ kind: AcqDealTaskKind
1040
+ dueAt: string | null
1041
+ assigneeUserId: string | null
1042
+ completedAt: string | null
1043
+ completedByUserId: string | null
1044
+ createdAt: string
1045
+ updatedAt: string
1046
+ createdByUserId: string | null
1009
1047
  }
1010
1048
  ```
1011
1049
 
@@ -1084,190 +1122,190 @@ export const AcqDealTaskKindSchema = z.enum(['call', 'email', 'meeting', 'other'
1084
1122
  ### `DealIdParamsSchema`
1085
1123
 
1086
1124
  ```typescript
1087
- export const DealIdParamsSchema = z.object({
1088
- dealId: UuidSchema
1125
+ export const DealIdParamsSchema = z.object({
1126
+ dealId: UuidSchema
1089
1127
  })
1090
1128
  ```
1091
1129
 
1092
1130
  ### `DealTaskIdParamsSchema`
1093
1131
 
1094
1132
  ```typescript
1095
- export const DealTaskIdParamsSchema = z.object({
1096
- dealId: UuidSchema,
1097
- taskId: UuidSchema
1133
+ export const DealTaskIdParamsSchema = z.object({
1134
+ dealId: UuidSchema,
1135
+ taskId: UuidSchema
1098
1136
  })
1099
1137
  ```
1100
1138
 
1101
1139
  ### `ListDealsQuerySchema`
1102
1140
 
1103
1141
  ```typescript
1104
- export const ListDealsQuerySchema = z
1105
- .object({
1106
- stage: DealStageSchema.optional(),
1107
- search: z.string().optional(),
1108
- limit: z.coerce.number().int().positive().default(50),
1109
- offset: z.coerce.number().int().min(0).default(0)
1110
- })
1142
+ export const ListDealsQuerySchema = z
1143
+ .object({
1144
+ stage: DealStageSchema.optional(),
1145
+ search: z.string().optional(),
1146
+ limit: z.coerce.number().int().positive().default(50),
1147
+ offset: z.coerce.number().int().min(0).default(0)
1148
+ })
1111
1149
  .strict()
1112
1150
  ```
1113
1151
 
1114
1152
  ### `DealLookupQuerySchema`
1115
1153
 
1116
1154
  ```typescript
1117
- export const DealLookupQuerySchema = z
1118
- .object({
1119
- search: z.string().trim().min(1).max(200).optional(),
1120
- limit: z.coerce.number().int().min(1).max(25).default(10)
1121
- })
1155
+ export const DealLookupQuerySchema = z
1156
+ .object({
1157
+ search: z.string().trim().min(1).max(200).optional(),
1158
+ limit: z.coerce.number().int().min(1).max(25).default(10)
1159
+ })
1122
1160
  .strict()
1123
1161
  ```
1124
1162
 
1125
1163
  ### `ListDealTasksDueQuerySchema`
1126
1164
 
1127
1165
  ```typescript
1128
- export const ListDealTasksDueQuerySchema = z
1129
- .object({
1130
- window: z.enum(['overdue', 'today', 'today_and_overdue', 'upcoming']).optional(),
1131
- assigneeUserId: UuidSchema.optional()
1132
- })
1166
+ export const ListDealTasksDueQuerySchema = z
1167
+ .object({
1168
+ window: z.enum(['overdue', 'today', 'today_and_overdue', 'upcoming']).optional(),
1169
+ assigneeUserId: UuidSchema.optional()
1170
+ })
1133
1171
  .strict()
1134
1172
  ```
1135
1173
 
1136
1174
  ### `CreateDealNoteRequestSchema`
1137
1175
 
1138
1176
  ```typescript
1139
- export const CreateDealNoteRequestSchema = z
1140
- .object({
1141
- body: z.string().trim().min(1).max(10000)
1142
- })
1177
+ export const CreateDealNoteRequestSchema = z
1178
+ .object({
1179
+ body: z.string().trim().min(1).max(10000)
1180
+ })
1143
1181
  .strict()
1144
1182
  ```
1145
1183
 
1146
1184
  ### `CreateDealTaskRequestSchema`
1147
1185
 
1148
1186
  ```typescript
1149
- export const CreateDealTaskRequestSchema = z
1150
- .object({
1151
- title: z.string().trim().min(1).max(255),
1152
- description: z.string().nullable().optional(),
1153
- kind: AcqDealTaskKindSchema.optional(),
1154
- dueAt: z.string().datetime().nullable().optional(),
1155
- assigneeUserId: UuidSchema.nullable().optional()
1156
- })
1187
+ export const CreateDealTaskRequestSchema = z
1188
+ .object({
1189
+ title: z.string().trim().min(1).max(255),
1190
+ description: z.string().nullable().optional(),
1191
+ kind: AcqDealTaskKindSchema.optional(),
1192
+ dueAt: z.string().datetime().nullable().optional(),
1193
+ assigneeUserId: UuidSchema.nullable().optional()
1194
+ })
1157
1195
  .strict()
1158
1196
  ```
1159
1197
 
1160
1198
  ### `TransitionItemRequestSchema`
1161
1199
 
1162
1200
  ```typescript
1163
- export const TransitionItemRequestSchema = z
1164
- .object({
1165
- pipelineKey: z.string().min(1),
1166
- stageKey: z.string().min(1),
1167
- stateKey: z.string().nullable().optional(),
1168
- reason: z.string().optional(),
1169
- expectedUpdatedAt: z.string().datetime().optional()
1170
- })
1201
+ export const TransitionItemRequestSchema = z
1202
+ .object({
1203
+ pipelineKey: z.string().min(1),
1204
+ stageKey: z.string().min(1),
1205
+ stateKey: z.string().nullable().optional(),
1206
+ reason: z.string().optional(),
1207
+ expectedUpdatedAt: z.string().datetime().optional()
1208
+ })
1171
1209
  .strict()
1172
1210
  ```
1173
1211
 
1174
1212
  ### `ExecuteActionParamsSchema`
1175
1213
 
1176
1214
  ```typescript
1177
- export const ExecuteActionParamsSchema = z
1178
- .object({
1179
- dealId: UuidSchema,
1180
- actionKey: NonEmptyStringSchema
1181
- })
1215
+ export const ExecuteActionParamsSchema = z
1216
+ .object({
1217
+ dealId: UuidSchema,
1218
+ actionKey: NonEmptyStringSchema
1219
+ })
1182
1220
  .strict()
1183
1221
  ```
1184
1222
 
1185
1223
  ### `ExecuteActionRequestSchema`
1186
1224
 
1187
1225
  ```typescript
1188
- export const ExecuteActionRequestSchema = z
1189
- .object({
1190
- payload: z.record(z.string(), z.unknown()).optional()
1191
- })
1226
+ export const ExecuteActionRequestSchema = z
1227
+ .object({
1228
+ payload: z.record(z.string(), z.unknown()).optional()
1229
+ })
1192
1230
  .strict()
1193
1231
  ```
1194
1232
 
1195
1233
  ### `DealContactSummarySchema`
1196
1234
 
1197
1235
  ```typescript
1198
- /**
1199
- * Contact summary nested inside DealListItem / DealDetailResponse.
1200
- * Matches the joined shape returned by useDeals / useDealDetail Supabase queries.
1201
- */
1202
- export const DealContactSummarySchema = z.object({
1203
- id: z.string(),
1204
- first_name: z.string().nullable(),
1205
- last_name: z.string().nullable(),
1206
- email: z.string(),
1207
- title: z.string().nullable(),
1208
- headline: z.string().nullable(),
1209
- linkedin_url: z.string().nullable(),
1210
- pipeline_status: z.record(z.string(), z.unknown()).nullable(),
1211
- enrichment_data: z.record(z.string(), z.unknown()).nullable(),
1212
- company: z
1213
- .object({
1214
- id: z.string(),
1215
- name: z.string(),
1216
- domain: z.string().nullable(),
1217
- website: z.string().nullable(),
1218
- linkedin_url: z.string().nullable(),
1219
- segment: z.string().nullable(),
1220
- category: z.string().nullable(),
1221
- num_employees: z.number().nullable()
1222
- })
1223
- .nullable()
1236
+ /**
1237
+ * Contact summary nested inside DealListItem / DealDetailResponse.
1238
+ * Matches the joined shape returned by useDeals / useDealDetail Supabase queries.
1239
+ */
1240
+ export const DealContactSummarySchema = z.object({
1241
+ id: z.string(),
1242
+ first_name: z.string().nullable(),
1243
+ last_name: z.string().nullable(),
1244
+ email: z.string(),
1245
+ title: z.string().nullable(),
1246
+ headline: z.string().nullable(),
1247
+ linkedin_url: z.string().nullable(),
1248
+ pipeline_status: z.record(z.string(), z.unknown()).nullable(),
1249
+ enrichment_data: z.record(z.string(), z.unknown()).nullable(),
1250
+ company: z
1251
+ .object({
1252
+ id: z.string(),
1253
+ name: z.string(),
1254
+ domain: z.string().nullable(),
1255
+ website: z.string().nullable(),
1256
+ linkedin_url: z.string().nullable(),
1257
+ segment: z.string().nullable(),
1258
+ category: z.string().nullable(),
1259
+ num_employees: z.number().nullable()
1260
+ })
1261
+ .nullable()
1224
1262
  })
1225
1263
  ```
1226
1264
 
1227
1265
  ### `DealPrioritySchema`
1228
1266
 
1229
1267
  ```typescript
1230
- export const DealPrioritySchema = z.object({
1231
- bucketKey: z.enum(['needs_response', 'follow_up_due', 'waiting', 'stale', 'closed_low']),
1232
- rank: z.number().int(),
1233
- label: z.string(),
1234
- color: z.string(),
1235
- reason: z.string(),
1236
- latestActivityAt: z.string().nullable(),
1237
- nextActionAt: z.string().nullable()
1268
+ export const DealPrioritySchema = z.object({
1269
+ bucketKey: z.enum(['needs_response', 'follow_up_due', 'waiting', 'stale', 'closed_low']),
1270
+ rank: z.number().int(),
1271
+ label: z.string(),
1272
+ color: z.string(),
1273
+ reason: z.string(),
1274
+ latestActivityAt: z.string().nullable(),
1275
+ nextActionAt: z.string().nullable()
1238
1276
  })
1239
1277
  ```
1240
1278
 
1241
1279
  ### `DealListItemSchema`
1242
1280
 
1243
1281
  ```typescript
1244
- /**
1245
- * Deal list item with joined contact (and company via contact).
1246
- * Matches DealListItem from @repo/core types.
1247
- */
1248
- export const DealListItemSchema = z.object({
1249
- // acq_deals columns
1250
- id: z.string(),
1251
- organization_id: z.string(),
1252
- contact_id: z.string().nullable(),
1253
- contact_email: z.string(),
1254
- pipeline_key: z.string(),
1255
- stage_key: z.string().nullable(),
1256
- state_key: z.string().nullable(),
1257
- activity_log: z.unknown(),
1258
- discovery_data: z.unknown().nullable(),
1259
- discovery_submitted_at: z.string().nullable(),
1260
- discovery_submitted_by: z.string().nullable(),
1261
- proposal_data: z.unknown().nullable(),
1262
- proposal_sent_at: z.string().nullable(),
1263
- proposal_pdf_url: z.string().nullable(),
1264
- signature_envelope_id: z.string().nullable(),
1265
- source_list_id: z.string().nullable(),
1266
- source_type: z.string().nullable(),
1267
- initial_fee: z.number().nullable(),
1268
- monthly_fee: z.number().nullable(),
1269
- closed_lost_at: z.string().nullable(),
1270
- closed_lost_reason: z.string().nullable(),
1282
+ /**
1283
+ * Deal list item with joined contact (and company via contact).
1284
+ * Matches DealListItem from @repo/core types.
1285
+ */
1286
+ export const DealListItemSchema = z.object({
1287
+ // acq_deals columns
1288
+ id: z.string(),
1289
+ organization_id: z.string(),
1290
+ contact_id: z.string().nullable(),
1291
+ contact_email: z.string(),
1292
+ pipeline_key: z.string(),
1293
+ stage_key: z.string().nullable(),
1294
+ state_key: z.string().nullable(),
1295
+ activity_log: z.unknown(),
1296
+ discovery_data: z.unknown().nullable(),
1297
+ discovery_submitted_at: z.string().nullable(),
1298
+ discovery_submitted_by: z.string().nullable(),
1299
+ proposal_data: z.unknown().nullable(),
1300
+ proposal_sent_at: z.string().nullable(),
1301
+ proposal_pdf_url: z.string().nullable(),
1302
+ signature_envelope_id: z.string().nullable(),
1303
+ source_list_id: z.string().nullable(),
1304
+ source_type: z.string().nullable(),
1305
+ initial_fee: z.number().nullable(),
1306
+ monthly_fee: z.number().nullable(),
1307
+ closed_lost_at: z.string().nullable(),
1308
+ closed_lost_reason: z.string().nullable(),
1271
1309
  created_at: z.string(),
1272
1310
  updated_at: z.string(),
1273
1311
  priority: DealPrioritySchema,
@@ -1281,40 +1319,40 @@ export const DealListItemSchema = z.object({
1281
1319
  ### `DealListResponseSchema`
1282
1320
 
1283
1321
  ```typescript
1284
- export const DealListResponseSchema = z.object({
1285
- data: z.array(DealListItemSchema),
1286
- total: z.number().int(),
1287
- limit: z.number().int(),
1288
- offset: z.number().int()
1322
+ export const DealListResponseSchema = z.object({
1323
+ data: z.array(DealListItemSchema),
1324
+ total: z.number().int(),
1325
+ limit: z.number().int(),
1326
+ offset: z.number().int()
1289
1327
  })
1290
1328
  ```
1291
1329
 
1292
1330
  ### `DealDetailResponseSchema`
1293
1331
 
1294
1332
  ```typescript
1295
- /**
1296
- * Deal detail shape — currently the same as a list item (full joined record).
1297
- * Additive fields keep existing DealListItem callers compatible.
1298
- */
1299
- export const DealDetailResponseSchema = DealListItemSchema.extend({
1300
- conversation: DealConversationSchema
1333
+ /**
1334
+ * Deal detail shape — currently the same as a list item (full joined record).
1335
+ * Additive fields keep existing DealListItem callers compatible.
1336
+ */
1337
+ export const DealDetailResponseSchema = DealListItemSchema.extend({
1338
+ conversation: DealConversationSchema
1301
1339
  })
1302
1340
  ```
1303
1341
 
1304
1342
  ### `DealNoteResponseSchema`
1305
1343
 
1306
1344
  ```typescript
1307
- /**
1308
- * Single acq_deal_notes row (camelCase API representation).
1309
- */
1310
- export const DealNoteResponseSchema = z.object({
1311
- id: z.string(),
1312
- dealId: z.string(),
1313
- organizationId: z.string(),
1314
- authorUserId: z.string().nullable(),
1315
- body: z.string(),
1316
- createdAt: z.string(),
1317
- updatedAt: z.string()
1345
+ /**
1346
+ * Single acq_deal_notes row (camelCase API representation).
1347
+ */
1348
+ export const DealNoteResponseSchema = z.object({
1349
+ id: z.string(),
1350
+ dealId: z.string(),
1351
+ organizationId: z.string(),
1352
+ authorUserId: z.string().nullable(),
1353
+ body: z.string(),
1354
+ createdAt: z.string(),
1355
+ updatedAt: z.string()
1318
1356
  })
1319
1357
  ```
1320
1358
 
@@ -1327,24 +1365,24 @@ export const DealNoteListResponseSchema = z.array(DealNoteResponseSchema)
1327
1365
  ### `DealTaskResponseSchema`
1328
1366
 
1329
1367
  ```typescript
1330
- /**
1331
- * Single acq_deal_tasks row (camelCase API representation).
1332
- * Matches AcqDealTask domain type from types.ts.
1333
- */
1334
- export const DealTaskResponseSchema = z.object({
1335
- id: z.string(),
1336
- organizationId: z.string(),
1337
- dealId: z.string(),
1338
- title: z.string(),
1339
- description: z.string().nullable(),
1340
- kind: AcqDealTaskKindSchema,
1341
- dueAt: z.string().nullable(),
1342
- assigneeUserId: z.string().nullable(),
1343
- completedAt: z.string().nullable(),
1344
- completedByUserId: z.string().nullable(),
1345
- createdAt: z.string(),
1346
- updatedAt: z.string(),
1347
- createdByUserId: z.string().nullable()
1368
+ /**
1369
+ * Single acq_deal_tasks row (camelCase API representation).
1370
+ * Matches AcqDealTask domain type from types.ts.
1371
+ */
1372
+ export const DealTaskResponseSchema = z.object({
1373
+ id: z.string(),
1374
+ organizationId: z.string(),
1375
+ dealId: z.string(),
1376
+ title: z.string(),
1377
+ description: z.string().nullable(),
1378
+ kind: AcqDealTaskKindSchema,
1379
+ dueAt: z.string().nullable(),
1380
+ assigneeUserId: z.string().nullable(),
1381
+ completedAt: z.string().nullable(),
1382
+ completedByUserId: z.string().nullable(),
1383
+ createdAt: z.string(),
1384
+ updatedAt: z.string(),
1385
+ createdByUserId: z.string().nullable()
1348
1386
  })
1349
1387
  ```
1350
1388
 
@@ -1357,35 +1395,35 @@ export const DealTaskListResponseSchema = z.array(DealTaskResponseSchema)
1357
1395
  ### `DealSchemas`
1358
1396
 
1359
1397
  ```typescript
1360
- export const DealSchemas = {
1361
- // Params
1362
- DealIdParams: DealIdParamsSchema,
1363
- DealTaskIdParams: DealTaskIdParamsSchema,
1364
-
1365
- // Queries
1366
- ListDealsQuery: ListDealsQuerySchema,
1367
- DealLookupQuery: DealLookupQuerySchema,
1368
- ListDealTasksDueQuery: ListDealTasksDueQuerySchema,
1369
-
1370
- // Request bodies
1371
- CreateDealNoteRequest: CreateDealNoteRequestSchema,
1372
- CreateDealTaskRequest: CreateDealTaskRequestSchema,
1373
- TransitionItemRequest: TransitionItemRequestSchema,
1374
- TransitionDealStateRequest: TransitionDealStateRequestSchema,
1375
- ExecuteActionParams: ExecuteActionParamsSchema,
1376
- ExecuteActionRequest: ExecuteActionRequestSchema,
1377
-
1378
- // Responses
1379
- DealPriority: DealPrioritySchema,
1380
- DealListResponse: DealListResponseSchema,
1381
- DealSummaryResponse: DealSummaryResponseSchema,
1382
- DealLookupResponse: DealLookupResponseSchema,
1383
- ConversationMessage: ConversationMessageSchema,
1384
- DealDetailResponse: DealDetailResponseSchema,
1385
- DealNoteResponse: DealNoteResponseSchema,
1386
- DealNoteListResponse: DealNoteListResponseSchema,
1387
- DealTaskResponse: DealTaskResponseSchema,
1388
- DealTaskListResponse: DealTaskListResponseSchema
1398
+ export const DealSchemas = {
1399
+ // Params
1400
+ DealIdParams: DealIdParamsSchema,
1401
+ DealTaskIdParams: DealTaskIdParamsSchema,
1402
+
1403
+ // Queries
1404
+ ListDealsQuery: ListDealsQuerySchema,
1405
+ DealLookupQuery: DealLookupQuerySchema,
1406
+ ListDealTasksDueQuery: ListDealTasksDueQuerySchema,
1407
+
1408
+ // Request bodies
1409
+ CreateDealNoteRequest: CreateDealNoteRequestSchema,
1410
+ CreateDealTaskRequest: CreateDealTaskRequestSchema,
1411
+ TransitionItemRequest: TransitionItemRequestSchema,
1412
+ TransitionDealStateRequest: TransitionDealStateRequestSchema,
1413
+ ExecuteActionParams: ExecuteActionParamsSchema,
1414
+ ExecuteActionRequest: ExecuteActionRequestSchema,
1415
+
1416
+ // Responses
1417
+ DealPriority: DealPrioritySchema,
1418
+ DealListResponse: DealListResponseSchema,
1419
+ DealSummaryResponse: DealSummaryResponseSchema,
1420
+ DealLookupResponse: DealLookupResponseSchema,
1421
+ ConversationMessage: ConversationMessageSchema,
1422
+ DealDetailResponse: DealDetailResponseSchema,
1423
+ DealNoteResponse: DealNoteResponseSchema,
1424
+ DealNoteListResponse: DealNoteListResponseSchema,
1425
+ DealTaskResponse: DealTaskResponseSchema,
1426
+ DealTaskListResponse: DealTaskListResponseSchema
1389
1427
  }
1390
1428
  ```
1391
1429
 
@@ -1519,443 +1557,443 @@ export type CrmToolMap = {
1519
1557
  ### `WebPost`
1520
1558
 
1521
1559
  ```typescript
1522
- /**
1523
- * Represents a web post from company website scraping.
1524
- * Used for recent blog posts, news, or announcements.
1525
- */
1526
- export interface WebPost {
1527
- /** ISO date string of when the post was published */
1528
- date: string
1529
- /** Title of the web post */
1530
- title: string
1531
- /** Brief summary of the post content */
1532
- summary: string
1533
- /** AI-generated insight about the post's relevance */
1534
- aiInsight?: string
1560
+ /**
1561
+ * Represents a web post from company website scraping.
1562
+ * Used for recent blog posts, news, or announcements.
1563
+ */
1564
+ export interface WebPost {
1565
+ /** ISO date string of when the post was published */
1566
+ date: string
1567
+ /** Title of the web post */
1568
+ title: string
1569
+ /** Brief summary of the post content */
1570
+ summary: string
1571
+ /** AI-generated insight about the post's relevance */
1572
+ aiInsight?: string
1535
1573
  }
1536
1574
  ```
1537
1575
 
1538
1576
  ### `CompanyPipelineStatus`
1539
1577
 
1540
1578
  ```typescript
1541
- /**
1542
- * Tracks pipeline status for a company across all processing stages.
1543
- */
1544
- export interface CompanyPipelineStatus {
1545
- acquired: boolean
1546
- enrichment: {
1547
- [source: string]: {
1548
- status: 'pending' | 'complete' | 'failed' | 'skipped'
1549
- completedAt?: string
1550
- error?: string
1551
- }
1552
- }
1579
+ /**
1580
+ * Tracks pipeline status for a company across all processing stages.
1581
+ */
1582
+ export interface CompanyPipelineStatus {
1583
+ acquired: boolean
1584
+ enrichment: {
1585
+ [source: string]: {
1586
+ status: 'pending' | 'complete' | 'failed' | 'skipped'
1587
+ completedAt?: string
1588
+ error?: string
1589
+ }
1590
+ }
1553
1591
  }
1554
1592
  ```
1555
1593
 
1556
1594
  ### `ContactPipelineStatus`
1557
1595
 
1558
1596
  ```typescript
1559
- /**
1560
- * Tracks pipeline status for a contact across all processing stages.
1561
- */
1562
- export interface ContactPipelineStatus {
1563
- enrichment: {
1564
- [source: string]: {
1565
- status: 'pending' | 'complete' | 'failed' | 'skipped'
1566
- completedAt?: string
1567
- error?: string
1568
- }
1569
- }
1570
- personalization: {
1571
- status: 'pending' | 'complete' | 'failed' | 'skipped'
1572
- completedAt?: string
1573
- }
1574
- outreach: {
1575
- status: 'pending' | 'sent' | 'replied' | 'bounced' | 'opted-out'
1576
- sentAt?: string
1577
- channel?: string
1578
- campaignId?: string
1579
- }
1597
+ /**
1598
+ * Tracks pipeline status for a contact across all processing stages.
1599
+ */
1600
+ export interface ContactPipelineStatus {
1601
+ enrichment: {
1602
+ [source: string]: {
1603
+ status: 'pending' | 'complete' | 'failed' | 'skipped'
1604
+ completedAt?: string
1605
+ error?: string
1606
+ }
1607
+ }
1608
+ personalization: {
1609
+ status: 'pending' | 'complete' | 'failed' | 'skipped'
1610
+ completedAt?: string
1611
+ }
1612
+ outreach: {
1613
+ status: 'pending' | 'sent' | 'replied' | 'bounced' | 'opted-out'
1614
+ sentAt?: string
1615
+ channel?: string
1616
+ campaignId?: string
1617
+ }
1580
1618
  }
1581
1619
  ```
1582
1620
 
1583
1621
  ### `CompanyEnrichmentData`
1584
1622
 
1585
1623
  ```typescript
1586
- /**
1587
- * Enrichment data collected for a company from various sources.
1588
- */
1589
- export interface CompanyEnrichmentData {
1590
- googleMaps?: {
1591
- placeId?: string
1592
- totalScore?: number
1593
- reviewsCount?: number
1594
- address?: string
1595
- phone?: string
1596
- categoryName?: string
1597
- googleMapsUrl?: string
1598
- scrapedAt?: string
1599
- }
1600
- websiteCrawl?: {
1601
- companyDescription?: string
1602
- services?: string[]
1603
- specialties?: string[]
1604
- staff?: Array<{ name: string; title?: string; email?: string }>
1605
- automationGaps?: string[]
1606
- targetAudience?: string
1607
- category?: string
1608
- segment?: string
1609
- recentWin?: string
1610
- emailCount?: number
1611
- pageCount?: number
1612
- totalChars?: number
1613
- crawledAt?: string
1614
- extractedAt?: string
1615
- }
1616
- website?: {
1617
- missionVision?: string
1618
- uniqueAttributes?: string
1619
- coreOfferings?: string
1620
- targetAudience?: string
1621
- companyValues?: string
1622
- businessDescription?: string
1623
- recentPosts?: Array<{ date?: string; title?: string; summary?: string; aiInsight?: string }>
1624
- }
1625
- tomba?: {
1626
- waterfallEmail?: {
1627
- email: string
1628
- name?: string
1629
- title?: string
1630
- department?: string
1631
- } | null
1632
- genericEmail?: string | null
1633
- totalFound?: number
1634
- searchedAt?: string
1635
- }
1624
+ /**
1625
+ * Enrichment data collected for a company from various sources.
1626
+ */
1627
+ export interface CompanyEnrichmentData {
1628
+ googleMaps?: {
1629
+ placeId?: string
1630
+ totalScore?: number
1631
+ reviewsCount?: number
1632
+ address?: string
1633
+ phone?: string
1634
+ categoryName?: string
1635
+ googleMapsUrl?: string
1636
+ scrapedAt?: string
1637
+ }
1638
+ websiteCrawl?: {
1639
+ companyDescription?: string
1640
+ services?: string[]
1641
+ specialties?: string[]
1642
+ staff?: Array<{ name: string; title?: string; email?: string }>
1643
+ automationGaps?: string[]
1644
+ targetAudience?: string
1645
+ category?: string
1646
+ segment?: string
1647
+ recentWin?: string
1648
+ emailCount?: number
1649
+ pageCount?: number
1650
+ totalChars?: number
1651
+ crawledAt?: string
1652
+ extractedAt?: string
1653
+ }
1654
+ website?: {
1655
+ missionVision?: string
1656
+ uniqueAttributes?: string
1657
+ coreOfferings?: string
1658
+ targetAudience?: string
1659
+ companyValues?: string
1660
+ businessDescription?: string
1661
+ recentPosts?: Array<{ date?: string; title?: string; summary?: string; aiInsight?: string }>
1662
+ }
1663
+ tomba?: {
1664
+ waterfallEmail?: {
1665
+ email: string
1666
+ name?: string
1667
+ title?: string
1668
+ department?: string
1669
+ } | null
1670
+ genericEmail?: string | null
1671
+ totalFound?: number
1672
+ searchedAt?: string
1673
+ }
1636
1674
  }
1637
1675
  ```
1638
1676
 
1639
1677
  ### `ContactEnrichmentData`
1640
1678
 
1641
1679
  ```typescript
1642
- /**
1643
- * Enrichment data collected for a contact from various sources.
1644
- */
1645
- export interface ContactEnrichmentData {
1646
- linkedin?: {
1647
- summary?: string
1648
- pastExperience?: string
1649
- education?: string
1650
- activity?: Array<{ date?: string; content?: string }>
1651
- }
1680
+ /**
1681
+ * Enrichment data collected for a contact from various sources.
1682
+ */
1683
+ export interface ContactEnrichmentData {
1684
+ linkedin?: {
1685
+ summary?: string
1686
+ pastExperience?: string
1687
+ education?: string
1688
+ activity?: Array<{ date?: string; content?: string }>
1689
+ }
1652
1690
  }
1653
1691
  ```
1654
1692
 
1655
1693
  ### `AcqList`
1656
1694
 
1657
1695
  ```typescript
1658
- export interface AcqList {
1659
- id: string
1660
- organizationId: string
1661
- name: string
1662
- description: string | null
1663
- batchIds: string[]
1664
- instantlyCampaignId: string | null
1665
- status: ListStatus
1666
- scrapingConfig: ScrapingConfig
1667
- icp: IcpRubric
1668
- pipelineConfig: PipelineConfig
1669
- metadata: AcqListMetadata
1670
- launchedAt: Date | null
1671
- completedAt: Date | null
1672
- createdAt: Date
1696
+ export interface AcqList {
1697
+ id: string
1698
+ organizationId: string
1699
+ name: string
1700
+ description: string | null
1701
+ batchIds: string[]
1702
+ instantlyCampaignId: string | null
1703
+ status: ListStatus
1704
+ scrapingConfig: ScrapingConfig
1705
+ icp: IcpRubric
1706
+ pipelineConfig: PipelineConfig
1707
+ metadata: AcqListMetadata
1708
+ launchedAt: Date | null
1709
+ completedAt: Date | null
1710
+ createdAt: Date
1673
1711
  }
1674
1712
  ```
1675
1713
 
1676
1714
  ### `AcqCompany`
1677
1715
 
1678
1716
  ```typescript
1679
- /**
1680
- * Company record in the acquisition database.
1681
- * Contains enriched company data from various sources.
1682
- * Transformed from AcqCompanyRow with camelCase properties.
1683
- */
1684
- export interface AcqCompany {
1685
- id: string
1686
- organizationId: string
1687
- name: string
1688
- domain: string | null
1689
- linkedinUrl: string | null
1690
- website: string | null
1691
- numEmployees: number | null
1692
- foundedYear: number | null
1693
- locationCity: string | null
1694
- locationState: string | null
1695
- category: string | null
1696
- categoryPain: string | null
1697
- segment: string | null
1698
- pipelineStatus: CompanyPipelineStatus | null
1699
- enrichmentData: CompanyEnrichmentData | null
1700
- source: string | null
1701
- batchId: string | null
1702
- status: 'active' | 'invalid'
1703
- verticalResearch: string | null
1704
- /** Track A: flat qualification score (null until a scoring rubric is defined). Added by W1 migration. */
1705
- qualificationScore: number | null
1706
- /** Track A: flat qualification signals jsonb preserving the result payload shape. Added by W1 migration. */
1707
- qualificationSignals: Record<string, unknown> | null
1708
- /** Track A: key identifying the rubric used for qualification. Added by W1 migration. */
1709
- qualificationRubricKey: string | null
1710
- createdAt: Date
1711
- updatedAt: Date
1717
+ /**
1718
+ * Company record in the acquisition database.
1719
+ * Contains enriched company data from various sources.
1720
+ * Transformed from AcqCompanyRow with camelCase properties.
1721
+ */
1722
+ export interface AcqCompany {
1723
+ id: string
1724
+ organizationId: string
1725
+ name: string
1726
+ domain: string | null
1727
+ linkedinUrl: string | null
1728
+ website: string | null
1729
+ numEmployees: number | null
1730
+ foundedYear: number | null
1731
+ locationCity: string | null
1732
+ locationState: string | null
1733
+ category: string | null
1734
+ categoryPain: string | null
1735
+ segment: string | null
1736
+ pipelineStatus: CompanyPipelineStatus | null
1737
+ enrichmentData: CompanyEnrichmentData | null
1738
+ source: string | null
1739
+ batchId: string | null
1740
+ status: 'active' | 'invalid'
1741
+ verticalResearch: string | null
1742
+ /** Track A: flat qualification score (null until a scoring rubric is defined). Added by W1 migration. */
1743
+ qualificationScore: number | null
1744
+ /** Track A: flat qualification signals jsonb preserving the result payload shape. Added by W1 migration. */
1745
+ qualificationSignals: Record<string, unknown> | null
1746
+ /** Track A: key identifying the rubric used for qualification. Added by W1 migration. */
1747
+ qualificationRubricKey: string | null
1748
+ createdAt: Date
1749
+ updatedAt: Date
1712
1750
  }
1713
1751
  ```
1714
1752
 
1715
1753
  ### `AcqContact`
1716
1754
 
1717
1755
  ```typescript
1718
- /**
1719
- * Contact record in the acquisition database.
1720
- * Contains enriched contact data and personalization content.
1721
- * Transformed from AcqContactRow with camelCase properties.
1722
- */
1723
- export interface AcqContact {
1724
- id: string
1725
- organizationId: string
1726
- companyId: string | null
1727
- email: string
1728
- emailValid: 'VALID' | 'INVALID' | 'RISKY' | 'UNKNOWN' | null
1729
- firstName: string | null
1730
- lastName: string | null
1731
- linkedinUrl: string | null
1732
- title: string | null
1733
- headline: string | null
1734
- filterReason: string | null
1735
- openingLine: string | null
1736
- source: string | null
1737
- sourceId: string | null
1738
- pipelineStatus: ContactPipelineStatus | null
1739
- enrichmentData: ContactEnrichmentData | null
1740
- /** Attio Person record ID - set when contact responds and is added to CRM */
1741
- attioPersonId: string | null
1742
- batchId: string | null
1743
- status: 'active' | 'invalid'
1744
- createdAt: Date
1745
- updatedAt: Date
1756
+ /**
1757
+ * Contact record in the acquisition database.
1758
+ * Contains enriched contact data and personalization content.
1759
+ * Transformed from AcqContactRow with camelCase properties.
1760
+ */
1761
+ export interface AcqContact {
1762
+ id: string
1763
+ organizationId: string
1764
+ companyId: string | null
1765
+ email: string
1766
+ emailValid: 'VALID' | 'INVALID' | 'RISKY' | 'UNKNOWN' | null
1767
+ firstName: string | null
1768
+ lastName: string | null
1769
+ linkedinUrl: string | null
1770
+ title: string | null
1771
+ headline: string | null
1772
+ filterReason: string | null
1773
+ openingLine: string | null
1774
+ source: string | null
1775
+ sourceId: string | null
1776
+ pipelineStatus: ContactPipelineStatus | null
1777
+ enrichmentData: ContactEnrichmentData | null
1778
+ /** Attio Person record ID - set when contact responds and is added to CRM */
1779
+ attioPersonId: string | null
1780
+ batchId: string | null
1781
+ status: 'active' | 'invalid'
1782
+ createdAt: Date
1783
+ updatedAt: Date
1746
1784
  }
1747
1785
  ```
1748
1786
 
1749
1787
  ### `ListTelemetry`
1750
1788
 
1751
1789
  ```typescript
1752
- /**
1753
- * Live-scan aggregate telemetry for a single list, computed on demand from
1754
- * the list junction tables and current contact deliverability state.
1755
- * `stageCounts` are attempted counts from list-row processing_state.
1756
- */
1757
- export interface ListTelemetry {
1758
- listId: string
1759
- totalCompanies: number
1760
- totalContacts: number
1761
- stageCounts: {
1762
- populated: number
1763
- extracted: number
1764
- qualified: number
1765
- discovered: number
1766
- verified: number
1767
- personalized: number
1768
- uploaded: number
1769
- }
1770
- deliverability: {
1771
- valid: number
1772
- risky: number
1773
- invalid: number
1774
- unknown: number
1775
- bounced: number
1776
- }
1777
- /** Reserved -- active workflow IDs associated with this list. */
1778
- activeWorkflows?: string[]
1790
+ /**
1791
+ * Live-scan aggregate telemetry for a single list, computed on demand from
1792
+ * the list junction tables and current contact deliverability state.
1793
+ * `stageCounts` are attempted counts from list-row processing_state.
1794
+ */
1795
+ export interface ListTelemetry {
1796
+ listId: string
1797
+ totalCompanies: number
1798
+ totalContacts: number
1799
+ stageCounts: {
1800
+ populated: number
1801
+ extracted: number
1802
+ qualified: number
1803
+ discovered: number
1804
+ verified: number
1805
+ personalized: number
1806
+ uploaded: number
1807
+ }
1808
+ deliverability: {
1809
+ valid: number
1810
+ risky: number
1811
+ invalid: number
1812
+ unknown: number
1813
+ bounced: number
1814
+ }
1815
+ /** Reserved -- active workflow IDs associated with this list. */
1816
+ activeWorkflows?: string[]
1779
1817
  }
1780
1818
  ```
1781
1819
 
1782
1820
  ### `ListStageCountsSchema`
1783
1821
 
1784
1822
  ```typescript
1785
- export const ListStageCountsSchema = z.object({
1786
- // Attempted counts by canonical lead-gen stage. The detailed status
1787
- // distribution lives on ListProgress; telemetry keeps the overview payload small.
1788
- stageCounts: z.object({
1789
- populated: z.number().int(),
1790
- extracted: z.number().int(),
1791
- qualified: z.number().int(),
1792
- discovered: z.number().int(),
1793
- verified: z.number().int(),
1794
- personalized: z.number().int(),
1795
- uploaded: z.number().int()
1796
- }),
1797
- deliverability: z.object({
1798
- valid: z.number().int(),
1799
- risky: z.number().int(),
1800
- invalid: z.number().int(),
1801
- unknown: z.number().int(),
1802
- bounced: z.number().int()
1803
- })
1823
+ export const ListStageCountsSchema = z.object({
1824
+ // Attempted counts by canonical lead-gen stage. The detailed status
1825
+ // distribution lives on ListProgress; telemetry keeps the overview payload small.
1826
+ stageCounts: z.object({
1827
+ populated: z.number().int(),
1828
+ extracted: z.number().int(),
1829
+ qualified: z.number().int(),
1830
+ discovered: z.number().int(),
1831
+ verified: z.number().int(),
1832
+ personalized: z.number().int(),
1833
+ uploaded: z.number().int()
1834
+ }),
1835
+ deliverability: z.object({
1836
+ valid: z.number().int(),
1837
+ risky: z.number().int(),
1838
+ invalid: z.number().int(),
1839
+ unknown: z.number().int(),
1840
+ bounced: z.number().int()
1841
+ })
1804
1842
  })
1805
1843
  ```
1806
1844
 
1807
1845
  ### `ListTelemetrySchema`
1808
1846
 
1809
1847
  ```typescript
1810
- export const ListTelemetrySchema = z.object({
1811
- listId: UuidSchema,
1812
- totalCompanies: z.number().int(),
1813
- totalContacts: z.number().int(),
1814
- stageCounts: ListStageCountsSchema.shape.stageCounts,
1815
- deliverability: ListStageCountsSchema.shape.deliverability,
1816
- activeWorkflows: z.array(z.string()).optional()
1848
+ export const ListTelemetrySchema = z.object({
1849
+ listId: UuidSchema,
1850
+ totalCompanies: z.number().int(),
1851
+ totalContacts: z.number().int(),
1852
+ stageCounts: ListStageCountsSchema.shape.stageCounts,
1853
+ deliverability: ListStageCountsSchema.shape.deliverability,
1854
+ activeWorkflows: z.array(z.string()).optional()
1817
1855
  })
1818
1856
  ```
1819
1857
 
1820
1858
  ### `ListIdParamsSchema`
1821
1859
 
1822
1860
  ```typescript
1823
- export const ListIdParamsSchema = z.object({
1824
- listId: UuidSchema
1861
+ export const ListIdParamsSchema = z.object({
1862
+ listId: UuidSchema
1825
1863
  })
1826
1864
  ```
1827
1865
 
1828
1866
  ### `CreateListRequestSchema`
1829
1867
 
1830
1868
  ```typescript
1831
- export const CreateListRequestSchema = z
1832
- .object({
1833
- name: z.string().trim().min(1).max(255),
1834
- description: z.string().trim().nullable().optional(),
1835
- status: ListStatusSchema.optional(),
1836
- buildTemplateId: ProspectingBuildTemplateIdSchema.optional(),
1837
- scrapingConfig: ScrapingConfigSchema.optional(),
1838
- icp: IcpRubricSchema.optional(),
1839
- pipelineConfig: PipelineConfigSchema.optional()
1840
- })
1869
+ export const CreateListRequestSchema = z
1870
+ .object({
1871
+ name: z.string().trim().min(1).max(255),
1872
+ description: z.string().trim().nullable().optional(),
1873
+ status: ListStatusSchema.optional(),
1874
+ buildTemplateId: ProspectingBuildTemplateIdSchema.optional(),
1875
+ scrapingConfig: ScrapingConfigSchema.optional(),
1876
+ icp: IcpRubricSchema.optional(),
1877
+ pipelineConfig: PipelineConfigSchema.optional()
1878
+ })
1841
1879
  .strict()
1842
1880
  ```
1843
1881
 
1844
1882
  ### `UpdateListRequestSchema`
1845
1883
 
1846
1884
  ```typescript
1847
- export const UpdateListRequestSchema = z
1848
- .object({
1849
- name: z.string().trim().min(1).max(255).optional(),
1850
- description: z.string().trim().nullable().optional(),
1851
- batchIds: z.array(z.string()).optional(),
1852
- buildTemplateId: ProspectingBuildTemplateIdSchema.optional(),
1853
- confirmBuildTemplateChange: z.literal(true).optional()
1854
- })
1855
- .strict()
1856
- .refine(
1857
- (data) =>
1858
- data.name !== undefined ||
1859
- data.description !== undefined ||
1860
- data.batchIds !== undefined ||
1861
- data.buildTemplateId !== undefined,
1862
- {
1863
- message: 'At least one field (name, description, batchIds, or buildTemplateId) must be provided'
1864
- }
1865
- )
1866
- .refine((data) => data.buildTemplateId === undefined || data.confirmBuildTemplateChange === true, {
1867
- message: 'confirmBuildTemplateChange must be true when changing buildTemplateId',
1868
- path: ['confirmBuildTemplateChange']
1885
+ export const UpdateListRequestSchema = z
1886
+ .object({
1887
+ name: z.string().trim().min(1).max(255).optional(),
1888
+ description: z.string().trim().nullable().optional(),
1889
+ batchIds: z.array(z.string()).optional(),
1890
+ buildTemplateId: ProspectingBuildTemplateIdSchema.optional(),
1891
+ confirmBuildTemplateChange: z.literal(true).optional()
1892
+ })
1893
+ .strict()
1894
+ .refine(
1895
+ (data) =>
1896
+ data.name !== undefined ||
1897
+ data.description !== undefined ||
1898
+ data.batchIds !== undefined ||
1899
+ data.buildTemplateId !== undefined,
1900
+ {
1901
+ message: 'At least one field (name, description, batchIds, or buildTemplateId) must be provided'
1902
+ }
1903
+ )
1904
+ .refine((data) => data.buildTemplateId === undefined || data.confirmBuildTemplateChange === true, {
1905
+ message: 'confirmBuildTemplateChange must be true when changing buildTemplateId',
1906
+ path: ['confirmBuildTemplateChange']
1869
1907
  })
1870
1908
  ```
1871
1909
 
1872
1910
  ### `UpdateListConfigRequestSchema`
1873
1911
 
1874
1912
  ```typescript
1875
- /**
1876
- * Partial patch for the three jsonb config columns. UI sends only the edited
1877
- * subtree; server writes the field as-is (no deep merge — each column is
1878
- * replaced atomically when present in the patch).
1879
- */
1880
- export const UpdateListConfigRequestSchema = z
1881
- .object({
1882
- scrapingConfig: ScrapingConfigSchema.partial().optional(),
1883
- icp: IcpRubricSchema.partial().optional(),
1884
- pipelineConfig: PipelineConfigSchema.partial().optional()
1885
- })
1886
- .strict()
1887
- .refine((data) => data.scrapingConfig !== undefined || data.icp !== undefined || data.pipelineConfig !== undefined, {
1888
- message: 'At least one of scrapingConfig, icp, or pipelineConfig must be provided'
1913
+ /**
1914
+ * Partial patch for the three jsonb config columns. UI sends only the edited
1915
+ * subtree; server writes the field as-is (no deep merge — each column is
1916
+ * replaced atomically when present in the patch).
1917
+ */
1918
+ export const UpdateListConfigRequestSchema = z
1919
+ .object({
1920
+ scrapingConfig: ScrapingConfigSchema.partial().optional(),
1921
+ icp: IcpRubricSchema.partial().optional(),
1922
+ pipelineConfig: PipelineConfigSchema.partial().optional()
1923
+ })
1924
+ .strict()
1925
+ .refine((data) => data.scrapingConfig !== undefined || data.icp !== undefined || data.pipelineConfig !== undefined, {
1926
+ message: 'At least one of scrapingConfig, icp, or pipelineConfig must be provided'
1889
1927
  })
1890
1928
  ```
1891
1929
 
1892
1930
  ### `AddCompaniesToListRequestSchema`
1893
1931
 
1894
1932
  ```typescript
1895
- export const AddCompaniesToListRequestSchema = z
1896
- .object({
1897
- companyIds: z.array(UuidSchema).min(1).max(1000)
1898
- })
1933
+ export const AddCompaniesToListRequestSchema = z
1934
+ .object({
1935
+ companyIds: z.array(UuidSchema).min(1).max(1000)
1936
+ })
1899
1937
  .strict()
1900
1938
  ```
1901
1939
 
1902
1940
  ### `RemoveCompaniesFromListRequestSchema`
1903
1941
 
1904
1942
  ```typescript
1905
- export const RemoveCompaniesFromListRequestSchema = z
1906
- .object({
1907
- companyIds: z.array(UuidSchema).min(1).max(1000)
1908
- })
1943
+ export const RemoveCompaniesFromListRequestSchema = z
1944
+ .object({
1945
+ companyIds: z.array(UuidSchema).min(1).max(1000)
1946
+ })
1909
1947
  .strict()
1910
1948
  ```
1911
1949
 
1912
1950
  ### `AddContactsToListRequestSchema`
1913
1951
 
1914
1952
  ```typescript
1915
- export const AddContactsToListRequestSchema = z
1916
- .object({
1917
- contactIds: z.array(UuidSchema).min(1).max(1000)
1918
- })
1953
+ export const AddContactsToListRequestSchema = z
1954
+ .object({
1955
+ contactIds: z.array(UuidSchema).min(1).max(1000)
1956
+ })
1919
1957
  .strict()
1920
1958
  ```
1921
1959
 
1922
1960
  ### `RecordListExecutionRequestSchema`
1923
1961
 
1924
1962
  ```typescript
1925
- export const RecordListExecutionRequestSchema = z
1926
- .object({
1927
- executionId: UuidSchema,
1928
- configSnapshot: z.record(z.string(), z.unknown()).optional()
1929
- })
1963
+ export const RecordListExecutionRequestSchema = z
1964
+ .object({
1965
+ executionId: UuidSchema,
1966
+ configSnapshot: z.record(z.string(), z.unknown()).optional()
1967
+ })
1930
1968
  .strict()
1931
1969
  ```
1932
1970
 
1933
1971
  ### `AcqListResponseSchema`
1934
1972
 
1935
1973
  ```typescript
1936
- /**
1937
- * Single list as returned by /api/acquisition/lists/:id etc.
1938
- * Camel-cased domain shape matching AcqList in types.ts.
1939
- */
1940
- export const AcqListResponseSchema = z.object({
1941
- id: z.string(),
1942
- organizationId: z.string(),
1943
- name: z.string(),
1944
- description: z.string().nullable(),
1945
- batchIds: z.array(z.string()),
1946
- instantlyCampaignId: z.string().nullable(),
1947
- /** Lifecycle status (draft | enriching | launched | closing | archived). */
1948
- status: ListStatusSchema,
1949
- metadata: AcqListMetadataSchema,
1950
- launchedAt: z.string().nullable(),
1951
- completedAt: z.string().nullable(),
1952
- createdAt: z.string(),
1953
- /** Scraping criteria stored as jsonb on the row. */
1954
- scrapingConfig: ScrapingConfigSchema,
1955
- /** ICP / qualification rubric stored as jsonb on the row. */
1956
- icp: IcpRubricSchema,
1957
- /** Pipeline presentation contract stored as jsonb on the row. */
1958
- pipelineConfig: PipelineConfigSchema
1974
+ /**
1975
+ * Single list as returned by /api/acquisition/lists/:id etc.
1976
+ * Camel-cased domain shape matching AcqList in types.ts.
1977
+ */
1978
+ export const AcqListResponseSchema = z.object({
1979
+ id: z.string(),
1980
+ organizationId: z.string(),
1981
+ name: z.string(),
1982
+ description: z.string().nullable(),
1983
+ batchIds: z.array(z.string()),
1984
+ instantlyCampaignId: z.string().nullable(),
1985
+ /** Lifecycle status (draft | enriching | launched | closing | archived). */
1986
+ status: ListStatusSchema,
1987
+ metadata: AcqListMetadataSchema,
1988
+ launchedAt: z.string().nullable(),
1989
+ completedAt: z.string().nullable(),
1990
+ createdAt: z.string(),
1991
+ /** Scraping criteria stored as jsonb on the row. */
1992
+ scrapingConfig: ScrapingConfigSchema,
1993
+ /** ICP / qualification rubric stored as jsonb on the row. */
1994
+ icp: IcpRubricSchema,
1995
+ /** Pipeline presentation contract stored as jsonb on the row. */
1996
+ pipelineConfig: PipelineConfigSchema
1959
1997
  })
1960
1998
  ```
1961
1999
 
@@ -1980,17 +2018,18 @@ export const ListTelemetryListResponseSchema = z.array(ListTelemetrySchema)
1980
2018
  ### `ListExecutionSummarySchema`
1981
2019
 
1982
2020
  ```typescript
1983
- /**
1984
- * Row from acq_list_executions joined with the execution summary,
1985
- * shaped for the /lists/:id/executions response.
1986
- */
1987
- export const ListExecutionSummarySchema = z.object({
1988
- executionId: z.string(),
1989
- resourceId: z.string(),
1990
- status: z.string(),
1991
- createdAt: z.string(),
1992
- completedAt: z.string().nullable(),
1993
- durationMs: z.number().int().nullable()
2021
+ /**
2022
+ * Row from acq_list_executions joined with the execution summary,
2023
+ * shaped for the /lists/:id/executions response.
2024
+ */
2025
+ export const ListExecutionSummarySchema = z.object({
2026
+ executionId: z.string(),
2027
+ resourceId: z.string(),
2028
+ status: z.string(),
2029
+ createdAt: z.string(),
2030
+ completedAt: z.string().nullable(),
2031
+ durationMs: z.number().int().nullable(),
2032
+ input: z.unknown().nullable().optional()
1994
2033
  })
1995
2034
  ```
1996
2035
 
@@ -2021,282 +2060,282 @@ export const AcqEmailValidSchema = z.enum(['VALID', 'INVALID', 'RISKY', 'UNKNOWN
2021
2060
  ### `CompanyIdParamsSchema`
2022
2061
 
2023
2062
  ```typescript
2024
- export const CompanyIdParamsSchema = z.object({
2025
- companyId: UuidSchema
2063
+ export const CompanyIdParamsSchema = z.object({
2064
+ companyId: UuidSchema
2026
2065
  })
2027
2066
  ```
2028
2067
 
2029
2068
  ### `ContactIdParamsSchema`
2030
2069
 
2031
2070
  ```typescript
2032
- export const ContactIdParamsSchema = z.object({
2033
- contactId: UuidSchema
2071
+ export const ContactIdParamsSchema = z.object({
2072
+ contactId: UuidSchema
2034
2073
  })
2035
2074
  ```
2036
2075
 
2037
2076
  ### `ListCompaniesQuerySchema`
2038
2077
 
2039
2078
  ```typescript
2040
- export const ListCompaniesQuerySchema = z
2041
- .object({
2042
- search: z.string().trim().min(1).max(200).optional(),
2043
- listId: UuidSchema.optional(),
2044
- domain: z.string().trim().min(1).max(255).optional(),
2045
- website: z.string().trim().min(1).max(2048).optional(),
2046
- segment: z.string().trim().min(1).max(255).optional(),
2047
- category: z.string().trim().min(1).max(255).optional(),
2048
- batchId: z.string().trim().min(1).max(255).optional(),
2049
- status: AcqCompanyStatusSchema.optional(),
2050
- includeAll: QueryBooleanSchema.optional(),
2051
- limit: z.coerce.number().int().min(1).max(5000).default(50),
2052
- offset: z.coerce.number().int().min(0).default(0)
2053
- })
2079
+ export const ListCompaniesQuerySchema = z
2080
+ .object({
2081
+ search: z.string().trim().min(1).max(200).optional(),
2082
+ listId: UuidSchema.optional(),
2083
+ domain: z.string().trim().min(1).max(255).optional(),
2084
+ website: z.string().trim().min(1).max(2048).optional(),
2085
+ segment: z.string().trim().min(1).max(255).optional(),
2086
+ category: z.string().trim().min(1).max(255).optional(),
2087
+ batchId: z.string().trim().min(1).max(255).optional(),
2088
+ status: AcqCompanyStatusSchema.optional(),
2089
+ includeAll: QueryBooleanSchema.optional(),
2090
+ limit: z.coerce.number().int().min(1).max(5000).default(50),
2091
+ offset: z.coerce.number().int().min(0).default(0)
2092
+ })
2054
2093
  .strict()
2055
2094
  ```
2056
2095
 
2057
2096
  ### `ListContactsQuerySchema`
2058
2097
 
2059
2098
  ```typescript
2060
- export const ListContactsQuerySchema = z
2061
- .object({
2062
- search: z.string().trim().min(1).max(200).optional(),
2063
- listId: UuidSchema.optional(),
2064
- openingLineIsNull: QueryBooleanSchema.optional(),
2065
- batchId: z.string().trim().min(1).max(255).optional(),
2066
- contactStatus: AcqContactStatusSchema.optional(),
2067
- limit: z.coerce.number().int().min(1).max(5000).default(5000),
2068
- offset: z.coerce.number().int().min(0).default(0)
2069
- })
2099
+ export const ListContactsQuerySchema = z
2100
+ .object({
2101
+ search: z.string().trim().min(1).max(200).optional(),
2102
+ listId: UuidSchema.optional(),
2103
+ openingLineIsNull: QueryBooleanSchema.optional(),
2104
+ batchId: z.string().trim().min(1).max(255).optional(),
2105
+ contactStatus: AcqContactStatusSchema.optional(),
2106
+ limit: z.coerce.number().int().min(1).max(5000).default(5000),
2107
+ offset: z.coerce.number().int().min(0).default(0)
2108
+ })
2070
2109
  .strict()
2071
2110
  ```
2072
2111
 
2073
2112
  ### `CreateCompanyRequestSchema`
2074
2113
 
2075
2114
  ```typescript
2076
- export const CreateCompanyRequestSchema = z
2077
- .object({
2078
- name: z.string().trim().min(1).max(255),
2079
- domain: z.string().trim().min(1).max(255).optional(),
2080
- linkedinUrl: z.string().trim().url().optional(),
2081
- website: z.string().trim().url().optional(),
2082
- numEmployees: z.number().int().min(0).optional(),
2083
- foundedYear: z.number().int().optional(),
2084
- locationCity: z.string().trim().min(1).max(255).optional(),
2085
- locationState: z.string().trim().min(1).max(255).optional(),
2086
- category: z.string().trim().min(1).max(255).optional(),
2087
- source: z.string().trim().min(1).max(255).optional(),
2088
- batchId: z.string().trim().min(1).max(255).optional(),
2089
- verticalResearch: z.string().trim().min(1).max(5000).optional()
2090
- })
2115
+ export const CreateCompanyRequestSchema = z
2116
+ .object({
2117
+ name: z.string().trim().min(1).max(255),
2118
+ domain: z.string().trim().min(1).max(255).optional(),
2119
+ linkedinUrl: z.string().trim().url().optional(),
2120
+ website: z.string().trim().url().optional(),
2121
+ numEmployees: z.number().int().min(0).optional(),
2122
+ foundedYear: z.number().int().optional(),
2123
+ locationCity: z.string().trim().min(1).max(255).optional(),
2124
+ locationState: z.string().trim().min(1).max(255).optional(),
2125
+ category: z.string().trim().min(1).max(255).optional(),
2126
+ source: z.string().trim().min(1).max(255).optional(),
2127
+ batchId: z.string().trim().min(1).max(255).optional(),
2128
+ verticalResearch: z.string().trim().min(1).max(5000).optional()
2129
+ })
2091
2130
  .strict()
2092
2131
  ```
2093
2132
 
2094
2133
  ### `UpdateCompanyRequestSchema`
2095
2134
 
2096
2135
  ```typescript
2097
- export const UpdateCompanyRequestSchema = z
2098
- .object({
2099
- name: z.string().trim().min(1).max(255).optional(),
2100
- domain: z.string().trim().min(1).max(255).optional(),
2101
- linkedinUrl: z.string().trim().url().optional(),
2102
- website: z.string().trim().url().optional(),
2103
- numEmployees: z.number().int().min(0).optional(),
2104
- foundedYear: z.number().int().optional(),
2105
- locationCity: z.string().trim().min(1).max(255).optional(),
2106
- locationState: z.string().trim().min(1).max(255).optional(),
2107
- category: z.string().trim().min(1).max(255).optional(),
2108
- segment: z.string().trim().min(1).max(255).optional(),
2109
- pipelineStatus: z.record(z.string(), z.unknown()).optional(),
2110
- enrichmentData: z.record(z.string(), z.unknown()).optional(),
2111
- source: z.string().trim().min(1).max(255).optional(),
2112
- batchId: z.string().trim().min(1).max(255).optional(),
2113
- status: AcqCompanyStatusSchema.optional(),
2114
- verticalResearch: z.string().trim().min(1).max(5000).nullable().optional()
2115
- })
2116
- .strict()
2117
- .refine(
2118
- (data) =>
2119
- data.name !== undefined ||
2120
- data.domain !== undefined ||
2121
- data.linkedinUrl !== undefined ||
2122
- data.website !== undefined ||
2123
- data.numEmployees !== undefined ||
2124
- data.foundedYear !== undefined ||
2125
- data.locationCity !== undefined ||
2126
- data.locationState !== undefined ||
2127
- data.category !== undefined ||
2128
- data.segment !== undefined ||
2129
- data.pipelineStatus !== undefined ||
2130
- data.enrichmentData !== undefined ||
2131
- data.source !== undefined ||
2132
- data.batchId !== undefined ||
2133
- data.status !== undefined ||
2134
- data.verticalResearch !== undefined,
2135
- {
2136
- message: 'At least one field must be provided'
2137
- }
2136
+ export const UpdateCompanyRequestSchema = z
2137
+ .object({
2138
+ name: z.string().trim().min(1).max(255).optional(),
2139
+ domain: z.string().trim().min(1).max(255).optional(),
2140
+ linkedinUrl: z.string().trim().url().optional(),
2141
+ website: z.string().trim().url().optional(),
2142
+ numEmployees: z.number().int().min(0).optional(),
2143
+ foundedYear: z.number().int().optional(),
2144
+ locationCity: z.string().trim().min(1).max(255).optional(),
2145
+ locationState: z.string().trim().min(1).max(255).optional(),
2146
+ category: z.string().trim().min(1).max(255).optional(),
2147
+ segment: z.string().trim().min(1).max(255).optional(),
2148
+ pipelineStatus: z.record(z.string(), z.unknown()).optional(),
2149
+ enrichmentData: z.record(z.string(), z.unknown()).optional(),
2150
+ source: z.string().trim().min(1).max(255).optional(),
2151
+ batchId: z.string().trim().min(1).max(255).optional(),
2152
+ status: AcqCompanyStatusSchema.optional(),
2153
+ verticalResearch: z.string().trim().min(1).max(5000).nullable().optional()
2154
+ })
2155
+ .strict()
2156
+ .refine(
2157
+ (data) =>
2158
+ data.name !== undefined ||
2159
+ data.domain !== undefined ||
2160
+ data.linkedinUrl !== undefined ||
2161
+ data.website !== undefined ||
2162
+ data.numEmployees !== undefined ||
2163
+ data.foundedYear !== undefined ||
2164
+ data.locationCity !== undefined ||
2165
+ data.locationState !== undefined ||
2166
+ data.category !== undefined ||
2167
+ data.segment !== undefined ||
2168
+ data.pipelineStatus !== undefined ||
2169
+ data.enrichmentData !== undefined ||
2170
+ data.source !== undefined ||
2171
+ data.batchId !== undefined ||
2172
+ data.status !== undefined ||
2173
+ data.verticalResearch !== undefined,
2174
+ {
2175
+ message: 'At least one field must be provided'
2176
+ }
2138
2177
  )
2139
2178
  ```
2140
2179
 
2141
2180
  ### `CreateContactRequestSchema`
2142
2181
 
2143
2182
  ```typescript
2144
- export const CreateContactRequestSchema = z
2145
- .object({
2146
- email: z.string().trim().email(),
2147
- companyId: UuidSchema.optional(),
2148
- firstName: z.string().trim().min(1).max(255).optional(),
2149
- lastName: z.string().trim().min(1).max(255).optional(),
2150
- linkedinUrl: z.string().trim().url().optional(),
2151
- title: z.string().trim().min(1).max(255).optional(),
2152
- source: z.string().trim().min(1).max(255).optional(),
2153
- sourceId: z.string().trim().min(1).max(255).optional(),
2154
- batchId: z.string().trim().min(1).max(255).optional()
2155
- })
2183
+ export const CreateContactRequestSchema = z
2184
+ .object({
2185
+ email: z.string().trim().email(),
2186
+ companyId: UuidSchema.optional(),
2187
+ firstName: z.string().trim().min(1).max(255).optional(),
2188
+ lastName: z.string().trim().min(1).max(255).optional(),
2189
+ linkedinUrl: z.string().trim().url().optional(),
2190
+ title: z.string().trim().min(1).max(255).optional(),
2191
+ source: z.string().trim().min(1).max(255).optional(),
2192
+ sourceId: z.string().trim().min(1).max(255).optional(),
2193
+ batchId: z.string().trim().min(1).max(255).optional()
2194
+ })
2156
2195
  .strict()
2157
2196
  ```
2158
2197
 
2159
2198
  ### `UpdateContactRequestSchema`
2160
2199
 
2161
2200
  ```typescript
2162
- export const UpdateContactRequestSchema = z
2163
- .object({
2164
- companyId: UuidSchema.optional(),
2165
- emailValid: AcqEmailValidSchema.optional(),
2166
- firstName: z.string().trim().min(1).max(255).optional(),
2167
- lastName: z.string().trim().min(1).max(255).optional(),
2168
- linkedinUrl: z.string().trim().url().optional(),
2169
- title: z.string().trim().min(1).max(255).optional(),
2170
- headline: z.string().trim().min(1).max(5000).optional(),
2171
- filterReason: z.string().trim().min(1).max(5000).optional(),
2172
- openingLine: z.string().trim().min(1).max(5000).optional(),
2173
- pipelineStatus: z.record(z.string(), z.unknown()).optional(),
2174
- enrichmentData: z.record(z.string(), z.unknown()).optional(),
2175
- status: AcqContactStatusSchema.optional()
2176
- })
2177
- .strict()
2178
- .refine(
2179
- (data) =>
2180
- data.companyId !== undefined ||
2181
- data.emailValid !== undefined ||
2182
- data.firstName !== undefined ||
2183
- data.lastName !== undefined ||
2184
- data.linkedinUrl !== undefined ||
2185
- data.title !== undefined ||
2186
- data.headline !== undefined ||
2187
- data.filterReason !== undefined ||
2188
- data.openingLine !== undefined ||
2189
- data.pipelineStatus !== undefined ||
2190
- data.enrichmentData !== undefined ||
2191
- data.status !== undefined,
2192
- {
2193
- message: 'At least one field must be provided'
2194
- }
2201
+ export const UpdateContactRequestSchema = z
2202
+ .object({
2203
+ companyId: UuidSchema.optional(),
2204
+ emailValid: AcqEmailValidSchema.optional(),
2205
+ firstName: z.string().trim().min(1).max(255).optional(),
2206
+ lastName: z.string().trim().min(1).max(255).optional(),
2207
+ linkedinUrl: z.string().trim().url().optional(),
2208
+ title: z.string().trim().min(1).max(255).optional(),
2209
+ headline: z.string().trim().min(1).max(5000).optional(),
2210
+ filterReason: z.string().trim().min(1).max(5000).optional(),
2211
+ openingLine: z.string().trim().min(1).max(5000).optional(),
2212
+ pipelineStatus: z.record(z.string(), z.unknown()).optional(),
2213
+ enrichmentData: z.record(z.string(), z.unknown()).optional(),
2214
+ status: AcqContactStatusSchema.optional()
2215
+ })
2216
+ .strict()
2217
+ .refine(
2218
+ (data) =>
2219
+ data.companyId !== undefined ||
2220
+ data.emailValid !== undefined ||
2221
+ data.firstName !== undefined ||
2222
+ data.lastName !== undefined ||
2223
+ data.linkedinUrl !== undefined ||
2224
+ data.title !== undefined ||
2225
+ data.headline !== undefined ||
2226
+ data.filterReason !== undefined ||
2227
+ data.openingLine !== undefined ||
2228
+ data.pipelineStatus !== undefined ||
2229
+ data.enrichmentData !== undefined ||
2230
+ data.status !== undefined,
2231
+ {
2232
+ message: 'At least one field must be provided'
2233
+ }
2195
2234
  )
2196
2235
  ```
2197
2236
 
2198
2237
  ### `AcqCompanyResponseSchema`
2199
2238
 
2200
2239
  ```typescript
2201
- export const AcqCompanyResponseSchema = z.object({
2202
- id: z.string(),
2203
- organizationId: z.string(),
2204
- name: z.string(),
2205
- domain: z.string().nullable(),
2206
- linkedinUrl: z.string().nullable(),
2207
- website: z.string().nullable(),
2208
- numEmployees: z.number().nullable(),
2209
- foundedYear: z.number().nullable(),
2210
- locationCity: z.string().nullable(),
2211
- locationState: z.string().nullable(),
2212
- category: z.string().nullable(),
2213
- categoryPain: z.string().nullable(),
2214
- segment: z.string().nullable(),
2215
- pipelineStatus: z.record(z.string(), z.unknown()).nullable(),
2216
- enrichmentData: z.record(z.string(), z.unknown()).nullable(),
2217
- source: z.string().nullable(),
2218
- batchId: z.string().nullable(),
2219
- status: AcqCompanyStatusSchema,
2220
- contactCount: z.number().int().min(0),
2221
- verticalResearch: z.string().nullable(),
2222
- createdAt: z.string(),
2223
- updatedAt: z.string()
2240
+ export const AcqCompanyResponseSchema = z.object({
2241
+ id: z.string(),
2242
+ organizationId: z.string(),
2243
+ name: z.string(),
2244
+ domain: z.string().nullable(),
2245
+ linkedinUrl: z.string().nullable(),
2246
+ website: z.string().nullable(),
2247
+ numEmployees: z.number().nullable(),
2248
+ foundedYear: z.number().nullable(),
2249
+ locationCity: z.string().nullable(),
2250
+ locationState: z.string().nullable(),
2251
+ category: z.string().nullable(),
2252
+ categoryPain: z.string().nullable(),
2253
+ segment: z.string().nullable(),
2254
+ pipelineStatus: z.record(z.string(), z.unknown()).nullable(),
2255
+ enrichmentData: z.record(z.string(), z.unknown()).nullable(),
2256
+ source: z.string().nullable(),
2257
+ batchId: z.string().nullable(),
2258
+ status: AcqCompanyStatusSchema,
2259
+ contactCount: z.number().int().min(0),
2260
+ verticalResearch: z.string().nullable(),
2261
+ createdAt: z.string(),
2262
+ updatedAt: z.string()
2224
2263
  })
2225
2264
  ```
2226
2265
 
2227
2266
  ### `AcqCompanyListResponseSchema`
2228
2267
 
2229
2268
  ```typescript
2230
- export const AcqCompanyListResponseSchema = z.object({
2231
- data: z.array(AcqCompanyResponseSchema),
2232
- total: z.number().int(),
2233
- limit: z.number().int(),
2234
- offset: z.number().int()
2269
+ export const AcqCompanyListResponseSchema = z.object({
2270
+ data: z.array(AcqCompanyResponseSchema),
2271
+ total: z.number().int(),
2272
+ limit: z.number().int(),
2273
+ offset: z.number().int()
2235
2274
  })
2236
2275
  ```
2237
2276
 
2238
2277
  ### `AcqCompanyFacetsResponseSchema`
2239
2278
 
2240
2279
  ```typescript
2241
- export const AcqCompanyFacetsResponseSchema = z.object({
2242
- segments: z.array(z.string()),
2243
- categories: z.array(z.string()),
2244
- statuses: z.array(AcqCompanyStatusSchema)
2280
+ export const AcqCompanyFacetsResponseSchema = z.object({
2281
+ segments: z.array(z.string()),
2282
+ categories: z.array(z.string()),
2283
+ statuses: z.array(AcqCompanyStatusSchema)
2245
2284
  })
2246
2285
  ```
2247
2286
 
2248
2287
  ### `AcqContactCompanySummarySchema`
2249
2288
 
2250
2289
  ```typescript
2251
- export const AcqContactCompanySummarySchema = z.object({
2252
- id: z.string(),
2253
- name: z.string(),
2254
- domain: z.string().nullable(),
2255
- website: z.string().nullable(),
2256
- linkedinUrl: z.string().nullable(),
2257
- segment: z.string().nullable(),
2258
- category: z.string().nullable(),
2259
- status: AcqCompanyStatusSchema
2290
+ export const AcqContactCompanySummarySchema = z.object({
2291
+ id: z.string(),
2292
+ name: z.string(),
2293
+ domain: z.string().nullable(),
2294
+ website: z.string().nullable(),
2295
+ linkedinUrl: z.string().nullable(),
2296
+ segment: z.string().nullable(),
2297
+ category: z.string().nullable(),
2298
+ status: AcqCompanyStatusSchema
2260
2299
  })
2261
2300
  ```
2262
2301
 
2263
2302
  ### `AcqContactResponseSchema`
2264
2303
 
2265
2304
  ```typescript
2266
- export const AcqContactResponseSchema = z.object({
2267
- id: z.string(),
2268
- organizationId: z.string(),
2269
- companyId: z.string().nullable(),
2270
- email: z.string(),
2271
- emailValid: AcqEmailValidSchema.nullable(),
2272
- firstName: z.string().nullable(),
2273
- lastName: z.string().nullable(),
2274
- linkedinUrl: z.string().nullable(),
2275
- title: z.string().nullable(),
2276
- headline: z.string().nullable(),
2277
- filterReason: z.string().nullable(),
2278
- openingLine: z.string().nullable(),
2279
- source: z.string().nullable(),
2280
- sourceId: z.string().nullable(),
2281
- pipelineStatus: z.record(z.string(), z.unknown()).nullable(),
2282
- enrichmentData: z.record(z.string(), z.unknown()).nullable(),
2283
- attioPersonId: z.string().nullable(),
2284
- batchId: z.string().nullable(),
2285
- status: AcqContactStatusSchema,
2286
- company: AcqContactCompanySummarySchema.nullable().optional(),
2287
- createdAt: z.string(),
2288
- updatedAt: z.string()
2305
+ export const AcqContactResponseSchema = z.object({
2306
+ id: z.string(),
2307
+ organizationId: z.string(),
2308
+ companyId: z.string().nullable(),
2309
+ email: z.string(),
2310
+ emailValid: AcqEmailValidSchema.nullable(),
2311
+ firstName: z.string().nullable(),
2312
+ lastName: z.string().nullable(),
2313
+ linkedinUrl: z.string().nullable(),
2314
+ title: z.string().nullable(),
2315
+ headline: z.string().nullable(),
2316
+ filterReason: z.string().nullable(),
2317
+ openingLine: z.string().nullable(),
2318
+ source: z.string().nullable(),
2319
+ sourceId: z.string().nullable(),
2320
+ pipelineStatus: z.record(z.string(), z.unknown()).nullable(),
2321
+ enrichmentData: z.record(z.string(), z.unknown()).nullable(),
2322
+ attioPersonId: z.string().nullable(),
2323
+ batchId: z.string().nullable(),
2324
+ status: AcqContactStatusSchema,
2325
+ company: AcqContactCompanySummarySchema.nullable().optional(),
2326
+ createdAt: z.string(),
2327
+ updatedAt: z.string()
2289
2328
  })
2290
2329
  ```
2291
2330
 
2292
2331
  ### `AcqContactListResponseSchema`
2293
2332
 
2294
2333
  ```typescript
2295
- export const AcqContactListResponseSchema = z.object({
2296
- data: z.array(AcqContactResponseSchema),
2297
- total: z.number().int(),
2298
- limit: z.number().int(),
2299
- offset: z.number().int()
2334
+ export const AcqContactListResponseSchema = z.object({
2335
+ data: z.array(AcqContactResponseSchema),
2336
+ total: z.number().int(),
2337
+ limit: z.number().int(),
2338
+ offset: z.number().int()
2300
2339
  })
2301
2340
  ```
2302
2341
 
@@ -2309,226 +2348,226 @@ export const AcqArtifactOwnerKindSchema = z.enum(['company', 'contact', 'deal',
2309
2348
  ### `ListArtifactsQuerySchema`
2310
2349
 
2311
2350
  ```typescript
2312
- export const ListArtifactsQuerySchema = z
2313
- .object({
2314
- ownerKind: AcqArtifactOwnerKindSchema,
2315
- ownerId: UuidSchema
2316
- })
2351
+ export const ListArtifactsQuerySchema = z
2352
+ .object({
2353
+ ownerKind: AcqArtifactOwnerKindSchema,
2354
+ ownerId: UuidSchema
2355
+ })
2317
2356
  .strict()
2318
2357
  ```
2319
2358
 
2320
2359
  ### `CreateArtifactRequestSchema`
2321
2360
 
2322
2361
  ```typescript
2323
- export const CreateArtifactRequestSchema = z
2324
- .object({
2325
- ownerKind: AcqArtifactOwnerKindSchema,
2326
- ownerId: UuidSchema,
2327
- kind: z.string().trim().min(1).max(255),
2328
- content: z.record(z.string(), z.unknown()),
2329
- sourceExecutionId: UuidSchema.optional()
2330
- })
2362
+ export const CreateArtifactRequestSchema = z
2363
+ .object({
2364
+ ownerKind: AcqArtifactOwnerKindSchema,
2365
+ ownerId: UuidSchema,
2366
+ kind: z.string().trim().min(1).max(255),
2367
+ content: z.record(z.string(), z.unknown()),
2368
+ sourceExecutionId: UuidSchema.optional()
2369
+ })
2331
2370
  .strict()
2332
2371
  ```
2333
2372
 
2334
2373
  ### `AcqArtifactResponseSchema`
2335
2374
 
2336
2375
  ```typescript
2337
- export const AcqArtifactResponseSchema = z.object({
2338
- id: z.string(),
2339
- organizationId: z.string(),
2340
- ownerKind: z.string(),
2341
- ownerId: z.string(),
2342
- kind: z.string(),
2343
- content: z.record(z.string(), z.unknown()),
2344
- sourceExecutionId: z.string().nullable(),
2345
- createdBy: z.string().nullable(),
2346
- createdAt: z.string(),
2347
- version: z.number().int()
2376
+ export const AcqArtifactResponseSchema = z.object({
2377
+ id: z.string(),
2378
+ organizationId: z.string(),
2379
+ ownerKind: z.string(),
2380
+ ownerId: z.string(),
2381
+ kind: z.string(),
2382
+ content: z.record(z.string(), z.unknown()),
2383
+ sourceExecutionId: z.string().nullable(),
2384
+ createdBy: z.string().nullable(),
2385
+ createdAt: z.string(),
2386
+ version: z.number().int()
2348
2387
  })
2349
2388
  ```
2350
2389
 
2351
2390
  ### `AcqArtifactListResponseSchema`
2352
2391
 
2353
2392
  ```typescript
2354
- export const AcqArtifactListResponseSchema = z.object({
2355
- artifacts: z.array(AcqArtifactResponseSchema)
2393
+ export const AcqArtifactListResponseSchema = z.object({
2394
+ artifacts: z.array(AcqArtifactResponseSchema)
2356
2395
  })
2357
2396
  ```
2358
2397
 
2359
2398
  ### `ListMembersQuerySchema`
2360
2399
 
2361
2400
  ```typescript
2362
- export const ListMembersQuerySchema = z
2363
- .object({
2364
- limit: z.coerce.number().int().min(1).max(500).default(50),
2365
- offset: z.coerce.number().int().min(0).default(0)
2366
- })
2401
+ export const ListMembersQuerySchema = z
2402
+ .object({
2403
+ limit: z.coerce.number().int().min(1).max(500).default(50),
2404
+ offset: z.coerce.number().int().min(0).default(0)
2405
+ })
2367
2406
  .strict()
2368
2407
  ```
2369
2408
 
2370
2409
  ### `MemberIdParamsSchema`
2371
2410
 
2372
2411
  ```typescript
2373
- export const MemberIdParamsSchema = z.object({
2374
- memberId: UuidSchema
2412
+ export const MemberIdParamsSchema = z.object({
2413
+ memberId: UuidSchema
2375
2414
  })
2376
2415
  ```
2377
2416
 
2378
2417
  ### `AcqListMemberContactSummarySchema`
2379
2418
 
2380
2419
  ```typescript
2381
- export const AcqListMemberContactSummarySchema = z.object({
2382
- id: z.string(),
2383
- email: z.string(),
2384
- firstName: z.string().nullable(),
2385
- lastName: z.string().nullable(),
2386
- title: z.string().nullable(),
2387
- linkedinUrl: z.string().nullable(),
2388
- companyId: z.string().nullable()
2420
+ export const AcqListMemberContactSummarySchema = z.object({
2421
+ id: z.string(),
2422
+ email: z.string(),
2423
+ firstName: z.string().nullable(),
2424
+ lastName: z.string().nullable(),
2425
+ title: z.string().nullable(),
2426
+ linkedinUrl: z.string().nullable(),
2427
+ companyId: z.string().nullable()
2389
2428
  })
2390
2429
  ```
2391
2430
 
2392
2431
  ### `AcqListMemberResponseSchema`
2393
2432
 
2394
2433
  ```typescript
2395
- export const AcqListMemberResponseSchema = z.object({
2396
- id: z.string(),
2397
- listId: z.string(),
2398
- contactId: z.string(),
2399
- pipelineKey: z.string(),
2400
- stageKey: z.string(),
2401
- stateKey: z.string(),
2402
- activityLog: z.unknown(),
2403
- addedAt: z.string(),
2404
- addedBy: z.string().nullable(),
2405
- sourceExecutionId: z.string().nullable(),
2406
- contact: AcqListMemberContactSummarySchema.nullable()
2434
+ export const AcqListMemberResponseSchema = z.object({
2435
+ id: z.string(),
2436
+ listId: z.string(),
2437
+ contactId: z.string(),
2438
+ pipelineKey: z.string(),
2439
+ stageKey: z.string(),
2440
+ stateKey: z.string(),
2441
+ activityLog: z.unknown(),
2442
+ addedAt: z.string(),
2443
+ addedBy: z.string().nullable(),
2444
+ sourceExecutionId: z.string().nullable(),
2445
+ contact: AcqListMemberContactSummarySchema.nullable()
2407
2446
  })
2408
2447
  ```
2409
2448
 
2410
2449
  ### `AcqListMembersResponseSchema`
2411
2450
 
2412
2451
  ```typescript
2413
- export const AcqListMembersResponseSchema = z.object({
2414
- members: z.array(AcqListMemberResponseSchema)
2452
+ export const AcqListMembersResponseSchema = z.object({
2453
+ members: z.array(AcqListMemberResponseSchema)
2415
2454
  })
2416
2455
  ```
2417
2456
 
2418
2457
  ### `ListCompanyIdParamsSchema`
2419
2458
 
2420
2459
  ```typescript
2421
- export const ListCompanyIdParamsSchema = z.object({
2422
- listCompanyId: UuidSchema
2460
+ export const ListCompanyIdParamsSchema = z.object({
2461
+ listCompanyId: UuidSchema
2423
2462
  })
2424
2463
  ```
2425
2464
 
2426
2465
  ### `AcqListCompanyResponseSchema`
2427
2466
 
2428
2467
  ```typescript
2429
- export const AcqListCompanyResponseSchema = z.object({
2430
- id: z.string(),
2431
- listId: z.string(),
2432
- companyId: z.string(),
2433
- pipelineKey: z.string(),
2434
- stageKey: z.string(),
2435
- stateKey: z.string(),
2436
- activityLog: z.unknown(),
2437
- addedAt: z.string(),
2438
- addedBy: z.string().nullable(),
2439
- sourceExecutionId: z.string().nullable()
2468
+ export const AcqListCompanyResponseSchema = z.object({
2469
+ id: z.string(),
2470
+ listId: z.string(),
2471
+ companyId: z.string(),
2472
+ pipelineKey: z.string(),
2473
+ stageKey: z.string(),
2474
+ stateKey: z.string(),
2475
+ activityLog: z.unknown(),
2476
+ addedAt: z.string(),
2477
+ addedBy: z.string().nullable(),
2478
+ sourceExecutionId: z.string().nullable()
2440
2479
  })
2441
2480
  ```
2442
2481
 
2443
2482
  ### `AcqCompanySchemas`
2444
2483
 
2445
2484
  ```typescript
2446
- export const AcqCompanySchemas = {
2447
- CompanyIdParams: CompanyIdParamsSchema,
2448
- ListCompaniesQuery: ListCompaniesQuerySchema,
2449
- CreateCompanyRequest: CreateCompanyRequestSchema,
2450
- UpdateCompanyRequest: UpdateCompanyRequestSchema,
2451
- AcqCompanyResponse: AcqCompanyResponseSchema,
2452
- AcqCompanyListResponse: AcqCompanyListResponseSchema,
2453
- AcqCompanyFacetsResponse: AcqCompanyFacetsResponseSchema
2485
+ export const AcqCompanySchemas = {
2486
+ CompanyIdParams: CompanyIdParamsSchema,
2487
+ ListCompaniesQuery: ListCompaniesQuerySchema,
2488
+ CreateCompanyRequest: CreateCompanyRequestSchema,
2489
+ UpdateCompanyRequest: UpdateCompanyRequestSchema,
2490
+ AcqCompanyResponse: AcqCompanyResponseSchema,
2491
+ AcqCompanyListResponse: AcqCompanyListResponseSchema,
2492
+ AcqCompanyFacetsResponse: AcqCompanyFacetsResponseSchema
2454
2493
  }
2455
2494
  ```
2456
2495
 
2457
2496
  ### `AcqContactSchemas`
2458
2497
 
2459
2498
  ```typescript
2460
- export const AcqContactSchemas = {
2461
- ContactIdParams: ContactIdParamsSchema,
2462
- ListContactsQuery: ListContactsQuerySchema,
2463
- CreateContactRequest: CreateContactRequestSchema,
2464
- UpdateContactRequest: UpdateContactRequestSchema,
2465
- AcqContactResponse: AcqContactResponseSchema,
2466
- AcqContactListResponse: AcqContactListResponseSchema
2499
+ export const AcqContactSchemas = {
2500
+ ContactIdParams: ContactIdParamsSchema,
2501
+ ListContactsQuery: ListContactsQuerySchema,
2502
+ CreateContactRequest: CreateContactRequestSchema,
2503
+ UpdateContactRequest: UpdateContactRequestSchema,
2504
+ AcqContactResponse: AcqContactResponseSchema,
2505
+ AcqContactListResponse: AcqContactListResponseSchema
2467
2506
  }
2468
2507
  ```
2469
2508
 
2470
2509
  ### `AcqListSchemas`
2471
2510
 
2472
2511
  ```typescript
2473
- export const AcqListSchemas = {
2474
- // Params
2475
- ListIdParams: ListIdParamsSchema,
2476
-
2477
- // Primitives (for UI / tests)
2478
- ListStatus: ListStatusSchema,
2479
- ScrapingConfig: ScrapingConfigSchema,
2480
- IcpRubric: IcpRubricSchema,
2481
- PipelineConfig: PipelineConfigSchema,
2482
- PipelineStage: PipelineStageSchema,
2483
- BuildPlanSnapshot: BuildPlanSnapshotSchema,
2484
- BuildPlanSnapshotStep: BuildPlanSnapshotStepSchema,
2485
- AcqListMetadata: AcqListMetadataSchema,
2486
- ProcessingStageStatus: ProcessingStageStatusSchema,
2487
- ListStageCounts: ListStageCountsSchema,
2488
- ListTelemetry: ListTelemetrySchema,
2489
-
2490
- // Requests
2491
- CreateListRequest: CreateListRequestSchema,
2492
- UpdateListRequest: UpdateListRequestSchema,
2493
- UpdateListStatusRequest: UpdateListStatusRequestSchema,
2494
- UpdateListConfigRequest: UpdateListConfigRequestSchema,
2495
- AddCompaniesToListRequest: AddCompaniesToListRequestSchema,
2496
- RemoveCompaniesFromListRequest: RemoveCompaniesFromListRequestSchema,
2497
- AddContactsToListRequest: AddContactsToListRequestSchema,
2498
- RecordListExecutionRequest: RecordListExecutionRequestSchema,
2499
-
2500
- // Responses
2501
- AcqListResponse: AcqListResponseSchema,
2502
- AcqListListResponse: AcqListListResponseSchema,
2503
- ListTelemetryResponse: ListTelemetryResponseSchema,
2504
- ListTelemetryListResponse: ListTelemetryListResponseSchema,
2505
- ListExecutionsResponse: ListExecutionsResponseSchema,
2506
- ListProgressResponse: ListProgressResponseSchema
2512
+ export const AcqListSchemas = {
2513
+ // Params
2514
+ ListIdParams: ListIdParamsSchema,
2515
+
2516
+ // Primitives (for UI / tests)
2517
+ ListStatus: ListStatusSchema,
2518
+ ScrapingConfig: ScrapingConfigSchema,
2519
+ IcpRubric: IcpRubricSchema,
2520
+ PipelineConfig: PipelineConfigSchema,
2521
+ PipelineStage: PipelineStageSchema,
2522
+ BuildPlanSnapshot: BuildPlanSnapshotSchema,
2523
+ BuildPlanSnapshotStep: BuildPlanSnapshotStepSchema,
2524
+ AcqListMetadata: AcqListMetadataSchema,
2525
+ ProcessingStageStatus: ProcessingStageStatusSchema,
2526
+ ListStageCounts: ListStageCountsSchema,
2527
+ ListTelemetry: ListTelemetrySchema,
2528
+
2529
+ // Requests
2530
+ CreateListRequest: CreateListRequestSchema,
2531
+ UpdateListRequest: UpdateListRequestSchema,
2532
+ UpdateListStatusRequest: UpdateListStatusRequestSchema,
2533
+ UpdateListConfigRequest: UpdateListConfigRequestSchema,
2534
+ AddCompaniesToListRequest: AddCompaniesToListRequestSchema,
2535
+ RemoveCompaniesFromListRequest: RemoveCompaniesFromListRequestSchema,
2536
+ AddContactsToListRequest: AddContactsToListRequestSchema,
2537
+ RecordListExecutionRequest: RecordListExecutionRequestSchema,
2538
+
2539
+ // Responses
2540
+ AcqListResponse: AcqListResponseSchema,
2541
+ AcqListListResponse: AcqListListResponseSchema,
2542
+ ListTelemetryResponse: ListTelemetryResponseSchema,
2543
+ ListTelemetryListResponse: ListTelemetryListResponseSchema,
2544
+ ListExecutionsResponse: ListExecutionsResponseSchema,
2545
+ ListProgressResponse: ListProgressResponseSchema
2507
2546
  }
2508
2547
  ```
2509
2548
 
2510
2549
  ### `AcqSubstrateSchemas`
2511
2550
 
2512
2551
  ```typescript
2513
- export const AcqSubstrateSchemas = {
2514
- // Artifacts
2515
- ListArtifactsQuery: ListArtifactsQuerySchema,
2516
- CreateArtifactRequest: CreateArtifactRequestSchema,
2517
- AcqArtifactResponse: AcqArtifactResponseSchema,
2518
- AcqArtifactListResponse: AcqArtifactListResponseSchema,
2519
-
2520
- // List members
2521
- ListMembersQuery: ListMembersQuerySchema,
2522
- MemberIdParams: MemberIdParamsSchema,
2523
- AcqListMemberResponse: AcqListMemberResponseSchema,
2524
- AcqListMembersResponse: AcqListMembersResponseSchema,
2525
-
2526
- // List companies
2527
- ListCompanyIdParams: ListCompanyIdParamsSchema,
2528
- AcqListCompanyResponse: AcqListCompanyResponseSchema,
2529
-
2530
- // Transition (shared with deals — TransitionItemRequestSchema)
2531
- TransitionItemRequest: TransitionItemRequestSchema
2552
+ export const AcqSubstrateSchemas = {
2553
+ // Artifacts
2554
+ ListArtifactsQuery: ListArtifactsQuerySchema,
2555
+ CreateArtifactRequest: CreateArtifactRequestSchema,
2556
+ AcqArtifactResponse: AcqArtifactResponseSchema,
2557
+ AcqArtifactListResponse: AcqArtifactListResponseSchema,
2558
+
2559
+ // List members
2560
+ ListMembersQuery: ListMembersQuerySchema,
2561
+ MemberIdParams: MemberIdParamsSchema,
2562
+ AcqListMemberResponse: AcqListMemberResponseSchema,
2563
+ AcqListMembersResponse: AcqListMembersResponseSchema,
2564
+
2565
+ // List companies
2566
+ ListCompanyIdParams: ListCompanyIdParamsSchema,
2567
+ AcqListCompanyResponse: AcqListCompanyResponseSchema,
2568
+
2569
+ // Transition (shared with deals — TransitionItemRequestSchema)
2570
+ TransitionItemRequest: TransitionItemRequestSchema
2532
2571
  }
2533
2572
  ```
2534
2573
 
@@ -2713,39 +2752,39 @@ export const LEAD_GEN_PIPELINE_DEFINITIONS: Record<string, StatefulPipelineDefin
2713
2752
  ### `PaginationParams`
2714
2753
 
2715
2754
  ```typescript
2716
- export interface PaginationParams {
2717
- limit: number
2718
- offset: number
2755
+ export interface PaginationParams {
2756
+ limit: number
2757
+ offset: number
2719
2758
  }
2720
2759
  ```
2721
2760
 
2722
2761
  ### `PaginatedResult`
2723
2762
 
2724
2763
  ```typescript
2725
- export interface PaginatedResult<T> {
2726
- data: T[]
2727
- total: number
2728
- limit: number
2729
- offset: number
2764
+ export interface PaginatedResult<T> {
2765
+ data: T[]
2766
+ total: number
2767
+ limit: number
2768
+ offset: number
2730
2769
  }
2731
2770
  ```
2732
2771
 
2733
2772
  ### `CreateListParams`
2734
2773
 
2735
2774
  ```typescript
2736
- export interface CreateListParams {
2737
- organizationId: string
2738
- name: string
2739
- description?: string
2740
- type?: string
2741
- batchIds?: string[]
2775
+ export interface CreateListParams {
2776
+ organizationId: string
2777
+ name: string
2778
+ description?: string
2779
+ type?: string
2780
+ batchIds?: string[]
2742
2781
  instantlyCampaignId?: string
2743
2782
  status?: ListStatus
2744
2783
  buildTemplateId?: string
2745
2784
  metadata?: Record<string, unknown>
2746
2785
  scrapingConfig?: ScrapingConfig
2747
2786
  icp?: IcpRubric
2748
- pipelineConfig?: PipelineConfig
2787
+ pipelineConfig?: PipelineConfig
2749
2788
  }
2750
2789
  ```
2751
2790
 
@@ -2762,49 +2801,49 @@ export interface UpdateListParams {
2762
2801
  ### `CreateCompanyParams`
2763
2802
 
2764
2803
  ```typescript
2765
- export interface CreateCompanyParams {
2766
- organizationId: string
2767
- name: string
2768
- domain?: string
2769
- linkedinUrl?: string
2770
- website?: string
2771
- numEmployees?: number
2772
- foundedYear?: number
2773
- locationCity?: string
2774
- locationState?: string
2775
- category?: string
2776
- source?: string
2777
- batchId?: string
2778
- verticalResearch?: string
2804
+ export interface CreateCompanyParams {
2805
+ organizationId: string
2806
+ name: string
2807
+ domain?: string
2808
+ linkedinUrl?: string
2809
+ website?: string
2810
+ numEmployees?: number
2811
+ foundedYear?: number
2812
+ locationCity?: string
2813
+ locationState?: string
2814
+ category?: string
2815
+ source?: string
2816
+ batchId?: string
2817
+ verticalResearch?: string
2779
2818
  }
2780
2819
  ```
2781
2820
 
2782
2821
  ### `UpdateCompanyParams`
2783
2822
 
2784
2823
  ```typescript
2785
- export interface UpdateCompanyParams {
2786
- name?: string
2787
- domain?: string
2788
- linkedinUrl?: string
2789
- website?: string
2790
- numEmployees?: number
2791
- foundedYear?: number
2792
- locationCity?: string
2793
- locationState?: string
2794
- category?: string
2795
- segment?: string
2796
- pipelineStatus?: Record<string, unknown>
2797
- enrichmentData?: Record<string, unknown>
2798
- source?: string
2799
- batchId?: string
2800
- status?: 'active' | 'invalid'
2801
- verticalResearch?: string | null
2802
- /** Track A: flat qualification score column (null until a scoring rubric is defined) */
2803
- qualificationScore?: number | null
2804
- /** Track A: flat qualification signals jsonb — mirrors the former pipeline_status.qualification shape */
2805
- qualificationSignals?: Record<string, unknown> | null
2806
- /** Track A: key identifying the rubric used for qualification */
2807
- qualificationRubricKey?: string | null
2824
+ export interface UpdateCompanyParams {
2825
+ name?: string
2826
+ domain?: string
2827
+ linkedinUrl?: string
2828
+ website?: string
2829
+ numEmployees?: number
2830
+ foundedYear?: number
2831
+ locationCity?: string
2832
+ locationState?: string
2833
+ category?: string
2834
+ segment?: string
2835
+ pipelineStatus?: Record<string, unknown>
2836
+ enrichmentData?: Record<string, unknown>
2837
+ source?: string
2838
+ batchId?: string
2839
+ status?: 'active' | 'invalid'
2840
+ verticalResearch?: string | null
2841
+ /** Track A: flat qualification score column (null until a scoring rubric is defined) */
2842
+ qualificationScore?: number | null
2843
+ /** Track A: flat qualification signals jsonb — mirrors the former pipeline_status.qualification shape */
2844
+ qualificationSignals?: Record<string, unknown> | null
2845
+ /** Track A: key identifying the rubric used for qualification */
2846
+ qualificationRubricKey?: string | null
2808
2847
  }
2809
2848
  ```
2810
2849
 
@@ -2817,56 +2856,57 @@ export type UpsertCompanyParams = CreateCompanyParams
2817
2856
  ### `CompanyFilters`
2818
2857
 
2819
2858
  ```typescript
2820
- export interface CompanyFilters {
2821
- listId?: string // Filter to companies in a specific list (via acq_list_companies)
2822
- search?: string
2823
- domain?: string
2824
- website?: string
2825
- segment?: string
2826
- category?: string
2827
- pipelineStatus?: Record<string, unknown>
2828
- /** Exclude companies whose pipeline_status contains this value (PostgREST NOT contains) */
2829
- pipelineStatusNot?: Record<string, unknown>
2830
- batchId?: string
2831
- status?: 'active' | 'invalid'
2832
- includeAll?: boolean
2833
- excludeColumns?: Array<'enrichmentData' | 'pipelineStatus'>
2859
+ export interface CompanyFilters {
2860
+ listId?: string // Filter to companies in a specific list (via acq_list_companies)
2861
+ search?: string
2862
+ domain?: string
2863
+ website?: string
2864
+ segment?: string
2865
+ category?: string
2866
+ pipelineStatus?: Record<string, unknown>
2867
+ /** Exclude companies whose pipeline_status contains this value (PostgREST NOT contains) */
2868
+ pipelineStatusNot?: Record<string, unknown>
2869
+ batchId?: string
2870
+ status?: 'active' | 'invalid'
2871
+ includeAll?: boolean
2872
+ excludeColumns?: Array<'enrichmentData' | 'pipelineStatus'>
2873
+ limit?: number
2834
2874
  }
2835
2875
  ```
2836
2876
 
2837
2877
  ### `CreateContactParams`
2838
2878
 
2839
2879
  ```typescript
2840
- export interface CreateContactParams {
2841
- organizationId: string
2842
- email: string
2843
- companyId?: string
2844
- firstName?: string
2845
- lastName?: string
2846
- linkedinUrl?: string
2847
- title?: string
2848
- source?: string
2849
- sourceId?: string
2850
- batchId?: string
2880
+ export interface CreateContactParams {
2881
+ organizationId: string
2882
+ email: string
2883
+ companyId?: string
2884
+ firstName?: string
2885
+ lastName?: string
2886
+ linkedinUrl?: string
2887
+ title?: string
2888
+ source?: string
2889
+ sourceId?: string
2890
+ batchId?: string
2851
2891
  }
2852
2892
  ```
2853
2893
 
2854
2894
  ### `UpdateContactParams`
2855
2895
 
2856
2896
  ```typescript
2857
- export interface UpdateContactParams {
2858
- companyId?: string
2859
- emailValid?: 'VALID' | 'INVALID' | 'RISKY' | 'UNKNOWN'
2860
- firstName?: string
2861
- lastName?: string
2862
- linkedinUrl?: string
2863
- title?: string
2864
- headline?: string
2865
- filterReason?: string
2866
- openingLine?: string
2867
- pipelineStatus?: Record<string, unknown>
2868
- enrichmentData?: Record<string, unknown>
2869
- status?: 'active' | 'invalid'
2897
+ export interface UpdateContactParams {
2898
+ companyId?: string
2899
+ emailValid?: 'VALID' | 'INVALID' | 'RISKY' | 'UNKNOWN'
2900
+ firstName?: string
2901
+ lastName?: string
2902
+ linkedinUrl?: string
2903
+ title?: string
2904
+ headline?: string
2905
+ filterReason?: string
2906
+ openingLine?: string
2907
+ pipelineStatus?: Record<string, unknown>
2908
+ enrichmentData?: Record<string, unknown>
2909
+ status?: 'active' | 'invalid'
2870
2910
  }
2871
2911
  ```
2872
2912
 
@@ -2879,87 +2919,87 @@ export type UpsertContactParams = CreateContactParams
2879
2919
  ### `ContactFilters`
2880
2920
 
2881
2921
  ```typescript
2882
- export interface ContactFilters {
2883
- listId?: string // Filter to contacts in a specific list (via acq_list_members)
2884
- search?: string
2885
- openingLineIsNull?: boolean // Filter to contacts without personalization
2886
- pipelineStatus?: Record<string, unknown>
2887
- batchId?: string
2888
- contactStatus?: 'active' | 'invalid' // Filter by contact status (soft-delete flag)
2922
+ export interface ContactFilters {
2923
+ listId?: string // Filter to contacts in a specific list (via acq_list_members)
2924
+ search?: string
2925
+ openingLineIsNull?: boolean // Filter to contacts without personalization
2926
+ pipelineStatus?: Record<string, unknown>
2927
+ batchId?: string
2928
+ contactStatus?: 'active' | 'invalid' // Filter by contact status (soft-delete flag)
2889
2929
  }
2890
2930
  ```
2891
2931
 
2892
2932
  ### `UpsertSocialPostParams`
2893
2933
 
2894
2934
  ```typescript
2895
- export interface UpsertSocialPostParams {
2896
- organizationId: string
2897
- platform: string
2898
- platformPostId: string
2899
- authorName: string
2900
- authorUrl?: string | null
2901
- postTitle: string
2902
- postText: string
2903
- postUrl: string
2904
- engagementCount?: number
2905
- commentsCount?: number
2906
- postedAt: string
2907
- metadata?: Record<string, unknown>
2908
- relevanceScore?: number
2909
- matchedKeywords?: string[]
2910
- matchedQuery?: string | null
2911
- initialDraft?: string | null
2912
- finalResponse?: string | null
2913
- sourceCategory?: string | null
2935
+ export interface UpsertSocialPostParams {
2936
+ organizationId: string
2937
+ platform: string
2938
+ platformPostId: string
2939
+ authorName: string
2940
+ authorUrl?: string | null
2941
+ postTitle: string
2942
+ postText: string
2943
+ postUrl: string
2944
+ engagementCount?: number
2945
+ commentsCount?: number
2946
+ postedAt: string
2947
+ metadata?: Record<string, unknown>
2948
+ relevanceScore?: number
2949
+ matchedKeywords?: string[]
2950
+ matchedQuery?: string | null
2951
+ initialDraft?: string | null
2952
+ finalResponse?: string | null
2953
+ sourceCategory?: string | null
2914
2954
  }
2915
2955
  ```
2916
2956
 
2917
2957
  ### `UpsertSocialPostsParams`
2918
2958
 
2919
2959
  ```typescript
2920
- export interface UpsertSocialPostsParams {
2921
- organizationId: string
2922
- posts: Omit<UpsertSocialPostParams, 'organizationId'>[]
2960
+ export interface UpsertSocialPostsParams {
2961
+ organizationId: string
2962
+ posts: Omit<UpsertSocialPostParams, 'organizationId'>[]
2923
2963
  }
2924
2964
  ```
2925
2965
 
2926
2966
  ### `UpsertSocialPostsResult`
2927
2967
 
2928
2968
  ```typescript
2929
- export interface UpsertSocialPostsResult {
2930
- inserted: number
2931
- duplicatesSkipped: number
2969
+ export interface UpsertSocialPostsResult {
2970
+ inserted: number
2971
+ duplicatesSkipped: number
2932
2972
  }
2933
2973
  ```
2934
2974
 
2935
2975
  ### `AddContactsToListParams`
2936
2976
 
2937
2977
  ```typescript
2938
- export interface AddContactsToListParams {
2939
- organizationId: string
2940
- listId: string
2941
- contactIds: string[]
2978
+ export interface AddContactsToListParams {
2979
+ organizationId: string
2980
+ listId: string
2981
+ contactIds: string[]
2942
2982
  }
2943
2983
  ```
2944
2984
 
2945
2985
  ### `AddContactsToListResult`
2946
2986
 
2947
2987
  ```typescript
2948
- export interface AddContactsToListResult {
2949
- added: number
2950
- alreadyExisted: number
2988
+ export interface AddContactsToListResult {
2989
+ added: number
2990
+ alreadyExisted: number
2951
2991
  }
2952
2992
  ```
2953
2993
 
2954
2994
  ### `UpdateListConfigParams`
2955
2995
 
2956
2996
  ```typescript
2957
- export interface UpdateListConfigParams {
2958
- organizationId: string
2959
- listId: string
2960
- scrapingConfig?: ScrapingConfig
2961
- icp?: IcpRubric
2962
- pipelineConfig?: PipelineConfig
2997
+ export interface UpdateListConfigParams {
2998
+ organizationId: string
2999
+ listId: string
3000
+ scrapingConfig?: ScrapingConfig
3001
+ icp?: IcpRubric
3002
+ pipelineConfig?: PipelineConfig
2963
3003
  }
2964
3004
  ```
2965
3005
 
@@ -2992,117 +3032,117 @@ export interface UpdateContactStageParams {
2992
3032
  ### `AddCompaniesToListParams`
2993
3033
 
2994
3034
  ```typescript
2995
- export interface AddCompaniesToListParams {
2996
- organizationId: string
2997
- listId: string
2998
- companyIds: string[]
3035
+ export interface AddCompaniesToListParams {
3036
+ organizationId: string
3037
+ listId: string
3038
+ companyIds: string[]
2999
3039
  }
3000
3040
  ```
3001
3041
 
3002
3042
  ### `AddCompaniesToListResult`
3003
3043
 
3004
3044
  ```typescript
3005
- export interface AddCompaniesToListResult {
3006
- added: number
3007
- alreadyExisted: number
3045
+ export interface AddCompaniesToListResult {
3046
+ added: number
3047
+ alreadyExisted: number
3008
3048
  }
3009
3049
  ```
3010
3050
 
3011
3051
  ### `RemoveCompaniesFromListParams`
3012
3052
 
3013
3053
  ```typescript
3014
- export interface RemoveCompaniesFromListParams {
3015
- organizationId: string
3016
- listId: string
3017
- companyIds: string[]
3054
+ export interface RemoveCompaniesFromListParams {
3055
+ organizationId: string
3056
+ listId: string
3057
+ companyIds: string[]
3018
3058
  }
3019
3059
  ```
3020
3060
 
3021
3061
  ### `RemoveCompaniesFromListResult`
3022
3062
 
3023
3063
  ```typescript
3024
- export interface RemoveCompaniesFromListResult {
3025
- removed: number
3064
+ export interface RemoveCompaniesFromListResult {
3065
+ removed: number
3026
3066
  }
3027
3067
  ```
3028
3068
 
3029
3069
  ### `RecordListExecutionParams`
3030
3070
 
3031
3071
  ```typescript
3032
- export interface RecordListExecutionParams {
3033
- organizationId: string
3034
- listId: string
3035
- executionId: string
3036
- configSnapshot?: Record<string, unknown>
3072
+ export interface RecordListExecutionParams {
3073
+ organizationId: string
3074
+ listId: string
3075
+ executionId: string
3076
+ configSnapshot?: Record<string, unknown>
3037
3077
  }
3038
3078
  ```
3039
3079
 
3040
3080
  ### `ListExecutionSummary`
3041
3081
 
3042
3082
  ```typescript
3043
- export interface ListExecutionSummary {
3044
- executionId: string
3045
- resourceId: string
3046
- status: string
3047
- createdAt: string
3048
- completedAt: string | null
3049
- durationMs: number | null
3083
+ export interface ListExecutionSummary {
3084
+ executionId: string
3085
+ resourceId: string
3086
+ status: string
3087
+ createdAt: string
3088
+ completedAt: string | null
3089
+ durationMs: number | null
3050
3090
  }
3051
3091
  ```
3052
3092
 
3053
3093
  ### `BulkImportParams`
3054
3094
 
3055
3095
  ```typescript
3056
- export interface BulkImportParams {
3057
- organizationId: string
3058
- contacts: CreateContactParams[]
3059
- listId?: string
3096
+ export interface BulkImportParams {
3097
+ organizationId: string
3098
+ contacts: CreateContactParams[]
3099
+ listId?: string
3060
3100
  }
3061
3101
  ```
3062
3102
 
3063
3103
  ### `BulkImportResult`
3064
3104
 
3065
3105
  ```typescript
3066
- export interface BulkImportResult {
3067
- created: number
3068
- updated: number
3069
- errors: Array<{ email: string; error: string }>
3106
+ export interface BulkImportResult {
3107
+ created: number
3108
+ updated: number
3109
+ errors: Array<{ email: string; error: string }>
3070
3110
  }
3071
3111
  ```
3072
3112
 
3073
3113
  ### `BulkImportCompanyEntry`
3074
3114
 
3075
3115
  ```typescript
3076
- export interface BulkImportCompanyEntry {
3077
- name: string
3078
- domain: string
3079
- website?: string
3080
- locationCity?: string
3081
- locationState?: string
3082
- category?: string
3083
- source?: string
3084
- enrichmentData?: Record<string, unknown>
3085
- pipelineStatus?: Record<string, unknown>
3116
+ export interface BulkImportCompanyEntry {
3117
+ name: string
3118
+ domain: string
3119
+ website?: string
3120
+ locationCity?: string
3121
+ locationState?: string
3122
+ category?: string
3123
+ source?: string
3124
+ enrichmentData?: Record<string, unknown>
3125
+ pipelineStatus?: Record<string, unknown>
3086
3126
  }
3087
3127
  ```
3088
3128
 
3089
3129
  ### `BulkImportCompaniesParams`
3090
3130
 
3091
3131
  ```typescript
3092
- export interface BulkImportCompaniesParams {
3093
- organizationId: string
3094
- batchId: string
3095
- companies: BulkImportCompanyEntry[]
3132
+ export interface BulkImportCompaniesParams {
3133
+ organizationId: string
3134
+ batchId: string
3135
+ companies: BulkImportCompanyEntry[]
3096
3136
  }
3097
3137
  ```
3098
3138
 
3099
3139
  ### `BulkImportCompaniesResult`
3100
3140
 
3101
3141
  ```typescript
3102
- export interface BulkImportCompaniesResult {
3103
- created: number
3104
- skipped: number
3105
- errors: Array<{ companyName: string; error: string }>
3142
+ export interface BulkImportCompaniesResult {
3143
+ created: number
3144
+ skipped: number
3145
+ errors: Array<{ companyName: string; error: string }>
3106
3146
  }
3107
3147
  ```
3108
3148
 
@@ -3265,3 +3305,74 @@ export type ListToolMap = {
3265
3305
  }
3266
3306
  }
3267
3307
  ```
3308
+
3309
+ ## Knowledge Platform Primitives
3310
+
3311
+ ### `KnowledgeLinkSchema`
3312
+
3313
+ ```typescript
3314
+ export const KnowledgeLinkSchema = z.object({
3315
+ nodeId: NodeIdStringSchema
3316
+ })
3317
+ ```
3318
+
3319
+ ### `OrgKnowledgeKindSchema`
3320
+
3321
+ ```typescript
3322
+ export const OrgKnowledgeKindSchema = z.enum(['playbook', 'strategy', 'reference'])
3323
+ ```
3324
+
3325
+ ### `OrgKnowledgeNodeSchema`
3326
+
3327
+ ```typescript
3328
+ export const OrgKnowledgeNodeSchema = z.object({
3329
+ id: ModelIdSchema,
3330
+ kind: OrgKnowledgeKindSchema,
3331
+ title: z.string().trim().min(1).max(200),
3332
+ summary: z.string().trim().min(1).max(1000),
3333
+ icon: IconNameSchema.optional(),
3334
+ /** Raw MDX string. Phase 2 will introduce a structured block format. */
3335
+ body: z.string().trim().min(1),
3336
+ /**
3337
+ * Graph links to other OM nodes this knowledge node governs.
3338
+ * Each link emits a `governs` edge: knowledge-node -> target node.
3339
+ */
3340
+ links: z.array(KnowledgeLinkSchema).default([]),
3341
+ /** Identifiers of the roles or members who own this knowledge node. */
3342
+ ownerIds: z.array(ModelIdSchema).default([]),
3343
+ /** ISO date string (YYYY-MM-DD or full ISO 8601) of last meaningful update. */
3344
+ updatedAt: z.string().trim().min(1).max(50)
3345
+ })
3346
+ ```
3347
+
3348
+ ### `KnowledgeDomainSchema`
3349
+
3350
+ ```typescript
3351
+ export const KnowledgeDomainSchema = z.object({
3352
+ nodes: z.array(OrgKnowledgeNodeSchema).default([])
3353
+ })
3354
+ ```
3355
+
3356
+ ### `OrgKnowledgeNode`
3357
+
3358
+ ```typescript
3359
+ export type OrgKnowledgeNode = z.infer<typeof OrgKnowledgeNodeSchema>
3360
+ ```
3361
+
3362
+ ### `OrgKnowledgeKind`
3363
+
3364
+ ```typescript
3365
+ export type OrgKnowledgeKind = z.infer<typeof OrgKnowledgeKindSchema>
3366
+ ```
3367
+
3368
+ ### `KnowledgeLink`
3369
+
3370
+ ```typescript
3371
+ export type KnowledgeLink = z.infer<typeof KnowledgeLinkSchema>
3372
+ ```
3373
+
3374
+ ### `KnowledgeDomain`
3375
+
3376
+ ```typescript
3377
+ export type KnowledgeDomain = z.infer<typeof KnowledgeDomainSchema>
3378
+ ```