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,168 @@
1
+ /**
2
+ * Service for formatting workspace schemas into various output formats
3
+ *
4
+ * Uses Handlebars templates to transform WorkspaceSchema objects into:
5
+ * - Claude Skills (SKILL.md + resources/)
6
+ * - Plain Markdown (single file)
7
+ * - JSON (machine-readable)
8
+ *
9
+ * @see Issue #983
10
+ */
11
+ import Handlebars from 'handlebars';
12
+ import * as fs from 'fs/promises';
13
+ import * as path from 'path';
14
+ import { fileURLToPath } from 'url';
15
+ // Get __dirname equivalent in ES modules
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = path.dirname(__filename);
18
+ /**
19
+ * Service for formatting workspace schemas into various output formats
20
+ */
21
+ export class SchemaFormatterService {
22
+ templates = new Map();
23
+ helpersRegistered = false;
24
+ constructor() {
25
+ this.registerHelpers();
26
+ }
27
+ /**
28
+ * Formats schema to specified output format
29
+ *
30
+ * @param schema - Complete workspace schema
31
+ * @param format - Output format (skill, markdown, json)
32
+ * @returns Formatted output ready for writing
33
+ */
34
+ async format(schema, format) {
35
+ switch (format) {
36
+ case 'skill':
37
+ return this.formatAsSkill(schema);
38
+ case 'markdown':
39
+ return this.formatAsMarkdown(schema);
40
+ case 'json':
41
+ return this.formatAsJSON(schema);
42
+ default:
43
+ throw new Error(`Unsupported format: ${format}`);
44
+ }
45
+ }
46
+ /**
47
+ * Formats as Claude Skill with SKILL.md + resources/
48
+ *
49
+ * @param schema - Workspace schema
50
+ * @returns Skill files ready for writing
51
+ */
52
+ async formatAsSkill(schema) {
53
+ const skillMd = await this.renderTemplate('SKILL.template.md', schema);
54
+ // Validate Claude Skill description length requirement (≤200 chars)
55
+ const descMatch = skillMd.match(/^description:\s*(.+)$/m);
56
+ if (descMatch && descMatch[1].length > 200) {
57
+ throw new Error(`Skill description exceeds 200 characters (${descMatch[1].length} chars). ` +
58
+ `Claude Skills require descriptions ≤200 chars. ` +
59
+ `Try reducing the number of objects or simplifying the description.`);
60
+ }
61
+ // Validate Claude Skill name length requirement (≤64 chars)
62
+ const nameMatch = skillMd.match(/^name:\s*(.+)$/m);
63
+ if (nameMatch && nameMatch[1].trim().length > 64) {
64
+ throw new Error(`Skill name exceeds 64 characters (${nameMatch[1].trim().length} chars). ` +
65
+ `Claude Skills require names ≤64 chars.`);
66
+ }
67
+ // Generate per-object attribute files for progressive disclosure
68
+ // This enables Claude to load only the object it's working with (~2k tokens)
69
+ // instead of the entire monolithic file (~10k tokens)
70
+ // @see Issue #1014
71
+ const attributeFiles = {};
72
+ for (const obj of schema.objects) {
73
+ const objectSchema = { ...schema, objects: [obj] };
74
+ const attrMd = await this.renderTemplate('attribute-reference.template.md', objectSchema);
75
+ attributeFiles[`resources/${obj.objectSlug}-attributes.md`] = attrMd;
76
+ }
77
+ const complexTypes = await this.renderTemplate('complex-types.template.md', schema);
78
+ return {
79
+ format: 'skill',
80
+ files: {
81
+ 'SKILL.md': skillMd,
82
+ ...attributeFiles,
83
+ 'resources/complex-types.md': complexTypes,
84
+ },
85
+ };
86
+ }
87
+ /**
88
+ * Formats as single markdown file (all-in-one)
89
+ *
90
+ * @param schema - Workspace schema
91
+ * @returns Single markdown file
92
+ */
93
+ async formatAsMarkdown(schema) {
94
+ // Render all templates and combine them
95
+ const skillMd = await this.renderTemplate('SKILL.template.md', schema);
96
+ const attrRef = await this.renderTemplate('attribute-reference.template.md', schema);
97
+ const complexTypes = await this.renderTemplate('complex-types.template.md', schema);
98
+ // Combine into single document
99
+ const combined = `${skillMd}\n\n---\n\n${attrRef}\n\n---\n\n${complexTypes}`;
100
+ return {
101
+ format: 'markdown',
102
+ files: {
103
+ 'attio-workspace-schema.md': combined,
104
+ },
105
+ };
106
+ }
107
+ /**
108
+ * Formats as JSON (machine-readable)
109
+ *
110
+ * @param schema - Workspace schema
111
+ * @returns JSON representation
112
+ */
113
+ formatAsJSON(schema) {
114
+ return {
115
+ format: 'json',
116
+ files: {
117
+ 'attio-workspace-schema.json': JSON.stringify(schema, null, 2),
118
+ },
119
+ };
120
+ }
121
+ /**
122
+ * Renders a template with the given data
123
+ *
124
+ * @param templateName - Template filename
125
+ * @param data - Data to pass to template
126
+ * @returns Rendered template string
127
+ */
128
+ async renderTemplate(templateName, data) {
129
+ // Check cache first
130
+ if (!this.templates.has(templateName)) {
131
+ // Load and compile template
132
+ const templatePath = path.join(__dirname, '../../templates/skill', templateName);
133
+ try {
134
+ const templateSource = await fs.readFile(templatePath, 'utf8');
135
+ const compiledTemplate = Handlebars.compile(templateSource);
136
+ this.templates.set(templateName, compiledTemplate);
137
+ }
138
+ catch (error) {
139
+ throw new Error(`Failed to load template ${templateName}: ${error instanceof Error ? error.message : String(error)}`);
140
+ }
141
+ }
142
+ // Render template
143
+ const template = this.templates.get(templateName);
144
+ return template(data);
145
+ }
146
+ /**
147
+ * Registers custom Handlebars helpers
148
+ */
149
+ registerHelpers() {
150
+ if (this.helpersRegistered) {
151
+ return;
152
+ }
153
+ // Helper: Display checkmark or X for boolean values
154
+ Handlebars.registerHelper('checkmark', (value) => {
155
+ return value ? '✓' : '✗';
156
+ });
157
+ // Helper: Subtract two numbers
158
+ Handlebars.registerHelper('subtract', (a, b) => {
159
+ return a - b;
160
+ });
161
+ // Helper: JSON stringify with formatting
162
+ Handlebars.registerHelper('json', (obj) => {
163
+ return JSON.stringify(obj, null, 2);
164
+ });
165
+ this.helpersRegistered = true;
166
+ }
167
+ }
168
+ //# sourceMappingURL=SchemaFormatterService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaFormatterService.js","sourceRoot":"","sources":["../../../src/services/skill-generator/SchemaFormatterService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Service for fetching and aggregating Attio workspace schema data
3
+ *
4
+ * This service orchestrates calls to existing services to build a complete
5
+ * workspace schema including objects, attributes, select options, and metadata.
6
+ *
7
+ * @see Issue #983
8
+ */
9
+ import type { WorkspaceSchema, FetchSchemaOptions } from './types.js';
10
+ /**
11
+ * Service for fetching complete workspace schema data
12
+ *
13
+ * Note: API key flows through getLazyAttioClient() from environment/context,
14
+ * not through constructor dependency injection.
15
+ */
16
+ export declare class WorkspaceSchemaService {
17
+ /**
18
+ * Creates a new WorkspaceSchemaService
19
+ */
20
+ constructor();
21
+ /**
22
+ * Fetches the display title for an object from the Attio API
23
+ *
24
+ * @param objectSlug - Object API slug (e.g., 'companies', 'custom_prospecting_list')
25
+ * @returns The object title from Attio, or null if fetch fails
26
+ * @see Issue #1017
27
+ */
28
+ private fetchObjectTitle;
29
+ private getOptionFetchDelayMs;
30
+ /**
31
+ * Fetches complete workspace schema for specified objects
32
+ *
33
+ * This method implements graceful degradation:
34
+ * - If an object fails to fetch, it logs the error and continues with other objects
35
+ * - If an attribute's options fail to fetch, it includes the attribute without options
36
+ *
37
+ * @param objectSlugs - Array of object slugs to fetch (e.g., ['companies', 'people'])
38
+ * @param options - Fetching options (max options, include archived)
39
+ * @returns Complete workspace schema
40
+ */
41
+ fetchSchema(objectSlugs: string[], options: FetchSchemaOptions): Promise<WorkspaceSchema>;
42
+ /**
43
+ * Fetches schema for a single object
44
+ *
45
+ * @param objectSlug - Object slug (e.g., 'companies', 'people', 'deals')
46
+ * @param options - Fetching options
47
+ * @returns Object schema with all attributes and metadata
48
+ */
49
+ private fetchObjectSchema;
50
+ /**
51
+ * Checks if an attribute type supports options (select, status, multi-select)
52
+ *
53
+ * @param type - Attribute type from Attio API
54
+ * @returns True if attribute supports options
55
+ */
56
+ private isOptionBasedAttribute;
57
+ /**
58
+ * Checks if an attribute type is a complex type requiring structure documentation
59
+ *
60
+ * @param type - Attribute type from Attio API
61
+ * @returns True if attribute is a complex type
62
+ */
63
+ private isComplexType;
64
+ /**
65
+ * Gets the structure definition for complex attribute types
66
+ *
67
+ * @param type - Complex attribute type
68
+ * @returns Structure definition with field types
69
+ */
70
+ private getComplexTypeStructure;
71
+ /**
72
+ * Gets human-readable display name for an object slug
73
+ *
74
+ * Uses the fetched title from Attio API if available, otherwise falls back
75
+ * to hardcoded display names for Phase 1 objects or slug capitalization.
76
+ *
77
+ * @param objectSlug - Object API slug
78
+ * @param fetchedTitle - Title fetched from Attio API (optional)
79
+ * @returns Human-readable display name
80
+ * @see Issue #1017
81
+ */
82
+ private getDisplayName;
83
+ }
84
+ //# sourceMappingURL=WorkspaceSchemaService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceSchemaService.d.ts","sourceRoot":"","sources":["../../../src/services/skill-generator/WorkspaceSchemaService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,KAAK,EACV,eAAe,EAGf,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAsCpB;;;;;GAKG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;;IAKH;;;;;;OAMG;YACW,gBAAgB;IAgB9B,OAAO,CAAC,qBAAqB;IAa7B;;;;;;;;;;OAUG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,eAAe,CAAC;IA4B3B;;;;;;OAMG;YACW,iBAAiB;IA2G/B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAI9B;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IASrB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IA0C/B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;CAyBvB"}
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Service for fetching and aggregating Attio workspace schema data
3
+ *
4
+ * This service orchestrates calls to existing services to build a complete
5
+ * workspace schema including objects, attributes, select options, and metadata.
6
+ *
7
+ * @see Issue #983
8
+ */
9
+ import { getObjectAttributeMetadata } from '../../api/attribute-types.js';
10
+ import { getLazyAttioClient } from '../../api/lazy-client.js';
11
+ import { AttributeOptionsService } from '../../services/metadata/AttributeOptionsService.js';
12
+ import { debug as logDebug, error as logError, warn as logWarn, } from '../../utils/logger.js';
13
+ /**
14
+ * Type guard to check if an ID is a nested option ID object
15
+ * Attio API returns option IDs as nested objects: {workspace_id, object_id, attribute_id, option_id}
16
+ * @param id - The ID value to check
17
+ * @returns True if the ID is a nested option ID object
18
+ * @see Issue #1014
19
+ */
20
+ function isNestedOptionId(id) {
21
+ return typeof id === 'object' && id !== null && 'option_id' in id;
22
+ }
23
+ /**
24
+ * Generates a slug-style value from an option title
25
+ * Converts "Existing Customer" → "existing_customer"
26
+ * @param title - The option title
27
+ * @returns Slug-style value
28
+ * @see Issue #1014
29
+ */
30
+ function generateOptionValue(title) {
31
+ return title
32
+ .toLowerCase()
33
+ .replace(/[^a-z0-9]+/g, '_') // Replace non-alphanumeric with underscore
34
+ .replace(/^_+|_+$/g, ''); // Trim leading/trailing underscores
35
+ }
36
+ /**
37
+ * Service for fetching complete workspace schema data
38
+ *
39
+ * Note: API key flows through getLazyAttioClient() from environment/context,
40
+ * not through constructor dependency injection.
41
+ */
42
+ export class WorkspaceSchemaService {
43
+ /**
44
+ * Creates a new WorkspaceSchemaService
45
+ */
46
+ constructor() {
47
+ // No parameters needed - API key flows through getLazyAttioClient()
48
+ }
49
+ /**
50
+ * Fetches the display title for an object from the Attio API
51
+ *
52
+ * @param objectSlug - Object API slug (e.g., 'companies', 'custom_prospecting_list')
53
+ * @returns The object title from Attio, or null if fetch fails
54
+ * @see Issue #1017
55
+ */
56
+ async fetchObjectTitle(objectSlug) {
57
+ try {
58
+ const client = getLazyAttioClient();
59
+ const response = await client.get(`/objects/${objectSlug}`);
60
+ const obj = response?.data?.data || response?.data;
61
+ return obj?.title || null;
62
+ }
63
+ catch {
64
+ logDebug('WorkspaceSchemaService', `Could not fetch title for ${objectSlug}, using fallback`, { objectSlug });
65
+ return null;
66
+ }
67
+ }
68
+ getOptionFetchDelayMs(options) {
69
+ const optionFetchDelayMs = options.optionFetchDelayMs;
70
+ if (optionFetchDelayMs === undefined)
71
+ return 100;
72
+ if (typeof optionFetchDelayMs !== 'number' ||
73
+ !Number.isFinite(optionFetchDelayMs) ||
74
+ optionFetchDelayMs < 0) {
75
+ return 100;
76
+ }
77
+ return optionFetchDelayMs;
78
+ }
79
+ /**
80
+ * Fetches complete workspace schema for specified objects
81
+ *
82
+ * This method implements graceful degradation:
83
+ * - If an object fails to fetch, it logs the error and continues with other objects
84
+ * - If an attribute's options fail to fetch, it includes the attribute without options
85
+ *
86
+ * @param objectSlugs - Array of object slugs to fetch (e.g., ['companies', 'people'])
87
+ * @param options - Fetching options (max options, include archived)
88
+ * @returns Complete workspace schema
89
+ */
90
+ async fetchSchema(objectSlugs, options) {
91
+ const objects = [];
92
+ for (const objectSlug of objectSlugs) {
93
+ try {
94
+ const objectSchema = await this.fetchObjectSchema(objectSlug, options);
95
+ objects.push(objectSchema);
96
+ }
97
+ catch (error) {
98
+ logError('WorkspaceSchemaService', `Failed to fetch schema for ${objectSlug}`, error instanceof Error ? error : new Error(String(error)), { objectSlug });
99
+ // Continue processing other objects despite error
100
+ }
101
+ }
102
+ return {
103
+ metadata: {
104
+ generatedAt: new Date().toISOString(),
105
+ workspace: 'attio', // Could be enhanced to fetch actual workspace name
106
+ objects: objectSlugs,
107
+ },
108
+ objects,
109
+ };
110
+ }
111
+ /**
112
+ * Fetches schema for a single object
113
+ *
114
+ * @param objectSlug - Object slug (e.g., 'companies', 'people', 'deals')
115
+ * @param options - Fetching options
116
+ * @returns Object schema with all attributes and metadata
117
+ */
118
+ async fetchObjectSchema(objectSlug, options) {
119
+ const optionFetchDelayMs = this.getOptionFetchDelayMs(options);
120
+ const PHASE1_OBJECTS = ['companies', 'people', 'deals'];
121
+ // 1. Fetch object title from API for custom objects (Issue #1017)
122
+ // Skip API call for Phase 1 objects - they have hardcoded display names
123
+ const objectTitle = PHASE1_OBJECTS.includes(objectSlug)
124
+ ? null
125
+ : await this.fetchObjectTitle(objectSlug);
126
+ // 2. Fetch attribute metadata (uses existing 15min TTL cache)
127
+ const metadataMap = await getObjectAttributeMetadata(objectSlug);
128
+ // 3. Convert metadata to AttributeSchema array
129
+ const attributes = [];
130
+ for (const [apiSlug, metadata] of metadataMap.entries()) {
131
+ const attributeSchema = {
132
+ apiSlug,
133
+ displayName: metadata.title,
134
+ type: metadata.type,
135
+ isMultiselect: metadata.is_multiselect || false,
136
+ isUnique: metadata.is_unique || false,
137
+ isRequired: metadata.is_required || false,
138
+ isWritable: metadata.is_writable !== false, // Default to true
139
+ description: metadata.description,
140
+ };
141
+ // 4. Fetch options for select/status attributes
142
+ if (this.isOptionBasedAttribute(metadata.type)) {
143
+ try {
144
+ const optionsResult = await AttributeOptionsService.getOptions(objectSlug, apiSlug, options.includeArchived);
145
+ // Apply truncation
146
+ const totalOptions = optionsResult.options.length;
147
+ const truncated = totalOptions > options.maxOptionsPerAttribute;
148
+ attributeSchema.options = optionsResult.options
149
+ .slice(0, options.maxOptionsPerAttribute)
150
+ .map((opt) => ({
151
+ // Handle nested ID objects from Attio API
152
+ // API returns: { workspace_id, object_id, attribute_id, option_id }
153
+ id: isNestedOptionId(opt.id)
154
+ ? opt.id.option_id
155
+ : typeof opt.id === 'string'
156
+ ? opt.id
157
+ : '',
158
+ title: opt.title,
159
+ // Generate slug-style value from title since Attio API doesn't provide it
160
+ // "Existing Customer" → "existing_customer"
161
+ value: generateOptionValue(opt.title),
162
+ isArchived: 'is_archived' in opt ? opt.is_archived : false,
163
+ }));
164
+ attributeSchema.optionsTruncated = truncated;
165
+ attributeSchema.totalOptions = totalOptions;
166
+ // Rate limiting: Add delay between option fetches
167
+ if (optionFetchDelayMs > 0) {
168
+ await new Promise((resolve) => setTimeout(resolve, optionFetchDelayMs));
169
+ }
170
+ }
171
+ catch (error) {
172
+ // Log warning but don't fail - attribute can still be documented
173
+ const errorMessage = error instanceof Error ? error.message : String(error);
174
+ logWarn('WorkspaceSchemaService', `No options available for ${objectSlug}.${apiSlug}`, { objectSlug, attributeSlug: apiSlug, errorMessage });
175
+ }
176
+ }
177
+ // 5. Add complex type structures
178
+ if (this.isComplexType(metadata.type)) {
179
+ attributeSchema.complexTypeStructure = this.getComplexTypeStructure(metadata.type);
180
+ }
181
+ // 6. Add relationship metadata (only when we have real data)
182
+ if (metadata.relationship?.object && metadata.relationship?.cardinality) {
183
+ attributeSchema.relationship = {
184
+ targetObject: metadata.relationship.object,
185
+ cardinality: metadata.relationship.cardinality,
186
+ };
187
+ }
188
+ attributes.push(attributeSchema);
189
+ }
190
+ return {
191
+ objectSlug,
192
+ displayName: this.getDisplayName(objectSlug, objectTitle),
193
+ attributes,
194
+ };
195
+ }
196
+ /**
197
+ * Checks if an attribute type supports options (select, status, multi-select)
198
+ *
199
+ * @param type - Attribute type from Attio API
200
+ * @returns True if attribute supports options
201
+ */
202
+ isOptionBasedAttribute(type) {
203
+ return ['select', 'status', 'multi-select'].includes(type);
204
+ }
205
+ /**
206
+ * Checks if an attribute type is a complex type requiring structure documentation
207
+ *
208
+ * @param type - Attribute type from Attio API
209
+ * @returns True if attribute is a complex type
210
+ */
211
+ isComplexType(type) {
212
+ return [
213
+ 'location',
214
+ 'personal-name',
215
+ 'phone-number',
216
+ 'email-address',
217
+ ].includes(type);
218
+ }
219
+ /**
220
+ * Gets the structure definition for complex attribute types
221
+ *
222
+ * @param type - Complex attribute type
223
+ * @returns Structure definition with field types
224
+ */
225
+ getComplexTypeStructure(type) {
226
+ switch (type) {
227
+ case 'location':
228
+ return {
229
+ line_1: 'string | null (street address)',
230
+ line_2: 'string | null (apt/suite)',
231
+ line_3: 'string | null (additional)',
232
+ line_4: 'string | null (additional)',
233
+ locality: 'string | null (city)',
234
+ region: 'string | null (state/province)',
235
+ postcode: 'string | null (ZIP/postal code)',
236
+ country_code: 'string | null (ISO country code)',
237
+ latitude: 'number | null (coordinates)',
238
+ longitude: 'number | null (coordinates)',
239
+ };
240
+ case 'personal-name':
241
+ return {
242
+ first_name: 'string (required)',
243
+ last_name: 'string | null',
244
+ middle_name: 'string | null',
245
+ title: 'string | null (e.g., "Dr.", "Prof.")',
246
+ full_name: 'string (auto-generated, read-only)',
247
+ };
248
+ case 'phone-number':
249
+ return {
250
+ country_code: 'string (e.g., "+1")',
251
+ number: 'string (digits only)',
252
+ original_number: 'string (as provided)',
253
+ };
254
+ case 'email-address':
255
+ return {
256
+ email_address: 'string (valid email format)',
257
+ };
258
+ default:
259
+ return {};
260
+ }
261
+ }
262
+ /**
263
+ * Gets human-readable display name for an object slug
264
+ *
265
+ * Uses the fetched title from Attio API if available, otherwise falls back
266
+ * to hardcoded display names for Phase 1 objects or slug capitalization.
267
+ *
268
+ * @param objectSlug - Object API slug
269
+ * @param fetchedTitle - Title fetched from Attio API (optional)
270
+ * @returns Human-readable display name
271
+ * @see Issue #1017
272
+ */
273
+ getDisplayName(objectSlug, fetchedTitle) {
274
+ // Use API-fetched title if available
275
+ if (fetchedTitle) {
276
+ return fetchedTitle;
277
+ }
278
+ // Fallback to hardcoded display names for Phase 1 objects
279
+ const displayNames = {
280
+ companies: 'Companies',
281
+ people: 'People',
282
+ deals: 'Deals',
283
+ };
284
+ // If not in map, title-case the slug (replace underscores with spaces)
285
+ return (displayNames[objectSlug] ||
286
+ objectSlug
287
+ .split('_')
288
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
289
+ .join(' '));
290
+ }
291
+ }
292
+ //# sourceMappingURL=WorkspaceSchemaService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceSchemaService.js","sourceRoot":"","sources":["../../../src/services/skill-generator/WorkspaceSchemaService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Workspace Schema Skill Generator
3
+ *
4
+ * Exports services and types for generating Claude Skills from Attio workspace schemas.
5
+ *
6
+ * @see Issue #983
7
+ */
8
+ export { WorkspaceSchemaService } from './WorkspaceSchemaService.js';
9
+ export { SchemaFormatterService } from './SchemaFormatterService.js';
10
+ export { OutputWriterService } from './OutputWriterService.js';
11
+ export type { GenerateSkillConfig, WorkspaceSchema, ObjectSchema, AttributeSchema, AttributeOption, FormattedOutput, SkillOutput, FetchSchemaOptions, } from './types.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/skill-generator/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,WAAW,EACX,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Workspace Schema Skill Generator
3
+ *
4
+ * Exports services and types for generating Claude Skills from Attio workspace schemas.
5
+ *
6
+ * @see Issue #983
7
+ */
8
+ export { WorkspaceSchemaService } from './WorkspaceSchemaService.js';
9
+ export { SchemaFormatterService } from './SchemaFormatterService.js';
10
+ export { OutputWriterService } from './OutputWriterService.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/skill-generator/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}