attio-mcp 1.3.5 → 1.4.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 (305) hide show
  1. package/CHANGELOG.md +263 -9
  2. package/README.md +315 -235
  3. package/dist/api/attio-client.d.ts +13 -3
  4. package/dist/api/attio-client.d.ts.map +1 -1
  5. package/dist/api/attio-client.js +37 -7
  6. package/dist/api/attio-client.js.map +1 -1
  7. package/dist/api/attribute-types.d.ts.map +1 -1
  8. package/dist/api/attribute-types.js +59 -29
  9. package/dist/api/attribute-types.js.map +1 -1
  10. package/dist/api/client-context.d.ts.map +1 -1
  11. package/dist/api/client-context.js +28 -42
  12. package/dist/api/client-context.js.map +1 -1
  13. package/dist/api/operations/batch.d.ts.map +1 -1
  14. package/dist/api/operations/batch.js +3 -1
  15. package/dist/api/operations/batch.js.map +1 -1
  16. package/dist/cli/commands/generate-skill.d.ts +28 -0
  17. package/dist/cli/commands/generate-skill.d.ts.map +1 -0
  18. package/dist/cli/commands/generate-skill.js +101 -0
  19. package/dist/cli/commands/generate-skill.js.map +1 -0
  20. package/dist/cli/discover.js +65 -0
  21. package/dist/cli/discover.js.map +1 -1
  22. package/dist/config/deal-defaults.d.ts +2 -2
  23. package/dist/config/deal-defaults.d.ts.map +1 -1
  24. package/dist/config/deal-defaults.js +15 -6
  25. package/dist/config/deal-defaults.js.map +1 -1
  26. package/dist/config/tool-aliases.d.ts +12 -0
  27. package/dist/config/tool-aliases.d.ts.map +1 -1
  28. package/dist/config/tool-aliases.js +213 -69
  29. package/dist/config/tool-aliases.js.map +1 -1
  30. package/dist/constants/tool-names.d.ts +84 -0
  31. package/dist/constants/tool-names.d.ts.map +1 -0
  32. package/dist/constants/tool-names.js +81 -0
  33. package/dist/constants/tool-names.js.map +1 -0
  34. package/dist/constants/universal.constants.d.ts +24 -0
  35. package/dist/constants/universal.constants.d.ts.map +1 -1
  36. package/dist/constants/universal.constants.js +81 -9
  37. package/dist/constants/universal.constants.js.map +1 -1
  38. package/dist/handlers/tool-configs/tasks.d.ts.map +1 -1
  39. package/dist/handlers/tool-configs/tasks.js +28 -0
  40. package/dist/handlers/tool-configs/tasks.js.map +1 -1
  41. package/dist/handlers/tool-configs/universal/batch-search.js +4 -4
  42. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts +26 -4
  43. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts.map +1 -1
  44. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js +181 -21
  45. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js.map +1 -1
  46. package/dist/handlers/tool-configs/universal/core/crud-operations.d.ts.map +1 -1
  47. package/dist/handlers/tool-configs/universal/core/crud-operations.js +52 -13
  48. package/dist/handlers/tool-configs/universal/core/crud-operations.js.map +1 -1
  49. package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js +3 -3
  50. package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js.map +1 -1
  51. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts +17 -0
  52. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts.map +1 -0
  53. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js +118 -0
  54. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js.map +1 -0
  55. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts +14 -0
  56. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts.map +1 -0
  57. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js +77 -0
  58. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js.map +1 -0
  59. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts +24 -0
  60. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts.map +1 -0
  61. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js +35 -0
  62. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js.map +1 -0
  63. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts +15 -0
  64. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts.map +1 -0
  65. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js +108 -0
  66. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js.map +1 -0
  67. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts +14 -0
  68. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts.map +1 -0
  69. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js +91 -0
  70. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js.map +1 -0
  71. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts +14 -0
  72. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts.map +1 -0
  73. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js +118 -0
  74. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js.map +1 -0
  75. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts +77 -0
  76. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts.map +1 -0
  77. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js +42 -0
  78. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js.map +1 -0
  79. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts +15 -0
  80. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts.map +1 -0
  81. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js +109 -0
  82. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js.map +1 -0
  83. package/dist/handlers/tool-configs/universal/core/index.d.ts +63 -22
  84. package/dist/handlers/tool-configs/universal/core/index.d.ts.map +1 -1
  85. package/dist/handlers/tool-configs/universal/core/index.js +24 -22
  86. package/dist/handlers/tool-configs/universal/core/index.js.map +1 -1
  87. package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts +43 -1
  88. package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts.map +1 -1
  89. package/dist/handlers/tool-configs/universal/core/metadata-operations.js +117 -11
  90. package/dist/handlers/tool-configs/universal/core/metadata-operations.js.map +1 -1
  91. package/dist/handlers/tool-configs/universal/core/notes-operations.d.ts.map +1 -1
  92. package/dist/handlers/tool-configs/universal/core/notes-operations.js +27 -12
  93. package/dist/handlers/tool-configs/universal/core/notes-operations.js.map +1 -1
  94. package/dist/handlers/tool-configs/universal/core/record-details-operations.d.ts.map +1 -1
  95. package/dist/handlers/tool-configs/universal/core/record-details-operations.js +20 -3
  96. package/dist/handlers/tool-configs/universal/core/record-details-operations.js.map +1 -1
  97. package/dist/handlers/tool-configs/universal/core/search-operations.d.ts.map +1 -1
  98. package/dist/handlers/tool-configs/universal/core/search-operations.js +11 -4
  99. package/dist/handlers/tool-configs/universal/core/search-operations.js.map +1 -1
  100. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.d.ts.map +1 -1
  101. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js +32 -9
  102. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js.map +1 -1
  103. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.d.ts.map +1 -1
  104. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js +45 -6
  105. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js.map +1 -1
  106. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.d.ts.map +1 -1
  107. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js +36 -5
  108. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js.map +1 -1
  109. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts +1 -1
  110. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts.map +1 -1
  111. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js +17 -1
  112. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js.map +1 -1
  113. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.d.ts.map +1 -1
  114. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js +3 -1
  115. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js.map +1 -1
  116. package/dist/handlers/tool-configs/universal/index.d.ts +75 -34
  117. package/dist/handlers/tool-configs/universal/index.d.ts.map +1 -1
  118. package/dist/handlers/tool-configs/universal/index.js +58 -58
  119. package/dist/handlers/tool-configs/universal/index.js.map +1 -1
  120. package/dist/handlers/tool-configs/universal/operations/advanced-search.d.ts.map +1 -1
  121. package/dist/handlers/tool-configs/universal/operations/advanced-search.js +5 -4
  122. package/dist/handlers/tool-configs/universal/operations/advanced-search.js.map +1 -1
  123. package/dist/handlers/tool-configs/universal/operations/batch-operations.js +3 -3
  124. package/dist/handlers/tool-configs/universal/operations/content-search.js +3 -3
  125. package/dist/handlers/tool-configs/universal/operations/index.d.ts +10 -10
  126. package/dist/handlers/tool-configs/universal/operations/index.js +15 -15
  127. package/dist/handlers/tool-configs/universal/operations/relationship-search.js +3 -3
  128. package/dist/handlers/tool-configs/universal/operations/timeframe-search.js +3 -3
  129. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.d.ts.map +1 -1
  130. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js +5 -2
  131. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js.map +1 -1
  132. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts +29 -0
  133. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts.map +1 -1
  134. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js +28 -0
  135. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js.map +1 -1
  136. package/dist/handlers/tool-configs/universal/schemas.d.ts +1 -1
  137. package/dist/handlers/tool-configs/universal/schemas.d.ts.map +1 -1
  138. package/dist/handlers/tool-configs/universal/schemas.js +1 -1
  139. package/dist/handlers/tool-configs/universal/schemas.js.map +1 -1
  140. package/dist/handlers/tool-configs/universal/shared-handlers.d.ts +20 -1
  141. package/dist/handlers/tool-configs/universal/shared-handlers.d.ts.map +1 -1
  142. package/dist/handlers/tool-configs/universal/shared-handlers.js +216 -0
  143. package/dist/handlers/tool-configs/universal/shared-handlers.js.map +1 -1
  144. package/dist/handlers/tool-configs/universal/smithery-diagnostics.js +2 -2
  145. package/dist/handlers/tool-configs/universal/types.d.ts +9 -0
  146. package/dist/handlers/tool-configs/universal/types.d.ts.map +1 -1
  147. package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts +11 -0
  148. package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts.map +1 -1
  149. package/dist/handlers/tool-configs/universal/validators/schema-validator.js +63 -9
  150. package/dist/handlers/tool-configs/universal/validators/schema-validator.js.map +1 -1
  151. package/dist/handlers/tool-types.d.ts +9 -0
  152. package/dist/handlers/tool-types.d.ts.map +1 -1
  153. package/dist/handlers/tools/dispatcher/core.d.ts.map +1 -1
  154. package/dist/handlers/tools/dispatcher/core.js +24 -5
  155. package/dist/handlers/tools/dispatcher/core.js.map +1 -1
  156. package/dist/handlers/tools/formatters.d.ts +8 -1
  157. package/dist/handlers/tools/formatters.d.ts.map +1 -1
  158. package/dist/handlers/tools/formatters.js +30 -14
  159. package/dist/handlers/tools/formatters.js.map +1 -1
  160. package/dist/handlers/tools/registry.d.ts +125 -84
  161. package/dist/handlers/tools/registry.d.ts.map +1 -1
  162. package/dist/handlers/tools/registry.js +14 -9
  163. package/dist/handlers/tools/registry.js.map +1 -1
  164. package/dist/handlers/tools/standards/index.d.ts.map +1 -1
  165. package/dist/handlers/tools/standards/index.js +19 -11
  166. package/dist/handlers/tools/standards/index.js.map +1 -1
  167. package/dist/objects/companies/attributes.d.ts +5 -0
  168. package/dist/objects/companies/attributes.d.ts.map +1 -1
  169. package/dist/objects/companies/attributes.js +45 -31
  170. package/dist/objects/companies/attributes.js.map +1 -1
  171. package/dist/server/createServer.d.ts.map +1 -1
  172. package/dist/server/createServer.js +4 -3
  173. package/dist/server/createServer.js.map +1 -1
  174. package/dist/services/ErrorService.js +3 -3
  175. package/dist/services/ErrorService.js.map +1 -1
  176. package/dist/services/UniversalCreateService.d.ts.map +1 -1
  177. package/dist/services/UniversalCreateService.js +136 -12
  178. package/dist/services/UniversalCreateService.js.map +1 -1
  179. package/dist/services/UniversalSearchService.d.ts +4 -25
  180. package/dist/services/UniversalSearchService.d.ts.map +1 -1
  181. package/dist/services/UniversalSearchService.js +14 -324
  182. package/dist/services/UniversalSearchService.js.map +1 -1
  183. package/dist/services/UniversalUpdateService.d.ts +15 -4
  184. package/dist/services/UniversalUpdateService.d.ts.map +1 -1
  185. package/dist/services/UniversalUpdateService.js +79 -151
  186. package/dist/services/UniversalUpdateService.js.map +1 -1
  187. package/dist/services/create/factory.d.ts.map +1 -1
  188. package/dist/services/create/factory.js +2 -1
  189. package/dist/services/create/factory.js.map +1 -1
  190. package/dist/services/metadata/AttributeOptionsService.d.ts +38 -0
  191. package/dist/services/metadata/AttributeOptionsService.d.ts.map +1 -0
  192. package/dist/services/metadata/AttributeOptionsService.js +92 -0
  193. package/dist/services/metadata/AttributeOptionsService.js.map +1 -0
  194. package/dist/services/metadata/index.d.ts +1 -0
  195. package/dist/services/metadata/index.d.ts.map +1 -1
  196. package/dist/services/metadata/index.js +1 -0
  197. package/dist/services/metadata/index.js.map +1 -1
  198. package/dist/services/search/QueryApiService.d.ts +27 -0
  199. package/dist/services/search/QueryApiService.d.ts.map +1 -0
  200. package/dist/services/search/QueryApiService.js +144 -0
  201. package/dist/services/search/QueryApiService.js.map +1 -0
  202. package/dist/services/search/RecordsSearchService.d.ts +27 -0
  203. package/dist/services/search/RecordsSearchService.d.ts.map +1 -0
  204. package/dist/services/search/RecordsSearchService.js +122 -0
  205. package/dist/services/search/RecordsSearchService.js.map +1 -0
  206. package/dist/services/search/SearchCoordinator.d.ts +41 -0
  207. package/dist/services/search/SearchCoordinator.d.ts.map +1 -0
  208. package/dist/services/search/SearchCoordinator.js +83 -0
  209. package/dist/services/search/SearchCoordinator.js.map +1 -0
  210. package/dist/services/search/StrategyFactory.d.ts +31 -0
  211. package/dist/services/search/StrategyFactory.d.ts.map +1 -0
  212. package/dist/services/search/StrategyFactory.js +100 -0
  213. package/dist/services/search/StrategyFactory.js.map +1 -0
  214. package/dist/services/skill-generator/OutputWriterService.d.ts +41 -0
  215. package/dist/services/skill-generator/OutputWriterService.d.ts.map +1 -0
  216. package/dist/services/skill-generator/OutputWriterService.js +100 -0
  217. package/dist/services/skill-generator/OutputWriterService.js.map +1 -0
  218. package/dist/services/skill-generator/SchemaFormatterService.d.ts +61 -0
  219. package/dist/services/skill-generator/SchemaFormatterService.d.ts.map +1 -0
  220. package/dist/services/skill-generator/SchemaFormatterService.js +168 -0
  221. package/dist/services/skill-generator/SchemaFormatterService.js.map +1 -0
  222. package/dist/services/skill-generator/WorkspaceSchemaService.d.ts +84 -0
  223. package/dist/services/skill-generator/WorkspaceSchemaService.d.ts.map +1 -0
  224. package/dist/services/skill-generator/WorkspaceSchemaService.js +292 -0
  225. package/dist/services/skill-generator/WorkspaceSchemaService.js.map +1 -0
  226. package/dist/services/skill-generator/index.d.ts +12 -0
  227. package/dist/services/skill-generator/index.d.ts.map +1 -0
  228. package/dist/services/skill-generator/index.js +11 -0
  229. package/dist/services/skill-generator/index.js.map +1 -0
  230. package/dist/services/skill-generator/types.d.ts +137 -0
  231. package/dist/services/skill-generator/types.d.ts.map +1 -0
  232. package/dist/services/skill-generator/types.js +10 -0
  233. package/dist/services/skill-generator/types.js.map +1 -0
  234. package/dist/services/update/FieldPersistenceHandler.d.ts +101 -0
  235. package/dist/services/update/FieldPersistenceHandler.d.ts.map +1 -0
  236. package/dist/services/update/FieldPersistenceHandler.js +198 -0
  237. package/dist/services/update/FieldPersistenceHandler.js.map +1 -0
  238. package/dist/services/update/FieldValidationHandler.d.ts +77 -0
  239. package/dist/services/update/FieldValidationHandler.d.ts.map +1 -0
  240. package/dist/services/update/FieldValidationHandler.js +157 -0
  241. package/dist/services/update/FieldValidationHandler.js.map +1 -0
  242. package/dist/services/update/MetadataResolver.d.ts +50 -0
  243. package/dist/services/update/MetadataResolver.d.ts.map +1 -0
  244. package/dist/services/update/MetadataResolver.js +110 -0
  245. package/dist/services/update/MetadataResolver.js.map +1 -0
  246. package/dist/services/update/UpdateOrchestrator.d.ts +37 -0
  247. package/dist/services/update/UpdateOrchestrator.d.ts.map +1 -0
  248. package/dist/services/update/UpdateOrchestrator.js +58 -0
  249. package/dist/services/update/UpdateOrchestrator.js.map +1 -0
  250. package/dist/services/update/UpdateValidation.d.ts +5 -1
  251. package/dist/services/update/UpdateValidation.d.ts.map +1 -1
  252. package/dist/services/update/UpdateValidation.js +46 -14
  253. package/dist/services/update/UpdateValidation.js.map +1 -1
  254. package/dist/services/value-transformer/index.d.ts +57 -0
  255. package/dist/services/value-transformer/index.d.ts.map +1 -0
  256. package/dist/services/value-transformer/index.js +326 -0
  257. package/dist/services/value-transformer/index.js.map +1 -0
  258. package/dist/services/value-transformer/multi-select-transformer.d.ts +63 -0
  259. package/dist/services/value-transformer/multi-select-transformer.d.ts.map +1 -0
  260. package/dist/services/value-transformer/multi-select-transformer.js +144 -0
  261. package/dist/services/value-transformer/multi-select-transformer.js.map +1 -0
  262. package/dist/services/value-transformer/record-reference-transformer.d.ts +43 -0
  263. package/dist/services/value-transformer/record-reference-transformer.d.ts.map +1 -0
  264. package/dist/services/value-transformer/record-reference-transformer.js +245 -0
  265. package/dist/services/value-transformer/record-reference-transformer.js.map +1 -0
  266. package/dist/services/value-transformer/select-transformer.d.ts +48 -0
  267. package/dist/services/value-transformer/select-transformer.d.ts.map +1 -0
  268. package/dist/services/value-transformer/select-transformer.js +232 -0
  269. package/dist/services/value-transformer/select-transformer.js.map +1 -0
  270. package/dist/services/value-transformer/status-transformer.d.ts +32 -0
  271. package/dist/services/value-transformer/status-transformer.d.ts.map +1 -0
  272. package/dist/services/value-transformer/status-transformer.js +294 -0
  273. package/dist/services/value-transformer/status-transformer.js.map +1 -0
  274. package/dist/services/value-transformer/types.d.ts +100 -0
  275. package/dist/services/value-transformer/types.d.ts.map +1 -0
  276. package/dist/services/value-transformer/types.js +6 -0
  277. package/dist/services/value-transformer/types.js.map +1 -0
  278. package/dist/templates/skill/SKILL.template.md +78 -0
  279. package/dist/templates/skill/attribute-reference.template.md +126 -0
  280. package/dist/templates/skill/complex-types.template.md +255 -0
  281. package/dist/utils/client-resolver.d.ts.map +1 -1
  282. package/dist/utils/client-resolver.js +8 -16
  283. package/dist/utils/client-resolver.js.map +1 -1
  284. package/dist/utils/complex-type-validation.d.ts +16 -0
  285. package/dist/utils/complex-type-validation.d.ts.map +1 -0
  286. package/dist/utils/complex-type-validation.js +196 -0
  287. package/dist/utils/complex-type-validation.js.map +1 -0
  288. package/dist/utils/error-utilities.d.ts.map +1 -1
  289. package/dist/utils/error-utilities.js +16 -9
  290. package/dist/utils/error-utilities.js.map +1 -1
  291. package/dist/utils/location-normalizer.d.ts +26 -0
  292. package/dist/utils/location-normalizer.d.ts.map +1 -0
  293. package/dist/utils/location-normalizer.js +39 -0
  294. package/dist/utils/location-normalizer.js.map +1 -0
  295. package/dist/utils/metadata-utils.d.ts +27 -0
  296. package/dist/utils/metadata-utils.d.ts.map +1 -0
  297. package/dist/utils/metadata-utils.js +59 -0
  298. package/dist/utils/metadata-utils.js.map +1 -0
  299. package/dist/utils/personal-name-parser.d.ts.map +1 -1
  300. package/dist/utils/personal-name-parser.js +26 -17
  301. package/dist/utils/personal-name-parser.js.map +1 -1
  302. package/dist/validators/company/field_detector.d.ts.map +1 -1
  303. package/dist/validators/company/field_detector.js +5 -0
  304. package/dist/validators/company/field_detector.js.map +1 -1
  305. package/package.json +28 -25
@@ -0,0 +1,37 @@
1
+ /**
2
+ * UpdateOrchestrator - Strategy pattern orchestration for updates
3
+ *
4
+ * Extracted from UniversalUpdateService to separate concerns.
5
+ * Delegates to resource-specific update strategies.
6
+ *
7
+ * @see Issue #984 - Modularize UniversalUpdateService (831→220 lines)
8
+ */
9
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
10
+ import type { AttioRecord } from '../../types/attio.js';
11
+ /**
12
+ * Context for update orchestration
13
+ */
14
+ export interface UpdateContext {
15
+ /** Resource type being updated */
16
+ resourceType: UniversalResourceType;
17
+ /** ID of the record to update */
18
+ recordId: string;
19
+ /** Sanitized values to update */
20
+ sanitizedValues: Record<string, unknown>;
21
+ /** Optional object slug for records/deals */
22
+ objectSlug?: string;
23
+ }
24
+ /**
25
+ * UpdateOrchestrator - Delegates updates to resource-specific strategies
26
+ */
27
+ export declare class UpdateOrchestrator {
28
+ /**
29
+ * Dispatch update to appropriate strategy based on resource type
30
+ *
31
+ * @param context - Update context with resource type, record ID, values, and options
32
+ * @returns Updated record from Attio API
33
+ * @throws Error if resource type is unsupported
34
+ */
35
+ static executeUpdate(context: UpdateContext): Promise<AttioRecord>;
36
+ }
37
+ //# sourceMappingURL=UpdateOrchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/services/update/UpdateOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,YAAY,EAAE,qBAAqB,CAAC;IACpC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;;;;;OAMG;WACU,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;CA2EzE"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * UpdateOrchestrator - Strategy pattern orchestration for updates
3
+ *
4
+ * Extracted from UniversalUpdateService to separate concerns.
5
+ * Delegates to resource-specific update strategies.
6
+ *
7
+ * @see Issue #984 - Modularize UniversalUpdateService (831→220 lines)
8
+ */
9
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
10
+ import { debug } from '../../utils/logger.js';
11
+ /**
12
+ * UpdateOrchestrator - Delegates updates to resource-specific strategies
13
+ */
14
+ export class UpdateOrchestrator {
15
+ /**
16
+ * Dispatch update to appropriate strategy based on resource type
17
+ *
18
+ * @param context - Update context with resource type, record ID, values, and options
19
+ * @returns Updated record from Attio API
20
+ * @throws Error if resource type is unsupported
21
+ */
22
+ static async executeUpdate(context) {
23
+ const { resourceType, recordId, sanitizedValues, objectSlug } = context;
24
+ debug('UpdateOrchestrator', 'Dispatching update', {
25
+ resourceType,
26
+ recordId,
27
+ objectSlug,
28
+ fieldCount: Object.keys(sanitizedValues).length,
29
+ });
30
+ switch (resourceType) {
31
+ case UniversalResourceType.COMPANIES: {
32
+ const { CompanyUpdateStrategy } = await import('./strategies/CompanyUpdateStrategy.js');
33
+ return new CompanyUpdateStrategy().update(recordId, sanitizedValues, resourceType);
34
+ }
35
+ case UniversalResourceType.LISTS: {
36
+ const { ListUpdateStrategy } = await import('./strategies/ListUpdateStrategy.js');
37
+ return new ListUpdateStrategy().update(recordId, sanitizedValues, resourceType);
38
+ }
39
+ case UniversalResourceType.PEOPLE: {
40
+ const { PersonUpdateStrategy } = await import('./strategies/PersonUpdateStrategy.js');
41
+ return new PersonUpdateStrategy().update(recordId, sanitizedValues, resourceType);
42
+ }
43
+ case UniversalResourceType.RECORDS:
44
+ case UniversalResourceType.DEALS: {
45
+ const { RecordUpdateStrategy } = await import('./strategies/RecordUpdateStrategy.js');
46
+ return new RecordUpdateStrategy().update(recordId, sanitizedValues, resourceType, { objectSlug: objectSlug || 'records' });
47
+ }
48
+ case UniversalResourceType.TASKS: {
49
+ const { TaskUpdateStrategy } = await import('./strategies/TaskUpdateStrategy.js');
50
+ return new TaskUpdateStrategy().update(recordId, sanitizedValues, resourceType);
51
+ }
52
+ default: {
53
+ throw new Error(`Unsupported resource type for update: ${resourceType}`);
54
+ }
55
+ }
56
+ }
57
+ }
58
+ //# sourceMappingURL=UpdateOrchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateOrchestrator.js","sourceRoot":"","sources":["../../../src/services/update/UpdateOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAEnF,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAgB1C;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAsB;QAC/C,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAExE,KAAK,CAAC,oBAAoB,EAAE,oBAAoB,EAAE;YAChD,YAAY;YACZ,QAAQ;YACR,UAAU;YACV,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM;SAChD,CAAC,CAAC;QAEH,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;gBACrC,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAC5C,uCAAuC,CACxC,CAAC;gBACF,OAAO,IAAI,qBAAqB,EAAE,CAAC,MAAM,CACvC,QAAQ,EACR,eAAe,EACf,YAAY,CACb,CAAC;YACJ,CAAC;YAED,KAAK,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CACzC,oCAAoC,CACrC,CAAC;gBACF,OAAO,IAAI,kBAAkB,EAAE,CAAC,MAAM,CACpC,QAAQ,EACR,eAAe,EACf,YAAY,CACb,CAAC;YACJ,CAAC;YAED,KAAK,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAC3C,sCAAsC,CACvC,CAAC;gBACF,OAAO,IAAI,oBAAoB,EAAE,CAAC,MAAM,CACtC,QAAQ,EACR,eAAe,EACf,YAAY,CACb,CAAC;YACJ,CAAC;YAED,KAAK,qBAAqB,CAAC,OAAO,CAAC;YACnC,KAAK,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAC3C,sCAAsC,CACvC,CAAC;gBACF,OAAO,IAAI,oBAAoB,EAAE,CAAC,MAAM,CACtC,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,EAAE,UAAU,EAAE,UAAU,IAAI,SAAS,EAAE,CACxC,CAAC;YACJ,CAAC;YAED,KAAK,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CACzC,oCAAoC,CACrC,CAAC;gBACF,OAAO,IAAI,kBAAkB,EAAE,CAAC,MAAM,CACpC,QAAQ,EACR,eAAe,EACf,YAAY,CACb,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,KAAK,CACb,yCAAyC,YAAY,EAAE,CACxD,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -11,7 +11,11 @@ export declare const UpdateValidation: {
11
11
  }>;
12
12
  fetchRecordForVerification(resourceType: UniversalResourceType, recordId: string): Promise<AttioRecord | null>;
13
13
  /**
14
- * Check if a field name represents a status field (like deal stages)
14
+ * Check if a field is a status-type field (stage, status, etc.)
15
+ * Enhanced to recognize more status field variations (Issue #995)
16
+ *
17
+ * Uses exact matching and suffix patterns to avoid false positives
18
+ * from unrelated fields like "status_code" or "status_updated_at"
15
19
  */
16
20
  isStatusField(fieldName: string): boolean;
17
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateValidation.d.ts","sourceRoot":"","sources":["../../../src/services/update/UpdateValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AASxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAG5F,eAAO,MAAM,gBAAgB;gCACC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;0CAMvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;oCAU5D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;yCAqBV,qBAAqB,YACzB,MAAM,mBACC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,OAAO,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;6CA+Dc,qBAAqB,YACzB,MAAM,GACf,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAwD9B;;OAEG;6BACsB,MAAM,GAAG,OAAO;IAIzC;;OAEG;oCAEc,OAAO,eACT,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAU9B;;;OAGG;gCACyB,MAAM,eAAe,OAAO,GAAG,OAAO;IA4BlE;;OAEG;sCAEc,OAAO,EAAE,eACX,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE;IAevB;;OAEG;mCAEU,MAAM,iBACF,MAAM,eACR,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAczC;;OAEG;oCAEU,MAAM,iBACF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eACzB,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAU9B;;OAEG;0CAEc,OAAO,eACT,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE;kCAgBV,MAAM,iBACF,OAAO,eACT,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;CAuC1C,CAAC"}
1
+ {"version":3,"file":"UpdateValidation.d.ts","sourceRoot":"","sources":["../../../src/services/update/UpdateValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AASpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAGxF,eAAO,MAAM,gBAAgB;gCACC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;0CAMvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;oCAU5D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;yCAqBV,qBAAqB,YACzB,MAAM,mBACC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,OAAO,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;6CAuEc,qBAAqB,YACzB,MAAM,GACf,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAwD9B;;;;;;OAMG;6BACsB,MAAM,GAAG,OAAO;IAezC;;OAEG;oCAEc,OAAO,eACT,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAU9B;;;OAGG;gCACyB,MAAM,eAAe,OAAO,GAAG,OAAO;IAiDlE;;OAEG;sCAEc,OAAO,EAAE,eACX,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE;IAevB;;OAEG;mCAEU,MAAM,iBACF,MAAM,eACR,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAczC;;OAEG;oCAEU,MAAM,iBACF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eACzB,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAU9B;;OAEG;0CAEc,OAAO,eACT,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE;kCAgBV,MAAM,iBACF,OAAO,eACT,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;CAuC1C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { FilterValidationError } from '../../errors/api-errors.js';
2
- import { shouldUseMockData } from '../create/index.js';
3
- import { UniversalUtilityService } from '../UniversalUtilityService.js';
2
+ import { shouldUseMockData } from '../../services/create/index.js';
3
+ import { UniversalUtilityService } from '../../services/UniversalUtilityService.js';
4
4
  import { getCompanyDetails } from '../../objects/companies/index.js';
5
5
  import { getListDetails } from '../../objects/lists.js';
6
6
  import { getPersonDetails } from '../../objects/people/basic.js';
@@ -45,7 +45,12 @@ export const UpdateValidation = {
45
45
  discrepancies: [],
46
46
  warnings: [],
47
47
  };
48
- if (shouldUseMockData() || process.env.SKIP_FIELD_VERIFICATION === 'true') {
48
+ // Standardized environment variable (Issue #984 extension)
49
+ // SKIP_FIELD_VERIFICATION is deprecated, use ENABLE_FIELD_VERIFICATION=false instead
50
+ const skipVerification = shouldUseMockData() ||
51
+ process.env.ENABLE_FIELD_VERIFICATION === 'false' ||
52
+ process.env.SKIP_FIELD_VERIFICATION === 'true'; // Deprecated
53
+ if (skipVerification) {
49
54
  result.warnings.push('Field persistence verification skipped in test environment');
50
55
  return result;
51
56
  }
@@ -121,10 +126,21 @@ export const UpdateValidation = {
121
126
  }
122
127
  },
123
128
  /**
124
- * Check if a field name represents a status field (like deal stages)
129
+ * Check if a field is a status-type field (stage, status, etc.)
130
+ * Enhanced to recognize more status field variations (Issue #995)
131
+ *
132
+ * Uses exact matching and suffix patterns to avoid false positives
133
+ * from unrelated fields like "status_code" or "status_updated_at"
125
134
  */
126
135
  isStatusField(fieldName) {
127
- return fieldName === 'stage' || fieldName.includes('stage');
136
+ const lowerFieldName = fieldName.toLowerCase();
137
+ // Exact matches for canonical status fields
138
+ if (lowerFieldName === 'stage' || lowerFieldName === 'status') {
139
+ return true;
140
+ }
141
+ // Suffix patterns for common variations
142
+ // e.g., deal_stage, pipeline_stage, company_status, deal_status
143
+ return (lowerFieldName.endsWith('_stage') || lowerFieldName.endsWith('_status'));
128
144
  },
129
145
  /**
130
146
  * Handle null or undefined values
@@ -147,17 +163,33 @@ export const UpdateValidation = {
147
163
  return actualValue;
148
164
  }
149
165
  const firstItem = actualValue[0];
150
- // Handle status fields (like deal stages) - they use 'status' property
151
- if (this.isStatusField(fieldName) && firstItem?.status !== undefined) {
152
- return actualValue.length === 1
153
- ? firstItem.status
154
- : actualValue.map((v) => v.status);
166
+ // Guard: only proceed with status/title logic if firstItem is an object
167
+ // and contains status or title properties
168
+ if (this.isStatusField(fieldName) &&
169
+ firstItem &&
170
+ typeof firstItem === 'object' &&
171
+ !Array.isArray(firstItem)) {
172
+ const firstItemObj = firstItem;
173
+ // Only use status/title extraction if the object actually has those properties
174
+ if ('status' in firstItemObj || 'title' in firstItemObj) {
175
+ const statusValue = firstItemObj.status ?? firstItemObj.title;
176
+ if (statusValue !== undefined) {
177
+ return actualValue.length === 1
178
+ ? statusValue
179
+ : actualValue.map((v) => v.status ?? v.title);
180
+ }
181
+ }
155
182
  }
156
183
  // Handle regular value fields
157
- if (firstItem?.value !== undefined) {
158
- return actualValue.length === 1
159
- ? firstItem.value
160
- : actualValue.map((v) => v.value);
184
+ if (firstItem &&
185
+ typeof firstItem === 'object' &&
186
+ !Array.isArray(firstItem)) {
187
+ const firstItemObj = firstItem;
188
+ if (firstItemObj.value !== undefined) {
189
+ return actualValue.length === 1
190
+ ? firstItemObj.value
191
+ : actualValue.map((v) => v.value);
192
+ }
161
193
  }
162
194
  return actualValue;
163
195
  },
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateValidation.js","sourceRoot":"","sources":["../../../src/services/update/UpdateValidation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UpdateValidation.js","sourceRoot":"","sources":["../../../src/services/update/UpdateValidation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Value Transformer Service
3
+ *
4
+ * Orchestrates automatic value transformations before API calls to prevent
5
+ * common LLM errors when creating/updating records.
6
+ *
7
+ * Transformations:
8
+ * - Status fields: "Demo Scheduling" → [{status: "uuid"}]
9
+ * - Multi-select fields: "Inbound" → ["Inbound"]
10
+ * - Record-reference fields: "uuid" → [{target_object: "X", target_record_id: "uuid"}] (Issue #997)
11
+ *
12
+ * @module services/value-transformer
13
+ */
14
+ import { TransformContext, RecordTransformResult } from './types.js';
15
+ import { clearStatusCache } from './status-transformer.js';
16
+ import { clearSelectCache } from './select-transformer.js';
17
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
18
+ export * from './types.js';
19
+ export { clearStatusCache, clearSelectCache };
20
+ /**
21
+ * Clear all transformer caches (useful for testing)
22
+ * @see Issue #984 - Now uses CachingService instead of local cache
23
+ */
24
+ export declare function clearAllCaches(): void;
25
+ /**
26
+ * Transform record values before API call
27
+ *
28
+ * @param recordData - The record data to transform
29
+ * @param context - Transformation context (resourceType, operation, recordId)
30
+ * @returns Transformed record data with transformation details
31
+ */
32
+ export declare function transformRecordValues(recordData: Record<string, unknown>, context: TransformContext): Promise<RecordTransformResult>;
33
+ /**
34
+ * Check if a record has fields that may need transformation
35
+ * (Quick check without actually fetching metadata)
36
+ *
37
+ * TRADE-OFF: This function is intentionally PERMISSIVE.
38
+ *
39
+ * Issue #992: We can't know which custom fields are multi-select without fetching
40
+ * metadata from the API. Rather than miss a multi-select field and cause an API
41
+ * error, we trigger transformation for any unknown string field.
42
+ *
43
+ * Issue #997: Record-reference fields also need transformation to format
44
+ * record IDs to [{target_object, target_record_id}] format.
45
+ *
46
+ * Implications:
47
+ * - Some fields will trigger transformation unnecessarily (false positives)
48
+ * - First request per resource type incurs metadata API call (then cached)
49
+ * - This is better than the alternative: silent failures on custom multi-selects
50
+ *
51
+ * Tuning levers if performance becomes an issue:
52
+ * - Expand `definitelyNotMultiSelect` with common text field patterns
53
+ * - Monitor false-positive rate via logging
54
+ * - Consider workspace-specific caching of field types
55
+ */
56
+ export declare function mayNeedTransformation(recordData: Record<string, unknown>, resourceType: UniversalResourceType): boolean;
57
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/value-transformer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAEL,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAQnF,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC;AA2DD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,qBAAqB,CAAC,CAiLhC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,YAAY,EAAE,qBAAqB,GAClC,OAAO,CAiIT"}
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Value Transformer Service
3
+ *
4
+ * Orchestrates automatic value transformations before API calls to prevent
5
+ * common LLM errors when creating/updating records.
6
+ *
7
+ * Transformations:
8
+ * - Status fields: "Demo Scheduling" → [{status: "uuid"}]
9
+ * - Multi-select fields: "Inbound" → ["Inbound"]
10
+ * - Record-reference fields: "uuid" → [{target_object: "X", target_record_id: "uuid"}] (Issue #997)
11
+ *
12
+ * @module services/value-transformer
13
+ */
14
+ import { transformStatusValue, clearStatusCache, } from './status-transformer.js';
15
+ import { transformMultiSelectValue } from './multi-select-transformer.js';
16
+ import { transformSelectValue, clearSelectCache, } from './select-transformer.js';
17
+ import { transformRecordReferenceValue, isCorrectRecordReferenceFormat, } from './record-reference-transformer.js';
18
+ import { convertToMetadataMap } from '../../utils/metadata-utils.js';
19
+ import { handleUniversalDiscoverAttributes } from '../../handlers/tool-configs/universal/shared-handlers.js';
20
+ import { debug, error as logError, OperationType } from '../../utils/logger.js';
21
+ import { CachingService } from '../../services/CachingService.js';
22
+ import { DEFAULT_ATTRIBUTES_CACHE_TTL } from '../../constants/universal.constants.js';
23
+ // Re-export types
24
+ export * from './types.js';
25
+ export { clearStatusCache, clearSelectCache };
26
+ /**
27
+ * Clear all transformer caches (useful for testing)
28
+ * @see Issue #984 - Now uses CachingService instead of local cache
29
+ */
30
+ export function clearAllCaches() {
31
+ CachingService.clearAttributesCache();
32
+ clearStatusCache();
33
+ clearSelectCache();
34
+ }
35
+ /**
36
+ * Get attribute metadata for a resource type with caching
37
+ * @see Issue #984 - Now uses CachingService with TTL and accepts provided metadata
38
+ */
39
+ async function getAttributeMetadata(resourceType, providedMetadata) {
40
+ // Use provided metadata if available (avoid duplicate fetch)
41
+ if (providedMetadata && providedMetadata.size > 0) {
42
+ debug('value-transformer', 'Using pre-fetched metadata from parent', { resourceType, attributeCount: providedMetadata.size }, 'getAttributeMetadata', OperationType.DATA_PROCESSING);
43
+ return providedMetadata;
44
+ }
45
+ try {
46
+ // Use CachingService with TTL instead of local cache
47
+ const result = await CachingService.getOrLoadAttributes(async () => {
48
+ const schema = await handleUniversalDiscoverAttributes(resourceType);
49
+ return schema;
50
+ }, resourceType, undefined, DEFAULT_ATTRIBUTES_CACHE_TTL);
51
+ debug('value-transformer', 'Fetched attribute metadata', {
52
+ resourceType,
53
+ fromCache: result.fromCache,
54
+ }, 'getAttributeMetadata', OperationType.DATA_PROCESSING);
55
+ return convertToMetadataMap(result.data);
56
+ }
57
+ catch (err) {
58
+ logError('value-transformer', `Failed to fetch attribute metadata for ${resourceType}`, err);
59
+ return new Map();
60
+ }
61
+ }
62
+ // Note: convertToMetadataMap() moved to @/utils/metadata-utils.js (PR #1006 Phase 2.1)
63
+ // This eliminates duplication between value-transformer and MetadataResolver
64
+ /**
65
+ * Transform record values before API call
66
+ *
67
+ * @param recordData - The record data to transform
68
+ * @param context - Transformation context (resourceType, operation, recordId)
69
+ * @returns Transformed record data with transformation details
70
+ */
71
+ export async function transformRecordValues(recordData, context) {
72
+ const transformations = [];
73
+ const warnings = [];
74
+ const transformedData = {};
75
+ // Get attribute metadata for this resource type
76
+ // Issue #984: Use provided metadata if available to avoid duplicate API fetch
77
+ const attributeMetadata = await getAttributeMetadata(context.resourceType, context.attributeMetadata);
78
+ debug('value-transformer', `Starting transformation for ${context.resourceType}`, {
79
+ operation: context.operation,
80
+ fieldCount: Object.keys(recordData).length,
81
+ knownAttributes: attributeMetadata.size,
82
+ }, 'transformRecordValues', OperationType.DATA_PROCESSING);
83
+ // Process each field
84
+ for (const [field, value] of Object.entries(recordData)) {
85
+ const attrMeta = attributeMetadata.get(field);
86
+ // If no metadata found, pass through unchanged
87
+ if (!attrMeta) {
88
+ transformedData[field] = value;
89
+ continue;
90
+ }
91
+ // Try status transformation
92
+ try {
93
+ const statusResult = await transformStatusValue(value, field, context, attrMeta);
94
+ if (statusResult.transformed) {
95
+ transformedData[field] = statusResult.transformedValue;
96
+ transformations.push({
97
+ field,
98
+ from: statusResult.originalValue,
99
+ to: statusResult.transformedValue,
100
+ type: 'status_title_to_id',
101
+ description: statusResult.description || 'Status value transformed',
102
+ });
103
+ continue;
104
+ }
105
+ }
106
+ catch (err) {
107
+ // Status transformation threw an error (invalid value)
108
+ throw err;
109
+ }
110
+ // Try multi-select transformation
111
+ try {
112
+ const multiSelectResult = await transformMultiSelectValue(value, field, context, attrMeta);
113
+ if (multiSelectResult.transformed) {
114
+ transformedData[field] = multiSelectResult.transformedValue;
115
+ transformations.push({
116
+ field,
117
+ from: multiSelectResult.originalValue,
118
+ to: multiSelectResult.transformedValue,
119
+ type: 'multi_select_wrap',
120
+ description: multiSelectResult.description || 'Multi-select value wrapped',
121
+ });
122
+ continue;
123
+ }
124
+ }
125
+ catch (err) {
126
+ // Multi-select transformation threw an error
127
+ throw err;
128
+ }
129
+ // Issue #1019: Try single-select transformation
130
+ try {
131
+ const selectResult = await transformSelectValue(value, field, context, attrMeta);
132
+ if (selectResult.transformed) {
133
+ transformedData[field] = selectResult.transformedValue;
134
+ transformations.push({
135
+ field,
136
+ from: selectResult.originalValue,
137
+ to: selectResult.transformedValue,
138
+ type: 'select_title_to_array',
139
+ description: selectResult.description || 'Select value transformed',
140
+ });
141
+ continue;
142
+ }
143
+ }
144
+ catch (err) {
145
+ // Select transformation threw an error
146
+ throw err;
147
+ }
148
+ // Issue #997: Try record-reference transformation
149
+ try {
150
+ const refResult = await transformRecordReferenceValue(value, field, context, attrMeta);
151
+ if (refResult.transformed) {
152
+ transformedData[field] = refResult.transformedValue;
153
+ transformations.push({
154
+ field,
155
+ from: refResult.originalValue,
156
+ to: refResult.transformedValue,
157
+ type: 'record_reference_format',
158
+ description: refResult.description || 'Record reference formatted',
159
+ });
160
+ continue;
161
+ }
162
+ }
163
+ catch (err) {
164
+ // Record-reference transformation threw an error
165
+ throw err;
166
+ }
167
+ // No transformation applied, pass through unchanged
168
+ transformedData[field] = value;
169
+ // Issue #992: Debug logging for false-positive measurement
170
+ // Helps evaluate if mayNeedTransformation() is triggering too often for non-multi-select fields
171
+ if (attrMeta && !attrMeta.is_multiselect && typeof value === 'string') {
172
+ debug('value-transformer', 'Non-multi-select string field passed through unchanged', {
173
+ field,
174
+ resourceType: context.resourceType,
175
+ attrType: attrMeta.type,
176
+ }, 'transformRecordValues', OperationType.DATA_PROCESSING);
177
+ }
178
+ }
179
+ // Log transformation summary
180
+ if (transformations.length > 0) {
181
+ debug('value-transformer', `Completed transformation`, {
182
+ transformationCount: transformations.length,
183
+ transformations: transformations.map((t) => ({
184
+ field: t.field,
185
+ type: t.type,
186
+ })),
187
+ }, 'transformRecordValues', OperationType.DATA_PROCESSING);
188
+ }
189
+ return {
190
+ data: transformedData,
191
+ transformations,
192
+ warnings,
193
+ };
194
+ }
195
+ /**
196
+ * Check if a record has fields that may need transformation
197
+ * (Quick check without actually fetching metadata)
198
+ *
199
+ * TRADE-OFF: This function is intentionally PERMISSIVE.
200
+ *
201
+ * Issue #992: We can't know which custom fields are multi-select without fetching
202
+ * metadata from the API. Rather than miss a multi-select field and cause an API
203
+ * error, we trigger transformation for any unknown string field.
204
+ *
205
+ * Issue #997: Record-reference fields also need transformation to format
206
+ * record IDs to [{target_object, target_record_id}] format.
207
+ *
208
+ * Implications:
209
+ * - Some fields will trigger transformation unnecessarily (false positives)
210
+ * - First request per resource type incurs metadata API call (then cached)
211
+ * - This is better than the alternative: silent failures on custom multi-selects
212
+ *
213
+ * Tuning levers if performance becomes an issue:
214
+ * - Expand `definitelyNotMultiSelect` with common text field patterns
215
+ * - Monitor false-positive rate via logging
216
+ * - Consider workspace-specific caching of field types
217
+ */
218
+ export function mayNeedTransformation(recordData, resourceType) {
219
+ // Known status fields by resource type
220
+ const statusFields = {
221
+ deals: ['stage'],
222
+ tasks: ['status'],
223
+ };
224
+ // Issue #997: Known record-reference fields by resource type
225
+ const recordReferenceFields = {
226
+ people: ['company'],
227
+ deals: ['associated_company', 'associated_people'],
228
+ companies: ['main_contact'],
229
+ };
230
+ // Known multi-select fields (workspace-specific, so we check common patterns)
231
+ // Issue #992: Added 'channel' based on user feedback
232
+ const multiSelectIndicators = [
233
+ 'categories',
234
+ 'tags',
235
+ 'types',
236
+ 'lead_type',
237
+ 'inbound_outbound',
238
+ 'channel', // Added per Issue #992 feedback
239
+ ];
240
+ // Issue #997: Record-reference field name patterns
241
+ const recordReferenceIndicators = [
242
+ 'company',
243
+ 'person',
244
+ 'people',
245
+ 'contact',
246
+ 'owner',
247
+ 'assignee',
248
+ 'associated_',
249
+ ];
250
+ // Fields that are definitely NOT multi-select (optimization to avoid unnecessary API calls)
251
+ const definitelyNotMultiSelect = [
252
+ 'name',
253
+ 'description',
254
+ 'notes',
255
+ 'email',
256
+ 'phone',
257
+ 'website',
258
+ 'domain',
259
+ 'address',
260
+ 'title',
261
+ 'content',
262
+ 'id',
263
+ 'record_id',
264
+ ];
265
+ const resourceKey = resourceType.toLowerCase();
266
+ const knownStatusFields = statusFields[resourceKey] || [];
267
+ const knownRefFields = recordReferenceFields[resourceKey] || [];
268
+ const isAlreadyNormalizedStatusArray = (value) => {
269
+ if (!Array.isArray(value) || value.length === 0)
270
+ return false;
271
+ const first = value[0];
272
+ if (!first || typeof first !== 'object' || Array.isArray(first))
273
+ return false;
274
+ return 'status' in first;
275
+ };
276
+ for (const field of Object.keys(recordData)) {
277
+ const value = recordData[field];
278
+ const fieldLower = field.toLowerCase();
279
+ // Skip null/undefined values - they don't need transformation
280
+ if (value === null || value === undefined) {
281
+ continue;
282
+ }
283
+ // Issue #997: Check if it's a known record-reference field that may need formatting
284
+ // Record-reference fields can be strings, objects, or arrays - all may need transformation
285
+ if (knownRefFields.includes(field)) {
286
+ // Only skip if already in correct format (uses shared helper to avoid duplication)
287
+ if (isCorrectRecordReferenceFormat(value)) {
288
+ continue; // Already in correct format
289
+ }
290
+ return true;
291
+ }
292
+ // Skip arrays for other checks - they don't need multi-select transformation
293
+ if (Array.isArray(value)) {
294
+ continue;
295
+ }
296
+ // Check if it's a known status field (deals.stage, tasks.status) that needs normalization
297
+ if (knownStatusFields.includes(field)) {
298
+ // Strings always need transformation (title → id)
299
+ if (typeof value === 'string')
300
+ return true;
301
+ // Accept already-normalized Attio array shape
302
+ if (isAlreadyNormalizedStatusArray(value))
303
+ continue;
304
+ // Any other non-null shape (object / legacy / wrong array) should trigger normalization
305
+ return true;
306
+ }
307
+ // Check if it matches known multi-select indicator patterns
308
+ if (multiSelectIndicators.some((indicator) => fieldLower.includes(indicator))) {
309
+ return true;
310
+ }
311
+ // Issue #997: Check if field name suggests record-reference
312
+ if (recordReferenceIndicators.some((indicator) => fieldLower.includes(indicator)) &&
313
+ (typeof value === 'string' || typeof value === 'object')) {
314
+ return true;
315
+ }
316
+ // Issue #992: For any string value on a field that's NOT definitely-not-multi-select,
317
+ // trigger transformation to let the actual metadata check determine if it's multi-select
318
+ if (typeof value === 'string' &&
319
+ !definitelyNotMultiSelect.some((safe) => fieldLower.includes(safe))) {
320
+ // This is a potential multi-select field - trigger full transformation
321
+ return true;
322
+ }
323
+ }
324
+ return false;
325
+ }
326
+ //# sourceMappingURL=index.js.map