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
@@ -8,14 +8,14 @@ import { searchByContentConfig } from './content-search.js';
8
8
  import { searchByTimeframeConfig } from './timeframe-search.js';
9
9
  import { batchOperationsConfig } from './batch-operations.js';
10
10
  export declare const advancedOperationsToolConfigs: {
11
- records_search_advanced: import("../types.js").UniversalToolConfig<import("../types.js").AdvancedSearchParams, import("../../../../types/attio.js").AttioRecord[]>;
12
- records_search_by_relationship: import("../types.js").UniversalToolConfig<import("../types.js").RelationshipSearchParams, import("../../../../types/attio.js").AttioRecord[]>;
13
- records_search_by_content: import("../types.js").UniversalToolConfig<import("../types.js").ContentSearchParams, import("../../../../types/attio.js").AttioRecord[]>;
14
- records_search_by_timeframe: import("../types.js").UniversalToolConfig<import("../types.js").TimeframeSearchParams, import("../../../../types/attio.js").AttioRecord[]>;
15
- records_batch: import("../types.js").UniversalToolConfig<Record<string, unknown>, Record<string, unknown> | Record<string, unknown>[]>;
11
+ search_records_advanced: import("../types.js").UniversalToolConfig<import("../types.js").AdvancedSearchParams, import("../../../../types/attio.js").AttioRecord[]>;
12
+ search_records_by_relationship: import("../types.js").UniversalToolConfig<import("../types.js").RelationshipSearchParams, import("../../../../types/attio.js").AttioRecord[]>;
13
+ search_records_by_content: import("../types.js").UniversalToolConfig<import("../types.js").ContentSearchParams, import("../../../../types/attio.js").AttioRecord[]>;
14
+ search_records_by_timeframe: import("../types.js").UniversalToolConfig<import("../types.js").TimeframeSearchParams, import("../../../../types/attio.js").AttioRecord[]>;
15
+ batch_records: import("../types.js").UniversalToolConfig<Record<string, unknown>, Record<string, unknown> | Record<string, unknown>[]>;
16
16
  };
17
17
  export declare const advancedOperationsToolDefinitions: {
18
- records_search_advanced: {
18
+ search_records_advanced: {
19
19
  name: string;
20
20
  description: string;
21
21
  inputSchema: {
@@ -79,7 +79,7 @@ export declare const advancedOperationsToolDefinitions: {
79
79
  idempotentHint: boolean;
80
80
  };
81
81
  };
82
- records_search_by_relationship: {
82
+ search_records_by_relationship: {
83
83
  name: string;
84
84
  description: string;
85
85
  inputSchema: {
@@ -131,7 +131,7 @@ export declare const advancedOperationsToolDefinitions: {
131
131
  idempotentHint: boolean;
132
132
  };
133
133
  };
134
- records_search_by_content: {
134
+ search_records_by_content: {
135
135
  name: string;
136
136
  description: string;
137
137
  inputSchema: {
@@ -178,7 +178,7 @@ export declare const advancedOperationsToolDefinitions: {
178
178
  idempotentHint: boolean;
179
179
  };
180
180
  };
181
- records_search_by_timeframe: {
181
+ search_records_by_timeframe: {
182
182
  name: string;
183
183
  description: string;
184
184
  inputSchema: {
@@ -231,7 +231,7 @@ export declare const advancedOperationsToolDefinitions: {
231
231
  idempotentHint: boolean;
232
232
  };
233
233
  };
234
- records_batch: {
234
+ batch_records: {
235
235
  name: string;
236
236
  description: string;
237
237
  inputSchema: {
@@ -10,15 +10,15 @@ import { batchOperationsConfig } from './batch-operations.js';
10
10
  import { formatToolDescription } from '../../../../handlers/tools/standards/index.js';
11
11
  import { advancedSearchSchema, searchByRelationshipSchema, searchByContentSchema, searchByTimeframeSchema, batchOperationsSchema, } from '../schemas.js';
12
12
  export const advancedOperationsToolConfigs = {
13
- records_search_advanced: advancedSearchConfig,
14
- records_search_by_relationship: searchByRelationshipConfig,
15
- records_search_by_content: searchByContentConfig,
16
- records_search_by_timeframe: searchByTimeframeConfig,
17
- records_batch: batchOperationsConfig,
13
+ search_records_advanced: advancedSearchConfig,
14
+ search_records_by_relationship: searchByRelationshipConfig,
15
+ search_records_by_content: searchByContentConfig,
16
+ search_records_by_timeframe: searchByTimeframeConfig,
17
+ batch_records: batchOperationsConfig,
18
18
  };
19
19
  export const advancedOperationsToolDefinitions = {
20
- records_search_advanced: {
21
- name: 'records_search_advanced',
20
+ search_records_advanced: {
21
+ name: 'search_records_advanced',
22
22
  description: formatToolDescription({
23
23
  capability: 'Search companies, people, deals, or tasks with complex nested filters (e.g., find deals by owner+stage, companies by industry+location).',
24
24
  boundaries: 'mutate records; use records.update or records.delete.',
@@ -31,8 +31,8 @@ export const advancedOperationsToolDefinitions = {
31
31
  idempotentHint: true,
32
32
  },
33
33
  },
34
- records_search_by_relationship: {
35
- name: 'records_search_by_relationship',
34
+ search_records_by_relationship: {
35
+ name: 'search_records_by_relationship',
36
36
  description: formatToolDescription({
37
37
  capability: 'Search records using relationship anchors (list, company, people).',
38
38
  boundaries: 'modify memberships; use list tools for writes.',
@@ -45,8 +45,8 @@ export const advancedOperationsToolDefinitions = {
45
45
  idempotentHint: true,
46
46
  },
47
47
  },
48
- records_search_by_content: {
49
- name: 'records_search_by_content',
48
+ search_records_by_content: {
49
+ name: 'search_records_by_content',
50
50
  description: formatToolDescription({
51
51
  capability: 'Search record content (notes, activity, communications).',
52
52
  boundaries: 'modify note content or attachments.',
@@ -59,8 +59,8 @@ export const advancedOperationsToolDefinitions = {
59
59
  idempotentHint: true,
60
60
  },
61
61
  },
62
- records_search_by_timeframe: {
63
- name: 'records_search_by_timeframe',
62
+ search_records_by_timeframe: {
63
+ name: 'search_records_by_timeframe',
64
64
  description: formatToolDescription({
65
65
  capability: 'Filter records by creation, update, or interaction timeframes.',
66
66
  boundaries: 'modify lifecycle state or scheduling follow-ups.',
@@ -73,8 +73,8 @@ export const advancedOperationsToolDefinitions = {
73
73
  idempotentHint: true,
74
74
  },
75
75
  },
76
- records_batch: {
77
- name: 'records_batch',
76
+ batch_records: {
77
+ name: 'batch_records',
78
78
  description: formatToolDescription({
79
79
  capability: 'Execute batched record operations (create/update/delete/get/search).',
80
80
  boundaries: 'ignore approval guardrails; hosts may require confirmation.',
@@ -10,10 +10,10 @@ import { searchCompaniesByPeople } from '../../../../objects/companies/index.js'
10
10
  import { searchPeopleByCompany } from '../../../../objects/people/index.js';
11
11
  import { searchDealsByCompany, searchDealsByPerson, } from '../../../../objects/deals/index.js';
12
12
  export const searchByRelationshipConfig = {
13
- name: 'records_search_by_relationship',
13
+ name: 'search_records_by_relationship',
14
14
  handler: async (params) => {
15
15
  try {
16
- const sanitizedParams = validateUniversalToolParams('records_search_by_relationship', params);
16
+ const sanitizedParams = validateUniversalToolParams('search_records_by_relationship', params);
17
17
  // Check for listId parameter first - if present and invalid, return error immediately
18
18
  if (params.listId && !isValidUUID(params.listId)) {
19
19
  throw new Error(`Invalid list_id: must be a UUID. Got: ${params.listId}`);
@@ -53,7 +53,7 @@ export const searchByRelationshipConfig = {
53
53
  }
54
54
  }
55
55
  catch (error) {
56
- throw ErrorService.createUniversalError('records_search_by_relationship', params.relationship_type, error);
56
+ throw ErrorService.createUniversalError('search_records_by_relationship', params.relationship_type, error);
57
57
  }
58
58
  },
59
59
  formatResult: (results, ...args) => {
@@ -10,10 +10,10 @@ import { getPluralResourceType } from '../../../tool-configs/universal/core/util
10
10
  import { normalizeOperator } from '../../../../utils/AttioFilterOperators.js';
11
11
  import { mapFieldName } from '../../../../utils/AttioFieldMapper.js';
12
12
  export const searchByTimeframeConfig = {
13
- name: 'records_search_by_timeframe',
13
+ name: 'search_records_by_timeframe',
14
14
  handler: async (params) => {
15
15
  try {
16
- const sanitizedParams = validateUniversalToolParams('records_search_by_timeframe', params);
16
+ const sanitizedParams = validateUniversalToolParams('search_records_by_timeframe', params);
17
17
  const { resource_type, timeframe_type, start_date, end_date, relative_range, invert_range, date_field, limit, offset, } = sanitizedParams;
18
18
  // Process relative_range parameter if provided (Issue #475)
19
19
  let processedStartDate = start_date;
@@ -149,7 +149,7 @@ export const searchByTimeframeConfig = {
149
149
  });
150
150
  }
151
151
  catch (error) {
152
- throw ErrorService.createUniversalError('records_search_by_timeframe', `${params.resource_type}:${params.timeframe_type || 'undefined'}`, error);
152
+ throw ErrorService.createUniversalError('search_records_by_timeframe', `${params.resource_type}:${params.timeframe_type || 'undefined'}`, error);
153
153
  }
154
154
  },
155
155
  formatResult: (results, ...args) => {
@@ -1 +1 @@
1
- {"version":3,"file":"utility-schemas.d.ts","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/utility-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAMnF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B5B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;CAkB1B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;CAQ5B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;CAgB7B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;CAO5B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgB3B,CAAC"}
1
+ {"version":3,"file":"utility-schemas.d.ts","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/utility-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAMnF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC5B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;CAkB1B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;CAQ5B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;CAgB7B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;CAO5B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgB3B,CAAC"}
@@ -13,11 +13,14 @@ export const createNoteSchema = {
13
13
  description: 'ID of the record to attach the note to',
14
14
  },
15
15
  title: { type: 'string', description: 'Title of the note' },
16
- content: { type: 'string', description: 'Content of the note' },
16
+ content: {
17
+ type: 'string',
18
+ description: 'Note content. Use \\n for line breaks. With format="markdown": supports # headings, - bullets, 1. numbered lists, **bold**, `code`, nested lists (2-space indent).',
19
+ },
17
20
  format: {
18
21
  type: 'string',
19
22
  enum: ['plaintext', 'markdown'],
20
- description: 'Content format (default: plaintext)',
23
+ description: 'Content format. Use "markdown" for rich text: headings, lists, bold, code blocks. Default: plaintext.',
21
24
  // Note: Default value 'plaintext' is enforced in src/api/operations/notes.ts:57
22
25
  default: 'plaintext',
23
26
  },
@@ -1 +1 @@
1
- {"version":3,"file":"utility-schemas.js","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/utility-schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utility-schemas.js","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/utility-schemas.ts"],"names":[],"mappings":"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"}
@@ -53,4 +53,33 @@ export declare const discoverAttributesSchema: {
53
53
  categories: string[];
54
54
  }[];
55
55
  };
56
+ export declare const getAttributeOptionsSchema: {
57
+ type: "object";
58
+ properties: {
59
+ resource_type: {
60
+ type: "string";
61
+ description: string;
62
+ };
63
+ attribute: {
64
+ type: "string";
65
+ description: string;
66
+ };
67
+ show_archived: {
68
+ type: "boolean";
69
+ default: boolean;
70
+ description: string;
71
+ };
72
+ };
73
+ required: ("attribute" | "resource_type")[];
74
+ additionalProperties: boolean;
75
+ examples: ({
76
+ resource_type: string;
77
+ attribute: string;
78
+ show_archived?: undefined;
79
+ } | {
80
+ resource_type: string;
81
+ attribute: string;
82
+ show_archived: boolean;
83
+ })[];
84
+ };
56
85
  //# sourceMappingURL=validation-schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation-schemas.d.ts","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/validation-schemas.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B/B,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;CAkBpC,CAAC"}
1
+ {"version":3,"file":"validation-schemas.d.ts","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/validation-schemas.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B/B,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;CAkBpC,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BrC,CAAC"}
@@ -46,4 +46,32 @@ export const discoverAttributesSchema = {
46
46
  },
47
47
  ],
48
48
  };
49
+ export const getAttributeOptionsSchema = {
50
+ type: 'object',
51
+ properties: {
52
+ resource_type: resourceTypeProperty,
53
+ attribute: {
54
+ type: 'string',
55
+ description: 'The attribute slug or ID (e.g., "channel", "stage", "categories")',
56
+ },
57
+ show_archived: {
58
+ type: 'boolean',
59
+ default: false,
60
+ description: 'Include archived options in the response',
61
+ },
62
+ },
63
+ required: ['resource_type', 'attribute'],
64
+ additionalProperties: false,
65
+ examples: [
66
+ {
67
+ resource_type: 'companies',
68
+ attribute: 'channel',
69
+ },
70
+ {
71
+ resource_type: 'deals',
72
+ attribute: 'stage',
73
+ show_archived: true,
74
+ },
75
+ ],
76
+ };
49
77
  //# sourceMappingURL=validation-schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation-schemas.js","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/validation-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,aAAa,EAAE,oBAAoB;QACnC,SAAS,EAAE;YACT,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,4CAA4C;SAC1D;QACD,UAAU,EAAE;YACV,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,WAAW,EAAE,sBAAsB;SACpC;QACD,MAAM,EAAE;YACN,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,WAAW,EAAE,gCAAgC;SAC9C;KACF;IACD,QAAQ,EAAE,CAAC,eAAwB,CAAC;IACpC,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE;QACR;YACE,aAAa,EAAE,WAAW;YAC1B,UAAU,EAAE,CAAC,UAAU,CAAC;SACzB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,aAAa,EAAE,oBAAoB;QACnC,UAAU,EAAE;YACV,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,WAAW,EAAE,sBAAsB;SACpC;KACF;IACD,QAAQ,EAAE,CAAC,eAAwB,CAAC;IACpC,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE;QACR;YACE,aAAa,EAAE,QAAQ;YACvB,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"validation-schemas.js","sourceRoot":"","sources":["../../../../../src/handlers/tool-configs/universal/schemas/validation-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,aAAa,EAAE,oBAAoB;QACnC,SAAS,EAAE;YACT,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,4CAA4C;SAC1D;QACD,UAAU,EAAE;YACV,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,WAAW,EAAE,sBAAsB;SACpC;QACD,MAAM,EAAE;YACN,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,WAAW,EAAE,gCAAgC;SAC9C;KACF;IACD,QAAQ,EAAE,CAAC,eAAwB,CAAC;IACpC,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE;QACR;YACE,aAAa,EAAE,WAAW;YAC1B,UAAU,EAAE,CAAC,UAAU,CAAC;SACzB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,aAAa,EAAE,oBAAoB;QACnC,UAAU,EAAE;YACV,IAAI,EAAE,OAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;YAClC,WAAW,EAAE,sBAAsB;SACpC;KACF;IACD,QAAQ,EAAE,CAAC,eAAwB,CAAC;IACpC,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE;QACR;YACE,aAAa,EAAE,QAAQ;YACvB,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,aAAa,EAAE,oBAAoB;QACnC,SAAS,EAAE;YACT,IAAI,EAAE,QAAiB;YACvB,WAAW,EACT,mEAAmE;SACtE;QACD,aAAa,EAAE;YACb,IAAI,EAAE,SAAkB;YACxB,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,0CAA0C;SACxD;KACF;IACD,QAAQ,EAAE,CAAC,eAAwB,EAAE,WAAoB,CAAC;IAC1D,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE;QACR;YACE,aAAa,EAAE,WAAW;YAC1B,SAAS,EAAE,SAAS;SACrB;QACD;YACE,aAAa,EAAE,OAAO;YACtB,SAAS,EAAE,OAAO;YAClB,aAAa,EAAE,IAAI;SACpB;KACF;CACF,CAAC"}
@@ -3,7 +3,7 @@ export type { SanitizedValue, SanitizedObject, } from './schemas/common/types.js
3
3
  export { InputSanitizer, validateUniversalToolParams, } from './validators/schema-validator.js';
4
4
  export { CrossResourceValidator } from './validators/cross-resource-validator.js';
5
5
  export { searchRecordsSchema, getRecordDetailsSchema, createRecordSchema, updateRecordSchema, deleteRecordSchema, } from './schemas/core-schemas.js';
6
- export { getAttributesSchema, discoverAttributesSchema, } from './schemas/validation-schemas.js';
6
+ export { getAttributesSchema, discoverAttributesSchema, getAttributeOptionsSchema, } from './schemas/validation-schemas.js';
7
7
  export { getDetailedInfoSchema, advancedSearchSchema, searchByRelationshipSchema, searchByContentSchema, searchByTimeframeSchema, batchOperationsSchema, } from './schemas/advanced-schemas.js';
8
8
  export { createNoteSchema, getNotesSchema, updateNoteSchema, searchNotesSchema, deleteNoteSchema, listNotesSchema, } from './schemas/utility-schemas.js';
9
9
  //# sourceMappingURL=schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/handlers/tool-configs/universal/schemas.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,cAAc,EACd,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,cAAc,EACd,eAAe,GAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,EACd,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAGlF,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/handlers/tool-configs/universal/schemas.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,cAAc,EACd,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,cAAc,EACd,eAAe,GAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,EACd,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAGlF,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,8BAA8B,CAAC"}
@@ -6,7 +6,7 @@ export { CrossResourceValidator } from './validators/cross-resource-validator.js
6
6
  // Core CRUD schemas
7
7
  export { searchRecordsSchema, getRecordDetailsSchema, createRecordSchema, updateRecordSchema, deleteRecordSchema, } from './schemas/core-schemas.js';
8
8
  // Validation-related schemas (attributes)
9
- export { getAttributesSchema, discoverAttributesSchema, } from './schemas/validation-schemas.js';
9
+ export { getAttributesSchema, discoverAttributesSchema, getAttributeOptionsSchema, } from './schemas/validation-schemas.js';
10
10
  // Advanced and batch schemas
11
11
  export { getDetailedInfoSchema, advancedSearchSchema, searchByRelationshipSchema, searchByContentSchema, searchByTimeframeSchema, batchOperationsSchema, } from './schemas/advanced-schemas.js';
12
12
  // Notes and utility schemas
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../src/handlers/tool-configs/universal/schemas.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,sDAAsD;AAEtD,OAAO,EACL,SAAS,EACT,cAAc,EACd,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AAKvC,OAAO,EACL,cAAc,EACd,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAElF,oBAAoB;AACpB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,0CAA0C;AAC1C,OAAO,EACL,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,iCAAiC,CAAC;AAEzC,6BAA6B;AAC7B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAEvC,4BAA4B;AAC5B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../src/handlers/tool-configs/universal/schemas.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,sDAAsD;AAEtD,OAAO,EACL,SAAS,EACT,cAAc,EACd,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AAKvC,OAAO,EACL,cAAc,EACd,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAElF,oBAAoB;AACpB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,0CAA0C;AAC1C,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AAEzC,6BAA6B;AAC7B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAEvC,4BAA4B;AAC5B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,8BAA8B,CAAC"}
@@ -4,8 +4,9 @@
4
4
  * These utilities provide parameter-based routing to delegate universal
5
5
  * tool operations to existing resource-specific handlers.
6
6
  */
7
- import { UniversalResourceType, UniversalSearchParams, UniversalRecordDetailsParams, UniversalCreateParams, UniversalUpdateParams, UniversalDeleteParams, UniversalAttributesParams, UniversalDetailedInfoParams, UniversalCreateNoteParams, UniversalGetNotesParams, UniversalUpdateNoteParams, UniversalSearchNotesParams, UniversalDeleteNoteParams } from './types.js';
7
+ import { UniversalResourceType, UniversalSearchParams, UniversalRecordDetailsParams, UniversalCreateParams, UniversalUpdateParams, UniversalDeleteParams, UniversalAttributesParams, UniversalDetailedInfoParams, UniversalCreateNoteParams, UniversalGetNotesParams, UniversalUpdateNoteParams, UniversalSearchNotesParams, UniversalDeleteNoteParams, UniversalGetAttributeOptionsParams } from './types.js';
8
8
  import { JsonObject } from '../../../types/attio.js';
9
+ import { type AttributeOptionsResult } from '../../../services/metadata/index.js';
9
10
  import { AttioRecord } from '../../../types/attio.js';
10
11
  /**
11
12
  * Universal search handler - delegates to UniversalSearchService
@@ -70,6 +71,24 @@ export declare function handleUniversalGetAttributes(params: UniversalAttributes
70
71
  export declare function handleUniversalDiscoverAttributes(resource_type: UniversalResourceType, options?: {
71
72
  categories?: string[];
72
73
  }): Promise<JsonObject>;
74
+ export declare const normalizeAttributeValue: (value: string) => string;
75
+ /**
76
+ * Resolve display name to API slug for an attribute
77
+ * Fetches attribute metadata and finds the slug by title match
78
+ *
79
+ * @param objectSlug - The object slug (e.g., "deals", "companies")
80
+ * @param displayName - The display name to resolve (e.g., "Deal stage")
81
+ * @returns The API slug if found, or null
82
+ */
83
+ export declare function resolveAttributeDisplayName(objectSlug: string, displayName: string): Promise<string | null>;
84
+ export declare const getSimilarAttributeSlugs: (objectSlug: string, attribute: string, maxResults?: number) => Promise<string[]>;
85
+ /**
86
+ * Universal get attribute options handler
87
+ * Retrieves valid options for select, multi-select, and status attributes
88
+ *
89
+ * Supports both API slugs (e.g., "stage") and display names (e.g., "Deal stage")
90
+ */
91
+ export declare function handleUniversalGetAttributeOptions(params: UniversalGetAttributeOptionsParams): Promise<AttributeOptionsResult>;
73
92
  /**
74
93
  * Universal get detailed info handler
75
94
  */
@@ -1 +1 @@
1
- {"version":3,"file":"shared-handlers.d.ts","sourceRoot":"","sources":["../../../../src/handlers/tool-configs/universal/shared-handlers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAkCrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,WAAW,EAAE,CAAC,CAExB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC,WAAW,CAAC,CAEtB;AAED;;GAEG;AAEH;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,UAAU,CAAC,CA2CrB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,UAAU,EAAE,CAAC,CAsDvB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,UAAU,EAAE,CAAC,CAEvB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,UAAU,CAAC,CAWrB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,UAAU,EAAE,CAAC,CAgCvB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAMhD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAEtB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAEtB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAElD;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,UAAU,CAAC,CAErB;AAED;;GAEG;AACH,wBAAsB,iCAAiC,CACrD,aAAa,EAAE,qBAAqB,EACpC,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,GACA,OAAO,CAAC,UAAU,CAAC,CAErB;AAED;;GAEG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,UAAU,CAAC,CA+CrB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,qBAAqB,GAClC,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,qBAAqB,GAClC,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,GACnB,YAAY,IAAI,qBAAqB,CAEvC"}
1
+ {"version":3,"file":"shared-handlers.d.ts","sourceRoot":"","sources":["../../../../src/handlers/tool-configs/universal/shared-handlers.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ import { UniversalUpdateService } from '../../../services/UniversalUpdateService
13
13
  import { UniversalRetrievalService } from '../../../services/UniversalRetrievalService.js';
14
14
  import { UniversalSearchService } from '../../../services/UniversalSearchService.js';
15
15
  import { UniversalCreateService } from '../../../services/UniversalCreateService.js';
16
+ import { AttributeOptionsService, } from '../../../services/metadata/index.js';
16
17
  import { getLazyAttioClient } from '../../../api/lazy-client.js';
17
18
  // Import existing handlers by resource type
18
19
  import { getListDetails } from '../../../objects/lists.js';
@@ -213,6 +214,221 @@ export async function handleUniversalGetAttributes(params) {
213
214
  export async function handleUniversalDiscoverAttributes(resource_type, options) {
214
215
  return UniversalMetadataService.discoverAttributes(resource_type, options);
215
216
  }
217
+ /**
218
+ * Object slug mapping for resource types
219
+ */
220
+ const OBJECT_SLUG_MAP = {
221
+ companies: 'companies',
222
+ people: 'people',
223
+ deals: 'deals',
224
+ tasks: 'tasks',
225
+ records: 'records',
226
+ lists: 'lists',
227
+ notes: 'notes',
228
+ };
229
+ export const normalizeAttributeValue = (value) => value.trim().toLowerCase();
230
+ const levenshteinDistance = (a, b) => {
231
+ const matrix = [];
232
+ for (let i = 0; i <= a.length; i++) {
233
+ matrix[i] = [i];
234
+ }
235
+ for (let j = 0; j <= b.length; j++) {
236
+ matrix[0][j] = j;
237
+ }
238
+ for (let i = 1; i <= a.length; i++) {
239
+ for (let j = 1; j <= b.length; j++) {
240
+ if (a[i - 1] === b[j - 1]) {
241
+ matrix[i][j] = matrix[i - 1][j - 1];
242
+ }
243
+ else {
244
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
245
+ }
246
+ }
247
+ }
248
+ return matrix[a.length][b.length];
249
+ };
250
+ const getAttributeSchema = async (objectSlug) => {
251
+ const schema = await handleUniversalDiscoverAttributes(objectSlug);
252
+ return (schema.all || []);
253
+ };
254
+ /**
255
+ * Resolve display name to API slug for an attribute
256
+ * Fetches attribute metadata and finds the slug by title match
257
+ *
258
+ * @param objectSlug - The object slug (e.g., "deals", "companies")
259
+ * @param displayName - The display name to resolve (e.g., "Deal stage")
260
+ * @returns The API slug if found, or null
261
+ */
262
+ export async function resolveAttributeDisplayName(objectSlug, displayName) {
263
+ try {
264
+ const allAttrs = await getAttributeSchema(objectSlug);
265
+ const normalizedInput = normalizeAttributeValue(displayName);
266
+ const exactMatch = allAttrs.find((attr) => {
267
+ const candidates = [attr.title, attr.name, attr.api_slug].filter(Boolean);
268
+ return candidates.some((candidate) => normalizeAttributeValue(candidate) === normalizedInput);
269
+ });
270
+ if (exactMatch?.api_slug) {
271
+ debug('shared-handlers', `Resolved display name "${displayName}" to API slug "${exactMatch.api_slug}"`, { attribute: displayName, resolvedSlug: exactMatch.api_slug }, 'resolveDisplayName', OperationType.DATA_PROCESSING);
272
+ return exactMatch.api_slug;
273
+ }
274
+ const partialMatch = allAttrs.find((attr) => {
275
+ const title = attr.title ? normalizeAttributeValue(attr.title) : null;
276
+ const slug = attr.api_slug
277
+ ? normalizeAttributeValue(attr.api_slug)
278
+ : null;
279
+ return ((title && title.includes(normalizedInput)) ||
280
+ (slug && slug.includes(normalizedInput)) ||
281
+ (title && normalizedInput.includes(title)) ||
282
+ (slug && normalizedInput.includes(slug)));
283
+ });
284
+ if (partialMatch?.api_slug) {
285
+ debug('shared-handlers', `Resolved display name "${displayName}" to API slug "${partialMatch.api_slug}" via partial match`, { attribute: displayName, resolvedSlug: partialMatch.api_slug }, 'resolveDisplayName', OperationType.DATA_PROCESSING);
286
+ return partialMatch.api_slug;
287
+ }
288
+ const typoCandidates = allAttrs
289
+ .filter((attr) => attr.api_slug)
290
+ .map((attr) => {
291
+ const slug = attr.api_slug;
292
+ const title = attr.title || attr.name || slug;
293
+ return {
294
+ slug,
295
+ distance: Math.min(levenshteinDistance(normalizedInput, normalizeAttributeValue(slug)), levenshteinDistance(normalizedInput, normalizeAttributeValue(title))),
296
+ };
297
+ })
298
+ .filter((candidate) => candidate.distance <= 2)
299
+ .sort((a, b) => a.distance - b.distance);
300
+ if (typoCandidates.length > 0) {
301
+ debug('shared-handlers', `Resolved display name "${displayName}" to API slug "${typoCandidates[0].slug}" via typo tolerance`, { attribute: displayName, resolvedSlug: typoCandidates[0].slug }, 'resolveDisplayName', OperationType.DATA_PROCESSING);
302
+ return typoCandidates[0].slug;
303
+ }
304
+ return null;
305
+ }
306
+ catch {
307
+ // If discovery fails, return null - the original error will be shown
308
+ return null;
309
+ }
310
+ }
311
+ export const getSimilarAttributeSlugs = async (objectSlug, attribute, maxResults = 3) => {
312
+ try {
313
+ const allAttrs = await getAttributeSchema(objectSlug);
314
+ const normalizedInput = normalizeAttributeValue(attribute);
315
+ const candidates = allAttrs
316
+ .filter((attr) => attr.api_slug)
317
+ .map((attr) => {
318
+ const slug = attr.api_slug;
319
+ const title = attr.title || attr.name || slug;
320
+ return {
321
+ slug,
322
+ distance: Math.min(levenshteinDistance(normalizedInput, normalizeAttributeValue(slug)), levenshteinDistance(normalizedInput, normalizeAttributeValue(title))),
323
+ };
324
+ })
325
+ .sort((a, b) => a.distance - b.distance);
326
+ const partials = allAttrs
327
+ .filter((attr) => attr.api_slug)
328
+ .filter((attr) => {
329
+ const title = attr.title ? normalizeAttributeValue(attr.title) : '';
330
+ const slug = attr.api_slug
331
+ ? normalizeAttributeValue(attr.api_slug)
332
+ : '';
333
+ return (title.includes(normalizedInput) ||
334
+ slug.includes(normalizedInput) ||
335
+ normalizedInput.includes(title) ||
336
+ normalizedInput.includes(slug));
337
+ })
338
+ .map((attr) => attr.api_slug);
339
+ const combined = [
340
+ ...partials,
341
+ ...candidates.map((candidate) => candidate.slug),
342
+ ];
343
+ const unique = [];
344
+ for (const slug of combined) {
345
+ if (!unique.includes(slug)) {
346
+ unique.push(slug);
347
+ }
348
+ }
349
+ return unique.slice(0, maxResults);
350
+ }
351
+ catch {
352
+ return [];
353
+ }
354
+ };
355
+ /**
356
+ * Universal get attribute options handler
357
+ * Retrieves valid options for select, multi-select, and status attributes
358
+ *
359
+ * Supports both API slugs (e.g., "stage") and display names (e.g., "Deal stage")
360
+ */
361
+ export async function handleUniversalGetAttributeOptions(params) {
362
+ const { resource_type, attribute, show_archived } = params;
363
+ // Map resource type to object slug
364
+ const objectSlug = OBJECT_SLUG_MAP[resource_type.toLowerCase()] || resource_type.toLowerCase();
365
+ // Lists require both list_id and attribute_slug - not yet supported via this tool
366
+ // TODO: Add list_id parameter to support list attributes (see plan Phase 3B)
367
+ if (resource_type === UniversalResourceType.LISTS) {
368
+ throw new Error('records_get_attribute_options does not yet support list attributes. ' +
369
+ 'Use get-list-details to inspect list attribute schemas instead.');
370
+ }
371
+ // First attempt: try with the attribute as provided (may be slug or display name)
372
+ try {
373
+ return await AttributeOptionsService.getOptions(objectSlug, attribute, show_archived);
374
+ }
375
+ catch (firstError) {
376
+ let latestError = firstError;
377
+ // Check if this looks like a display name (contains space or uppercase)
378
+ const mightBeDisplayName = attribute.includes(' ') || /[A-Z]/.test(attribute);
379
+ if (mightBeDisplayName) {
380
+ // Try to resolve display name to API slug
381
+ const resolvedSlug = await resolveAttributeDisplayName(objectSlug, attribute);
382
+ if (resolvedSlug && resolvedSlug !== attribute) {
383
+ try {
384
+ // Retry with resolved slug
385
+ debug('shared-handlers', `Resolved display name "${attribute}" to API slug "${resolvedSlug}"`, { attribute, resolvedSlug }, 'resolveDisplayName', OperationType.DATA_PROCESSING);
386
+ return await AttributeOptionsService.getOptions(objectSlug, resolvedSlug, show_archived);
387
+ }
388
+ catch (retryError) {
389
+ latestError = retryError;
390
+ }
391
+ }
392
+ }
393
+ const errorMsg = latestError instanceof Error ? latestError.message : String(latestError);
394
+ let slugExists = null;
395
+ try {
396
+ const allAttrs = await getAttributeSchema(objectSlug);
397
+ const normalizedAttr = normalizeAttributeValue(attribute);
398
+ const displayNameMatch = allAttrs.find((attr) => {
399
+ const title = attr.title ? normalizeAttributeValue(attr.title) : '';
400
+ const name = attr.name ? normalizeAttributeValue(attr.name) : '';
401
+ return title === normalizedAttr || name === normalizedAttr;
402
+ });
403
+ if (displayNameMatch?.api_slug &&
404
+ displayNameMatch.api_slug !== attribute) {
405
+ try {
406
+ return await AttributeOptionsService.getOptions(objectSlug, displayNameMatch.api_slug, show_archived);
407
+ }
408
+ catch (retryError) {
409
+ latestError = retryError;
410
+ }
411
+ }
412
+ slugExists = allAttrs.some((attr) => attr.api_slug &&
413
+ normalizeAttributeValue(attr.api_slug) === normalizedAttr);
414
+ if (slugExists === false) {
415
+ const suggestions = await getSimilarAttributeSlugs(objectSlug, attribute);
416
+ const suggestionText = suggestions.length > 0
417
+ ? ` Did you mean: ${suggestions.map((s) => `"${s}"`).join(', ')}?`
418
+ : '';
419
+ throw new Error(`Attribute "${attribute}" not found on ${objectSlug}.${suggestionText}\n\n` +
420
+ `Use API slugs (e.g., "stage" not "Deal stage"). Run records_discover_attributes(resource_type="${objectSlug}") to see available attribute slugs.`);
421
+ }
422
+ }
423
+ catch (resolutionError) {
424
+ if (resolutionError instanceof Error) {
425
+ throw resolutionError;
426
+ }
427
+ }
428
+ throw new Error(`${errorMsg}\n\nTip: Use the API slug (e.g., "stage") not the display name (e.g., "Deal stage"). ` +
429
+ `Run records_discover_attributes to see available attribute slugs.`);
430
+ }
431
+ }
216
432
  /**
217
433
  * Universal get detailed info handler
218
434
  */