attio-mcp 1.3.6 → 1.4.1

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 (440) hide show
  1. package/CHANGELOG.md +284 -3
  2. package/README.md +143 -334
  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 +42 -20
  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 +3 -3
  14. package/dist/api/operations/batch.d.ts.map +1 -1
  15. package/dist/api/operations/batch.js.map +1 -1
  16. package/dist/api/operations/crud.d.ts.map +1 -1
  17. package/dist/api/operations/crud.js.map +1 -1
  18. package/dist/api/operations/search.d.ts.map +1 -1
  19. package/dist/api/operations/search.js.map +1 -1
  20. package/dist/cli/commands/generate-skill.d.ts +28 -0
  21. package/dist/cli/commands/generate-skill.d.ts.map +1 -0
  22. package/dist/cli/commands/generate-skill.js +101 -0
  23. package/dist/cli/commands/generate-skill.js.map +1 -0
  24. package/dist/cli/discover.js +65 -0
  25. package/dist/cli/discover.js.map +1 -1
  26. package/dist/cli.js.map +1 -1
  27. package/dist/config/deal-defaults.d.ts +2 -2
  28. package/dist/config/deal-defaults.d.ts.map +1 -1
  29. package/dist/config/deal-defaults.js +15 -6
  30. package/dist/config/deal-defaults.js.map +1 -1
  31. package/dist/config/tool-aliases.d.ts +12 -0
  32. package/dist/config/tool-aliases.d.ts.map +1 -1
  33. package/dist/config/tool-aliases.js +213 -69
  34. package/dist/config/tool-aliases.js.map +1 -1
  35. package/dist/constants/tool-names.d.ts +84 -0
  36. package/dist/constants/tool-names.d.ts.map +1 -0
  37. package/dist/constants/tool-names.js +81 -0
  38. package/dist/constants/tool-names.js.map +1 -0
  39. package/dist/constants/universal.constants.d.ts +24 -0
  40. package/dist/constants/universal.constants.d.ts.map +1 -1
  41. package/dist/constants/universal.constants.js +81 -9
  42. package/dist/constants/universal.constants.js.map +1 -1
  43. package/dist/errors/value-match-error.js +1 -1
  44. package/dist/handlers/tool-configs/lists.d.ts +142 -19
  45. package/dist/handlers/tool-configs/lists.d.ts.map +1 -1
  46. package/dist/handlers/tool-configs/lists.js +319 -25
  47. package/dist/handlers/tool-configs/lists.js.map +1 -1
  48. package/dist/handlers/tool-configs/universal/batch-search.d.ts +1 -1
  49. package/dist/handlers/tool-configs/universal/batch-search.d.ts.map +1 -1
  50. package/dist/handlers/tool-configs/universal/batch-search.js +17 -13
  51. package/dist/handlers/tool-configs/universal/batch-search.js.map +1 -1
  52. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts +26 -4
  53. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts.map +1 -1
  54. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js +181 -21
  55. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js.map +1 -1
  56. package/dist/handlers/tool-configs/universal/core/crud-operations.d.ts +4 -4
  57. package/dist/handlers/tool-configs/universal/core/crud-operations.d.ts.map +1 -1
  58. package/dist/handlers/tool-configs/universal/core/crud-operations.js +37 -24
  59. package/dist/handlers/tool-configs/universal/core/crud-operations.js.map +1 -1
  60. package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js +3 -3
  61. package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js.map +1 -1
  62. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts +17 -0
  63. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts.map +1 -0
  64. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js +118 -0
  65. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js.map +1 -0
  66. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts +14 -0
  67. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts.map +1 -0
  68. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js +77 -0
  69. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js.map +1 -0
  70. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts +24 -0
  71. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts.map +1 -0
  72. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js +35 -0
  73. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js.map +1 -0
  74. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts +15 -0
  75. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts.map +1 -0
  76. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js +108 -0
  77. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js.map +1 -0
  78. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts +14 -0
  79. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts.map +1 -0
  80. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js +91 -0
  81. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js.map +1 -0
  82. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts +14 -0
  83. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts.map +1 -0
  84. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js +118 -0
  85. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js.map +1 -0
  86. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts +77 -0
  87. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts.map +1 -0
  88. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js +42 -0
  89. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js.map +1 -0
  90. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts +15 -0
  91. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts.map +1 -0
  92. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js +109 -0
  93. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js.map +1 -0
  94. package/dist/handlers/tool-configs/universal/core/index.d.ts +63 -22
  95. package/dist/handlers/tool-configs/universal/core/index.d.ts.map +1 -1
  96. package/dist/handlers/tool-configs/universal/core/index.js +24 -22
  97. package/dist/handlers/tool-configs/universal/core/index.js.map +1 -1
  98. package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts +43 -1
  99. package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts.map +1 -1
  100. package/dist/handlers/tool-configs/universal/core/metadata-operations.js +117 -11
  101. package/dist/handlers/tool-configs/universal/core/metadata-operations.js.map +1 -1
  102. package/dist/handlers/tool-configs/universal/core/notes-operations.js +12 -12
  103. package/dist/handlers/tool-configs/universal/core/notes-operations.js.map +1 -1
  104. package/dist/handlers/tool-configs/universal/core/record-details-operations.d.ts +6 -3
  105. package/dist/handlers/tool-configs/universal/core/record-details-operations.d.ts.map +1 -1
  106. package/dist/handlers/tool-configs/universal/core/record-details-operations.js +35 -10
  107. package/dist/handlers/tool-configs/universal/core/record-details-operations.js.map +1 -1
  108. package/dist/handlers/tool-configs/universal/core/search-operations.d.ts +4 -3
  109. package/dist/handlers/tool-configs/universal/core/search-operations.d.ts.map +1 -1
  110. package/dist/handlers/tool-configs/universal/core/search-operations.js +31 -12
  111. package/dist/handlers/tool-configs/universal/core/search-operations.js.map +1 -1
  112. package/dist/handlers/tool-configs/universal/core/utils.d.ts +1 -0
  113. package/dist/handlers/tool-configs/universal/core/utils.d.ts.map +1 -1
  114. package/dist/handlers/tool-configs/universal/core/utils.js +3 -0
  115. package/dist/handlers/tool-configs/universal/core/utils.js.map +1 -1
  116. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.d.ts.map +1 -1
  117. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js +32 -9
  118. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js.map +1 -1
  119. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.d.ts.map +1 -1
  120. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js +45 -6
  121. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js.map +1 -1
  122. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.d.ts.map +1 -1
  123. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js +36 -5
  124. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js.map +1 -1
  125. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts +1 -1
  126. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts.map +1 -1
  127. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js +17 -1
  128. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js.map +1 -1
  129. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.d.ts.map +1 -1
  130. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js +3 -1
  131. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js.map +1 -1
  132. package/dist/handlers/tool-configs/universal/index.d.ts +75 -34
  133. package/dist/handlers/tool-configs/universal/index.d.ts.map +1 -1
  134. package/dist/handlers/tool-configs/universal/index.js +58 -58
  135. package/dist/handlers/tool-configs/universal/index.js.map +1 -1
  136. package/dist/handlers/tool-configs/universal/operations/advanced-search.d.ts +3 -3
  137. package/dist/handlers/tool-configs/universal/operations/advanced-search.d.ts.map +1 -1
  138. package/dist/handlers/tool-configs/universal/operations/advanced-search.js +17 -10
  139. package/dist/handlers/tool-configs/universal/operations/advanced-search.js.map +1 -1
  140. package/dist/handlers/tool-configs/universal/operations/batch-format.d.ts +1 -1
  141. package/dist/handlers/tool-configs/universal/operations/batch-format.d.ts.map +1 -1
  142. package/dist/handlers/tool-configs/universal/operations/batch-format.js +31 -10
  143. package/dist/handlers/tool-configs/universal/operations/batch-format.js.map +1 -1
  144. package/dist/handlers/tool-configs/universal/operations/batch-operations.js +3 -3
  145. package/dist/handlers/tool-configs/universal/operations/content-search.d.ts +3 -3
  146. package/dist/handlers/tool-configs/universal/operations/content-search.d.ts.map +1 -1
  147. package/dist/handlers/tool-configs/universal/operations/content-search.js +15 -9
  148. package/dist/handlers/tool-configs/universal/operations/content-search.js.map +1 -1
  149. package/dist/handlers/tool-configs/universal/operations/index.d.ts +10 -10
  150. package/dist/handlers/tool-configs/universal/operations/index.js +15 -15
  151. package/dist/handlers/tool-configs/universal/operations/relationship-search.d.ts +3 -3
  152. package/dist/handlers/tool-configs/universal/operations/relationship-search.d.ts.map +1 -1
  153. package/dist/handlers/tool-configs/universal/operations/relationship-search.js +11 -8
  154. package/dist/handlers/tool-configs/universal/operations/relationship-search.js.map +1 -1
  155. package/dist/handlers/tool-configs/universal/operations/timeframe-search.d.ts +3 -3
  156. package/dist/handlers/tool-configs/universal/operations/timeframe-search.d.ts.map +1 -1
  157. package/dist/handlers/tool-configs/universal/operations/timeframe-search.js +16 -10
  158. package/dist/handlers/tool-configs/universal/operations/timeframe-search.js.map +1 -1
  159. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.d.ts.map +1 -1
  160. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js +5 -2
  161. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js.map +1 -1
  162. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts +29 -0
  163. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts.map +1 -1
  164. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js +28 -0
  165. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js.map +1 -1
  166. package/dist/handlers/tool-configs/universal/schemas.d.ts +1 -1
  167. package/dist/handlers/tool-configs/universal/schemas.d.ts.map +1 -1
  168. package/dist/handlers/tool-configs/universal/schemas.js +1 -1
  169. package/dist/handlers/tool-configs/universal/schemas.js.map +1 -1
  170. package/dist/handlers/tool-configs/universal/shared-handlers.d.ts +27 -7
  171. package/dist/handlers/tool-configs/universal/shared-handlers.d.ts.map +1 -1
  172. package/dist/handlers/tool-configs/universal/shared-handlers.js +221 -25
  173. package/dist/handlers/tool-configs/universal/shared-handlers.js.map +1 -1
  174. package/dist/handlers/tool-configs/universal/smithery-diagnostics.js +2 -2
  175. package/dist/handlers/tool-configs/universal/smithery-diagnostics.js.map +1 -1
  176. package/dist/handlers/tool-configs/universal/types.d.ts +17 -7
  177. package/dist/handlers/tool-configs/universal/types.d.ts.map +1 -1
  178. package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts +11 -0
  179. package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts.map +1 -1
  180. package/dist/handlers/tool-configs/universal/validators/schema-validator.js +80 -17
  181. package/dist/handlers/tool-configs/universal/validators/schema-validator.js.map +1 -1
  182. package/dist/handlers/tools/dispatcher/core.d.ts.map +1 -1
  183. package/dist/handlers/tools/dispatcher/core.js +9 -2
  184. package/dist/handlers/tools/dispatcher/core.js.map +1 -1
  185. package/dist/handlers/tools/dispatcher/operations/lists.d.ts +20 -1
  186. package/dist/handlers/tools/dispatcher/operations/lists.d.ts.map +1 -1
  187. package/dist/handlers/tools/dispatcher/operations/lists.js +366 -17
  188. package/dist/handlers/tools/dispatcher/operations/lists.js.map +1 -1
  189. package/dist/handlers/tools/formatters.d.ts +8 -1
  190. package/dist/handlers/tools/formatters.d.ts.map +1 -1
  191. package/dist/handlers/tools/formatters.js +30 -14
  192. package/dist/handlers/tools/formatters.js.map +1 -1
  193. package/dist/handlers/tools/registry.d.ts +409 -122
  194. package/dist/handlers/tools/registry.d.ts.map +1 -1
  195. package/dist/handlers/tools/registry.js +14 -9
  196. package/dist/handlers/tools/registry.js.map +1 -1
  197. package/dist/handlers/tools/standards/index.d.ts.map +1 -1
  198. package/dist/handlers/tools/standards/index.js +19 -11
  199. package/dist/handlers/tools/standards/index.js.map +1 -1
  200. package/dist/objects/companies/attributes.d.ts +5 -0
  201. package/dist/objects/companies/attributes.d.ts.map +1 -1
  202. package/dist/objects/companies/attributes.js +45 -31
  203. package/dist/objects/companies/attributes.js.map +1 -1
  204. package/dist/objects/companies/basic.d.ts.map +1 -1
  205. package/dist/objects/companies/basic.js.map +1 -1
  206. package/dist/objects/lists/base.d.ts.map +1 -1
  207. package/dist/objects/lists/base.js +6 -2
  208. package/dist/objects/lists/base.js.map +1 -1
  209. package/dist/objects/lists/shared.d.ts.map +1 -1
  210. package/dist/objects/lists/shared.js +12 -1
  211. package/dist/objects/lists/shared.js.map +1 -1
  212. package/dist/objects/records/index.d.ts.map +1 -1
  213. package/dist/objects/records/index.js.map +1 -1
  214. package/dist/server/createServer.d.ts.map +1 -1
  215. package/dist/server/createServer.js +4 -3
  216. package/dist/server/createServer.js.map +1 -1
  217. package/dist/services/ErrorService.js +3 -3
  218. package/dist/services/ErrorService.js.map +1 -1
  219. package/dist/services/OpenAiCompatibilityService.d.ts.map +1 -1
  220. package/dist/services/OpenAiCompatibilityService.js +12 -8
  221. package/dist/services/OpenAiCompatibilityService.js.map +1 -1
  222. package/dist/services/UniversalCreateService.d.ts +3 -3
  223. package/dist/services/UniversalCreateService.d.ts.map +1 -1
  224. package/dist/services/UniversalCreateService.js +162 -38
  225. package/dist/services/UniversalCreateService.js.map +1 -1
  226. package/dist/services/UniversalMetadataService.d.ts +8 -0
  227. package/dist/services/UniversalMetadataService.d.ts.map +1 -1
  228. package/dist/services/UniversalMetadataService.js +21 -0
  229. package/dist/services/UniversalMetadataService.js.map +1 -1
  230. package/dist/services/UniversalRetrievalService.d.ts +7 -5
  231. package/dist/services/UniversalRetrievalService.d.ts.map +1 -1
  232. package/dist/services/UniversalRetrievalService.js +31 -29
  233. package/dist/services/UniversalRetrievalService.js.map +1 -1
  234. package/dist/services/UniversalSearchService.d.ts +8 -27
  235. package/dist/services/UniversalSearchService.d.ts.map +1 -1
  236. package/dist/services/UniversalSearchService.js +19 -327
  237. package/dist/services/UniversalSearchService.js.map +1 -1
  238. package/dist/services/UniversalUpdateService.d.ts +25 -7
  239. package/dist/services/UniversalUpdateService.d.ts.map +1 -1
  240. package/dist/services/UniversalUpdateService.js +132 -157
  241. package/dist/services/UniversalUpdateService.js.map +1 -1
  242. package/dist/services/UniversalUtilityService.d.ts +9 -1
  243. package/dist/services/UniversalUtilityService.d.ts.map +1 -1
  244. package/dist/services/UniversalUtilityService.js +13 -0
  245. package/dist/services/UniversalUtilityService.js.map +1 -1
  246. package/dist/services/ValidationService.js +4 -4
  247. package/dist/services/ValidationService.js.map +1 -1
  248. package/dist/services/create/attio-create.service.d.ts.map +1 -1
  249. package/dist/services/create/attio-create.service.js +2 -1
  250. package/dist/services/create/attio-create.service.js.map +1 -1
  251. package/dist/services/create/creators/company-creator.js.map +1 -1
  252. package/dist/services/create/creators/note-creator.d.ts.map +1 -1
  253. package/dist/services/create/creators/note-creator.js +4 -2
  254. package/dist/services/create/creators/note-creator.js.map +1 -1
  255. package/dist/services/create/factory.d.ts.map +1 -1
  256. package/dist/services/create/factory.js +2 -1
  257. package/dist/services/create/factory.js.map +1 -1
  258. package/dist/services/create/mock-create.service.d.ts.map +1 -1
  259. package/dist/services/create/mock-create.service.js.map +1 -1
  260. package/dist/services/create/strategies/BaseCreateStrategy.d.ts +2 -2
  261. package/dist/services/create/strategies/BaseCreateStrategy.d.ts.map +1 -1
  262. package/dist/services/create/strategies/ListCreateStrategy.d.ts +3 -3
  263. package/dist/services/create/strategies/ListCreateStrategy.d.ts.map +1 -1
  264. package/dist/services/create/strategies/ListCreateStrategy.js +2 -16
  265. package/dist/services/create/strategies/ListCreateStrategy.js.map +1 -1
  266. package/dist/services/create/strategies/TaskCreateStrategy.d.ts.map +1 -1
  267. package/dist/services/create/strategies/TaskCreateStrategy.js.map +1 -1
  268. package/dist/services/metadata/AttributeOptionsService.d.ts +38 -0
  269. package/dist/services/metadata/AttributeOptionsService.d.ts.map +1 -0
  270. package/dist/services/metadata/AttributeOptionsService.js +92 -0
  271. package/dist/services/metadata/AttributeOptionsService.js.map +1 -0
  272. package/dist/services/metadata/MetadataDiscoveryService.d.ts.map +1 -1
  273. package/dist/services/metadata/MetadataDiscoveryService.js.map +1 -1
  274. package/dist/services/metadata/MetadataTransformService.d.ts.map +1 -1
  275. package/dist/services/metadata/MetadataTransformService.js.map +1 -1
  276. package/dist/services/metadata/index.d.ts +1 -0
  277. package/dist/services/metadata/index.d.ts.map +1 -1
  278. package/dist/services/metadata/index.js +1 -0
  279. package/dist/services/metadata/index.js.map +1 -1
  280. package/dist/services/search/QueryApiService.d.ts +27 -0
  281. package/dist/services/search/QueryApiService.d.ts.map +1 -0
  282. package/dist/services/search/QueryApiService.js +144 -0
  283. package/dist/services/search/QueryApiService.js.map +1 -0
  284. package/dist/services/search/RecordsSearchService.d.ts +27 -0
  285. package/dist/services/search/RecordsSearchService.d.ts.map +1 -0
  286. package/dist/services/search/RecordsSearchService.js +122 -0
  287. package/dist/services/search/RecordsSearchService.js.map +1 -0
  288. package/dist/services/search/SearchCoordinator.d.ts +41 -0
  289. package/dist/services/search/SearchCoordinator.d.ts.map +1 -0
  290. package/dist/services/search/SearchCoordinator.js +83 -0
  291. package/dist/services/search/SearchCoordinator.js.map +1 -0
  292. package/dist/services/search/StrategyFactory.d.ts +31 -0
  293. package/dist/services/search/StrategyFactory.d.ts.map +1 -0
  294. package/dist/services/search/StrategyFactory.js +100 -0
  295. package/dist/services/search/StrategyFactory.js.map +1 -0
  296. package/dist/services/search-strategies/BaseSearchStrategy.d.ts +5 -5
  297. package/dist/services/search-strategies/BaseSearchStrategy.d.ts.map +1 -1
  298. package/dist/services/search-strategies/BaseSearchStrategy.js.map +1 -1
  299. package/dist/services/search-strategies/CompanySearchStrategy.d.ts +4 -4
  300. package/dist/services/search-strategies/CompanySearchStrategy.d.ts.map +1 -1
  301. package/dist/services/search-strategies/CompanySearchStrategy.js +1 -1
  302. package/dist/services/search-strategies/CompanySearchStrategy.js.map +1 -1
  303. package/dist/services/search-strategies/DealSearchStrategy.d.ts +4 -4
  304. package/dist/services/search-strategies/DealSearchStrategy.d.ts.map +1 -1
  305. package/dist/services/search-strategies/DealSearchStrategy.js +1 -1
  306. package/dist/services/search-strategies/DealSearchStrategy.js.map +1 -1
  307. package/dist/services/search-strategies/ListSearchStrategy.d.ts +34 -7
  308. package/dist/services/search-strategies/ListSearchStrategy.d.ts.map +1 -1
  309. package/dist/services/search-strategies/ListSearchStrategy.js +65 -24
  310. package/dist/services/search-strategies/ListSearchStrategy.js.map +1 -1
  311. package/dist/services/search-strategies/NoteSearchStrategy.d.ts +4 -4
  312. package/dist/services/search-strategies/NoteSearchStrategy.d.ts.map +1 -1
  313. package/dist/services/search-strategies/NoteSearchStrategy.js +6 -7
  314. package/dist/services/search-strategies/NoteSearchStrategy.js.map +1 -1
  315. package/dist/services/search-strategies/PeopleSearchStrategy.d.ts +4 -4
  316. package/dist/services/search-strategies/PeopleSearchStrategy.d.ts.map +1 -1
  317. package/dist/services/search-strategies/PeopleSearchStrategy.js +1 -1
  318. package/dist/services/search-strategies/PeopleSearchStrategy.js.map +1 -1
  319. package/dist/services/search-strategies/TaskSearchStrategy.d.ts +4 -4
  320. package/dist/services/search-strategies/TaskSearchStrategy.d.ts.map +1 -1
  321. package/dist/services/search-strategies/TaskSearchStrategy.js +7 -8
  322. package/dist/services/search-strategies/TaskSearchStrategy.js.map +1 -1
  323. package/dist/services/search-strategies/interfaces.d.ts +7 -6
  324. package/dist/services/search-strategies/interfaces.d.ts.map +1 -1
  325. package/dist/services/search-utilities/SearchUtilities.d.ts +22 -7
  326. package/dist/services/search-utilities/SearchUtilities.d.ts.map +1 -1
  327. package/dist/services/search-utilities/SearchUtilities.js +52 -4
  328. package/dist/services/search-utilities/SearchUtilities.js.map +1 -1
  329. package/dist/services/skill-generator/OutputWriterService.d.ts +41 -0
  330. package/dist/services/skill-generator/OutputWriterService.d.ts.map +1 -0
  331. package/dist/services/skill-generator/OutputWriterService.js +100 -0
  332. package/dist/services/skill-generator/OutputWriterService.js.map +1 -0
  333. package/dist/services/skill-generator/SchemaFormatterService.d.ts +61 -0
  334. package/dist/services/skill-generator/SchemaFormatterService.d.ts.map +1 -0
  335. package/dist/services/skill-generator/SchemaFormatterService.js +168 -0
  336. package/dist/services/skill-generator/SchemaFormatterService.js.map +1 -0
  337. package/dist/services/skill-generator/WorkspaceSchemaService.d.ts +84 -0
  338. package/dist/services/skill-generator/WorkspaceSchemaService.d.ts.map +1 -0
  339. package/dist/services/skill-generator/WorkspaceSchemaService.js +292 -0
  340. package/dist/services/skill-generator/WorkspaceSchemaService.js.map +1 -0
  341. package/dist/services/skill-generator/index.d.ts +12 -0
  342. package/dist/services/skill-generator/index.d.ts.map +1 -0
  343. package/dist/services/skill-generator/index.js +11 -0
  344. package/dist/services/skill-generator/index.js.map +1 -0
  345. package/dist/services/skill-generator/types.d.ts +137 -0
  346. package/dist/services/skill-generator/types.d.ts.map +1 -0
  347. package/dist/services/skill-generator/types.js +10 -0
  348. package/dist/services/skill-generator/types.js.map +1 -0
  349. package/dist/services/update/FieldPersistenceHandler.d.ts +101 -0
  350. package/dist/services/update/FieldPersistenceHandler.d.ts.map +1 -0
  351. package/dist/services/update/FieldPersistenceHandler.js +207 -0
  352. package/dist/services/update/FieldPersistenceHandler.js.map +1 -0
  353. package/dist/services/update/FieldValidationHandler.d.ts +77 -0
  354. package/dist/services/update/FieldValidationHandler.d.ts.map +1 -0
  355. package/dist/services/update/FieldValidationHandler.js +157 -0
  356. package/dist/services/update/FieldValidationHandler.js.map +1 -0
  357. package/dist/services/update/MetadataResolver.d.ts +50 -0
  358. package/dist/services/update/MetadataResolver.d.ts.map +1 -0
  359. package/dist/services/update/MetadataResolver.js +110 -0
  360. package/dist/services/update/MetadataResolver.js.map +1 -0
  361. package/dist/services/update/ResponseNormalizer.d.ts +4 -4
  362. package/dist/services/update/ResponseNormalizer.d.ts.map +1 -1
  363. package/dist/services/update/ResponseNormalizer.js +18 -9
  364. package/dist/services/update/ResponseNormalizer.js.map +1 -1
  365. package/dist/services/update/UpdateOrchestrator.d.ts +37 -0
  366. package/dist/services/update/UpdateOrchestrator.d.ts.map +1 -0
  367. package/dist/services/update/UpdateOrchestrator.js +58 -0
  368. package/dist/services/update/UpdateOrchestrator.js.map +1 -0
  369. package/dist/services/update/UpdateValidation.d.ts +7 -3
  370. package/dist/services/update/UpdateValidation.d.ts.map +1 -1
  371. package/dist/services/update/UpdateValidation.js +56 -32
  372. package/dist/services/update/UpdateValidation.js.map +1 -1
  373. package/dist/services/update/strategies/BaseUpdateStrategy.d.ts +2 -2
  374. package/dist/services/update/strategies/BaseUpdateStrategy.d.ts.map +1 -1
  375. package/dist/services/update/strategies/ListUpdateStrategy.d.ts +3 -3
  376. package/dist/services/update/strategies/ListUpdateStrategy.d.ts.map +1 -1
  377. package/dist/services/update/strategies/ListUpdateStrategy.js +4 -14
  378. package/dist/services/update/strategies/ListUpdateStrategy.js.map +1 -1
  379. package/dist/services/value-transformer/index.d.ts +57 -0
  380. package/dist/services/value-transformer/index.d.ts.map +1 -0
  381. package/dist/services/value-transformer/index.js +326 -0
  382. package/dist/services/value-transformer/index.js.map +1 -0
  383. package/dist/services/value-transformer/multi-select-transformer.d.ts +63 -0
  384. package/dist/services/value-transformer/multi-select-transformer.d.ts.map +1 -0
  385. package/dist/services/value-transformer/multi-select-transformer.js +144 -0
  386. package/dist/services/value-transformer/multi-select-transformer.js.map +1 -0
  387. package/dist/services/value-transformer/record-reference-transformer.d.ts +43 -0
  388. package/dist/services/value-transformer/record-reference-transformer.d.ts.map +1 -0
  389. package/dist/services/value-transformer/record-reference-transformer.js +245 -0
  390. package/dist/services/value-transformer/record-reference-transformer.js.map +1 -0
  391. package/dist/services/value-transformer/select-transformer.d.ts +48 -0
  392. package/dist/services/value-transformer/select-transformer.d.ts.map +1 -0
  393. package/dist/services/value-transformer/select-transformer.js +232 -0
  394. package/dist/services/value-transformer/select-transformer.js.map +1 -0
  395. package/dist/services/value-transformer/status-transformer.d.ts +32 -0
  396. package/dist/services/value-transformer/status-transformer.d.ts.map +1 -0
  397. package/dist/services/value-transformer/status-transformer.js +329 -0
  398. package/dist/services/value-transformer/status-transformer.js.map +1 -0
  399. package/dist/services/value-transformer/types.d.ts +100 -0
  400. package/dist/services/value-transformer/types.d.ts.map +1 -0
  401. package/dist/services/value-transformer/types.js +6 -0
  402. package/dist/services/value-transformer/types.js.map +1 -0
  403. package/dist/templates/skill/SKILL.template.md +78 -0
  404. package/dist/templates/skill/attribute-reference.template.md +126 -0
  405. package/dist/templates/skill/complex-types.template.md +255 -0
  406. package/dist/types/attio.d.ts +55 -0
  407. package/dist/types/attio.d.ts.map +1 -1
  408. package/dist/types/attio.js +36 -0
  409. package/dist/types/attio.js.map +1 -1
  410. package/dist/utils/client-resolver.d.ts.map +1 -1
  411. package/dist/utils/client-resolver.js +8 -16
  412. package/dist/utils/client-resolver.js.map +1 -1
  413. package/dist/utils/complex-type-validation.d.ts +16 -0
  414. package/dist/utils/complex-type-validation.d.ts.map +1 -0
  415. package/dist/utils/complex-type-validation.js +196 -0
  416. package/dist/utils/complex-type-validation.js.map +1 -0
  417. package/dist/utils/error-response-utils.js +3 -3
  418. package/dist/utils/error-response-utils.js.map +1 -1
  419. package/dist/utils/error-utilities.d.ts.map +1 -1
  420. package/dist/utils/error-utilities.js +16 -9
  421. package/dist/utils/error-utilities.js.map +1 -1
  422. package/dist/utils/location-normalizer.d.ts +26 -0
  423. package/dist/utils/location-normalizer.d.ts.map +1 -0
  424. package/dist/utils/location-normalizer.js +39 -0
  425. package/dist/utils/location-normalizer.js.map +1 -0
  426. package/dist/utils/metadata-utils.d.ts +27 -0
  427. package/dist/utils/metadata-utils.d.ts.map +1 -0
  428. package/dist/utils/metadata-utils.js +59 -0
  429. package/dist/utils/metadata-utils.js.map +1 -0
  430. package/dist/utils/normalization/record-data-normalization.d.ts +47 -0
  431. package/dist/utils/normalization/record-data-normalization.d.ts.map +1 -0
  432. package/dist/utils/normalization/record-data-normalization.js +103 -0
  433. package/dist/utils/normalization/record-data-normalization.js.map +1 -0
  434. package/dist/utils/personal-name-parser.d.ts.map +1 -1
  435. package/dist/utils/personal-name-parser.js +26 -17
  436. package/dist/utils/personal-name-parser.js.map +1 -1
  437. package/dist/validators/company/field_detector.d.ts.map +1 -1
  438. package/dist/validators/company/field_detector.js +5 -0
  439. package/dist/validators/company/field_detector.js.map +1 -1
  440. package/package.json +35 -33
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Type definitions for the Workspace Schema Skill Generator
3
+ *
4
+ * These types support the generation of Claude Skills from Attio workspace schemas,
5
+ * addressing the common issue where LLMs make errors due to unknown attribute values.
6
+ *
7
+ * @see Issue #983
8
+ */
9
+ /**
10
+ * Configuration for the generate-skill CLI command
11
+ */
12
+ export interface GenerateSkillConfig {
13
+ /** Object slugs to include in the generated skill */
14
+ objects: string[];
15
+ /** Output format: Claude Skill, plain Markdown, or JSON */
16
+ format: 'skill' | 'markdown' | 'json';
17
+ /** Output directory path */
18
+ outputDir: string;
19
+ /** Whether to package output as ZIP file */
20
+ zip: boolean;
21
+ /** Maximum options to display per attribute (default: 20) */
22
+ maxOptionsPerAttribute: number;
23
+ /** Whether to include archived options */
24
+ includeArchived: boolean;
25
+ /** Delay between attribute option fetches in milliseconds (default: 100) */
26
+ optionFetchDelayMs?: number;
27
+ /** Attio API key for authentication */
28
+ apiKey: string;
29
+ }
30
+ /**
31
+ * Complete workspace schema containing multiple objects
32
+ */
33
+ export interface WorkspaceSchema {
34
+ /** Metadata about the schema generation */
35
+ metadata: {
36
+ /** ISO 8601 timestamp when schema was generated */
37
+ generatedAt: string;
38
+ /** Workspace identifier or name */
39
+ workspace: string;
40
+ /** List of object slugs included in this schema */
41
+ objects: string[];
42
+ };
43
+ /** Array of object schemas */
44
+ objects: ObjectSchema[];
45
+ }
46
+ /**
47
+ * Schema for a single Attio object (companies, people, deals, etc.)
48
+ */
49
+ export interface ObjectSchema {
50
+ /** API slug of the object (e.g., 'companies', 'people') */
51
+ objectSlug: string;
52
+ /** Human-readable display name (e.g., 'Companies', 'People') */
53
+ displayName: string;
54
+ /** Array of attribute schemas for this object */
55
+ attributes: AttributeSchema[];
56
+ }
57
+ /**
58
+ * Schema for a single attribute within an object
59
+ */
60
+ export interface AttributeSchema {
61
+ /** API slug used in API calls (e.g., 'team_size', 'industry') */
62
+ apiSlug: string;
63
+ /** Display name shown in Attio UI */
64
+ displayName: string;
65
+ /** Attribute type (e.g., 'text', 'select', 'location', 'personal-name') */
66
+ type: string;
67
+ /** Whether this attribute accepts multiple values */
68
+ isMultiselect: boolean;
69
+ /** Whether this attribute has a uniqueness constraint */
70
+ isUnique: boolean;
71
+ /** Whether this attribute is required for record creation */
72
+ isRequired: boolean;
73
+ /** Whether this attribute can be modified */
74
+ isWritable: boolean;
75
+ /** Optional description of the attribute's purpose */
76
+ description?: string;
77
+ /** For select/status attributes: array of valid options */
78
+ options?: AttributeOption[];
79
+ /** Whether options were truncated due to maxOptionsPerAttribute limit */
80
+ optionsTruncated?: boolean;
81
+ /** Total number of options available (before truncation) */
82
+ totalOptions?: number;
83
+ /** For complex types: structure definition with field types */
84
+ complexTypeStructure?: Record<string, unknown>;
85
+ /** For relationship attributes: target object and cardinality */
86
+ relationship?: {
87
+ /** Target object slug (e.g., 'companies', 'people') */
88
+ targetObject: string;
89
+ /** Relationship cardinality */
90
+ cardinality: string;
91
+ };
92
+ }
93
+ /**
94
+ * A single option for select or status attributes
95
+ */
96
+ export interface AttributeOption {
97
+ /** Unique identifier for this option */
98
+ id: string;
99
+ /** Display title shown in Attio UI */
100
+ title: string;
101
+ /** API value used in API calls */
102
+ value: string;
103
+ /** Whether this option is archived */
104
+ isArchived?: boolean;
105
+ }
106
+ /**
107
+ * Formatted output ready for writing to disk
108
+ */
109
+ export interface FormattedOutput {
110
+ /** Output format type */
111
+ format: 'skill' | 'markdown' | 'json';
112
+ /** Map of relative file paths to file contents */
113
+ files: Record<string, string>;
114
+ }
115
+ /**
116
+ * Result of writing skill output to disk
117
+ */
118
+ export interface SkillOutput {
119
+ /** Output format that was written */
120
+ format: 'skill' | 'markdown' | 'json';
121
+ /** Absolute path to the output directory or file */
122
+ path: string;
123
+ /** List of files that were created */
124
+ files: string[];
125
+ }
126
+ /**
127
+ * Options for fetching object schema
128
+ */
129
+ export interface FetchSchemaOptions {
130
+ /** Maximum options to retrieve per attribute */
131
+ maxOptionsPerAttribute: number;
132
+ /** Whether to include archived options */
133
+ includeArchived: boolean;
134
+ /** Delay between attribute option fetches in milliseconds (default: 100) */
135
+ optionFetchDelayMs?: number;
136
+ }
137
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/skill-generator/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Type definitions for the Workspace Schema Skill Generator
3
+ *
4
+ * These types support the generation of Claude Skills from Attio workspace schemas,
5
+ * addressing the common issue where LLMs make errors due to unknown attribute values.
6
+ *
7
+ * @see Issue #983
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/skill-generator/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * FieldPersistenceHandler - Post-update field verification
3
+ *
4
+ * Extracted from UniversalUpdateService to separate verification concerns.
5
+ * Handles field persistence checking with configurable strictness.
6
+ *
7
+ * **Verification Modes** (controlled by `ENABLE_FIELD_VERIFICATION` env var):
8
+ * - **Enabled** (default): Any value except `'false'` enables verification
9
+ * - **Disabled**: Set to `'false'` to skip verification entirely
10
+ *
11
+ * **Strictness Modes** (controlled by `STRICT_FIELD_VALIDATION` env var):
12
+ * - **Strict**: `'true'` - Logs all discrepancies (cosmetic + semantic)
13
+ * - **Standard** (default): `'false'` - Logs only semantic mismatches
14
+ *
15
+ * **Semantic vs Cosmetic Mismatches**:
16
+ * - Cosmetic: Format differences with same logical value (e.g., "Demo" vs {title: "Demo"})
17
+ * - Semantic: Actual data loss or corruption (e.g., "Demo" vs "Qualified", missing data)
18
+ *
19
+ * @see Issue #984 - Modularize UniversalUpdateService (831→220 lines)
20
+ * @see PR #1006 Phase 3.2 - Enhanced JSDoc for verification behavior
21
+ */
22
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
23
+ /**
24
+ * Options for field persistence verification
25
+ */
26
+ export interface VerificationOptions {
27
+ /** Skip verification entirely (default: false) */
28
+ skip?: boolean;
29
+ /** Throw error on verification failure (default: from env STRICT_FIELD_VALIDATION) */
30
+ strict?: boolean;
31
+ /** Include cosmetic mismatches in warnings (default: false) */
32
+ includeCosmetic?: boolean;
33
+ }
34
+ /**
35
+ * Result of field persistence verification
36
+ */
37
+ export interface VerificationResult {
38
+ /** Whether all fields were persisted correctly */
39
+ verified: boolean;
40
+ /** Non-blocking warnings about verification */
41
+ warnings: string[];
42
+ /** List of field discrepancies found */
43
+ discrepancies: string[];
44
+ /** Actual values retrieved from API */
45
+ actualValues: Record<string, unknown>;
46
+ }
47
+ /**
48
+ * FieldPersistenceHandler - Post-update verification orchestration
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * // Standard mode (semantic mismatches only)
53
+ * const result = await FieldPersistenceHandler.verifyPersistence(
54
+ * UniversalResourceType.COMPANIES,
55
+ * 'company-123',
56
+ * { stage: 'Demo' }
57
+ * );
58
+ * // Cosmetic mismatch "Demo" vs {title: "Demo"} → not logged
59
+ * // Semantic mismatch "Demo" vs "Qualified" → logged
60
+ *
61
+ * // Strict mode (all mismatches)
62
+ * process.env.STRICT_FIELD_VALIDATION = 'true';
63
+ * // Both cosmetic and semantic mismatches logged
64
+ * ```
65
+ */
66
+ export declare class FieldPersistenceHandler {
67
+ /**
68
+ * Verify that fields were persisted correctly after update
69
+ *
70
+ * Supports three modes:
71
+ * 1. Disabled: ENABLE_FIELD_VERIFICATION=false (skip completely)
72
+ * 2. Warn-only: Default, logs discrepancies as warnings
73
+ * 3. Strict: STRICT_FIELD_VALIDATION=true, throws on mismatch
74
+ *
75
+ * @param resourceType - Resource type being verified
76
+ * @param recordId - ID of the updated record
77
+ * @param expectedData - Expected field values after update
78
+ * @param actualRecord - Optional actual record values. If not provided, will be fetched from API
79
+ * @param options - Verification options
80
+ * @returns Verification result with verified status, warnings, and discrepancies
81
+ * @throws UniversalValidationError if strict mode enabled and verification fails
82
+ */
83
+ static verifyPersistence(resourceType: UniversalResourceType, recordId: string, expectedData: Record<string, unknown>, actualRecord?: Record<string, unknown>, options?: VerificationOptions): Promise<VerificationResult>;
84
+ /**
85
+ * Determine if a discrepancy is semantic (real) vs cosmetic (format-only)
86
+ *
87
+ * Cosmetic mismatches occur when the same logical value is represented differently:
88
+ * - String vs object: "Demo" vs {title: "Demo"}
89
+ * - Array wrapping: "value" vs ["value"]
90
+ * - Type coercion: "123" vs 123
91
+ *
92
+ * Semantic mismatches indicate actual data loss or corruption:
93
+ * - Different values: "Demo" vs "Qualified"
94
+ * - Missing data: {field: "value"} vs {}
95
+ *
96
+ * @param discrepancy - Discrepancy message from verification
97
+ * @returns true if semantic mismatch, false if cosmetic
98
+ */
99
+ static isSemanticMismatch(discrepancy: string): boolean;
100
+ }
101
+ //# sourceMappingURL=FieldPersistenceHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldPersistenceHandler.d.ts","sourceRoot":"","sources":["../../../src/services/update/FieldPersistenceHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AASnF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kDAAkD;IAClD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sFAAsF;IACtF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,QAAQ,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,wCAAwC;IACxC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,uBAAuB;IAClC;;;;;;;;;;;;;;;OAeG;WACU,iBAAiB,CAC5B,YAAY,EAAE,qBAAqB,EACnC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC;IAoK9B;;;;;;;;;;;;;;OAcG;WACW,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;CAyB/D"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * FieldPersistenceHandler - Post-update field verification
3
+ *
4
+ * Extracted from UniversalUpdateService to separate verification concerns.
5
+ * Handles field persistence checking with configurable strictness.
6
+ *
7
+ * **Verification Modes** (controlled by `ENABLE_FIELD_VERIFICATION` env var):
8
+ * - **Enabled** (default): Any value except `'false'` enables verification
9
+ * - **Disabled**: Set to `'false'` to skip verification entirely
10
+ *
11
+ * **Strictness Modes** (controlled by `STRICT_FIELD_VALIDATION` env var):
12
+ * - **Strict**: `'true'` - Logs all discrepancies (cosmetic + semantic)
13
+ * - **Standard** (default): `'false'` - Logs only semantic mismatches
14
+ *
15
+ * **Semantic vs Cosmetic Mismatches**:
16
+ * - Cosmetic: Format differences with same logical value (e.g., "Demo" vs {title: "Demo"})
17
+ * - Semantic: Actual data loss or corruption (e.g., "Demo" vs "Qualified", missing data)
18
+ *
19
+ * @see Issue #984 - Modularize UniversalUpdateService (831→220 lines)
20
+ * @see PR #1006 Phase 3.2 - Enhanced JSDoc for verification behavior
21
+ */
22
+ import { UpdateValidation } from '../../services/update/UpdateValidation.js';
23
+ import { debug, error as logError } from '../../utils/logger.js';
24
+ import { UniversalValidationError, ErrorType, } from '../../handlers/tool-configs/universal/schemas.js';
25
+ import { isAttioList, isAttioRecord } from '../../types/attio.js';
26
+ /**
27
+ * FieldPersistenceHandler - Post-update verification orchestration
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * // Standard mode (semantic mismatches only)
32
+ * const result = await FieldPersistenceHandler.verifyPersistence(
33
+ * UniversalResourceType.COMPANIES,
34
+ * 'company-123',
35
+ * { stage: 'Demo' }
36
+ * );
37
+ * // Cosmetic mismatch "Demo" vs {title: "Demo"} → not logged
38
+ * // Semantic mismatch "Demo" vs "Qualified" → logged
39
+ *
40
+ * // Strict mode (all mismatches)
41
+ * process.env.STRICT_FIELD_VALIDATION = 'true';
42
+ * // Both cosmetic and semantic mismatches logged
43
+ * ```
44
+ */
45
+ export class FieldPersistenceHandler {
46
+ /**
47
+ * Verify that fields were persisted correctly after update
48
+ *
49
+ * Supports three modes:
50
+ * 1. Disabled: ENABLE_FIELD_VERIFICATION=false (skip completely)
51
+ * 2. Warn-only: Default, logs discrepancies as warnings
52
+ * 3. Strict: STRICT_FIELD_VALIDATION=true, throws on mismatch
53
+ *
54
+ * @param resourceType - Resource type being verified
55
+ * @param recordId - ID of the updated record
56
+ * @param expectedData - Expected field values after update
57
+ * @param actualRecord - Optional actual record values. If not provided, will be fetched from API
58
+ * @param options - Verification options
59
+ * @returns Verification result with verified status, warnings, and discrepancies
60
+ * @throws UniversalValidationError if strict mode enabled and verification fails
61
+ */
62
+ static async verifyPersistence(resourceType, recordId, expectedData, actualRecord, options = {}) {
63
+ const result = {
64
+ verified: true,
65
+ warnings: [],
66
+ discrepancies: [],
67
+ actualValues: {},
68
+ };
69
+ // Check if verification is disabled globally
70
+ if (options.skip || process.env.ENABLE_FIELD_VERIFICATION === 'false') {
71
+ result.warnings.push('Field persistence verification skipped (disabled via config)');
72
+ debug('FieldPersistenceHandler', 'Verification skipped', {
73
+ resourceType,
74
+ recordId,
75
+ reason: 'disabled',
76
+ });
77
+ return result;
78
+ }
79
+ // Fetch actualRecord if not provided
80
+ let recordData = actualRecord;
81
+ if (!recordData) {
82
+ try {
83
+ const record = await UpdateValidation.fetchRecordForVerification(resourceType, recordId);
84
+ if (!record) {
85
+ result.warnings.push('Could not fetch record for verification: Record not found');
86
+ debug('FieldPersistenceHandler', 'Record not found for verification', { resourceType, recordId });
87
+ return result;
88
+ }
89
+ if (isAttioRecord(record)) {
90
+ recordData = record.values || {};
91
+ }
92
+ else if (isAttioList(record)) {
93
+ recordData = { ...record };
94
+ }
95
+ else {
96
+ recordData = {};
97
+ }
98
+ debug('FieldPersistenceHandler', 'Fetched record for verification', {
99
+ resourceType,
100
+ recordId,
101
+ });
102
+ }
103
+ catch (err) {
104
+ const errorMessage = err instanceof Error ? err.message : String(err);
105
+ result.warnings.push(`Could not fetch record for verification: ${errorMessage}`);
106
+ debug('FieldPersistenceHandler', 'Failed to fetch record for verification', { resourceType, recordId, error: errorMessage });
107
+ return result;
108
+ }
109
+ }
110
+ result.actualValues = recordData || {};
111
+ try {
112
+ // Perform verification using existing UpdateValidation service
113
+ const verification = await UpdateValidation.verifyFieldPersistence(resourceType, recordId, expectedData);
114
+ result.verified = verification.verified;
115
+ result.warnings.push(...verification.warnings);
116
+ if (!verification.verified) {
117
+ const isStrictMode = options.strict !== undefined
118
+ ? options.strict
119
+ : process.env.STRICT_FIELD_VALIDATION === 'true';
120
+ const includeCosmetic = options.includeCosmetic || isStrictMode;
121
+ // Filter discrepancies based on mode
122
+ if (includeCosmetic) {
123
+ // Include all discrepancies (cosmetic + semantic)
124
+ result.discrepancies.push(...verification.discrepancies);
125
+ }
126
+ else {
127
+ // Filter out cosmetic mismatches (e.g., "Demo" vs {title: "Demo"})
128
+ const semanticMismatches = verification.discrepancies.filter((d) => this.isSemanticMismatch(d));
129
+ result.discrepancies.push(...semanticMismatches);
130
+ }
131
+ // Log discrepancies
132
+ if (result.discrepancies.length > 0) {
133
+ result.warnings.push(...result.discrepancies.map((d) => `Field persistence issue: ${d}`));
134
+ logError('FieldPersistenceHandler', `Field persistence warnings for ${resourceType} ${recordId}:`, result.warnings);
135
+ }
136
+ // Throw in strict mode if semantic mismatches exist
137
+ if (isStrictMode && result.discrepancies.length > 0) {
138
+ logError('FieldPersistenceHandler', 'Field persistence verification failed (strict mode)', new Error('Verification failed'), {
139
+ resourceType,
140
+ recordId,
141
+ discrepancies: result.discrepancies,
142
+ });
143
+ throw new UniversalValidationError(`Field persistence verification failed: ${result.discrepancies.join('; ')}`, ErrorType.API_ERROR, {
144
+ field: 'field_verification',
145
+ suggestion: 'Check that field values are correctly formatted and supported by the API',
146
+ });
147
+ }
148
+ }
149
+ else {
150
+ debug('FieldPersistenceHandler', 'Verification passed', {
151
+ resourceType,
152
+ recordId,
153
+ fieldCount: Object.keys(expectedData).length,
154
+ });
155
+ }
156
+ }
157
+ catch (error) {
158
+ // Catch verification errors (network, API errors, etc.)
159
+ const errorMessage = error instanceof Error ? error.message : String(error);
160
+ result.warnings.push(`Field verification warning: ${errorMessage}`);
161
+ logError('FieldPersistenceHandler', 'Field persistence verification error', error);
162
+ // Re-throw validation errors (strict mode failures)
163
+ if (error instanceof UniversalValidationError) {
164
+ throw error;
165
+ }
166
+ }
167
+ return result;
168
+ }
169
+ /**
170
+ * Determine if a discrepancy is semantic (real) vs cosmetic (format-only)
171
+ *
172
+ * Cosmetic mismatches occur when the same logical value is represented differently:
173
+ * - String vs object: "Demo" vs {title: "Demo"}
174
+ * - Array wrapping: "value" vs ["value"]
175
+ * - Type coercion: "123" vs 123
176
+ *
177
+ * Semantic mismatches indicate actual data loss or corruption:
178
+ * - Different values: "Demo" vs "Qualified"
179
+ * - Missing data: {field: "value"} vs {}
180
+ *
181
+ * @param discrepancy - Discrepancy message from verification
182
+ * @returns true if semantic mismatch, false if cosmetic
183
+ */
184
+ static isSemanticMismatch(discrepancy) {
185
+ // Extract expected and actual from: Field "X" persistence mismatch: expected Y, got Z
186
+ const match = discrepancy.match(/expected (.+?), got (.+?)$/);
187
+ if (!match) {
188
+ // If we can't parse, assume semantic (log for safety)
189
+ return true;
190
+ }
191
+ const [, expectedStr, actualStr] = match;
192
+ try {
193
+ // Check for cosmetic mismatches
194
+ // Case 1: String value vs object with title property
195
+ const isCosmetic = (expectedStr.includes('"') &&
196
+ actualStr.includes(expectedStr.replace(/^"|"$/g, ''))) ||
197
+ (actualStr.includes('"') &&
198
+ expectedStr.includes(actualStr.replace(/^"|"$/g, '')));
199
+ return !isCosmetic; // Return true for semantic, false for cosmetic
200
+ }
201
+ catch {
202
+ // On parse errors, assume semantic (safety)
203
+ return true;
204
+ }
205
+ }
206
+ }
207
+ //# sourceMappingURL=FieldPersistenceHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldPersistenceHandler.js","sourceRoot":"","sources":["../../../src/services/update/FieldPersistenceHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * FieldValidationHandler - Validation orchestration with display name resolution
3
+ *
4
+ * Consolidates validation logic and integrates display name resolution
5
+ * for create/update operations.
6
+ *
7
+ * @see Issue #984 - Extend display name resolution to create/update operations
8
+ */
9
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
10
+ /**
11
+ * Result of field validation
12
+ */
13
+ export interface ValidationResult {
14
+ /** Whether validation passed */
15
+ valid: boolean;
16
+ /** Validation errors (blocking) */
17
+ errors: string[];
18
+ /** Validation warnings (non-blocking) */
19
+ warnings: string[];
20
+ /** Field suggestions for user */
21
+ suggestions: string[];
22
+ /** Map of display name → API slug resolutions */
23
+ resolvedFields?: Map<string, string>;
24
+ }
25
+ /**
26
+ * FieldValidationHandler - Validation and display name resolution
27
+ */
28
+ export declare class FieldValidationHandler {
29
+ /**
30
+ * Validate fields and optionally resolve display names to API slugs
31
+ *
32
+ * Integrates display name resolution (previously only in get_attribute_options)
33
+ * to work for create/update operations.
34
+ *
35
+ * @param resourceType - Resource type being validated
36
+ * @param values - Field values to validate
37
+ * @param objectSlug - Optional object slug for display name resolution
38
+ * @param enableDisplayNameResolution - Whether to attempt display name resolution (default: true)
39
+ * @returns Validation result with warnings, suggestions, and resolved field names
40
+ */
41
+ static validateAndResolve(resourceType: UniversalResourceType, values: Record<string, unknown>, objectSlug?: string, enableDisplayNameResolution?: boolean): Promise<ValidationResult>;
42
+ /**
43
+ * Apply deal-specific validation and defaults
44
+ *
45
+ * @param values - Deal values to validate
46
+ * @param skipApiValidation - Whether to skip API validation
47
+ * @returns Deal validation result with validated data, warnings, and suggestions
48
+ */
49
+ static validateDealDefaults(values: Record<string, unknown>, skipApiValidation?: boolean): Promise<{
50
+ dealData: Record<string, unknown>;
51
+ warnings: string[];
52
+ suggestions: string[];
53
+ }>;
54
+ /**
55
+ * Attempt to resolve display names to API slugs for unknown fields
56
+ *
57
+ * This extends display name resolution (previously only in get_attribute_options)
58
+ * to work for create/update operations, improving UX consistency.
59
+ *
60
+ * @param values - Field values (may contain display names like "Deal stage")
61
+ * @param objectSlug - Object slug for attribute lookup
62
+ * @param result - Validation result to populate with resolutions
63
+ */
64
+ private static resolveDisplayNames;
65
+ /**
66
+ * Attempt to resolve a display name to an API slug
67
+ *
68
+ * Uses the exported resolveAttributeDisplayName from shared-handlers.ts
69
+ * to support user-friendly field names like "Deal stage" instead of "stage"
70
+ *
71
+ * @param objectSlug - The object slug (e.g., "deals", "companies")
72
+ * @param fieldName - The field name to resolve (e.g., "Deal stage")
73
+ * @returns The resolved API slug if found, or null
74
+ */
75
+ private static attemptDisplayNameResolution;
76
+ }
77
+ //# sourceMappingURL=FieldValidationHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldValidationHandler.d.ts","sourceRoot":"","sources":["../../../src/services/update/FieldValidationHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAKnF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,mCAAmC;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iCAAiC;IACjC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iDAAiD;IACjD,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,qBAAa,sBAAsB;IACjC;;;;;;;;;;;OAWG;WACU,kBAAkB,CAC7B,YAAY,EAAE,qBAAqB,EACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,CAAC,EAAE,MAAM,EACnB,2BAA2B,GAAE,OAAc,GAC1C,OAAO,CAAC,gBAAgB,CAAC;IA2C5B;;;;;;OAMG;WACU,oBAAoB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,iBAAiB,GAAE,OAAe,GACjC,OAAO,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IAoCF;;;;;;;;;OASG;mBACkB,mBAAmB;IA2CxC;;;;;;;;;OASG;mBACkB,4BAA4B;CAmBlD"}