@happyvertical/smrt-planner 0.57.9 → 0.57.11

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 (482) hide show
  1. package/app/404.html +18 -18
  2. package/app/_app/immutable/chunks/{w7gJm5x8.js → B2hfN2VL.js} +1 -1
  3. package/app/_app/immutable/chunks/{KTvSuL9k.js → BA7oEUVv.js} +1 -1
  4. package/app/_app/immutable/chunks/{BPckYchm.js → BFBrKYIZ.js} +1 -1
  5. package/app/_app/immutable/chunks/BFJgNGCw.js +980 -0
  6. package/app/_app/immutable/chunks/{QgvgSIl1.js → BPIRT1pR.js} +3 -3
  7. package/app/_app/immutable/chunks/{DYiyikup.js → BpZyWfxI.js} +1 -1
  8. package/app/_app/immutable/chunks/{Dxmrd4l9.js → Bxy7okxu.js} +1 -1
  9. package/app/_app/immutable/chunks/{Nwzk4hDB.js → C26hsvAf.js} +1 -1
  10. package/app/_app/immutable/chunks/{BiFuvGxR.js → CMoev5sM.js} +1 -1
  11. package/app/_app/immutable/chunks/{Bm3rKxox.js → CN11a3UB.js} +1 -1
  12. package/app/_app/immutable/chunks/{DH61ZkSq.js → CUhs1G9L.js} +1 -1
  13. package/app/_app/immutable/chunks/{BohhHb_e.js → CXgA0Uxg.js} +1 -1
  14. package/app/_app/immutable/chunks/{K_Eb6Nei.js → Cc_ZlCEA.js} +1 -1
  15. package/app/_app/immutable/chunks/Cq7I_-C0.js +1 -0
  16. package/app/_app/immutable/chunks/{C7IhEh2q.js → Cv4-Km2e.js} +1 -1
  17. package/app/_app/immutable/chunks/{DVUoNtbx.js → Cye6FWwy.js} +1 -1
  18. package/app/_app/immutable/chunks/{C1NxBQaE.js → D-G7Teh9.js} +1 -1
  19. package/app/_app/immutable/chunks/{CxTGWFx4.js → D0ibYqDu.js} +1 -1
  20. package/app/_app/immutable/chunks/{CLd6ylMC.js → DJxCUhtq.js} +1 -1
  21. package/app/_app/immutable/chunks/DN0-Cx7Y.js +1 -0
  22. package/app/_app/immutable/chunks/{DUwAL-1A.js → DS1ApqxJ.js} +1 -1
  23. package/app/_app/immutable/chunks/{CE4bn0-6.js → DSxP4IQt.js} +1 -1
  24. package/app/_app/immutable/chunks/{BIoR0hZt.js → DdoIOUTJ.js} +1 -1
  25. package/app/_app/immutable/chunks/{B3hYhkYV.js → DgQFYubu.js} +1 -1
  26. package/app/_app/immutable/chunks/{dggLG4_7.js → DnAGA0N-.js} +1 -1
  27. package/app/_app/immutable/chunks/{DOkn8C67.js → Dx1VzWCD.js} +2 -2
  28. package/app/_app/immutable/chunks/{C6XmYxTW.js → XqNh9vZm.js} +1 -1
  29. package/app/_app/immutable/chunks/{BtowvSCA.js → YhY72Uhf.js} +1 -1
  30. package/app/_app/immutable/chunks/mzvl-05K.js +1 -0
  31. package/app/_app/immutable/entry/{app.TPLqdveB.js → app.C8ZDox8Z.js} +2 -2
  32. package/app/_app/immutable/entry/start.Dg2NiCvD.js +1 -0
  33. package/app/_app/immutable/nodes/{0.CJBw99gi.js → 0.DE5huPD8.js} +1 -1
  34. package/app/_app/immutable/nodes/{1.D7cBnefl.js → 1.BiH6Jnil.js} +1 -1
  35. package/app/_app/immutable/nodes/{10.CFkowCqD.js → 10.C_KB8ejn.js} +1 -1
  36. package/app/_app/immutable/nodes/{11.DoNoZpx5.js → 11.DFy1XrHB.js} +1 -1
  37. package/app/_app/immutable/nodes/{12.BWn8ggfg.js → 12.1ZLx0UOF.js} +1 -1
  38. package/app/_app/immutable/nodes/{13.DZOKpuwM.js → 13.XPn_VuBW.js} +1 -1
  39. package/app/_app/immutable/nodes/{14.ByqCSsNX.js → 14.Ercp5Yal.js} +1 -1
  40. package/app/_app/immutable/nodes/{2.DtE7b-Hp.js → 2.D_BYCG3U.js} +3 -3
  41. package/app/_app/immutable/nodes/{3.BdYyZYSL.js → 3.wBVp_ZTI.js} +1 -1
  42. package/app/_app/immutable/nodes/{4.BMAU11zH.js → 4.BlCuYUUW.js} +1 -1
  43. package/app/_app/immutable/nodes/{5.CFopDcY8.js → 5.CPPegUVU.js} +1 -1
  44. package/app/_app/immutable/nodes/{6.Cflfdg2v.js → 6.CJiT2vuV.js} +1 -1
  45. package/app/_app/immutable/nodes/{7.Dg0lAhiN.js → 7.-bKoHvi1.js} +1 -1
  46. package/app/_app/immutable/nodes/{8.jgOv7VYZ.js → 8.CrS_Sgnk.js} +1 -1
  47. package/app/_app/immutable/nodes/{9.D76pJ13W.js → 9.DrSeLPdB.js} +1 -1
  48. package/app/_app/version.json +1 -1
  49. package/app/advanced-styles/index.html +21 -21
  50. package/app/ai/index.html +24 -24
  51. package/app/blueprint/index.html +19 -19
  52. package/app/cookbook/index.html +19 -19
  53. package/app/index.html +31 -31
  54. package/app/m/ads/AdDeliveryTier/index.html +23 -23
  55. package/app/m/ads/AdEvent/index.html +23 -23
  56. package/app/m/ads/AdFormat/index.html +23 -23
  57. package/app/m/ads/AdGroup/index.html +23 -23
  58. package/app/m/ads/AdVariation/index.html +23 -23
  59. package/app/m/analytics/AnalyticsDataStream/index.html +23 -23
  60. package/app/m/analytics/AnalyticsEvent/index.html +23 -23
  61. package/app/m/analytics/AnalyticsProperty/index.html +23 -23
  62. package/app/m/analytics/AnalyticsReport/index.html +23 -23
  63. package/app/m/approvals/ApprovalEvent/index.html +23 -23
  64. package/app/m/approvals/ApprovalPolicy/index.html +23 -23
  65. package/app/m/approvals/ApprovalRequest/index.html +23 -23
  66. package/app/m/assets/Asset/attachments/index.html +24 -24
  67. package/app/m/assets/Asset/index.html +23 -23
  68. package/app/m/assets/AssetAssociation/index.html +23 -23
  69. package/app/m/assets/AssetMetafield/index.html +23 -23
  70. package/app/m/assets/AssetStatus/index.html +23 -23
  71. package/app/m/assets/AssetType/index.html +23 -23
  72. package/app/m/assets/Folder/index.html +23 -23
  73. package/app/m/chat/AgentSession/index.html +23 -23
  74. package/app/m/chat/ChatMessage/index.html +23 -23
  75. package/app/m/chat/ChatParticipant/index.html +23 -23
  76. package/app/m/chat/ChatReaction/index.html +23 -23
  77. package/app/m/chat/ChatRoom/index.html +23 -23
  78. package/app/m/chat/ChatThread/index.html +23 -23
  79. package/app/m/chat/VoiceGatewayTurn/index.html +23 -23
  80. package/app/m/chat/VoiceSession/index.html +23 -23
  81. package/app/m/commerce/Agreement/index.html +23 -23
  82. package/app/m/commerce/Cart/index.html +23 -23
  83. package/app/m/commerce/Contract/index.html +23 -23
  84. package/app/m/commerce/ContractLineItem/index.html +23 -23
  85. package/app/m/commerce/Customer/index.html +23 -23
  86. package/app/m/commerce/DocumentTax/index.html +23 -23
  87. package/app/m/commerce/Estimate/index.html +23 -23
  88. package/app/m/commerce/Fulfillment/index.html +23 -23
  89. package/app/m/commerce/FulfillmentLineItem/index.html +23 -23
  90. package/app/m/commerce/HistoricalCustomerFunds/index.html +23 -23
  91. package/app/m/commerce/HistoricalCustomerFundsAllocation/index.html +23 -23
  92. package/app/m/commerce/HistoricalSalesLine/index.html +23 -23
  93. package/app/m/commerce/Invoice/index.html +23 -23
  94. package/app/m/commerce/InvoiceLineItem/index.html +23 -23
  95. package/app/m/commerce/Lease/index.html +23 -23
  96. package/app/m/commerce/LicenseSale/index.html +23 -23
  97. package/app/m/commerce/Order/index.html +23 -23
  98. package/app/m/commerce/Payment/index.html +23 -23
  99. package/app/m/commerce/PaymentAllocation/index.html +23 -23
  100. package/app/m/commerce/PaymentInstrument/index.html +23 -23
  101. package/app/m/commerce/PaymentIntent/index.html +23 -23
  102. package/app/m/commerce/Payout/index.html +23 -23
  103. package/app/m/commerce/ProductionOrder/index.html +23 -23
  104. package/app/m/commerce/PurchaseContract/index.html +23 -23
  105. package/app/m/commerce/PurchaseOrder/index.html +23 -23
  106. package/app/m/commerce/SalesContract/index.html +23 -23
  107. package/app/m/commerce/SupplierQuote/index.html +23 -23
  108. package/app/m/commerce/TaxCode/index.html +23 -23
  109. package/app/m/commerce/TaxComponent/index.html +23 -23
  110. package/app/m/commerce/TaxSettings/index.html +23 -23
  111. package/app/m/commerce/TaxSummaryReport/index.html +23 -23
  112. package/app/m/commerce/TenantPaymentAccount/index.html +88 -0
  113. package/app/m/commerce/Vendor/index.html +23 -23
  114. package/app/m/commerce/WholesaleOrder/index.html +23 -23
  115. package/app/m/content/Content/index.html +23 -23
  116. package/app/m/content/ContentContribution/index.html +23 -23
  117. package/app/m/content/ContentContributionAttachment/index.html +23 -23
  118. package/app/m/content/ContentContributionRevision/index.html +23 -23
  119. package/app/m/content/ContentContributionType/index.html +23 -23
  120. package/app/m/content/ContentContributor/index.html +23 -23
  121. package/app/m/content/ContentCorrection/index.html +23 -23
  122. package/app/m/content/ContentFeedSource/index.html +23 -23
  123. package/app/m/content/ContentGovernanceAssignment/index.html +23 -23
  124. package/app/m/content/ContentGovernancePolicy/index.html +23 -23
  125. package/app/m/content/ContentGovernanceProfile/index.html +23 -23
  126. package/app/m/content/ContentReference/index.html +23 -23
  127. package/app/m/content/ContentReview/index.html +23 -23
  128. package/app/m/content/ContentVersion/index.html +23 -23
  129. package/app/m/events/Event/index.html +23 -23
  130. package/app/m/events/EventParticipant/index.html +23 -23
  131. package/app/m/events/EventSeries/index.html +23 -23
  132. package/app/m/events/EventType/index.html +23 -23
  133. package/app/m/expenses/Expense/index.html +23 -23
  134. package/app/m/facts/Fact/index.html +23 -23
  135. package/app/m/facts/FactContent/index.html +23 -23
  136. package/app/m/facts/FactEvidence/index.html +23 -23
  137. package/app/m/facts/FactSource/index.html +23 -23
  138. package/app/m/facts/FactSubject/index.html +23 -23
  139. package/app/m/facts/FactTag/index.html +23 -23
  140. package/app/m/fields/FieldPolicy/index.html +23 -23
  141. package/app/m/fields/FieldPolicySuggestion/index.html +23 -23
  142. package/app/m/fields/FieldUsageCounter/index.html +23 -23
  143. package/app/m/images/Image/index.html +23 -23
  144. package/app/m/inventory/InventoryLocation/index.html +23 -23
  145. package/app/m/inventory/StockLevel/index.html +23 -23
  146. package/app/m/inventory/StockMovement/index.html +23 -23
  147. package/app/m/ledgers/Account/index.html +23 -23
  148. package/app/m/ledgers/Journal/index.html +23 -23
  149. package/app/m/ledgers/JournalEntry/index.html +23 -23
  150. package/app/m/ledgers/Ledger/index.html +23 -23
  151. package/app/m/manufacturing/Assembly/index.html +23 -23
  152. package/app/m/manufacturing/BillOfMaterials/index.html +23 -23
  153. package/app/m/manufacturing/BomLine/index.html +23 -23
  154. package/app/m/manufacturing/Operation/index.html +23 -23
  155. package/app/m/manufacturing/ProductionRun/index.html +23 -23
  156. package/app/m/manufacturing/ProductionRunCompletion/index.html +23 -23
  157. package/app/m/manufacturing/RoutingStep/index.html +23 -23
  158. package/app/m/marketing/Campaign/index.html +23 -23
  159. package/app/m/marketing/CampaignChannel/index.html +23 -23
  160. package/app/m/marketing/CampaignMetricSnapshot/index.html +23 -23
  161. package/app/m/messages/Account/index.html +23 -23
  162. package/app/m/messages/Attachment/index.html +23 -23
  163. package/app/m/messages/Blacklist/index.html +23 -23
  164. package/app/m/messages/Email/failed-sends/index.html +24 -24
  165. package/app/m/messages/Email/index.html +23 -23
  166. package/app/m/messages/Email/mailbox/index.html +24 -24
  167. package/app/m/messages/EmailAccount/index.html +23 -23
  168. package/app/m/messages/EmailAttachment/index.html +23 -23
  169. package/app/m/messages/EmailFolder/index.html +23 -23
  170. package/app/m/messages/Message/index.html +23 -23
  171. package/app/m/messages/MessagingEndpoint/index.html +23 -23
  172. package/app/m/messages/PersonaMessageRoute/index.html +23 -23
  173. package/app/m/messages/SlackAccount/index.html +23 -23
  174. package/app/m/messages/SlackMessage/index.html +23 -23
  175. package/app/m/messages/TelegramAccount/index.html +23 -23
  176. package/app/m/messages/Tweet/index.html +23 -23
  177. package/app/m/messages/TwitterAccount/index.html +23 -23
  178. package/app/m/messages/Whitelist/index.html +23 -23
  179. package/app/m/messages/ZulipAccount/index.html +23 -23
  180. package/app/m/places/Place/index.html +23 -23
  181. package/app/m/places/PlaceType/index.html +23 -23
  182. package/app/m/products/Category/index.html +23 -23
  183. package/app/m/products/Material/index.html +23 -23
  184. package/app/m/products/Product/index.html +23 -23
  185. package/app/m/products/Product/ingredients/index.html +24 -24
  186. package/app/m/products/ProductVariant/index.html +23 -23
  187. package/app/m/products/Sku/index.html +23 -23
  188. package/app/m/profiles/ApiKey/index.html +23 -23
  189. package/app/m/profiles/Bot/index.html +23 -23
  190. package/app/m/profiles/MagicLinkToken/index.html +23 -23
  191. package/app/m/profiles/NostrIdentity/index.html +23 -23
  192. package/app/m/profiles/OidcIdentity/index.html +23 -23
  193. package/app/m/profiles/Organization/index.html +23 -23
  194. package/app/m/profiles/Person/index.html +23 -23
  195. package/app/m/profiles/Profile/index.html +23 -23
  196. package/app/m/profiles/ProfileMetadata/index.html +23 -23
  197. package/app/m/profiles/ProfileMetafield/index.html +23 -23
  198. package/app/m/profiles/ProfileRelationship/index.html +23 -23
  199. package/app/m/profiles/ProfileRelationshipTerm/index.html +23 -23
  200. package/app/m/profiles/ProfileRelationshipType/index.html +23 -23
  201. package/app/m/profiles/ProfileType/index.html +23 -23
  202. package/app/m/projects/Comment/index.html +23 -23
  203. package/app/m/projects/Issue/index.html +23 -23
  204. package/app/m/projects/Label/index.html +23 -23
  205. package/app/m/projects/Project/index.html +23 -23
  206. package/app/m/projects/ProjectIntegration/index.html +23 -23
  207. package/app/m/projects/PullRequest/index.html +23 -23
  208. package/app/m/projects/Repository/index.html +23 -23
  209. package/app/m/properties/Property/index.html +23 -23
  210. package/app/m/properties/Zone/index.html +23 -23
  211. package/app/m/reports/RuntimeReport/index.html +23 -23
  212. package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +23 -23
  213. package/app/m/reports/SmrtReportLock/index.html +23 -23
  214. package/app/m/reports/SmrtReportRefreshTask/index.html +23 -23
  215. package/app/m/reports/SmrtReportRun/index.html +23 -23
  216. package/app/m/reports/SmrtReportSchedule/index.html +23 -23
  217. package/app/m/reports/SmrtReportWatermark/index.html +23 -23
  218. package/app/m/sales/Agreement/index.html +23 -23
  219. package/app/m/sales/AttributionException/index.html +23 -23
  220. package/app/m/sales/AttributionPolicy/index.html +23 -23
  221. package/app/m/sales/Commission/index.html +23 -23
  222. package/app/m/sales/CommissionAdjustment/index.html +23 -23
  223. package/app/m/sales/CommissionPayout/index.html +23 -23
  224. package/app/m/sales/CommissionPlan/index.html +23 -23
  225. package/app/m/sales/Earner/index.html +23 -23
  226. package/app/m/sales/EarnerSourceAttribution/index.html +23 -23
  227. package/app/m/sales/EarningEvent/index.html +23 -23
  228. package/app/m/sales/ExecutedAgreement/index.html +23 -23
  229. package/app/m/sales/Lead/index.html +23 -23
  230. package/app/m/sales/Opportunity/index.html +23 -23
  231. package/app/m/sales/OpportunityConversion/index.html +23 -23
  232. package/app/m/sales/PipelineDefinition/index.html +23 -23
  233. package/app/m/sales/PipelineStage/index.html +23 -23
  234. package/app/m/sales/Referral/index.html +23 -23
  235. package/app/m/sales/ReferralAgreement/index.html +23 -23
  236. package/app/m/sales/ReferralLink/index.html +23 -23
  237. package/app/m/sales/ReferralProgram/index.html +23 -23
  238. package/app/m/sales/ReferralTermSnapshot/index.html +23 -23
  239. package/app/m/sales/ReferralTouch/index.html +23 -23
  240. package/app/m/sales/Referrer/index.html +23 -23
  241. package/app/m/sales/SalesActivity/index.html +23 -23
  242. package/app/m/sales/SalesRepresentative/index.html +23 -23
  243. package/app/m/sites/Site/index.html +23 -23
  244. package/app/m/sites/SiteAgentBinding/index.html +23 -23
  245. package/app/m/social/OAuthState/index.html +23 -23
  246. package/app/m/social/SocialAccount/index.html +23 -23
  247. package/app/m/social/SocialPost/index.html +23 -23
  248. package/app/m/social/SocialPostAnalyticsSnapshot/index.html +23 -23
  249. package/app/m/subscriptions/BillingAdjustment/index.html +23 -23
  250. package/app/m/subscriptions/ClientCharge/index.html +23 -23
  251. package/app/m/subscriptions/CreditGrant/index.html +23 -23
  252. package/app/m/subscriptions/PricingRule/index.html +23 -23
  253. package/app/m/subscriptions/RetailCharge/index.html +23 -23
  254. package/app/m/subscriptions/SpendingPolicy/index.html +23 -23
  255. package/app/m/subscriptions/SubscriptionPlan/index.html +23 -23
  256. package/app/m/subscriptions/SubscriptionPlanVersion/index.html +88 -0
  257. package/app/m/subscriptions/TenantSubscription/index.html +23 -23
  258. package/app/m/subscriptions/TenantUsageMetric/index.html +23 -23
  259. package/app/m/support/ServiceTimeEntry/index.html +23 -23
  260. package/app/m/support/SupportAiRun/index.html +23 -23
  261. package/app/m/support/SupportAvailability/index.html +23 -23
  262. package/app/m/support/SupportCase/index.html +23 -23
  263. package/app/m/support/SupportCaseEvent/index.html +23 -23
  264. package/app/m/support/SupportChannelBinding/index.html +23 -23
  265. package/app/m/support/SupportCharge/index.html +23 -23
  266. package/app/m/support/SupportCompensation/index.html +23 -23
  267. package/app/m/support/SupportCompensationPlan/index.html +23 -23
  268. package/app/m/support/SupportEscalation/index.html +23 -23
  269. package/app/m/support/SupportInteraction/index.html +23 -23
  270. package/app/m/support/SupportPlan/index.html +23 -23
  271. package/app/m/support/SupportPolicy/index.html +23 -23
  272. package/app/m/support/SupportQualification/index.html +23 -23
  273. package/app/m/support/SupportServiceTarget/index.html +23 -23
  274. package/app/m/support/SupportSpecialist/index.html +23 -23
  275. package/app/m/support/SupportWorkLink/index.html +23 -23
  276. package/app/m/tags/Tag/index.html +23 -23
  277. package/app/m/tags/TagAlias/index.html +23 -23
  278. package/app/m/timesheets/AttendanceBreak/index.html +23 -23
  279. package/app/m/timesheets/AttendancePunch/index.html +23 -23
  280. package/app/m/timesheets/AttendanceSegment/index.html +23 -23
  281. package/app/m/timesheets/ServiceChargeSnapshot/index.html +23 -23
  282. package/app/m/timesheets/ServiceCompensationSnapshot/index.html +23 -23
  283. package/app/m/timesheets/ServiceTimeEntry/index.html +23 -23
  284. package/app/m/users/Group/index.html +23 -23
  285. package/app/m/users/GroupMember/index.html +23 -23
  286. package/app/m/users/GroupRole/index.html +23 -23
  287. package/app/m/users/Membership/index.html +23 -23
  288. package/app/m/users/MembershipOverride/index.html +23 -23
  289. package/app/m/users/Permission/index.html +23 -23
  290. package/app/m/users/Role/index.html +23 -23
  291. package/app/m/users/RolePermission/index.html +23 -23
  292. package/app/m/users/Session/index.html +23 -23
  293. package/app/m/users/Tenant/index.html +23 -23
  294. package/app/m/users/TenantIntegration/index.html +23 -23
  295. package/app/m/users/TenantPermissionOverride/index.html +23 -23
  296. package/app/m/users/User/index.html +23 -23
  297. package/app/m/video/Character/index.html +23 -23
  298. package/app/m/video/CharacterAsset/index.html +23 -23
  299. package/app/m/video/CompositeJob/index.html +23 -23
  300. package/app/m/video/Performer/index.html +23 -23
  301. package/app/m/video/PerformerAsset/index.html +23 -23
  302. package/app/m/video/Scene/index.html +23 -23
  303. package/app/m/video/SceneAsset/index.html +23 -23
  304. package/app/m/video/VideoComposition/index.html +23 -23
  305. package/app/m/video/VideoCompositionAsset/index.html +23 -23
  306. package/app/m/video/VideoSequence/index.html +23 -23
  307. package/app/m/video/VideoSequenceAsset/index.html +23 -23
  308. package/app/m/video/VideoShot/index.html +23 -23
  309. package/app/m/video/VideoShotAsset/index.html +23 -23
  310. package/app/m/video/VideoShotCharacter/index.html +23 -23
  311. package/app/m/video/VideoWorkflow/index.html +23 -23
  312. package/app/m/voice/VoiceOutput/index.html +23 -23
  313. package/app/m/voice/VoiceProfile/index.html +23 -23
  314. package/app/m/voice/VoiceSample/index.html +23 -23
  315. package/app/mcp.html +2 -2
  316. package/app/packages/ads/index.html +21 -21
  317. package/app/packages/analytics/index.html +21 -21
  318. package/app/packages/approvals/index.html +21 -21
  319. package/app/packages/assets/index.html +21 -21
  320. package/app/packages/chat/index.html +21 -21
  321. package/app/packages/comments/index.html +21 -21
  322. package/app/packages/commerce/index.html +22 -22
  323. package/app/packages/content/index.html +21 -21
  324. package/app/packages/events/index.html +21 -21
  325. package/app/packages/expenses/index.html +21 -21
  326. package/app/packages/facts/index.html +21 -21
  327. package/app/packages/fields/index.html +21 -21
  328. package/app/packages/human-resources/index.html +21 -21
  329. package/app/packages/images/index.html +21 -21
  330. package/app/packages/index.html +21 -21
  331. package/app/packages/ingestion/index.html +21 -21
  332. package/app/packages/inventory/index.html +21 -21
  333. package/app/packages/ledgers/index.html +21 -21
  334. package/app/packages/manufacturing/index.html +21 -21
  335. package/app/packages/marketing/index.html +21 -21
  336. package/app/packages/messages/index.html +21 -21
  337. package/app/packages/places/index.html +21 -21
  338. package/app/packages/preferences/index.html +21 -21
  339. package/app/packages/products/index.html +21 -21
  340. package/app/packages/profiles/index.html +21 -21
  341. package/app/packages/projects/index.html +21 -21
  342. package/app/packages/properties/index.html +21 -21
  343. package/app/packages/reports/index.html +21 -21
  344. package/app/packages/sales/index.html +22 -22
  345. package/app/packages/sites/index.html +21 -21
  346. package/app/packages/social/index.html +21 -21
  347. package/app/packages/subscriptions/index.html +22 -22
  348. package/app/packages/support/index.html +21 -21
  349. package/app/packages/tags/index.html +21 -21
  350. package/app/packages/timesheets/index.html +21 -21
  351. package/app/packages/users/index.html +21 -21
  352. package/app/packages/video/index.html +21 -21
  353. package/app/packages/voice/index.html +21 -21
  354. package/app/packages/webhooks/index.html +21 -21
  355. package/app/recipes/account-access/help/index.html +21 -21
  356. package/app/recipes/account-access/index.html +23 -23
  357. package/app/recipes/activity/help/index.html +21 -21
  358. package/app/recipes/activity/index.html +23 -23
  359. package/app/recipes/agreements/help/index.html +21 -21
  360. package/app/recipes/agreements/index.html +23 -23
  361. package/app/recipes/analytics.reports/help/index.html +21 -21
  362. package/app/recipes/analytics.reports/index.html +23 -23
  363. package/app/recipes/assets/help/index.html +21 -21
  364. package/app/recipes/assets/index.html +23 -23
  365. package/app/recipes/billing/help/index.html +21 -21
  366. package/app/recipes/billing/index.html +23 -23
  367. package/app/recipes/chat.assistant/help/index.html +21 -21
  368. package/app/recipes/chat.assistant/index.html +23 -23
  369. package/app/recipes/comments/help/index.html +21 -21
  370. package/app/recipes/comments/index.html +23 -23
  371. package/app/recipes/commerce.customers/help/index.html +21 -21
  372. package/app/recipes/commerce.customers/index.html +23 -23
  373. package/app/recipes/commerce.estimates/help/index.html +21 -21
  374. package/app/recipes/commerce.estimates/index.html +23 -23
  375. package/app/recipes/commerce.purchases/help/index.html +21 -21
  376. package/app/recipes/commerce.purchases/index.html +23 -23
  377. package/app/recipes/commerce.sales/help/index.html +21 -21
  378. package/app/recipes/commerce.sales/index.html +23 -23
  379. package/app/recipes/commerce.vendors/help/index.html +21 -21
  380. package/app/recipes/commerce.vendors/index.html +23 -23
  381. package/app/recipes/commerce.wholesale/help/index.html +21 -21
  382. package/app/recipes/commerce.wholesale/index.html +23 -23
  383. package/app/recipes/events.calendar/help/index.html +21 -21
  384. package/app/recipes/events.calendar/index.html +23 -23
  385. package/app/recipes/expenses.tracking/help/index.html +21 -21
  386. package/app/recipes/expenses.tracking/index.html +23 -23
  387. package/app/recipes/fields.form-customization/help/index.html +21 -21
  388. package/app/recipes/fields.form-customization/index.html +23 -23
  389. package/app/recipes/ingestion/help/index.html +21 -21
  390. package/app/recipes/ingestion/index.html +23 -23
  391. package/app/recipes/integrations/help/index.html +21 -21
  392. package/app/recipes/integrations/index.html +23 -23
  393. package/app/recipes/inventory.stock/help/index.html +21 -21
  394. package/app/recipes/inventory.stock/index.html +23 -23
  395. package/app/recipes/ledgers.bookkeeping/help/index.html +21 -21
  396. package/app/recipes/ledgers.bookkeeping/index.html +23 -23
  397. package/app/recipes/messages/help/index.html +21 -21
  398. package/app/recipes/messages/index.html +23 -23
  399. package/app/recipes/products/help/index.html +21 -21
  400. package/app/recipes/products/index.html +23 -23
  401. package/app/recipes/projects.tracker/help/index.html +21 -21
  402. package/app/recipes/projects.tracker/index.html +23 -23
  403. package/app/recipes/reports.materialized/help/index.html +21 -21
  404. package/app/recipes/reports.materialized/index.html +23 -23
  405. package/app/recipes/reports.runtime/help/index.html +21 -21
  406. package/app/recipes/reports.runtime/index.html +23 -23
  407. package/app/recipes/sales.pipeline/help/index.html +21 -21
  408. package/app/recipes/sales.pipeline/index.html +23 -23
  409. package/app/recipes/tags.taxonomy/help/index.html +21 -21
  410. package/app/recipes/tags.taxonomy/index.html +23 -23
  411. package/app/recipes/team-collaboration/help/index.html +21 -21
  412. package/app/recipes/team-collaboration/index.html +23 -23
  413. package/app/recipes/timesheets.time-entries/help/index.html +21 -21
  414. package/app/recipes/timesheets.time-entries/index.html +23 -23
  415. package/app/s/custom-accounts/index.html +19 -19
  416. package/app/s/custom-appointments/index.html +19 -19
  417. package/app/s/custom-billing/index.html +19 -19
  418. package/app/s/custom-bookings/index.html +19 -19
  419. package/app/s/custom-buying/index.html +19 -19
  420. package/app/s/custom-checkout/index.html +19 -19
  421. package/app/s/custom-classes/index.html +19 -19
  422. package/app/s/custom-clients/index.html +19 -19
  423. package/app/s/custom-events/index.html +19 -19
  424. package/app/s/custom-fleet/index.html +19 -19
  425. package/app/s/custom-gigs/index.html +19 -19
  426. package/app/s/custom-giving/index.html +19 -19
  427. package/app/s/custom-instruments/index.html +19 -19
  428. package/app/s/custom-jobs/index.html +19 -19
  429. package/app/s/custom-kitchen/index.html +19 -19
  430. package/app/s/custom-lessons/index.html +19 -19
  431. package/app/s/custom-material/index.html +19 -19
  432. package/app/s/custom-meetings/index.html +19 -19
  433. package/app/s/custom-members/index.html +19 -19
  434. package/app/s/custom-merch/index.html +19 -19
  435. package/app/s/custom-money/index.html +19 -19
  436. package/app/s/custom-paint/index.html +19 -19
  437. package/app/s/custom-parts/index.html +19 -19
  438. package/app/s/custom-rentals/index.html +19 -19
  439. package/app/s/custom-roastery/index.html +19 -19
  440. package/app/s/custom-schedule/index.html +19 -19
  441. package/app/s/custom-shelf/index.html +19 -19
  442. package/app/s/custom-shop/index.html +19 -19
  443. package/app/s/custom-students/index.html +19 -19
  444. package/app/s/custom-wholesale/index.html +19 -19
  445. package/app/s/custom-work/index.html +19 -19
  446. package/app/s/custom-yard/index.html +19 -19
  447. package/app/s/section-access-control/index.html +19 -19
  448. package/app/s/section-account-security/index.html +19 -19
  449. package/app/s/section-accounting/index.html +19 -19
  450. package/app/s/section-activity/index.html +19 -19
  451. package/app/s/section-agreements/index.html +19 -19
  452. package/app/s/section-analytics/index.html +19 -19
  453. package/app/s/section-assets/index.html +19 -19
  454. package/app/s/section-billing/index.html +19 -19
  455. package/app/s/section-calendar/index.html +19 -19
  456. package/app/s/section-catalog/index.html +19 -19
  457. package/app/s/section-chat.assistant/index.html +19 -19
  458. package/app/s/section-comments/index.html +19 -19
  459. package/app/s/section-fields.form-customization/index.html +19 -19
  460. package/app/s/section-ingestion/index.html +19 -19
  461. package/app/s/section-integrations/index.html +19 -19
  462. package/app/s/section-messages/index.html +19 -19
  463. package/app/s/section-more/index.html +19 -19
  464. package/app/s/section-operations/index.html +19 -19
  465. package/app/s/section-projects/index.html +19 -19
  466. package/app/s/section-purchasing/index.html +19 -19
  467. package/app/s/section-reports.materialized/index.html +19 -19
  468. package/app/s/section-reports.runtime/index.html +19 -19
  469. package/app/s/section-sales/index.html +19 -19
  470. package/app/s/section-taxonomy/index.html +19 -19
  471. package/app/s/section-team/index.html +19 -19
  472. package/app/s/section-work/index.html +19 -19
  473. package/dist/catalog/catalog.json +819 -39
  474. package/dist/smrt-version.d.ts +1 -1
  475. package/dist/smrt-version.d.ts.map +1 -1
  476. package/dist/smrt-version.js +1 -1
  477. package/package.json +56 -56
  478. package/app/_app/immutable/chunks/181pofES.js +0 -980
  479. package/app/_app/immutable/chunks/B53CwELp.js +0 -1
  480. package/app/_app/immutable/chunks/CAqvk2IB.js +0 -1
  481. package/app/_app/immutable/chunks/L9bkC5PQ.js +0 -1
  482. package/app/_app/immutable/entry/start.DZ9KcjZ1.js +0 -1
@@ -1,980 +0,0 @@
1
- import{$ as e,B as t,Ct as n,Dt as r,E as i,F as a,Ft as o,G as s,H as c,J as l,L as u,Lt as d,Ot as f,Pt as p,Q as m,R as h,T as g,U as _,W as v,X as y,Y as b,Z as x,a as S,bt as C,ct as w,d as T,ft as E,g as D,gt as O,ht as k,mt as A,o as j,pt as M,q as ee,st as N,tt as te,u as P,v as F,vt as I}from"./DG3qFFTE.js";import"./xihTtKlq.js";import{i as L,t as R}from"./YUSKx8_q.js";import{t as z}from"./DK8Blf1Y.js";b([`click`]);var ne=new Set([`$$slots`,`$$events`,`$$legacy`,`src`,`name`,`size`,`status`,`class`]),re=s(`<img class="avatar__img svelte-3d1ux4"/>`),ie=s(`<span class="avatar__initials svelte-3d1ux4" role="img"> </span>`),ae=s(`<span><span class="avatar__sr-only svelte-3d1ux4"> </span></span>`),B=s(`<span><!> <!></span>`);function V(n,a){f(a,!0);let s=S(a,`size`,3,`md`),l=S(a,`class`,3,``),u=j(a,ne),d=C(!1);w(()=>{a.src,I(d,!1)});function p(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}let h={online:`Online`,offline:`Offline`,away:`Away`,busy:`Busy`};var g=B();D(g,()=>({class:`avatar ${s()??``} ${l()??``}`,...u,"data-smrt-component":`Avatar`}),void 0,void 0,void 0,`svelte-3d1ux4`);var v=E(g),y=e=>{var t=re();N(()=>{F(t,`src`,a.src),F(t,`alt`,a.name)}),x(`error`,t,()=>{I(d,!0)}),m(t),_(e,t)},b=e=>{var t=ie(),n=A(t,!0);N(e=>{F(t,`aria-label`,a.name),c(n,e)},[()=>p(a.name)]),_(e,t)};t(v,t=>{a.src&&!e(d)?t(y):t(b,-1)});var T=k(v,2),O=e=>{var t=ae(),n=E(t),r=A(n,!0);o(t),N(()=>{i(t,1,`avatar__status ${a.status??``}`,`svelte-3d1ux4`),c(r,h[a.status])}),_(e,t)};t(T,e=>{a.status&&e(O)}),o(g),_(n,g),r()}var oe=new Set([`$$slots`,`$$events`,`$$legacy`,`variant`,`size`,`children`]),se=s(`<span><!></span>`);function ce(e,t){let n=S(t,`variant`,3,`default`),r=S(t,`size`,3,`md`),i=j(t,oe);var s=se();D(s,()=>({class:`smrt-badge__root smrt-badge__${n()??``} smrt-badge__${r()??``}`,...i,"data-smrt-component":`Badge`}),void 0,void 0,void 0,`svelte-p89d2c`);var c=E(s);a(c,()=>t.children??d),o(s),_(e,s)}var le=s(`<button type="button" class="smrt-chip__body svelte-ifqvz" data-smrt-part="body"><!></button>`),ue=s(`<span class="smrt-chip__body svelte-ifqvz" data-smrt-part="body"><!></span>`),de=s(`<button type="button" class="smrt-chip__close svelte-ifqvz" data-smrt-part="close"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button>`),fe=s(`<span data-smrt-component="Chip"><!> <!></span>`);function pe(e,n){f(n,!0);let s=S(n,`selectable`,3,!1),u=S(n,`selected`,3,!1),d=S(n,`closeable`,3,!1),p=S(n,`disabled`,3,!1),m=S(n,`size`,3,`md`);var h=fe();let g;var b=E(h),x=e=>{var r=le(),i=E(r),s=e=>{var t=v(),r=M(t);a(r,()=>n.children),_(e,t)},d=e=>{var t=l();N(()=>c(t,n.label)),_(e,t)};t(i,e=>{n.children?e(s):e(d,-1)}),o(r),N(()=>{F(r,`aria-pressed`,u()),r.disabled=p()}),y(`click`,r,()=>n.onselect?.()),_(e,r)},C=e=>{var r=ue(),i=E(r),s=e=>{var t=v(),r=M(t);a(r,()=>n.children),_(e,t)},u=e=>{var t=l();N(()=>c(t,n.label)),_(e,t)};t(i,e=>{n.children?e(s):e(u,-1)}),o(r),_(e,r)};t(b,e=>{s()?e(x):e(C,-1)});var w=k(b,2),T=e=>{var t=de();N(()=>{F(t,`aria-label`,n.label?`Remove ${n.label}`:`Remove`),t.disabled=p()}),y(`click`,t,()=>n.onclose?.()),_(e,t)};t(w,e=>{d()&&e(T)}),o(h),N(()=>g=i(h,1,`smrt-chip__root smrt-chip__${m()??``}`,`svelte-ifqvz`,g,{"smrt-chip__selected":u(),"smrt-chip__disabled":p(),"smrt-chip__selectable":s(),"smrt-chip__closeable":d()})),_(e,h),r()}b([`click`]);var me=s(`<details data-smrt-component="Disclosure"><summary class="svelte-ma3p8w"><span> </span><span class="chevron svelte-ma3p8w" aria-hidden="true">⌄</span></summary> <div class="content svelte-ma3p8w"><!></div></details>`);function he(e,n){f(n,!0);let s=S(n,`open`,15,!1),l=S(n,`disabled`,3,!1),u=S(n,`class`,3,``);function d(e){let t=e.currentTarget.open;l()&&t?s(!1):(s(t),n.onopenchange?.(t))}var m=me(),h=E(m),g=E(h),b=A(g,!0);p(),o(h);var C=k(h,2),w=E(C),T=e=>{var t=v(),r=M(t);a(r,()=>n.children),_(e,t)};t(w,e=>{n.children&&e(T)}),o(C),o(m),N(()=>{i(m,1,`disclosure ${u()??``}`,`svelte-ma3p8w`),F(h,`aria-disabled`,l()),c(b,n.title)}),x(`toggle`,m,d),y(`click`,h,e=>l()&&e.preventDefault()),P(`open`,`toggle`,m,s,s),_(e,m),r()}b([`click`]);var ge=s(`<span class="dropdown__item-icon svelte-1uzn6a0" aria-hidden="true"><!></span>`),_e=s(`<button type="button" role="menuitem" class="dropdown__item svelte-1uzn6a0"><!> <span class="dropdown__item-label"> </span></button>`),ve=s(`<div role="menu"></div>`),ye=s(`<span class="dropdown svelte-1uzn6a0" data-smrt-component="Dropdown"><button type="button" aria-haspopup="menu"><!></button> <!></span>`);function be(s,d){let p=ee();f(d,!0);let m=S(d,`variant`,3,`button`),h=S(d,`placement`,3,`bottom-start`),g=S(d,`disabled`,3,!1),b=`smrt-menu-${p}`;w(()=>{m()===`icon`&&!d.triggerLabel&&!d.label&&console.warn(`[Dropdown] variant="icon" needs triggerLabel (or label): the trigger button has no accessible name.`)});let x=C(!1),D=C(null),j=C(null),P=O([]),L=n(()=>d.items.map((e,t)=>e.disabled?-1:t).filter(e=>e>=0));async function R(t=!1){I(x,!0),await te();let n=t?e(L)[e(L).length-1]:e(L)[0];n!=null&&P[n]?.focus()}function z(t=!0){I(x,!1),t&&e(j)?.focus()}function ne(e){e.disabled||(e.onselect?.(),d.onselect?.(e.id),z())}function re(e){e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),R()):e.key===`ArrowUp`&&(e.preventDefault(),R(!0))}function ie(t){let n=e(L);if(n.length===0)return;let r=P.indexOf(document.activeElement),i=n[(n.indexOf(r)+t+n.length)%n.length];P[i]?.focus()}function ae(t){switch(t.key){case`ArrowDown`:t.preventDefault(),ie(1);break;case`ArrowUp`:t.preventDefault(),ie(-1);break;case`Home`:t.preventDefault(),P[e(L)[0]]?.focus();break;case`End`:t.preventDefault(),P[e(L)[e(L).length-1]]?.focus();break;case`Escape`:t.preventDefault(),z();break;case`Tab`:z(!1)}}w(()=>{if(!e(x))return;let t=t=>{e(D)&&!e(D).contains(t.target)&&z(!1)};return document.addEventListener(`click`,t,!0),()=>document.removeEventListener(`click`,t,!0)});var B=ye(),V=E(B);let oe;var se=E(V),ce=e=>{var t=v(),n=M(t);a(n,()=>d.trigger),_(e,t)},le=e=>{var t=l();N(()=>c(t,d.label)),_(e,t)};t(se,e=>{d.trigger?e(ce):e(le,-1)}),o(V),T(V,e=>I(j,e),()=>e(j));var ue=k(V,2),de=n=>{var r=ve();F(r,`tabindex`,-1),u(r,23,()=>d.items,e=>e.id,(n,r,i)=>{var s=_e();F(s,`tabindex`,-1);var l=E(s),u=t=>{var n=ge(),i=E(n);a(i,()=>e(r).icon),o(n),_(t,n)};t(l,t=>{e(r).icon&&t(u)});var d=k(l,2),f=A(d,!0);o(s),T(s,(e,t)=>P[t]=e,e=>P?.[e],()=>[e(i)]),N(()=>{s.disabled=e(r).disabled,c(f,e(r).label)}),y(`click`,s,()=>ne(e(r))),_(n,s)}),o(r),N(()=>{F(r,`id`,b),i(r,1,`dropdown__menu dropdown__menu--${h()??``}`,`svelte-1uzn6a0`)}),y(`keydown`,r,ae),_(n,r)};t(ue,t=>{e(x)&&t(de)}),o(B),T(B,e=>I(D,e),()=>e(D)),N(()=>{oe=i(V,1,`dropdown__trigger svelte-1uzn6a0`,null,oe,{"dropdown__trigger--icon":m()===`icon`}),F(V,`aria-label`,d.triggerLabel??(m()===`icon`?d.label:void 0)),F(V,`aria-expanded`,e(x)),F(V,`aria-controls`,e(x)?b:void 0),V.disabled=g()}),y(`click`,V,()=>e(x)?z(!1):R()),y(`keydown`,V,re),_(s,B),r()}b([`click`,`keydown`]),b([`focusin`,`focusout`,`keydown`]);var xe=s(`<button class="page-link nav-link first svelte-te7vyh" type="button">&laquo; First</button>`),Se=s(`<a class="page-link nav-link first svelte-te7vyh">&laquo; First</a>`),Ce=s(`<span class="page-link nav-link disabled first svelte-te7vyh" aria-hidden="true">&laquo; First</span>`),we=s(`<button class="page-link nav-link svelte-te7vyh" type="button">&larr; Prev</button>`),Te=s(`<a class="page-link nav-link svelte-te7vyh">&larr; Prev</a>`),Ee=s(`<span class="page-link nav-link disabled svelte-te7vyh" aria-hidden="true">&larr; Prev</span>`),De=s(`<li class="page-numbers__item svelte-te7vyh"><span class="ellipsis svelte-te7vyh" aria-hidden="true">&hellip;</span></li>`),Oe=s(`<li class="page-numbers__item svelte-te7vyh"><span class="page-link current svelte-te7vyh" aria-current="page"> </span></li>`),ke=s(`<li class="page-numbers__item svelte-te7vyh"><button class="page-link svelte-te7vyh" type="button"> </button></li>`),Ae=s(`<li class="page-numbers__item svelte-te7vyh"><a class="page-link svelte-te7vyh"> </a></li>`),je=s(`<button class="page-link nav-link svelte-te7vyh" type="button">Next &rarr;</button>`),Me=s(`<a class="page-link nav-link svelte-te7vyh">Next &rarr;</a>`),Ne=s(`<span class="page-link nav-link disabled svelte-te7vyh" aria-hidden="true">Next &rarr;</span>`),Pe=s(`<button class="page-link nav-link last svelte-te7vyh" type="button">Last &raquo;</button>`),Fe=s(`<a class="page-link nav-link last svelte-te7vyh">Last &raquo;</a>`),Ie=s(`<span class="page-link nav-link disabled last svelte-te7vyh" aria-hidden="true">Last &raquo;</span>`),Le=s(`<nav class="pagination svelte-te7vyh" data-smrt-component="Pagination"><!> <!> <ul class="page-numbers svelte-te7vyh"></ul> <!> <!></nav>`);function Re(i,a){f(a,!0);let{t:s}=R(),l=S(a,`baseUrl`,3,`/articles`),d=S(a,`aria-label`,3,`Pagination`),p=S(a,`showFirstLast`,3,!0),m=S(a,`maxVisible`,3,5);function g(e){return e===1?l()||`/`:`${l()}/page/${e}`}function b(){let e=[];if(a.totalPages<=m()+2)for(let t=1;t<=a.totalPages;t++)e.push(t);else{e.push(1);let t=Math.max(2,a.currentPage-1),n=Math.min(a.totalPages-1,a.currentPage+1);a.currentPage<=3&&(n=Math.min(a.totalPages-1,m()-1)),a.currentPage>=a.totalPages-2&&(t=Math.max(2,a.totalPages-m()+2)),t>2&&e.push(`ellipsis`);for(let r=t;r<=n;r++)e.push(r);n<a.totalPages-1&&e.push(`ellipsis`),e.push(a.totalPages)}return e}let x=n(b),C=n(()=>a.currentPage>1),w=n(()=>a.currentPage<a.totalPages),T=n(()=>a.currentPage===1),D=n(()=>a.currentPage===a.totalPages);var O=v(),j=M(O),ee=n=>{var r=Le(),i=E(r),l=n=>{var r=v(),i=M(r),o=t=>{var n=xe();N(t=>{n.disabled=e(T),F(n,`aria-label`,t)},[()=>s(L[`ui.pagination.first_page`])]),y(`click`,n,()=>a.onPageChange(1)),_(t,n)},c=e=>{var t=Se();N((e,n)=>{F(t,`href`,e),F(t,`aria-label`,n)},[()=>g(1),()=>s(L[`ui.pagination.first_page`])]),_(e,t)},l=e=>{var t=Ce();_(e,t)};t(i,t=>{a.onPageChange?t(o):e(T)?t(l,-1):t(c,1)}),_(n,r)};t(i,e=>{p()&&e(l)});var f=k(i,2),m=t=>{var n=we();N(t=>{n.disabled=!e(C),F(n,`aria-label`,t)},[()=>s(L[`ui.pagination.previous_page`])]),y(`click`,n,()=>a.onPageChange(a.currentPage-1)),_(t,n)},b=e=>{var t=Te();N((e,n)=>{F(t,`href`,e),F(t,`aria-label`,n)},[()=>g(a.currentPage-1),()=>s(L[`ui.pagination.previous_page`])]),_(e,t)},S=e=>{var t=Ee();_(e,t)};t(f,t=>{a.onPageChange?t(m):e(C)?t(b,1):t(S,-1)});var O=k(f,2);u(O,21,()=>e(x),h,(n,r)=>{var i=v(),l=M(i),u=e=>{var t=De();_(e,t)},d=t=>{var n=Oe(),i=E(n),a=A(i,!0);o(n),N(t=>{F(i,`aria-label`,t),c(a,e(r))},[()=>s(L[`ui.pagination.page_current`],{page:e(r)})]),_(t,n)},f=t=>{var n=ke(),i=E(n),l=A(i,!0);o(n),N(t=>{F(i,`aria-label`,t),c(l,e(r))},[()=>s(L[`ui.pagination.go_to_page`],{page:e(r)})]),y(`click`,i,()=>a.onPageChange(e(r))),_(t,n)},p=t=>{var n=Ae(),i=E(n),a=A(i,!0);o(n),N((t,n)=>{F(i,`href`,t),F(i,`aria-label`,n),c(a,e(r))},[()=>g(e(r)),()=>s(L[`ui.pagination.go_to_page`],{page:e(r)})]),_(t,n)};t(l,t=>{e(r)===`ellipsis`?t(u):e(r)===a.currentPage?t(d,1):a.onPageChange?t(f,2):t(p,-1)}),_(n,i)}),o(O);var j=k(O,2),ee=t=>{var n=je();N(t=>{n.disabled=!e(w),F(n,`aria-label`,t)},[()=>s(L[`ui.pagination.next_page`])]),y(`click`,n,()=>a.onPageChange(a.currentPage+1)),_(t,n)},te=e=>{var t=Me();N((e,n)=>{F(t,`href`,e),F(t,`aria-label`,n)},[()=>g(a.currentPage+1),()=>s(L[`ui.pagination.next_page`])]),_(e,t)},P=e=>{var t=Ne();_(e,t)};t(j,t=>{a.onPageChange?t(ee):e(w)?t(te,1):t(P,-1)});var I=k(j,2),R=n=>{var r=v(),i=M(r),o=t=>{var n=Pe();N(t=>{n.disabled=e(D),F(n,`aria-label`,t)},[()=>s(L[`ui.pagination.last_page`],{totalPages:a.totalPages})]),y(`click`,n,()=>a.onPageChange(a.totalPages)),_(t,n)},c=e=>{var t=Fe();N((e,n)=>{F(t,`href`,e),F(t,`aria-label`,n)},[()=>g(a.totalPages),()=>s(L[`ui.pagination.last_page`],{totalPages:a.totalPages})]),_(e,t)},l=e=>{var t=Ie();_(e,t)};t(i,t=>{a.onPageChange?t(o):e(D)?t(l,-1):t(c,1)}),_(n,r)};t(I,e=>{p()&&e(R)}),o(r),N(()=>{F(r,`data-density`,a.density),F(r,`aria-label`,d())}),_(n,r)};t(j,e=>{a.totalPages>1&&e(ee)}),_(i,O),r()}b([`click`]);var ze=s(`<div role="dialog" tabindex="-1"><!></div>`),Be=s(`<span data-smrt-component="Popover"><button type="button" aria-haspopup="dialog"><!></button> <!></span>`);function Ve(n,s){let u=ee();f(s,!0);let d=S(s,`variant`,3,`button`),p=S(s,`open`,15,!1),m=S(s,`disabled`,3,!1),h=S(s,`placement`,3,`bottom-start`),g=S(s,`closeOnOutsideClick`,3,!0),b=S(s,`class`,3,``),x=`popover-${u}`,D=C(null),O=C(null),A=C(null);async function j(t,n=!1){m()||(p(t),s.onopenchange?.(t),t&&n&&(await te(),e(A)?.focus()))}function P(t){t.key===`Escape`&&p()&&(t.preventDefault(),j(!1),e(O)?.focus())}w(()=>{if(!p()||!g())return;let t=t=>{e(D)&&!e(D).contains(t.target)&&j(!1)};return document.addEventListener(`pointerdown`,t,!0),()=>document.removeEventListener(`pointerdown`,t,!0)});var L=Be(),R=E(L);let z;var ne=E(R),re=e=>{var t=v(),n=M(t);a(n,()=>s.trigger),_(e,t)},ie=e=>{var t=l();N(()=>c(t,s.label)),_(e,t)};t(ne,e=>{s.trigger?e(re):e(ie,-1)}),o(R),T(R,e=>I(O,e),()=>e(O));var ae=k(R,2),B=n=>{var r=ze(),c=E(r),l=e=>{var t=v(),n=M(t);a(n,()=>s.children),_(e,t)};t(c,e=>{s.children&&e(l)}),o(r),T(r,e=>I(A,e),()=>e(A)),N(()=>{F(r,`id`,x),i(r,1,`popover__panel popover__panel--${h()??``}`,`svelte-1ybzddi`),F(r,`aria-label`,s.label)}),y(`keydown`,r,P),_(n,r)};t(ae,e=>{p()&&e(B)}),o(L),T(L,e=>I(D,e),()=>e(D)),N(()=>{i(L,1,`popover ${b()??``}`,`svelte-1ybzddi`),z=i(R,1,`popover__trigger svelte-1ybzddi`,null,z,{"popover__trigger--icon":d()===`icon`}),F(R,`aria-label`,s.triggerLabel??(d()===`icon`?s.label:void 0)),F(R,`aria-expanded`,p()),F(R,`aria-controls`,p()?x:void 0),R.disabled=m()}),y(`click`,R,()=>j(!p(),!p())),y(`keydown`,R,P),_(n,L),r()}b([`click`,`keydown`]);var He=s(`<span class="skeleton skeleton--text svelte-1odc6oe" aria-hidden="true"></span>`),Ue=s(`<span aria-hidden="true"></span>`),We=s(`<span class="skeleton-wrap svelte-1odc6oe" role="status" data-smrt-component="Skeleton"><!></span>`);function Ge(r,a){let s=S(a,`variant`,3,`text`),c=S(a,`lines`,3,1),l=S(a,`label`,3,`Loading…`),d=n(()=>s()===`text`?Array.from({length:Math.max(1,c())},(e,t)=>t):[0]);var f=We(),p=E(f),m=t=>{var n=v(),r=M(n);u(r,16,()=>e(d),e=>e,(e,t)=>{var n=He();let r;N(()=>r=g(n,``,r,{width:a.width,height:a.height})),_(e,n)}),_(t,n)},h=e=>{var t=Ue();let n;N(()=>{i(t,1,`skeleton skeleton--${s()??``}`,`svelte-1odc6oe`),n=g(t,``,n,{width:a.width,height:a.height})}),_(e,t)};t(p,e=>{s()===`text`?e(m):e(h,-1)}),o(f),N(()=>F(f,`aria-label`,l())),_(r,f)}b([`click`,`keydown`]);var Ke=`@happyvertical/smrt-inventory`,H=`@happyvertical/smrt-products`,qe={[`${Ke}:StockLevel`]:{skuId:`${H}:Sku`,locationId:`${Ke}:InventoryLocation`},[`${H}:Sku`]:{productId:`${H}:Product`,parentSkuId:`${H}:Sku`},[`${H}:ProductVariant`]:{productId:`${H}:Product`}},Je=`@happyvertical/smrt-commerce`,Ye={[`${Je}:Contract`]:{terms:`textarea`,notes:`textarea`,currency:`currency`},[`${Je}:Customer`]:{notes:`textarea`},[`${Je}:Vendor`]:{notes:`textarea`,currency:`currency`,defaultContactEmail:`email`,defaultContactPhone:`phone`},"@happyvertical/smrt-profiles:Profile":{email:`email`,description:`textarea`},"@happyvertical/smrt-products:Product":{description:`textarea`}},Xe={[`${Je}:Customer`]:[`defaultShippingAddress`,`defaultBillingAddress`]};function Ze(e,t){let n=[],r=e;for(;r&&!n.includes(r.id);)n.push(r.id),r=r.extends?t.get(r.extends):void 0;return n}function Qe(e,t,n){for(let r of t){let t=e[r]?.[n];if(t!==void 0)return t}}function $e(e,t,n){for(let r of t.slice(1)){let t=n.get(r)?.fields.find(t=>t.name===e.name);if(t?.enum&&t.type===e.type)return t}}function et(e,t,n){let r=e;if(!e.enum){let i=$e(e,t,n);i?.enum&&(r={...r,enum:i.enum},!r.description&&i.description&&(r={...r,description:i.description}))}let i=e.ui?.widget?void 0:Qe(Ye,t,e.name);if(i&&(r={...r,ui:{...r.ui,widget:i}}),!e.related){let n=Qe(qe,t,e.name);n&&(r={...r,type:`foreignKey`,related:n})}return r}function tt(e){let t=new Map(e.packages.flatMap(e=>e.models.map(e=>[e.id,e]))),n=e.packages.map(e=>({...e,models:e.models.map(e=>{let n=Ze(e,t);return{...e,fields:e.fields.map(e=>et(e,n,t))}})}));return{...e,packages:n}}var nt=tt({schema:1,registry:`https://npm.happyvertical.com`,packages:[{id:`ads`,packageName:`@happyvertical/smrt-ads`,version:`0.57.9`,description:`Advertising delivery and tracking models for SMRT framework`,models:[{id:`@happyvertical/smrt-ads:AdDeliveryTier`,name:`AdDeliveryTier`,collection:`addeliverytiers`,display:{label:`name`},fields:[{name:`name`,type:`text`,required:!1,default:``},{name:`priority`,type:`integer`,required:!1,default:0},{name:`pricingModel`,type:`text`,required:!1,enum:[`fixed`,`cpm`,`cpc`,`cpa`]},{name:`description`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/addeliverytiers`},{method:`GET`,path:`/addeliverytiers/[id]`},{method:`POST`,path:`/addeliverytiers`},{method:`PATCH`,path:`/addeliverytiers/[id]`}],mcp:[{operation:`get`,name:`addeliverytier_get`},{operation:`list`,name:`addeliverytier_list`}],cli:[{operation:`create`,name:`addeliverytier_create`},{operation:`delete`,name:`addeliverytier_delete`},{operation:`get`,name:`addeliverytier_get`},{operation:`isFixedPricing`,name:`addeliverytier_isFixedPricing`},{operation:`isHigherPriorityThan`,name:`addeliverytier_isHigherPriorityThan`},{operation:`isPerformanceBased`,name:`addeliverytier_isPerformanceBased`},{operation:`list`,name:`addeliverytier_list`},{operation:`update`,name:`addeliverytier_update`},{operation:`findByPricingModel`,name:`addeliverytiercollection_findByPricingModel`},{operation:`findByPriority`,name:`addeliverytiercollection_findByPriority`},{operation:`findCPM`,name:`addeliverytiercollection_findCPM`},{operation:`findFixedPricing`,name:`addeliverytiercollection_findFixedPricing`},{operation:`findPerformanceBased`,name:`addeliverytiercollection_findPerformanceBased`},{operation:`getHighestPriority`,name:`addeliverytiercollection_getHighestPriority`}],methods:[{name:`findByPricingModel`,async:!0,parameters:[`pricingModel: PricingModel`],returnType:`Promise<AdDeliveryTier[]>`,aiCallable:!1},{name:`findByPriority`,async:!0,parameters:[],returnType:`Promise<AdDeliveryTier[]>`,aiCallable:!1},{name:`findCPM`,async:!0,parameters:[],returnType:`Promise<AdDeliveryTier[]>`,aiCallable:!1},{name:`findFixedPricing`,async:!0,parameters:[],returnType:`Promise<AdDeliveryTier[]>`,aiCallable:!1},{name:`findPerformanceBased`,async:!0,parameters:[],returnType:`Promise<AdDeliveryTier[]>`,aiCallable:!1},{name:`getHighestPriority`,async:!0,parameters:[],returnType:`Promise<AdDeliveryTier | null>`,aiCallable:!1},{name:`isFixedPricing`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isHigherPriorityThan`,async:!1,parameters:[`other: AdDeliveryTier`],returnType:`boolean`,aiCallable:!1},{name:`isPerformanceBased`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-ads:AdEvent`,name:`AdEvent`,collection:`adevents`,description:`AdEvent tracks ad impressions, clicks, and conversions. Events are immutable (append-only, no update/delete).`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`variationId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-ads:AdVariation`},{name:`zoneId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-properties:Zone`},{name:`siteId`,type:`text`,required:!1,default:``},{name:`eventType`,type:`text`,required:!1,enum:[`impression`,`click`,`conversion`]},{name:`timestamp`,type:`datetime`,required:!1},{name:`metadata`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/adevents`},{method:`POST`,path:`/adevents`}],mcp:[{operation:`create`,name:`adevent_create`}],cli:[],methods:[{name:`countByType`,async:!0,parameters:[`variationId: string`,`eventType: AdEventType`],returnType:`Promise<number>`,aiCallable:!1},{name:`countClicks`,async:!0,parameters:[`variationId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`countConversions`,async:!0,parameters:[`variationId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`countImpressions`,async:!0,parameters:[`variationId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`findByDateRange`,async:!0,parameters:[`start: Date`,`end: Date`],returnType:`Promise<AdEvent[]>`,aiCallable:!1},{name:`findBySite`,async:!0,parameters:[`siteId: string`],returnType:`Promise<AdEvent[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<AdEvent[]>`,aiCallable:!1},{name:`findByType`,async:!0,parameters:[`eventType: AdEventType`],returnType:`Promise<AdEvent[]>`,aiCallable:!1},{name:`findByVariation`,async:!0,parameters:[`variationId: string`],returnType:`Promise<AdEvent[]>`,aiCallable:!1},{name:`findByZone`,async:!0,parameters:[`zoneId: string`],returnType:`Promise<AdEvent[]>`,aiCallable:!1},{name:`findClicks`,async:!0,parameters:[],returnType:`Promise<AdEvent[]>`,aiCallable:!1},{name:`findConversions`,async:!0,parameters:[],returnType:`Promise<AdEvent[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<AdEvent[]>`,aiCallable:!1},{name:`findImpressions`,async:!0,parameters:[],returnType:`Promise<AdEvent[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<AdEvent[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getVariationStats`,async:!0,parameters:[`variationId: string`],returnType:`Promise<object>`,aiCallable:!1},{name:`isClick`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isConversion`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isImpression`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-ads:AdVariation`,`@happyvertical/smrt-properties:Zone`],exposed:!0},{id:`@happyvertical/smrt-ads:AdFormat`,name:`AdFormat`,collection:`adformats`,display:{label:`name`},fields:[{name:`name`,type:`text`,required:!1,default:``},{name:`width`,type:`integer`,required:!1,default:0},{name:`height`,type:`integer`,required:!1,default:0},{name:`formatType`,type:`text`,required:!1,enum:[`banner`,`native`,`video`]},{name:`description`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/adformats`},{method:`GET`,path:`/adformats/[id]`},{method:`POST`,path:`/adformats`},{method:`PATCH`,path:`/adformats/[id]`}],mcp:[{operation:`get`,name:`adformat_get`},{operation:`list`,name:`adformat_list`}],cli:[{operation:`create`,name:`adformat_create`},{operation:`delete`,name:`adformat_delete`},{operation:`get`,name:`adformat_get`},{operation:`getDimensions`,name:`adformat_getDimensions`},{operation:`list`,name:`adformat_list`},{operation:`matchesDimensions`,name:`adformat_matchesDimensions`},{operation:`update`,name:`adformat_update`},{operation:`findBanners`,name:`adformatcollection_findBanners`},{operation:`findByDimensions`,name:`adformatcollection_findByDimensions`},{operation:`findByType`,name:`adformatcollection_findByType`},{operation:`findNative`,name:`adformatcollection_findNative`},{operation:`findVideo`,name:`adformatcollection_findVideo`}],methods:[{name:`findBanners`,async:!0,parameters:[],returnType:`Promise<AdFormat[]>`,aiCallable:!1},{name:`findByDimensions`,async:!0,parameters:[`width: number`,`height: number`],returnType:`Promise<AdFormat | null>`,aiCallable:!1},{name:`findByType`,async:!0,parameters:[`formatType: AdFormatType`],returnType:`Promise<AdFormat[]>`,aiCallable:!1},{name:`findNative`,async:!0,parameters:[],returnType:`Promise<AdFormat[]>`,aiCallable:!1},{name:`findVideo`,async:!0,parameters:[],returnType:`Promise<AdFormat[]>`,aiCallable:!1},{name:`getDimensions`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`matchesDimensions`,async:!1,parameters:[`width: number`,`height: number`],returnType:`boolean`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-ads:AdGroup`,name:`AdGroup`,collection:`adgroups`,description:`AdGroup organizes ad creatives with targeting and budget controls.`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-commerce:SalesContract`},{name:`tierId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-ads:AdDeliveryTier`},{name:`name`,type:`text`,required:!1,default:``},{name:`verticalSlug`,type:`text`,required:!1,default:``},{name:`targeting`,type:`text`,required:!1,default:``},{name:`zoneIds`,type:`text`,required:!1,default:``},{name:`startDate`,type:`datetime`,required:!1},{name:`endDate`,type:`datetime`,required:!1},{name:`dailyBudget`,type:`decimal`,required:!1,default:0},{name:`totalBudget`,type:`decimal`,required:!1,default:0},{name:`status`,type:`text`,required:!1,enum:[`draft`,`active`,`paused`,`completed`]}],rest:[{method:`GET`,path:`/adgroups`},{method:`GET`,path:`/adgroups/[id]`},{method:`POST`,path:`/adgroups`},{method:`PATCH`,path:`/adgroups/[id]`}],mcp:[{operation:`create`,name:`adgroup_create`},{operation:`get`,name:`adgroup_get`},{operation:`list`,name:`adgroup_list`}],cli:[{operation:`addZoneId`,name:`adgroup_addZoneId`},{operation:`create`,name:`adgroup_create`},{operation:`delete`,name:`adgroup_delete`},{operation:`get`,name:`adgroup_get`},{operation:`getTargeting`,name:`adgroup_getTargeting`},{operation:`getZoneIds`,name:`adgroup_getZoneIds`},{operation:`hasEnded`,name:`adgroup_hasEnded`},{operation:`hasStarted`,name:`adgroup_hasStarted`},{operation:`hasZoneId`,name:`adgroup_hasZoneId`},{operation:`isActive`,name:`adgroup_isActive`},{operation:`isCompleted`,name:`adgroup_isCompleted`},{operation:`isDraft`,name:`adgroup_isDraft`},{operation:`isPaused`,name:`adgroup_isPaused`},{operation:`list`,name:`adgroup_list`},{operation:`removeZoneId`,name:`adgroup_removeZoneId`},{operation:`setTargeting`,name:`adgroup_setTargeting`},{operation:`setZoneIds`,name:`adgroup_setZoneIds`},{operation:`update`,name:`adgroup_update`},{operation:`findActive`,name:`adgroupcollection_findActive`},{operation:`findByContract`,name:`adgroupcollection_findByContract`},{operation:`findByStatus`,name:`adgroupcollection_findByStatus`},{operation:`findByTenant`,name:`adgroupcollection_findByTenant`},{operation:`findByTier`,name:`adgroupcollection_findByTier`},{operation:`findByVertical`,name:`adgroupcollection_findByVertical`},{operation:`findByZone`,name:`adgroupcollection_findByZone`},{operation:`findCompleted`,name:`adgroupcollection_findCompleted`},{operation:`findDrafts`,name:`adgroupcollection_findDrafts`},{operation:`findEligibleForZone`,name:`adgroupcollection_findEligibleForZone`},{operation:`findGlobal`,name:`adgroupcollection_findGlobal`},{operation:`findPaused`,name:`adgroupcollection_findPaused`},{operation:`findWithGlobals`,name:`adgroupcollection_findWithGlobals`}],methods:[{name:`addZoneId`,async:!1,parameters:[`zoneId: string`],returnType:`void`,aiCallable:!1},{name:`findActive`,async:!0,parameters:[],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`findByContract`,async:!0,parameters:[`contractId: string`],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: AdGroupStatus`],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`findByTier`,async:!0,parameters:[`tierId: string`],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`findByVertical`,async:!0,parameters:[`verticalSlug: string`],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`findByZone`,async:!0,parameters:[`zoneId: string`],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`findCompleted`,async:!0,parameters:[],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`findDrafts`,async:!0,parameters:[],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`findEligibleForZone`,async:!0,parameters:[`zoneId: string`],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`findPaused`,async:!0,parameters:[],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<AdGroup[]>`,aiCallable:!1},{name:`getTargeting`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getZoneIds`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`hasEnded`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`hasStarted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`hasZoneId`,async:!1,parameters:[`zoneId: string`],returnType:`boolean`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPaused`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`removeZoneId`,async:!1,parameters:[`zoneId: string`],returnType:`void`,aiCallable:!1},{name:`setTargeting`,async:!1,parameters:[`rules: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setZoneIds`,async:!1,parameters:[`ids: string[]`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-ads:AdDeliveryTier`,`@happyvertical/smrt-commerce:SalesContract`],exposed:!0},{id:`@happyvertical/smrt-ads:AdVariation`,name:`AdVariation`,collection:`advariations`,description:`AdVariation represents a creative asset within an ad group. Supports A/B testing via weighted selection.`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`groupId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-ads:AdGroup`},{name:`formatId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-ads:AdFormat`},{name:`assetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`name`,type:`text`,required:!1,default:``},{name:`clickUrl`,type:`text`,required:!1,default:``},{name:`altText`,type:`text`,required:!1,default:``},{name:`weight`,type:`integer`,required:!1,default:1},{name:`status`,type:`text`,required:!1,enum:[`draft`,`active`,`paused`]},{name:`impressions`,type:`integer`,required:!1,default:0},{name:`clicks`,type:`integer`,required:!1,default:0}],rest:[{method:`GET`,path:`/advariations`},{method:`GET`,path:`/advariations/[id]`},{method:`POST`,path:`/advariations`},{method:`PATCH`,path:`/advariations/[id]`}],mcp:[{operation:`create`,name:`advariation_create`},{operation:`get`,name:`advariation_get`},{operation:`list`,name:`advariation_list`}],cli:[{operation:`create`,name:`advariation_create`},{operation:`delete`,name:`advariation_delete`},{operation:`get`,name:`advariation_get`},{operation:`getCTR`,name:`advariation_getCTR`},{operation:`isActive`,name:`advariation_isActive`},{operation:`isDraft`,name:`advariation_isDraft`},{operation:`isPaused`,name:`advariation_isPaused`},{operation:`list`,name:`advariation_list`},{operation:`recordClick`,name:`advariation_recordClick`},{operation:`recordImpression`,name:`advariation_recordImpression`},{operation:`update`,name:`advariation_update`},{operation:`findActive`,name:`advariationcollection_findActive`},{operation:`findActiveByGroup`,name:`advariationcollection_findActiveByGroup`},{operation:`findByFormat`,name:`advariationcollection_findByFormat`},{operation:`findByGroup`,name:`advariationcollection_findByGroup`},{operation:`findByStatus`,name:`advariationcollection_findByStatus`},{operation:`findByTenant`,name:`advariationcollection_findByTenant`},{operation:`findDrafts`,name:`advariationcollection_findDrafts`},{operation:`findGlobal`,name:`advariationcollection_findGlobal`},{operation:`findPaused`,name:`advariationcollection_findPaused`},{operation:`findTopPerformers`,name:`advariationcollection_findTopPerformers`},{operation:`findWithGlobals`,name:`advariationcollection_findWithGlobals`},{operation:`selectByWeight`,name:`advariationcollection_selectByWeight`}],methods:[{name:`findActive`,async:!0,parameters:[],returnType:`Promise<AdVariation[]>`,aiCallable:!1},{name:`findActiveByGroup`,async:!0,parameters:[`groupId: string`],returnType:`Promise<AdVariation[]>`,aiCallable:!1},{name:`findByFormat`,async:!0,parameters:[`formatId: string`],returnType:`Promise<AdVariation[]>`,aiCallable:!1},{name:`findByGroup`,async:!0,parameters:[`groupId: string`],returnType:`Promise<AdVariation[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: AdVariationStatus`],returnType:`Promise<AdVariation[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<AdVariation[]>`,aiCallable:!1},{name:`findDrafts`,async:!0,parameters:[],returnType:`Promise<AdVariation[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<AdVariation[]>`,aiCallable:!1},{name:`findPaused`,async:!0,parameters:[],returnType:`Promise<AdVariation[]>`,aiCallable:!1},{name:`findTopPerformers`,async:!0,parameters:[`limit?: number`],returnType:`Promise<AdVariation[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<AdVariation[]>`,aiCallable:!1},{name:`getCTR`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPaused`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`recordClick`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`recordImpression`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`selectByWeight`,async:!0,parameters:[`groupId: string`],returnType:`Promise<AdVariation | null>`,aiCallable:!1}],references:[`@happyvertical/smrt-ads:AdFormat`,`@happyvertical/smrt-ads:AdGroup`,`@happyvertical/smrt-assets:Asset`],exposed:!0}],dependencies:[`assets`,`commerce`,`properties`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`],via:[`@happyvertical/smrt-tenancy`]}},{id:`analytics`,packageName:`@happyvertical/smrt-analytics`,version:`0.57.9`,description:`Analytics integration models for SMRT framework`,models:[{id:`@happyvertical/smrt-analytics:AnalyticsDataStream`,name:`AnalyticsDataStream`,collection:`analyticsdatastreams`,description:`AnalyticsDataStream represents a data stream (web, iOS, Android) for an analytics property.`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`propertyId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-analytics:AnalyticsProperty`},{name:`displayName`,type:`text`,required:!1,default:``},{name:`streamType`,type:`text`,required:!1,enum:[`WEB_DATA_STREAM`,`ANDROID_APP_DATA_STREAM`,`IOS_APP_DATA_STREAM`]},{name:`externalId`,type:`text`,required:!1,default:``},{name:`measurementId`,type:`text`,required:!1,default:``},{name:`firebaseAppId`,type:`text`,required:!1,default:``},{name:`defaultUri`,type:`text`,required:!1,default:``},{name:`bundleId`,type:`text`,required:!1,default:``},{name:`packageName`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,enum:[`active`,`inactive`]},{name:`enhancedMeasurement`,type:`boolean`,required:!1,default:!0}],rest:[{method:`GET`,path:`/analyticsdatastreams`},{method:`GET`,path:`/analyticsdatastreams/[id]`},{method:`POST`,path:`/analyticsdatastreams`},{method:`PATCH`,path:`/analyticsdatastreams/[id]`}],mcp:[{operation:`get`,name:`analyticsdatastream_get`},{operation:`list`,name:`analyticsdatastream_list`}],cli:[{operation:`create`,name:`analyticsdatastream_create`},{operation:`delete`,name:`analyticsdatastream_delete`},{operation:`get`,name:`analyticsdatastream_get`},{operation:`getPlatformId`,name:`analyticsdatastream_getPlatformId`},{operation:`isAndroid`,name:`analyticsdatastream_isAndroid`},{operation:`isIOS`,name:`analyticsdatastream_isIOS`},{operation:`isMobileApp`,name:`analyticsdatastream_isMobileApp`},{operation:`isWeb`,name:`analyticsdatastream_isWeb`},{operation:`list`,name:`analyticsdatastream_list`},{operation:`update`,name:`analyticsdatastream_update`},{operation:`findActive`,name:`analyticsdatastreamcollection_findActive`},{operation:`findActiveByProperty`,name:`analyticsdatastreamcollection_findActiveByProperty`},{operation:`findAndroidStreams`,name:`analyticsdatastreamcollection_findAndroidStreams`},{operation:`findByExternalId`,name:`analyticsdatastreamcollection_findByExternalId`},{operation:`findByMeasurementId`,name:`analyticsdatastreamcollection_findByMeasurementId`},{operation:`findByProperty`,name:`analyticsdatastreamcollection_findByProperty`},{operation:`findByStatus`,name:`analyticsdatastreamcollection_findByStatus`},{operation:`findByType`,name:`analyticsdatastreamcollection_findByType`},{operation:`findIOSStreams`,name:`analyticsdatastreamcollection_findIOSStreams`},{operation:`findMobileStreams`,name:`analyticsdatastreamcollection_findMobileStreams`},{operation:`findWebStreams`,name:`analyticsdatastreamcollection_findWebStreams`}],methods:[{name:`findActive`,async:!0,parameters:[],returnType:`Promise<AnalyticsDataStream[]>`,aiCallable:!1},{name:`findActiveByProperty`,async:!0,parameters:[`propertyId: string`],returnType:`Promise<AnalyticsDataStream[]>`,aiCallable:!1},{name:`findAndroidStreams`,async:!0,parameters:[],returnType:`Promise<AnalyticsDataStream[]>`,aiCallable:!1},{name:`findByExternalId`,async:!0,parameters:[`externalId: string`],returnType:`Promise<AnalyticsDataStream | null>`,aiCallable:!1},{name:`findByMeasurementId`,async:!0,parameters:[`measurementId: string`],returnType:`Promise<AnalyticsDataStream | null>`,aiCallable:!1},{name:`findByProperty`,async:!0,parameters:[`propertyId: string`],returnType:`Promise<AnalyticsDataStream[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: DataStreamStatus`],returnType:`Promise<AnalyticsDataStream[]>`,aiCallable:!1},{name:`findByType`,async:!0,parameters:[`streamType: DataStreamType`],returnType:`Promise<AnalyticsDataStream[]>`,aiCallable:!1},{name:`findIOSStreams`,async:!0,parameters:[],returnType:`Promise<AnalyticsDataStream[]>`,aiCallable:!1},{name:`findMobileStreams`,async:!0,parameters:[],returnType:`Promise<AnalyticsDataStream[]>`,aiCallable:!1},{name:`findWebStreams`,async:!0,parameters:[],returnType:`Promise<AnalyticsDataStream[]>`,aiCallable:!1},{name:`getPlatformId`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`isAndroid`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isIOS`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isMobileApp`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isWeb`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1}],references:[`@happyvertical/smrt-analytics:AnalyticsProperty`],exposed:!0},{id:`@happyvertical/smrt-analytics:AnalyticsEvent`,name:`AnalyticsEvent`,collection:`analyticsevents`,description:`AnalyticsEvent represents a tracked analytics event (server-side tracking log).`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`propertyId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-analytics:AnalyticsProperty`},{name:`eventName`,type:`text`,required:!1,default:``},{name:`clientId`,type:`text`,required:!1,default:``},{name:`userId`,type:`text`,required:!1,default:``},{name:`params`,type:`text`,required:!1,default:`{}`},{name:`eventTimestamp`,type:`datetime`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`pending`,`sent`,`failed`]},{name:`sentAt`,type:`datetime`,required:!1},{name:`errorMessage`,type:`text`,required:!1,default:``},{name:`retryCount`,type:`integer`,required:!1,default:0},{name:`nonPersonalizedAds`,type:`boolean`,required:!1,default:!1},{name:`sessionId`,type:`text`,required:!1,default:``},{name:`pagePath`,type:`text`,required:!1,default:``},{name:`pageTitle`,type:`text`,required:!1,default:``},{name:`userAgent`,type:`text`,required:!1,default:``},{name:`ipAddress`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/analyticsevents`},{method:`GET`,path:`/analyticsevents/[id]`},{method:`POST`,path:`/analyticsevents`}],mcp:[{operation:`get`,name:`analyticsevent_get`},{operation:`list`,name:`analyticsevent_list`}],cli:[{operation:`addParam`,name:`analyticsevent_addParam`},{operation:`create`,name:`analyticsevent_create`},{operation:`delete`,name:`analyticsevent_delete`},{operation:`get`,name:`analyticsevent_get`},{operation:`getParams`,name:`analyticsevent_getParams`},{operation:`isConversion`,name:`analyticsevent_isConversion`},{operation:`isPageview`,name:`analyticsevent_isPageview`},{operation:`list`,name:`analyticsevent_list`},{operation:`markFailed`,name:`analyticsevent_markFailed`},{operation:`markSent`,name:`analyticsevent_markSent`},{operation:`resetForRetry`,name:`analyticsevent_resetForRetry`},{operation:`setParams`,name:`analyticsevent_setParams`},{operation:`shouldRetry`,name:`analyticsevent_shouldRetry`},{operation:`toTrackEvent`,name:`analyticsevent_toTrackEvent`},{operation:`update`,name:`analyticsevent_update`},{operation:`countByEventName`,name:`analyticseventcollection_countByEventName`},{operation:`findByClientId`,name:`analyticseventcollection_findByClientId`},{operation:`findByDateRange`,name:`analyticseventcollection_findByDateRange`},{operation:`findByEventName`,name:`analyticseventcollection_findByEventName`},{operation:`findByProperty`,name:`analyticseventcollection_findByProperty`},{operation:`findByStatus`,name:`analyticseventcollection_findByStatus`},{operation:`findByUserId`,name:`analyticseventcollection_findByUserId`},{operation:`findConversions`,name:`analyticseventcollection_findConversions`},{operation:`findFailed`,name:`analyticseventcollection_findFailed`},{operation:`findForRetry`,name:`analyticseventcollection_findForRetry`},{operation:`findPageviews`,name:`analyticseventcollection_findPageviews`},{operation:`findPending`,name:`analyticseventcollection_findPending`},{operation:`findPendingByProperty`,name:`analyticseventcollection_findPendingByProperty`},{operation:`findSent`,name:`analyticseventcollection_findSent`},{operation:`getBatchPropertyStats`,name:`analyticseventcollection_getBatchPropertyStats`},{operation:`getPropertyStats`,name:`analyticseventcollection_getPropertyStats`},{operation:`getPropertyStatsWithTrend`,name:`analyticseventcollection_getPropertyStatsWithTrend`}],methods:[{name:`addParam`,async:!1,parameters:[`key: string`,`value: string | number | boolean`],returnType:`void`,aiCallable:!1},{name:`countByEventName`,async:!0,parameters:[`propertyId: string`],returnType:`Promise<Map<string, number>>`,aiCallable:!1},{name:`findByClientId`,async:!0,parameters:[`clientId: string`],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`findByDateRange`,async:!0,parameters:[`startDate: Date`,`endDate: Date`],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`findByEventName`,async:!0,parameters:[`eventName: string`],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`findByProperty`,async:!0,parameters:[`propertyId: string`],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: TrackingEventStatus`],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`findByUserId`,async:!0,parameters:[`userId: string`],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`findConversions`,async:!0,parameters:[`propertyId?: string`],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`findFailed`,async:!0,parameters:[],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`findForRetry`,async:!0,parameters:[`maxRetries?: number`],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`findPageviews`,async:!0,parameters:[`propertyId?: string`],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`findPending`,async:!0,parameters:[],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`findPendingByProperty`,async:!0,parameters:[`propertyId: string`],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`findSent`,async:!0,parameters:[],returnType:`Promise<AnalyticsEvent[]>`,aiCallable:!1},{name:`getBatchPropertyStats`,async:!0,parameters:[`propertyIds: string[]`,`now?: Date`,`timeZone?: string`],returnType:`Promise<Map<string, PropertyStatsWithTrend>>`,aiCallable:!1},{name:`getParams`,async:!1,parameters:[],returnType:`Record<string, string | number | boolean>`,aiCallable:!1},{name:`getPropertyStats`,async:!0,parameters:[`propertyId: string`],returnType:`Promise<object>`,aiCallable:!1},{name:`getPropertyStatsWithTrend`,async:!0,parameters:[`propertyId: string`,`now?: Date`,`timeZone?: string`],returnType:`Promise<PropertyStatsWithTrend>`,aiCallable:!1},{name:`isConversion`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPageview`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markFailed`,async:!1,parameters:[`error: string`],returnType:`void`,aiCallable:!1},{name:`markSent`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`resetForRetry`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`setParams`,async:!1,parameters:[`params: Record<string, string | number | boolean>`],returnType:`void`,aiCallable:!1},{name:`shouldRetry`,async:!1,parameters:[`maxRetries?: number`],returnType:`boolean`,aiCallable:!1},{name:`toTrackEvent`,async:!1,parameters:[],returnType:`object`,aiCallable:!1}],references:[`@happyvertical/smrt-analytics:AnalyticsProperty`],exposed:!0},{id:`@happyvertical/smrt-analytics:AnalyticsProperty`,name:`AnalyticsProperty`,collection:`analyticsproperties`,description:`AnalyticsProperty represents an analytics property (GA4 property, Plausible site, or Matomo site).`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`displayName`,type:`text`,required:!1,default:``,description:`The name people see for this website or app.`},{name:`provider`,type:`text`,required:!1,enum:[`ga4`,`plausible`,`matomo`],description:`Which analytics service tracks it: Google Analytics 4, Plausible or Matomo.`},{name:`externalId`,type:`text`,required:!1,default:``,description:`The id the analytics service gives the property, such as properties/123456789 or a Matomo site id.`},{name:`measurementId`,type:`text`,required:!1,default:``,description:`The tracking id for a web stream, such as G-XXXXXXXXXX.`},{name:`apiSecret`,type:`text`,required:!1,default:``,description:`The secret key your analytics service issues for this property. It is kept out of responses and tool results, but it is not encrypted in the database.`},{name:`siteDomain`,type:`text`,required:!1,default:``,description:`The website address, used by Plausible and Matomo.`},{name:`timeZone`,type:`text`,required:!1,default:`America/Los_Angeles`,description:`The time zone the figures are reported in.`},{name:`currencyCode`,type:`text`,required:!1,default:`USD`,description:`The currency used for revenue figures, such as USD.`},{name:`industryCategory`,type:`text`,required:!1,default:``},{name:`serviceLevel`,type:`text`,required:!1,default:`STANDARD`},{name:`status`,type:`text`,required:!1,enum:[`active`,`inactive`,`pending`],description:`Whether tracking is active, inactive or still being set up.`},{name:`lastSyncAt`,type:`datetime`,required:!1,description:`When the property was last synced with the analytics service.`},{name:`providerMetadata`,type:`text`,required:!1,default:`{}`,description:`Extra connection details from your analytics service. They are kept out of responses and tool results, but they are not encrypted in the database.`}],rest:[{method:`GET`,path:`/analyticsproperties`},{method:`GET`,path:`/analyticsproperties/[id]`},{method:`POST`,path:`/analyticsproperties`},{method:`PATCH`,path:`/analyticsproperties/[id]`}],mcp:[{operation:`get`,name:`analyticsproperty_get`},{operation:`list`,name:`analyticsproperty_list`}],cli:[{operation:`analyzePerformance`,name:`analyticsproperty_analyzePerformance`},{operation:`create`,name:`analyticsproperty_create`},{operation:`delete`,name:`analyticsproperty_delete`},{operation:`get`,name:`analyticsproperty_get`},{operation:`getProviderMetadata`,name:`analyticsproperty_getProviderMetadata`},{operation:`isGA4`,name:`analyticsproperty_isGA4`},{operation:`isMatomo`,name:`analyticsproperty_isMatomo`},{operation:`isPerformingWell`,name:`analyticsproperty_isPerformingWell`},{operation:`isPlausible`,name:`analyticsproperty_isPlausible`},{operation:`list`,name:`analyticsproperty_list`},{operation:`markSynced`,name:`analyticsproperty_markSynced`},{operation:`setProviderMetadata`,name:`analyticsproperty_setProviderMetadata`},{operation:`update`,name:`analyticsproperty_update`},{operation:`findActive`,name:`analyticspropertycollection_findActive`},{operation:`findByExternalId`,name:`analyticspropertycollection_findByExternalId`},{operation:`findByMeasurementId`,name:`analyticspropertycollection_findByMeasurementId`},{operation:`findByProvider`,name:`analyticspropertycollection_findByProvider`},{operation:`findBySiteDomain`,name:`analyticspropertycollection_findBySiteDomain`},{operation:`findByStatus`,name:`analyticspropertycollection_findByStatus`},{operation:`findGA4Properties`,name:`analyticspropertycollection_findGA4Properties`},{operation:`findMatomoSites`,name:`analyticspropertycollection_findMatomoSites`},{operation:`findNeedingSync`,name:`analyticspropertycollection_findNeedingSync`},{operation:`findPlausibleSites`,name:`analyticspropertycollection_findPlausibleSites`}],methods:[{name:`analyzePerformance`,async:!0,parameters:[`options?: object`],returnType:`Promise<object>`,aiCallable:!1},{name:`findActive`,async:!0,parameters:[],returnType:`Promise<AnalyticsProperty[]>`,aiCallable:!1},{name:`findByExternalId`,async:!0,parameters:[`externalId: string`],returnType:`Promise<AnalyticsProperty | null>`,aiCallable:!1},{name:`findByMeasurementId`,async:!0,parameters:[`measurementId: string`],returnType:`Promise<AnalyticsProperty | null>`,aiCallable:!1},{name:`findByProvider`,async:!0,parameters:[`provider: AnalyticsProvider`],returnType:`Promise<AnalyticsProperty[]>`,aiCallable:!1},{name:`findBySiteDomain`,async:!0,parameters:[`siteDomain: string`,`provider?: AnalyticsProvider`],returnType:`Promise<AnalyticsProperty | null>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: AnalyticsPropertyStatus`],returnType:`Promise<AnalyticsProperty[]>`,aiCallable:!1},{name:`findGA4Properties`,async:!0,parameters:[],returnType:`Promise<AnalyticsProperty[]>`,aiCallable:!1},{name:`findMatomoSites`,async:!0,parameters:[],returnType:`Promise<AnalyticsProperty[]>`,aiCallable:!1},{name:`findNeedingSync`,async:!0,parameters:[`hoursAgo?: number`],returnType:`Promise<AnalyticsProperty[]>`,aiCallable:!1},{name:`findPlausibleSites`,async:!0,parameters:[],returnType:`Promise<AnalyticsProperty[]>`,aiCallable:!1},{name:`getProviderMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`isGA4`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isMatomo`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPerformingWell`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isPlausible`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markSynced`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`setProviderMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-analytics:AnalyticsReport`,name:`AnalyticsReport`,collection:`analyticsreports`,description:`AnalyticsReport represents a saved report configuration with optional scheduling.`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`propertyId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-analytics:AnalyticsProperty`,description:`The website or app this report is about.`},{name:`name`,type:`text`,required:!1,default:``,description:`A short name for the report, such as Weekly traffic.`},{name:`description`,type:`text`,required:!1,default:``,description:`What the report is for.`},{name:`dimensions`,type:`text`,required:!1,default:`[]`,description:`What to break the figures down by, such as country or device, as a list.`},{name:`metrics`,type:`text`,required:!1,default:`[]`,description:`What to count, such as active users or sessions, as a list.`},{name:`dateRangeStart`,type:`text`,required:!1,default:`7daysAgo`,description:`Where the period begins: a date, or a relative value such as 7daysAgo.`},{name:`dateRangeEnd`,type:`text`,required:!1,default:`today`,description:`Where the period ends: a date, or a relative value such as today.`},{name:`dimensionFilter`,type:`text`,required:!1,default:``},{name:`metricFilter`,type:`text`,required:!1,default:``},{name:`orderBy`,type:`text`,required:!1,default:`[]`},{name:`maxResults`,type:`integer`,required:!1,default:0},{name:`status`,type:`text`,required:!1,enum:[`draft`,`scheduled`,`running`,`completed`,`failed`],description:`Where the report stands: draft, scheduled, running, completed or failed.`},{name:`frequency`,type:`text`,required:!1,enum:[`once`,`daily`,`weekly`,`monthly`],description:`How often the report repeats: once, daily, weekly or monthly.`},{name:`lastRunAt`,type:`datetime`,required:!1,description:`When the report last ran.`},{name:`nextRunAt`,type:`datetime`,required:!1,description:`When the report is next due to run.`},{name:`resultData`,type:`text`,required:!1,default:``},{name:`rowCount`,type:`integer`,required:!1,default:0,description:`How many rows the last run returned.`},{name:`lastError`,type:`text`,required:!1,default:``,description:`Why the last run failed. Empty when it worked.`}],rest:[{method:`GET`,path:`/analyticsreports`},{method:`GET`,path:`/analyticsreports/[id]`},{method:`POST`,path:`/analyticsreports`},{method:`PATCH`,path:`/analyticsreports/[id]`}],mcp:[{operation:`get`,name:`analyticsreport_get`},{operation:`list`,name:`analyticsreport_list`}],cli:[{operation:`analyzeResults`,name:`analyticsreport_analyzeResults`},{operation:`calculateNextRun`,name:`analyticsreport_calculateNextRun`},{operation:`create`,name:`analyticsreport_create`},{operation:`delete`,name:`analyticsreport_delete`},{operation:`get`,name:`analyticsreport_get`},{operation:`getDimensions`,name:`analyticsreport_getDimensions`},{operation:`getMetrics`,name:`analyticsreport_getMetrics`},{operation:`getResultData`,name:`analyticsreport_getResultData`},{operation:`hasPositiveTrends`,name:`analyticsreport_hasPositiveTrends`},{operation:`isDue`,name:`analyticsreport_isDue`},{operation:`list`,name:`analyticsreport_list`},{operation:`markCompleted`,name:`analyticsreport_markCompleted`},{operation:`markFailed`,name:`analyticsreport_markFailed`},{operation:`markRunning`,name:`analyticsreport_markRunning`},{operation:`setDimensions`,name:`analyticsreport_setDimensions`},{operation:`setMetrics`,name:`analyticsreport_setMetrics`},{operation:`setResultData`,name:`analyticsreport_setResultData`},{operation:`update`,name:`analyticsreport_update`},{operation:`findByFrequency`,name:`analyticsreportcollection_findByFrequency`},{operation:`findByProperty`,name:`analyticsreportcollection_findByProperty`},{operation:`findByPropertyAndStatus`,name:`analyticsreportcollection_findByPropertyAndStatus`},{operation:`findByStatus`,name:`analyticsreportcollection_findByStatus`},{operation:`findCompleted`,name:`analyticsreportcollection_findCompleted`},{operation:`findDrafts`,name:`analyticsreportcollection_findDrafts`},{operation:`findDue`,name:`analyticsreportcollection_findDue`},{operation:`findFailed`,name:`analyticsreportcollection_findFailed`},{operation:`findRecentlyRun`,name:`analyticsreportcollection_findRecentlyRun`},{operation:`findRecurring`,name:`analyticsreportcollection_findRecurring`},{operation:`findScheduled`,name:`analyticsreportcollection_findScheduled`}],methods:[{name:`analyzeResults`,async:!0,parameters:[`_options?: Record<string, unknown>`],returnType:`Promise<object>`,aiCallable:!1},{name:`calculateNextRun`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`findByFrequency`,async:!0,parameters:[`frequency: ReportFrequency`],returnType:`Promise<AnalyticsReport[]>`,aiCallable:!1},{name:`findByProperty`,async:!0,parameters:[`propertyId: string`],returnType:`Promise<AnalyticsReport[]>`,aiCallable:!1},{name:`findByPropertyAndStatus`,async:!0,parameters:[`propertyId: string`,`status: ReportStatus`],returnType:`Promise<AnalyticsReport[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: ReportStatus`],returnType:`Promise<AnalyticsReport[]>`,aiCallable:!1},{name:`findCompleted`,async:!0,parameters:[],returnType:`Promise<AnalyticsReport[]>`,aiCallable:!1},{name:`findDrafts`,async:!0,parameters:[],returnType:`Promise<AnalyticsReport[]>`,aiCallable:!1},{name:`findDue`,async:!0,parameters:[],returnType:`Promise<AnalyticsReport[]>`,aiCallable:!1},{name:`findFailed`,async:!0,parameters:[],returnType:`Promise<AnalyticsReport[]>`,aiCallable:!1},{name:`findRecentlyRun`,async:!0,parameters:[`hoursAgo?: number`],returnType:`Promise<AnalyticsReport[]>`,aiCallable:!1},{name:`findRecurring`,async:!0,parameters:[],returnType:`Promise<AnalyticsReport[]>`,aiCallable:!1},{name:`findScheduled`,async:!0,parameters:[],returnType:`Promise<AnalyticsReport[]>`,aiCallable:!1},{name:`getDimensions`,async:!1,parameters:[],returnType:`Array<object>`,aiCallable:!1},{name:`getMetrics`,async:!1,parameters:[],returnType:`Array<object>`,aiCallable:!1},{name:`getResultData`,async:!1,parameters:[],returnType:`Record<string, unknown> | null`,aiCallable:!1},{name:`hasPositiveTrends`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isDue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markCompleted`,async:!1,parameters:[`rowCount: number`],returnType:`void`,aiCallable:!1},{name:`markFailed`,async:!1,parameters:[`error: string`],returnType:`void`,aiCallable:!1},{name:`markRunning`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`setDimensions`,async:!1,parameters:[`dimensions: Array<object>`],returnType:`void`,aiCallable:!1},{name:`setMetrics`,async:!1,parameters:[`metrics: Array<object>`],returnType:`void`,aiCallable:!1},{name:`setResultData`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-analytics:AnalyticsProperty`],exposed:!0}],dependencies:[],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`],via:[`@happyvertical/smrt-tenancy`]},recipes:[{id:`analytics.reports`,label:`Analytics`,summary:`Save traffic reports for your websites and apps and get a plain-language read on the results.`,synonyms:[`analytics`,`traffic`,`pageviews`,`visitors`,`web stats`,`google analytics`,`plausible`,`matomo`],models:[`@happyvertical/smrt-analytics:AnalyticsProperty`,`@happyvertical/smrt-analytics:AnalyticsReport`],nav:[{label:`Analytics properties`,model:`@happyvertical/smrt-analytics:AnalyticsProperty`,icon:`home`,description:`The websites and apps you track, and who tracks them.`},{label:`Analytics reports`,model:`@happyvertical/smrt-analytics:AnalyticsReport`,icon:`fileText`,description:`Saved reports, how often they run and what they found.`}],requires:[],section:{id:`analytics`,label:`Analytics`,icon:`layers`,description:`How your websites and apps are doing.`},options:{"@happyvertical/smrt-analytics:AnalyticsProperty":{fields:{name:{visibility:`hidden`},industryCategory:{visibility:`advanced`},serviceLevel:{visibility:`advanced`},lastSyncAt:{locked:!0}}},"@happyvertical/smrt-analytics:AnalyticsReport":{fields:{dimensionFilter:{visibility:`advanced`},metricFilter:{visibility:`advanced`},orderBy:{visibility:`advanced`},maxResults:{visibility:`advanced`},resultData:{visibility:`hidden`,locked:!0},rowCount:{locked:!0},lastRunAt:{locked:!0},nextRunAt:{locked:!0},lastError:{locked:!0}}}},help:{markdown:`## Overview
2
-
3
- Analytics keeps the traffic reports you care about for your websites and apps.
4
- Add a property for each site or app you track in Google Analytics 4, Plausible
5
- or Matomo. Save a report on it that says what to count, what to break the
6
- figures down by, and over which dates. The rows each run returns are stored
7
- with the report, and the assistant can read them back to you in plain words.
8
-
9
- Properties and reports are kept on your server. Provider secrets are stored on
10
- the property and never sent to the assistant or returned in responses, but they
11
- are not encrypted in the database.
12
-
13
- ## Tasks
14
-
15
- ### Add a property
16
-
17
- 1. Create a new property.
18
- 2. Enter the **{field:AnalyticsProperty.displayName}** and pick the
19
- **{field:AnalyticsProperty.provider}**.
20
- 3. Enter the **{field:AnalyticsProperty.externalId}** the analytics service
21
- gives it.
22
- 4. For Google Analytics, enter the **{field:AnalyticsProperty.measurementId}**.
23
- For Plausible or Matomo, enter the **{field:AnalyticsProperty.siteDomain}**.
24
- 5. Keep **{field:AnalyticsProperty.status}** on active while you want it
25
- tracked.
26
-
27
- ### Save a report
28
-
29
- 1. Create a new report and choose the property in
30
- **{field:AnalyticsReport.propertyId}**.
31
- 2. Give it a **{field:AnalyticsReport.name}**.
32
- 3. List what to break the figures down by in
33
- **{field:AnalyticsReport.dimensions}** and what to count in
34
- **{field:AnalyticsReport.metrics}**.
35
- 4. Set the period with **{field:AnalyticsReport.dateRangeStart}** and
36
- **{field:AnalyticsReport.dateRangeEnd}**.
37
- 5. Pick **{field:AnalyticsReport.frequency}** to repeat it daily, weekly or
38
- monthly.
39
-
40
- ### Check what a report found
41
-
42
- 1. **{field:AnalyticsReport.status}** says where the report stands, and
43
- **{field:AnalyticsReport.lastRunAt}** when it last ran.
44
- 2. **{field:AnalyticsReport.rowCount}** shows how many rows came back.
45
- 3. If a run failed, **{field:AnalyticsReport.lastError}** says why.
46
-
47
- ### Ask the assistant
48
-
49
- 1. Ask about a saved report by name, for example "how did last week's traffic
50
- report look?". When your app has the analytics tools switched on, the
51
- assistant can list your saved reports and open one to read its figures.
52
- 2. A written summary of a report comes from your app, which sends the stored
53
- rows to the AI provider as they are. Leave out dimensions that identify a
54
- person.
55
- 3. For totals your own app calculates, such as orders or signups, ask for a
56
- refreshed report. The assistant reads those with \`reports.query\`; see
57
- Reports.
58
- 4. For a one-off question those reports do not answer, the assistant can
59
- propose a report with \`reports.runtime.define\`. Nothing is saved until you
60
- confirm it.
61
- `,fieldRefs:[`AnalyticsProperty.displayName`,`AnalyticsProperty.externalId`,`AnalyticsProperty.measurementId`,`AnalyticsProperty.provider`,`AnalyticsProperty.siteDomain`,`AnalyticsProperty.status`,`AnalyticsReport.dateRangeEnd`,`AnalyticsReport.dateRangeStart`,`AnalyticsReport.dimensions`,`AnalyticsReport.frequency`,`AnalyticsReport.lastError`,`AnalyticsReport.lastRunAt`,`AnalyticsReport.metrics`,`AnalyticsReport.name`,`AnalyticsReport.propertyId`,`AnalyticsReport.rowCount`,`AnalyticsReport.status`]},surfaces:[{kind:`route`,path:`/analytics/summary`,export:`@happyvertical/smrt-analytics/svelte#AnalyticsSummary`,label:`Traffic summary`}],runtime:`server`,demo:{mode:`server`,reasons:[`The recipe declares runtime "server".`,`Needs a server because its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624).`]}}]},{id:`approvals`,packageName:`@happyvertical/smrt-approvals`,version:`0.57.9`,description:`Approval decision gate for the SMRT framework: revision-bound, single-use approvals with quorum, expiry, and an append-only event ledger`,models:[{id:`@happyvertical/smrt-approvals:ApprovalEvent`,name:`ApprovalEvent`,collection:`approvalevents`,description:`One immutable entry in an approval request's history.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`requestId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-approvals:ApprovalRequest`},{name:`type`,type:`text`,required:!0},{name:`actorId`,type:`text`,required:!0},{name:`actorType`,type:`text`,required:!1,enum:[`human`,`agent`,`service`]},{name:`reason`,type:`text`,required:!1},{name:`subjectRevisionHash`,type:`text`,required:!1},{name:`sequence`,type:`integer`,required:!1},{name:`voteKey`,type:`text`,required:!1},{name:`occurredAt`,type:`datetime`,required:!1},{name:`selfApproved`,type:`boolean`,required:!1,default:!1},{name:`selfApprovalPermission`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/approvalevents`},{method:`GET`,path:`/approvalevents/[id]`}],mcp:[{operation:`get`,name:`approvalevent_get`},{operation:`list`,name:`approvalevent_list`}],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-approvals:ApprovalRequest`],exposed:!0},{id:`@happyvertical/smrt-approvals:ApprovalPolicy`,name:`ApprovalPolicy`,collection:`approvalpolicies`,description:`Tenant-level tightening of an approval kind. One row per tenant and kind.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`kind`,type:`text`,required:!0},{name:`requiredApprovals`,type:`integer`,required:!1},{name:`ttlMs`,type:`integer`,required:!1},{name:`requiredPermission`,type:`text`,required:!1},{name:`updatedBy`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/approvalpolicies`},{method:`GET`,path:`/approvalpolicies/[id]`}],mcp:[{operation:`get`,name:`approvalpolicy_get`},{operation:`list`,name:`approvalpolicy_list`}],cli:[],methods:[{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-approvals:ApprovalRequest`,name:`ApprovalRequest`,collection:`approvalrequests`,description:`A request for approval of one subject revision.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`kind`,type:`text`,required:!0},{name:`subjectType`,type:`text`,required:!0},{name:`subjectId`,type:`text`,required:!0},{name:`subjectRevisionHash`,type:`text`,required:!0},{name:`requestKey`,type:`text`,required:!0},{name:`requestedBy`,type:`text`,required:!0},{name:`requestedByType`,type:`text`,required:!1,enum:[`human`,`agent`,`service`]},{name:`summary`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1},{name:`requiredApprovals`,type:`integer`,required:!1},{name:`approvalCount`,type:`integer`,required:!1},{name:`requiredPermissions`,type:`text`,required:!1},{name:`version`,type:`integer`,required:!1},{name:`expiresAt`,type:`datetime`,required:!1},{name:`decidedAt`,type:`datetime`,required:!1},{name:`consumedAt`,type:`datetime`,required:!1},{name:`consumedBy`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/approvalrequests`},{method:`GET`,path:`/approvalrequests/[id]`}],mcp:[{operation:`get`,name:`approvalrequest_get`},{operation:`list`,name:`approvalrequest_list`}],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`expiresAtMs`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`getRequiredPermissions`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`isConsumed`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setRequiredPermissions`,async:!1,parameters:[`slugs: any`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0}],dependencies:[`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3617`,`#3624`,`#3626`],via:[`@happyvertical/smrt-profiles`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`]}},{id:`assets`,packageName:`@happyvertical/smrt-assets`,version:`0.57.9`,description:`Asset management system with versioning, metadata, and AI-powered operations for SMRT framework`,models:[{id:`@happyvertical/smrt-assets:Asset`,name:`Asset`,collection:`assets`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accessMode`,type:`text`,required:!1,default:`public`,enum:[`public`,`private`],description:`Whether this record is public to ordinary asset APIs or private.`},{name:`name`,type:`text`,required:!1,description:`A recognizable name for this file or media item.`},{name:`sourceUri`,type:`text`,required:!1,description:`Where the original file is stored or can be retrieved.`},{name:`mimeType`,type:`text`,required:!1,description:`The file format, such as image/jpeg or application/pdf.`},{name:`description`,type:`text`,required:!1,description:`Explain what the file contains and when it should be used.`},{name:`metadata`,type:`text`,required:!1,description:`Additional details recorded while processing this file.`},{name:`version`,type:`integer`,required:!0,default:1,description:`The revision number of this file in its version history.`},{name:`primaryVersionId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-assets:Asset`,description:`The first version of this file, linking its revision history.`},{name:`typeSlug`,type:`text`,required:!1,description:`The category of asset, such as an image, video, or document.`},{name:`statusSlug`,type:`text`,required:!1,description:`The stage of this asset, such as draft, published, or archived.`},{name:`ownerProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`The person or organization responsible for this asset.`},{name:`sourceAssetId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-assets:Asset`,description:`The original asset used to produce this file or variation.`},{name:`folderId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-assets:Folder`,description:`The folder that organizes this file in the asset library.`},{name:`sourceType`,type:`text`,required:!1,description:`The service or source from which this file was obtained.`},{name:`externalId`,type:`text`,required:!1,description:`The reference used to identify this file at its original source.`},{name:`externalRefs`,type:`text`,required:!1,description:`References that connect this file to copies held by other services.`},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/assets`},{method:`GET`,path:`/assets/[id]`},{method:`POST`,path:`/assets`},{method:`PATCH`,path:`/assets/[id]`},{method:`DELETE`,path:`/assets/[id]`}],mcp:[{operation:`create`,name:`asset_create`},{operation:`get`,name:`asset_get`},{operation:`list`,name:`asset_list`},{operation:`update`,name:`asset_update`}],cli:[{operation:`associateWith`,name:`asset_associateWith`},{operation:`create`,name:`asset_create`},{operation:`delete`,name:`asset_delete`},{operation:`get`,name:`asset_get`},{operation:`getAssociations`,name:`asset_getAssociations`},{operation:`getBySlug`,name:`asset_getBySlug`},{operation:`getDerivatives`,name:`asset_getDerivatives`},{operation:`getExternalRef`,name:`asset_getExternalRef`},{operation:`getExternalRefs`,name:`asset_getExternalRefs`},{operation:`getMetadata`,name:`asset_getMetadata`},{operation:`getSource`,name:`asset_getSource`},{operation:`getStatus`,name:`asset_getStatus`},{operation:`getTags`,name:`asset_getTags`},{operation:`getType`,name:`asset_getType`},{operation:`hasTag`,name:`asset_hasTag`},{operation:`list`,name:`asset_list`},{operation:`mergeMetadata`,name:`asset_mergeMetadata`},{operation:`setExternalRef`,name:`asset_setExternalRef`},{operation:`setMetadata`,name:`asset_setMetadata`},{operation:`update`,name:`asset_update`},{operation:`addTag`,name:`assetcollection_addTag`},{operation:`createNewVersion`,name:`assetcollection_createNewVersion`},{operation:`findByTenant`,name:`assetcollection_findByTenant`},{operation:`findGlobal`,name:`assetcollection_findGlobal`},{operation:`findWithGlobals`,name:`assetcollection_findWithGlobals`},{operation:`getByFolder`,name:`assetcollection_getByFolder`},{operation:`getByMimeType`,name:`assetcollection_getByMimeType`},{operation:`getByOwner`,name:`assetcollection_getByOwner`},{operation:`getByStatus`,name:`assetcollection_getByStatus`},{operation:`getByTag`,name:`assetcollection_getByTag`},{operation:`getByType`,name:`assetcollection_getByType`},{operation:`getDerivatives`,name:`assetcollection_getDerivatives`},{operation:`getLatestVersion`,name:`assetcollection_getLatestVersion`},{operation:`getTagsForAssets`,name:`assetcollection_getTagsForAssets`},{operation:`listVersions`,name:`assetcollection_listVersions`},{operation:`removeTag`,name:`assetcollection_removeTag`},{operation:`rollbackToVersion`,name:`assetcollection_rollbackToVersion`},{operation:`setTags`,name:`assetcollection_setTags`}],methods:[{name:`addTag`,async:!0,parameters:[`assetId: string`,`tag: string`,`options?: AssetTagInput`],returnType:`Promise<Tag>`,aiCallable:!1},{name:`associateWith`,async:!0,parameters:[`metaType: string`,`metaId: string`,`role?: any`],returnType:`Promise<AssetAssociation>`,aiCallable:!1},{name:`createNewVersion`,async:!0,parameters:[`primaryVersionId: string`,`newSourceUri: string`,`updates?: Partial<Asset>`],returnType:`Promise<Asset>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getAssociations`,async:!0,parameters:[],returnType:`Promise<AssetAssociation[]>`,aiCallable:!1},{name:`getByFolder`,async:!0,parameters:[`folderId: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getByMimeType`,async:!0,parameters:[`mimePattern: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getByOwner`,async:!0,parameters:[`ownerProfileId: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getByStatus`,async:!0,parameters:[`statusSlug: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getByTag`,async:!0,parameters:[`tag: string`,`options?: Pick<AssetTagInput, 'context'>`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getByType`,async:!0,parameters:[`typeSlug: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getDerivatives`,async:!0,parameters:[],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getExternalRef`,async:!1,parameters:[`provider: string`],returnType:`AssetExternalReference | null`,aiCallable:!1},{name:`getExternalRefs`,async:!1,parameters:[],returnType:`Record<string, AssetExternalReference>`,aiCallable:!1},{name:`getLatestVersion`,async:!0,parameters:[`primaryVersionId: string`],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getSlug`,async:!0,parameters:[],returnType:`Promise<string | null | undefined>`,aiCallable:!1},{name:`getSource`,async:!0,parameters:[],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getStatus`,async:!0,parameters:[],returnType:`Promise<AssetStatus | null>`,aiCallable:!1},{name:`getTags`,async:!0,parameters:[],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`getTagsForAssets`,async:!0,parameters:[`assetIds: string[]`],returnType:`Promise<Map<string, Tag[]>>`,aiCallable:!1},{name:`getType`,async:!0,parameters:[],returnType:`Promise<AssetType | null>`,aiCallable:!1},{name:`hasTag`,async:!0,parameters:[`tagSlug: string`,`context?: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`listVersions`,async:!0,parameters:[`primaryVersionId: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`mergeMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`removeTag`,async:!0,parameters:[`assetId: string`,`tag: string`,`options?: Pick<AssetTagInput, 'context'>`],returnType:`Promise<void>`,aiCallable:!1},{name:`rollbackToVersion`,async:!0,parameters:[`primaryVersionId: string`,`targetVersion: number`],returnType:`Promise<Asset>`,aiCallable:!1},{name:`setExternalRef`,async:!1,parameters:[`provider: string`,`reference: any`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setTags`,async:!0,parameters:[`assetId: string`,`tags: string[]`,`options?: Pick<AssetTagInput, 'context'>`],returnType:`Promise<Tag[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-assets:Folder`,`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-assets:AssetAssociation`,name:`AssetAssociation`,collection:`assetassociations`,fields:[{name:`metaType`,type:`text`,required:!0},{name:`metaId`,type:`text`,required:!0},{name:`role`,type:`text`,required:!0},{name:`sortOrder`,type:`integer`,required:!1,default:0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`assetId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-assets:Asset`,description:`The file attached to the related record.`}],rest:[{method:`GET`,path:`/assetassociations`},{method:`GET`,path:`/assetassociations/[id]`},{method:`POST`,path:`/assetassociations`},{method:`DELETE`,path:`/assetassociations/[id]`}],mcp:[{operation:`create`,name:`assetassociation_create`},{operation:`get`,name:`assetassociation_get`},{operation:`list`,name:`assetassociation_list`}],cli:[{operation:`create`,name:`assetassociation_create`},{operation:`delete`,name:`assetassociation_delete`},{operation:`get`,name:`assetassociation_get`},{operation:`hydrate`,name:`assetassociation_hydrate`},{operation:`list`,name:`assetassociation_list`},{operation:`update`,name:`assetassociation_update`},{operation:`attach`,name:`assetassociationcollection_attach`},{operation:`byLeft`,name:`assetassociationcollection_byLeft`},{operation:`byRight`,name:`assetassociationcollection_byRight`},{operation:`detach`,name:`assetassociationcollection_detach`},{operation:`setLinks`,name:`assetassociationcollection_setLinks`}],methods:[{name:`attach`,async:!0,parameters:[`metaType: string`,`metaId: string`,`assetId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<AssetAssociation>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`metaType: string`,`metaId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<AssetAssociation[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`metaType: string`,`metaId: string`,`assetId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`hydrate`,async:!0,parameters:[],returnType:`Promise<T | null>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`metaType: string`,`metaId: string`,`assetIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`],exposed:!0},{id:`@happyvertical/smrt-assets:AssetMetafield`,name:`AssetMetafield`,collection:`assetmetafields`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,description:`The name of an additional asset detail, such as Width or Height.`},{name:`validation`,type:`text`,required:!1,description:`Rules that determine which values this asset detail accepts.`}],rest:[{method:`GET`,path:`/assetmetafields`},{method:`GET`,path:`/assetmetafields/[id]`},{method:`POST`,path:`/assetmetafields`},{method:`PATCH`,path:`/assetmetafields/[id]`},{method:`DELETE`,path:`/assetmetafields/[id]`}],mcp:[{operation:`create`,name:`assetmetafield_create`},{operation:`get`,name:`assetmetafield_get`},{operation:`list`,name:`assetmetafield_list`}],cli:[{operation:`create`,name:`assetmetafield_create`},{operation:`delete`,name:`assetmetafield_delete`},{operation:`get`,name:`assetmetafield_get`},{operation:`getBySlug`,name:`assetmetafield_getBySlug`},{operation:`getValidation`,name:`assetmetafield_getValidation`},{operation:`list`,name:`assetmetafield_list`},{operation:`setValidation`,name:`assetmetafield_setValidation`},{operation:`update`,name:`assetmetafield_update`},{operation:`getOrCreate`,name:`assetmetafieldcollection_getOrCreate`},{operation:`initializeCommonMetafields`,name:`assetmetafieldcollection_initializeCommonMetafields`}],methods:[{name:`getOrCreate`,async:!0,parameters:[`slug: string`,`name?: string`,`validation?: string | Record<string, unknown>`],returnType:`Promise<AssetMetafield>`,aiCallable:!1},{name:`getValidation`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initializeCommonMetafields`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`setValidation`,async:!1,parameters:[`rules: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-assets:AssetStatus`,name:`AssetStatus`,collection:`assetstatuses`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,description:`The name of this lifecycle stage, such as Draft or Published.`},{name:`description`,type:`text`,required:!1,description:`Explain when an asset should use this lifecycle stage.`}],rest:[{method:`GET`,path:`/assetstatuses`},{method:`GET`,path:`/assetstatuses/[id]`},{method:`POST`,path:`/assetstatuses`},{method:`PATCH`,path:`/assetstatuses/[id]`},{method:`DELETE`,path:`/assetstatuses/[id]`}],mcp:[{operation:`create`,name:`assetstatus_create`},{operation:`get`,name:`assetstatus_get`},{operation:`list`,name:`assetstatus_list`}],cli:[{operation:`create`,name:`assetstatus_create`},{operation:`delete`,name:`assetstatus_delete`},{operation:`get`,name:`assetstatus_get`},{operation:`getBySlug`,name:`assetstatus_getBySlug`},{operation:`list`,name:`assetstatus_list`},{operation:`update`,name:`assetstatus_update`},{operation:`getOrCreate`,name:`assetstatuscollection_getOrCreate`},{operation:`initializeCommonStatuses`,name:`assetstatuscollection_initializeCommonStatuses`}],methods:[{name:`getOrCreate`,async:!0,parameters:[`slug: string`,`name?: string`,`description?: string`],returnType:`Promise<AssetStatus>`,aiCallable:!1},{name:`initializeCommonStatuses`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-assets:AssetTag`,name:`AssetTag`,collection:`assettags`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`assetId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-assets:Asset`},{name:`tagId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-tags:Tag`}],rest:[],mcp:[],cli:[],methods:[{name:`attach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<TItem>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`leftId: string`,`rightIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-tags:Tag`],exposed:!1},{id:`@happyvertical/smrt-assets:AssetType`,name:`AssetType`,collection:`assettypes`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,description:`The name of this file category, such as Image or Document.`},{name:`description`,type:`text`,required:!1,description:`Explain which kinds of files belong in this category.`}],rest:[{method:`GET`,path:`/assettypes`},{method:`GET`,path:`/assettypes/[id]`},{method:`POST`,path:`/assettypes`},{method:`PATCH`,path:`/assettypes/[id]`},{method:`DELETE`,path:`/assettypes/[id]`}],mcp:[{operation:`create`,name:`assettype_create`},{operation:`get`,name:`assettype_get`},{operation:`list`,name:`assettype_list`}],cli:[{operation:`create`,name:`assettype_create`},{operation:`delete`,name:`assettype_delete`},{operation:`get`,name:`assettype_get`},{operation:`getBySlug`,name:`assettype_getBySlug`},{operation:`list`,name:`assettype_list`},{operation:`update`,name:`assettype_update`},{operation:`getOrCreate`,name:`assettypecollection_getOrCreate`},{operation:`initializeCommonTypes`,name:`assettypecollection_initializeCommonTypes`}],methods:[{name:`getOrCreate`,async:!0,parameters:[`slug: string`,`name?: string`,`description?: string`],returnType:`Promise<AssetType>`,aiCallable:!1},{name:`initializeCommonTypes`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-assets:Folder`,name:`Folder`,collection:`folders`,display:{label:`name`},fields:[{name:`parentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-assets:Folder`},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,description:`A recognizable name for this group of files.`},{name:`description`,type:`text`,required:!1,description:`Explain the purpose of this folder and which files belong here.`},{name:`ownerProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`The person or organization responsible for this folder.`},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/folders`},{method:`GET`,path:`/folders/[id]`},{method:`POST`,path:`/folders`},{method:`PATCH`,path:`/folders/[id]`},{method:`DELETE`,path:`/folders/[id]`}],mcp:[{operation:`create`,name:`folder_create`},{operation:`get`,name:`folder_get`},{operation:`list`,name:`folder_list`},{operation:`update`,name:`folder_update`}],cli:[{operation:`create`,name:`folder_create`},{operation:`delete`,name:`folder_delete`},{operation:`get`,name:`folder_get`},{operation:`getAncestors`,name:`folder_getAncestors`},{operation:`getBySlug`,name:`folder_getBySlug`},{operation:`getChildren`,name:`folder_getChildren`},{operation:`getDescendants`,name:`folder_getDescendants`},{operation:`getHierarchy`,name:`folder_getHierarchy`},{operation:`getParent`,name:`folder_getParent`},{operation:`list`,name:`folder_list`},{operation:`moveTo`,name:`folder_moveTo`},{operation:`update`,name:`folder_update`},{operation:`getContents`,name:`foldercollection_getContents`},{operation:`getPath`,name:`foldercollection_getPath`},{operation:`getTree`,name:`foldercollection_getTree`},{operation:`moveAsset`,name:`foldercollection_moveAsset`}],methods:[{name:`getAncestors`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getChildren`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getContents`,async:!0,parameters:[`folderId: string`,`assetCollection: AssetCollection`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getDescendants`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getHierarchy`,async:!0,parameters:[],returnType:`Promise<HierarchyView<this>>`,aiCallable:!1},{name:`getParent`,async:!0,parameters:[],returnType:`Promise<this | null>`,aiCallable:!1},{name:`getPath`,async:!0,parameters:[`folderId: string`],returnType:`Promise<Folder[]>`,aiCallable:!1},{name:`getTree`,async:!0,parameters:[`rootId?: string`],returnType:`Promise<Folder[]>`,aiCallable:!1},{name:`moveAsset`,async:!0,parameters:[`asset: Asset`,`folderId: string | null`],returnType:`Promise<void>`,aiCallable:!1},{name:`moveTo`,async:!0,parameters:[`newParent: this | string | null`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Folder`,`@happyvertical/smrt-profiles:Profile`],exposed:!0}],dependencies:[`profiles`,`tags`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`],via:[`@happyvertical/smrt-tenancy`]},recipes:[{id:`assets.attachments`,label:`Attachments`,summary:`Attach authorized files to records and retain their history.`,synonyms:[`file attachments`,`record files`,`supporting documents`],models:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-assets:AssetAssociation`],nav:[{label:`Attachments`,model:`@happyvertical/smrt-assets:Asset`,icon:`fileText`,description:`Supporting files connected to the record you are viewing.`,key:`attachments`,noun:`attachment`}],requires:[`assets.library`],group:{id:`assets`,label:`Files and media`,summary:`Organize files and media, then attach them to the records that need them.`},section:{id:`assets`,label:`Assets`,icon:`folder`,description:`Files, media and attachments for your work.`},options:{"@happyvertical/smrt-assets:Asset":{fields:{name:{label:`File name`,order:1},description:{label:`Description`,order:2},mimeType:{label:`File type`,order:3}}},"@happyvertical/smrt-assets:AssetAssociation":{fields:{assetId:{label:`Attachment`,order:1},metaType:{help:`The kind of record this file is connected to, such as an article or event.`},metaId:{help:`The specific record that this file is connected to.`},role:{label:`Role`,order:2,help:`How this file is used by the related record, such as a cover image or attachment.`},sortOrder:{label:`Display order`,order:3,help:`The position of this attachment among files with the same role; lower numbers appear first.`}}}},help:{markdown:`## Overview
62
-
63
- Attachments keep authorized supporting files connected to a record without making a public storage link. The application supplies the authorization and upload endpoint; this recipe records the asset and its relationship.
64
-
65
- ## Tasks
66
-
67
- ### Describe an attachment
68
-
69
- 1. Use a clear {field:Asset.name} so people can identify the file.
70
- 2. Add a {field:Asset.description} when the attachment needs context.
71
- 3. Check the {field:Asset.mimeType} before offering the file to a viewer.
72
-
73
- ### Link an attachment to a record
74
-
75
- 1. Select the {field:AssetAssociation.assetId} to link.
76
- 2. Set a {field:AssetAssociation.role} when the record uses more than one file.
77
- 3. Adjust {field:AssetAssociation.sortOrder} to control display order.
78
- `,fieldRefs:[`Asset.description`,`Asset.mimeType`,`Asset.name`,`AssetAssociation.assetId`,`AssetAssociation.role`,`AssetAssociation.sortOrder`]},runtime:`both`,demoSeed:{export:`@happyvertical/smrt-assets/playground#assetAttachmentMockAttachments`},demo:{mode:`server`,reasons:[`Needs a server because its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624).`]},effectiveDemo:{mode:`server`,reasons:[`Needs a server because its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624).`,`Needs assets.library, which is server.`]}},{id:`assets.library`,label:`Asset Library`,summary:`Organize files and media with folders, types, and statuses.`,synonyms:[`media library`,`file library`,`digital assets`],models:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-assets:Folder`,`@happyvertical/smrt-assets:AssetType`,`@happyvertical/smrt-assets:AssetStatus`,`@happyvertical/smrt-assets:AssetMetafield`],nav:[{label:`Files & media`,model:`@happyvertical/smrt-assets:Asset`,icon:`archive`,description:`Files and media you can organize, reuse and share.`,noun:`asset`},{label:`Folders`,model:`@happyvertical/smrt-assets:Folder`,icon:`folder`,description:`Organize assets into clear, reusable groups.`,noun:`folder`}],requires:[],group:{id:`assets`,label:`Files and media`,summary:`Organize files and media, then attach them to the records that need them.`},section:{id:`assets`,label:`Assets`,icon:`folder`,description:`Files, media and attachments for your work.`},options:{"@happyvertical/smrt-assets:Asset":{fields:{name:{label:`Name`,order:1},description:{order:2},folderId:{label:`Folder`,order:3},typeSlug:{label:`Type`,order:4},statusSlug:{label:`Status`,order:5},mimeType:{label:`File type`,order:6}}},"@happyvertical/smrt-assets:Folder":{fields:{parentId:{help:`The containing folder; leave empty to place this folder at the top level.`},name:{label:`Name`,order:1},description:{order:2}}}},help:{markdown:`## Overview
79
-
80
- The Asset Library keeps files and media in one place. Organize assets into folders, classify them by type and status, and keep a clear description for people who need to find them later.
81
-
82
- ## Tasks
83
-
84
- ### Add an asset
85
-
86
- 1. Give the asset a recognizable {field:Asset.name}.
87
- 2. Add a {field:Asset.description} that explains how the file can be used.
88
- 3. Select its {field:Asset.folderId}, {field:Asset.typeSlug}, and {field:Asset.statusSlug}.
89
- 4. Confirm the {field:Asset.mimeType} matches the file you intend to manage.
90
-
91
- ### Organize folders
92
-
93
- 1. Create a folder with a descriptive {field:Folder.name}.
94
- 2. Use the {field:Folder.description} to explain the folder's purpose.
95
- `,fieldRefs:[`Asset.description`,`Asset.folderId`,`Asset.mimeType`,`Asset.name`,`Asset.statusSlug`,`Asset.typeSlug`,`Folder.description`,`Folder.name`]},runtime:`both`,demoSeed:{export:`@happyvertical/smrt-assets/playground#assetGridMockAssets`},demo:{mode:`server`,reasons:[`Needs a server because its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624).`]}}]},{id:`chat`,packageName:`@happyvertical/smrt-chat`,version:`0.57.9`,description:`Chat rooms, DMs, threads, and agent conversations for the SMRT framework`,models:[{id:`@happyvertical/smrt-chat:AgentSession`,name:`AgentSession`,collection:`agentsessions`,description:`Agent conversation session.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`agentId`,type:`text`,required:!0,default:``},{name:`agentProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`participantProfileId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`chatRoomId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-chat:ChatRoom`},{name:`status`,type:`text`,required:!0,default:`active`,enum:[`active`,`closed`,`expired`]},{name:`allowedTools`,type:`text`,required:!1,default:`[]`},{name:`sessionContext`,type:`text`,required:!1,default:`{}`},{name:`systemPrompt`,type:`text`,required:!1,default:``},{name:`messageCount`,type:`integer`,required:!1,default:0},{name:`totalTokensUsed`,type:`integer`,required:!1,default:0},{name:`maxTokens`,type:`integer`,required:!1,default:0},{name:`maxMessages`,type:`integer`,required:!1,default:0},{name:`lastMessageAt`,type:`datetime`,required:!1},{name:`expiresAt`,type:`datetime`,required:!1},{name:`closedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/agentsessions`},{method:`GET`,path:`/agentsessions/[id]`}],mcp:[{operation:`get`,name:`agentsession_get`},{operation:`list`,name:`agentsession_list`}],cli:[{operation:`close`,name:`agentsession_close`},{operation:`create`,name:`agentsession_create`},{operation:`delete`,name:`agentsession_delete`},{operation:`expire`,name:`agentsession_expire`},{operation:`get`,name:`agentsession_get`},{operation:`getAllowedTools`,name:`agentsession_getAllowedTools`},{operation:`getSessionContext`,name:`agentsession_getSessionContext`},{operation:`getSessionKey`,name:`agentsession_getSessionKey`},{operation:`isActive`,name:`agentsession_isActive`},{operation:`isExpired`,name:`agentsession_isExpired`},{operation:`isToolAllowed`,name:`agentsession_isToolAllowed`},{operation:`list`,name:`agentsession_list`},{operation:`recordMessage`,name:`agentsession_recordMessage`},{operation:`setAllowedTools`,name:`agentsession_setAllowedTools`},{operation:`setSessionContext`,name:`agentsession_setSessionContext`},{operation:`update`,name:`agentsession_update`},{operation:`updateSessionContext`,name:`agentsession_updateSessionContext`},{operation:`expireStale`,name:`agentsessioncollection_expireStale`},{operation:`findActiveByParticipant`,name:`agentsessioncollection_findActiveByParticipant`},{operation:`findActiveSession`,name:`agentsessioncollection_findActiveSession`},{operation:`findByAgent`,name:`agentsessioncollection_findByAgent`},{operation:`findOrCreate`,name:`agentsessioncollection_findOrCreate`}],methods:[{name:`close`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`expire`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`expireStale`,async:!0,parameters:[`olderThan: Date`,`scope?: object`],returnType:`Promise<number>`,aiCallable:!1},{name:`findActiveByParticipant`,async:!0,parameters:[`participantProfileId: string`],returnType:`Promise<AgentSession[]>`,aiCallable:!1},{name:`findActiveSession`,async:!0,parameters:[`agentId: string`,`participantProfileId: string`,`tenantId: string | null`,`sessionKey?: string | null`],returnType:`Promise<AgentSession | null>`,aiCallable:!1},{name:`findByAgent`,async:!0,parameters:[`agentId: string`],returnType:`Promise<AgentSession[]>`,aiCallable:!1},{name:`findOrCreate`,async:!0,parameters:[`params: object`],returnType:`Promise<AgentSession>`,aiCallable:!1},{name:`getAllowedTools`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getSessionContext`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getSessionKey`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isToolAllowed`,async:!1,parameters:[`toolName: string`],returnType:`boolean`,aiCallable:!1},{name:`recordMessage`,async:!0,parameters:[`tokensUsed?: number`],returnType:`Promise<void>`,aiCallable:!1},{name:`setAllowedTools`,async:!1,parameters:[`tools: string[]`],returnType:`void`,aiCallable:!1},{name:`setSessionContext`,async:!1,parameters:[`ctx: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`updateSessionContext`,async:!0,parameters:[`updates: Record<string, unknown>`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-chat:ChatRoom`,`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-chat:ChatMessage`,name:`ChatMessage`,collection:`chatmessages`,description:`Chat message. Internal model — all mutations must go through the membership-checked ChatService (S5 #1392).`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`roomId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-chat:ChatRoom`,description:`The room in which this message was sent.`},{name:`threadId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-chat:ChatThread`,description:`The discussion thread containing this message, when there is one.`},{name:`senderProfileId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-profiles:Profile`,description:`The person or assistant who sent this message.`},{name:`agentSessionId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-chat:AgentSession`,description:`The assistant conversation associated with this message, when applicable.`},{name:`content`,type:`text`,required:!1,default:``,description:`The text of the message shared with the conversation.`},{name:`messageType`,type:`text`,required:!0,default:`text`,enum:[`text`,`system`,`action`,`file`,`tool_call`,`tool_result`],description:`The kind of message, such as text, a file, or an activity notice.`},{name:`role`,type:`text`,required:!0,default:`user`,enum:[`user`,`assistant`,`system`,`tool`],description:`Whether this message comes from a person, an assistant, or an automated action.`},{name:`isEdited`,type:`boolean`,required:!1,default:!1,description:`Whether the message has changed since it was sent.`},{name:`editedAt`,type:`datetime`,required:!1,description:`When the message was most recently edited.`},{name:`isDeleted`,type:`boolean`,required:!1,default:!1,description:`Whether this message has been removed from the conversation.`},{name:`replyToMessageId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-chat:ChatMessage`,description:`The earlier message this reply responds to.`},{name:`metadata`,type:`text`,required:!1,default:`{}`,description:`Additional message details maintained by the application.`},{name:`toolCallData`,type:`text`,required:!1,description:`Details of an automated action associated with this message.`},{name:`attachments`,type:`text`,required:!1,default:`[]`,description:`Files shared alongside the text of this message.`}],rest:[{method:`GET`,path:`/chatmessages`},{method:`GET`,path:`/chatmessages/[id]`}],mcp:[{operation:`get`,name:`chatmessage_get`},{operation:`list`,name:`chatmessage_list`}],cli:[{operation:`create`,name:`chatmessage_create`},{operation:`delete`,name:`chatmessage_delete`},{operation:`edit`,name:`chatmessage_edit`},{operation:`get`,name:`chatmessage_get`},{operation:`getAttachments`,name:`chatmessage_getAttachments`},{operation:`getMetadata`,name:`chatmessage_getMetadata`},{operation:`getPreview`,name:`chatmessage_getPreview`},{operation:`getToolCallData`,name:`chatmessage_getToolCallData`},{operation:`hasAttachments`,name:`chatmessage_hasAttachments`},{operation:`isFromAgent`,name:`chatmessage_isFromAgent`},{operation:`isSystemMessage`,name:`chatmessage_isSystemMessage`},{operation:`isToolCall`,name:`chatmessage_isToolCall`},{operation:`isToolResult`,name:`chatmessage_isToolResult`},{operation:`list`,name:`chatmessage_list`},{operation:`setAttachments`,name:`chatmessage_setAttachments`},{operation:`setMetadata`,name:`chatmessage_setMetadata`},{operation:`setToolCallData`,name:`chatmessage_setToolCallData`},{operation:`softDelete`,name:`chatmessage_softDelete`},{operation:`update`,name:`chatmessage_update`},{operation:`getByAgentSession`,name:`chatmessagecollection_getByAgentSession`},{operation:`getByRoom`,name:`chatmessagecollection_getByRoom`},{operation:`getByThread`,name:`chatmessagecollection_getByThread`},{operation:`getLatestPerRoom`,name:`chatmessagecollection_getLatestPerRoom`},{operation:`getUnreadCount`,name:`chatmessagecollection_getUnreadCount`},{operation:`search`,name:`chatmessagecollection_search`}],methods:[{name:`edit`,async:!0,parameters:[`newContent: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`getAttachments`,async:!1,parameters:[],returnType:`Array<object>`,aiCallable:!1},{name:`getByAgentSession`,async:!0,parameters:[`agentSessionId: string`,`tenantId: string`],returnType:`Promise<ChatMessage[]>`,aiCallable:!1},{name:`getByRoom`,async:!0,parameters:[`roomId: string`,`tenantId: string`,`options?: object`],returnType:`Promise<ChatMessage[]>`,aiCallable:!1},{name:`getByThread`,async:!0,parameters:[`threadId: string`,`tenantId: string`],returnType:`Promise<ChatMessage[]>`,aiCallable:!1},{name:`getLatestPerRoom`,async:!0,parameters:[`roomIds: string[]`,`tenantId: string`],returnType:`Promise<Map<string, ChatMessage>>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getPreview`,async:!1,parameters:[`maxLength?: any`],returnType:`string`,aiCallable:!1},{name:`getToolCallData`,async:!1,parameters:[],returnType:`Record<string, unknown> | null`,aiCallable:!1},{name:`getUnreadCount`,async:!0,parameters:[`roomId: string`,`tenantId: string`,`lastReadMessageId: string | null`],returnType:`Promise<number>`,aiCallable:!1},{name:`hasAttachments`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isFromAgent`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSystemMessage`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isToolCall`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isToolResult`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`search`,async:!0,parameters:[`filters: any`],returnType:`Promise<ChatMessage[]>`,aiCallable:!1},{name:`setAttachments`,async:!1,parameters:[`items: Array<object>`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setToolCallData`,async:!1,parameters:[`data: Record<string, unknown> | null`],returnType:`void`,aiCallable:!1},{name:`softDelete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-chat:AgentSession`,`@happyvertical/smrt-chat:ChatMessage`,`@happyvertical/smrt-chat:ChatRoom`,`@happyvertical/smrt-chat:ChatThread`,`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-chat:ChatParticipant`,name:`ChatParticipant`,collection:`chatparticipants`,description:`Room membership row. Internal model — membership must be established and mutated only through the membership/owner-checked ChatService (S5 #1392).`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`roomId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-chat:ChatRoom`,description:`The room to which this membership belongs.`},{name:`profileId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-profiles:Profile`,description:`The person or assistant participating in the room.`},{name:`role`,type:`text`,required:!0,default:`member`,enum:[`owner`,`admin`,`member`,`viewer`],description:`The member role that determines what they can do in the room.`},{name:`status`,type:`text`,required:!0,default:`active`,enum:[`active`,`left`,`kicked`,`banned`],description:`Whether this member is active, has left, was removed, or is banned.`},{name:`onlineStatus`,type:`text`,required:!0,default:`offline`,enum:[`online`,`away`,`dnd`,`offline`],description:`The availability shown for this member, such as online or away.`},{name:`lastReadMessageId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-chat:ChatMessage`,description:`The most recent message this member has read.`},{name:`lastSeenAt`,type:`datetime`,required:!1,description:`When this member was last seen in the conversation.`},{name:`joinedAt`,type:`datetime`,required:!1,description:`When this member joined the room.`},{name:`nickname`,type:`text`,required:!1,default:``,description:`The display name this member uses within the room.`},{name:`isMuted`,type:`boolean`,required:!1,default:!1,description:`Whether notifications for this room are muted for this member.`},{name:`isPinned`,type:`boolean`,required:!1,default:!1,description:`Whether this room is pinned for this member.`}],rest:[{method:`GET`,path:`/chatparticipants`},{method:`GET`,path:`/chatparticipants/[id]`}],mcp:[{operation:`get`,name:`chatparticipant_get`},{operation:`list`,name:`chatparticipant_list`}],cli:[{operation:`create`,name:`chatparticipant_create`},{operation:`delete`,name:`chatparticipant_delete`},{operation:`get`,name:`chatparticipant_get`},{operation:`isActive`,name:`chatparticipant_isActive`},{operation:`isAdmin`,name:`chatparticipant_isAdmin`},{operation:`isOwner`,name:`chatparticipant_isOwner`},{operation:`leave`,name:`chatparticipant_leave`},{operation:`list`,name:`chatparticipant_list`},{operation:`markRead`,name:`chatparticipant_markRead`},{operation:`setOnline`,name:`chatparticipant_setOnline`},{operation:`update`,name:`chatparticipant_update`},{operation:`countInRoom`,name:`chatparticipantcollection_countInRoom`},{operation:`findActiveMembership`,name:`chatparticipantcollection_findActiveMembership`},{operation:`findMembership`,name:`chatparticipantcollection_findMembership`},{operation:`getAdminsInRoom`,name:`chatparticipantcollection_getAdminsInRoom`},{operation:`getByProfile`,name:`chatparticipantcollection_getByProfile`},{operation:`getByRoom`,name:`chatparticipantcollection_getByRoom`},{operation:`getOnlineInRoom`,name:`chatparticipantcollection_getOnlineInRoom`},{operation:`isActiveMember`,name:`chatparticipantcollection_isActiveMember`}],methods:[{name:`countInRoom`,async:!0,parameters:[`roomId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`findActiveMembership`,async:!0,parameters:[`roomId: string`,`profileId: string`,`tenantId: string`],returnType:`Promise<ChatParticipant | null>`,aiCallable:!1},{name:`findMembership`,async:!0,parameters:[`roomId: string`,`profileId: string`,`tenantId?: string`],returnType:`Promise<ChatParticipant | null>`,aiCallable:!1},{name:`getAdminsInRoom`,async:!0,parameters:[`roomId: string`],returnType:`Promise<ChatParticipant[]>`,aiCallable:!1},{name:`getByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<ChatParticipant[]>`,aiCallable:!1},{name:`getByRoom`,async:!0,parameters:[`roomId: string`],returnType:`Promise<ChatParticipant[]>`,aiCallable:!1},{name:`getOnlineInRoom`,async:!0,parameters:[`roomId: string`],returnType:`Promise<ChatParticipant[]>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isActiveMember`,async:!0,parameters:[`roomId: string`,`profileId: string`,`tenantId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isAdmin`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOwner`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`leave`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`markRead`,async:!0,parameters:[`messageId: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`setOnline`,async:!0,parameters:[`status: OnlineStatus`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-chat:ChatMessage`,`@happyvertical/smrt-chat:ChatRoom`,`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-chat:ChatReaction`,name:`ChatReaction`,collection:`chatreactions`,description:`Message reaction. Internal model — reactions must be added/removed only through the membership-checked ChatService (S5 #1392).`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`messageId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-chat:ChatMessage`,description:`The message to which this reaction was added.`},{name:`profileId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-profiles:Profile`,description:`The person who added this reaction.`},{name:`emoji`,type:`text`,required:!0,default:``,description:`The symbol chosen to express a response to the message.`}],rest:[{method:`GET`,path:`/chatreactions`}],mcp:[{operation:`list`,name:`chatreaction_list`}],cli:[],methods:[{name:`getByMessage`,async:!0,parameters:[`messageId: string`],returnType:`Promise<ChatReaction[]>`,aiCallable:!1},{name:`getReactionCounts`,async:!0,parameters:[`messageId: string`],returnType:`Promise<Map<string, object>>`,aiCallable:!1},{name:`toggle`,async:!0,parameters:[`messageId: string`,`profileId: string`,`emoji: string`,`tenantId: string`],returnType:`Promise<object>`,aiCallable:!1}],references:[`@happyvertical/smrt-chat:ChatMessage`,`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-chat:ChatRoom`,name:`ChatRoom`,collection:`chatrooms`,description:`Chat room supporting public channels, private groups, DMs, and agent conversations.`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`name`,type:`text`,required:!1,default:``,description:`A recognizable name that helps teammates find this room.`},{name:`description`,type:`text`,required:!1,default:``,description:`Explain the purpose of the room and who should join.`},{name:`roomType`,type:`text`,required:!0,default:`public`,enum:[`public`,`private`,`dm`,`agent`],description:`Whether the room is public, private, a direct message, or an assistant conversation.`},{name:`status`,type:`text`,required:!0,default:`active`,enum:[`active`,`archived`,`deleted`],description:`Whether this room is active, archived, or deleted.`},{name:`topic`,type:`text`,required:!1,default:``,description:`The current subject or focus of the room.`},{name:`avatarUrl`,type:`text`,required:!1,default:``,description:`The address of the image used to represent this room.`},{name:`isArchived`,type:`boolean`,required:!1,default:!1,description:`Whether the room has been archived from active conversations.`},{name:`maxParticipants`,type:`integer`,required:!1,default:0,description:`The maximum number of members; zero means no configured limit.`},{name:`metadata`,type:`text`,required:!1,default:`{}`,description:`Additional room details maintained by the application.`},{name:`createdByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`The person who originally created this room.`},{name:`lastMessageAt`,type:`datetime`,required:!1,description:`When the most recent message was sent in this room.`}],rest:[{method:`GET`,path:`/chatrooms`},{method:`GET`,path:`/chatrooms/[id]`}],mcp:[{operation:`get`,name:`chatroom_get`},{operation:`list`,name:`chatroom_list`}],cli:[{operation:`archive`,name:`chatroom_archive`},{operation:`create`,name:`chatroom_create`},{operation:`delete`,name:`chatroom_delete`},{operation:`get`,name:`chatroom_get`},{operation:`getMetadata`,name:`chatroom_getMetadata`},{operation:`isActive`,name:`chatroom_isActive`},{operation:`isAgentRoom`,name:`chatroom_isAgentRoom`},{operation:`isDM`,name:`chatroom_isDM`},{operation:`isPublic`,name:`chatroom_isPublic`},{operation:`list`,name:`chatroom_list`},{operation:`setMetadata`,name:`chatroom_setMetadata`},{operation:`unarchive`,name:`chatroom_unarchive`},{operation:`update`,name:`chatroom_update`},{operation:`updateMetadata`,name:`chatroom_updateMetadata`},{operation:`findAgentRooms`,name:`chatroomcollection_findAgentRooms`},{operation:`findByType`,name:`chatroomcollection_findByType`},{operation:`findDMs`,name:`chatroomcollection_findDMs`},{operation:`findOrCreateDM`,name:`chatroomcollection_findOrCreateDM`},{operation:`findPublic`,name:`chatroomcollection_findPublic`},{operation:`search`,name:`chatroomcollection_search`}],methods:[{name:`archive`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`findAgentRooms`,async:!0,parameters:[],returnType:`Promise<ChatRoom[]>`,aiCallable:!1},{name:`findByType`,async:!0,parameters:[`roomType: ChatRoomType`],returnType:`Promise<ChatRoom[]>`,aiCallable:!1},{name:`findDMs`,async:!0,parameters:[],returnType:`Promise<ChatRoom[]>`,aiCallable:!1},{name:`findOrCreateDM`,async:!0,parameters:[`profileId1: string`,`profileId2: string`,`tenantId: string`,`participants: ChatParticipantCollection`],returnType:`Promise<ChatRoom>`,aiCallable:!1},{name:`findPublic`,async:!0,parameters:[],returnType:`Promise<ChatRoom[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`ChatRoomMetadata`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isAgentRoom`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDM`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPublic`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`search`,async:!0,parameters:[`query: string`,`options?: object`],returnType:`Promise<ChatRoom[]>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: ChatRoomMetadata`],returnType:`void`,aiCallable:!1},{name:`unarchive`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: ChatRoomMetadata`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-chat:ChatThread`,name:`ChatThread`,collection:`chatthreads`,description:`Conversation thread. Internal model — threads must be created/mutated only through the membership-checked ChatService (S5 #1392).`,display:{label:`title`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`roomId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-chat:ChatRoom`,description:`The room containing this discussion thread.`},{name:`rootMessageId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-chat:ChatMessage`,description:`The message that started this thread, when it began as a reply.`},{name:`title`,type:`text`,required:!1,default:``,description:`A short title describing the subject of this thread.`},{name:`isResolved`,type:`boolean`,required:!1,default:!1,description:`Whether the discussion has reached a resolution.`},{name:`messageCount`,type:`integer`,required:!1,default:0,description:`The number of messages in this thread.`},{name:`lastMessageAt`,type:`datetime`,required:!1,description:`When the most recent message was sent in this thread.`},{name:`participantCount`,type:`integer`,required:!1,default:0,description:`The number of people participating in this thread.`}],rest:[{method:`GET`,path:`/chatthreads`},{method:`GET`,path:`/chatthreads/[id]`}],mcp:[{operation:`get`,name:`chatthread_get`},{operation:`list`,name:`chatthread_list`}],cli:[{operation:`create`,name:`chatthread_create`},{operation:`delete`,name:`chatthread_delete`},{operation:`get`,name:`chatthread_get`},{operation:`list`,name:`chatthread_list`},{operation:`reopen`,name:`chatthread_reopen`},{operation:`resolve`,name:`chatthread_resolve`},{operation:`update`,name:`chatthread_update`},{operation:`getActive`,name:`chatthreadcollection_getActive`},{operation:`getByRoom`,name:`chatthreadcollection_getByRoom`},{operation:`getUnresolved`,name:`chatthreadcollection_getUnresolved`}],methods:[{name:`getActive`,async:!0,parameters:[`roomId: string`],returnType:`Promise<ChatThread[]>`,aiCallable:!1},{name:`getByRoom`,async:!0,parameters:[`roomId: string`],returnType:`Promise<ChatThread[]>`,aiCallable:!1},{name:`getUnresolved`,async:!0,parameters:[],returnType:`Promise<ChatThread[]>`,aiCallable:!1},{name:`reopen`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`resolve`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-chat:ChatMessage`,`@happyvertical/smrt-chat:ChatRoom`],exposed:!0},{id:`@happyvertical/smrt-chat:VoiceGatewayTurn`,name:`VoiceGatewayTurn`,collection:`voicegatewayturns`,description:`Durable reservation for a gateway turn. The natural key makes turn_id replay checks concurrency-safe before transcript messages are written.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`voiceSessionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-chat:VoiceSession`},{name:`gatewaySessionId`,type:`text`,required:!0,default:``},{name:`gatewayTurnId`,type:`text`,required:!0,default:``},{name:`target`,type:`text`,required:!0,default:`smrt:chat`},{name:`status`,type:`text`,required:!0,default:`processing`,enum:[`processing`,`completed`,`failed`]},{name:`completedAt`,type:`datetime`,required:!1},{name:`failedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/voicegatewayturns`},{method:`GET`,path:`/voicegatewayturns/[id]`}],mcp:[{operation:`get`,name:`voicegatewayturn_get`},{operation:`list`,name:`voicegatewayturn_list`}],cli:[],methods:[{name:`complete`,async:!0,parameters:[`now?: Date`],returnType:`Promise<void>`,aiCallable:!1},{name:`fail`,async:!0,parameters:[`now?: Date`],returnType:`Promise<void>`,aiCallable:!1},{name:`reserveTurn`,async:!0,parameters:[`input: object`],returnType:`Promise<VoiceGatewayTurn>`,aiCallable:!1}],references:[`@happyvertical/smrt-chat:VoiceSession`],exposed:!0},{id:`@happyvertical/smrt-chat:VoiceSession`,name:`VoiceSession`,collection:`voicesessions`,description:`Short-lived binding proving a voice gateway turn belongs to an authenticated SMRT actor, persona, and chat session.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`gatewaySessionId`,type:`text`,required:!0,default:``},{name:`actorProfileId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`actorUserId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:User`},{name:`personaId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-personas:AgentPersona`},{name:`agentSessionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-chat:AgentSession`},{name:`chatRoomId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-chat:ChatRoom`},{name:`threadId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-chat:ChatThread`},{name:`target`,type:`text`,required:!0,default:`smrt:chat`},{name:`status`,type:`text`,required:!0,default:`active`,enum:[`active`,`expired`,`revoked`]},{name:`expiresAt`,type:`datetime`,required:!0},{name:`lastTurnAt`,type:`datetime`,required:!1},{name:`lastGatewayTurnId`,type:`text`,required:!1},{name:`personaSnapshot`,type:`text`,required:!1,default:`{}`},{name:`metadata`,type:`text`,required:!1,default:`{}`},{name:`processedTurnIds`,type:`text`,required:!1,default:`[]`}],rest:[{method:`GET`,path:`/voicesessions`},{method:`GET`,path:`/voicesessions/[id]`}],mcp:[{operation:`get`,name:`voicesession_get`},{operation:`list`,name:`voicesession_list`}],cli:[{operation:`create`,name:`voicesession_create`},{operation:`delete`,name:`voicesession_delete`},{operation:`expire`,name:`voicesession_expire`},{operation:`get`,name:`voicesession_get`},{operation:`getMetadata`,name:`voicesession_getMetadata`},{operation:`getPersonaSnapshot`,name:`voicesession_getPersonaSnapshot`},{operation:`getProcessedTurnIds`,name:`voicesession_getProcessedTurnIds`},{operation:`hasProcessedTurn`,name:`voicesession_hasProcessedTurn`},{operation:`isActive`,name:`voicesession_isActive`},{operation:`isExpired`,name:`voicesession_isExpired`},{operation:`list`,name:`voicesession_list`},{operation:`recordGatewayTurn`,name:`voicesession_recordGatewayTurn`},{operation:`revoke`,name:`voicesession_revoke`},{operation:`setMetadata`,name:`voicesession_setMetadata`},{operation:`setPersonaSnapshot`,name:`voicesession_setPersonaSnapshot`},{operation:`update`,name:`voicesession_update`},{operation:`expireStale`,name:`voicesessioncollection_expireStale`},{operation:`getActiveById`,name:`voicesessioncollection_getActiveById`}],methods:[{name:`expire`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`expireStale`,async:!0,parameters:[`olderThan?: Date`,`scope?: object`],returnType:`Promise<number>`,aiCallable:!1},{name:`getActiveById`,async:!0,parameters:[`id: string`,`target?: any`],returnType:`Promise<VoiceSession | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getPersonaSnapshot`,async:!1,parameters:[],returnType:`ConversationPersona`,aiCallable:!1},{name:`getProcessedTurnIds`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`hasProcessedTurn`,async:!1,parameters:[`turnId: string`],returnType:`boolean`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[`now?: Date`],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[`now?: Date`],returnType:`boolean`,aiCallable:!1},{name:`recordGatewayTurn`,async:!1,parameters:[`turnId: string`,`maxRememberedTurns?: any`],returnType:`void`,aiCallable:!1},{name:`revoke`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setPersonaSnapshot`,async:!1,parameters:[`persona: ConversationPersona`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-chat:AgentSession`,`@happyvertical/smrt-chat:ChatRoom`,`@happyvertical/smrt-chat:ChatThread`,`@happyvertical/smrt-personas:AgentPersona`,`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-users:User`],exposed:!0}],dependencies:[`assets`,`images`,`profiles`,`reports`,`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3615`,`#3617`,`#3624`,`#3625`,`#3626`,`#3627`,`#3628`],reason:`node:crypto + node:async_hooks`,via:[`@happyvertical/smrt-agents`,`@happyvertical/smrt-images`,`@happyvertical/smrt-jobs`,`@happyvertical/smrt-profiles`,`@happyvertical/smrt-reports`,`@happyvertical/smrt-secrets`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`]},recipes:[{id:`chat.assistant`,label:`Assistant`,summary:`Ask an AI assistant about the page you are on, from a dock in the app shell.`,synonyms:[`ai assistant`,`ai chat`,`copilot`,`chatbot`,`ask ai`,`helper`],models:[`@happyvertical/smrt-chat:AgentSession`,`@happyvertical/smrt-chat:ChatRoom`,`@happyvertical/smrt-chat:ChatParticipant`,`@happyvertical/smrt-chat:ChatThread`,`@happyvertical/smrt-chat:ChatMessage`],nav:[],requires:[],help:{markdown:`## Overview
96
-
97
- The assistant is a chat panel that opens from a button in the app's top bar. It
98
- sees the page you are on, so you can ask about what is in front of you and get
99
- an answer without leaving it.
100
-
101
- You can keep several conversations and come back to them later. The assistant
102
- only reaches the data and actions the app owner allows, and it works with your
103
- own permissions: it cannot show you anything you could not open yourself.
104
-
105
- ## Tasks
106
-
107
- ### Ask a question
108
-
109
- 1. Choose the assistant button in the top bar to open the panel.
110
- 2. Type your question and send it.
111
- 3. Read the reply as it arrives. Open the panel again from any page to carry on.
112
-
113
- ### Start a new conversation
114
-
115
- 1. Open the panel and choose the conversation list.
116
- 2. Start a new conversation, or pick an earlier one to carry on.
117
-
118
- ### Approve a change
119
-
120
- When the assistant proposes a change, it shows what will happen and waits.
121
-
122
- 1. Read the proposed change.
123
- 2. Confirm it to go ahead, or reject it. Nothing changes until you confirm.
124
-
125
- ### Choose a model
126
-
127
- If the app offers more than one model, pick one from the list in the panel
128
- before you send a message.
129
-
130
- ## What the app owner sets up
131
-
132
- - A model. Hosted models need the service key their provider issues, stored as
133
- a secret in the app (\`OPENAI_API_KEY\`, \`ANTHROPIC_API_KEY\` or
134
- \`GEMINI_API_KEY\`); only the key for the model the app uses is needed. Models
135
- that run in the browser need no key.
136
- - The tools the assistant may use. It is offered nothing unless the app lists
137
- it, so an empty list means conversation only.
138
- - Optionally, report tools. An app can let the assistant draft a report from a
139
- request, preview it, and save it only after a person approves that exact
140
- report.
141
- `,fieldRefs:[]},surfaces:[{kind:`shell-widget`,slot:`header.end`,export:`@happyvertical/smrt-chat/svelte#AssistantDock`,label:`Assistant`,icon:`bot`}],providers:[{id:`llm`,kind:`llm`,options:[`openai`,`anthropic`,`gemini`,`webllm`,`bitgpu`],required:!0,secrets:[`OPENAI_API_KEY`,`ANTHROPIC_API_KEY`,`GEMINI_API_KEY`],browserOptions:[`webllm`,`bitgpu`]}],runtime:`both`,demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: node:crypto + node:async_hooks; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-images, @happyvertical/smrt-jobs, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3617, #3624, #3625, #3626, #3627, #3628).`,`Provider llm has an in-browser option (webllm, bitgpu).`]}},{id:`chat.rooms`,label:`Team Chat`,summary:`Organize team conversations in rooms with threads and reactions.`,synonyms:[`team chat`,`channels`,`group chat`,`conversations`],models:[`@happyvertical/smrt-chat:ChatRoom`,`@happyvertical/smrt-chat:ChatMessage`,`@happyvertical/smrt-chat:ChatParticipant`,`@happyvertical/smrt-chat:ChatThread`,`@happyvertical/smrt-chat:ChatReaction`],nav:[{label:`Chat rooms`,model:`@happyvertical/smrt-chat:ChatRoom`,icon:`users`,description:`Team conversations organized by topic or audience.`,noun:`chat room`}],requires:[],group:{id:`team-collaboration`,label:`Team collaboration`,summary:`Keep conversations and shared work in one place.`},section:{id:`team`,label:`Team`,icon:`users`,description:`People and the conversations that keep them aligned.`},options:{"@happyvertical/smrt-chat:ChatRoom":{fields:{metadata:{visibility:`hidden`},createdByProfileId:{visibility:`hidden`},lastMessageAt:{label:`Last message`,order:1}}},"@happyvertical/smrt-chat:ChatMessage":{fields:{metadata:{visibility:`hidden`},toolCallData:{visibility:`hidden`},attachments:{visibility:`advanced`}}},"@happyvertical/smrt-chat:ChatParticipant":{fields:{lastReadMessageId:{visibility:`hidden`},lastSeenAt:{visibility:`advanced`}}}},help:{markdown:`## Overview
142
-
143
- Team Chat keeps conversations in rooms so people can find the right discussion,
144
- follow threads, and see reactions without mixing unrelated work together. The
145
- room and message lists are read-only generated views. Create rooms, manage
146
- members, and send messages through the app's authorized chat workflow.
147
-
148
- ## Tasks
149
-
150
- ### Find the right room
151
-
152
- 1. Open **Chat rooms** from the navigation.
153
- 2. Search for a room by its **{field:ChatRoom.name}**, or use its
154
- **{field:ChatRoom.topic}** to tell similar rooms apart.
155
- 3. Open the room and check **{field:ChatRoom.lastMessageAt}** to see where the
156
- most recent discussion happened.
157
-
158
- ### Follow a conversation
159
-
160
- 1. Read the room messages and open a thread when you need the discussion in
161
- one place.
162
- 2. Use the thread **{field:ChatThread.title}** to describe the subject when
163
- your app supplies one.
164
- 3. Add a reaction by choosing the **{field:ChatReaction.emoji}** that best
165
- communicates your response.
166
-
167
- ### Keep a room useful
168
-
169
- 1. Give the room a clear **{field:ChatRoom.name}** and a short
170
- **{field:ChatRoom.description}**.
171
- 2. Set **{field:ChatRoom.roomType}** deliberately: public for broad team
172
- discussion, private for restricted groups, and direct messages for one-to-one
173
- conversations.
174
- 3. Use a focused **{field:ChatMessage.content}** so teammates can scan the
175
- conversation and reply in context.
176
- `,fieldRefs:[`ChatMessage.content`,`ChatReaction.emoji`,`ChatRoom.description`,`ChatRoom.lastMessageAt`,`ChatRoom.name`,`ChatRoom.roomType`,`ChatRoom.topic`,`ChatThread.title`]},surfaces:[{kind:`route`,path:`/chat/rooms`,export:`@happyvertical/smrt-chat/svelte#ChatLayout`,label:`Team chat`}],runtime:`both`,demoSeed:{export:`@happyvertical/smrt-chat/playground#chatRoomsFixture`},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: node:crypto + node:async_hooks; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-images, @happyvertical/smrt-jobs, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3617, #3624, #3625, #3626, #3627, #3628).`]}}]},{id:`comments`,packageName:`@happyvertical/smrt-comments`,version:`0.57.9`,description:`Record comments and mention hooks for SMRT applications`,models:[{id:`@happyvertical/smrt-comments:Comment`,name:`Comment`,collection:`comments`,fields:[{name:`metaType`,type:`text`,required:!0},{name:`metaId`,type:`text`,required:!0},{name:`role`,type:`text`,required:!0},{name:`sortOrder`,type:`integer`,required:!1,default:0},{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`authorUserId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:User`},{name:`body`,type:`text`,required:!0},{name:`mentions`,type:`text`,required:!1},{name:`idempotencyKey`,type:`text`,required:!1},{name:`retryTenantId`,type:`text`,required:!1},{name:`requestDigest`,type:`text`,required:!1},{name:`parentCommentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-comments:Comment`},{name:`status`,type:`text`,required:!0,default:`visible`,enum:[`visible`,`hidden`,`pending`,`deleted`]},{name:`participationSnapshot`,type:`text`,required:!1},{name:`editedAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`hydrate`,async:!0,parameters:[],returnType:`Promise<T | null>`,aiCallable:!1},{name:`listForRecord`,async:!0,parameters:[`recordType: string`,`recordId: string`],returnType:`Promise<Comment[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-comments:Comment`,`@happyvertical/smrt-users:User`],exposed:!1},{id:`@happyvertical/smrt-comments:CommentReport`,name:`CommentReport`,collection:`commentreports`,description:`A tenant-local report; moderation resolution never deletes the report.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`commentId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-comments:Comment`},{name:`reporterUserId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:User`},{name:`reason`,type:`text`,required:!0},{name:`status`,type:`text`,required:!0,default:`open`,enum:[`open`,`resolved`,`dismissed`]}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-comments:Comment`,`@happyvertical/smrt-users:User`],exposed:!1},{id:`@happyvertical/smrt-comments:CommentRevision`,name:`CommentRevision`,collection:`commentrevisions`,description:`Immutable prior body retained whenever an author edits a comment.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`commentId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-comments:Comment`},{name:`editorUserId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:User`},{name:`body`,type:`text`,required:!0}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-comments:Comment`,`@happyvertical/smrt-users:User`],exposed:!1},{id:`@happyvertical/smrt-comments:ParticipationBan`,name:`ParticipationBan`,collection:`participationbans`,description:`Tenant-local, reusable participation ban; a blank target applies tenant-wide.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`actorUserId`,type:`text`,required:!0},{name:`recordType`,type:`text`,required:!1},{name:`recordId`,type:`text`,required:!1},{name:`reason`,type:`text`,required:!0},{name:`expiresAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[],references:[],exposed:!1},{id:`@happyvertical/smrt-comments:ParticipationPolicy`,name:`ParticipationPolicy`,collection:`participationpolicies`,description:`A generic tenant default or exact-record override for participation actions.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`recordType`,type:`text`,required:!1},{name:`recordId`,type:`text`,required:!1},{name:`action`,type:`text`,required:!0},{name:`moderationMode`,type:`text`,required:!0,default:`open`,enum:[`open`,`pre_moderated`,`members_only`,`closed`]},{name:`maxActions`,type:`integer`,required:!0,default:0},{name:`windowSeconds`,type:`integer`,required:!0,default:0}],rest:[],mcp:[],cli:[],methods:[],references:[],exposed:!1},{id:`@happyvertical/smrt-comments:ParticipationRateBucket`,name:`ParticipationRateBucket`,collection:`participationratebuckets`,description:`Service-owned fixed-window counter. Never delete a currently active bucket.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`bucketKey`,type:`text`,required:!0},{name:`actionCount`,type:`integer`,required:!0,default:0}],rest:[],mcp:[],cli:[],methods:[],references:[],exposed:!1}],dependencies:[`messages`,`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`],via:[`@happyvertical/smrt-tenancy`]},recipes:[{id:`comments.records`,label:`Record comments`,summary:`Discuss work directly on the records it concerns.`,synonyms:[`comments`,`mentions`,`discussion`],models:[`@happyvertical/smrt-comments:Comment`,`@happyvertical/smrt-comments:CommentRevision`,`@happyvertical/smrt-comments:CommentReport`,`@happyvertical/smrt-comments:ParticipationPolicy`,`@happyvertical/smrt-comments:ParticipationBan`,`@happyvertical/smrt-comments:ParticipationRateBucket`],nav:[],requires:[],group:{id:`comments`,label:`Comments`,summary:`Keep discussions alongside the records your team works on.`},help:{markdown:`## Overview
177
-
178
- Record comments keep a discussion next to the work it concerns. Open a record
179
- you can access to read its discussion or add a comment. Comments are part of
180
- the record page, rather than a separate list of every discussion.
181
-
182
- ## Tasks
183
-
184
- ### Add a comment
185
-
186
- Open the record, find Comments, write your message and choose Post comment.
187
- Your app controls who can read the record and who can contribute to its discussion.
188
-
189
- ### Mention someone
190
-
191
- If your app provides mention selection, choose a teammate who can access the
192
- record. When mention notifications are connected, that person receives a
193
- notification. Typing a name alone does not select a recipient.
194
-
195
- ### Check a failed post
196
-
197
- If posting reports an error, refresh the discussion before trying again. A
198
- comment may have been saved even when its mention notification could not be
199
- delivered. If it appears in the discussion, do not post it a second time.
200
- `,fieldRefs:[]},surfaces:[{kind:`playground`,export:`@happyvertical/smrt-comments/svelte#RecordCommentsPlayground`,label:`Record discussion preview`}],runtime:`both`,demoSeed:{export:`@happyvertical/smrt-comments/svelte#recordCommentsDemo`},demo:{mode:`server`,reasons:[`Needs a server because its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624).`]}}]},{id:`commerce`,packageName:`@happyvertical/smrt-commerce`,version:`0.57.9`,description:`Commerce models for the SMRT framework - contracts, fulfillments, payments`,models:[{id:`@happyvertical/smrt-commerce:Agreement`,name:`Agreement`,collection:`contracts`,extends:`@happyvertical/smrt-commerce:SalesContract`,description:`Service or maintenance agreement`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`},{name:`customerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-commerce:Customer`}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts`},{method:`PATCH`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`agreement_get`},{operation:`list`,name:`agreement_list`}],cli:[{operation:`create`,name:`agreement_create`},{operation:`delete`,name:`agreement_delete`},{operation:`deleteDerived`,name:`agreement_deleteDerived`},{operation:`get`,name:`agreement_get`},{operation:`isAccepted`,name:`agreement_isAccepted`},{operation:`isCompleted`,name:`agreement_isCompleted`},{operation:`isDraft`,name:`agreement_isDraft`},{operation:`isExpired`,name:`agreement_isExpired`},{operation:`isOverdue`,name:`agreement_isOverdue`},{operation:`list`,name:`agreement_list`},{operation:`rebindMoneyRead`,name:`agreement_rebindMoneyRead`},{operation:`recalculateTotals`,name:`agreement_recalculateTotals`},{operation:`saveDerived`,name:`agreement_saveDerived`},{operation:`update`,name:`agreement_update`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Customer`],exposed:!0},{id:`@happyvertical/smrt-commerce:BillingAccount`,name:`BillingAccount`,collection:`billingaccounts`,description:`One payer's account with one seller: the commerce Customer invoices are issued to, the provider customer they are pushed to, and the payer's billing terms.`,display:{label:`name`},fields:[{name:`sellerTenantId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:Tenant`},{name:`payerTenantId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:Tenant`},{name:`customerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Customer`},{name:`name`,type:`text`,required:!1,default:``},{name:`email`,type:`text`,required:!1,default:``},{name:`provider`,type:`text`,required:!1,default:``},{name:`providerCustomerId`,type:`text`,required:!1,default:``},{name:`automaticTax`,type:`boolean`,required:!1,default:!0},{name:`flatDiscountBasisPoints`,type:`integer`,required:!1,default:0},{name:`paymentTermsDays`,type:`integer`,required:!1,default:30},{name:`standing`,type:`text`,required:!1,default:`current`,enum:[`current`,`past_due`,`uncollectible`]},{name:`billingAnchorAt`,type:`datetime`,required:!1},{name:`prorateFlatPlans`,type:`boolean`,required:!1,default:!1}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-commerce:Customer`,`@happyvertical/smrt-users:Tenant`],exposed:!1},{id:`@happyvertical/smrt-commerce:BillingLineSource`,name:`BillingLineSource`,collection:`billinglinesources`,description:`A claim that one billable source — a charge, an adjustment, or a window of a flat plan — is billed on exactly one period close.`,fields:[{name:`sellerTenantId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:Tenant`},{name:`periodCloseId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:BillingPeriodClose`},{name:`sourceType`,type:`text`,required:!1,default:`client_charge`,enum:[`client_charge`,`billing_adjustment`,`retail_charge`,`subscription_period`,`credit_carry_forward`]},{name:`sourceId`,type:`text`,required:!1,default:``},{name:`lineKey`,type:`text`,required:!1,default:``},{name:`lineDescription`,type:`text`,required:!1,default:``},{name:`amount`,type:`integer`,required:!1,default:0},{name:`discount`,type:`integer`,required:!1,default:0},{name:`quantity`,type:`decimal`,required:!1,default:0},{name:`chainSequence`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`periodStart`,type:`datetime`,required:!1},{name:`periodEnd`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-commerce:BillingPeriodClose`,`@happyvertical/smrt-users:Tenant`],exposed:!1},{id:`@happyvertical/smrt-commerce:BillingPaymentAttempt`,name:`BillingPaymentAttempt`,collection:`billingpaymentattempts`,description:`One payment attempt on a payment rail (#3138): a short-lived provider checkout (for example a BTCPay invoice) paying a credit purchase or an issued invoice.`,fields:[{name:`sellerTenantId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:Tenant`},{name:`payerTenantId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:Tenant`},{name:`billingAccountId`,type:`text`,required:!1,default:``},{name:`purpose`,type:`text`,required:!1,default:`credit_purchase`,enum:[`credit_purchase`,`invoice_payment`]},{name:`invoiceId`,type:`text`,required:!1,default:``},{name:`spendingPolicyId`,type:`text`,required:!1,default:``},{name:`provider`,type:`text`,required:!1,default:``},{name:`orderId`,type:`text`,required:!1,default:``},{name:`checkoutId`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,default:`open`},{name:`exception`,type:`text`,required:!1,default:`none`},{name:`flag`,type:`text`,required:!1,default:``,enum:[``,`overpaid`,`underpaid`,`paid_late`,`manually_marked`,`invalidated_after_settlement`,`invoice_already_paid`,`amount_mismatch`,`out_of_band_without_settlement`]},{name:`amount`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`amountPaid`,type:`integer`,required:!1,default:0},{name:`nativeCurrency`,type:`text`,required:!1,default:``},{name:`nativeAmountDue`,type:`integer`,required:!1,default:0},{name:`nativeAmountPaid`,type:`integer`,required:!1,default:0},{name:`rate`,type:`text`,required:!1,default:``},{name:`rateSource`,type:`text`,required:!1,default:``},{name:`checkoutUrl`,type:`text`,required:!1,default:``},{name:`expiresAt`,type:`datetime`,required:!1},{name:`payments`,type:`json`,required:!1},{name:`timeline`,type:`json`,required:!1},{name:`settledAt`,type:`datetime`,required:!1},{name:`paymentId`,type:`text`,required:!1,default:``},{name:`creditGrantId`,type:`text`,required:!1,default:``},{name:`resolution`,type:`text`,required:!1,default:``},{name:`resolvedAt`,type:`datetime`,required:!1},{name:`outOfBandRequestedAt`,type:`datetime`,required:!1},{name:`pausedStanding`,type:`text`,required:!1,default:``},{name:`excessAmount`,type:`integer`,required:!1,default:0},{name:`excessRevision`,type:`integer`,required:!1,default:0},{name:`settlementOutcome`,type:`text`,required:!1,default:``},{name:`refundedAmount`,type:`integer`,required:!1,default:0},{name:`refundedPrincipal`,type:`integer`,required:!1,default:0},{name:`refunds`,type:`json`,required:!1}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-users:Tenant`],exposed:!1},{id:`@happyvertical/smrt-commerce:BillingPeriodClose`,name:`BillingPeriodClose`,collection:`billingperiodcloses`,description:`The idempotency anchor for one payer's invoice in one currency for one period. Its id is derived from that identity, so a retried close always resumes the same row, invoice, and provider invoice.`,fields:[{name:`sellerTenantId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:Tenant`},{name:`kind`,type:`text`,required:!1,default:`provider`,enum:[`provider`,`reseller`]},{name:`payerTenantId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:Tenant`},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`periodStart`,type:`datetime`,required:!1},{name:`periodEnd`,type:`datetime`,required:!1},{name:`billingAccountId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:BillingAccount`},{name:`status`,type:`text`,required:!1,default:`collecting`,enum:[`collecting`,`invoiced`,`pushed`,`sent`,`completed`,`carried_forward`]},{name:`invoiceId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Invoice`},{name:`providerInvoiceId`,type:`text`,required:!1,default:``},{name:`subtotal`,type:`integer`,required:!1,default:0},{name:`lineCount`,type:`integer`,required:!1,default:0},{name:`issuedAt`,type:`datetime`,required:!1},{name:`leaseToken`,type:`text`,required:!1},{name:`leaseExpiresAt`,type:`datetime`,required:!1},{name:`attempts`,type:`integer`,required:!1,default:0},{name:`lastError`,type:`text`,required:!1,default:``}],rest:[],mcp:[],cli:[],methods:[{name:`processBillingEvents`,async:!0,parameters:[`args?: Record<string, unknown>`,`_context?: JobExecutionContext`],returnType:`Promise<unknown>`,aiCallable:!1},{name:`runPeriodClose`,async:!0,parameters:[`args?: Record<string, unknown>`,`_context?: JobExecutionContext`],returnType:`Promise<unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:BillingAccount`,`@happyvertical/smrt-commerce:Invoice`,`@happyvertical/smrt-users:Tenant`],exposed:!1},{id:`@happyvertical/smrt-commerce:Cart`,name:`Cart`,collection:`contracts`,extends:`@happyvertical/smrt-commerce:SalesContract`,description:`Transient order-in-progress for a shopper.`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`},{name:`customerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Customer`,description:`The customer a sales order or agreement is for.`}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts`},{method:`PATCH`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`cart_get`},{operation:`list`,name:`cart_list`}],cli:[{operation:`create`,name:`cart_create`},{operation:`delete`,name:`cart_delete`},{operation:`deleteDerived`,name:`cart_deleteDerived`},{operation:`get`,name:`cart_get`},{operation:`isAccepted`,name:`cart_isAccepted`},{operation:`isCompleted`,name:`cart_isCompleted`},{operation:`isDraft`,name:`cart_isDraft`},{operation:`isExpired`,name:`cart_isExpired`},{operation:`isOverdue`,name:`cart_isOverdue`},{operation:`list`,name:`cart_list`},{operation:`rebindMoneyRead`,name:`cart_rebindMoneyRead`},{operation:`recalculateTotals`,name:`cart_recalculateTotals`},{operation:`saveDerived`,name:`cart_saveDerived`},{operation:`update`,name:`cart_update`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Customer`],exposed:!0},{id:`@happyvertical/smrt-commerce:Contract`,name:`Contract`,collection:`contracts`,description:`Contract is the base class for all commercial agreements.`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1,enum:[`estimate`,`order`,`lease`,`agreement`,`supplier_quote`,`purchase_order`,`wholesale_order`,`production_order`,`cart`,`license_sale`],description:`The kind of contract: order, estimate, lease, agreement and so on.`},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts`},{method:`PATCH`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`contract_get`},{operation:`list`,name:`contract_list`}],cli:[{operation:`create`,name:`contract_create`},{operation:`delete`,name:`contract_delete`},{operation:`deleteDerived`,name:`contract_deleteDerived`},{operation:`get`,name:`contract_get`},{operation:`isAccepted`,name:`contract_isAccepted`},{operation:`isCompleted`,name:`contract_isCompleted`},{operation:`isDraft`,name:`contract_isDraft`},{operation:`isExpired`,name:`contract_isExpired`},{operation:`isOverdue`,name:`contract_isOverdue`},{operation:`list`,name:`contract_list`},{operation:`rebindMoneyRead`,name:`contract_rebindMoneyRead`},{operation:`recalculateTotals`,name:`contract_recalculateTotals`},{operation:`saveDerived`,name:`contract_saveDerived`},{operation:`update`,name:`contract_update`},{operation:`findAccepted`,name:`contractcollection_findAccepted`},{operation:`findByCustomer`,name:`contractcollection_findByCustomer`},{operation:`findByDateRange`,name:`contractcollection_findByDateRange`},{operation:`findByStatus`,name:`contractcollection_findByStatus`},{operation:`findByTenant`,name:`contractcollection_findByTenant`},{operation:`findByType`,name:`contractcollection_findByType`},{operation:`findByVendor`,name:`contractcollection_findByVendor`},{operation:`findDrafts`,name:`contractcollection_findDrafts`},{operation:`findExpired`,name:`contractcollection_findExpired`},{operation:`findGlobal`,name:`contractcollection_findGlobal`},{operation:`findOverdue`,name:`contractcollection_findOverdue`},{operation:`findWithGlobals`,name:`contractcollection_findWithGlobals`},{operation:`listSnapshotReportContracts`,name:`contractcollection_listSnapshotReportContracts`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`findAccepted`,async:!0,parameters:[],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`findByCustomer`,async:!0,parameters:[`customerId: string`],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`findByDateRange`,async:!0,parameters:[`startDate: Date`,`endDate: Date`],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: ContractStatus`],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`findByType`,async:!0,parameters:[`contractType: ContractType`],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`findByVendor`,async:!0,parameters:[`vendorId: string`],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`findDrafts`,async:!0,parameters:[],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`findExpired`,async:!0,parameters:[],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`findOverdue`,async:!0,parameters:[],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`get`,async:!0,parameters:[`filter: string | SmrtWhereClause<Contract>`,`options?: any`],returnType:`Promise<Contract | null>`,aiCallable:!0},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`list`,async:!0,parameters:[`options?: SmrtListOptions<Contract>`],returnType:`Promise<SmrtObject[] | Record<string, unknown>[]>`,aiCallable:!0},{name:`listSnapshotReportContracts`,async:!0,parameters:[`options: object`],returnType:`Promise<Contract[]>`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-commerce:ContractLineItem`,name:`ContractLineItem`,collection:`contractlineitems`,description:`ContractLineItem represents a single line item on a contract.`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Contract`,description:`The order, quote or agreement this line belongs to.`},{name:`description`,type:`text`,required:!1,default:``,description:`What is being sold or bought on this line.`},{name:`quantity`,type:`decimal`,required:!1,default:1,description:`How many.`},{name:`unitPrice`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The price of one, before discount; includes tax when the document's prices include tax.`},{name:`discount`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`discountType`,type:`text`,required:!1,default:`none`,enum:[`none`,`percent`,`amount`]},{name:`discountRate`,type:`decimal`,required:!1},{name:`taxRate`,type:`decimal`,required:!1,default:0,description:`The stored fractional tax rate for this line (0.05 means 5%).`},{name:`taxMode`,type:`text`,required:!1,default:`inherit`,enum:[`inherit`,`override`]},{name:`taxCodeId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:TaxCode`},{name:`taxCodeCode`,type:`text`,required:!1},{name:`taxCodeName`,type:`text`,required:!1},{name:`taxComponentsJson`,type:`text`,required:!1,system:!0},{name:`taxAmount`,type:`integer`,required:!0,default:0,ui:{format:`money`}},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`amount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The line amount: net of discount, and including tax only when the document's prices include tax.`},{name:`productId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-products:Product`,description:`The product this line is for, if it is one you list.`},{name:`sku`,type:`text`,required:!1,default:``},{name:`startDate`,type:`datetime`,required:!1},{name:`endDate`,type:`datetime`,required:!1},{name:`billingPeriod`,type:`text`,required:!1,default:``},{name:`sortOrder`,type:`integer`,required:!1,default:0}],rest:[{method:`GET`,path:`/contractlineitems`},{method:`GET`,path:`/contractlineitems/[id]`},{method:`POST`,path:`/contractlineitems`},{method:`PATCH`,path:`/contractlineitems/[id]`},{method:`DELETE`,path:`/contractlineitems/[id]`}],mcp:[{operation:`get`,name:`contractlineitem_get`},{operation:`list`,name:`contractlineitem_list`}],cli:[{operation:`create`,name:`contractlineitem_create`},{operation:`delete`,name:`contractlineitem_delete`},{operation:`deleteDerived`,name:`contractlineitem_deleteDerived`},{operation:`get`,name:`contractlineitem_get`},{operation:`isRecurring`,name:`contractlineitem_isRecurring`},{operation:`isSubscriptionActive`,name:`contractlineitem_isSubscriptionActive`},{operation:`list`,name:`contractlineitem_list`},{operation:`rebindMoneyRead`,name:`contractlineitem_rebindMoneyRead`},{operation:`saveDerived`,name:`contractlineitem_saveDerived`},{operation:`update`,name:`contractlineitem_update`},{operation:`findByContract`,name:`contractlineitemcollection_findByContract`},{operation:`findByTenant`,name:`contractlineitemcollection_findByTenant`},{operation:`findGlobal`,name:`contractlineitemcollection_findGlobal`},{operation:`findWithGlobals`,name:`contractlineitemcollection_findWithGlobals`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByContract`,async:!0,parameters:[`contractId: string`],returnType:`Promise<ContractLineItem[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<ContractLineItem[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<ContractLineItem[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<ContractLineItem[]>`,aiCallable:!1},{name:`get`,async:!0,parameters:[`filter: string | SmrtWhereClause<ContractLineItem>`,`options?: any`],returnType:`Promise<ContractLineItem | null>`,aiCallable:!0},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isRecurring`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSubscriptionActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`list`,async:!0,parameters:[`options?: SmrtListOptions<ContractLineItem>`],returnType:`Promise<SmrtObject[] | Record<string, unknown>[]>`,aiCallable:!0},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Contract`,`@happyvertical/smrt-commerce:TaxCode`,`@happyvertical/smrt-products:Product`],exposed:!0},{id:`@happyvertical/smrt-commerce:Customer`,name:`Customer`,collection:`customers`,description:`Customer represents the customer role for a Profile.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`Links this customer to their profile record, where their name and contact details are kept.`},{name:`creditLimit`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The most this customer may owe you at one time. Leave it at zero if you do not set limits.`},{name:`paymentTerms`,type:`text`,required:!1,default:``,description:`How long the customer has to pay, written the way you would say it, for example "Net 30".`},{name:`taxExempt`,type:`boolean`,required:!1,default:!1,description:`Turn this on if you do not charge this customer sales tax.`},{name:`taxId`,type:`text`,required:!1,default:``,description:`The tax or VAT number of the customer, kept on file for tax-exempt sales.`},{name:`defaultTaxCodeId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:TaxCode`,description:`The tax code normally used when selling to this customer.`},{name:`defaultShippingAddress`,type:`json`,required:!1,description:`Where you usually send goods to this customer, so you do not retype it on every order.`},{name:`defaultBillingAddress`,type:`json`,required:!1,description:`Where you send invoices to this customer.`},{name:`status`,type:`text`,required:!1,enum:[`active`,`inactive`,`suspended`],description:`Whether you are still dealing with this customer: active, inactive or suspended.`},{name:`customerType`,type:`text`,required:!1,enum:[`dtc`,`wholesale`,`retail`],description:`The kind of customer: a direct shopper, a wholesale buyer or a retail customer.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this customer.`},{name:`contacts`,type:`json`,required:!1,description:`The people you deal with at this customer, with their role and how to reach them.`}],rest:[{method:`GET`,path:`/customers`},{method:`GET`,path:`/customers/[id]`},{method:`POST`,path:`/customers`},{method:`PATCH`,path:`/customers/[id]`}],mcp:[{operation:`get`,name:`customer_get`},{operation:`list`,name:`customer_list`}],cli:[{operation:`create`,name:`customer_create`},{operation:`delete`,name:`customer_delete`},{operation:`get`,name:`customer_get`},{operation:`getProfileId`,name:`customer_getProfileId`},{operation:`hasAvailableCredit`,name:`customer_hasAvailableCredit`},{operation:`isActive`,name:`customer_isActive`},{operation:`isWholesale`,name:`customer_isWholesale`},{operation:`list`,name:`customer_list`},{operation:`update`,name:`customer_update`},{operation:`findActive`,name:`customercollection_findActive`},{operation:`findByProfile`,name:`customercollection_findByProfile`},{operation:`findByStatus`,name:`customercollection_findByStatus`},{operation:`findByTenant`,name:`customercollection_findByTenant`},{operation:`findGlobal`,name:`customercollection_findGlobal`},{operation:`findWithGlobals`,name:`customercollection_findWithGlobals`},{operation:`getOrCreateForProfile`,name:`customercollection_getOrCreateForProfile`}],methods:[{name:`findActive`,async:!0,parameters:[],returnType:`Promise<Customer[]>`,aiCallable:!1},{name:`findByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<Customer[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: CustomerStatus`],returnType:`Promise<Customer[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Customer[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Customer[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Customer[]>`,aiCallable:!1},{name:`getOrCreateForProfile`,async:!0,parameters:[`profileId: string`,`defaults?: Partial<object>`],returnType:`Promise<Customer>`,aiCallable:!1},{name:`getProfileId`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`hasAvailableCredit`,async:!1,parameters:[`amount: number`],returnType:`boolean`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isWholesale`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:TaxCode`,`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-commerce:DocumentTax`,name:`DocumentTax`,collection:`documenttaxes`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`documentType`,type:`text`,required:!0,default:`invoice`,enum:[`invoice`,`contract`,`credit_note`]},{name:`documentId`,type:`text`,required:!0},{name:`currency`,type:`text`,required:!0},{name:`taxCodeId`,type:`text`,required:!1},{name:`taxCodeCode`,type:`text`,required:!1},{name:`kind`,type:`text`,required:!1,enum:[`taxable`,`zero-rated`,`exempt`,`out-of-scope`]},{name:`taxComponentId`,type:`text`,required:!1},{name:`taxComponentName`,type:`text`,required:!1},{name:`percent`,type:`decimal`,required:!1},{name:`liabilityAccountId`,type:`text`,required:!1},{name:`taxableMinor`,type:`integer`,required:!0,default:0,ui:{format:`money`},description:`Actual component taxable basis, including prior compound taxes.`},{name:`netMinor`,type:`integer`,required:!1,ui:{format:`money`},description:`Net basis when different from the component taxable basis.`},{name:`taxMinor`,type:`integer`,required:!0,default:0,ui:{format:`money`},description:`Tax total in integer minor units.`},{name:`recoverableMinor`,type:`integer`,required:!0,default:0,ui:{format:`money`},description:`Recoverable purchase tax in integer minor units.`}],rest:[{method:`GET`,path:`/documenttaxes`},{method:`GET`,path:`/documenttaxes/[id]`}],mcp:[{operation:`get`,name:`documenttax_get`},{operation:`list`,name:`documenttax_list`}],cli:[{operation:`get`,name:`documenttax_get`},{operation:`list`,name:`documenttax_list`}],methods:[{name:`delete`,async:!0,parameters:[`_options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByDocument`,async:!0,parameters:[`tenantId: string`,`documentType: CommerceDocumentType`,`documentId: string`],returnType:`Promise<DocumentTax[]>`,aiCallable:!1},{name:`listReportFacts`,async:!0,parameters:[`options: DocumentTaxReportFactsOptions`],returnType:`Promise<DocumentTaxReportFact[]>`,aiCallable:!1},{name:`replaceDerivedForDocument`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`input: object`],returnType:`Promise<DocumentTax[]>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-commerce:Estimate`,name:`Estimate`,collection:`contracts`,extends:`@happyvertical/smrt-commerce:SalesContract`,description:`Quote or proposal for a customer`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`},{name:`customerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-commerce:Customer`}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts`},{method:`PATCH`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`estimate_get`},{operation:`list`,name:`estimate_list`}],cli:[{operation:`create`,name:`estimate_create`},{operation:`delete`,name:`estimate_delete`},{operation:`deleteDerived`,name:`estimate_deleteDerived`},{operation:`get`,name:`estimate_get`},{operation:`isAccepted`,name:`estimate_isAccepted`},{operation:`isCompleted`,name:`estimate_isCompleted`},{operation:`isDraft`,name:`estimate_isDraft`},{operation:`isExpired`,name:`estimate_isExpired`},{operation:`isOverdue`,name:`estimate_isOverdue`},{operation:`list`,name:`estimate_list`},{operation:`rebindMoneyRead`,name:`estimate_rebindMoneyRead`},{operation:`recalculateTotals`,name:`estimate_recalculateTotals`},{operation:`saveDerived`,name:`estimate_saveDerived`},{operation:`update`,name:`estimate_update`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Customer`],exposed:!0},{id:`@happyvertical/smrt-commerce:Fulfillment`,name:`Fulfillment`,collection:`fulfillments`,description:`Fulfillment tracks the delivery or completion of contract items.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:SalesContract`,description:`The order being fulfilled.`},{name:`fulfillmentType`,type:`text`,required:!1,enum:[`shipment`,`delivery`,`pickup`,`digital`,`service`],description:`How it gets to the customer: shipment, delivery, pickup, digital or service.`},{name:`status`,type:`text`,required:!1,enum:[`pending`,`processing`,`shipped`,`delivered`,`cancelled`],description:`Where it stands: pending, processing, shipped, delivered or cancelled.`},{name:`trackingNumber`,type:`text`,required:!1,default:``,description:`The carrier's tracking number.`},{name:`carrier`,type:`text`,required:!1,default:``,description:`The company carrying it.`},{name:`shippingAddress`,type:`json`,required:!1},{name:`shippedAt`,type:`datetime`,required:!1,description:`When it was dispatched.`},{name:`deliveredAt`,type:`datetime`,required:!1,description:`When it arrived.`},{name:`estimatedDelivery`,type:`datetime`,required:!1},{name:`notes`,type:`text`,required:!1,default:``,description:`Anything worth remembering about this shipment.`}],rest:[{method:`GET`,path:`/fulfillments`},{method:`GET`,path:`/fulfillments/[id]`},{method:`POST`,path:`/fulfillments`},{method:`PATCH`,path:`/fulfillments/[id]`}],mcp:[{operation:`get`,name:`fulfillment_get`},{operation:`list`,name:`fulfillment_list`}],cli:[{operation:`cancel`,name:`fulfillment_cancel`},{operation:`create`,name:`fulfillment_create`},{operation:`delete`,name:`fulfillment_delete`},{operation:`get`,name:`fulfillment_get`},{operation:`isDelivered`,name:`fulfillment_isDelivered`},{operation:`isInTransit`,name:`fulfillment_isInTransit`},{operation:`isPending`,name:`fulfillment_isPending`},{operation:`list`,name:`fulfillment_list`},{operation:`markDelivered`,name:`fulfillment_markDelivered`},{operation:`markShipped`,name:`fulfillment_markShipped`},{operation:`update`,name:`fulfillment_update`},{operation:`findByContract`,name:`fulfillmentcollection_findByContract`},{operation:`findByStatus`,name:`fulfillmentcollection_findByStatus`},{operation:`findByTenant`,name:`fulfillmentcollection_findByTenant`},{operation:`findByTracking`,name:`fulfillmentcollection_findByTracking`},{operation:`findByType`,name:`fulfillmentcollection_findByType`},{operation:`findGlobal`,name:`fulfillmentcollection_findGlobal`},{operation:`findInTransit`,name:`fulfillmentcollection_findInTransit`},{operation:`findPending`,name:`fulfillmentcollection_findPending`},{operation:`findShippedInRange`,name:`fulfillmentcollection_findShippedInRange`},{operation:`findWithGlobals`,name:`fulfillmentcollection_findWithGlobals`}],methods:[{name:`cancel`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`findByContract`,async:!0,parameters:[`contractId: string`],returnType:`Promise<Fulfillment[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: FulfillmentStatus`],returnType:`Promise<Fulfillment[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Fulfillment[]>`,aiCallable:!1},{name:`findByTracking`,async:!0,parameters:[`trackingNumber: string`],returnType:`Promise<Fulfillment | null>`,aiCallable:!1},{name:`findByType`,async:!0,parameters:[`fulfillmentType: FulfillmentType`],returnType:`Promise<Fulfillment[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Fulfillment[]>`,aiCallable:!1},{name:`findInTransit`,async:!0,parameters:[],returnType:`Promise<Fulfillment[]>`,aiCallable:!1},{name:`findPending`,async:!0,parameters:[],returnType:`Promise<Fulfillment[]>`,aiCallable:!1},{name:`findShippedInRange`,async:!0,parameters:[`startDate: Date`,`endDate: Date`],returnType:`Promise<Fulfillment[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Fulfillment[]>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isDelivered`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInTransit`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPending`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markDelivered`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`markShipped`,async:!1,parameters:[`trackingNumber?: string`,`carrier?: string`],returnType:`void`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:SalesContract`],exposed:!0},{id:`@happyvertical/smrt-commerce:FulfillmentLineItem`,name:`FulfillmentLineItem`,collection:`fulfillmentlineitems`,description:`FulfillmentLineItem tracks which contract line items are included in a specific fulfillment and how much was fulfilled.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`fulfillmentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Fulfillment`,description:`The shipment this line belongs to.`},{name:`contractLineItemId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:ContractLineItem`,description:`The order line being sent.`},{name:`quantityFulfilled`,type:`decimal`,required:!1,default:1,description:`How many of that line are in this shipment.`},{name:`notes`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/fulfillmentlineitems`},{method:`GET`,path:`/fulfillmentlineitems/[id]`},{method:`POST`,path:`/fulfillmentlineitems`},{method:`PATCH`,path:`/fulfillmentlineitems/[id]`},{method:`DELETE`,path:`/fulfillmentlineitems/[id]`}],mcp:[{operation:`get`,name:`fulfillmentlineitem_get`},{operation:`list`,name:`fulfillmentlineitem_list`}],cli:[{operation:`create`,name:`fulfillmentlineitem_create`},{operation:`delete`,name:`fulfillmentlineitem_delete`},{operation:`get`,name:`fulfillmentlineitem_get`},{operation:`list`,name:`fulfillmentlineitem_list`},{operation:`update`,name:`fulfillmentlineitem_update`},{operation:`findByContractLineItem`,name:`fulfillmentlineitemcollection_findByContractLineItem`},{operation:`findByFulfillment`,name:`fulfillmentlineitemcollection_findByFulfillment`},{operation:`findByTenant`,name:`fulfillmentlineitemcollection_findByTenant`},{operation:`findGlobal`,name:`fulfillmentlineitemcollection_findGlobal`},{operation:`findWithGlobals`,name:`fulfillmentlineitemcollection_findWithGlobals`},{operation:`getTotalFulfilledForContractLine`,name:`fulfillmentlineitemcollection_getTotalFulfilledForContractLine`}],methods:[{name:`findByContractLineItem`,async:!0,parameters:[`contractLineItemId: string`],returnType:`Promise<FulfillmentLineItem[]>`,aiCallable:!1},{name:`findByFulfillment`,async:!0,parameters:[`fulfillmentId: string`],returnType:`Promise<FulfillmentLineItem[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<FulfillmentLineItem[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<FulfillmentLineItem[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<FulfillmentLineItem[]>`,aiCallable:!1},{name:`getTotalFulfilledForContractLine`,async:!0,parameters:[`contractLineItemId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:ContractLineItem`,`@happyvertical/smrt-commerce:Fulfillment`],exposed:!0},{id:`@happyvertical/smrt-commerce:HistoricalCustomerFunds`,name:`HistoricalCustomerFunds`,collection:`historicalcustomerfundses`,description:`Retained original cash evidence. It is deliberately not a completed ledger-backed Payment.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`customerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Customer`},{name:`contractId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Contract`},{name:`sourceKeyHash`,type:`text`,required:!1},{name:`kind`,type:`text`,required:!1,default:`receipt`,enum:[`receipt`,`refund`]},{name:`origin`,type:`text`,required:!1,default:`historical`,enum:[`historical`,`live`]},{name:`paymentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Payment`},{name:`currency`,type:`text`,required:!1},{name:`amountMinor`,type:`integer`,required:!0,default:0,ui:{format:`money`}},{name:`effectiveOn`,type:`text`,required:!1},{name:`sourceReceiptId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:HistoricalCustomerFunds`},{name:`sourceCreditNoteId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Invoice`},{name:`snapshotJson`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/historicalcustomerfundses`},{method:`GET`,path:`/historicalcustomerfundses/[id]`}],mcp:[{operation:`get`,name:`historicalcustomerfunds_get`},{operation:`list`,name:`historicalcustomerfunds_list`}],cli:[{operation:`get`,name:`historicalcustomerfunds_get`},{operation:`list`,name:`historicalcustomerfunds_list`}],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SmrtSaveOptions`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Contract`,`@happyvertical/smrt-commerce:Customer`,`@happyvertical/smrt-commerce:HistoricalCustomerFunds`,`@happyvertical/smrt-commerce:Invoice`,`@happyvertical/smrt-commerce:Payment`],exposed:!0},{id:`@happyvertical/smrt-commerce:HistoricalCustomerFundsAllocation`,name:`HistoricalCustomerFundsAllocation`,collection:`historicalcustomerfundsallocations`,description:`Original applications have concrete identities; credit-audit records never count twice.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`receiptId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:HistoricalCustomerFunds`},{name:`creditNoteId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Invoice`},{name:`invoiceId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Invoice`},{name:`sourceKeyHash`,type:`text`,required:!1},{name:`amountMinor`,type:`integer`,required:!0,default:0,ui:{format:`money`}},{name:`effectiveOn`,type:`text`,required:!1},{name:`origin`,type:`text`,required:!1,default:`historical`,enum:[`historical`,`live`]},{name:`effect`,type:`text`,required:!1,default:`payment`,enum:[`payment`,`credit-audit`,`refund-audit`]},{name:`journalId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-ledgers:Journal`},{name:`snapshotJson`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/historicalcustomerfundsallocations`},{method:`GET`,path:`/historicalcustomerfundsallocations/[id]`}],mcp:[{operation:`get`,name:`historicalcustomerfundsallocation_get`},{operation:`list`,name:`historicalcustomerfundsallocation_list`}],cli:[{operation:`get`,name:`historicalcustomerfundsallocation_get`},{operation:`list`,name:`historicalcustomerfundsallocation_list`}],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SmrtSaveOptions`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:HistoricalCustomerFunds`,`@happyvertical/smrt-commerce:Invoice`,`@happyvertical/smrt-ledgers:Journal`],exposed:!0},{id:`@happyvertical/smrt-commerce:HistoricalSalesLine`,name:`HistoricalSalesLine`,collection:`historicalsaleslines`,description:`An immutable source line with explicit unknowns, never a calculated InvoiceLineItem.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`invoiceId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Invoice`},{name:`creditedLineId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:HistoricalSalesLine`},{name:`sourceKey`,type:`text`,required:!1},{name:`sourceKeyHash`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`netMinor`,type:`integer`,required:!0,default:0,ui:{format:`money`}},{name:`taxMinor`,type:`integer`,required:!1,ui:{format:`money`}},{name:`grossMinor`,type:`integer`,required:!1,ui:{format:`money`}},{name:`quantityText`,type:`text`,required:!1},{name:`unitRateText`,type:`text`,required:!1},{name:`sourceFieldsJson`,type:`text`,required:!1,system:!0},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/historicalsaleslines`},{method:`GET`,path:`/historicalsaleslines/[id]`}],mcp:[{operation:`get`,name:`historicalsalesline_get`},{operation:`list`,name:`historicalsalesline_list`}],cli:[{operation:`get`,name:`historicalsalesline_get`},{operation:`list`,name:`historicalsalesline_list`}],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SmrtSaveOptions`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:HistoricalSalesLine`,`@happyvertical/smrt-commerce:Invoice`],exposed:!0},{id:`@happyvertical/smrt-commerce:Invoice`,name:`Invoice`,collection:`invoices`,description:`Invoice represents a bill sent to a customer for goods or services.`,fields:[{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`historical`],description:`Whether amounts were calculated or retained from an original issued invoice.`},{name:`historicalSalesMoneyJson`,type:`text`,required:!1,system:!0},{name:`historicalSourceKeyHash`,type:`text`,required:!1},{name:`kind`,type:`text`,required:!1,default:`invoice`,enum:[`invoice`,`credit_note`],description:`Invoice or customer credit note.`},{name:`creditedInvoiceId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Invoice`},{name:`creditedAmount`,type:`integer`,required:!0,default:0,ui:{format:`money`}},{name:`retentionStateJson`,type:`text`,required:!1,system:!0},{name:`retentionAccountingStateJson`,type:`text`,required:!1,system:!0},{name:`ordinaryAccountingStateJson`,type:`text`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`customerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Customer`,description:`The customer being billed.`},{name:`contractId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:SalesContract`,description:`The order or agreement this invoice bills for, if any.`},{name:`invoiceNumber`,type:`text`,required:!1,default:``,description:`The number printed on the invoice.`},{name:`reference`,type:`text`,required:!1,default:``},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date the invoice was issued.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment is expected; null when the original source did not establish it.`},{name:`paidDate`,type:`datetime`,required:!1,description:`The date it was paid in full.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`providerTaxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`What the customer owes in all, tax included.`},{name:`amountPaid`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`How much of the total has been paid so far.`},{name:`currency`,type:`text`,required:!1,default:`CAD`,ui:{widget:`currency`},description:`The currency of the invoice.`},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`discountTotal`,type:`integer`,required:!0,default:0,ui:{format:`money`}},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`viewed`,`partial`,`paid`,`overdue`,`cancelled`,`written_off`],description:`Where the invoice stands: draft, sent, viewed, paid, overdue or cancelled.`},{name:`arJournalId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-ledgers:Journal`},{name:`arReversalJournalId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-ledgers:Journal`},{name:`revenueJournalId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-ledgers:Journal`},{name:`externalId`,type:`text`,required:!1,default:``},{name:`customerExternalId`,type:`text`,required:!1,default:``},{name:`externalProvider`,type:`text`,required:!1,default:``},{name:`syncedAt`,type:`datetime`,required:!1},{name:`accountingSyncStateJson`,type:`text`,required:!1,system:!0},{name:`collectionMethod`,type:`text`,required:!1,default:``,enum:[``,`send_invoice`,`charge_automatically`]},{name:`sentAt`,type:`datetime`,required:!1},{name:`viewedAt`,type:`datetime`,required:!1},{name:`remindersSent`,type:`integer`,required:!1,default:0},{name:`lastReminderAt`,type:`datetime`,required:!1},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Private notes, not shown to the customer.`},{name:`customerNotes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`A message shown to the customer on the invoice.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The payment conditions, such as Net 30.`}],rest:[{method:`GET`,path:`/invoices`},{method:`GET`,path:`/invoices/[id]`},{method:`POST`,path:`/invoices`},{method:`PATCH`,path:`/invoices/[id]`}],mcp:[{operation:`get`,name:`invoice_get`},{operation:`list`,name:`invoice_list`}],cli:[{operation:`cancel`,name:`invoice_cancel`},{operation:`cancelWithRevenueReversal`,name:`invoice_cancelWithRevenueReversal`},{operation:`create`,name:`invoice_create`},{operation:`delete`,name:`invoice_delete`},{operation:`deleteDerived`,name:`invoice_deleteDerived`},{operation:`get`,name:`invoice_get`},{operation:`getAmountDue`,name:`invoice_getAmountDue`},{operation:`getArJournal`,name:`invoice_getArJournal`},{operation:`getBalance`,name:`invoice_getBalance`},{operation:`getPayableFacts`,name:`invoice_getPayableFacts`},{operation:`isDraft`,name:`invoice_isDraft`},{operation:`isOverdue`,name:`invoice_isOverdue`},{operation:`isPaid`,name:`invoice_isPaid`},{operation:`isPartial`,name:`invoice_isPartial`},{operation:`isSent`,name:`invoice_isSent`},{operation:`list`,name:`invoice_list`},{operation:`markSent`,name:`invoice_markSent`},{operation:`markViewed`,name:`invoice_markViewed`},{operation:`rebindMoneyRead`,name:`invoice_rebindMoneyRead`},{operation:`recognizeRevenue`,name:`invoice_recognizeRevenue`},{operation:`saveDerived`,name:`invoice_saveDerived`},{operation:`toAccountingInput`,name:`invoice_toAccountingInput`},{operation:`update`,name:`invoice_update`},{operation:`updatePaymentStatus`,name:`invoice_updatePaymentStatus`},{operation:`writeOff`,name:`invoice_writeOff`},{operation:`countForYear`,name:`invoicecollection_countForYear`},{operation:`findByContract`,name:`invoicecollection_findByContract`},{operation:`findByCustomer`,name:`invoicecollection_findByCustomer`},{operation:`findByDateRange`,name:`invoicecollection_findByDateRange`},{operation:`findByExternalId`,name:`invoicecollection_findByExternalId`},{operation:`findByNumber`,name:`invoicecollection_findByNumber`},{operation:`findByStatus`,name:`invoicecollection_findByStatus`},{operation:`findByTenant`,name:`invoicecollection_findByTenant`},{operation:`findDrafts`,name:`invoicecollection_findDrafts`},{operation:`findGlobal`,name:`invoicecollection_findGlobal`},{operation:`findNeedingSync`,name:`invoicecollection_findNeedingSync`},{operation:`findOverdue`,name:`invoicecollection_findOverdue`},{operation:`findPaid`,name:`invoicecollection_findPaid`},{operation:`findPartial`,name:`invoicecollection_findPartial`},{operation:`findSent`,name:`invoicecollection_findSent`},{operation:`findWithGlobals`,name:`invoicecollection_findWithGlobals`},{operation:`generateInvoiceNumber`,name:`invoicecollection_generateInvoiceNumber`},{operation:`getTotalOutstandingForCustomer`,name:`invoicecollection_getTotalOutstandingForCustomer`}],methods:[{name:`cancel`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`cancelWithRevenueReversal`,async:!0,parameters:[`options: CancelRevenueOptions`],returnType:`Promise<Journal>`,aiCallable:!1},{name:`countForYear`,async:!0,parameters:[`year: number`],returnType:`Promise<number>`,aiCallable:!1},{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByContract`,async:!0,parameters:[`contractId: string`],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`findByCustomer`,async:!0,parameters:[`customerId: string`],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`findByDateRange`,async:!0,parameters:[`startDate: Date`,`endDate: Date`],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`findByExternalId`,async:!0,parameters:[`externalId: string`],returnType:`Promise<Invoice | null>`,aiCallable:!1},{name:`findByNumber`,async:!0,parameters:[`invoiceNumber: string`],returnType:`Promise<Invoice | null>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: InvoiceStatus`],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`findDrafts`,async:!0,parameters:[],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`findNeedingSync`,async:!0,parameters:[],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`findOverdue`,async:!0,parameters:[],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`findPaid`,async:!0,parameters:[],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`findPartial`,async:!0,parameters:[],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`findSent`,async:!0,parameters:[],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Invoice[]>`,aiCallable:!1},{name:`generateInvoiceNumber`,async:!0,parameters:[`options?: InvoiceNumberOptions`],returnType:`Promise<string>`,aiCallable:!1},{name:`get`,async:!0,parameters:[`filter: string | SmrtWhereClause<Invoice>`,`options?: any`],returnType:`Promise<Invoice | null>`,aiCallable:!0},{name:`getAmountDue`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`getArJournal`,async:!0,parameters:[],returnType:`Promise<Journal | null>`,aiCallable:!1},{name:`getBalance`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`getPayableFacts`,async:!1,parameters:[],returnType:`any`,aiCallable:!1},{name:`getTotalOutstandingForCustomer`,async:!0,parameters:[`customerId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPaid`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPartial`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSent`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`list`,async:!0,parameters:[`options?: SmrtListOptions<Invoice>`],returnType:`Promise<SmrtObject[] | Record<string, unknown>[]>`,aiCallable:!0},{name:`markSent`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`markViewed`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recognizeRevenue`,async:!0,parameters:[`options: RecognizeRevenueOptions`],returnType:`Promise<Journal>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1},{name:`toAccountingInput`,async:!0,parameters:[`options?: FrozenInvoiceAccountingOptions`],returnType:`Promise<AccountingInvoiceInput>`,aiCallable:!1},{name:`updatePaymentStatus`,async:!1,parameters:[`amountPaid: number`],returnType:`void`,aiCallable:!1},{name:`writeOff`,async:!1,parameters:[],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Customer`,`@happyvertical/smrt-commerce:Invoice`,`@happyvertical/smrt-commerce:SalesContract`,`@happyvertical/smrt-ledgers:Journal`],exposed:!0},{id:`@happyvertical/smrt-commerce:InvoiceLineItem`,name:`InvoiceLineItem`,collection:`invoicelineitems`,description:`InvoiceLineItem represents a single line item on an invoice.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`invoiceId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Invoice`,description:`The invoice this line belongs to.`},{name:`creditedLineId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:InvoiceLineItem`},{name:`creditCalculationBasisJson`,type:`text`,required:!1,description:`Frozen source basis used to cap and reproduce an issued credit line.`,system:!0},{name:`description`,type:`text`,required:!1,default:``,description:`What is being billed on this line.`},{name:`sku`,type:`text`,required:!1,default:``},{name:`productId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-products:Product`},{name:`quantity`,type:`decimal`,required:!1,default:1,description:`How many.`},{name:`unitPrice`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The price of one, before discount; includes tax when the document's prices include tax.`},{name:`discount`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`discountType`,type:`text`,required:!1,default:`none`,enum:[`none`,`percent`,`amount`]},{name:`discountRate`,type:`decimal`,required:!1},{name:`taxRate`,type:`decimal`,required:!1,default:0,description:`The stored fractional tax rate for this line (0.05 means 5%).`},{name:`taxMode`,type:`text`,required:!1,default:`inherit`,enum:[`inherit`,`override`]},{name:`taxCodeId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:TaxCode`},{name:`taxCodeCode`,type:`text`,required:!1},{name:`taxCodeName`,type:`text`,required:!1},{name:`taxComponentsJson`,type:`text`,required:!1,system:!0},{name:`taxAmount`,type:`integer`,required:!0,default:0,ui:{format:`money`}},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`amount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The line amount: net of discount, and including tax only when the document's prices include tax.`},{name:`sourceType`,type:`text`,required:!1,default:``},{name:`sourceId`,type:`text`,required:!1,default:``},{name:`periodStart`,type:`datetime`,required:!1},{name:`periodEnd`,type:`datetime`,required:!1},{name:`revenueAccountId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-ledgers:Account`},{name:`sortOrder`,type:`integer`,required:!1,default:0}],rest:[{method:`GET`,path:`/invoicelineitems`},{method:`GET`,path:`/invoicelineitems/[id]`},{method:`POST`,path:`/invoicelineitems`},{method:`PATCH`,path:`/invoicelineitems/[id]`},{method:`DELETE`,path:`/invoicelineitems/[id]`}],mcp:[{operation:`get`,name:`invoicelineitem_get`},{operation:`list`,name:`invoicelineitem_list`}],cli:[{operation:`create`,name:`invoicelineitem_create`},{operation:`delete`,name:`invoicelineitem_delete`},{operation:`deleteDerived`,name:`invoicelineitem_deleteDerived`},{operation:`get`,name:`invoicelineitem_get`},{operation:`hasPeriod`,name:`invoicelineitem_hasPeriod`},{operation:`hasSource`,name:`invoicelineitem_hasSource`},{operation:`list`,name:`invoicelineitem_list`},{operation:`rebindMoneyRead`,name:`invoicelineitem_rebindMoneyRead`},{operation:`saveDerived`,name:`invoicelineitem_saveDerived`},{operation:`update`,name:`invoicelineitem_update`},{operation:`findByInvoice`,name:`invoicelineitemcollection_findByInvoice`},{operation:`findBySource`,name:`invoicelineitemcollection_findBySource`},{operation:`findBySourceType`,name:`invoicelineitemcollection_findBySourceType`},{operation:`findByTenant`,name:`invoicelineitemcollection_findByTenant`},{operation:`findGlobal`,name:`invoicelineitemcollection_findGlobal`},{operation:`findWithGlobals`,name:`invoicelineitemcollection_findWithGlobals`},{operation:`getNextSortOrder`,name:`invoicelineitemcollection_getNextSortOrder`},{operation:`getTotalForInvoice`,name:`invoicelineitemcollection_getTotalForInvoice`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByInvoice`,async:!0,parameters:[`invoiceId: string`],returnType:`Promise<InvoiceLineItem[]>`,aiCallable:!1},{name:`findBySource`,async:!0,parameters:[`sourceType: string`,`sourceId: string`],returnType:`Promise<InvoiceLineItem[]>`,aiCallable:!1},{name:`findBySourceType`,async:!0,parameters:[`sourceType: string`],returnType:`Promise<InvoiceLineItem[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<InvoiceLineItem[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<InvoiceLineItem[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<InvoiceLineItem[]>`,aiCallable:!1},{name:`get`,async:!0,parameters:[`filter: string | SmrtWhereClause<InvoiceLineItem>`,`options?: any`],returnType:`Promise<InvoiceLineItem | null>`,aiCallable:!0},{name:`getNextSortOrder`,async:!0,parameters:[`invoiceId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`getTotalForInvoice`,async:!0,parameters:[`invoiceId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`hasPeriod`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`hasSource`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`list`,async:!0,parameters:[`options?: SmrtListOptions<InvoiceLineItem>`],returnType:`Promise<SmrtObject[] | Record<string, unknown>[]>`,aiCallable:!0},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Invoice`,`@happyvertical/smrt-commerce:InvoiceLineItem`,`@happyvertical/smrt-commerce:TaxCode`,`@happyvertical/smrt-ledgers:Account`,`@happyvertical/smrt-products:Product`],exposed:!0},{id:`@happyvertical/smrt-commerce:Lease`,name:`Lease`,collection:`contracts`,extends:`@happyvertical/smrt-commerce:SalesContract`,description:`Rental or lease agreement`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`},{name:`customerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-commerce:Customer`}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts`},{method:`PATCH`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`lease_get`},{operation:`list`,name:`lease_list`}],cli:[{operation:`create`,name:`lease_create`},{operation:`delete`,name:`lease_delete`},{operation:`deleteDerived`,name:`lease_deleteDerived`},{operation:`get`,name:`lease_get`},{operation:`isAccepted`,name:`lease_isAccepted`},{operation:`isCompleted`,name:`lease_isCompleted`},{operation:`isDraft`,name:`lease_isDraft`},{operation:`isExpired`,name:`lease_isExpired`},{operation:`isOverdue`,name:`lease_isOverdue`},{operation:`list`,name:`lease_list`},{operation:`rebindMoneyRead`,name:`lease_rebindMoneyRead`},{operation:`recalculateTotals`,name:`lease_recalculateTotals`},{operation:`saveDerived`,name:`lease_saveDerived`},{operation:`update`,name:`lease_update`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Customer`],exposed:!0},{id:`@happyvertical/smrt-commerce:LicenseSale`,name:`LicenseSale`,collection:`contracts`,extends:`@happyvertical/smrt-commerce:SalesContract`,description:`Industry-neutral licensing primitive.`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`},{name:`customerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Customer`,description:`The customer a sales order or agreement is for.`},{name:`skuId`,type:`text`,required:!1,default:``},{name:`paymentId`,type:`text`,required:!1,default:``},{name:`licenseeEmail`,type:`text`,required:!1,default:``},{name:`licenseeLegalEntity`,type:`text`,required:!1,default:``},{name:`licenseeJurisdiction`,type:`text`,required:!1,default:``},{name:`rightsMedium`,type:`text`,required:!1,default:``},{name:`rightsDistributionScope`,type:`text`,required:!1,default:``},{name:`rightsExclusivity`,type:`text`,required:!1,default:``},{name:`rightsDuration`,type:`text`,required:!1,default:``},{name:`rightsTerritory`,type:`text`,required:!1,default:``},{name:`rightsSublicensing`,type:`boolean`,required:!1,default:!1},{name:`rightsDerivatives`,type:`boolean`,required:!1,default:!1},{name:`pdfUrl`,type:`text`,required:!1,default:``},{name:`pdfHash`,type:`text`,required:!1,default:``},{name:`onChainHashRegistryRef`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts`},{method:`PATCH`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`licensesale_get`},{operation:`list`,name:`licensesale_list`}],cli:[{operation:`create`,name:`licensesale_create`},{operation:`delete`,name:`licensesale_delete`},{operation:`deleteDerived`,name:`licensesale_deleteDerived`},{operation:`get`,name:`licensesale_get`},{operation:`getRightsSnapshot`,name:`licensesale_getRightsSnapshot`},{operation:`isAccepted`,name:`licensesale_isAccepted`},{operation:`isCompleted`,name:`licensesale_isCompleted`},{operation:`isDraft`,name:`licensesale_isDraft`},{operation:`isExpired`,name:`licensesale_isExpired`},{operation:`isOverdue`,name:`licensesale_isOverdue`},{operation:`list`,name:`licensesale_list`},{operation:`rebindMoneyRead`,name:`licensesale_rebindMoneyRead`},{operation:`recalculateTotals`,name:`licensesale_recalculateTotals`},{operation:`revoke`,name:`licensesale_revoke`},{operation:`saveDerived`,name:`licensesale_saveDerived`},{operation:`update`,name:`licensesale_update`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`getRightsSnapshot`,async:!1,parameters:[],returnType:`LicenseRightsSnapshot`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`revoke`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Customer`],exposed:!0},{id:`@happyvertical/smrt-commerce:Order`,name:`Order`,collection:`contracts`,extends:`@happyvertical/smrt-commerce:SalesContract`,description:`Customer purchase order`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`},{name:`customerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-commerce:Customer`}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts`},{method:`PATCH`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`order_get`},{operation:`list`,name:`order_list`}],cli:[{operation:`create`,name:`order_create`},{operation:`delete`,name:`order_delete`},{operation:`deleteDerived`,name:`order_deleteDerived`},{operation:`get`,name:`order_get`},{operation:`isAccepted`,name:`order_isAccepted`},{operation:`isCompleted`,name:`order_isCompleted`},{operation:`isDraft`,name:`order_isDraft`},{operation:`isExpired`,name:`order_isExpired`},{operation:`isOverdue`,name:`order_isOverdue`},{operation:`list`,name:`order_list`},{operation:`rebindMoneyRead`,name:`order_rebindMoneyRead`},{operation:`recalculateTotals`,name:`order_recalculateTotals`},{operation:`saveDerived`,name:`order_saveDerived`},{operation:`update`,name:`order_update`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Customer`],exposed:!0},{id:`@happyvertical/smrt-commerce:Payment`,name:`Payment`,collection:`payments`,description:`Payment represents a financial transaction against a contract.`,fields:[{name:`kind`,type:`text`,required:!1,default:`payment`,enum:[`payment`,`refund`]},{name:`customerFundsJson`,type:`text`,required:!1,system:!0},{name:`retentionAccountingBindingJson`,type:`text`,required:!1,system:!0},{name:`ordinaryAccountingBindingJson`,type:`text`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:SalesContract`,description:`The order or agreement this payment is for, if any.`},{name:`customerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Customer`,description:`The customer who paid.`},{name:`amount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`How much was paid.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the payment.`},{name:`method`,type:`text`,required:!1,enum:[`cash`,`check`,`credit_card`,`bank_transfer`,`crypto`,`other`],description:`How it was paid: cash, check, card, bank transfer or other.`},{name:`status`,type:`text`,required:!1,enum:[`pending`,`completed`,`failed`,`refunded`,`cancelled`],description:`Whether the payment is pending, completed, failed or refunded.`},{name:`transactionId`,type:`text`,required:!1,default:``},{name:`reference`,type:`text`,required:!1,default:``,description:`A reference note, such as a check number.`},{name:`journalId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-ledgers:Journal`},{name:`paidAt`,type:`datetime`,required:!1,description:`When the money was received.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this payment.`},{name:`externalId`,type:`text`,required:!1,default:``},{name:`externalProvider`,type:`text`,required:!1,default:``},{name:`syncedAt`,type:`datetime`,required:!1},{name:`backendId`,type:`text`,required:!1,default:``},{name:`backendTxRef`,type:`text`,required:!1,default:``},{name:`nativeAmount`,type:`integer`,required:!1,default:0},{name:`nativeCurrency`,type:`text`,required:!1,default:``},{name:`usdAtQuote`,type:`integer`,required:!1,default:0},{name:`usdAtConfirmation`,type:`integer`,required:!1,default:0}],rest:[{method:`GET`,path:`/payments`},{method:`GET`,path:`/payments/[id]`},{method:`POST`,path:`/payments`},{method:`PATCH`,path:`/payments/[id]`}],mcp:[{operation:`get`,name:`payment_get`},{operation:`list`,name:`payment_list`}],cli:[{operation:`cancel`,name:`payment_cancel`},{operation:`create`,name:`payment_create`},{operation:`delete`,name:`payment_delete`},{operation:`get`,name:`payment_get`},{operation:`getJournal`,name:`payment_getJournal`},{operation:`isCompleted`,name:`payment_isCompleted`},{operation:`isPending`,name:`payment_isPending`},{operation:`isRefunded`,name:`payment_isRefunded`},{operation:`list`,name:`payment_list`},{operation:`markFailed`,name:`payment_markFailed`},{operation:`recordPayment`,name:`payment_recordPayment`},{operation:`recordRefund`,name:`payment_recordRefund`},{operation:`update`,name:`payment_update`},{operation:`usdDrift`,name:`payment_usdDrift`},{operation:`findByContract`,name:`paymentcollection_findByContract`},{operation:`findByCustomer`,name:`paymentcollection_findByCustomer`},{operation:`findByDateRange`,name:`paymentcollection_findByDateRange`},{operation:`findByJournal`,name:`paymentcollection_findByJournal`},{operation:`findByMethod`,name:`paymentcollection_findByMethod`},{operation:`findByStatus`,name:`paymentcollection_findByStatus`},{operation:`findByTenant`,name:`paymentcollection_findByTenant`},{operation:`findByTransactionId`,name:`paymentcollection_findByTransactionId`},{operation:`findCompleted`,name:`paymentcollection_findCompleted`},{operation:`findGlobal`,name:`paymentcollection_findGlobal`},{operation:`findPending`,name:`paymentcollection_findPending`},{operation:`findWithGlobals`,name:`paymentcollection_findWithGlobals`},{operation:`getTotalForContract`,name:`paymentcollection_getTotalForContract`}],methods:[{name:`cancel`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`delete`,async:!0,parameters:[`options?: SmrtDeleteOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByContract`,async:!0,parameters:[`contractId: string`],returnType:`Promise<Payment[]>`,aiCallable:!1},{name:`findByCustomer`,async:!0,parameters:[`customerId: string`],returnType:`Promise<Payment[]>`,aiCallable:!1},{name:`findByDateRange`,async:!0,parameters:[`startDate: Date`,`endDate: Date`],returnType:`Promise<Payment[]>`,aiCallable:!1},{name:`findByJournal`,async:!0,parameters:[`journalId: string`],returnType:`Promise<Payment | null>`,aiCallable:!1},{name:`findByMethod`,async:!0,parameters:[`method: PaymentMethod`],returnType:`Promise<Payment[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: PaymentStatus`],returnType:`Promise<Payment[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Payment[]>`,aiCallable:!1},{name:`findByTransactionId`,async:!0,parameters:[`transactionId: string`],returnType:`Promise<Payment | null>`,aiCallable:!1},{name:`findCompleted`,async:!0,parameters:[],returnType:`Promise<Payment[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Payment[]>`,aiCallable:!1},{name:`findPending`,async:!0,parameters:[],returnType:`Promise<Payment[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Payment[]>`,aiCallable:!1},{name:`getJournal`,async:!0,parameters:[],returnType:`Promise<Journal | null>`,aiCallable:!1},{name:`getTotalForContract`,async:!0,parameters:[`contractId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPending`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isRefunded`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markFailed`,async:!1,parameters:[`reason?: string`],returnType:`void`,aiCallable:!1},{name:`recordPayment`,async:!0,parameters:[`options: RecordPaymentOptions`],returnType:`Promise<Journal>`,aiCallable:!1},{name:`recordRefund`,async:!0,parameters:[`options: RecordPaymentOptions`],returnType:`Promise<Journal>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`usdDrift`,async:!1,parameters:[],returnType:`number`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Customer`,`@happyvertical/smrt-commerce:SalesContract`,`@happyvertical/smrt-ledgers:Journal`],exposed:!0},{id:`@happyvertical/smrt-commerce:PaymentAllocation`,name:`PaymentAllocation`,collection:`paymentallocations`,description:`PaymentAllocation tracks how payments are applied to invoices.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`paymentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Payment`,description:`The payment being applied.`},{name:`invoiceId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Invoice`,description:`The invoice it settles.`},{name:`amount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`How much of the payment goes to this invoice.`},{name:`allocatedAt`,type:`datetime`,required:!1,description:`When it was applied.`},{name:`allocatedBy`,type:`text`,required:!1,default:``},{name:`notes`,type:`text`,required:!1,default:``,description:`Anything worth remembering about this allocation.`}],rest:[{method:`GET`,path:`/paymentallocations`},{method:`GET`,path:`/paymentallocations/[id]`}],mcp:[{operation:`get`,name:`paymentallocation_get`},{operation:`list`,name:`paymentallocation_list`}],cli:[{operation:`get`,name:`paymentallocation_get`},{operation:`list`,name:`paymentallocation_list`}],methods:[{name:`allocatePayment`,async:!0,parameters:[`input: object`],returnType:`Promise<PaymentAllocation[]>`,aiCallable:!1},{name:`delete`,async:!0,parameters:[`options?: SmrtDeleteOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByAllocator`,async:!0,parameters:[`allocatedBy: string`],returnType:`Promise<PaymentAllocation[]>`,aiCallable:!1},{name:`findByDateRange`,async:!0,parameters:[`startDate: Date`,`endDate: Date`],returnType:`Promise<PaymentAllocation[]>`,aiCallable:!1},{name:`findByInvoice`,async:!0,parameters:[`invoiceId: string`],returnType:`Promise<PaymentAllocation[]>`,aiCallable:!1},{name:`findByPayment`,async:!0,parameters:[`paymentId: string`],returnType:`Promise<PaymentAllocation[]>`,aiCallable:!1},{name:`findByPaymentAndInvoice`,async:!0,parameters:[`paymentId: string`,`invoiceId: string`],returnType:`Promise<PaymentAllocation | null>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<PaymentAllocation[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<PaymentAllocation[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<PaymentAllocation[]>`,aiCallable:!1},{name:`getTotalAllocatedFromPayment`,async:!0,parameters:[`paymentId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`getTotalAllocatedToInvoice`,async:!0,parameters:[`invoiceId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`getUnallocatedFromPayment`,async:!0,parameters:[`paymentId: string`,`paymentAmount: number`],returnType:`Promise<number>`,aiCallable:!1},{name:`removeAllocation`,async:!0,parameters:[`id: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Invoice`,`@happyvertical/smrt-commerce:Payment`],exposed:!0},{id:`@happyvertical/smrt-commerce:PaymentInstrument`,name:`PaymentInstrument`,collection:`paymentinstruments`,description:`PaymentInstrument stores a reusable payment method a customer has saved with a payment backend (e.g. a card vaulted by Stripe), so it can be charged later without the customer present.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`customerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Customer`},{name:`backendId`,type:`text`,required:!1,default:``},{name:`providerCustomerId`,type:`text`,required:!1,default:``},{name:`providerPaymentMethodId`,type:`text`,required:!1,default:``},{name:`type`,type:`text`,required:!1,default:`card`},{name:`brand`,type:`text`,required:!1,default:``},{name:`last4`,type:`text`,required:!1,default:``},{name:`expMonth`,type:`integer`,required:!1,default:0},{name:`expYear`,type:`integer`,required:!1,default:0},{name:`isDefault`,type:`boolean`,required:!1,default:!1},{name:`status`,type:`text`,required:!1,enum:[`active`,`expired`,`removed`]}],rest:[{method:`GET`,path:`/paymentinstruments`},{method:`GET`,path:`/paymentinstruments/[id]`},{method:`POST`,path:`/paymentinstruments`},{method:`PATCH`,path:`/paymentinstruments/[id]`}],mcp:[{operation:`get`,name:`paymentinstrument_get`},{operation:`list`,name:`paymentinstrument_list`}],cli:[{operation:`create`,name:`paymentinstrument_create`},{operation:`delete`,name:`paymentinstrument_delete`},{operation:`get`,name:`paymentinstrument_get`},{operation:`isActive`,name:`paymentinstrument_isActive`},{operation:`isExpired`,name:`paymentinstrument_isExpired`},{operation:`isRemoved`,name:`paymentinstrument_isRemoved`},{operation:`list`,name:`paymentinstrument_list`},{operation:`markExpired`,name:`paymentinstrument_markExpired`},{operation:`markRemoved`,name:`paymentinstrument_markRemoved`},{operation:`update`,name:`paymentinstrument_update`},{operation:`findActiveByCustomer`,name:`paymentinstrumentcollection_findActiveByCustomer`},{operation:`findByCustomer`,name:`paymentinstrumentcollection_findByCustomer`},{operation:`findByProviderPaymentMethodId`,name:`paymentinstrumentcollection_findByProviderPaymentMethodId`},{operation:`findByTenant`,name:`paymentinstrumentcollection_findByTenant`},{operation:`findDefaultForCustomer`,name:`paymentinstrumentcollection_findDefaultForCustomer`},{operation:`findGlobal`,name:`paymentinstrumentcollection_findGlobal`},{operation:`findWithGlobals`,name:`paymentinstrumentcollection_findWithGlobals`},{operation:`setDefaultForCustomer`,name:`paymentinstrumentcollection_setDefaultForCustomer`}],methods:[{name:`findActiveByCustomer`,async:!0,parameters:[`customerId: string`],returnType:`Promise<PaymentInstrument[]>`,aiCallable:!1},{name:`findByCustomer`,async:!0,parameters:[`customerId: string`],returnType:`Promise<PaymentInstrument[]>`,aiCallable:!1},{name:`findByProviderPaymentMethodId`,async:!0,parameters:[`providerPaymentMethodId: string`],returnType:`Promise<PaymentInstrument | null>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<PaymentInstrument[]>`,aiCallable:!1},{name:`findDefaultForCustomer`,async:!0,parameters:[`customerId: string`],returnType:`Promise<PaymentInstrument | null>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<PaymentInstrument[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<PaymentInstrument[]>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isRemoved`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markExpired`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`markRemoved`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`setDefaultForCustomer`,async:!0,parameters:[`customerId: string`,`instrumentId: string`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Customer`],exposed:!0},{id:`@happyvertical/smrt-commerce:PaymentIntent`,name:`PaymentIntent`,collection:`paymentintents`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`skuId`,type:`text`,required:!1,default:``},{name:`offeringRef`,type:`text`,required:!1,default:``},{name:`licenseeEmail`,type:`text`,required:!1,default:``},{name:`customerId`,type:`text`,required:!1,default:``},{name:`paymentOptions`,type:`json`,required:!1},{name:`usdPriceLocked`,type:`integer`,required:!1,default:0},{name:`priceLockWindowMs`,type:`integer`,required:!1},{name:`priceLockExpiresAt`,type:`datetime`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`awaiting_payment`,`paid`,`issued`,`retired`,`expired`,`cancelled`]},{name:`idempotencyKey`,type:`text`,required:!1,default:``},{name:`paidOptionBackendId`,type:`text`,required:!1,default:``},{name:`paymentId`,type:`text`,required:!1,default:``},{name:`paidAt`,type:`datetime`,required:!1},{name:`issuedAt`,type:`datetime`,required:!1},{name:`expiredAt`,type:`datetime`,required:!1},{name:`cancelledAt`,type:`datetime`,required:!1},{name:`retiredAt`,type:`datetime`,required:!1},{name:`notes`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/paymentintents`},{method:`GET`,path:`/paymentintents/[id]`},{method:`POST`,path:`/paymentintents`},{method:`PATCH`,path:`/paymentintents/[id]`}],mcp:[{operation:`get`,name:`paymentintent_get`},{operation:`list`,name:`paymentintent_list`}],cli:[{operation:`cancel`,name:`paymentintent_cancel`},{operation:`create`,name:`paymentintent_create`},{operation:`delete`,name:`paymentintent_delete`},{operation:`expire`,name:`paymentintent_expire`},{operation:`get`,name:`paymentintent_get`},{operation:`getOption`,name:`paymentintent_getOption`},{operation:`getRetiredOptions`,name:`paymentintent_getRetiredOptions`},{operation:`isAwaitingPayment`,name:`paymentintent_isAwaitingPayment`},{operation:`isCancelled`,name:`paymentintent_isCancelled`},{operation:`isExpired`,name:`paymentintent_isExpired`},{operation:`isIssued`,name:`paymentintent_isIssued`},{operation:`isOptionRetired`,name:`paymentintent_isOptionRetired`},{operation:`isPaid`,name:`paymentintent_isPaid`},{operation:`isRetired`,name:`paymentintent_isRetired`},{operation:`isTerminal`,name:`paymentintent_isTerminal`},{operation:`list`,name:`paymentintent_list`},{operation:`markIssued`,name:`paymentintent_markIssued`},{operation:`markPaid`,name:`paymentintent_markPaid`},{operation:`retire`,name:`paymentintent_retire`},{operation:`update`,name:`paymentintent_update`},{operation:`verifyAndMarkPaid`,name:`paymentintent_verifyAndMarkPaid`},{operation:`findByIdempotencyKey`,name:`paymentintentcollection_findByIdempotencyKey`},{operation:`findByLicenseeEmail`,name:`paymentintentcollection_findByLicenseeEmail`},{operation:`findByOfferingRef`,name:`paymentintentcollection_findByOfferingRef`},{operation:`findByStatus`,name:`paymentintentcollection_findByStatus`},{operation:`findByTenant`,name:`paymentintentcollection_findByTenant`},{operation:`findGlobal`,name:`paymentintentcollection_findGlobal`},{operation:`findOpen`,name:`paymentintentcollection_findOpen`},{operation:`findStale`,name:`paymentintentcollection_findStale`},{operation:`findWithGlobals`,name:`paymentintentcollection_findWithGlobals`},{operation:`getOrCreateByIdempotencyKey`,name:`paymentintentcollection_getOrCreateByIdempotencyKey`}],methods:[{name:`cancel`,async:!1,parameters:[`reason?: string`],returnType:`void`,aiCallable:!1},{name:`expire`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`findByIdempotencyKey`,async:!0,parameters:[`args: PaymentIntentIdempotencyArgs`],returnType:`Promise<PaymentIntent | null>`,aiCallable:!1},{name:`findByLicenseeEmail`,async:!0,parameters:[`email: string`],returnType:`Promise<PaymentIntent[]>`,aiCallable:!1},{name:`findByOfferingRef`,async:!0,parameters:[`offeringRef: string`],returnType:`Promise<PaymentIntent[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: PaymentIntentStatus`],returnType:`Promise<PaymentIntent[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<PaymentIntent[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<PaymentIntent[]>`,aiCallable:!1},{name:`findOpen`,async:!0,parameters:[],returnType:`Promise<PaymentIntent[]>`,aiCallable:!1},{name:`findStale`,async:!0,parameters:[],returnType:`Promise<PaymentIntent[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<PaymentIntent[]>`,aiCallable:!1},{name:`getOption`,async:!1,parameters:[`backendId: string`],returnType:`PaymentOption | undefined`,aiCallable:!1},{name:`getOrCreateByIdempotencyKey`,async:!0,parameters:[`seed: PaymentIntentSeed`],returnType:`Promise<object>`,aiCallable:!1},{name:`getRetiredOptions`,async:!1,parameters:[],returnType:`PaymentOption[]`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAwaitingPayment`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCancelled`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isIssued`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOptionRetired`,async:!1,parameters:[`backendId: string`],returnType:`boolean`,aiCallable:!1},{name:`isPaid`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isRetired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isTerminal`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markIssued`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`markPaid`,async:!1,parameters:[`args: object`],returnType:`void`,aiCallable:!1},{name:`retire`,async:!1,parameters:[`reason?: string`],returnType:`void`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`verifyAndMarkPaid`,async:!0,parameters:[`args: object`],returnType:`Promise<void>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-commerce:Payout`,name:`Payout`,collection:`payouts`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`paymentId`,type:`text`,required:!1,default:``},{name:`vendorId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Vendor`},{name:`grossAmount`,type:`integer`,required:!1,default:0},{name:`operatorFee`,type:`integer`,required:!1,default:0},{name:`supplierNet`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:``},{name:`backendId`,type:`text`,required:!1,default:``},{name:`backendTxRef`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,enum:[`pending`,`sent`,`confirmed`,`failed`]},{name:`sentAt`,type:`datetime`,required:!1},{name:`confirmedAt`,type:`datetime`,required:!1},{name:`failedAt`,type:`datetime`,required:!1},{name:`failureReason`,type:`text`,required:!1,default:``},{name:`notes`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/payouts`},{method:`GET`,path:`/payouts/[id]`}],mcp:[{operation:`get`,name:`payout_get`},{operation:`list`,name:`payout_list`}],cli:[{operation:`get`,name:`payout_get`},{operation:`list`,name:`payout_list`}],methods:[{name:`createFromPayment`,async:!0,parameters:[`args: CreatePayoutFromPaymentArgs`],returnType:`Promise<Payout>`,aiCallable:!1},{name:`findByBackendTxRef`,async:!0,parameters:[`backendTxRef: string`],returnType:`Promise<Payout | null>`,aiCallable:!1},{name:`findByPayment`,async:!0,parameters:[`paymentId: string`],returnType:`Promise<Payout[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: PayoutStatus`],returnType:`Promise<Payout[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Payout[]>`,aiCallable:!1},{name:`findByVendor`,async:!0,parameters:[`vendorId: string`],returnType:`Promise<Payout[]>`,aiCallable:!1},{name:`findFailed`,async:!0,parameters:[],returnType:`Promise<Payout[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Payout[]>`,aiCallable:!1},{name:`findPending`,async:!0,parameters:[],returnType:`Promise<Payout[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Payout[]>`,aiCallable:!1},{name:`getConfirmedTotalForVendor`,async:!0,parameters:[`vendorId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isConfirmed`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isFailed`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPending`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSent`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markConfirmed`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`markFailed`,async:!1,parameters:[`reason: string`],returnType:`void`,aiCallable:!1},{name:`markSent`,async:!1,parameters:[`backendTxRef: string`],returnType:`void`,aiCallable:!1},{name:`resetFromFailed`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`validateAmounts`,async:!1,parameters:[],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Vendor`],exposed:!0},{id:`@happyvertical/smrt-commerce:ProductionOrder`,name:`ProductionOrder`,collection:`contracts`,extends:`@happyvertical/smrt-commerce:PurchaseContract`,description:`Instruction to commission goods from an internal or external factory.`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`},{name:`vendorId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Vendor`,description:`The vendor supplying this quote or purchase contract.`},{name:`productId`,type:`text`,required:!1,default:``},{name:`bomId`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts`},{method:`PATCH`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`productionorder_get`},{operation:`list`,name:`productionorder_list`}],cli:[{operation:`create`,name:`productionorder_create`},{operation:`delete`,name:`productionorder_delete`},{operation:`deleteDerived`,name:`productionorder_deleteDerived`},{operation:`get`,name:`productionorder_get`},{operation:`isAccepted`,name:`productionorder_isAccepted`},{operation:`isCompleted`,name:`productionorder_isCompleted`},{operation:`isDraft`,name:`productionorder_isDraft`},{operation:`isExpired`,name:`productionorder_isExpired`},{operation:`isOverdue`,name:`productionorder_isOverdue`},{operation:`list`,name:`productionorder_list`},{operation:`rebindMoneyRead`,name:`productionorder_rebindMoneyRead`},{operation:`recalculateTotals`,name:`productionorder_recalculateTotals`},{operation:`saveDerived`,name:`productionorder_saveDerived`},{operation:`update`,name:`productionorder_update`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Vendor`],exposed:!0},{id:`@happyvertical/smrt-commerce:PurchaseContract`,name:`PurchaseContract`,collection:`contracts`,extends:`@happyvertical/smrt-commerce:Contract`,description:`Supplier-side contracts, including supplier quotes, purchase and production orders.`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1,enum:[`estimate`,`order`,`lease`,`agreement`,`supplier_quote`,`purchase_order`,`wholesale_order`,`production_order`,`cart`,`license_sale`],description:`The kind of contract: order, estimate, lease, agreement and so on.`},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`},{name:`vendorId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Vendor`,description:`The vendor supplying this quote or purchase contract.`}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`purchasecontract_get`},{operation:`list`,name:`purchasecontract_list`}],cli:[{operation:`get`,name:`purchasecontract_get`},{operation:`list`,name:`purchasecontract_list`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByVendor`,async:!0,parameters:[`vendorId: string`],returnType:`Promise<PurchaseContract[]>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Vendor`],exposed:!0},{id:`@happyvertical/smrt-commerce:PurchaseOrder`,name:`PurchaseOrder`,collection:`contracts`,extends:`@happyvertical/smrt-commerce:PurchaseContract`,description:`Order sent to vendor/supplier`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`},{name:`vendorId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-commerce:Vendor`},{name:`expectedDate`,type:`text`,required:!1,default:``,description:`The date you expect the delivery, as YYYY-MM-DD. Leave blank if it is not known.`},{name:`shipTo`,type:`text`,required:!1,default:``,description:`Where this order should be delivered, including any delivery instructions.`}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts`},{method:`PATCH`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`purchaseorder_get`},{operation:`list`,name:`purchaseorder_list`}],cli:[{operation:`create`,name:`purchaseorder_create`},{operation:`delete`,name:`purchaseorder_delete`},{operation:`deleteDerived`,name:`purchaseorder_deleteDerived`},{operation:`get`,name:`purchaseorder_get`},{operation:`isAccepted`,name:`purchaseorder_isAccepted`},{operation:`isCompleted`,name:`purchaseorder_isCompleted`},{operation:`isDraft`,name:`purchaseorder_isDraft`},{operation:`isExpired`,name:`purchaseorder_isExpired`},{operation:`isOverdue`,name:`purchaseorder_isOverdue`},{operation:`list`,name:`purchaseorder_list`},{operation:`rebindMoneyRead`,name:`purchaseorder_rebindMoneyRead`},{operation:`recalculateTotals`,name:`purchaseorder_recalculateTotals`},{operation:`saveDerived`,name:`purchaseorder_saveDerived`},{operation:`update`,name:`purchaseorder_update`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Vendor`],exposed:!0},{id:`@happyvertical/smrt-commerce:PurchasePriceObservation`,name:`PurchasePriceObservation`,collection:`purchasepriceobservations`,description:`Original purchase evidence with explicitly unavailable monetary aggregates.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`sourceIdentity`,type:`text`,required:!1},{name:`vendorId`,type:`text`,required:!1},{name:`snapshotJson`,type:`text`,required:!1,system:!0},{name:`completionJson`,type:`text`,required:!1,system:!0}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveObserved`,async:!0,parameters:[`capability: any`],returnType:`Promise<this>`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-commerce:SalesContract`,name:`SalesContract`,collection:`contracts`,extends:`@happyvertical/smrt-commerce:Contract`,description:`Customer-side contracts, including orders, estimates, and licenses.`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1,enum:[`estimate`,`order`,`lease`,`agreement`,`supplier_quote`,`purchase_order`,`wholesale_order`,`production_order`,`cart`,`license_sale`],description:`The kind of contract: order, estimate, lease, agreement and so on.`},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`},{name:`customerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:Customer`,description:`The customer a sales order or agreement is for.`}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`salescontract_get`},{operation:`list`,name:`salescontract_list`}],cli:[{operation:`get`,name:`salescontract_get`},{operation:`list`,name:`salescontract_list`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByCustomer`,async:!0,parameters:[`customerId: string`],returnType:`Promise<SalesContract[]>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Customer`],exposed:!0},{id:`@happyvertical/smrt-commerce:SupplierQuote`,name:`SupplierQuote`,collection:`contracts`,extends:`@happyvertical/smrt-commerce:PurchaseContract`,description:`Supplier quotation received from a vendor; acceptance does not create an order.`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`},{name:`vendorId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-commerce:Vendor`}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts`},{method:`PATCH`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`supplierquote_get`},{operation:`list`,name:`supplierquote_list`}],cli:[{operation:`create`,name:`supplierquote_create`},{operation:`delete`,name:`supplierquote_delete`},{operation:`deleteDerived`,name:`supplierquote_deleteDerived`},{operation:`get`,name:`supplierquote_get`},{operation:`isAccepted`,name:`supplierquote_isAccepted`},{operation:`isCompleted`,name:`supplierquote_isCompleted`},{operation:`isDraft`,name:`supplierquote_isDraft`},{operation:`isExpired`,name:`supplierquote_isExpired`},{operation:`isOverdue`,name:`supplierquote_isOverdue`},{operation:`list`,name:`supplierquote_list`},{operation:`rebindMoneyRead`,name:`supplierquote_rebindMoneyRead`},{operation:`recalculateTotals`,name:`supplierquote_recalculateTotals`},{operation:`saveDerived`,name:`supplierquote_saveDerived`},{operation:`update`,name:`supplierquote_update`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Vendor`],exposed:!0},{id:`@happyvertical/smrt-commerce:TaxCode`,name:`TaxCode`,collection:`taxcodes`,description:`A reusable tax code whose ordered component list is safe to edit.`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`code`,type:`text`,required:!1,description:`A stable short code, for example gst-pst-bc.`},{name:`name`,type:`text`,required:!1,description:`The name people see for this tax code.`},{name:`kind`,type:`text`,required:!1,default:`taxable`,enum:[`taxable`,`zero-rated`,`exempt`,`out-of-scope`],description:`How the tax code is reported.`},{name:`appliesTo`,type:`text`,required:!1,default:`both`,enum:[`sales`,`purchases`,`both`],description:`Whether the code applies to sales, purchases or both.`},{name:`componentsJson`,type:`text`,required:!1,system:!0},{name:`active`,type:`boolean`,required:!0,default:!0,description:`Whether users may select this code for new documents.`}],rest:[{method:`GET`,path:`/taxcodes`},{method:`GET`,path:`/taxcodes/[id]`},{method:`POST`,path:`/taxcodes`},{method:`PATCH`,path:`/taxcodes/[id]`}],mcp:[{operation:`get`,name:`taxcode_get`},{operation:`list`,name:`taxcode_list`}],cli:[{operation:`create`,name:`taxcode_create`},{operation:`delete`,name:`taxcode_delete`},{operation:`get`,name:`taxcode_get`},{operation:`list`,name:`taxcode_list`},{operation:`update`,name:`taxcode_update`},{operation:`findByCode`,name:`taxcodecollection_findByCode`}],methods:[{name:`findByCode`,async:!0,parameters:[`code: string`,`tenantId?: string`],returnType:`Promise<TaxCode | null>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-commerce:TaxComponent`,name:`TaxComponent`,collection:`taxcomponents`,description:`One reusable tax rate component.`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`name`,type:`text`,required:!1,description:`The name of this tax component, for example GST.`},{name:`percent`,type:`decimal`,required:!1,description:`The tax percentage, for example 7.125 for 7.125 percent.`},{name:`liabilityAccountId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-ledgers:Account`,description:`The liability account that receives this tax component.`},{name:`recoverable`,type:`boolean`,required:!0,default:!1,description:`Whether purchases using this component may recover the full input tax. Partial recovery is not supported.`},{name:`active`,type:`boolean`,required:!0,default:!0,description:`Whether new tax codes and overrides may select it.`}],rest:[{method:`GET`,path:`/taxcomponents`},{method:`GET`,path:`/taxcomponents/[id]`},{method:`POST`,path:`/taxcomponents`},{method:`PATCH`,path:`/taxcomponents/[id]`}],mcp:[{operation:`get`,name:`taxcomponent_get`},{operation:`list`,name:`taxcomponent_list`}],cli:[{operation:`create`,name:`taxcomponent_create`},{operation:`delete`,name:`taxcomponent_delete`},{operation:`get`,name:`taxcomponent_get`},{operation:`list`,name:`taxcomponent_list`},{operation:`update`,name:`taxcomponent_update`}],methods:[{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-ledgers:Account`],exposed:!0},{id:`@happyvertical/smrt-commerce:TaxSettings`,name:`TaxSettings`,collection:`taxsettingses`,description:`Tenant-level defaults and registration numbers for tax determination.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`defaultSalesTaxCodeId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:TaxCode`,description:`The default tax code for sales documents.`},{name:`defaultPurchaseTaxCodeId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:TaxCode`,description:`The default tax code for purchase documents.`},{name:`defaultLineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`],description:`Whether new document amounts are exclusive, inclusive or out of scope.`},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`],description:`Whether components round per line or per document.`},{name:`taxRegistrationsJson`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/taxsettingses/[id]`},{method:`POST`,path:`/taxsettingses`},{method:`PATCH`,path:`/taxsettingses/[id]`}],mcp:[{operation:`get`,name:`taxsettings_get`}],cli:[{operation:`create`,name:`taxsettings_create`},{operation:`delete`,name:`taxsettings_delete`},{operation:`get`,name:`taxsettings_get`},{operation:`list`,name:`taxsettings_list`},{operation:`update`,name:`taxsettings_update`},{operation:`getForTenant`,name:`taxsettingscollection_getForTenant`},{operation:`getOrCreateForTenant`,name:`taxsettingscollection_getOrCreateForTenant`},{operation:`lockForTenant`,name:`taxsettingscollection_lockForTenant`}],methods:[{name:`getForTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<TaxSettings | null>`,aiCallable:!1},{name:`getOrCreateForTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<TaxSettings>`,aiCallable:!1},{name:`lockForTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<TaxSettings>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:TaxCode`],exposed:!0},{id:`@happyvertical/smrt-commerce:TaxSummaryReport`,name:`TaxSummaryReport`,collection:`taxsummaryreports`,fields:[{name:`refreshedAt`,type:`datetime`,required:!1},{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`periodFrom`,type:`datetime`,required:!1,description:`The inclusive start of this report period.`},{name:`periodTo`,type:`datetime`,required:!1,description:`The inclusive end of this report period.`},{name:`currency`,type:`text`,required:!1,description:`The currency group; report rows never mix currencies.`},{name:`rowKind`,type:`text`,required:!1,default:`component`,enum:[`component`,`kind`,`reconciliation`,`warning`],description:`The materialized tax-summary row category.`},{name:`dimensionKey`,type:`text`,required:!1,description:`The stable dimension identity inside this report row.`},{name:`direction`,type:`text`,required:!1,description:`Sales, purchase, expense or reconciliation direction.`},{name:`taxComponentId`,type:`text`,required:!1,description:`Tenant tax component snapshot identity.`},{name:`taxCodeKind`,type:`text`,required:!1,description:`Stored tax-code kind snapshot.`},{name:`liabilityAccountId`,type:`text`,required:!1,description:`Liability account used for reconciliation.`},{name:`taxableMinor`,type:`integer`,required:!0,default:0,description:`Stored taxable base in integer minor units.`},{name:`taxMinor`,type:`integer`,required:!0,default:0,description:`Collected tax or reconciliation tax amount in integer minor units.`},{name:`recoverableMinor`,type:`integer`,required:!1,description:`Recoverable tax in integer minor units, or null when incomplete.`},{name:`ledgerMovementMinor`,type:`integer`,required:!1,description:`Posted ledger movement in raw commerce minor units.`},{name:`netTaxMinor`,type:`integer`,required:!1,description:`Collected less recoverable tax in integer minor units.`},{name:`differenceMinor`,type:`integer`,required:!1,description:`Ledger movement minus collected tax.`},{name:`documentCount`,type:`integer`,required:!0,default:0,description:`Distinct stored document count.`},{name:`sourceScopes`,type:`text`,required:!1,description:`Comma-separated source classes used to reproduce this row drilldown.`},{name:`complete`,type:`boolean`,required:!0,default:!0,description:`Whether this row belongs to a complete tax-summary result.`},{name:`warningCode`,type:`text`,required:!1,description:`Incomplete-source warning code.`},{name:`warningSourceType`,type:`text`,required:!1,description:`Warning source category.`},{name:`warningSourceId`,type:`text`,required:!1,description:`Warning source identity.`},{name:`warningMessage`,type:`text`,required:!1,description:`Operator-facing incomplete-source warning.`}],rest:[{method:`GET`,path:`/taxsummaryreports`},{method:`GET`,path:`/taxsummaryreports/[id]`}],mcp:[{operation:`get`,name:`taxsummaryreport_get`},{operation:`list`,name:`taxsummaryreport_list`}],cli:[{operation:`get`,name:`taxsummaryreport_get`},{operation:`list`,name:`taxsummaryreport_list`}],methods:[{name:`count`,async:!0,parameters:[`options?: any`],returnType:`Promise<number>`,aiCallable:!1},{name:`drilldownContributors`,async:!0,parameters:[`options: TaxSummaryContributorDrilldownOptions`],returnType:`Promise<TaxSummaryContributorDrilldown>`,aiCallable:!1},{name:`drilldownInvoiceFacts`,async:!0,parameters:[`options: TaxSummaryInvoiceDrilldownOptions`],returnType:`Promise<InvoiceTaxReportFact[]>`,aiCallable:!1},{name:`get`,async:!0,parameters:[`filter: any`,`options?: any`],returnType:`Promise<TaxSummaryReport | null>`,aiCallable:!0},{name:`isStale`,async:!1,parameters:[`ttlMs?: number`],returnType:`boolean`,aiCallable:!1},{name:`list`,async:!0,parameters:[`options?: SmrtListOptions<TaxSummaryReport>`],returnType:`Promise<SmrtObject[] | Record<string, unknown>[]>`,aiCallable:!0},{name:`refresh`,async:!0,parameters:[`options?: Omit<ReportRefreshOptions, 'db'>`],returnType:`Promise<ReportRefreshResult>`,aiCallable:!1},{name:`refreshTaxSummary`,async:!0,parameters:[`options: RefreshTaxSummaryReportOptions`],returnType:`Promise<TaxSummaryReportRefreshResult>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-commerce:Vendor`,name:`Vendor`,collection:`vendors`,description:`Vendor represents the vendor/supplier role for a Profile.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`Links this vendor to their profile record, where their name and contact details are kept.`},{name:`leadTimeDays`,type:`integer`,required:!1,default:0,description:`How many days the vendor usually takes between your order and delivery.`},{name:`minimumOrderAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The smallest order the vendor will accept.`},{name:`paymentTerms`,type:`text`,required:!1,default:``,description:`How long you have to pay this vendor, written the way you would say it, for example "Net 30".`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency this vendor bills you in.`},{name:`taxId`,type:`text`,required:!1,default:``,description:`The vendor tax or VAT registration number kept on file.`},{name:`defaultTaxCodeId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-commerce:TaxCode`,description:`The tax code normally used when buying from this vendor.`},{name:`defaultContactEmail`,type:`text`,required:!1,default:``,ui:{widget:`email`},description:`The email address you normally use to reach this vendor.`},{name:`defaultContactPhone`,type:`text`,required:!1,default:``,ui:{widget:`phone`},description:`The phone number you normally use to reach this vendor.`},{name:`status`,type:`text`,required:!1,enum:[`active`,`inactive`,`suspended`],description:`Whether you still buy from this vendor: active, inactive or suspended.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this vendor.`},{name:`payoutAddresses`,type:`json`,required:!1,description:`Where payments to this vendor should be sent.`},{name:`contacts`,type:`json`,required:!1,description:`The people you deal with at this vendor, with their role and how to reach them.`}],rest:[{method:`GET`,path:`/vendors`},{method:`GET`,path:`/vendors/[id]`},{method:`POST`,path:`/vendors`},{method:`PATCH`,path:`/vendors/[id]`}],mcp:[{operation:`get`,name:`vendor_get`},{operation:`list`,name:`vendor_list`}],cli:[{operation:`clearPayoutAddress`,name:`vendor_clearPayoutAddress`},{operation:`create`,name:`vendor_create`},{operation:`delete`,name:`vendor_delete`},{operation:`get`,name:`vendor_get`},{operation:`getPayoutAddress`,name:`vendor_getPayoutAddress`},{operation:`getProfileId`,name:`vendor_getProfileId`},{operation:`isActive`,name:`vendor_isActive`},{operation:`list`,name:`vendor_list`},{operation:`meetsMinimumOrder`,name:`vendor_meetsMinimumOrder`},{operation:`setPayoutAddress`,name:`vendor_setPayoutAddress`},{operation:`update`,name:`vendor_update`},{operation:`findActive`,name:`vendorcollection_findActive`},{operation:`findByProfile`,name:`vendorcollection_findByProfile`},{operation:`findByStatus`,name:`vendorcollection_findByStatus`},{operation:`findByTenant`,name:`vendorcollection_findByTenant`},{operation:`findGlobal`,name:`vendorcollection_findGlobal`},{operation:`findWithGlobals`,name:`vendorcollection_findWithGlobals`},{operation:`getOrCreateForProfile`,name:`vendorcollection_getOrCreateForProfile`}],methods:[{name:`clearPayoutAddress`,async:!1,parameters:[`currency: string`],returnType:`this`,aiCallable:!1},{name:`findActive`,async:!0,parameters:[],returnType:`Promise<Vendor[]>`,aiCallable:!1},{name:`findByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<Vendor[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: VendorStatus`],returnType:`Promise<Vendor[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Vendor[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Vendor[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Vendor[]>`,aiCallable:!1},{name:`getOrCreateForProfile`,async:!0,parameters:[`profileId: string`,`defaults?: Partial<object>`],returnType:`Promise<Vendor>`,aiCallable:!1},{name:`getPayoutAddress`,async:!1,parameters:[`currency: string`],returnType:`string | undefined`,aiCallable:!1},{name:`getProfileId`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`meetsMinimumOrder`,async:!1,parameters:[`amount: number`],returnType:`boolean`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setPayoutAddress`,async:!1,parameters:[`currency: string`,`destination: string`],returnType:`this`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:TaxCode`,`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-commerce:WholesaleOrder`,name:`WholesaleOrder`,collection:`contracts`,extends:`@happyvertical/smrt-commerce:SalesContract`,description:`B2B order placed by a wholesale customer.`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contractType`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`draft`,`sent`,`accepted`,`declined`,`completed`,`cancelled`],description:`Where the order or agreement stands, for example draft, sent, accepted or completed.`},{name:`subtotal`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The amount before tax.`},{name:`discountTotal`,type:`integer`,required:!1,default:0,ui:{format:`money`}},{name:`taxAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The tax charged.`},{name:`totalAmount`,type:`integer`,required:!1,default:0,ui:{format:`money`},description:`The full amount, tax included.`},{name:`currency`,type:`text`,required:!1,default:`USD`,ui:{widget:`currency`},description:`The currency of the amounts.`},{name:`moneyAuthority`,type:`text`,required:!1,default:`calculated`,enum:[`calculated`,`received`],description:`Whether amounts were calculated or recorded from reviewed original paperwork.`},{name:`receivedPurchaseMoneyJson`,type:`text`,required:!1,system:!0},{name:`billingScheduleJson`,type:`text`,required:!1,system:!0},{name:`lineAmountType`,type:`text`,required:!1,default:`exclusive`,enum:[`exclusive`,`inclusive`,`none`]},{name:`taxRoundingScope`,type:`text`,required:!1,default:`line`,enum:[`line`,`document`]},{name:`sellerTaxRegistrationsJson`,type:`text`,required:!1,system:!0},{name:`partyTaxId`,type:`text`,required:!1},{name:`moneySnapshotId`,type:`text`,required:!1,system:!0},{name:`issueDate`,type:`datetime`,required:!1,ui:{format:`date`},description:`The date it was issued or placed.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment or delivery is due.`},{name:`expiryDate`,type:`datetime`,required:!1,description:`The last day the price or offer is good for.`},{name:`reference`,type:`text`,required:!1,default:``,description:`Your own number or note for finding this later, such as a purchase order or quote number.`},{name:`notes`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`Anything worth remembering about this.`},{name:`terms`,type:`text`,required:!1,default:``,ui:{widget:`textarea`},description:`The conditions agreed, such as deposits, payment or delivery conditions.`},{name:`channelId`,type:`text`,required:!1,default:``,description:`Where it came from, for example your shop, a marketplace or a phone call.`},{name:`customerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-commerce:Customer`}],rest:[{method:`GET`,path:`/contracts`},{method:`GET`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts`},{method:`PATCH`,path:`/contracts/[id]`}],mcp:[{operation:`get`,name:`wholesaleorder_get`},{operation:`list`,name:`wholesaleorder_list`}],cli:[{operation:`create`,name:`wholesaleorder_create`},{operation:`delete`,name:`wholesaleorder_delete`},{operation:`deleteDerived`,name:`wholesaleorder_deleteDerived`},{operation:`get`,name:`wholesaleorder_get`},{operation:`isAccepted`,name:`wholesaleorder_isAccepted`},{operation:`isCompleted`,name:`wholesaleorder_isCompleted`},{operation:`isDraft`,name:`wholesaleorder_isDraft`},{operation:`isExpired`,name:`wholesaleorder_isExpired`},{operation:`isOverdue`,name:`wholesaleorder_isOverdue`},{operation:`list`,name:`wholesaleorder_list`},{operation:`rebindMoneyRead`,name:`wholesaleorder_rebindMoneyRead`},{operation:`recalculateTotals`,name:`wholesaleorder_recalculateTotals`},{operation:`saveDerived`,name:`wholesaleorder_saveDerived`},{operation:`update`,name:`wholesaleorder_update`}],methods:[{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`deleteDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!1},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Customer`],exposed:!0}],dependencies:[`ledgers`,`products`,`profiles`,`reports`,`subscriptions`,`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3615`,`#3616`,`#3617`,`#3624`,`#3625`,`#3626`,`#3627`],reason:`@happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs`,via:[`@happyvertical/smrt-agents`,`@happyvertical/smrt-jobs`,`@happyvertical/smrt-ledgers`,`@happyvertical/smrt-products`,`@happyvertical/smrt-profiles`,`@happyvertical/smrt-reports`,`@happyvertical/smrt-secrets`,`@happyvertical/smrt-subscriptions`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`]},recipes:[{id:`commerce.agreements`,label:`General agreements`,summary:`Keep signed agreements with customers, and see every contract in one list.`,synonyms:[`contracts`,`terms`,`deals`],models:[`@happyvertical/smrt-commerce:Agreement`,`@happyvertical/smrt-commerce:Contract`,`@happyvertical/smrt-commerce:ContractLineItem`],nav:[{label:`General agreements`,model:`@happyvertical/smrt-commerce:Agreement`,icon:`fileText`,description:`Signed deals and terms with your customers, in one place.`},{label:`All contracts`,model:`@happyvertical/smrt-commerce:Contract`,icon:`fileText`,description:`Every contract you hold, whoever it is with.`}],requires:[`commerce.customers`],group:{id:`agreements`,label:`Agreements`,summary:`Contracts with customers: general agreements, leases and licence sales.`},section:{id:`agreements`,label:`Agreements`,icon:`fileText`,description:`Contracts, leases and licenses with customers.`},options:{"@happyvertical/smrt-commerce:Agreement":{fields:{contractType:{default:`agreement`,visibility:`hidden`,locked:!0},customerId:{label:`Customer`,order:1},subtotal:{visibility:`hidden`},taxAmount:{visibility:`hidden`},channelId:{visibility:`hidden`}}},"@happyvertical/smrt-commerce:ContractLineItem":{fields:{sku:{visibility:`hidden`},startDate:{visibility:`hidden`},endDate:{visibility:`hidden`},billingPeriod:{visibility:`hidden`},sortOrder:{visibility:`hidden`},discount:{visibility:`hidden`},taxRate:{visibility:`hidden`}}},"@happyvertical/smrt-commerce:Contract":{fields:{channelId:{visibility:`hidden`}}}},help:{markdown:`## Overview
201
-
202
- Agreements are contracts you keep with customers. General agreements live here;
203
- leases and licence sales are separate recipes in the same group.
204
- **All contracts** lists every kind together, including orders and quotes.
205
-
206
- ## Tasks
207
-
208
- ### Record an agreement
209
-
210
- 1. Create a new agreement.
211
- 2. Pick the **{field:customerId}**.
212
- 3. Set the **{field:issueDate}** and **{field:expiryDate}**.
213
- 4. Put the conditions in **{field:terms}** and save.
214
-
215
- ### Follow it
216
-
217
- 1. Update **{field:status}** from draft to accepted to completed.
218
- 2. Check **{field:expiryDate}** to spot agreements about to lapse.
219
- `,fieldRefs:[`customerId`,`expiryDate`,`issueDate`,`status`,`terms`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`]},effectiveDemo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`,`Needs commerce.customers, which is server.`]}},{id:`commerce.customers`,label:`Customers`,summary:`Keep a list of the people and companies you sell to.`,synonyms:[`clients`,`buyers`,`accounts`],models:[`@happyvertical/smrt-commerce:Customer`],nav:[{label:`Customers`,model:`@happyvertical/smrt-commerce:Customer`,icon:`users`,description:`The people and companies you sell to, with how to reach them.`}],requires:[],section:{id:`sales`,label:`Sales`,icon:`shoppingBag`,description:`Customers, orders and quotes: everything you sell.`},options:{"@happyvertical/smrt-commerce:Customer":{fields:{profileId:{label:`Name`,order:-1}}}},help:{markdown:`## Overview
220
-
221
- Customers is your address book for the people and businesses you sell to. Keep
222
- one record for each customer so you can see who they are, how they like to pay
223
- and what you have agreed with them, then refer back to them whenever you take an
224
- order.
225
-
226
- ## Tasks
227
-
228
- ### Add a new customer
229
-
230
- 1. Choose the **New** button above the list.
231
- 2. Describe the customer with **{field:customerType}**: a direct shopper, a
232
- wholesale buyer or a retail customer. Note in **{field:status}** whether you
233
- are still dealing with them.
234
- 3. Fill in the **{field:defaultShippingAddress}** and
235
- **{field:defaultBillingAddress}** so you do not have to type them again on
236
- every order.
237
- 4. Add **{field:paymentTerms}**, for example "Net 30", if you give this
238
- customer time to pay.
239
- 5. Save. The customer is now on your list and ready to use on a sales order.
240
-
241
- ### Keep track of what a customer can owe
242
-
243
- 1. Open the customer from the list and choose Edit.
244
- 2. Set **{field:creditLimit}** to the most you are comfortable letting them owe
245
- you at one time.
246
- 3. If you do not charge them sales tax, turn on **{field:taxExempt}**, and keep
247
- their tax number on file.
248
- 4. Use **{field:notes}** for anything the next person who deals with this
249
- customer should know.
250
-
251
- ### Find a customer
252
-
253
- Scan the list for the customer you want, or open a record to see everything you
254
- have on file. To stop dealing with someone without losing their history, change
255
- their **{field:status}** to inactive instead of deleting them.
256
- `,fieldRefs:[`creditLimit`,`customerType`,`defaultBillingAddress`,`defaultShippingAddress`,`notes`,`paymentTerms`,`status`,`taxExempt`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`]}},{id:`commerce.estimates`,label:`Estimates`,summary:`Send customers a price quote before they commit.`,synonyms:[`quotes`,`quotations`,`proposals`,`bids`],models:[`@happyvertical/smrt-commerce:Estimate`,`@happyvertical/smrt-commerce:ContractLineItem`],nav:[{label:`Estimates`,model:`@happyvertical/smrt-commerce:Estimate`,icon:`fileText`,description:`Price quotes you have sent to customers.`}],requires:[`commerce.customers`],section:{id:`sales`,label:`Sales`,icon:`shoppingBag`,description:`Customers, orders and quotes: everything you sell.`},options:{"@happyvertical/smrt-commerce:Estimate":{fields:{contractType:{default:`estimate`,visibility:`hidden`,locked:!0},customerId:{label:`Customer`,order:1},channelId:{visibility:`hidden`}}},"@happyvertical/smrt-commerce:ContractLineItem":{fields:{sku:{visibility:`hidden`},startDate:{visibility:`hidden`},endDate:{visibility:`hidden`},billingPeriod:{visibility:`hidden`},sortOrder:{visibility:`hidden`},discount:{visibility:`hidden`},taxRate:{visibility:`hidden`}}}},help:{markdown:`## Overview
257
-
258
- Estimates are price quotes you send before a customer commits. Each one belongs
259
- to a customer, lists its line items and shows how long the price is good for.
260
-
261
- ## Tasks
262
-
263
- ### Write an estimate
264
-
265
- 1. Create a new estimate.
266
- 2. Pick the **{field:customerId}** the quote is for.
267
- 3. Add the line items, then check the **{field:totalAmount}**.
268
- 4. Set **{field:expiryDate}** to the last day the price is good for.
269
- 5. Put your conditions in **{field:terms}** and save.
270
-
271
- ### Follow it up
272
-
273
- 1. Set **{field:status}** to sent once it goes out.
274
- 2. Move it to accepted or declined when the customer answers.
275
- `,fieldRefs:[`customerId`,`expiryDate`,`status`,`terms`,`totalAmount`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`]},effectiveDemo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`,`Needs commerce.customers, which is server.`]}},{id:`commerce.fulfillment`,label:`Shipping`,summary:`Pack, ship and deliver orders, with tracking.`,synonyms:[`fulfillment`,`delivery`,`shipments`,`tracking`],models:[`@happyvertical/smrt-commerce:Fulfillment`,`@happyvertical/smrt-commerce:FulfillmentLineItem`],nav:[{label:`Shipments`,model:`@happyvertical/smrt-commerce:Fulfillment`,icon:`truck`,description:`What has gone out the door and where it is now.`}],requires:[],requiresAny:[[`commerce.sales`,`commerce.wholesale`]],group:{id:`billing`,label:`Billing & shipping`,summary:`Invoice your customers, record what they pay and ship what they ordered.`},section:{id:`operations`,label:`Operations`,icon:`wrench`,description:`Fulfillment and the day-to-day work behind an order.`},options:{"@happyvertical/smrt-commerce:Fulfillment":{fields:{estimatedDelivery:{visibility:`hidden`},shippingAddress:{visibility:`hidden`}}},"@happyvertical/smrt-commerce:FulfillmentLineItem":{fields:{notes:{visibility:`hidden`}}}},help:{markdown:`## Overview
276
-
277
- Shipping tracks how an order gets to the customer. Each shipment belongs to an
278
- order and lists which line items are in it, so an order can go out in parts.
279
-
280
- ## Tasks
281
-
282
- ### Ship an order
283
-
284
- 1. Create a new shipment.
285
- 2. Pick the order in **{field:contractId}** and choose the
286
- **{field:fulfillmentType}**.
287
- 3. Enter the **{field:carrier}** and **{field:trackingNumber}**.
288
- 4. List the items and quantities in the shipment.
289
- 5. Set **{field:status}** to shipped and record **{field:shippedAt}**.
290
-
291
- ### Confirm delivery
292
-
293
- 1. Open the shipment and set **{field:status}** to delivered.
294
- 2. Record **{field:deliveredAt}**.
295
- `,fieldRefs:[`carrier`,`contractId`,`deliveredAt`,`fulfillmentType`,`shippedAt`,`status`,`trackingNumber`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`]},effectiveDemo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`,`Needs commerce.sales, which is server.`]}},{id:`commerce.invoicing`,label:`Invoicing`,summary:`Bill customers and record the payments that come in.`,synonyms:[`invoices`,`billing`,`payments`,`receivables`],models:[`@happyvertical/smrt-commerce:Invoice`,`@happyvertical/smrt-commerce:InvoiceLineItem`,`@happyvertical/smrt-commerce:Payment`,`@happyvertical/smrt-commerce:PaymentAllocation`],nav:[{label:`Invoices`,model:`@happyvertical/smrt-commerce:Invoice`,icon:`receipt`,description:`Bills you have sent and which ones are still waiting to be paid.`},{label:`Payments`,model:`@happyvertical/smrt-commerce:Payment`,icon:`creditCard`,description:`Money received, matched to the invoices it paid.`}],requires:[`commerce.customers`],group:{id:`billing`,label:`Billing & shipping`,summary:`Invoice your customers, record what they pay and ship what they ordered.`},section:{id:`billing`,label:`Billing`,icon:`receipt`,description:`Invoices and the payments against them.`},options:{"@happyvertical/smrt-commerce:Invoice":{fields:{historicalSourceKeyHash:{visibility:`hidden`},providerTaxAmount:{visibility:`hidden`},arJournalId:{visibility:`hidden`},revenueJournalId:{visibility:`hidden`},externalId:{visibility:`hidden`},customerExternalId:{visibility:`hidden`},externalProvider:{visibility:`hidden`},syncedAt:{visibility:`hidden`},collectionMethod:{visibility:`hidden`},sentAt:{visibility:`hidden`},viewedAt:{visibility:`hidden`},remindersSent:{visibility:`hidden`},lastReminderAt:{visibility:`hidden`},reference:{visibility:`hidden`},customerId:{required:!0}}},"@happyvertical/smrt-commerce:InvoiceLineItem":{fields:{sourceType:{visibility:`hidden`},sourceId:{visibility:`hidden`},periodStart:{visibility:`hidden`},periodEnd:{visibility:`hidden`},revenueAccountId:{visibility:`hidden`},sortOrder:{visibility:`hidden`},sku:{visibility:`hidden`},discount:{visibility:`hidden`},taxRate:{visibility:`hidden`}}},"@happyvertical/smrt-commerce:Payment":{fields:{journalId:{visibility:`hidden`},externalId:{visibility:`hidden`},externalProvider:{visibility:`hidden`},syncedAt:{visibility:`hidden`},backendId:{visibility:`hidden`},backendTxRef:{visibility:`hidden`},nativeAmount:{visibility:`hidden`},nativeCurrency:{visibility:`hidden`},usdAtQuote:{visibility:`hidden`},usdAtConfirmation:{visibility:`hidden`},transactionId:{visibility:`hidden`}}},"@happyvertical/smrt-commerce:PaymentAllocation":{fields:{allocatedBy:{visibility:`hidden`}}}},help:{markdown:`## Overview
296
-
297
- Invoicing bills your customers and records what they pay. An invoice lists its
298
- line items; a payment can be spread across one or more invoices.
299
-
300
- ## Tasks
301
-
302
- ### Send an invoice
303
-
304
- 1. Create a new invoice.
305
- 2. Pick the **{field:customerId}** and add the line items.
306
- 3. Check the **{field:totalAmount}** and set the **{field:dueDate}**.
307
- 4. Set **{field:status}** to sent once it goes out.
308
-
309
- ### Record a payment
310
-
311
- 1. Create a new payment.
312
- 2. Pick the **{field:customerId}**, then enter the **{field:Payment.amount}** and the
313
- **{field:method}** used.
314
- 3. Set **{field:Payment.status}** to completed once the money has arrived.
315
- 4. Apply it to the invoices it settles; each one shows what is still owed.
316
- `,fieldRefs:[`Payment.amount`,`Payment.status`,`customerId`,`dueDate`,`method`,`status`,`totalAmount`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`]},effectiveDemo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`,`Needs commerce.customers, which is server.`]}},{id:`commerce.leases`,label:`Leases`,summary:`Rent things out and track the term and the payments due.`,synonyms:[`rentals`,`renting`,`hire`],models:[`@happyvertical/smrt-commerce:Lease`,`@happyvertical/smrt-commerce:ContractLineItem`],nav:[{label:`Leases`,model:`@happyvertical/smrt-commerce:Lease`,icon:`home`,description:`Rentals you give or take, with terms and dates.`}],requires:[`commerce.customers`],group:{id:`agreements`,label:`Agreements`,summary:`Contracts with customers: general agreements, leases and licence sales.`},section:{id:`agreements`,label:`Agreements`,icon:`fileText`,description:`Contracts, leases and licenses with customers.`},options:{"@happyvertical/smrt-commerce:Lease":{fields:{contractType:{default:`lease`,visibility:`hidden`,locked:!0},customerId:{label:`Customer`,order:1},subtotal:{visibility:`hidden`},taxAmount:{visibility:`hidden`},channelId:{visibility:`hidden`}}},"@happyvertical/smrt-commerce:ContractLineItem":{fields:{sku:{visibility:`hidden`},startDate:{visibility:`hidden`},endDate:{visibility:`hidden`},billingPeriod:{visibility:`hidden`},sortOrder:{visibility:`hidden`},discount:{visibility:`hidden`},taxRate:{visibility:`hidden`}}}},help:{markdown:`## Overview
317
-
318
- Leases are agreements where a customer rents something from you for a period.
319
- Each lease keeps its own line items and dates.
320
-
321
- ## Tasks
322
-
323
- ### Record a lease
324
-
325
- 1. Create a new lease.
326
- 2. Pick the **{field:customerId}** renting from you.
327
- 3. Set the **{field:issueDate}** it starts and the **{field:expiryDate}** it ends.
328
- 4. Add a line item for each thing rented, then save.
329
-
330
- ### Keep an eye on it
331
-
332
- 1. Update **{field:status}** as the lease goes from draft to accepted to
333
- completed.
334
- 2. Check **{field:expiryDate}** to see which leases end soon.
335
- `,fieldRefs:[`customerId`,`expiryDate`,`issueDate`,`status`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`]},effectiveDemo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`,`Needs commerce.customers, which is server.`]}},{id:`commerce.licenses`,label:`Licence sales`,summary:`Sell licences to software, content or other rights.`,synonyms:[`licenses`,`licensing`,`subscriptions`],models:[`@happyvertical/smrt-commerce:LicenseSale`,`@happyvertical/smrt-commerce:ContractLineItem`],nav:[{label:`Licence sales`,model:`@happyvertical/smrt-commerce:LicenseSale`,icon:`shoppingBag`,description:`Licences you have sold and who holds them.`}],requires:[`commerce.customers`],group:{id:`agreements`,label:`Agreements`,summary:`Contracts with customers: general agreements, leases and licence sales.`},section:{id:`agreements`,label:`Agreements`,icon:`fileText`,description:`Contracts, leases and licenses with customers.`},options:{"@happyvertical/smrt-commerce:LicenseSale":{fields:{contractType:{default:`license_sale`,visibility:`hidden`,locked:!0},customerId:{label:`Customer`,order:1},subtotal:{visibility:`hidden`},taxAmount:{visibility:`hidden`},channelId:{visibility:`hidden`}}},"@happyvertical/smrt-commerce:ContractLineItem":{fields:{sku:{visibility:`hidden`},startDate:{visibility:`hidden`},endDate:{visibility:`hidden`},billingPeriod:{visibility:`hidden`},sortOrder:{visibility:`hidden`},discount:{visibility:`hidden`},taxRate:{visibility:`hidden`}}}},help:{markdown:`## Overview
336
-
337
- Licence sales record selling the right to use something, such as software or
338
- content, rather than a physical item.
339
-
340
- ## Tasks
341
-
342
- ### Record a licence sale
343
-
344
- 1. Create a new licence sale.
345
- 2. Pick the **{field:customerId}** who bought the licence.
346
- 3. Add a line item for what is licensed and check the **{field:totalAmount}**.
347
- 4. Set the **{field:expiryDate}** if the licence runs out, then save.
348
-
349
- ### Follow it
350
-
351
- 1. Update **{field:status}** when the customer accepts or the sale completes.
352
- `,fieldRefs:[`customerId`,`expiryDate`,`status`,`totalAmount`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`]},effectiveDemo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`,`Needs commerce.customers, which is server.`]}},{id:`commerce.purchases`,label:`Purchases`,summary:`Order from your vendors and track what you have bought.`,synonyms:[`purchase orders`,`buying`,`procurement`],models:[`@happyvertical/smrt-commerce:PurchaseOrder`,`@happyvertical/smrt-commerce:ContractLineItem`],nav:[{label:`Purchase orders`,model:`@happyvertical/smrt-commerce:PurchaseOrder`,icon:`truck`,description:`What you have ordered from your suppliers and when it arrives.`}],requires:[`commerce.vendors`],section:{id:`purchasing`,label:`Purchasing`,icon:`truck`,description:`Vendors and purchase orders: everything you buy.`},options:{"@happyvertical/smrt-commerce:PurchaseOrder":{fields:{contractType:{default:`purchase_order`,visibility:`hidden`,locked:!0},vendorId:{label:`Vendor`,order:1},channelId:{visibility:`hidden`},expiryDate:{visibility:`hidden`}}},"@happyvertical/smrt-commerce:ContractLineItem":{fields:{sku:{visibility:`hidden`},startDate:{visibility:`hidden`},endDate:{visibility:`hidden`},billingPeriod:{visibility:`hidden`},sortOrder:{visibility:`hidden`},discount:{visibility:`hidden`},taxRate:{visibility:`hidden`}}}},help:{markdown:`## Overview
353
-
354
- Purchases is where you order from your vendors and keep track of what you have
355
- bought. Every purchase order belongs to one of your vendors and records the
356
- amounts, the dates and where the order stands.
357
-
358
- ## Tasks
359
-
360
- ### Place a purchase order
361
-
362
- 1. Choose the **New** button above the list.
363
- 2. Enter the **{field:vendorId}** you are buying from. Add them under Vendors
364
- first so they are on your list.
365
- 3. Enter the **{field:subtotal}** and **{field:taxAmount}**, then the
366
- **{field:totalAmount}** you expect to pay.
367
- 4. Set the **{field:issueDate}**, and the **{field:dueDate}** for when the
368
- goods or the payment are due.
369
- 5. Add your own **{field:reference}**, such as the vendor's quote number, so
370
- you can match it to their paperwork.
371
- 6. Enter **{field:expectedDate}** as YYYY-MM-DD if you know when the delivery
372
- should arrive. Leave it blank until a date is agreed.
373
- 7. Use **{field:shipTo}** for the delivery address and instructions, such as
374
- which entrance or loading dock to use.
375
- 8. Save.
376
-
377
- ### Follow an order until it arrives
378
-
379
- 1. Open the purchase order from the list and choose Edit.
380
- 2. Update **{field:status}** as the order moves along, for example from draft to
381
- sent, accepted and completed.
382
- 3. Use **{field:notes}** to record what the vendor told you, such as delays or
383
- partial shipments.
384
-
385
- ### Record the agreement
386
-
387
- 1. Open the purchase order and choose Edit.
388
- 2. Write down the **{field:terms}** you agreed with the vendor, such as payment
389
- or delivery conditions.
390
- 3. Set **{field:expiryDate}** if the vendor's offer is only good until a certain
391
- day.
392
- `,fieldRefs:[`dueDate`,`expectedDate`,`expiryDate`,`issueDate`,`notes`,`reference`,`shipTo`,`status`,`subtotal`,`taxAmount`,`terms`,`totalAmount`,`vendorId`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`]},effectiveDemo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`,`Needs commerce.vendors, which is server.`]}},{id:`commerce.sales`,label:`Sales`,summary:`Take customer orders and track them.`,synonyms:[`sales orders`,`orders`,`customer orders`],models:[`@happyvertical/smrt-commerce:Order`,`@happyvertical/smrt-commerce:ContractLineItem`],nav:[{label:`Sales orders`,model:`@happyvertical/smrt-commerce:Order`,icon:`shoppingBag`,description:`Orders from your customers, from placed to delivered.`}],requires:[`commerce.customers`],section:{id:`sales`,label:`Sales`,icon:`shoppingBag`,description:`Customers, orders and quotes: everything you sell.`},options:{"@happyvertical/smrt-commerce:Order":{fields:{contractType:{default:`order`,visibility:`hidden`,locked:!0},customerId:{label:`Customer`,order:1},channelId:{visibility:`hidden`},expiryDate:{visibility:`hidden`}}},"@happyvertical/smrt-commerce:ContractLineItem":{fields:{sku:{visibility:`hidden`},startDate:{visibility:`hidden`},endDate:{visibility:`hidden`},billingPeriod:{visibility:`hidden`},sortOrder:{visibility:`hidden`},discount:{visibility:`hidden`},taxRate:{visibility:`hidden`}}}},help:{markdown:`## Overview
393
-
394
- Sales is where you take orders from your customers and see where each one
395
- stands. Every order belongs to one of your customers, carries its amounts and
396
- dates, and keeps a status so you always know what is still open.
397
-
398
- ## Tasks
399
-
400
- ### Take an order
401
-
402
- 1. Choose the **New** button above the list.
403
- 2. Enter the **{field:customerId}** the order is for. Add them under Customers
404
- first so they are on your list.
405
- 3. Enter the **{field:subtotal}** and **{field:taxAmount}**, then the
406
- **{field:totalAmount}** the customer will pay.
407
- 4. Set the **{field:issueDate}**, and the **{field:dueDate}** if you expect
408
- payment by a certain day.
409
- 5. Add your own **{field:reference}**, such as a purchase order number the
410
- customer gave you, so you can find the order later.
411
- 6. Save.
412
-
413
- ### Follow an order through to the end
414
-
415
- 1. Open the order from the list and choose Edit.
416
- 2. Update **{field:status}** as the order moves along, for example from draft to
417
- sent, accepted and completed.
418
- 3. Check the **{field:dueDate}** against today to spot orders that are overdue.
419
- 4. Use **{field:notes}** to record calls, changes and anything promised.
420
-
421
- ### Make a quote with an expiry
422
-
423
- 1. Create the order as usual and set its **{field:status}** to show it is still
424
- a draft.
425
- 2. Set **{field:expiryDate}** to the last day the price is good for.
426
- 3. Put your conditions, such as deposits or delivery, in **{field:terms}**.
427
- `,fieldRefs:[`customerId`,`dueDate`,`expiryDate`,`issueDate`,`notes`,`reference`,`status`,`subtotal`,`taxAmount`,`terms`,`totalAmount`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`]},effectiveDemo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`,`Needs commerce.customers, which is server.`]}},{id:`commerce.vendors`,label:`Vendors`,summary:`Keep a list of the suppliers you buy from.`,synonyms:[`suppliers`,`sellers`],models:[`@happyvertical/smrt-commerce:Vendor`],nav:[{label:`Vendors`,model:`@happyvertical/smrt-commerce:Vendor`,icon:`briefcase`,description:`The suppliers you buy from, with terms and contacts.`}],requires:[],section:{id:`purchasing`,label:`Purchasing`,icon:`truck`,description:`Vendors and purchase orders: everything you buy.`},options:{"@happyvertical/smrt-commerce:Vendor":{fields:{profileId:{label:`Name`,order:-1}}}},help:{markdown:`## Overview
428
-
429
- Vendors is your list of the suppliers you buy from. Each record holds who they
430
- are, how to reach them and the terms you have agreed, so you can order from them
431
- quickly and keep track of what you have bought.
432
-
433
- ## Tasks
434
-
435
- ### Add a vendor
436
-
437
- 1. Choose the **New** button above the list.
438
- 2. Enter **{field:defaultContactEmail}** and **{field:defaultContactPhone}** for
439
- the person you normally deal with.
440
- 3. Set the **{field:currency}** they bill you in and your **{field:paymentTerms}**,
441
- for example "Net 30".
442
- 4. Save. The vendor is now on your list and ready to use on a purchase order.
443
-
444
- ### Note how a vendor likes to work
445
-
446
- 1. Open the vendor from the list and choose Edit.
447
- 2. Enter **{field:leadTimeDays}**, the number of days they usually need between
448
- your order and delivery, so you can plan ahead.
449
- 3. Enter **{field:minimumOrderAmount}** if they will not accept small orders.
450
- 4. Use **{field:notes}** for anything else worth remembering, such as the best
451
- time to call.
452
-
453
- ### Keep payment details in one place
454
-
455
- 1. Open the vendor and choose Edit.
456
- 2. Record where payments to this vendor should be sent, so it is all in one
457
- place.
458
- 3. Set **{field:status}** to show whether you still buy from them: active,
459
- inactive or suspended.
460
- `,fieldRefs:[`currency`,`defaultContactEmail`,`defaultContactPhone`,`leadTimeDays`,`minimumOrderAmount`,`notes`,`paymentTerms`,`status`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`]}},{id:`commerce.wholesale`,label:`Wholesale orders`,summary:`Take bulk orders from trade customers.`,synonyms:[`bulk orders`,`trade orders`,`b2b`],models:[`@happyvertical/smrt-commerce:WholesaleOrder`,`@happyvertical/smrt-commerce:ContractLineItem`],nav:[{label:`Wholesale orders`,model:`@happyvertical/smrt-commerce:WholesaleOrder`,icon:`shoppingBag`,description:`Bulk orders from cafes, shops and other businesses.`}],requires:[`commerce.customers`],section:{id:`sales`,label:`Sales`,icon:`shoppingBag`,description:`Customers, orders and quotes: everything you sell.`},options:{"@happyvertical/smrt-commerce:WholesaleOrder":{fields:{contractType:{default:`wholesale_order`,visibility:`hidden`,locked:!0},customerId:{label:`Customer`,order:1},channelId:{visibility:`hidden`},expiryDate:{visibility:`hidden`}}},"@happyvertical/smrt-commerce:ContractLineItem":{fields:{sku:{visibility:`hidden`},startDate:{visibility:`hidden`},endDate:{visibility:`hidden`},billingPeriod:{visibility:`hidden`},sortOrder:{visibility:`hidden`},discount:{visibility:`hidden`},taxRate:{visibility:`hidden`}}}},help:{markdown:`## Overview
461
-
462
- Wholesale orders are bulk orders from trade customers. They work like sales
463
- orders, with a list of line items, but are kept in their own list so trade and
464
- retail sales stay apart.
465
-
466
- ## Tasks
467
-
468
- ### Take a wholesale order
469
-
470
- 1. Create a new wholesale order.
471
- 2. Pick the **{field:customerId}** placing the order.
472
- 3. Add the line items and check the **{field:totalAmount}**.
473
- 4. Set the **{field:dueDate}** for payment and save.
474
-
475
- ### Track it
476
-
477
- 1. Update **{field:status}** as the order moves from draft to completed.
478
- 2. Use **{field:reference}** for the buyer's own order number.
479
- `,fieldRefs:[`customerId`,`dueDate`,`reference`,`status`,`totalAmount`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`]},effectiveDemo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: @happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`,`Needs commerce.customers, which is server.`]}}]},{id:`content`,packageName:`@happyvertical/smrt-content`,version:`0.57.9`,description:`Content processing module for SMRT framework - handles documents, web content, and media`,models:[{id:`@happyvertical/smrt-content:Article`,name:`Article`,collection:`contents`,extends:`@happyvertical/smrt-content:Content`,description:`Article content type`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`type`,type:`text`,required:!1},{name:`variant`,type:`text`,required:!1},{name:`fileKey`,type:`text`,required:!1},{name:`author`,type:`text`,required:!1},{name:`name`,type:`text`,required:!0,default:``},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`body`,type:`text`,required:!1},{name:`bodyFormat`,type:`text`,required:!1,enum:[`markdown`,`html`]},{name:`publish_date`,type:`datetime`,required:!1},{name:`url`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`original_url`,type:`text`,required:!1},{name:`language`,type:`text`,required:!1},{name:`tags`,type:`json`,required:!1},{name:`category`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`published`,`draft`,`review`,`archived`,`deleted`]},{name:`state`,type:`text`,required:!1,default:`active`,enum:[`deprecated`,`active`,`highlighted`]},{name:`metadata`,type:`json`,required:!1},{name:`thumbnailAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`}],rest:[],mcp:[],cli:[],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`addFact`,async:!0,parameters:[`fact: Fact | string`,`relationship?: FactContentRelationship`,`metadata?: Record<string, unknown>`],returnType:`any`,aiCallable:!1},{name:`addReference`,async:!0,parameters:[`content: Content | string`,`options?: object`],returnType:`any`,aiCallable:!1},{name:`browseFacts`,async:!0,parameters:[`query?: any`,`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`createVersion`,async:!0,parameters:[`options?: CreateContentVersionOptions`],returnType:`any`,aiCallable:!1},{name:`evaluateReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<ContentReviewProfileEvaluation>`,aiCallable:!1},{name:`evaluateReviewProfileAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`generateThumbnail`,async:!0,parameters:[`options: ThumbnailOptions`],returnType:`Promise<Image>`,aiCallable:!1},{name:`getAncestorPaths`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getAssetIds`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`,`options?: object`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getCategorySegments`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactAuditState`,async:!0,parameters:[],returnType:`Promise<FactAuditState>`,aiCallable:!1},{name:`getFactAuditStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactLinks`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getFacts`,async:!0,parameters:[`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getGovernanceState`,async:!0,parameters:[],returnType:`Promise<ContentGovernanceState>`,aiCallable:!1},{name:`getGovernanceStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getParentCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getPublishedTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getPublishedTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReferenceDrift`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferenceEdges`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReviewRequirements`,async:!0,parameters:[`profileKey: string`,`governance?: ResolvedContentGovernance`],returnType:`any`,aiCallable:!1},{name:`getReviews`,async:!0,parameters:[`kind?: any`],returnType:`any`,aiCallable:!1},{name:`getRootCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getThumbnail`,async:!0,parameters:[],returnType:`Promise<Image | null>`,aiCallable:!1},{name:`getVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isGoverned`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInCategory`,async:!1,parameters:[`categoryPath: string`,`includeChildren?: any`],returnType:`boolean`,aiCallable:!1},{name:`isReadyForReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`issueCorrection`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`issueCorrectionAction`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`listCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviewProfilesAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviews`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`listVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`loadReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`mutateVersionAction`,async:!0,parameters:[`options?: any`],returnType:`any`,aiCallable:!1},{name:`previewTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`previewTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`recheckFactClaims`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`recheckFactClaimsAction`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeFact`,async:!0,parameters:[`factId: string`,`relationship?: FactContentRelationship`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeReference`,async:!0,parameters:[`targetId: string`],returnType:`any`,aiCallable:!1},{name:`repairFactAudit`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactAuditAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidence`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidenceAction`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`resolveGovernance`,async:!0,parameters:[],returnType:`Promise<ResolvedContentGovernance>`,aiCallable:!1},{name:`restoreFromVersion`,async:!0,parameters:[`versionNumber: number`],returnType:`any`,aiCallable:!1},{name:`reviewFacts`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`reviewSafety`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`runReview`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`runReviewAction`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SmrtSaveOptions`],returnType:`any`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown> | null | undefined`],returnType:`void`,aiCallable:!1},{name:`setThumbnail`,async:!0,parameters:[`image: Image`],returnType:`Promise<void>`,aiCallable:!1},{name:`syncFacts`,async:!0,parameters:[`factIds: string[]`,`relationship?: FactContentRelationship`],returnType:`Promise<object>`,aiCallable:!1},{name:`syncFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatus`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatusAction`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`patch: Partial<Record<string, unknown>>`],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`],exposed:!1},{id:`@happyvertical/smrt-content:Content`,name:`Content`,collection:`contents`,description:`Structured content object with metadata and body text`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`type`,type:`text`,required:!1},{name:`variant`,type:`text`,required:!1},{name:`fileKey`,type:`text`,required:!1},{name:`author`,type:`text`,required:!1},{name:`name`,type:`text`,required:!0,default:``},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`body`,type:`text`,required:!1},{name:`bodyFormat`,type:`text`,required:!1,enum:[`markdown`,`html`]},{name:`publish_date`,type:`datetime`,required:!1},{name:`url`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`original_url`,type:`text`,required:!1},{name:`language`,type:`text`,required:!1},{name:`tags`,type:`json`,required:!1},{name:`category`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`published`,`draft`,`review`,`archived`,`deleted`]},{name:`state`,type:`text`,required:!1,default:`active`,enum:[`deprecated`,`active`,`highlighted`]},{name:`metadata`,type:`json`,required:!1},{name:`thumbnailAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`}],rest:[{method:`GET`,path:`/contents`},{method:`GET`,path:`/contents/[id]`},{method:`POST`,path:`/contents`},{method:`PATCH`,path:`/contents/[id]`},{method:`DELETE`,path:`/contents/[id]`},{method:`POST`,path:`/contents/[id]/fact-audit/repair`},{method:`POST`,path:`/contents/[id]/fact-audit/evidence/repair`},{method:`POST`,path:`/contents/[id]/fact-audit/claims/recheck`},{method:`PUT`,path:`/contents/[id]/fact-audit/evidence/status`},{method:`GET`,path:`/contents/[id]/fact-audit`},{method:`GET`,path:`/contents/[id]/facts`},{method:`PUT`,path:`/contents/[id]/facts`},{method:`GET`,path:`/contents/[id]/reviews`},{method:`GET`,path:`/contents/[id]/governance`},{method:`GET`,path:`/contents/[id]/review-profiles`},{method:`GET`,path:`/contents/[id]/review-profiles/[profileKey]`},{method:`GET`,path:`/contents/[id]/transparency`},{method:`GET`,path:`/contents/[id]/transparency/preview`},{method:`POST`,path:`/contents/[id]/reviews`},{method:`GET`,path:`/contents/[id]/corrections`},{method:`POST`,path:`/contents/[id]/corrections`},{method:`GET`,path:`/contents/[id]/versions`},{method:`POST`,path:`/contents/[id]/versions`},{method:`POST`,path:`/contents/query`},{method:`GET`,path:`/contents/facts`},{method:`GET`,path:`/contents/by-slug`},{method:`GET`,path:`/contents/governance`},{method:`GET`,path:`/contents/governance/resolve`}],mcp:[{operation:`create`,name:`content_create`},{operation:`get`,name:`content_get`},{operation:`list`,name:`content_list`},{operation:`update`,name:`content_update`}],cli:[{operation:`addAsset`,name:`content_addAsset`},{operation:`addFact`,name:`content_addFact`},{operation:`addReference`,name:`content_addReference`},{operation:`browseFacts`,name:`content_browseFacts`},{operation:`create`,name:`content_create`},{operation:`createVersion`,name:`content_createVersion`},{operation:`delete`,name:`content_delete`},{operation:`evaluateReviewProfile`,name:`content_evaluateReviewProfile`},{operation:`evaluateReviewProfileAction`,name:`content_evaluateReviewProfileAction`},{operation:`generateThumbnail`,name:`content_generateThumbnail`},{operation:`get`,name:`content_get`},{operation:`getAncestorPaths`,name:`content_getAncestorPaths`},{operation:`getAssetIds`,name:`content_getAssetIds`},{operation:`getAssets`,name:`content_getAssets`},{operation:`getCategorySegments`,name:`content_getCategorySegments`},{operation:`getCorrections`,name:`content_getCorrections`},{operation:`getFactAuditState`,name:`content_getFactAuditState`},{operation:`getFactAuditStateAction`,name:`content_getFactAuditStateAction`},{operation:`getFactLinks`,name:`content_getFactLinks`},{operation:`getFacts`,name:`content_getFacts`},{operation:`getFactsState`,name:`content_getFactsState`},{operation:`getGovernanceState`,name:`content_getGovernanceState`},{operation:`getGovernanceStateAction`,name:`content_getGovernanceStateAction`},{operation:`getMetadata`,name:`content_getMetadata`},{operation:`getParentCategory`,name:`content_getParentCategory`},{operation:`getPublishedTransparency`,name:`content_getPublishedTransparency`},{operation:`getPublishedTransparencyAction`,name:`content_getPublishedTransparencyAction`},{operation:`getReferenceDrift`,name:`content_getReferenceDrift`},{operation:`getReferenceEdges`,name:`content_getReferenceEdges`},{operation:`getReferences`,name:`content_getReferences`},{operation:`getReviewRequirements`,name:`content_getReviewRequirements`},{operation:`getReviews`,name:`content_getReviews`},{operation:`getRootCategory`,name:`content_getRootCategory`},{operation:`getThumbnail`,name:`content_getThumbnail`},{operation:`getVersions`,name:`content_getVersions`},{operation:`isGoverned`,name:`content_isGoverned`},{operation:`isInCategory`,name:`content_isInCategory`},{operation:`isReadyForReviewProfile`,name:`content_isReadyForReviewProfile`},{operation:`issueCorrection`,name:`content_issueCorrection`},{operation:`issueCorrectionAction`,name:`content_issueCorrectionAction`},{operation:`list`,name:`content_list`},{operation:`listCorrections`,name:`content_listCorrections`},{operation:`listReviewProfilesAction`,name:`content_listReviewProfilesAction`},{operation:`listReviews`,name:`content_listReviews`},{operation:`listVersions`,name:`content_listVersions`},{operation:`loadReferences`,name:`content_loadReferences`},{operation:`mutateVersionAction`,name:`content_mutateVersionAction`},{operation:`previewTransparency`,name:`content_previewTransparency`},{operation:`previewTransparencyAction`,name:`content_previewTransparencyAction`},{operation:`recheckFactClaims`,name:`content_recheckFactClaims`},{operation:`recheckFactClaimsAction`,name:`content_recheckFactClaimsAction`},{operation:`removeAsset`,name:`content_removeAsset`},{operation:`removeFact`,name:`content_removeFact`},{operation:`removeReference`,name:`content_removeReference`},{operation:`repairFactAudit`,name:`content_repairFactAudit`},{operation:`repairFactAuditAction`,name:`content_repairFactAuditAction`},{operation:`repairFactEvidence`,name:`content_repairFactEvidence`},{operation:`repairFactEvidenceAction`,name:`content_repairFactEvidenceAction`},{operation:`resolveGovernance`,name:`content_resolveGovernance`},{operation:`restoreFromVersion`,name:`content_restoreFromVersion`},{operation:`reviewFacts`,name:`content_reviewFacts`},{operation:`reviewSafety`,name:`content_reviewSafety`},{operation:`runReview`,name:`content_runReview`},{operation:`runReviewAction`,name:`content_runReviewAction`},{operation:`setMetadata`,name:`content_setMetadata`},{operation:`setThumbnail`,name:`content_setThumbnail`},{operation:`syncFacts`,name:`content_syncFacts`},{operation:`syncFactsState`,name:`content_syncFactsState`},{operation:`update`,name:`content_update`},{operation:`updateFactEvidenceStatus`,name:`content_updateFactEvidenceStatus`},{operation:`updateFactEvidenceStatusAction`,name:`content_updateFactEvidenceStatusAction`},{operation:`updateMetadata`,name:`content_updateMetadata`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`addFact`,async:!0,parameters:[`fact: Fact | string`,`relationship?: FactContentRelationship`,`metadata?: Record<string, unknown>`],returnType:`any`,aiCallable:!1},{name:`addReference`,async:!0,parameters:[`content: Content | string`,`options?: object`],returnType:`any`,aiCallable:!1},{name:`browseFacts`,async:!0,parameters:[`query?: any`,`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`createVersion`,async:!0,parameters:[`options?: CreateContentVersionOptions`],returnType:`any`,aiCallable:!1},{name:`evaluateReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<ContentReviewProfileEvaluation>`,aiCallable:!1},{name:`evaluateReviewProfileAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Content[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Content[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Content[]>`,aiCallable:!1},{name:`generateMissingThumbnails`,async:!0,parameters:[`options: GenerateMissingThumbnailsOptions`],returnType:`Promise<object>`,aiCallable:!1},{name:`generateThumbnail`,async:!0,parameters:[`options: ThumbnailOptions`],returnType:`Promise<Image>`,aiCallable:!1},{name:`getAncestorPaths`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getAssetIds`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`,`options?: object`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getBySlug`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getCategorySegments`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getDb`,async:!1,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactAuditState`,async:!0,parameters:[],returnType:`Promise<FactAuditState>`,aiCallable:!1},{name:`getFactAuditStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactLinks`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getFacts`,async:!0,parameters:[`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getGovernanceDefinitionsAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getGovernanceState`,async:!0,parameters:[],returnType:`Promise<ContentGovernanceState>`,aiCallable:!1},{name:`getGovernanceStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getParentCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getPublishedTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getPublishedTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReferenceDrift`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferenceEdges`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReviewRequirements`,async:!0,parameters:[`profileKey: string`,`governance?: ResolvedContentGovernance`],returnType:`any`,aiCallable:!1},{name:`getReviews`,async:!0,parameters:[`kind?: any`],returnType:`any`,aiCallable:!1},{name:`getRootCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getThumbnail`,async:!0,parameters:[],returnType:`Promise<Image | null>`,aiCallable:!1},{name:`getVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isGoverned`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInCategory`,async:!1,parameters:[`categoryPath: string`,`includeChildren?: any`],returnType:`boolean`,aiCallable:!1},{name:`isReadyForReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`issueCorrection`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`issueCorrectionAction`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`listCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviewProfilesAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviews`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`listVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`loadReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`mirror`,async:!0,parameters:[`options: object`],returnType:`any`,aiCallable:!1},{name:`mutateVersionAction`,async:!0,parameters:[`options?: any`],returnType:`any`,aiCallable:!1},{name:`previewTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`previewTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`queryAction`,async:!0,parameters:[`options: unknown`],returnType:`Promise<DataQueryResult>`,aiCallable:!1},{name:`recheckFactClaims`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`recheckFactClaimsAction`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeFact`,async:!0,parameters:[`factId: string`,`relationship?: FactContentRelationship`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeReference`,async:!0,parameters:[`targetId: string`],returnType:`any`,aiCallable:!1},{name:`repairFactAudit`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactAuditAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidence`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidenceAction`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`resolveGovernance`,async:!0,parameters:[],returnType:`Promise<ResolvedContentGovernance>`,aiCallable:!1},{name:`resolveGovernanceAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`restoreFromVersion`,async:!0,parameters:[`versionNumber: number`],returnType:`any`,aiCallable:!1},{name:`reviewFacts`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`reviewSafety`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`runReview`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`runReviewAction`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SmrtSaveOptions`],returnType:`any`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown> | null | undefined`],returnType:`void`,aiCallable:!1},{name:`setThumbnail`,async:!0,parameters:[`image: Image`],returnType:`Promise<void>`,aiCallable:!1},{name:`syncContentDir`,async:!0,parameters:[`options: object`],returnType:`any`,aiCallable:!1},{name:`syncFacts`,async:!0,parameters:[`factIds: string[]`,`relationship?: FactContentRelationship`],returnType:`Promise<object>`,aiCallable:!1},{name:`syncFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatus`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatusAction`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`patch: Partial<Record<string, unknown>>`],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`writeContentFile`,async:!0,parameters:[`options: object`],returnType:`any`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`],exposed:!0},{id:`@happyvertical/smrt-content:ContentAsset`,name:`ContentAsset`,collection:`contentassets`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`contentId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-content:Content`},{name:`assetId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-assets:Asset`},{name:`relationship`,type:`text`,required:!0},{name:`sortOrder`,type:`integer`,required:!0,default:0}],rest:[],mcp:[],cli:[],methods:[{name:`attach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<TItem>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`leftId: string`,`rightIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-content:Content`],exposed:!1},{id:`@happyvertical/smrt-content:ContentContribution`,name:`ContentContribution`,collection:`contentcontributions`,display:{label:`title`},fields:[{name:`contributorId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-content:ContentContributor`},{name:`contributionTypeKey`,type:`text`,required:!0},{name:`status`,type:`text`,required:!1,default:`submitted`,enum:[`submitted`,`quarantined`,`needs_changes`,`approved`,`promoted`,`rejected`,`withdrawn`]},{name:`intakeDecision`,type:`text`,required:!1,default:`accepted`,enum:[`accepted`,`quarantined`,`rejected`]},{name:`channel`,type:`text`,required:!1,default:`web`,enum:[`web`,`email`]},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`body`,type:`text`,required:!1},{name:`contributorEmail`,type:`text`,required:!1},{name:`contributorName`,type:`text`,required:!1},{name:`threadKey`,type:`text`,required:!1},{name:`sourceMessageId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-messages:Message`},{name:`editorNotes`,type:`text`,required:!1},{name:`promotedContentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-content:Content`},{name:`revisionCount`,type:`integer`,required:!0,default:0},{name:`approvedAt`,type:`datetime`,required:!1},{name:`promotedAt`,type:`datetime`,required:!1},{name:`rejectedAt`,type:`datetime`,required:!1},{name:`withdrawnAt`,type:`datetime`,required:!1},{name:`requestedChangesAt`,type:`datetime`,required:!1},{name:`metadata`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentcontributions`},{method:`GET`,path:`/contentcontributions/[id]`},{method:`POST`,path:`/contentcontributions`},{method:`PATCH`,path:`/contentcontributions/[id]`},{method:`DELETE`,path:`/contentcontributions/[id]`},{method:`POST`,path:`/contentcontributions/[id]/revisions`},{method:`POST`,path:`/contentcontributions/[id]/request-changes`},{method:`POST`,path:`/contentcontributions/[id]/reject`},{method:`POST`,path:`/contentcontributions/[id]/withdraw`},{method:`POST`,path:`/contentcontributions/[id]/approve`},{method:`POST`,path:`/contentcontributions/[id]/promote`},{method:`GET`,path:`/contentcontributions/types`},{method:`GET`,path:`/contentcontributions/by-contributor`},{method:`GET`,path:`/contentcontributions/inbox`},{method:`POST`,path:`/contentcontributions/submit`},{method:`POST`,path:`/contentcontributions/ingest-email`}],mcp:[{operation:`create`,name:`contentcontribution_create`},{operation:`get`,name:`contentcontribution_get`},{operation:`list`,name:`contentcontribution_list`},{operation:`update`,name:`contentcontribution_update`}],cli:[{operation:`appendRevisionAction`,name:`contentcontribution_appendRevisionAction`},{operation:`approveAction`,name:`contentcontribution_approveAction`},{operation:`create`,name:`contentcontribution_create`},{operation:`delete`,name:`contentcontribution_delete`},{operation:`get`,name:`contentcontribution_get`},{operation:`getAttachments`,name:`contentcontribution_getAttachments`},{operation:`getContributor`,name:`contentcontribution_getContributor`},{operation:`getLatestRevision`,name:`contentcontribution_getLatestRevision`},{operation:`getMetadata`,name:`contentcontribution_getMetadata`},{operation:`getRevisions`,name:`contentcontribution_getRevisions`},{operation:`list`,name:`contentcontribution_list`},{operation:`promoteAction`,name:`contentcontribution_promoteAction`},{operation:`rejectAction`,name:`contentcontribution_rejectAction`},{operation:`requestChangesAction`,name:`contentcontribution_requestChangesAction`},{operation:`resolveContributionType`,name:`contentcontribution_resolveContributionType`},{operation:`setMetadata`,name:`contentcontribution_setMetadata`},{operation:`update`,name:`contentcontribution_update`},{operation:`withdrawAction`,name:`contentcontribution_withdrawAction`}],methods:[{name:`appendRevisionAction`,async:!0,parameters:[`options?: AppendContentContributionRevisionOptions`],returnType:`any`,aiCallable:!1},{name:`approveAction`,async:!0,parameters:[`options?: ApproveContentContributionOptions`],returnType:`any`,aiCallable:!1},{name:`getAttachments`,async:!0,parameters:[],returnType:`Promise<ContentContributionAttachment[]>`,aiCallable:!1},{name:`getContributionTypesAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getContributor`,async:!0,parameters:[],returnType:`Promise<ContentContributor | null>`,aiCallable:!1},{name:`getLatestRevision`,async:!0,parameters:[],returnType:`Promise<ContentContributionRevision | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getRevisions`,async:!0,parameters:[],returnType:`Promise<ContentContributionRevision[]>`,aiCallable:!1},{name:`ingestEmailContribution`,async:!0,parameters:[`options: IngestEmailContentContributionOptions`],returnType:`any`,aiCallable:!1},{name:`listForContributor`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`listInboxAction`,async:!0,parameters:[`options?: object`],returnType:`Promise<ContentContribution[]>`,aiCallable:!1},{name:`promoteAction`,async:!0,parameters:[`options?: PromoteContentContributionOptions`],returnType:`any`,aiCallable:!1},{name:`rejectAction`,async:!0,parameters:[`options?: RejectContentContributionOptions`],returnType:`any`,aiCallable:!1},{name:`requestChangesAction`,async:!0,parameters:[`options?: RequestChangesContentContributionOptions`],returnType:`any`,aiCallable:!1},{name:`resolveContributionType`,async:!0,parameters:[],returnType:`Promise<ContentContributionTypeDefinition | null>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`submitWebContribution`,async:!0,parameters:[`options: SubmitWebContentContributionOptions`],returnType:`any`,aiCallable:!1},{name:`withdrawAction`,async:!0,parameters:[`options?: WithdrawContentContributionOptions`],returnType:`any`,aiCallable:!1}],references:[`@happyvertical/smrt-content:Content`,`@happyvertical/smrt-content:ContentContributor`,`@happyvertical/smrt-messages:Message`],exposed:!0},{id:`@happyvertical/smrt-content:ContentContributionAttachment`,name:`ContentContributionAttachment`,collection:`contentcontributionattachments`,fields:[{name:`contributionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-content:ContentContribution`},{name:`revisionId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-content:ContentContributionRevision`},{name:`filename`,type:`text`,required:!1},{name:`mimeType`,type:`text`,required:!1},{name:`size`,type:`integer`,required:!0,default:0},{name:`fileKey`,type:`text`,required:!1},{name:`sourceUri`,type:`text`,required:!1},{name:`channel`,type:`text`,required:!1,default:`web`,enum:[`web`,`email`]},{name:`promotedAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`metadata`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentcontributionattachments`},{method:`GET`,path:`/contentcontributionattachments/[id]`},{method:`POST`,path:`/contentcontributionattachments`},{method:`PATCH`,path:`/contentcontributionattachments/[id]`},{method:`DELETE`,path:`/contentcontributionattachments/[id]`},{method:`POST`,path:`/contentcontributionattachments/listForContribution`},{method:`POST`,path:`/contentcontributionattachments/listForRevision`}],mcp:[{operation:`create`,name:`contentcontributionattachment_create`},{operation:`delete`,name:`contentcontributionattachment_delete`},{operation:`get`,name:`contentcontributionattachment_get`},{operation:`list`,name:`contentcontributionattachment_list`},{operation:`update`,name:`contentcontributionattachment_update`},{operation:`listForContribution`,name:`contentcontributionattachmentcollection_listforcontribution`},{operation:`listForRevision`,name:`contentcontributionattachmentcollection_listforrevision`}],cli:[{operation:`create`,name:`contentcontributionattachment_create`},{operation:`delete`,name:`contentcontributionattachment_delete`},{operation:`get`,name:`contentcontributionattachment_get`},{operation:`getMetadata`,name:`contentcontributionattachment_getMetadata`},{operation:`list`,name:`contentcontributionattachment_list`},{operation:`update`,name:`contentcontributionattachment_update`},{operation:`listForContribution`,name:`contentcontributionattachmentcollection_listForContribution`},{operation:`listForRevision`,name:`contentcontributionattachmentcollection_listForRevision`}],methods:[{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`listForContribution`,async:!0,parameters:[`contributionId: string`],returnType:`Promise<ContentContributionAttachment[]>`,aiCallable:!0},{name:`listForRevision`,async:!0,parameters:[`revisionId: string`],returnType:`Promise<ContentContributionAttachment[]>`,aiCallable:!0}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-content:ContentContribution`,`@happyvertical/smrt-content:ContentContributionRevision`],exposed:!0},{id:`@happyvertical/smrt-content:ContentContributionRevision`,name:`ContentContributionRevision`,collection:`contentcontributionrevisions`,display:{label:`title`},fields:[{name:`contributionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-content:ContentContribution`},{name:`revisionNumber`,type:`integer`,required:!0,default:1},{name:`channel`,type:`text`,required:!1,default:`web`,enum:[`web`,`email`]},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`body`,type:`text`,required:!1},{name:`sourceMessageId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-messages:Message`},{name:`sourceThreadKey`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentcontributionrevisions`},{method:`GET`,path:`/contentcontributionrevisions/[id]`},{method:`POST`,path:`/contentcontributionrevisions`},{method:`PATCH`,path:`/contentcontributionrevisions/[id]`},{method:`DELETE`,path:`/contentcontributionrevisions/[id]`}],mcp:[{operation:`create`,name:`contentcontributionrevision_create`},{operation:`delete`,name:`contentcontributionrevision_delete`},{operation:`get`,name:`contentcontributionrevision_get`},{operation:`list`,name:`contentcontributionrevision_list`},{operation:`update`,name:`contentcontributionrevision_update`}],cli:[{operation:`create`,name:`contentcontributionrevision_create`},{operation:`delete`,name:`contentcontributionrevision_delete`},{operation:`get`,name:`contentcontributionrevision_get`},{operation:`getMetadata`,name:`contentcontributionrevision_getMetadata`},{operation:`list`,name:`contentcontributionrevision_list`},{operation:`update`,name:`contentcontributionrevision_update`},{operation:`getLatestForContribution`,name:`contentcontributionrevisioncollection_getLatestForContribution`},{operation:`listForContribution`,name:`contentcontributionrevisioncollection_listForContribution`}],methods:[{name:`getLatestForContribution`,async:!0,parameters:[`contributionId: string`],returnType:`Promise<ContentContributionRevision | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`listForContribution`,async:!0,parameters:[`contributionId: string`],returnType:`Promise<ContentContributionRevision[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-content:ContentContribution`,`@happyvertical/smrt-messages:Message`],exposed:!0},{id:`@happyvertical/smrt-content:ContentContributionType`,name:`ContentContributionType`,collection:`contentcontributiontypes`,display:{label:`label`},fields:[{name:`key`,type:`text`,required:!0},{name:`label`,type:`text`,required:!1},{name:`enabled`,type:`boolean`,required:!0,default:!0},{name:`allowedChannels`,type:`text`,required:!1},{name:`allowText`,type:`boolean`,required:!0,default:!0},{name:`allowFiles`,type:`boolean`,required:!0,default:!1},{name:`allowEmptyText`,type:`boolean`,required:!0,default:!1},{name:`intakeRules`,type:`text`,required:!1},{name:`promotion`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentcontributiontypes`},{method:`GET`,path:`/contentcontributiontypes/[id]`},{method:`POST`,path:`/contentcontributiontypes`},{method:`PATCH`,path:`/contentcontributiontypes/[id]`},{method:`DELETE`,path:`/contentcontributiontypes/[id]`}],mcp:[{operation:`create`,name:`contentcontributiontype_create`},{operation:`delete`,name:`contentcontributiontype_delete`},{operation:`get`,name:`contentcontributiontype_get`},{operation:`list`,name:`contentcontributiontype_list`},{operation:`update`,name:`contentcontributiontype_update`}],cli:[{operation:`create`,name:`contentcontributiontype_create`},{operation:`delete`,name:`contentcontributiontype_delete`},{operation:`get`,name:`contentcontributiontype_get`},{operation:`getAllowedChannels`,name:`contentcontributiontype_getAllowedChannels`},{operation:`getIntakeRules`,name:`contentcontributiontype_getIntakeRules`},{operation:`getMetadata`,name:`contentcontributiontype_getMetadata`},{operation:`getPromotion`,name:`contentcontributiontype_getPromotion`},{operation:`list`,name:`contentcontributiontype_list`},{operation:`setAllowedChannels`,name:`contentcontributiontype_setAllowedChannels`},{operation:`setIntakeRules`,name:`contentcontributiontype_setIntakeRules`},{operation:`setMetadata`,name:`contentcontributiontype_setMetadata`},{operation:`setPromotion`,name:`contentcontributiontype_setPromotion`},{operation:`toDefinition`,name:`contentcontributiontype_toDefinition`},{operation:`update`,name:`contentcontributiontype_update`},{operation:`getByKey`,name:`contentcontributiontypecollection_getByKey`}],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`getAllowedChannels`,async:!1,parameters:[],returnType:`ContentContributionChannel[]`,aiCallable:!1},{name:`getByKey`,async:!0,parameters:[`key: string`],returnType:`Promise<ContentContributionType | null>`,aiCallable:!1},{name:`getIntakeRules`,async:!1,parameters:[],returnType:`ContentContributionIntakeRules`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getPromotion`,async:!1,parameters:[],returnType:`ContentContributionPromotionMapping`,aiCallable:!1},{name:`setAllowedChannels`,async:!1,parameters:[`channels: ContentContributionChannel[]`],returnType:`void`,aiCallable:!1},{name:`setIntakeRules`,async:!1,parameters:[`rules: ContentContributionIntakeRules`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setPromotion`,async:!1,parameters:[`promotion: ContentContributionPromotionMapping`],returnType:`void`,aiCallable:!1},{name:`toDefinition`,async:!1,parameters:[],returnType:`ContentContributionTypeDefinition`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-content:ContentContributor`,name:`ContentContributor`,collection:`contentcontributors`,display:{label:`name`},fields:[{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`email`,type:`text`,required:!0},{name:`name`,type:`text`,required:!1},{name:`trustLevel`,type:`text`,required:!1,default:`standard`,enum:[`standard`,`trusted`,`blocked`]},{name:`metadata`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentcontributors`},{method:`GET`,path:`/contentcontributors/[id]`},{method:`POST`,path:`/contentcontributors`},{method:`PATCH`,path:`/contentcontributors/[id]`},{method:`DELETE`,path:`/contentcontributors/[id]`},{method:`POST`,path:`/contentcontributors/getByEmail`},{method:`POST`,path:`/contentcontributors/getByProfileId`}],mcp:[{operation:`create`,name:`contentcontributor_create`},{operation:`delete`,name:`contentcontributor_delete`},{operation:`get`,name:`contentcontributor_get`},{operation:`list`,name:`contentcontributor_list`},{operation:`update`,name:`contentcontributor_update`},{operation:`getByEmail`,name:`contentcontributorcollection_getbyemail`},{operation:`getByProfileId`,name:`contentcontributorcollection_getbyprofileid`}],cli:[{operation:`create`,name:`contentcontributor_create`},{operation:`delete`,name:`contentcontributor_delete`},{operation:`get`,name:`contentcontributor_get`},{operation:`getMetadata`,name:`contentcontributor_getMetadata`},{operation:`list`,name:`contentcontributor_list`},{operation:`setMetadata`,name:`contentcontributor_setMetadata`},{operation:`update`,name:`contentcontributor_update`},{operation:`findOrCreateByEmail`,name:`contentcontributorcollection_findOrCreateByEmail`},{operation:`getByEmail`,name:`contentcontributorcollection_getByEmail`},{operation:`getByProfileId`,name:`contentcontributorcollection_getByProfileId`}],methods:[{name:`findOrCreateByEmail`,async:!0,parameters:[`options: object`],returnType:`Promise<ContentContributor>`,aiCallable:!1},{name:`getByEmail`,async:!0,parameters:[`email: string`],returnType:`Promise<ContentContributor | null>`,aiCallable:!0},{name:`getByProfileId`,async:!0,parameters:[`profileId: string`],returnType:`Promise<ContentContributor | null>`,aiCallable:!0},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-content:ContentCorrection`,name:`ContentCorrection`,collection:`contentcorrections`,fields:[{name:`contentId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-content:Content`},{name:`contentVersionId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-content:ContentVersion`},{name:`factId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-facts:Fact`},{name:`replacementFactId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-facts:Fact`},{name:`correctionType`,type:`text`,required:!1,default:`fact`,enum:[`fact`,`safety`,`copy`,`custom`]},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`draft`,`published`,`retracted`]},{name:`summary`,type:`text`,required:!1},{name:`incorrectText`,type:`text`,required:!1},{name:`correctedText`,type:`text`,required:!1},{name:`publicNote`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`publishedAt`,type:`datetime`,required:!1},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentcorrections`},{method:`GET`,path:`/contentcorrections/[id]`},{method:`POST`,path:`/contentcorrections`},{method:`PATCH`,path:`/contentcorrections/[id]`},{method:`POST`,path:`/contentcorrections/listForContent`},{method:`POST`,path:`/contentcorrections/getPublishedForContent`}],mcp:[{operation:`create`,name:`contentcorrection_create`},{operation:`get`,name:`contentcorrection_get`},{operation:`list`,name:`contentcorrection_list`},{operation:`update`,name:`contentcorrection_update`},{operation:`getPublishedForContent`,name:`contentcorrectioncollection_getpublishedforcontent`},{operation:`listForContent`,name:`contentcorrectioncollection_listforcontent`}],cli:[{operation:`create`,name:`contentcorrection_create`},{operation:`delete`,name:`contentcorrection_delete`},{operation:`get`,name:`contentcorrection_get`},{operation:`getMetadata`,name:`contentcorrection_getMetadata`},{operation:`list`,name:`contentcorrection_list`},{operation:`update`,name:`contentcorrection_update`},{operation:`getPublishedForContent`,name:`contentcorrectioncollection_getPublishedForContent`},{operation:`issue`,name:`contentcorrectioncollection_issue`},{operation:`listForContent`,name:`contentcorrectioncollection_listForContent`}],methods:[{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getPublishedForContent`,async:!0,parameters:[`contentId: string`],returnType:`Promise<ContentCorrection[]>`,aiCallable:!0},{name:`issue`,async:!0,parameters:[`options: any`],returnType:`Promise<ContentCorrection>`,aiCallable:!1},{name:`listForContent`,async:!0,parameters:[`contentId: string`],returnType:`Promise<ContentCorrection[]>`,aiCallable:!0}],references:[`@happyvertical/smrt-content:Content`,`@happyvertical/smrt-content:ContentVersion`,`@happyvertical/smrt-facts:Fact`],exposed:!0},{id:`@happyvertical/smrt-content:ContentDocument`,name:`ContentDocument`,collection:`contents`,extends:`@happyvertical/smrt-content:Content`,description:`ContentDocument content type`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`type`,type:`text`,required:!1},{name:`variant`,type:`text`,required:!1},{name:`fileKey`,type:`text`,required:!1},{name:`author`,type:`text`,required:!1},{name:`name`,type:`text`,required:!0,default:``},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`body`,type:`text`,required:!1},{name:`bodyFormat`,type:`text`,required:!1,enum:[`markdown`,`html`]},{name:`publish_date`,type:`datetime`,required:!1},{name:`url`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`original_url`,type:`text`,required:!1},{name:`language`,type:`text`,required:!1},{name:`tags`,type:`json`,required:!1},{name:`category`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`published`,`draft`,`review`,`archived`,`deleted`]},{name:`state`,type:`text`,required:!1,default:`active`,enum:[`deprecated`,`active`,`highlighted`]},{name:`metadata`,type:`json`,required:!1},{name:`thumbnailAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`}],rest:[],mcp:[],cli:[],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`addFact`,async:!0,parameters:[`fact: Fact | string`,`relationship?: FactContentRelationship`,`metadata?: Record<string, unknown>`],returnType:`any`,aiCallable:!1},{name:`addReference`,async:!0,parameters:[`content: Content | string`,`options?: object`],returnType:`any`,aiCallable:!1},{name:`browseFacts`,async:!0,parameters:[`query?: any`,`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`createVersion`,async:!0,parameters:[`options?: CreateContentVersionOptions`],returnType:`any`,aiCallable:!1},{name:`evaluateReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<ContentReviewProfileEvaluation>`,aiCallable:!1},{name:`evaluateReviewProfileAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`generateThumbnail`,async:!0,parameters:[`options: ThumbnailOptions`],returnType:`Promise<Image>`,aiCallable:!1},{name:`getAncestorPaths`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getAssetIds`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`,`options?: object`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getCategorySegments`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactAuditState`,async:!0,parameters:[],returnType:`Promise<FactAuditState>`,aiCallable:!1},{name:`getFactAuditStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactLinks`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getFacts`,async:!0,parameters:[`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getGovernanceState`,async:!0,parameters:[],returnType:`Promise<ContentGovernanceState>`,aiCallable:!1},{name:`getGovernanceStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getParentCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getPublishedTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getPublishedTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReferenceDrift`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferenceEdges`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReviewRequirements`,async:!0,parameters:[`profileKey: string`,`governance?: ResolvedContentGovernance`],returnType:`any`,aiCallable:!1},{name:`getReviews`,async:!0,parameters:[`kind?: any`],returnType:`any`,aiCallable:!1},{name:`getRootCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getThumbnail`,async:!0,parameters:[],returnType:`Promise<Image | null>`,aiCallable:!1},{name:`getVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isGoverned`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInCategory`,async:!1,parameters:[`categoryPath: string`,`includeChildren?: any`],returnType:`boolean`,aiCallable:!1},{name:`isReadyForReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`issueCorrection`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`issueCorrectionAction`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`listCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviewProfilesAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviews`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`listVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`loadReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`mutateVersionAction`,async:!0,parameters:[`options?: any`],returnType:`any`,aiCallable:!1},{name:`previewTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`previewTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`recheckFactClaims`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`recheckFactClaimsAction`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeFact`,async:!0,parameters:[`factId: string`,`relationship?: FactContentRelationship`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeReference`,async:!0,parameters:[`targetId: string`],returnType:`any`,aiCallable:!1},{name:`repairFactAudit`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactAuditAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidence`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidenceAction`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`resolveGovernance`,async:!0,parameters:[],returnType:`Promise<ResolvedContentGovernance>`,aiCallable:!1},{name:`restoreFromVersion`,async:!0,parameters:[`versionNumber: number`],returnType:`any`,aiCallable:!1},{name:`reviewFacts`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`reviewSafety`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`runReview`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`runReviewAction`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SmrtSaveOptions`],returnType:`any`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown> | null | undefined`],returnType:`void`,aiCallable:!1},{name:`setThumbnail`,async:!0,parameters:[`image: Image`],returnType:`Promise<void>`,aiCallable:!1},{name:`syncFacts`,async:!0,parameters:[`factIds: string[]`,`relationship?: FactContentRelationship`],returnType:`Promise<object>`,aiCallable:!1},{name:`syncFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatus`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatusAction`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`patch: Partial<Record<string, unknown>>`],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`],exposed:!1},{id:`@happyvertical/smrt-content:ContentFeedSource`,name:`ContentFeedSource`,collection:`contentfeedsources`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!0},{name:`feedUrl`,type:`text`,required:!0},{name:`homepageUrl`,type:`text`,required:!1},{name:`format`,type:`text`,required:!1,enum:[`rss`,`atom`]},{name:`status`,type:`text`,required:!0,default:`active`,enum:[`active`,`paused`,`error`,`archived`]},{name:`defaultCategory`,type:`text`,required:!1},{name:`sourceGroup`,type:`text`,required:!1},{name:`pollIntervalMinutes`,type:`integer`,required:!0,default:15},{name:`etag`,type:`text`,required:!1},{name:`lastModified`,type:`text`,required:!1},{name:`lastFetchedAt`,type:`datetime`,required:!1},{name:`lastSuccessAt`,type:`datetime`,required:!1},{name:`lastError`,type:`text`,required:!1},{name:`metadata`,type:`json`,required:!1},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentfeedsources`},{method:`GET`,path:`/contentfeedsources/[id]`},{method:`POST`,path:`/contentfeedsources`},{method:`PATCH`,path:`/contentfeedsources/[id]`},{method:`DELETE`,path:`/contentfeedsources/[id]`}],mcp:[{operation:`create`,name:`contentfeedsource_create`},{operation:`delete`,name:`contentfeedsource_delete`},{operation:`get`,name:`contentfeedsource_get`},{operation:`list`,name:`contentfeedsource_list`},{operation:`update`,name:`contentfeedsource_update`}],cli:[{operation:`create`,name:`contentfeedsource_create`},{operation:`delete`,name:`contentfeedsource_delete`},{operation:`get`,name:`contentfeedsource_get`},{operation:`getMetadata`,name:`contentfeedsource_getMetadata`},{operation:`list`,name:`contentfeedsource_list`},{operation:`markFetchFailed`,name:`contentfeedsource_markFetchFailed`},{operation:`markFetchStarted`,name:`contentfeedsource_markFetchStarted`},{operation:`markFetchSucceeded`,name:`contentfeedsource_markFetchSucceeded`},{operation:`setMetadata`,name:`contentfeedsource_setMetadata`},{operation:`update`,name:`contentfeedsource_update`},{operation:`findActive`,name:`contentfeedsourcecollection_findActive`},{operation:`findByFeedUrl`,name:`contentfeedsourcecollection_findByFeedUrl`},{operation:`findByStatus`,name:`contentfeedsourcecollection_findByStatus`}],methods:[{name:`findActive`,async:!0,parameters:[`tenantId?: string | null`],returnType:`Promise<ContentFeedSource[]>`,aiCallable:!1},{name:`findByFeedUrl`,async:!0,parameters:[`feedUrl: string`,`tenantId?: string | null`],returnType:`Promise<ContentFeedSource | null>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: ContentFeedSourceStatus`,`tenantId?: string | null`],returnType:`Promise<ContentFeedSource[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`markFetchFailed`,async:!1,parameters:[`error: unknown`,`at?: any`],returnType:`void`,aiCallable:!1},{name:`markFetchStarted`,async:!1,parameters:[`at?: any`],returnType:`void`,aiCallable:!1},{name:`markFetchSucceeded`,async:!1,parameters:[`at?: any`,`headers?: object`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-content:ContentGovernanceAssignment`,name:`ContentGovernanceAssignment`,collection:`contentgovernanceassignments`,display:{label:`label`},fields:[{name:`key`,type:`text`,required:!0},{name:`label`,type:`text`,required:!1},{name:`contentType`,type:`text`,required:!0},{name:`contentVariant`,type:`text`,required:!1},{name:`enabled`,type:`boolean`,required:!0,default:!0},{name:`factLinkingEnabled`,type:`boolean`,required:!0,default:!1},{name:`transparencyEnabled`,type:`boolean`,required:!0,default:!1},{name:`publicationProfileKey`,type:`text`,required:!1},{name:`correctionProfileKey`,type:`text`,required:!1},{name:`enforcePublishReadiness`,type:`boolean`,required:!0,default:!1},{name:`defaultFactRelationship`,type:`text`,required:!1,default:`supports`},{name:`metadata`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentgovernanceassignments`},{method:`GET`,path:`/contentgovernanceassignments/[id]`},{method:`POST`,path:`/contentgovernanceassignments`},{method:`PATCH`,path:`/contentgovernanceassignments/[id]`},{method:`DELETE`,path:`/contentgovernanceassignments/[id]`}],mcp:[{operation:`create`,name:`contentgovernanceassignment_create`},{operation:`delete`,name:`contentgovernanceassignment_delete`},{operation:`get`,name:`contentgovernanceassignment_get`},{operation:`list`,name:`contentgovernanceassignment_list`},{operation:`update`,name:`contentgovernanceassignment_update`}],cli:[{operation:`create`,name:`contentgovernanceassignment_create`},{operation:`delete`,name:`contentgovernanceassignment_delete`},{operation:`get`,name:`contentgovernanceassignment_get`},{operation:`getMetadata`,name:`contentgovernanceassignment_getMetadata`},{operation:`list`,name:`contentgovernanceassignment_list`},{operation:`toDefinition`,name:`contentgovernanceassignment_toDefinition`},{operation:`update`,name:`contentgovernanceassignment_update`},{operation:`getByKey`,name:`contentgovernanceassignmentcollection_getByKey`},{operation:`resolveForContent`,name:`contentgovernanceassignmentcollection_resolveForContent`}],methods:[{name:`getByKey`,async:!0,parameters:[`key: string`],returnType:`Promise<ContentGovernanceAssignment | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`resolveForContent`,async:!0,parameters:[`options: object`],returnType:`Promise<ContentGovernanceAssignment | null>`,aiCallable:!1},{name:`toDefinition`,async:!1,parameters:[],returnType:`ContentGovernanceAssignmentDefinition`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-content:ContentGovernancePolicy`,name:`ContentGovernancePolicy`,collection:`contentgovernancepolicies`,display:{label:`label`},fields:[{name:`key`,type:`text`,required:!0},{name:`label`,type:`text`,required:!1},{name:`kind`,type:`text`,required:!1,default:`custom`,enum:[`facts`,`safety`,`custom`]},{name:`instructions`,type:`text`,required:!1},{name:`enabled`,type:`boolean`,required:!0,default:!0},{name:`metadata`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentgovernancepolicies`},{method:`GET`,path:`/contentgovernancepolicies/[id]`},{method:`POST`,path:`/contentgovernancepolicies`},{method:`PATCH`,path:`/contentgovernancepolicies/[id]`},{method:`DELETE`,path:`/contentgovernancepolicies/[id]`}],mcp:[{operation:`create`,name:`contentgovernancepolicy_create`},{operation:`delete`,name:`contentgovernancepolicy_delete`},{operation:`get`,name:`contentgovernancepolicy_get`},{operation:`list`,name:`contentgovernancepolicy_list`},{operation:`update`,name:`contentgovernancepolicy_update`}],cli:[{operation:`create`,name:`contentgovernancepolicy_create`},{operation:`delete`,name:`contentgovernancepolicy_delete`},{operation:`get`,name:`contentgovernancepolicy_get`},{operation:`getMetadata`,name:`contentgovernancepolicy_getMetadata`},{operation:`list`,name:`contentgovernancepolicy_list`},{operation:`toDefinition`,name:`contentgovernancepolicy_toDefinition`},{operation:`update`,name:`contentgovernancepolicy_update`},{operation:`getByKey`,name:`contentgovernancepolicycollection_getByKey`}],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`getByKey`,async:!0,parameters:[`key: string`],returnType:`Promise<ContentGovernancePolicy | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`toDefinition`,async:!1,parameters:[],returnType:`ContentReviewPolicyDefinition`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-content:ContentGovernanceProfile`,name:`ContentGovernanceProfile`,collection:`contentgovernanceprofiles`,display:{label:`label`},fields:[{name:`key`,type:`text`,required:!0},{name:`label`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`enabled`,type:`boolean`,required:!0,default:!0},{name:`requirements`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentgovernanceprofiles`},{method:`GET`,path:`/contentgovernanceprofiles/[id]`},{method:`POST`,path:`/contentgovernanceprofiles`},{method:`PATCH`,path:`/contentgovernanceprofiles/[id]`},{method:`DELETE`,path:`/contentgovernanceprofiles/[id]`}],mcp:[{operation:`create`,name:`contentgovernanceprofile_create`},{operation:`delete`,name:`contentgovernanceprofile_delete`},{operation:`get`,name:`contentgovernanceprofile_get`},{operation:`list`,name:`contentgovernanceprofile_list`},{operation:`update`,name:`contentgovernanceprofile_update`}],cli:[{operation:`create`,name:`contentgovernanceprofile_create`},{operation:`delete`,name:`contentgovernanceprofile_delete`},{operation:`get`,name:`contentgovernanceprofile_get`},{operation:`getMetadata`,name:`contentgovernanceprofile_getMetadata`},{operation:`getRequirements`,name:`contentgovernanceprofile_getRequirements`},{operation:`list`,name:`contentgovernanceprofile_list`},{operation:`toDefinition`,name:`contentgovernanceprofile_toDefinition`},{operation:`update`,name:`contentgovernanceprofile_update`},{operation:`getByKey`,name:`contentgovernanceprofilecollection_getByKey`}],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`getByKey`,async:!0,parameters:[`key: string`],returnType:`Promise<ContentGovernanceProfile | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getRequirements`,async:!1,parameters:[],returnType:`ContentReviewRequirement[]`,aiCallable:!1},{name:`toDefinition`,async:!1,parameters:[],returnType:`ContentGovernanceProfileDefinition`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-content:ContentReference`,name:`ContentReference`,collection:`contentreferences`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`sourceId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-content:Content`},{name:`targetId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-content:Content`},{name:`targetVersion`,type:`integer`,required:!1},{name:`createdAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentreferences`},{method:`GET`,path:`/contentreferences/[id]`},{method:`POST`,path:`/contentreferences`},{method:`PATCH`,path:`/contentreferences/[id]`},{method:`DELETE`,path:`/contentreferences/[id]`},{method:`POST`,path:`/contentreferences/byRight`},{method:`POST`,path:`/contentreferences/byLeft`},{method:`POST`,path:`/contentreferences/attach`},{method:`POST`,path:`/contentreferences/detach`},{method:`POST`,path:`/contentreferences/setLinks`},{method:`POST`,path:`/contentreferences/getForSource`},{method:`POST`,path:`/contentreferences/getForTarget`},{method:`POST`,path:`/contentreferences/unlink`}],mcp:[{operation:`create`,name:`contentreference_create`},{operation:`delete`,name:`contentreference_delete`},{operation:`get`,name:`contentreference_get`},{operation:`list`,name:`contentreference_list`},{operation:`update`,name:`contentreference_update`},{operation:`attach`,name:`contentreferences_attach`},{operation:`byLeft`,name:`contentreferences_byleft`},{operation:`byRight`,name:`contentreferences_byright`},{operation:`detach`,name:`contentreferences_detach`},{operation:`getForSource`,name:`contentreferences_getforsource`},{operation:`getForTarget`,name:`contentreferences_getfortarget`},{operation:`setLinks`,name:`contentreferences_setlinks`},{operation:`unlink`,name:`contentreferences_unlink`}],cli:[{operation:`create`,name:`contentreference_create`},{operation:`delete`,name:`contentreference_delete`},{operation:`get`,name:`contentreference_get`},{operation:`list`,name:`contentreference_list`},{operation:`update`,name:`contentreference_update`},{operation:`attach`,name:`contentreferences_attach`},{operation:`byLeft`,name:`contentreferences_byLeft`},{operation:`byRight`,name:`contentreferences_byRight`},{operation:`detach`,name:`contentreferences_detach`},{operation:`getForSource`,name:`contentreferences_getForSource`},{operation:`getForTarget`,name:`contentreferences_getForTarget`},{operation:`setLinks`,name:`contentreferences_setLinks`},{operation:`unlink`,name:`contentreferences_unlink`}],methods:[{name:`attach`,async:!0,parameters:[`sourceId: string`,`targetId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<ContentReference>`,aiCallable:!0},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!0},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!0},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!0},{name:`getForSource`,async:!0,parameters:[`sourceId: string`],returnType:`Promise<ContentReference[]>`,aiCallable:!0},{name:`getForTarget`,async:!0,parameters:[`targetId: string`],returnType:`Promise<ContentReference[]>`,aiCallable:!0},{name:`setLinks`,async:!0,parameters:[`leftId: string`,`rightIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!0},{name:`unlink`,async:!0,parameters:[`sourceId: string`,`targetId: string`],returnType:`Promise<void>`,aiCallable:!0}],references:[`@happyvertical/smrt-content:Content`],exposed:!0},{id:`@happyvertical/smrt-content:ContentReview`,name:`ContentReview`,collection:`contentreviews`,fields:[{name:`contentId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-content:Content`},{name:`contentVersionId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-content:ContentVersion`},{name:`kind`,type:`text`,required:!1,default:`custom`,enum:[`facts`,`safety`,`custom`]},{name:`policyKey`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`pending`,enum:[`pending`,`passed`,`flagged`,`failed`,`waived`]},{name:`summary`,type:`text`,required:!1},{name:`findings`,type:`text`,required:!1},{name:`reviewer`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentreviews`},{method:`GET`,path:`/contentreviews/[id]`},{method:`POST`,path:`/contentreviews`},{method:`PATCH`,path:`/contentreviews/[id]`}],mcp:[{operation:`create`,name:`contentreview_create`},{operation:`get`,name:`contentreview_get`},{operation:`list`,name:`contentreview_list`},{operation:`update`,name:`contentreview_update`}],cli:[{operation:`create`,name:`contentreview_create`},{operation:`delete`,name:`contentreview_delete`},{operation:`get`,name:`contentreview_get`},{operation:`getFindings`,name:`contentreview_getFindings`},{operation:`getMetadata`,name:`contentreview_getMetadata`},{operation:`list`,name:`contentreview_list`},{operation:`update`,name:`contentreview_update`},{operation:`createFromResult`,name:`contentreviewcollection_createFromResult`},{operation:`getLatestForContent`,name:`contentreviewcollection_getLatestForContent`},{operation:`getLatestForPolicyKey`,name:`contentreviewcollection_getLatestForPolicyKey`},{operation:`listForContent`,name:`contentreviewcollection_listForContent`},{operation:`listForContentByPolicyKey`,name:`contentreviewcollection_listForContentByPolicyKey`}],methods:[{name:`createFromResult`,async:!0,parameters:[`options: object`],returnType:`Promise<ContentReview>`,aiCallable:!1},{name:`getFindings`,async:!1,parameters:[],returnType:`ContentReviewFinding[]`,aiCallable:!1},{name:`getLatestForContent`,async:!0,parameters:[`contentId: string`,`kind?: ContentReviewKind`],returnType:`Promise<ContentReview | null>`,aiCallable:!1},{name:`getLatestForPolicyKey`,async:!0,parameters:[`contentId: string`,`policyKey: string`],returnType:`Promise<ContentReview | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`listForContent`,async:!0,parameters:[`contentId: string`,`kind?: ContentReviewKind`],returnType:`Promise<ContentReview[]>`,aiCallable:!1},{name:`listForContentByPolicyKey`,async:!0,parameters:[`contentId: string`,`policyKey: string`],returnType:`Promise<ContentReview[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-content:Content`,`@happyvertical/smrt-content:ContentVersion`],exposed:!0},{id:`@happyvertical/smrt-content:ContentVersion`,name:`ContentVersion`,collection:`contentversions`,display:{label:`title`},fields:[{name:`contentId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-content:Content`},{name:`version`,type:`integer`,required:!0,default:1},{name:`kind`,type:`text`,required:!1,default:`manual`,enum:[`manual`,`draft`,`review`,`publication`,`correction`,`auto-generated`]},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`body`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1},{name:`summary`,type:`text`,required:!1},{name:`snapshot`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/contentversions`},{method:`GET`,path:`/contentversions/[id]`},{method:`POST`,path:`/contentversions`},{method:`GET`,path:`/contentversions/[id]/transparency`}],mcp:[{operation:`create`,name:`contentversion_create`},{operation:`get`,name:`contentversion_get`},{operation:`list`,name:`contentversion_list`}],cli:[{operation:`create`,name:`contentversion_create`},{operation:`delete`,name:`contentversion_delete`},{operation:`get`,name:`contentversion_get`},{operation:`getMetadata`,name:`contentversion_getMetadata`},{operation:`getSnapshot`,name:`contentversion_getSnapshot`},{operation:`getTransparency`,name:`contentversion_getTransparency`},{operation:`getTransparencyAction`,name:`contentversion_getTransparencyAction`},{operation:`list`,name:`contentversion_list`},{operation:`update`,name:`contentversion_update`},{operation:`createSnapshot`,name:`contentversioncollection_createSnapshot`},{operation:`getLatestForContent`,name:`contentversioncollection_getLatestForContent`},{operation:`getLatestPublishedForContent`,name:`contentversioncollection_getLatestPublishedForContent`},{operation:`getNextVersionNumber`,name:`contentversioncollection_getNextVersionNumber`},{operation:`getVersion`,name:`contentversioncollection_getVersion`},{operation:`listForContent`,name:`contentversioncollection_listForContent`},{operation:`restoreIntoContent`,name:`contentversioncollection_restoreIntoContent`}],methods:[{name:`createSnapshot`,async:!0,parameters:[`content: Content`,`options?: CreateContentVersionOptions`],returnType:`Promise<ContentVersion>`,aiCallable:!1},{name:`getLatestForContent`,async:!0,parameters:[`contentId: string`],returnType:`Promise<ContentVersion | null>`,aiCallable:!1},{name:`getLatestPublishedForContent`,async:!0,parameters:[`contentId: string`],returnType:`Promise<ContentVersion | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`ContentVersionMetadata`,aiCallable:!1},{name:`getNextVersionNumber`,async:!0,parameters:[`contentId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`getSnapshot`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getTransparency`,async:!1,parameters:[],returnType:`any`,aiCallable:!1},{name:`getTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getVersion`,async:!0,parameters:[`contentId: string`,`versionNumber: number`],returnType:`Promise<ContentVersion | null>`,aiCallable:!1},{name:`listForContent`,async:!0,parameters:[`contentId: string`],returnType:`Promise<ContentVersion[]>`,aiCallable:!1},{name:`restoreIntoContent`,async:!0,parameters:[`content: Content`,`versionNumber: number`],returnType:`Promise<Content>`,aiCallable:!1}],references:[`@happyvertical/smrt-content:Content`],exposed:!0},{id:`@happyvertical/smrt-content:Mirror`,name:`Mirror`,collection:`contents`,extends:`@happyvertical/smrt-content:Content`,description:`Mirror content type`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`type`,type:`text`,required:!1},{name:`variant`,type:`text`,required:!1},{name:`fileKey`,type:`text`,required:!1},{name:`author`,type:`text`,required:!1},{name:`name`,type:`text`,required:!0,default:``},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`body`,type:`text`,required:!1},{name:`bodyFormat`,type:`text`,required:!1,enum:[`markdown`,`html`]},{name:`publish_date`,type:`datetime`,required:!1},{name:`url`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`original_url`,type:`text`,required:!1},{name:`language`,type:`text`,required:!1},{name:`tags`,type:`json`,required:!1},{name:`category`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`published`,`draft`,`review`,`archived`,`deleted`]},{name:`state`,type:`text`,required:!1,default:`active`,enum:[`deprecated`,`active`,`highlighted`]},{name:`metadata`,type:`json`,required:!1},{name:`thumbnailAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`feedSourceId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-content:ContentFeedSource`},{name:`sourceGuid`,type:`text`,required:!1},{name:`sourceName`,type:`text`,required:!1},{name:`sourceHomepageUrl`,type:`text`,required:!1},{name:`externalUrl`,type:`text`,required:!1},{name:`originalPublishedAt`,type:`datetime`,required:!1},{name:`dedupeKey`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`addFact`,async:!0,parameters:[`fact: Fact | string`,`relationship?: FactContentRelationship`,`metadata?: Record<string, unknown>`],returnType:`any`,aiCallable:!1},{name:`addReference`,async:!0,parameters:[`content: Content | string`,`options?: object`],returnType:`any`,aiCallable:!1},{name:`browseFacts`,async:!0,parameters:[`query?: any`,`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`createVersion`,async:!0,parameters:[`options?: CreateContentVersionOptions`],returnType:`any`,aiCallable:!1},{name:`evaluateReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<ContentReviewProfileEvaluation>`,aiCallable:!1},{name:`evaluateReviewProfileAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`generateThumbnail`,async:!0,parameters:[`options: ThumbnailOptions`],returnType:`Promise<Image>`,aiCallable:!1},{name:`getAncestorPaths`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getAssetIds`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`,`options?: object`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getCategorySegments`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactAuditState`,async:!0,parameters:[],returnType:`Promise<FactAuditState>`,aiCallable:!1},{name:`getFactAuditStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactLinks`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getFacts`,async:!0,parameters:[`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getGovernanceState`,async:!0,parameters:[],returnType:`Promise<ContentGovernanceState>`,aiCallable:!1},{name:`getGovernanceStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getParentCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getPublishedTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getPublishedTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReferenceDrift`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferenceEdges`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReviewRequirements`,async:!0,parameters:[`profileKey: string`,`governance?: ResolvedContentGovernance`],returnType:`any`,aiCallable:!1},{name:`getReviews`,async:!0,parameters:[`kind?: any`],returnType:`any`,aiCallable:!1},{name:`getRootCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getThumbnail`,async:!0,parameters:[],returnType:`Promise<Image | null>`,aiCallable:!1},{name:`getVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isGoverned`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInCategory`,async:!1,parameters:[`categoryPath: string`,`includeChildren?: any`],returnType:`boolean`,aiCallable:!1},{name:`isReadyForReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`issueCorrection`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`issueCorrectionAction`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`listCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviewProfilesAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviews`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`listVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`loadReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`mutateVersionAction`,async:!0,parameters:[`options?: any`],returnType:`any`,aiCallable:!1},{name:`previewTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`previewTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`recheckFactClaims`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`recheckFactClaimsAction`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeFact`,async:!0,parameters:[`factId: string`,`relationship?: FactContentRelationship`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeReference`,async:!0,parameters:[`targetId: string`],returnType:`any`,aiCallable:!1},{name:`repairFactAudit`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactAuditAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidence`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidenceAction`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`resolveGovernance`,async:!0,parameters:[],returnType:`Promise<ResolvedContentGovernance>`,aiCallable:!1},{name:`restoreFromVersion`,async:!0,parameters:[`versionNumber: number`],returnType:`any`,aiCallable:!1},{name:`reviewFacts`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`reviewSafety`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`runReview`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`runReviewAction`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SmrtSaveOptions`],returnType:`any`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown> | null | undefined`],returnType:`void`,aiCallable:!1},{name:`setThumbnail`,async:!0,parameters:[`image: Image`],returnType:`Promise<void>`,aiCallable:!1},{name:`syncFacts`,async:!0,parameters:[`factIds: string[]`,`relationship?: FactContentRelationship`],returnType:`Promise<object>`,aiCallable:!1},{name:`syncFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatus`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatusAction`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`patch: Partial<Record<string, unknown>>`],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-content:ContentFeedSource`],exposed:!1}],dependencies:[`assets`,`chat`,`facts`,`images`,`messages`,`profiles`,`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3615`,`#3617`,`#3624`,`#3625`,`#3626`,`#3627`,`#3628`],reason:`node:crypto; documents/spider/files/images/ai SDK graph (crawlee, undici, googleapis, native addons); CJS parse error`,via:[`@happyvertical/smrt-agents`,`@happyvertical/smrt-chat`,`@happyvertical/smrt-images`,`@happyvertical/smrt-jobs`,`@happyvertical/smrt-profiles`,`@happyvertical/smrt-reports`,`@happyvertical/smrt-secrets`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`]}},{id:`events`,packageName:`@happyvertical/smrt-events`,version:`0.57.9`,description:`Hierarchical event management with participant tracking and SMRT framework support`,models:[{id:`@happyvertical/smrt-events:Event`,name:`Event`,collection:`events`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`parentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-events:Event`},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``,description:`What the event is called.`},{name:`seriesId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-events:EventSeries`,description:`The series this event is part of, if any.`},{name:`typeId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-events:EventType`,description:`The kind of event.`},{name:`placeId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-places:Place`,description:`Where it takes place.`},{name:`description`,type:`text`,required:!1,description:`What the event is about.`},{name:`startDate`,type:`datetime`,required:!1,description:`When it starts.`},{name:`endDate`,type:`datetime`,required:!1,description:`When it ends.`},{name:`allDay`,type:`boolean`,required:!1,default:!1,description:`Whether the event lasts all day.`},{name:`timeZone`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`scheduled`,enum:[`scheduled`,`in_progress`,`completed`,`cancelled`,`postponed`],description:`scheduled, in progress, completed, cancelled or postponed.`},{name:`round`,type:`integer`,required:!1},{name:`metadata`,type:`text`,required:!1},{name:`externalId`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/events`},{method:`GET`,path:`/events/[id]`},{method:`POST`,path:`/events`},{method:`PATCH`,path:`/events/[id]`},{method:`DELETE`,path:`/events/[id]`}],mcp:[{operation:`create`,name:`event_create`},{operation:`get`,name:`event_get`},{operation:`list`,name:`event_list`},{operation:`update`,name:`event_update`}],cli:[{operation:`addAsset`,name:`event_addAsset`},{operation:`create`,name:`event_create`},{operation:`delete`,name:`event_delete`},{operation:`get`,name:`event_get`},{operation:`getAncestors`,name:`event_getAncestors`},{operation:`getAssets`,name:`event_getAssets`},{operation:`getChildren`,name:`event_getChildren`},{operation:`getDescendants`,name:`event_getDescendants`},{operation:`getHierarchy`,name:`event_getHierarchy`},{operation:`getMetadata`,name:`event_getMetadata`},{operation:`getParent`,name:`event_getParent`},{operation:`getParticipants`,name:`event_getParticipants`},{operation:`getPlace`,name:`event_getPlace`},{operation:`getRootEvent`,name:`event_getRootEvent`},{operation:`getSeries`,name:`event_getSeries`},{operation:`getType`,name:`event_getType`},{operation:`isInProgress`,name:`event_isInProgress`},{operation:`isRoot`,name:`event_isRoot`},{operation:`list`,name:`event_list`},{operation:`moveTo`,name:`event_moveTo`},{operation:`removeAsset`,name:`event_removeAsset`},{operation:`setMetadata`,name:`event_setMetadata`},{operation:`update`,name:`event_update`},{operation:`updateMetadata`,name:`event_updateMetadata`},{operation:`updateStatus`,name:`event_updateStatus`},{operation:`addAsset`,name:`eventcollection_addAsset`},{operation:`findByTenant`,name:`eventcollection_findByTenant`},{operation:`findGlobal`,name:`eventcollection_findGlobal`},{operation:`findWithGlobals`,name:`eventcollection_findWithGlobals`},{operation:`getAssets`,name:`eventcollection_getAssets`},{operation:`getByDateRange`,name:`eventcollection_getByDateRange`},{operation:`getByParent`,name:`eventcollection_getByParent`},{operation:`getByPlace`,name:`eventcollection_getByPlace`},{operation:`getBySeriesId`,name:`eventcollection_getBySeriesId`},{operation:`getByStatus`,name:`eventcollection_getByStatus`},{operation:`getByType`,name:`eventcollection_getByType`},{operation:`getEventTree`,name:`eventcollection_getEventTree`},{operation:`getInProgress`,name:`eventcollection_getInProgress`},{operation:`getRootEvents`,name:`eventcollection_getRootEvents`},{operation:`getUpcoming`,name:`eventcollection_getUpcoming`},{operation:`removeAsset`,name:`eventcollection_removeAsset`},{operation:`search`,name:`eventcollection_search`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`getAncestors`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getByDateRange`,async:!0,parameters:[`startDate: Date`,`endDate: Date`],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`getByParent`,async:!0,parameters:[`parentId: string`],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`getByPlace`,async:!0,parameters:[`placeId: string`],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`getBySeriesId`,async:!0,parameters:[`seriesId: string`],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`getByStatus`,async:!0,parameters:[`status: EventStatus`],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`getByType`,async:!0,parameters:[`typeId: string`],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`getChildren`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getDescendants`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getEventTree`,async:!0,parameters:[`eventId: string`],returnType:`Promise<Event | null>`,aiCallable:!1},{name:`getHierarchy`,async:!0,parameters:[],returnType:`Promise<HierarchyView<this>>`,aiCallable:!1},{name:`getInProgress`,async:!0,parameters:[],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getParent`,async:!0,parameters:[],returnType:`Promise<this | null>`,aiCallable:!1},{name:`getParticipants`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getPlace`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getRootEvent`,async:!0,parameters:[],returnType:`Promise<Event>`,aiCallable:!1},{name:`getRootEvents`,async:!0,parameters:[],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`getSeries`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getType`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getUpcoming`,async:!0,parameters:[`limit?: number`],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`isInProgress`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isRoot`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`moveTo`,async:!0,parameters:[`newParent: this | string | null`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`search`,async:!0,parameters:[`query: string`,`filters?: EventSearchFilters`],returnType:`Promise<Event[]>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`updateStatus`,async:!0,parameters:[`newStatus: EventStatus`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-events:Event`,`@happyvertical/smrt-events:EventSeries`,`@happyvertical/smrt-events:EventType`,`@happyvertical/smrt-places:Place`],exposed:!0},{id:`@happyvertical/smrt-events:EventAsset`,name:`EventAsset`,collection:`eventassets`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`eventId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-events:Event`},{name:`assetId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-assets:Asset`},{name:`relationship`,type:`text`,required:!0},{name:`sortOrder`,type:`integer`,required:!0,default:0}],rest:[],mcp:[],cli:[],methods:[{name:`addAsset`,async:!0,parameters:[`eventId: string`,`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`attach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<TItem>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`eventId: string`,`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`eventId: string`,`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`leftId: string`,`rightIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-events:Event`],exposed:!1},{id:`@happyvertical/smrt-events:EventParticipant`,name:`EventParticipant`,collection:`eventparticipants`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`eventId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-events:Event`,description:`The event the person takes part in.`},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`The person taking part.`},{name:`role`,type:`text`,required:!1,default:``,description:`What they do there, for example speaker or attendee.`},{name:`placement`,type:`integer`,required:!1},{name:`groupId`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1},{name:`externalId`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/eventparticipants`},{method:`GET`,path:`/eventparticipants/[id]`},{method:`POST`,path:`/eventparticipants`},{method:`PATCH`,path:`/eventparticipants/[id]`},{method:`DELETE`,path:`/eventparticipants/[id]`}],mcp:[{operation:`create`,name:`eventparticipant_create`},{operation:`get`,name:`eventparticipant_get`},{operation:`list`,name:`eventparticipant_list`},{operation:`update`,name:`eventparticipant_update`}],cli:[{operation:`create`,name:`eventparticipant_create`},{operation:`delete`,name:`eventparticipant_delete`},{operation:`get`,name:`eventparticipant_get`},{operation:`getEvent`,name:`eventparticipant_getEvent`},{operation:`getGroupParticipants`,name:`eventparticipant_getGroupParticipants`},{operation:`getMetadata`,name:`eventparticipant_getMetadata`},{operation:`getProfile`,name:`eventparticipant_getProfile`},{operation:`isAway`,name:`eventparticipant_isAway`},{operation:`isHome`,name:`eventparticipant_isHome`},{operation:`list`,name:`eventparticipant_list`},{operation:`setMetadata`,name:`eventparticipant_setMetadata`},{operation:`update`,name:`eventparticipant_update`},{operation:`updateMetadata`,name:`eventparticipant_updateMetadata`},{operation:`attach`,name:`eventparticipantcollection_attach`},{operation:`byLeft`,name:`eventparticipantcollection_byLeft`},{operation:`byRight`,name:`eventparticipantcollection_byRight`},{operation:`detach`,name:`eventparticipantcollection_detach`},{operation:`findByTenant`,name:`eventparticipantcollection_findByTenant`},{operation:`findGlobal`,name:`eventparticipantcollection_findGlobal`},{operation:`findWithGlobals`,name:`eventparticipantcollection_findWithGlobals`},{operation:`getAway`,name:`eventparticipantcollection_getAway`},{operation:`getByGroup`,name:`eventparticipantcollection_getByGroup`},{operation:`getByPlacement`,name:`eventparticipantcollection_getByPlacement`},{operation:`getHome`,name:`eventparticipantcollection_getHome`},{operation:`getParticipantStats`,name:`eventparticipantcollection_getParticipantStats`},{operation:`search`,name:`eventparticipantcollection_search`},{operation:`setLinks`,name:`eventparticipantcollection_setLinks`}],methods:[{name:`attach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<TItem>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EventParticipant[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<EventParticipant[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EventParticipant[]>`,aiCallable:!1},{name:`getAway`,async:!0,parameters:[`eventId: string`],returnType:`Promise<EventParticipant[]>`,aiCallable:!1},{name:`getByGroup`,async:!0,parameters:[`eventId: string`,`groupId: string`],returnType:`Promise<EventParticipant[]>`,aiCallable:!1},{name:`getByPlacement`,async:!0,parameters:[`eventId: string`],returnType:`Promise<EventParticipant[]>`,aiCallable:!1},{name:`getEvent`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getGroupParticipants`,async:!0,parameters:[],returnType:`Promise<EventParticipant[]>`,aiCallable:!1},{name:`getHome`,async:!0,parameters:[`eventId: string`],returnType:`Promise<EventParticipant[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getParticipantStats`,async:!0,parameters:[`profileId: string`,`eventTypeId?: string`],returnType:`Promise<object>`,aiCallable:!1},{name:`getProfile`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`isAway`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isHome`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`search`,async:!0,parameters:[`filters: ParticipantSearchFilters`],returnType:`Promise<EventParticipant[]>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`leftId: string`,`rightIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-events:Event`,`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-events:EventSeries`,name:`EventSeries`,collection:`eventserieses`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``,description:`What the series is called.`},{name:`typeId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-events:EventType`,description:`The kind of event in this series.`},{name:`organizerId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`Who runs the series.`},{name:`description`,type:`text`,required:!1,description:`What the series is about.`},{name:`startDate`,type:`datetime`,required:!1,description:`When the series begins.`},{name:`endDate`,type:`datetime`,required:!1,description:`When the series ends.`},{name:`recurrence`,type:`text`,required:!1,description:`How often it repeats.`},{name:`metadata`,type:`text`,required:!1},{name:`externalId`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/eventserieses`},{method:`GET`,path:`/eventserieses/[id]`},{method:`POST`,path:`/eventserieses`},{method:`PATCH`,path:`/eventserieses/[id]`},{method:`DELETE`,path:`/eventserieses/[id]`}],mcp:[{operation:`create`,name:`eventseries_create`},{operation:`get`,name:`eventseries_get`},{operation:`list`,name:`eventseries_list`},{operation:`update`,name:`eventseries_update`}],cli:[{operation:`create`,name:`eventseries_create`},{operation:`delete`,name:`eventseries_delete`},{operation:`get`,name:`eventseries_get`},{operation:`getEvents`,name:`eventseries_getEvents`},{operation:`getMetadata`,name:`eventseries_getMetadata`},{operation:`getOccurrences`,name:`eventseries_getOccurrences`},{operation:`getOrganizer`,name:`eventseries_getOrganizer`},{operation:`getRecurrence`,name:`eventseries_getRecurrence`},{operation:`getType`,name:`eventseries_getType`},{operation:`isActive`,name:`eventseries_isActive`},{operation:`list`,name:`eventseries_list`},{operation:`setMetadata`,name:`eventseries_setMetadata`},{operation:`setRecurrence`,name:`eventseries_setRecurrence`},{operation:`update`,name:`eventseries_update`},{operation:`updateMetadata`,name:`eventseries_updateMetadata`},{operation:`findByTenant`,name:`eventseriescollection_findByTenant`},{operation:`findGlobal`,name:`eventseriescollection_findGlobal`},{operation:`findWithGlobals`,name:`eventseriescollection_findWithGlobals`},{operation:`getActive`,name:`eventseriescollection_getActive`},{operation:`getByOrganizer`,name:`eventseriescollection_getByOrganizer`},{operation:`getByType`,name:`eventseriescollection_getByType`},{operation:`getUpcoming`,name:`eventseriescollection_getUpcoming`},{operation:`search`,name:`eventseriescollection_search`}],methods:[{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EventSeries[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<EventSeries[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EventSeries[]>`,aiCallable:!1},{name:`getActive`,async:!0,parameters:[],returnType:`Promise<EventSeries[]>`,aiCallable:!1},{name:`getByOrganizer`,async:!0,parameters:[`organizerId: string`],returnType:`Promise<EventSeries[]>`,aiCallable:!1},{name:`getByType`,async:!0,parameters:[`typeId: string`],returnType:`Promise<EventSeries[]>`,aiCallable:!1},{name:`getEvents`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getOccurrences`,async:!1,parameters:[`rangeStart: Date`,`rangeEnd: Date`,`options?: object`],returnType:`Date[]`,aiCallable:!1},{name:`getOrganizer`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getRecurrence`,async:!1,parameters:[],returnType:`RecurrencePattern | null`,aiCallable:!1},{name:`getType`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getUpcoming`,async:!0,parameters:[`limit?: number`],returnType:`Promise<EventSeries[]>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`search`,async:!0,parameters:[`query: string`,`filters?: EventSeriesSearchFilters`],returnType:`Promise<EventSeries[]>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setRecurrence`,async:!1,parameters:[`pattern: RecurrencePattern`],returnType:`void`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-events:EventType`,`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-events:EventType`,name:`EventType`,collection:`eventtypes`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!0,default:``,description:`What this kind of event is called, for example workshop.`},{name:`description`,type:`text`,required:!1,default:``,description:`What this kind of event is for.`},{name:`schema`,type:`text`,required:!1,default:``},{name:`participantSchema`,type:`text`,required:!1,default:``},{name:`createdAt`,type:`datetime`,required:!1,system:!0},{name:`updatedAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`GET`,path:`/eventtypes`},{method:`GET`,path:`/eventtypes/[id]`},{method:`POST`,path:`/eventtypes`},{method:`PATCH`,path:`/eventtypes/[id]`},{method:`DELETE`,path:`/eventtypes/[id]`}],mcp:[{operation:`create`,name:`eventtype_create`},{operation:`get`,name:`eventtype_get`},{operation:`list`,name:`eventtype_list`}],cli:[{operation:`create`,name:`eventtype_create`},{operation:`delete`,name:`eventtype_delete`},{operation:`get`,name:`eventtype_get`},{operation:`getBySlug`,name:`eventtype_getBySlug`},{operation:`getParticipantSchema`,name:`eventtype_getParticipantSchema`},{operation:`getSchema`,name:`eventtype_getSchema`},{operation:`list`,name:`eventtype_list`},{operation:`setParticipantSchema`,name:`eventtype_setParticipantSchema`},{operation:`setSchema`,name:`eventtype_setSchema`},{operation:`update`,name:`eventtype_update`},{operation:`findByTenant`,name:`eventtypecollection_findByTenant`},{operation:`findGlobal`,name:`eventtypecollection_findGlobal`},{operation:`findWithGlobals`,name:`eventtypecollection_findWithGlobals`},{operation:`getBySlug`,name:`eventtypecollection_getBySlug`},{operation:`getOrCreate`,name:`eventtypecollection_getOrCreate`},{operation:`initializeDefaults`,name:`eventtypecollection_initializeDefaults`}],methods:[{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EventType[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<EventType[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EventType[]>`,aiCallable:!1},{name:`getBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<EventType | null>`,aiCallable:!1},{name:`getOrCreate`,async:!0,parameters:[`slug: string`,`name?: string`],returnType:`Promise<EventType>`,aiCallable:!1},{name:`getParticipantSchema`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getSchema`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initializeDefaults`,async:!0,parameters:[],returnType:`Promise<EventType[]>`,aiCallable:!1},{name:`setParticipantSchema`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setSchema`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0}],dependencies:[`assets`,`places`,`profiles`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3617`,`#3624`,`#3626`,`#3627`],reason:`node:crypto`,via:[`@happyvertical/smrt-places`,`@happyvertical/smrt-profiles`,`@happyvertical/smrt-tenancy`]},recipes:[{id:`events.calendar`,label:`Events`,summary:`Schedule events, group them in series and track who takes part.`,synonyms:[`calendar`,`schedule`,`meetings`,`bookings`,`attendees`],models:[`@happyvertical/smrt-events:Event`,`@happyvertical/smrt-events:EventType`,`@happyvertical/smrt-events:EventSeries`,`@happyvertical/smrt-events:EventParticipant`],nav:[{label:`Events`,model:`@happyvertical/smrt-events:Event`,icon:`calendar`,description:`Everything on your calendar, with who and when.`},{label:`Event types`,model:`@happyvertical/smrt-events:EventType`,icon:`tag`,description:`The kinds of events you run, such as workshops or classes.`},{label:`Event series`,model:`@happyvertical/smrt-events:EventSeries`,icon:`repeat`,description:`Repeating schedules, like a class every Tuesday evening.`}],requires:[],section:{id:`calendar`,label:`Calendar`,icon:`calendar`,description:`Events and what is scheduled when.`},options:{"@happyvertical/smrt-events:Event":{fields:{parentId:{visibility:`hidden`},round:{visibility:`hidden`},metadata:{visibility:`hidden`},externalId:{visibility:`hidden`},source:{visibility:`hidden`},timeZone:{visibility:`hidden`}}},"@happyvertical/smrt-events:EventType":{fields:{schema:{visibility:`hidden`},participantSchema:{visibility:`hidden`}}},"@happyvertical/smrt-events:EventSeries":{fields:{metadata:{visibility:`hidden`},externalId:{visibility:`hidden`},source:{visibility:`hidden`}}},"@happyvertical/smrt-events:EventParticipant":{fields:{groupId:{visibility:`hidden`},placement:{visibility:`hidden`},metadata:{visibility:`hidden`},externalId:{visibility:`hidden`},source:{visibility:`hidden`}}}},help:{markdown:`## Overview
480
-
481
- Events is your calendar. Each event has a time and a type, can belong to a
482
- series, and lists who takes part.
483
-
484
- ## Tasks
485
-
486
- ### Schedule an event
487
-
488
- 1. Create a new event.
489
- 2. Enter the **{field:name}**, the **{field:startDate}** and the
490
- **{field:endDate}**.
491
- 3. Pick the **{field:typeId}**, and the **{field:seriesId}** if it repeats.
492
- 4. Add the people taking part with their **{field:role}**.
493
-
494
- ### Keep it current
495
-
496
- 1. Update **{field:status}** as the event goes ahead, finishes or is postponed.
497
- `,fieldRefs:[`endDate`,`name`,`role`,`seriesId`,`startDate`,`status`,`typeId`]},surfaces:[{kind:`route`,path:`/events/meeting`,export:`@happyvertical/smrt-events/svelte#MeetingView`,label:`Meeting view`}],runtime:`both`,demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: node:crypto; and its package depends on @happyvertical/smrt-places, @happyvertical/smrt-profiles, @happyvertical/smrt-tenancy, which do not build for a browser (#3617, #3624, #3626, #3627).`]}}]},{id:`expenses`,packageName:`@happyvertical/smrt-expenses`,version:`0.57.9`,description:`Expense records for the SMRT framework - reviewed costs against a cost object, deduplicated receipts, and commitment drawdown`,models:[{id:`@happyvertical/smrt-expenses:Expense`,name:`Expense`,collection:`expenses`,description:`A cost someone incurred.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`costObjectType`,type:`text`,required:!1},{name:`costObjectId`,type:`text`,required:!1},{name:`category`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`amount`,type:`integer`,required:!1},{name:`currency`,type:`text`,required:!1},{name:`financialBreakdown`,type:`text`,required:!1},{name:`supplierPayableJson`,type:`text`,required:!1},{name:`paidByName`,type:`text`,required:!1},{name:`refundOfId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-expenses:Expense`},{name:`refundRecipient`,type:`text`,required:!1},{name:`incurredOn`,type:`text`,required:!1},{name:`recordedAt`,type:`datetime`,required:!1},{name:`recordedByProfileId`,type:`crossPackageRef`,required:!1,related:`PROFILE`},{name:`paidBy`,type:`text`,required:!1,enum:[`company`,`person`,`third-party`]},{name:`paidByProfileId`,type:`crossPackageRef`,required:!1,related:`PROFILE`},{name:`vendorId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-commerce:Vendor`},{name:`commitmentId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-commerce:PurchaseContract`},{name:`commitmentLineId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-commerce:ContractLineItem`},{name:`reviewStatus`,type:`text`,required:!1,enum:[`unreviewed`,`reviewed`,`rejected`]},{name:`reviewedByProfileId`,type:`crossPackageRef`,required:!1,related:`PROFILE`},{name:`reviewedAt`,type:`datetime`,required:!1},{name:`reviewNote`,type:`text`,required:!1},{name:`duplicateOfId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-expenses:Expense`},{name:`reimbursable`,type:`boolean`,required:!1},{name:`reimbursedAmount`,type:`integer`,required:!1},{name:`reimbursedAt`,type:`datetime`,required:!1},{name:`reimbursementReference`,type:`text`,required:!1}],rest:[{method:`POST`,path:`/expenses/record`},{method:`POST`,path:`/expenses/attachReceipt`},{method:`POST`,path:`/expenses/recordReview`},{method:`POST`,path:`/expenses/recordReimbursement`}],mcp:[],cli:[],methods:[{name:`attachReceipt`,async:!0,parameters:[`options: AttachExpenseReceiptActionInput`],returnType:`Promise<ExpenseReceipt>`,aiCallable:!1},{name:`commitmentPosition`,async:!0,parameters:[`commitmentId: string`,`options?: object`],returnType:`Promise<CommitmentPosition>`,aiCallable:!1},{name:`completeSupplierPayableBasis`,async:!0,parameters:[`input: CompleteSupplierPayableBasisInput`],returnType:`Promise<SupplierPayablePosition>`,aiCallable:!1},{name:`delete`,async:!0,parameters:[`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`forCostObject`,async:!0,parameters:[`costObjectType: string`,`costObjectId: string`],returnType:`Promise<Expense[]>`,aiCallable:!1},{name:`getCostBasis`,async:!1,parameters:[],returnType:`ExpenseCostBasis | null`,aiCallable:!1},{name:`getCostObject`,async:!0,parameters:[],returnType:`Promise<T | null>`,aiCallable:!1},{name:`getFinancialBreakdown`,async:!1,parameters:[],returnType:`ExpenseFinancialBreakdown | null`,aiCallable:!1},{name:`getRefundPosition`,async:!0,parameters:[],returnType:`Promise<ExpenseRefundPosition>`,aiCallable:!1},{name:`getRefundRecipient`,async:!1,parameters:[],returnType:`ExpenseRefundRecipient | null`,aiCallable:!1},{name:`getReimbursementPosition`,async:!0,parameters:[],returnType:`Promise<ExpenseReimbursementPosition>`,aiCallable:!1},{name:`getSupplierPayablePosition`,async:!0,parameters:[`input?: object`],returnType:`Promise<SupplierPayablePosition | null>`,aiCallable:!1},{name:`isCountable`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isReimbursed`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`listReviewedTaxFacts`,async:!0,parameters:[`options: ReviewedExpenseTaxFactsOptions`],returnType:`Promise<ReviewedExpenseTaxFact[]>`,aiCallable:!1},{name:`markDuplicate`,async:!0,parameters:[`input: MarkDuplicateExpenseInput`],returnType:`Promise<this>`,aiCallable:!1},{name:`markReimbursed`,async:!0,parameters:[`input?: MarkReimbursedInput`],returnType:`Promise<this>`,aiCallable:!1},{name:`record`,async:!0,parameters:[`options: RecordExpenseActionInput`],returnType:`Promise<Expense>`,aiCallable:!1},{name:`recordReimbursement`,async:!0,parameters:[`options: MarkExpenseReimbursedActionInput`],returnType:`Promise<Expense>`,aiCallable:!1},{name:`recordReview`,async:!0,parameters:[`options: ReviewExpenseActionInput`],returnType:`Promise<Expense>`,aiCallable:!1},{name:`recordSupplierPayable`,async:!0,parameters:[`input: RecordSupplierPayableInput`],returnType:`Promise<SupplierPayablePosition>`,aiCallable:!1},{name:`recordSupplierPayableEvent`,async:!0,parameters:[`input: RecordSupplierPayableEventInput`],returnType:`Promise<SupplierPayablePosition>`,aiCallable:!1},{name:`refundPosition`,async:!0,parameters:[`sourceId: string`],returnType:`Promise<ExpenseRefundPosition>`,aiCallable:!1},{name:`reimbursementPosition`,async:!0,parameters:[`sourceId: string`],returnType:`Promise<ExpenseReimbursementPosition>`,aiCallable:!1},{name:`reject`,async:!0,parameters:[`input: RejectExpenseInput`],returnType:`Promise<this>`,aiCallable:!1},{name:`reopen`,async:!0,parameters:[`input: ReopenExpenseInput`],returnType:`Promise<this>`,aiCallable:!1},{name:`review`,async:!0,parameters:[`input: ReviewExpenseInput`],returnType:`Promise<this>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setFinancialBreakdown`,async:!1,parameters:[`value: ExpenseFinancialBreakdown | null`],returnType:`void`,aiCallable:!1},{name:`setRefundRecipient`,async:!1,parameters:[`value: ExpenseRefundRecipient | null`],returnType:`void`,aiCallable:!1},{name:`supplierPayablePosition`,async:!0,parameters:[`expenseId: string`,`input?: object`],returnType:`Promise<SupplierPayablePosition | null>`,aiCallable:!1},{name:`totalsByCurrency`,async:!0,parameters:[`options?: ExpenseTotalsOptions`],returnType:`Promise<CurrencyTotals>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:ContractLineItem`,`@happyvertical/smrt-commerce:PurchaseContract`,`@happyvertical/smrt-commerce:Vendor`,`@happyvertical/smrt-expenses:Expense`,`PROFILE`],exposed:!0},{id:`@happyvertical/smrt-expenses:ExpenseReceipt`,name:`ExpenseReceipt`,collection:`expensereceipts`,description:`A receipt file attached to an expense.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`expenseId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-expenses:Expense`},{name:`assetId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-assets:Asset`},{name:`uploadedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`filename`,type:`text`,required:!1},{name:`mimeType`,type:`text`,required:!1},{name:`byteCount`,type:`integer`,required:!1},{name:`contentSha256`,type:`text`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`attach`,async:!0,parameters:[`_expenseId: string`,`_assetId: string`,`_opts?: JunctionAttachOptions`],returnType:`Promise<ExpenseReceipt>`,aiCallable:!1},{name:`attachReceipt`,async:!0,parameters:[`input: AttachReceiptInput`],returnType:`Promise<ExpenseReceipt>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`findDuplicateReceipts`,async:!0,parameters:[`options?: FindDuplicateReceiptsOptions`],returnType:`Promise<DuplicateReceiptGroup[]>`,aiCallable:!1},{name:`receiptsFor`,async:!0,parameters:[`expenseId: string`],returnType:`Promise<ExpenseReceipt[]>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`_expenseId: string`,`_assetIds: string[]`,`_opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-expenses:Expense`,`@happyvertical/smrt-profiles:Profile`],exposed:!1}],dependencies:[`assets`,`commerce`,`profiles`,`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3615`,`#3616`,`#3617`,`#3624`,`#3625`,`#3626`,`#3627`],reason:`node:crypto`,via:[`@happyvertical/smrt-agents`,`@happyvertical/smrt-commerce`,`@happyvertical/smrt-jobs`,`@happyvertical/smrt-ledgers`,`@happyvertical/smrt-products`,`@happyvertical/smrt-profiles`,`@happyvertical/smrt-reports`,`@happyvertical/smrt-secrets`,`@happyvertical/smrt-subscriptions`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`]},recipes:[{id:`expenses.tracking`,label:`Expenses`,summary:`Record what the business spends, with receipts, and review it.`,synonyms:[`costs`,`receipts`,`spending`,`reimbursements`],models:[`@happyvertical/smrt-expenses:Expense`,`@happyvertical/smrt-expenses:ExpenseReceipt`],nav:[{label:`Expenses`,model:`@happyvertical/smrt-expenses:Expense`,icon:`receipt`,description:`Costs you have paid, with the receipt and who paid.`}],requires:[],section:{id:`accounting`,label:`Accounting`,icon:`bank`,description:`Your books: accounts, journals and balances.`},options:{"@happyvertical/smrt-expenses:Expense":{fields:{description:{order:1,required:!0},amount:{order:2},currency:{order:3},incurredOn:{label:`Date`,order:4,help:`The date on the receipt, as YYYY-MM-DD.`},category:{order:5,help:`One word, such as material, travel, freight or other.`},vendorId:{label:`Vendor`,order:6},paidBy:{order:7},paidByProfileId:{label:`Person who paid`,order:8,help:`Who paid out of their own pocket, when a person paid.`},paidByName:{order:9},reimbursable:{order:10},costObjectId:{label:`Charged to`,order:11,help:`The job, project or client the cost belongs to.`},costObjectType:{visibility:`hidden`},financialBreakdown:{visibility:`hidden`},supplierPayableJson:{visibility:`hidden`},refundRecipient:{visibility:`hidden`},reimbursedAmount:{help:`The recorded amount paid back to the person who paid.`},refundOfId:{visibility:`hidden`},recordedByProfileId:{visibility:`hidden`},commitmentId:{visibility:`hidden`},commitmentLineId:{visibility:`hidden`},reviewedByProfileId:{visibility:`hidden`},duplicateOfId:{visibility:`hidden`}}},"@happyvertical/smrt-expenses:ExpenseReceipt":{fields:{contentSha256:{visibility:`hidden`},byteCount:{visibility:`hidden`},uploadedByProfileId:{visibility:`hidden`}}}},help:{markdown:`## Overview
498
-
499
- Expenses are the costs the business pays: a receipt, who paid it and what it
500
- was for. Each expense is reviewed once, and a reimbursable one is marked when
501
- the person is paid back.
502
-
503
- ## Tasks
504
-
505
- ### Record an expense
506
-
507
- 1. Create a new expense and write a short **{field:description}**.
508
- 2. Enter the **{field:amount}** and its **{field:currency}**.
509
- 3. Set the **{field:incurredOn}** date from the receipt and pick a
510
- **{field:category}**.
511
- 4. Choose who **{field:paidBy}**: the company, a person or a third party.
512
- 5. When a person paid, pick the **{field:paidByProfileId}** and tick
513
- **{field:reimbursable}** when they are owed the money back.
514
-
515
- ### Review it
516
-
517
- 1. Open the expense and check the receipt attached to it.
518
- 2. **{field:reviewStatus}** moves from unreviewed to reviewed, or to rejected,
519
- when someone reviews it. A rejected expense can be reopened.
520
- `,fieldRefs:[`amount`,`category`,`currency`,`description`,`incurredOn`,`paidBy`,`paidByProfileId`,`reimbursable`,`reviewStatus`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: node:crypto; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-commerce, @happyvertical/smrt-jobs, @happyvertical/smrt-ledgers, @happyvertical/smrt-products, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3616, #3617, #3624, #3625, #3626, #3627).`]}}]},{id:`facts`,packageName:`@happyvertical/smrt-facts`,version:`0.57.9`,description:`Distributed memory and knowledge management with provenance tracking for SMRT framework`,models:[{id:`@happyvertical/smrt-facts:Fact`,name:`Fact`,collection:`facts`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`textRefined`,type:`text`,required:!0,default:``},{name:`textRaw`,type:`text`,required:!1,default:``},{name:`catalogSearch`,type:`text`,required:!1},{name:`type`,type:`text`,required:!0,default:`assertion`},{name:`status`,type:`text`,required:!0,default:`pending`},{name:`domain`,type:`text`,required:!1,default:``},{name:`accessScope`,type:`text`,required:!1},{name:`previousFactId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-facts:Fact`},{name:`evolutionType`,type:`text`,required:!1,default:`original`},{name:`sourceCount`,type:`integer`,required:!1,default:0},{name:`confidence`,type:`decimal`,required:!1,default:0},{name:`metadata`,type:`text`,required:!1,default:``},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`datetime`,required:!1,system:!0},{name:`updatedAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`GET`,path:`/facts`},{method:`GET`,path:`/facts/[id]`},{method:`POST`,path:`/facts`},{method:`PATCH`,path:`/facts/[id]`},{method:`DELETE`,path:`/facts/[id]`}],mcp:[{operation:`create`,name:`fact_create`},{operation:`get`,name:`fact_get`},{operation:`list`,name:`fact_list`},{operation:`update`,name:`fact_update`}],cli:[{operation:`create`,name:`fact_create`},{operation:`delete`,name:`fact_delete`},{operation:`get`,name:`fact_get`},{operation:`getEvolutionType`,name:`fact_getEvolutionType`},{operation:`getMetadata`,name:`fact_getMetadata`},{operation:`getPredecessor`,name:`fact_getPredecessor`},{operation:`getSources`,name:`fact_getSources`},{operation:`getStatus`,name:`fact_getStatus`},{operation:`getSubjects`,name:`fact_getSubjects`},{operation:`getSuccessors`,name:`fact_getSuccessors`},{operation:`getType`,name:`fact_getType`},{operation:`hasPredecessor`,name:`fact_hasPredecessor`},{operation:`isActive`,name:`fact_isActive`},{operation:`isSuperseded`,name:`fact_isSuperseded`},{operation:`list`,name:`fact_list`},{operation:`setMetadata`,name:`fact_setMetadata`},{operation:`update`,name:`fact_update`},{operation:`updateMetadata`,name:`fact_updateMetadata`},{operation:`assessClaimSupport`,name:`factcollection_assessClaimSupport`},{operation:`backfillCatalogSearch`,name:`factcollection_backfillCatalogSearch`},{operation:`branch`,name:`factcollection_branch`},{operation:`browseCatalog`,name:`factcollection_browseCatalog`},{operation:`extractArticleClaims`,name:`factcollection_extractArticleClaims`},{operation:`extractCandidatesFromText`,name:`factcollection_extractCandidatesFromText`},{operation:`findByTenant`,name:`factcollection_findByTenant`},{operation:`findGlobal`,name:`factcollection_findGlobal`},{operation:`findWithGlobals`,name:`factcollection_findWithGlobals`},{operation:`getActive`,name:`factcollection_getActive`},{operation:`getByDomain`,name:`factcollection_getByDomain`},{operation:`getByStatus`,name:`factcollection_getByStatus`},{operation:`getByType`,name:`factcollection_getByType`},{operation:`getEntityBriefing`,name:`factcollection_getEntityBriefing`},{operation:`getEvolutionChain`,name:`factcollection_getEvolutionChain`},{operation:`getEvolutionTree`,name:`factcollection_getEvolutionTree`},{operation:`getForContent`,name:`factcollection_getForContent`},{operation:`getLatestInChain`,name:`factcollection_getLatestInChain`},{operation:`getPending`,name:`factcollection_getPending`},{operation:`getSuccessors`,name:`factcollection_getSuccessors`},{operation:`recalculateConfidence`,name:`factcollection_recalculateConfidence`},{operation:`reconcile`,name:`factcollection_reconcile`}],methods:[{name:`assessClaimSupport`,async:!0,parameters:[`claim: string`,`candidateFacts: FactClaimSupportCandidate[]`,`options?: FactClaimSupportOptions`],returnType:`Promise<FactClaimSupportAssessment>`,aiCallable:!1},{name:`backfillCatalogSearch`,async:!0,parameters:[`batchSize?: any`],returnType:`Promise<object>`,aiCallable:!1},{name:`branch`,async:!0,parameters:[`previousFactId: string`,`data: Partial<FactOptions>`,`evolutionType?: EvolutionType`],returnType:`Promise<Fact>`,aiCallable:!1},{name:`browseCatalog`,async:!0,parameters:[`query?: any`,`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`extractArticleClaims`,async:!0,parameters:[`text: string`,`options?: FactExtractionOptions`],returnType:`Promise<FactExtractionCandidate[]>`,aiCallable:!1},{name:`extractCandidatesFromText`,async:!0,parameters:[`text: string`,`options?: FactExtractionOptions`],returnType:`Promise<FactExtractionCandidate[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getActive`,async:!0,parameters:[],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getByDomain`,async:!0,parameters:[`domain: string`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getByStatus`,async:!0,parameters:[`status: FactStatus`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getByType`,async:!0,parameters:[`type: FactType`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getEntityBriefing`,async:!0,parameters:[`entityType: string`,`entityId: string`],returnType:`Promise<EntityBriefing>`,aiCallable:!1},{name:`getEvolutionChain`,async:!0,parameters:[`factId: string`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getEvolutionTree`,async:!0,parameters:[`factId: string`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getEvolutionType`,async:!1,parameters:[],returnType:`EvolutionType`,aiCallable:!1},{name:`getForContent`,async:!0,parameters:[`contentId: string`,`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getLatestInChain`,async:!0,parameters:[`factId: string`],returnType:`Promise<Fact>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`FactMetadata`,aiCallable:!1},{name:`getPending`,async:!0,parameters:[],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getPredecessor`,async:!0,parameters:[],returnType:`Promise<Fact | null>`,aiCallable:!1},{name:`getSources`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getStatus`,async:!1,parameters:[],returnType:`FactStatus`,aiCallable:!1},{name:`getSubjects`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getSuccessors`,async:!0,parameters:[],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getType`,async:!1,parameters:[],returnType:`FactType`,aiCallable:!1},{name:`hasPredecessor`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSuperseded`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`recalculateConfidence`,async:!0,parameters:[`factId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`reconcile`,async:!0,parameters:[`options: ReconcileOptions`],returnType:`Promise<ReconcileResult>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: FactMetadata`],returnType:`void`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: Partial<FactMetadata>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-facts:Fact`],exposed:!0},{id:`@happyvertical/smrt-facts:FactContent`,name:`FactContent`,collection:`factcontents`,fields:[{name:`factId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-facts:Fact`},{name:`contentId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-content:Content`},{name:`relationship`,type:`text`,required:!0,default:`extracted_from`},{name:`metadata`,type:`text`,required:!1,default:``},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`datetime`,required:!1,system:!0},{name:`updatedAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`GET`,path:`/factcontents`},{method:`GET`,path:`/factcontents/[id]`},{method:`POST`,path:`/factcontents`},{method:`DELETE`,path:`/factcontents/[id]`}],mcp:[{operation:`create`,name:`factcontent_create`},{operation:`get`,name:`factcontent_get`},{operation:`list`,name:`factcontent_list`}],cli:[{operation:`create`,name:`factcontent_create`},{operation:`delete`,name:`factcontent_delete`},{operation:`get`,name:`factcontent_get`},{operation:`getFact`,name:`factcontent_getFact`},{operation:`getMetadata`,name:`factcontent_getMetadata`},{operation:`getRelationship`,name:`factcontent_getRelationship`},{operation:`list`,name:`factcontent_list`},{operation:`setMetadata`,name:`factcontent_setMetadata`},{operation:`update`,name:`factcontent_update`},{operation:`updateMetadata`,name:`factcontent_updateMetadata`},{operation:`attach`,name:`factcontentcollection_attach`},{operation:`byLeft`,name:`factcontentcollection_byLeft`},{operation:`byRight`,name:`factcontentcollection_byRight`},{operation:`detach`,name:`factcontentcollection_detach`},{operation:`findByTenant`,name:`factcontentcollection_findByTenant`},{operation:`findGlobal`,name:`factcontentcollection_findGlobal`},{operation:`findWithGlobals`,name:`factcontentcollection_findWithGlobals`},{operation:`setLinks`,name:`factcontentcollection_setLinks`}],methods:[{name:`attach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<TItem>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<FactContent[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<FactContent[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<FactContent[]>`,aiCallable:!1},{name:`getFact`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getRelationship`,async:!1,parameters:[],returnType:`FactContentRelationship`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`leftId: string`,`rightIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-content:Content`,`@happyvertical/smrt-facts:Fact`],exposed:!0},{id:`@happyvertical/smrt-facts:FactEvidence`,name:`FactEvidence`,collection:`factevidences`,fields:[{name:`factId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-facts:Fact`},{name:`evidenceKey`,type:`text`,required:!0,default:``},{name:`status`,type:`text`,required:!0,default:`supports`,enum:[`supports`,`contradicts`,`unclear`,`irrelevant`,`invalid`]},{name:`sourceKind`,type:`text`,required:!1,default:``},{name:`sourceId`,type:`text`,required:!1,default:``},{name:`sourceUrl`,type:`text`,required:!1,default:``},{name:`sourceTitle`,type:`text`,required:!1,default:``},{name:`quote`,type:`text`,required:!1,default:``},{name:`locator`,type:`text`,required:!1,default:``},{name:`extractionMethod`,type:`text`,required:!1,default:``},{name:`confidence`,type:`decimal`,required:!1,default:0},{name:`metadata`,type:`text`,required:!1,default:``},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`datetime`,required:!1,system:!0},{name:`updatedAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`GET`,path:`/factevidences`},{method:`GET`,path:`/factevidences/[id]`},{method:`POST`,path:`/factevidences`},{method:`DELETE`,path:`/factevidences/[id]`}],mcp:[{operation:`create`,name:`factevidence_create`},{operation:`get`,name:`factevidence_get`},{operation:`list`,name:`factevidence_list`}],cli:[{operation:`create`,name:`factevidence_create`},{operation:`delete`,name:`factevidence_delete`},{operation:`get`,name:`factevidence_get`},{operation:`getMetadata`,name:`factevidence_getMetadata`},{operation:`list`,name:`factevidence_list`},{operation:`setMetadata`,name:`factevidence_setMetadata`},{operation:`update`,name:`factevidence_update`},{operation:`updateMetadata`,name:`factevidence_updateMetadata`},{operation:`bulkUpdateStatus`,name:`factevidencecollection_bulkUpdateStatus`},{operation:`getForFact`,name:`factevidencecollection_getForFact`},{operation:`getForSource`,name:`factevidencecollection_getForSource`},{operation:`getForSources`,name:`factevidencecollection_getForSources`},{operation:`replaceGeneratedForSources`,name:`factevidencecollection_replaceGeneratedForSources`},{operation:`upsertEvidence`,name:`factevidencecollection_upsertEvidence`}],methods:[{name:`bulkUpdateStatus`,async:!0,parameters:[`evidenceIds: string[]`,`status: FactEvidenceStatus`,`options?: object`],returnType:`Promise<FactEvidence[]>`,aiCallable:!1},{name:`getForFact`,async:!0,parameters:[`factId: string`],returnType:`Promise<FactEvidence[]>`,aiCallable:!1},{name:`getForSource`,async:!0,parameters:[`sourceKind: string`,`sourceId: string`],returnType:`Promise<FactEvidence[]>`,aiCallable:!1},{name:`getForSources`,async:!0,parameters:[`sources: Array<object>`],returnType:`Promise<FactEvidence[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`replaceGeneratedForSources`,async:!0,parameters:[`sources: Array<object>`,`options?: object`],returnType:`Promise<object>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`upsertEvidence`,async:!0,parameters:[`options: FactEvidenceOptions`],returnType:`Promise<FactEvidence>`,aiCallable:!1}],references:[`@happyvertical/smrt-facts:Fact`],exposed:!0},{id:`@happyvertical/smrt-facts:FactSource`,name:`FactSource`,collection:`factsources`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`factId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-facts:Fact`},{name:`sourceType`,type:`text`,required:!1,default:``},{name:`sourceUrl`,type:`text`,required:!1,default:``},{name:`sourceTitle`,type:`text`,required:!1,default:``},{name:`credibility`,type:`decimal`,required:!1,default:0},{name:`extractedAt`,type:`datetime`,required:!1},{name:`metadata`,type:`text`,required:!1,default:``},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`datetime`,required:!1,system:!0},{name:`updatedAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`GET`,path:`/factsources`},{method:`GET`,path:`/factsources/[id]`},{method:`POST`,path:`/factsources`},{method:`DELETE`,path:`/factsources/[id]`}],mcp:[{operation:`create`,name:`factsource_create`},{operation:`get`,name:`factsource_get`},{operation:`list`,name:`factsource_list`}],cli:[{operation:`create`,name:`factsource_create`},{operation:`delete`,name:`factsource_delete`},{operation:`get`,name:`factsource_get`},{operation:`getFact`,name:`factsource_getFact`},{operation:`getMetadata`,name:`factsource_getMetadata`},{operation:`list`,name:`factsource_list`},{operation:`setMetadata`,name:`factsource_setMetadata`},{operation:`update`,name:`factsource_update`},{operation:`updateMetadata`,name:`factsource_updateMetadata`},{operation:`countForFact`,name:`factsourcecollection_countForFact`},{operation:`findByTenant`,name:`factsourcecollection_findByTenant`},{operation:`findGlobal`,name:`factsourcecollection_findGlobal`},{operation:`findWithGlobals`,name:`factsourcecollection_findWithGlobals`},{operation:`getAverageCredibility`,name:`factsourcecollection_getAverageCredibility`},{operation:`getByType`,name:`factsourcecollection_getByType`},{operation:`getForFact`,name:`factsourcecollection_getForFact`},{operation:`getHighCredibility`,name:`factsourcecollection_getHighCredibility`}],methods:[{name:`countForFact`,async:!0,parameters:[`factId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<FactSource[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<FactSource[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<FactSource[]>`,aiCallable:!1},{name:`getAverageCredibility`,async:!0,parameters:[`factId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`getByType`,async:!0,parameters:[`sourceType: string`],returnType:`Promise<FactSource[]>`,aiCallable:!1},{name:`getFact`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getForFact`,async:!0,parameters:[`factId: string`],returnType:`Promise<FactSource[]>`,aiCallable:!1},{name:`getHighCredibility`,async:!0,parameters:[`minCredibility?: number`],returnType:`Promise<FactSource[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-facts:Fact`],exposed:!0},{id:`@happyvertical/smrt-facts:FactSubject`,name:`FactSubject`,collection:`factsubjects`,fields:[{name:`factId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-facts:Fact`},{name:`entityType`,type:`text`,required:!0,default:``},{name:`entityId`,type:`text`,required:!0,default:``},{name:`role`,type:`text`,required:!1,default:`subject`},{name:`metadata`,type:`text`,required:!1,default:``},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`datetime`,required:!1,system:!0},{name:`updatedAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`GET`,path:`/factsubjects`},{method:`GET`,path:`/factsubjects/[id]`},{method:`POST`,path:`/factsubjects`},{method:`DELETE`,path:`/factsubjects/[id]`}],mcp:[{operation:`create`,name:`factsubject_create`},{operation:`get`,name:`factsubject_get`},{operation:`list`,name:`factsubject_list`}],cli:[{operation:`create`,name:`factsubject_create`},{operation:`delete`,name:`factsubject_delete`},{operation:`get`,name:`factsubject_get`},{operation:`getFact`,name:`factsubject_getFact`},{operation:`getMetadata`,name:`factsubject_getMetadata`},{operation:`getRole`,name:`factsubject_getRole`},{operation:`list`,name:`factsubject_list`},{operation:`setMetadata`,name:`factsubject_setMetadata`},{operation:`update`,name:`factsubject_update`},{operation:`updateMetadata`,name:`factsubject_updateMetadata`},{operation:`countForFact`,name:`factsubjectcollection_countForFact`},{operation:`findByTenant`,name:`factsubjectcollection_findByTenant`},{operation:`findGlobal`,name:`factsubjectcollection_findGlobal`},{operation:`findWithGlobals`,name:`factsubjectcollection_findWithGlobals`},{operation:`getByRole`,name:`factsubjectcollection_getByRole`},{operation:`getForEntity`,name:`factsubjectcollection_getForEntity`},{operation:`getForFact`,name:`factsubjectcollection_getForFact`},{operation:`linkEntity`,name:`factsubjectcollection_linkEntity`},{operation:`unlinkEntity`,name:`factsubjectcollection_unlinkEntity`}],methods:[{name:`countForFact`,async:!0,parameters:[`factId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<FactSubject[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<FactSubject[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<FactSubject[]>`,aiCallable:!1},{name:`getByRole`,async:!0,parameters:[`factId: string`,`role: SubjectRole`],returnType:`Promise<FactSubject[]>`,aiCallable:!1},{name:`getFact`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getForEntity`,async:!0,parameters:[`entityType: string`,`entityId: string`],returnType:`Promise<FactSubject[]>`,aiCallable:!1},{name:`getForFact`,async:!0,parameters:[`factId: string`],returnType:`Promise<FactSubject[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getRole`,async:!1,parameters:[],returnType:`SubjectRole`,aiCallable:!1},{name:`linkEntity`,async:!0,parameters:[`factId: string`,`entityType: string`,`entityId: string`,`role?: SubjectRole`],returnType:`Promise<FactSubject>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`unlinkEntity`,async:!0,parameters:[`factId: string`,`entityType: string`,`entityId: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-facts:Fact`],exposed:!0},{id:`@happyvertical/smrt-facts:FactTag`,name:`FactTag`,collection:`facttags`,fields:[{name:`factId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-facts:Fact`},{name:`tagSlug`,type:`text`,required:!0,default:``},{name:`metadata`,type:`text`,required:!1,default:``},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`datetime`,required:!1,system:!0},{name:`updatedAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`GET`,path:`/facttags`},{method:`GET`,path:`/facttags/[id]`},{method:`POST`,path:`/facttags`},{method:`DELETE`,path:`/facttags/[id]`}],mcp:[{operation:`create`,name:`facttag_create`},{operation:`get`,name:`facttag_get`},{operation:`list`,name:`facttag_list`}],cli:[{operation:`create`,name:`facttag_create`},{operation:`delete`,name:`facttag_delete`},{operation:`get`,name:`facttag_get`},{operation:`getFact`,name:`facttag_getFact`},{operation:`getMetadata`,name:`facttag_getMetadata`},{operation:`list`,name:`facttag_list`},{operation:`setMetadata`,name:`facttag_setMetadata`},{operation:`update`,name:`facttag_update`},{operation:`updateMetadata`,name:`facttag_updateMetadata`},{operation:`addTag`,name:`facttagcollection_addTag`},{operation:`findByTenant`,name:`facttagcollection_findByTenant`},{operation:`findGlobal`,name:`facttagcollection_findGlobal`},{operation:`findWithGlobals`,name:`facttagcollection_findWithGlobals`},{operation:`getForFact`,name:`facttagcollection_getForFact`},{operation:`getForTag`,name:`facttagcollection_getForTag`},{operation:`getTagSlugs`,name:`facttagcollection_getTagSlugs`},{operation:`removeTag`,name:`facttagcollection_removeTag`}],methods:[{name:`addTag`,async:!0,parameters:[`factId: string`,`tagSlug: string`],returnType:`Promise<FactTag>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<FactTag[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<FactTag[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<FactTag[]>`,aiCallable:!1},{name:`getFact`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getForFact`,async:!0,parameters:[`factId: string`],returnType:`Promise<FactTag[]>`,aiCallable:!1},{name:`getForTag`,async:!0,parameters:[`tagSlug: string`],returnType:`Promise<FactTag[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getTagSlugs`,async:!0,parameters:[`factId: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`removeTag`,async:!0,parameters:[`factId: string`,`tagSlug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-facts:Fact`],exposed:!0}],dependencies:[`content`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`],via:[`@happyvertical/smrt-tenancy`]}},{id:`fields`,packageName:`@happyvertical/smrt-fields`,version:`0.57.9`,description:`Layered field policy store and resolver (defaults, visibility tiers, help text) for SMRT objects`,models:[{id:`@happyvertical/smrt-fields:FieldPolicy`,name:`FieldPolicy`,collection:`fieldpolicies`,display:{label:`label`},fields:[{name:`objectRef`,type:`text`,required:!0,default:``},{name:`fieldName`,type:`text`,required:!0,default:``},{name:`scopeType`,type:`text`,required:!0,default:`app`,enum:[`app`,`tenant`,`user`]},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`userId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:User`},{name:`scopeKey`,type:`text`,required:!0},{name:`defaultValue`,type:`text`,required:!1,description:`The value a new record starts with for this field.`},{name:`visibility`,type:`text`,required:!1,enum:[`basic`,`advanced`,`hidden`],description:`Whether the field is always shown, tucked under advanced, or hidden.`},{name:`help`,type:`text`,required:!1,description:`The hint shown beside the field on the form.`},{name:`label`,type:`text`,required:!1,description:`The name people see for the field on forms.`},{name:`displayOrder`,type:`integer`,required:!1,description:`Where the field appears on the form; lower numbers come first.`},{name:`locked`,type:`boolean`,required:!1,description:`Stops individual people from changing this field for themselves.`},{name:`updatedBy`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:User`}],rest:[{method:`POST`,path:`/fieldpolicies/policy-audit`},{method:`POST`,path:`/fieldpolicies/resolve`},{method:`POST`,path:`/fieldpolicies/editor-state`},{method:`POST`,path:`/fieldpolicies`},{method:`PATCH`,path:`/fieldpolicies/[id]`},{method:`DELETE`,path:`/fieldpolicies/[id]`}],mcp:[],cli:[{operation:`create`,name:`fieldpolicy_create`},{operation:`delete`,name:`fieldpolicy_delete`},{operation:`update`,name:`fieldpolicy_update`}],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`getAppRows`,async:!0,parameters:[`objectRef: string`],returnType:`Promise<Map<string, FieldPolicy>>`,aiCallable:!1},{name:`getDefaultValue`,async:!1,parameters:[],returnType:`unknown`,aiCallable:!1},{name:`getEditorState`,async:!0,parameters:[`options?: object`],returnType:`Promise<FieldPolicyEditorStateResult>`,aiCallable:!1},{name:`getTenantRows`,async:!0,parameters:[`objectRef: string`,`tenantIds: string[]`],returnType:`Promise<Map<string, Map<string, FieldPolicy>>>`,aiCallable:!1},{name:`getUserRows`,async:!0,parameters:[`objectRef: string`,`userId: string`],returnType:`Promise<Map<string, FieldPolicy>>`,aiCallable:!1},{name:`policyAudit`,async:!0,parameters:[`options?: object`],returnType:`Promise<FieldPolicyAuditSnapshot>`,aiCallable:!1},{name:`resolveBatch`,async:!0,parameters:[`options?: object`],returnType:`Promise<FieldPolicyBatchResult>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setDefaultValue`,async:!1,parameters:[`value: unknown`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-users:User`],exposed:!0},{id:`@happyvertical/smrt-fields:FieldPolicySuggestion`,name:`FieldPolicySuggestion`,collection:`fieldpolicysuggestions`,fields:[{name:`objectRef`,type:`text`,required:!0,default:``},{name:`fieldName`,type:`text`,required:!0,default:``},{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`kind`,type:`text`,required:!0,default:`promote`,enum:[`promote`,`default`]},{name:`proposedValue`,type:`text`,required:!1},{name:`evidence`,type:`text`,required:!1},{name:`status`,type:`text`,required:!0,default:`pending`,enum:[`pending`,`accepted`,`dismissed`]},{name:`activeKey`,type:`text`,required:!0},{name:`cooldownUntil`,type:`datetime`,required:!1},{name:`decidedBy`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:User`},{name:`decidedAt`,type:`datetime`,required:!1}],rest:[{method:`POST`,path:`/fieldpolicysuggestions/pending`},{method:`POST`,path:`/fieldpolicysuggestions/accept`},{method:`POST`,path:`/fieldpolicysuggestions/dismiss`}],mcp:[],cli:[],methods:[{name:`acceptSuggestion`,async:!0,parameters:[`options?: object`],returnType:`Promise<AcceptFieldPolicySuggestionResult>`,aiCallable:!1},{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`dismissSuggestion`,async:!0,parameters:[`options?: object`],returnType:`Promise<DismissFieldPolicySuggestionResult>`,aiCallable:!1},{name:`getEvidence`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getProposedValue`,async:!1,parameters:[],returnType:`unknown`,aiCallable:!1},{name:`pendingSuggestions`,async:!0,parameters:[`options?: object`],returnType:`Promise<PendingFieldPolicySuggestionsResult>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setEvidence`,async:!1,parameters:[`evidence: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`toSuggestionData`,async:!1,parameters:[],returnType:`FieldPolicySuggestionData`,aiCallable:!1}],references:[`@happyvertical/smrt-users:User`],exposed:!0},{id:`@happyvertical/smrt-fields:FieldUsageCounter`,name:`FieldUsageCounter`,collection:`fieldusagecounters`,fields:[{name:`objectRef`,type:`text`,required:!0,default:``},{name:`fieldName`,type:`text`,required:!0,default:``},{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`period`,type:`text`,required:!0,default:``},{name:`submissionCount`,type:`integer`,required:!1},{name:`setCount`,type:`integer`,required:!1},{name:`distinctUserCount`,type:`integer`,required:!1},{name:`distinctUserIds`,type:`text`,required:!1},{name:`distinctUsersOverflowed`,type:`boolean`,required:!1},{name:`valueHistogram`,type:`text`,required:!1},{name:`valueHistogramOverflowed`,type:`boolean`,required:!1}],rest:[{method:`POST`,path:`/fieldusagecounters/report`}],mcp:[],cli:[],methods:[{name:`addDistinctUser`,async:!1,parameters:[`userId: string`],returnType:`void`,aiCallable:!1},{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`getDistinctUserIds`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getValueHistogram`,async:!1,parameters:[],returnType:`Record<string, number>`,aiCallable:!1},{name:`isLegacyBucket`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`listWindow`,async:!0,parameters:[`options: object`],returnType:`Promise<FieldUsageCounter[]>`,aiCallable:!1},{name:`recordHistogramSample`,async:!1,parameters:[`key: string`],returnType:`void`,aiCallable:!1},{name:`reportUsage`,async:!0,parameters:[`options?: object`],returnType:`Promise<FieldUsageReportResult>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-fields:FieldUsageLearningAgent`,name:`FieldUsageLearningAgent`,collection:`fieldusagelearningagents`,description:`The registered schedule target for the #2051 learning loop (see the module doc for why it is NOT an smrt-agents Agent subclass).`,fields:[],rest:[],mcp:[],cli:[],methods:[{name:`runSuggestionGeneration`,async:!0,parameters:[`args?: Record<string, unknown>`],returnType:`Promise<FieldUsageSuggestionRunSummary>`,aiCallable:!1},{name:`runUsageMaintenance`,async:!0,parameters:[`args?: Record<string, unknown>`],returnType:`Promise<FieldUsageMaintenanceSummary>`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-fields:FieldUsageReportReceipt`,name:`FieldUsageReportReceipt`,collection:`fieldusagereportreceipts`,description:`Durable daily receipt for one member's contribution to one field.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`userId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:User`},{name:`objectRef`,type:`text`,required:!0,default:``},{name:`fieldName`,type:`text`,required:!0,default:``},{name:`period`,type:`text`,required:!0,default:``}],rest:[],mcp:[],cli:[],methods:[{name:`claim`,async:!0,parameters:[`options: object`],returnType:`Promise<boolean>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:User`],exposed:!1}],dependencies:[`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3617`,`#3618`,`#3624`,`#3626`],reason:`imports core utils/import-workspace-module (node:url, node:fs, node:path)`,via:[`@happyvertical/smrt-profiles`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`]},recipes:[{id:`fields.form-customization`,label:`Form customization`,summary:`Choose what your forms ask for: defaults, labels, hints and which fields are shown.`,synonyms:[`form defaults`,`field defaults`,`customize forms`,`hide fields`,`field visibility`,`field labels`],models:[`@happyvertical/smrt-fields:FieldPolicy`,`@happyvertical/smrt-fields:FieldPolicySuggestion`,`@happyvertical/smrt-fields:FieldUsageCounter`,`@happyvertical/smrt-fields:FieldUsageReportReceipt`],nav:[],requires:[],help:{markdown:`## Overview
521
-
522
- Form customization lets you decide what the forms in your app ask for. For any
523
- field you can change the name people see, the hint beside it, the value a new
524
- record starts with, where it sits on the form, and whether it is always shown,
525
- tucked under "advanced", or hidden. You can also lock a field so that people
526
- cannot change it for themselves.
527
-
528
- Changes layer. The app starts with sensible settings, your organization can
529
- change them for everyone in it, and each person can then adjust their own view
530
- unless you locked the field. Resetting a field removes your change and brings
531
- back whatever sits underneath.
532
-
533
- ## Tasks
534
-
535
- ### Change what a field is called
536
-
537
- 1. Open **Form defaults** from your settings and find the form you want.
538
- 2. Choose the field and type a new **{field:label}**.
539
- 3. Save. The new name appears on the form.
540
-
541
- ### Give people a hint
542
-
543
- 1. Choose the field in **Form defaults**.
544
- 2. Write the **{field:help}**, one short sentence that says what to enter.
545
- 3. Save. The hint now shows beside the field.
546
-
547
- ### Pre-fill a value
548
-
549
- 1. Choose the field in **Form defaults**.
550
- 2. Enter the **{field:defaultValue}** a new record should start with.
551
- 3. Save. People can still type over it unless the field is locked.
552
-
553
- ### Tidy a long form
554
-
555
- 1. Choose a field that most people never need.
556
- 2. Set its **{field:visibility}** to advanced to tuck it away, or to hidden to
557
- remove it.
558
- 3. Save. A field that must always be filled in stays shown unless it also has a
559
- default value.
560
-
561
- ### Put fields in a better order
562
-
563
- 1. Choose a field.
564
- 2. Set its **{field:displayOrder}**. Lower numbers come first.
565
- 3. Save, then check the form.
566
-
567
- ### Keep everyone on the same setting
568
-
569
- 1. Choose the field in **Form defaults**.
570
- 2. Turn on **{field:locked}**.
571
- 3. Save. People can no longer change that field for themselves.
572
-
573
- ### Undo a change
574
-
575
- Choose **Reset** on a field to remove your change. Settings from the layers
576
- below, such as the app's own, come back. Resetting asks you to confirm first.
577
-
578
- ### Review suggestions
579
-
580
- When enough people fill in the same value, or keep opening the same advanced
581
- field, the app suggests a change. Open the suggestions list in **Form defaults**
582
- and accept or dismiss each one. Nothing changes until you accept.
583
- `,fieldRefs:[`defaultValue`,`displayOrder`,`help`,`label`,`locked`,`visibility`]},surfaces:[{kind:`settings-panel`,export:`@happyvertical/smrt-fields/svelte#FieldPolicyControlPanel`,label:`Form defaults`}],runtime:`server`,demo:{mode:`server`,reasons:[`The recipe declares runtime "server".`,`Needs a server because its package does not build for a browser: imports core utils/import-workspace-module (node:url, node:fs, node:path); and its package depends on @happyvertical/smrt-profiles, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3617, #3618, #3624, #3626).`]}}]},{id:`human-resources`,packageName:`@happyvertical/smrt-human-resources`,version:`0.57.9`,description:`HR records for the SMRT framework: who works for an organization, as what, and with what standing — employment with dated terms, and qualifications with expiry`,models:[{id:`@happyvertical/smrt-human-resources:Employment`,name:`Employment`,collection:`employments`,description:`One person's employment with a tenant: the stable record applications and payroll key on. There is one per tenant and profile; a rehire adds an EmploymentTerm to the same row.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`userId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:User`},{name:`employerProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`employeeNumber`,type:`text`,required:!1},{name:`workerType`,type:`text`,required:!1},{name:`position`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`active`,`on-leave`,`ended`]}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-users:User`],exposed:!1},{id:`@happyvertical/smrt-human-resources:EmploymentChange`,name:`EmploymentChange`,collection:`employmentchanges`,description:`Append-only dated change to an employment, attributed to an actor.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`employmentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-human-resources:Employment`},{name:`kind`,type:`text`,required:!1,enum:[`hired`,`ended`,`rehired`,`position-changed`,`worker-type-changed`,`leave-started`,`leave-ended`,`login-linked`,`login-unlinked`]},{name:`effectiveOn`,type:`text`,required:!1},{name:`fromValue`,type:`text`,required:!1},{name:`toValue`,type:`text`,required:!1},{name:`note`,type:`text`,required:!1},{name:`actorProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-human-resources:Employment`,`@happyvertical/smrt-profiles:Profile`],exposed:!1},{id:`@happyvertical/smrt-human-resources:EmploymentTerm`,name:`EmploymentTerm`,collection:`employmentterms`,description:`One continuous period of employment. endedOn is the last day employed (inclusive); null means the term is open. "Employed on a date" is answered from terms, never from Employment.status.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`employmentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-human-resources:Employment`},{name:`startedOn`,type:`text`,required:!1},{name:`endedOn`,type:`text`,required:!1},{name:`endReason`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-human-resources:Employment`],exposed:!1},{id:`@happyvertical/smrt-human-resources:HeldQualification`,name:`HeldQualification`,collection:`heldqualifications`,description:`A person holds a qualification. employmentId is set when the definition's scope is employment; such a row is revoked when that employment ends.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`qualificationId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-human-resources:Qualification`},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`employmentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-human-resources:Employment`},{name:`issuedOn`,type:`text`,required:!1},{name:`expiresOn`,type:`text`,required:!1},{name:`certificateNumber`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`valid`,`expired`,`suspended`,`revoked`]},{name:`verifiedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`verifiedAt`,type:`datetime`,required:!1},{name:`documentAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`renewalOfId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-human-resources:HeldQualification`}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-human-resources:Employment`,`@happyvertical/smrt-human-resources:HeldQualification`,`@happyvertical/smrt-human-resources:Qualification`,`@happyvertical/smrt-profiles:Profile`],exposed:!1},{id:`@happyvertical/smrt-human-resources:HeldQualificationChange`,name:`HeldQualificationChange`,collection:`heldqualificationchanges`,description:`Append-only dated change to a held qualification, attributed to an actor.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`heldQualificationId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-human-resources:HeldQualification`},{name:`kind`,type:`text`,required:!1,enum:[`granted`,`renewed`,`suspended`,`reinstated`,`revoked`,`expired`]},{name:`effectiveOn`,type:`text`,required:!1},{name:`reason`,type:`text`,required:!1},{name:`actorProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-human-resources:HeldQualification`,`@happyvertical/smrt-profiles:Profile`],exposed:!1},{id:`@happyvertical/smrt-human-resources:Qualification`,name:`Qualification`,collection:`qualifications`,description:`A qualification definition: a managed list per tenant. Other packages gate work by referencing its id (@happyvertical/smrt-human-resources:Qualification).`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`key`,type:`text`,required:!1},{name:`name`,type:`text`,required:!1},{name:`kind`,type:`text`,required:!1,enum:[`ticket`,`certification`,`authorization`,`training`,`restriction`]},{name:`issuingBody`,type:`text`,required:!1},{name:`expires`,type:`boolean`,required:!0,default:!1},{name:`validityMonths`,type:`integer`,required:!1},{name:`scope`,type:`text`,required:!1,enum:[`person`,`employment`]},{name:`isActive`,type:`boolean`,required:!0,default:!0}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[],exposed:!1}],dependencies:[`assets`,`profiles`,`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`],via:[`@happyvertical/smrt-tenancy`]}},{id:`images`,packageName:`@happyvertical/smrt-images`,version:`0.57.9`,description:`Image asset management with AI-powered categorization, search, editing, and metadata extraction for SMRT framework`,models:[{id:`@happyvertical/smrt-images:Image`,name:`Image`,collection:`assets`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accessMode`,type:`text`,required:!1,default:`public`,enum:[`public`,`private`],description:`Whether this record is public to ordinary asset APIs or private.`},{name:`name`,type:`text`,required:!1,description:`A recognizable name for this file or media item.`},{name:`sourceUri`,type:`text`,required:!1,description:`Where the original file is stored or can be retrieved.`},{name:`mimeType`,type:`text`,required:!1,description:`The file format, such as image/jpeg or application/pdf.`},{name:`description`,type:`text`,required:!1,description:`Explain what the file contains and when it should be used.`},{name:`metadata`,type:`text`,required:!1,description:`Additional details recorded while processing this file.`},{name:`version`,type:`integer`,required:!0,default:1,description:`The revision number of this file in its version history.`},{name:`primaryVersionId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The first version of this file, linking its revision history.`},{name:`typeSlug`,type:`text`,required:!1,description:`The category of asset, such as an image, video, or document.`},{name:`statusSlug`,type:`text`,required:!1,description:`The stage of this asset, such as draft, published, or archived.`},{name:`ownerProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`The person or organization responsible for this asset.`},{name:`sourceAssetId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The original asset used to produce this file or variation.`},{name:`folderId`,type:`foreignKey`,required:!1,related:`Folder`,description:`The folder that organizes this file in the asset library.`},{name:`sourceType`,type:`text`,required:!1,description:`The service or source from which this file was obtained.`},{name:`externalId`,type:`text`,required:!1,description:`The reference used to identify this file at its original source.`},{name:`externalRefs`,type:`text`,required:!1,description:`References that connect this file to copies held by other services.`},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0},{name:`width`,type:`integer`,required:!1,default:0},{name:`height`,type:`integer`,required:!1,default:0},{name:`alt`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/assets`},{method:`GET`,path:`/assets/[id]`},{method:`POST`,path:`/assets`},{method:`PATCH`,path:`/assets/[id]`},{method:`DELETE`,path:`/assets/[id]`}],mcp:[{operation:`create`,name:`image_create`},{operation:`generateAltText`,name:`image_generatealttext`},{operation:`get`,name:`image_get`},{operation:`list`,name:`image_list`},{operation:`update`,name:`image_update`}],cli:[{operation:`associateWith`,name:`image_associateWith`},{operation:`create`,name:`image_create`},{operation:`delete`,name:`image_delete`},{operation:`generateAltText`,name:`image_generateAltText`},{operation:`get`,name:`image_get`},{operation:`getAssociations`,name:`image_getAssociations`},{operation:`getBySlug`,name:`image_getBySlug`},{operation:`getDerivatives`,name:`image_getDerivatives`},{operation:`getExternalRef`,name:`image_getExternalRef`},{operation:`getExternalRefs`,name:`image_getExternalRefs`},{operation:`getMetadata`,name:`image_getMetadata`},{operation:`getSource`,name:`image_getSource`},{operation:`getStatus`,name:`image_getStatus`},{operation:`getTags`,name:`image_getTags`},{operation:`getType`,name:`image_getType`},{operation:`hasTag`,name:`image_hasTag`},{operation:`isHighResolution`,name:`image_isHighResolution`},{operation:`isValidImageFormat`,name:`image_isValidImageFormat`},{operation:`list`,name:`image_list`},{operation:`mergeMetadata`,name:`image_mergeMetadata`},{operation:`setExternalRef`,name:`image_setExternalRef`},{operation:`setMetadata`,name:`image_setMetadata`},{operation:`update`,name:`image_update`},{operation:`findByTenant`,name:`imagecollection_findByTenant`},{operation:`findGlobal`,name:`imagecollection_findGlobal`},{operation:`findWithGlobals`,name:`imagecollection_findWithGlobals`},{operation:`getByAspectRatio`,name:`imagecollection_getByAspectRatio`},{operation:`getByMaxDimensions`,name:`imagecollection_getByMaxDimensions`},{operation:`getByMinDimensions`,name:`imagecollection_getByMinDimensions`},{operation:`getHighResolution`,name:`imagecollection_getHighResolution`},{operation:`getLandscape`,name:`imagecollection_getLandscape`},{operation:`getMissingAltText`,name:`imagecollection_getMissingAltText`},{operation:`getPortrait`,name:`imagecollection_getPortrait`},{operation:`getSquare`,name:`imagecollection_getSquare`}],methods:[{name:`associateWith`,async:!0,parameters:[`metaType: string`,`metaId: string`,`role?: any`],returnType:`Promise<AssetAssociation>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Image[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Image[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Image[]>`,aiCallable:!1},{name:`generateAltText`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!0},{name:`getAssociations`,async:!0,parameters:[],returnType:`Promise<AssetAssociation[]>`,aiCallable:!1},{name:`getByAspectRatio`,async:!0,parameters:[`minRatio: number`,`maxRatio: number`],returnType:`Promise<Image[]>`,aiCallable:!1},{name:`getByMaxDimensions`,async:!0,parameters:[`maxWidth: number`,`maxHeight: number`],returnType:`Promise<Image[]>`,aiCallable:!1},{name:`getByMinDimensions`,async:!0,parameters:[`minWidth: number`,`minHeight: number`],returnType:`Promise<Image[]>`,aiCallable:!1},{name:`getDerivatives`,async:!0,parameters:[],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getExternalRef`,async:!1,parameters:[`provider: string`],returnType:`AssetExternalReference | null`,aiCallable:!1},{name:`getExternalRefs`,async:!1,parameters:[],returnType:`Record<string, AssetExternalReference>`,aiCallable:!1},{name:`getHighResolution`,async:!0,parameters:[],returnType:`Promise<Image[]>`,aiCallable:!1},{name:`getLandscape`,async:!0,parameters:[],returnType:`Promise<Image[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getMissingAltText`,async:!0,parameters:[],returnType:`Promise<Image[]>`,aiCallable:!1},{name:`getPortrait`,async:!0,parameters:[],returnType:`Promise<Image[]>`,aiCallable:!1},{name:`getSlug`,async:!0,parameters:[],returnType:`Promise<string | null | undefined>`,aiCallable:!1},{name:`getSource`,async:!0,parameters:[],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getSquare`,async:!0,parameters:[],returnType:`Promise<Image[]>`,aiCallable:!1},{name:`getStatus`,async:!0,parameters:[],returnType:`Promise<AssetStatus | null>`,aiCallable:!1},{name:`getTags`,async:!0,parameters:[],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`getType`,async:!0,parameters:[],returnType:`Promise<AssetType | null>`,aiCallable:!1},{name:`hasTag`,async:!0,parameters:[`tagSlug: string`,`context?: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isHighResolution`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isValidImageFormat`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`mergeMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setExternalRef`,async:!1,parameters:[`provider: string`,`reference: any`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`Asset`,`Folder`],exposed:!0}],dependencies:[`assets`,`profiles`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`,`#3628`],reason:`sharp, node:fs/promises, node:crypto, resvg native addon`,via:[`@happyvertical/smrt-tenancy`]}},{id:`ingestion`,packageName:`@happyvertical/smrt-ingestion`,version:`0.57.9`,description:`Durable tenant-scoped intake and evidence foundations`,models:[{id:`@happyvertical/smrt-ingestion:IntakeAction`,name:`IntakeAction`,collection:`intakeactions`,description:`Durable IntakeAction record; mutations belong to the server service.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`confidentialScopeId`,type:`text`,required:!0},{name:`itemId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeItem`},{name:`actionKey`,type:`text`,required:!0},{name:`state`,type:`text`,required:!0},{name:`proposalRevision`,type:`integer`,required:!0},{name:`reviewVersion`,type:`integer`,required:!0},{name:`executionAttempt`,type:`integer`,required:!0},{name:`fence`,type:`integer`,required:!0},{name:`resultDigest`,type:`text`,required:!0},{name:`data`,type:`json`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`getData`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-ingestion:IntakeItem`],exposed:!1},{id:`@happyvertical/smrt-ingestion:IntakeAnalysis`,name:`IntakeAnalysis`,collection:`intakeanalysises`,description:`Durable IntakeAnalysis record; mutations belong to the server service.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`confidentialScopeId`,type:`text`,required:!0},{name:`itemId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeItem`},{name:`revision`,type:`integer`,required:!0},{name:`fence`,type:`integer`,required:!0},{name:`attemptNumber`,type:`integer`,required:!0},{name:`currentAttemptId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-ingestion:IntakeAnalysisAttempt`},{name:`state`,type:`text`,required:!0},{name:`inputDigest`,type:`text`,required:!0},{name:`data`,type:`json`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`getData`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-ingestion:IntakeAnalysisAttempt`,`@happyvertical/smrt-ingestion:IntakeItem`],exposed:!1},{id:`@happyvertical/smrt-ingestion:IntakeAnalysisAttempt`,name:`IntakeAnalysisAttempt`,collection:`intakeanalysisattempts`,description:`Durable IntakeAnalysisAttempt record; mutations belong to the server service.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`confidentialScopeId`,type:`text`,required:!0},{name:`itemId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeItem`},{name:`analysisId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeAnalysis`},{name:`attemptNumber`,type:`integer`,required:!0},{name:`fence`,type:`integer`,required:!0},{name:`state`,type:`text`,required:!0},{name:`leaseToken`,type:`text`,required:!0},{name:`leaseUntil`,type:`datetime`,required:!1},{name:`outputDigest`,type:`text`,required:!0},{name:`safeError`,type:`text`,required:!0},{name:`confidence`,type:`decimal`,required:!1},{name:`data`,type:`json`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`getData`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-ingestion:IntakeAnalysis`,`@happyvertical/smrt-ingestion:IntakeItem`],exposed:!1},{id:`@happyvertical/smrt-ingestion:IntakeDeletion`,name:`IntakeDeletion`,collection:`intakedeletions`,description:`Durable IntakeDeletion record; mutations belong to the server service.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`confidentialScopeId`,type:`text`,required:!0},{name:`itemId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeItem`},{name:`state`,type:`text`,required:!0},{name:`data`,type:`json`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`getData`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-ingestion:IntakeItem`],exposed:!1},{id:`@happyvertical/smrt-ingestion:IntakeDispatch`,name:`IntakeDispatch`,collection:`intakedispatches`,description:`Durable IntakeDispatch record; mutations belong to the server service.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`confidentialScopeId`,type:`text`,required:!0},{name:`itemId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeItem`},{name:`stage`,type:`text`,required:!0},{name:`revision`,type:`integer`,required:!0},{name:`state`,type:`text`,required:!0},{name:`jobId`,type:`text`,required:!0},{name:`deliveries`,type:`integer`,required:!0},{name:`data`,type:`json`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`getData`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-ingestion:IntakeItem`],exposed:!1},{id:`@happyvertical/smrt-ingestion:IntakeEvidence`,name:`IntakeEvidence`,collection:`intakeevidences`,description:`Durable IntakeEvidence record; mutations belong to the server service.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`confidentialScopeId`,type:`text`,required:!0},{name:`itemId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeItem`},{name:`partId`,type:`text`,required:!0},{name:`parentEvidenceId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-ingestion:IntakeEvidence`},{name:`assetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`state`,type:`text`,required:!0},{name:`contentHash`,type:`text`,required:!0},{name:`byteLength`,type:`integer`,required:!0},{name:`mediaType`,type:`text`,required:!0},{name:`sourceUri`,type:`text`,required:!0},{name:`data`,type:`json`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`getData`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-ingestion:IntakeEvidence`,`@happyvertical/smrt-ingestion:IntakeItem`],exposed:!1},{id:`@happyvertical/smrt-ingestion:IntakeExecution`,name:`IntakeExecution`,collection:`intakeexecutions`,description:`Durable IntakeExecution record; mutations belong to the server service.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`confidentialScopeId`,type:`text`,required:!0},{name:`itemId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeItem`},{name:`actionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeAction`},{name:`attemptNumber`,type:`integer`,required:!0},{name:`fence`,type:`integer`,required:!0},{name:`state`,type:`text`,required:!0},{name:`bindingHash`,type:`text`,required:!0},{name:`resultDigest`,type:`text`,required:!0},{name:`idempotencyKey`,type:`text`,required:!0},{name:`data`,type:`json`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`getData`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-ingestion:IntakeAction`,`@happyvertical/smrt-ingestion:IntakeItem`],exposed:!1},{id:`@happyvertical/smrt-ingestion:IntakeFeedback`,name:`IntakeFeedback`,collection:`intakefeedbacks`,description:`Durable IntakeFeedback record; mutations belong to the server service.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`confidentialScopeId`,type:`text`,required:!0},{name:`itemId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeItem`},{name:`requestKey`,type:`text`,required:!0},{name:`supersedesId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-ingestion:IntakeFeedback`},{name:`kind`,type:`text`,required:!0},{name:`data`,type:`json`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`getData`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-ingestion:IntakeFeedback`,`@happyvertical/smrt-ingestion:IntakeItem`],exposed:!1},{id:`@happyvertical/smrt-ingestion:IntakeItem`,name:`IntakeItem`,collection:`intakeitems`,description:`Durable IntakeItem record; mutations belong to the server service.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`confidentialScopeId`,type:`text`,required:!0},{name:`sourceId`,type:`text`,required:!0},{name:`sourceVersion`,type:`text`,required:!0},{name:`deliveryKey`,type:`text`,required:!0},{name:`payloadDigest`,type:`text`,required:!0},{name:`scopeDigest`,type:`text`,required:!0},{name:`receiptState`,type:`text`,required:!0},{name:`processingState`,type:`text`,required:!0},{name:`visibility`,type:`text`,required:!0},{name:`receiptVersion`,type:`integer`,required:!0},{name:`analysisRevision`,type:`integer`,required:!0},{name:`fence`,type:`integer`,required:!0},{name:`leaseToken`,type:`text`,required:!0},{name:`leaseUntil`,type:`datetime`,required:!1},{name:`expiresAt`,type:`datetime`,required:!0},{name:`replayUntil`,type:`datetime`,required:!0},{name:`cancelled`,type:`boolean`,required:!0},{name:`traceId`,type:`text`,required:!0},{name:`data`,type:`json`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`getData`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-ingestion:IntakePlan`,name:`IntakePlan`,collection:`intakeplans`,description:`Durable IntakePlan record; mutations belong to the server service.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`confidentialScopeId`,type:`text`,required:!0},{name:`itemId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeItem`},{name:`planKey`,type:`text`,required:!0},{name:`revision`,type:`integer`,required:!0},{name:`digest`,type:`text`,required:!0},{name:`data`,type:`json`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`getData`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-ingestion:IntakeItem`],exposed:!1},{id:`@happyvertical/smrt-ingestion:IntakeProposal`,name:`IntakeProposal`,collection:`intakeproposals`,description:`Durable IntakeProposal record; mutations belong to the server service.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`confidentialScopeId`,type:`text`,required:!0},{name:`itemId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeItem`},{name:`actionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeAction`},{name:`analysisId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeAnalysis`},{name:`analysisAttemptId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeAnalysisAttempt`},{name:`revision`,type:`integer`,required:!0},{name:`bindingHash`,type:`text`,required:!0},{name:`data`,type:`json`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`getData`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-ingestion:IntakeAction`,`@happyvertical/smrt-ingestion:IntakeAnalysis`,`@happyvertical/smrt-ingestion:IntakeAnalysisAttempt`,`@happyvertical/smrt-ingestion:IntakeItem`],exposed:!1},{id:`@happyvertical/smrt-ingestion:IntakeReviewDecision`,name:`IntakeReviewDecision`,collection:`intakereviewdecisions`,description:`Durable IntakeReviewDecision record; mutations belong to the server service.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`confidentialScopeId`,type:`text`,required:!0},{name:`itemId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeItem`},{name:`actionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeAction`},{name:`proposalId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-ingestion:IntakeProposal`},{name:`reviewVersion`,type:`integer`,required:!0},{name:`bindingHash`,type:`text`,required:!0},{name:`decision`,type:`text`,required:!0},{name:`data`,type:`json`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`getData`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-ingestion:IntakeAction`,`@happyvertical/smrt-ingestion:IntakeItem`,`@happyvertical/smrt-ingestion:IntakeProposal`],exposed:!1}],dependencies:[`assets`,`content`,`messages`,`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3615`,`#3617`,`#3624`,`#3625`,`#3626`,`#3627`],via:[`@happyvertical/smrt-agents`,`@happyvertical/smrt-jobs`,`@happyvertical/smrt-profiles`,`@happyvertical/smrt-reports`,`@happyvertical/smrt-secrets`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`]},recipes:[{id:`ingestion.inbox`,label:`Ingestion inbox`,summary:`Review incoming material and see which items need attention.`,synonyms:[`intake inbox`,`incoming documents`,`review queue`],models:[`@happyvertical/smrt-ingestion:IntakeItem`,`@happyvertical/smrt-ingestion:IntakeEvidence`],nav:[],requires:[],group:{id:`ingestion`,label:`Ingestion`,summary:`Review incoming material safely before it can change records.`},section:{id:`ingestion`,label:`Ingestion`,icon:`archive`,description:`Incoming material and its authenticated review workflow.`},help:{markdown:`## Overview
584
-
585
- The ingestion inbox is where an authenticated reviewer finds incoming material
586
- that needs attention. It keeps the original material and its related evidence
587
- together, so a reviewer can understand what arrived before choosing a next
588
- step.
589
-
590
- ## Tasks
591
-
592
- ### Check items that need attention
593
-
594
- 1. Open the ingestion inbox in an application that has configured an
595
- authenticated review host.
596
- 2. Choose an item to inspect its evidence and current review state.
597
- 3. Open the item in Ingestion review when it has a proposed action.
598
-
599
- ### Keep uncertain material for review
600
-
601
- 1. Leave material in the inbox when there is not enough information to decide.
602
- 2. Return after the application has new information or a reviewer can make a
603
- decision.
604
- 3. Do not treat an inbox item as permission to change another record.
605
-
606
- ## Preview status
607
-
608
- This recipe describes a preview workflow. The published evaluation did not meet
609
- quality gates and did not establish safety, so automation remains disabled. It
610
- does not configure a source, provider, generic record route, or automatic
611
- action. Applications continue to use the scoped callbacks described in the
612
- ingestion review documentation.
613
- `,fieldRefs:[]},surfaces:[{kind:`route`,path:`/ingestion/inbox`,export:`@happyvertical/smrt-ingestion/svelte#IntakeInbox`,label:`Ingestion inbox`}],runtime:`both`,demo:{mode:`server`,reasons:[`Needs a server because its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3617, #3624, #3625, #3626, #3627).`]}},{id:`ingestion.review`,label:`Ingestion review`,summary:`Inspect evidence and approve, change, reject, or defer proposed actions.`,synonyms:[`intake review`,`proposal review`,`human approval`],models:[`@happyvertical/smrt-ingestion:IntakeItem`,`@happyvertical/smrt-ingestion:IntakeEvidence`,`@happyvertical/smrt-ingestion:IntakeAnalysis`,`@happyvertical/smrt-ingestion:IntakeAction`,`@happyvertical/smrt-ingestion:IntakeReviewDecision`],nav:[],requires:[],group:{id:`ingestion`,label:`Ingestion`,summary:`Review incoming material safely before it can change records.`},section:{id:`ingestion`,label:`Ingestion`,icon:`archive`,description:`Incoming material and its authenticated review workflow.`},help:{markdown:`## Overview
614
-
615
- Ingestion review lets an authorized person inspect the evidence behind a
616
- proposed action before it can affect another record. A decision is tied to the
617
- specific material and proposal that the reviewer saw.
618
-
619
- ## Tasks
620
-
621
- ### Review a proposed action
622
-
623
- 1. Open an inbox item that has a proposed action.
624
- 2. Read the evidence and the proposed result in the authenticated review host.
625
- 3. Approve, change, reject, or defer the proposal according to the current
626
- application policy.
627
-
628
- ### Return to an item after it changes
629
-
630
- 1. Refresh the review when the host indicates that the material or proposal has
631
- changed.
632
- 2. Review the current proposal before making a decision.
633
- 3. Leave a proposal deferred when its evidence or destination is still
634
- uncertain.
635
-
636
- ## Preview status
637
-
638
- This recipe describes a preview workflow. The published evaluation did not meet
639
- quality gates and did not establish safety, so automation remains disabled. It
640
- does not create a generic editing surface or enable automatic execution. A host
641
- rechecks the reviewer, scope, and current proposal before it accepts a decision.
642
- `,fieldRefs:[]},surfaces:[{kind:`route`,path:`/ingestion/review`,export:`@happyvertical/smrt-ingestion/svelte#IntakeReview`,label:`Ingestion review`}],runtime:`both`,demo:{mode:`server`,reasons:[`Needs a server because its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-jobs, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3617, #3624, #3625, #3626, #3627).`]}}]},{id:`inventory`,packageName:`@happyvertical/smrt-inventory`,version:`0.57.9`,description:`Multi-location stock tracking for the SMRT framework — Sku, InventoryLocation, StockLevel, StockMovement, and a stock-mutation service`,models:[{id:`@happyvertical/smrt-inventory:InventoryLocation`,name:`InventoryLocation`,collection:`inventorylocations`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`code`,type:`text`,required:!0,default:``,description:`A short code for the place stock is kept, for example MAIN.`},{name:`name`,type:`text`,required:!1,default:``,description:`What you call the place, for example Main warehouse.`},{name:`kind`,type:`text`,required:!1,default:`warehouse`,description:`What sort of place it is, for example a warehouse or a shop floor.`},{name:`placeId`,type:`text`,required:!1,default:``},{name:`active`,type:`boolean`,required:!1,default:!0}],rest:[{method:`GET`,path:`/inventorylocations`},{method:`GET`,path:`/inventorylocations/[id]`},{method:`POST`,path:`/inventorylocations`},{method:`PATCH`,path:`/inventorylocations/[id]`}],mcp:[{operation:`get`,name:`inventorylocation_get`},{operation:`list`,name:`inventorylocation_list`}],cli:[{operation:`create`,name:`inventorylocation_create`},{operation:`delete`,name:`inventorylocation_delete`},{operation:`get`,name:`inventorylocation_get`},{operation:`list`,name:`inventorylocation_list`},{operation:`update`,name:`inventorylocation_update`},{operation:`findActive`,name:`inventorylocationcollection_findActive`},{operation:`findByCode`,name:`inventorylocationcollection_findByCode`},{operation:`findByKind`,name:`inventorylocationcollection_findByKind`},{operation:`findByPlace`,name:`inventorylocationcollection_findByPlace`}],methods:[{name:`findActive`,async:!0,parameters:[`kind?: InventoryLocationKind`],returnType:`Promise<InventoryLocation[]>`,aiCallable:!1},{name:`findByCode`,async:!0,parameters:[`code: string`],returnType:`Promise<InventoryLocation | null>`,aiCallable:!1},{name:`findByKind`,async:!0,parameters:[`kind: InventoryLocationKind`],returnType:`Promise<InventoryLocation[]>`,aiCallable:!1},{name:`findByPlace`,async:!0,parameters:[`placeId: string`],returnType:`Promise<InventoryLocation[]>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-inventory:StockLevel`,name:`StockLevel`,collection:`stocklevels`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`skuId`,type:`text`,required:!0,default:``,description:`The item being counted.`},{name:`locationId`,type:`text`,required:!0,default:``,description:`Where the stock is kept.`},{name:`state`,type:`text`,required:!0,default:`available`,enum:[`available`,`allocated`,`wip`,`qc_hold`,`damaged`],description:`The state of this stock: available, allocated, wip, qc_hold or damaged.`},{name:`qty`,type:`decimal`,required:!1,description:`How many are on hand.`},{name:`reorderPoint`,type:`decimal`,required:!1},{name:`reorderQuantity`,type:`decimal`,required:!1}],rest:[{method:`GET`,path:`/stocklevels`},{method:`GET`,path:`/stocklevels/[id]`}],mcp:[{operation:`get`,name:`stocklevel_get`},{operation:`list`,name:`stocklevel_list`}],cli:[{operation:`get`,name:`stocklevel_get`},{operation:`list`,name:`stocklevel_list`}],methods:[{name:`findBelowReorderPoint`,async:!0,parameters:[`locationId?: string`],returnType:`Promise<StockLevel[]>`,aiCallable:!1},{name:`findByLocation`,async:!0,parameters:[`locationId: string`],returnType:`Promise<StockLevel[]>`,aiCallable:!1},{name:`findBySku`,async:!0,parameters:[`skuId: string`],returnType:`Promise<StockLevel[]>`,aiCallable:!1},{name:`getLevel`,async:!0,parameters:[`skuId: string`,`locationId: string`,`state?: StockState`],returnType:`Promise<StockLevel | null>`,aiCallable:!1},{name:`totalForLocation`,async:!0,parameters:[`locationId: string`,`state?: StockState`],returnType:`Promise<number>`,aiCallable:!1},{name:`totalForSku`,async:!0,parameters:[`skuId: string`,`state?: StockState`],returnType:`Promise<number>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-inventory:StockMovement`,name:`StockMovement`,collection:`stockmovements`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`skuId`,type:`text`,required:!0,default:``,description:`The item that moved.`},{name:`locationId`,type:`text`,required:!0,default:``,description:`The place it moved at.`},{name:`fromState`,type:`text`,required:!1,enum:[`available`,`allocated`,`wip`,`qc_hold`,`damaged`],description:`What it was before, for example available or damaged.`},{name:`toState`,type:`text`,required:!1,enum:[`available`,`allocated`,`wip`,`qc_hold`,`damaged`],description:`What it became.`},{name:`qty`,type:`decimal`,required:!1,description:`How many moved.`},{name:`reasonCode`,type:`text`,required:!0,default:`adjustment`,description:`Why it moved, for example adjustment, sale or return.`},{name:`sourceType`,type:`text`,required:!1,default:``},{name:`sourceId`,type:`text`,required:!1,default:``},{name:`actorProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`note`,type:`text`,required:!1,default:``,description:`Anything worth remembering about this movement.`},{name:`occurredAt`,type:`datetime`,required:!1,description:`When it happened.`}],rest:[{method:`GET`,path:`/stockmovements`},{method:`GET`,path:`/stockmovements/[id]`}],mcp:[{operation:`get`,name:`stockmovement_get`},{operation:`list`,name:`stockmovement_list`}],cli:[{operation:`get`,name:`stockmovement_get`},{operation:`list`,name:`stockmovement_list`}],methods:[{name:`findByLocation`,async:!0,parameters:[`locationId: string`],returnType:`Promise<StockMovement[]>`,aiCallable:!1},{name:`findByReason`,async:!0,parameters:[`reasonCode: StockMovementReason`],returnType:`Promise<StockMovement[]>`,aiCallable:!1},{name:`findBySku`,async:!0,parameters:[`skuId: string`],returnType:`Promise<StockMovement[]>`,aiCallable:!1},{name:`findBySource`,async:!0,parameters:[`sourceType: string`,`sourceId: string`],returnType:`Promise<StockMovement[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!0}],dependencies:[`profiles`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`],via:[`@happyvertical/smrt-tenancy`]},recipes:[{id:`inventory.stock`,label:`Inventory`,summary:`Keep count of how many of each product you have.`,synonyms:[`stock`,`quantity`,`on hand`],models:[`@happyvertical/smrt-inventory:StockLevel`,`@happyvertical/smrt-inventory:InventoryLocation`,`@happyvertical/smrt-inventory:StockMovement`],nav:[{label:`Stock levels`,model:`@happyvertical/smrt-inventory:StockLevel`,icon:`archive`,description:`How much of each item you have on hand right now.`,noun:`stock entry`},{label:`Locations`,model:`@happyvertical/smrt-inventory:InventoryLocation`,icon:`home`,description:`The places you keep stock, like shelves, rooms or vans.`},{label:`Stock movements`,model:`@happyvertical/smrt-inventory:StockMovement`,icon:`truck`,description:`Every time stock came in, went out or moved.`}],requires:[],requiresAny:[[`products.simple`,`products.clothing`]],section:{id:`catalog`,label:`Catalog`,icon:`package`,description:`Products, ingredients and the stock you hold.`},options:{"@happyvertical/smrt-inventory:StockLevel":{fields:{reorderPoint:{visibility:`hidden`},reorderQuantity:{visibility:`hidden`}}},"@happyvertical/smrt-inventory:InventoryLocation":{fields:{placeId:{visibility:`hidden`},active:{visibility:`hidden`}}},"@happyvertical/smrt-inventory:StockMovement":{fields:{sourceType:{visibility:`hidden`},sourceId:{visibility:`hidden`},actorProfileId:{visibility:`hidden`}}}},help:{markdown:`## Overview
643
-
644
- Inventory keeps count of how many of each product you have. Each count is a
645
- stock level: an item, the place it is kept and how many are on hand. Stock can
646
- sit in more than one place, and every change is recorded as a stock movement so
647
- there is a trail.
648
-
649
- ## Tasks
650
-
651
- ### Count what you have
652
-
653
- 1. Create a stock level for the item and the place it is kept.
654
- 2. Set **{field:qty}** to how many you have on hand.
655
- 3. Set **{field:state}** if the stock is not available to sell, for example
656
- allocated or on quality hold.
657
-
658
- ### Correct a count
659
-
660
- 1. Find the stock level for the item.
661
- 2. Set **{field:qty}** to what you really have. Record why as a stock movement.
662
-
663
- ### Keep stock in more than one place
664
-
665
- 1. Add a location with a **{field:code}** and a **{field:name}**, and say what
666
- sort it is in **{field:kind}**.
667
- 2. Create stock levels against that location.
668
- `,fieldRefs:[`code`,`kind`,`name`,`qty`,`state`]},demo:{mode:`server`,reasons:[`Needs a server because its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624).`]},effectiveDemo:{mode:`server`,reasons:[`Needs a server because its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624).`,`Needs products.simple, which is server.`]}}]},{id:`ledgers`,packageName:`@happyvertical/smrt-ledgers`,version:`0.57.9`,description:`Double-entry accounting ledger for the SMRT framework`,models:[{id:`@happyvertical/smrt-ledgers:Account`,name:`Account`,collection:`accounts`,display:{label:`name`},fields:[{name:`parentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-ledgers:Account`},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`number`,type:`text`,required:!1,default:``,description:`The account number in your chart of accounts.`},{name:`name`,type:`text`,required:!1,default:``,description:`What the account is called.`},{name:`description`,type:`text`,required:!1,default:``,description:`What the account is used for.`},{name:`type`,type:`text`,required:!1,default:`asset`,enum:[`asset`,`liability`,`equity`,`revenue`,`expense`],description:`asset, liability, equity, revenue or expense.`},{name:`ledgerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-ledgers:Ledger`,description:`The ledger policy this account belongs to.`},{name:`active`,type:`boolean`,required:!1,default:!0,description:`Whether the account is in use; deactivate it instead of deleting it.`},{name:`metadata`,type:`json`,required:!1}],rest:[{method:`GET`,path:`/accounts`},{method:`GET`,path:`/accounts/[id]`},{method:`POST`,path:`/accounts`},{method:`PATCH`,path:`/accounts/[id]`},{method:`DELETE`,path:`/accounts/[id]`}],mcp:[{operation:`create`,name:`account_create`},{operation:`get`,name:`account_get`},{operation:`list`,name:`account_list`}],cli:[{operation:`create`,name:`account_create`},{operation:`createChild`,name:`account_createChild`},{operation:`delete`,name:`account_delete`},{operation:`get`,name:`account_get`},{operation:`getAncestors`,name:`account_getAncestors`},{operation:`getBalance`,name:`account_getBalance`},{operation:`getChildren`,name:`account_getChildren`},{operation:`getDescendants`,name:`account_getDescendants`},{operation:`getFullPath`,name:`account_getFullPath`},{operation:`getHierarchy`,name:`account_getHierarchy`},{operation:`getParent`,name:`account_getParent`},{operation:`isCreditNormal`,name:`account_isCreditNormal`},{operation:`isDebitNormal`,name:`account_isDebitNormal`},{operation:`isTopLevel`,name:`account_isTopLevel`},{operation:`list`,name:`account_list`},{operation:`moveTo`,name:`account_moveTo`},{operation:`toTreeNode`,name:`account_toTreeNode`},{operation:`update`,name:`account_update`},{operation:`findActive`,name:`accountcollection_findActive`},{operation:`findByNumber`,name:`accountcollection_findByNumber`},{operation:`findByTenant`,name:`accountcollection_findByTenant`},{operation:`findByType`,name:`accountcollection_findByType`},{operation:`findChildren`,name:`accountcollection_findChildren`},{operation:`findGlobal`,name:`accountcollection_findGlobal`},{operation:`findTopLevel`,name:`accountcollection_findTopLevel`},{operation:`findWithGlobals`,name:`accountcollection_findWithGlobals`},{operation:`getDescendants`,name:`accountcollection_getDescendants`},{operation:`getOrCreateByNumber`,name:`accountcollection_getOrCreateByNumber`},{operation:`getTree`,name:`accountcollection_getTree`},{operation:`groupByType`,name:`accountcollection_groupByType`}],methods:[{name:`createChild`,async:!0,parameters:[`options: Omit<AccountOptions, 'parentId' | 'type'>`],returnType:`Promise<Account>`,aiCallable:!1},{name:`delete`,async:!0,parameters:[`options?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`findActive`,async:!0,parameters:[],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`findByNumber`,async:!0,parameters:[`number: string`],returnType:`Promise<Account | null>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`findByType`,async:!0,parameters:[`type: AccountType`],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`findChildren`,async:!0,parameters:[`parentId: string`],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`findTopLevel`,async:!0,parameters:[],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`getAncestors`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getBalance`,async:!0,parameters:[`asOfDate?: Date`],returnType:`Promise<number>`,aiCallable:!1},{name:`getChildren`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getDescendants`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getFullPath`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`getHierarchy`,async:!0,parameters:[],returnType:`Promise<HierarchyView<this>>`,aiCallable:!1},{name:`getOrCreateByNumber`,async:!0,parameters:[`number: string`,`defaults?: Partial<object>`],returnType:`Promise<Account>`,aiCallable:!1},{name:`getParent`,async:!0,parameters:[],returnType:`Promise<this | null>`,aiCallable:!1},{name:`getTree`,async:!0,parameters:[],returnType:`Promise<AccountTree>`,aiCallable:!1},{name:`groupByType`,async:!0,parameters:[],returnType:`Promise<Record<AccountType, Account[]>>`,aiCallable:!1},{name:`isCreditNormal`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDebitNormal`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isTopLevel`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`moveTo`,async:!0,parameters:[`newParent: this | string | null`],returnType:`Promise<void>`,aiCallable:!1},{name:`toTreeNode`,async:!0,parameters:[],returnType:`Promise<AccountTreeNode>`,aiCallable:!1}],references:[`@happyvertical/smrt-ledgers:Account`,`@happyvertical/smrt-ledgers:Ledger`],exposed:!0},{id:`@happyvertical/smrt-ledgers:Journal`,name:`Journal`,collection:`journals`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`number`,type:`text`,required:!1,default:``,description:`The journal's reference number.`},{name:`date`,type:`datetime`,required:!1,description:`The date of the transaction.`},{name:`description`,type:`text`,required:!1,default:``,description:`What the transaction was.`},{name:`sourceModule`,type:`text`,required:!1,default:``},{name:`sourceRef`,type:`text`,required:!1},{name:`ledgerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-ledgers:Ledger`,description:`The ledger policy that governs this journal.`},{name:`idempotencyKey`,type:`text`,required:!1},{name:`requestDigest`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`draft`,`posted`,`voided`],description:`draft until final, then posted, or voided.`},{name:`postedAt`,type:`datetime`,required:!1,description:`When it was posted.`},{name:`voidedAt`,type:`datetime`,required:!1},{name:`voidReason`,type:`text`,required:!1},{name:`metadata`,type:`json`,required:!1}],rest:[{method:`GET`,path:`/journals`},{method:`GET`,path:`/journals/[id]`},{method:`POST`,path:`/journals`}],mcp:[{operation:`create`,name:`journal_create`},{operation:`get`,name:`journal_get`},{operation:`list`,name:`journal_list`}],cli:[{operation:`addEntry`,name:`journal_addEntry`},{operation:`create`,name:`journal_create`},{operation:`delete`,name:`journal_delete`},{operation:`get`,name:`journal_get`},{operation:`getEntries`,name:`journal_getEntries`},{operation:`getLedger`,name:`journal_getLedger`},{operation:`getTotalCredits`,name:`journal_getTotalCredits`},{operation:`getTotalDebits`,name:`journal_getTotalDebits`},{operation:`isBalanced`,name:`journal_isBalanced`},{operation:`isDraft`,name:`journal_isDraft`},{operation:`isEditable`,name:`journal_isEditable`},{operation:`isPosted`,name:`journal_isPosted`},{operation:`isVoided`,name:`journal_isVoided`},{operation:`list`,name:`journal_list`},{operation:`post`,name:`journal_post`},{operation:`summarize`,name:`journal_summarize`},{operation:`update`,name:`journal_update`},{operation:`void`,name:`journal_void`},{operation:`createWithEntries`,name:`journalcollection_createWithEntries`},{operation:`findByDateRange`,name:`journalcollection_findByDateRange`},{operation:`findByMonth`,name:`journalcollection_findByMonth`},{operation:`findByNumber`,name:`journalcollection_findByNumber`},{operation:`findBySource`,name:`journalcollection_findBySource`},{operation:`findBySourceRef`,name:`journalcollection_findBySourceRef`},{operation:`findByStatus`,name:`journalcollection_findByStatus`},{operation:`findByTenant`,name:`journalcollection_findByTenant`},{operation:`findDrafts`,name:`journalcollection_findDrafts`},{operation:`findGlobal`,name:`journalcollection_findGlobal`},{operation:`findPosted`,name:`journalcollection_findPosted`},{operation:`findWithGlobals`,name:`journalcollection_findWithGlobals`},{operation:`post`,name:`journalcollection_post`},{operation:`void`,name:`journalcollection_void`}],methods:[{name:`addEntry`,async:!0,parameters:[`data: JournalEntryData`],returnType:`Promise<void>`,aiCallable:!1},{name:`createWithEntries`,async:!0,parameters:[`data: CreateJournalData`],returnType:`Promise<Journal>`,aiCallable:!1},{name:`delete`,async:!0,parameters:[`options?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByDateRange`,async:!0,parameters:[`start: Date`,`end: Date`],returnType:`Promise<Journal[]>`,aiCallable:!1},{name:`findByMonth`,async:!0,parameters:[`year: number`,`month: number`],returnType:`Promise<Journal[]>`,aiCallable:!1},{name:`findByNumber`,async:!0,parameters:[`number: string`],returnType:`Promise<Journal | null>`,aiCallable:!1},{name:`findBySource`,async:!0,parameters:[`sourceModule: string`],returnType:`Promise<Journal[]>`,aiCallable:!1},{name:`findBySourceRef`,async:!0,parameters:[`sourceRef: string`],returnType:`Promise<Journal[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: JournalStatus`],returnType:`Promise<Journal[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Journal[]>`,aiCallable:!1},{name:`findDrafts`,async:!0,parameters:[],returnType:`Promise<Journal[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Journal[]>`,aiCallable:!1},{name:`findPosted`,async:!0,parameters:[],returnType:`Promise<Journal[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Journal[]>`,aiCallable:!1},{name:`getEntries`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getLedger`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getTotalCredits`,async:!0,parameters:[],returnType:`Promise<number>`,aiCallable:!1},{name:`getTotalDebits`,async:!0,parameters:[],returnType:`Promise<number>`,aiCallable:!1},{name:`isBalanced`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isEditable`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPosted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isVoided`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`post`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: any`],returnType:`Promise<this>`,aiCallable:!1},{name:`summarize`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`void`,async:!0,parameters:[`reason: string`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-ledgers:Ledger`],exposed:!0},{id:`@happyvertical/smrt-ledgers:JournalEntry`,name:`JournalEntry`,collection:`journalentries`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`journalId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-ledgers:Journal`,description:`The journal this entry belongs to.`},{name:`accountId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-ledgers:Account`,description:`The account this entry changes.`},{name:`counterpartyKind`,type:`text`,required:!1,description:`Generic counterparty type.`},{name:`counterpartyId`,type:`text`,required:!1,description:`Generic counterparty identifier.`},{name:`dueDate`,type:`datetime`,required:!1,description:`When this open receivable or payable is due.`},{name:`settlesSourceRef`,type:`text`,required:!1},{name:`debit`,type:`decimal`,required:!1,default:0,description:`The amount debited. Zero on a credit entry.`},{name:`credit`,type:`decimal`,required:!1,default:0,description:`The amount credited. Zero on a debit entry.`},{name:`currency`,type:`text`,required:!1,default:`USD`,description:`The currency of the amounts.`},{name:`exchangeRate`,type:`decimal`,required:!1,default:1},{name:`memo`,type:`text`,required:!1,default:``,description:`A note on this entry.`},{name:`metadata`,type:`json`,required:!1}],rest:[{method:`GET`,path:`/journalentries`},{method:`GET`,path:`/journalentries/[id]`}],mcp:[{operation:`get`,name:`journalentry_get`},{operation:`list`,name:`journalentry_list`}],cli:[{operation:`create`,name:`journalentry_create`},{operation:`delete`,name:`journalentry_delete`},{operation:`get`,name:`journalentry_get`},{operation:`getAccount`,name:`journalentry_getAccount`},{operation:`getAmount`,name:`journalentry_getAmount`},{operation:`getBaseAmount`,name:`journalentry_getBaseAmount`},{operation:`getDescription`,name:`journalentry_getDescription`},{operation:`getJournal`,name:`journalentry_getJournal`},{operation:`isCredit`,name:`journalentry_isCredit`},{operation:`isDebit`,name:`journalentry_isDebit`},{operation:`list`,name:`journalentry_list`},{operation:`update`,name:`journalentry_update`},{operation:`findByAccount`,name:`journalentrycollection_findByAccount`},{operation:`findByAccounts`,name:`journalentrycollection_findByAccounts`},{operation:`findByJournal`,name:`journalentrycollection_findByJournal`},{operation:`findByTenant`,name:`journalentrycollection_findByTenant`},{operation:`findGlobal`,name:`journalentrycollection_findGlobal`},{operation:`findWithGlobals`,name:`journalentrycollection_findWithGlobals`},{operation:`getAccountBalance`,name:`journalentrycollection_getAccountBalance`},{operation:`getAccountLedger`,name:`journalentrycollection_getAccountLedger`},{operation:`getCounterpartyAging`,name:`journalentrycollection_getCounterpartyAging`},{operation:`getCounterpartyBalances`,name:`journalentrycollection_getCounterpartyBalances`},{operation:`getTotalsForDateRange`,name:`journalentrycollection_getTotalsForDateRange`},{operation:`getTrialBalance`,name:`journalentrycollection_getTrialBalance`},{operation:`listPostedMovements`,name:`journalentrycollection_listPostedMovements`}],methods:[{name:`delete`,async:!0,parameters:[`options?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByAccount`,async:!0,parameters:[`accountId: string`],returnType:`Promise<JournalEntry[]>`,aiCallable:!1},{name:`findByAccounts`,async:!0,parameters:[`accountIds: string[]`],returnType:`Promise<JournalEntry[]>`,aiCallable:!1},{name:`findByJournal`,async:!0,parameters:[`journalId: string`],returnType:`Promise<JournalEntry[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<JournalEntry[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<JournalEntry[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<JournalEntry[]>`,aiCallable:!1},{name:`getAccount`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getAccountBalance`,async:!0,parameters:[`accountId: string`,`asOfDate?: Date`],returnType:`Promise<number>`,aiCallable:!1},{name:`getAccountLedger`,async:!0,parameters:[`accountId: string`],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getAmount`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`getBaseAmount`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`getCounterpartyAging`,async:!0,parameters:[`options: PostedJournalMovementOptions`,`asOf: Date`],returnType:`Promise<CounterpartyAgingRow[]>`,aiCallable:!1},{name:`getCounterpartyBalances`,async:!0,parameters:[`options: PostedJournalMovementOptions`],returnType:`Promise<CounterpartyBalance[]>`,aiCallable:!1},{name:`getDescription`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`getJournal`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getTotalsForDateRange`,async:!0,parameters:[`start: Date`,`end: Date`],returnType:`Promise<object>`,aiCallable:!1},{name:`getTrialBalance`,async:!0,parameters:[`asOfDate?: Date`],returnType:`Promise<TrialBalanceRow[]>`,aiCallable:!1},{name:`isCredit`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDebit`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`listPostedMovements`,async:!0,parameters:[`options: PostedJournalMovementOptions`],returnType:`Promise<PostedJournalMovement[]>`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: any`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-ledgers:Account`,`@happyvertical/smrt-ledgers:Journal`],exposed:!0},{id:`@happyvertical/smrt-ledgers:Ledger`,name:`Ledger`,collection:`ledgers`,description:`A named accounting scope. Exact ledgers store one currency's minor units and reject fractional entries; legacy journals without a ledger retain the tolerant balance rule for backwards compatibility.`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,description:`The accounting scope name.`},{name:`currency`,type:`text`,required:!1,description:`ISO 4217 currency used by this ledger.`},{name:`balanceMode`,type:`text`,required:!1,default:`tolerant`,enum:[`tolerant`,`exact-integer`],description:`tolerant accepts decimal units; exact requires integer minor units.`}],rest:[{method:`GET`,path:`/ledgers`},{method:`GET`,path:`/ledgers/[id]`},{method:`POST`,path:`/ledgers`},{method:`PATCH`,path:`/ledgers/[id]`}],mcp:[{operation:`create`,name:`ledger_create`},{operation:`get`,name:`ledger_get`},{operation:`list`,name:`ledger_list`}],cli:[{operation:`create`,name:`ledger_create`},{operation:`delete`,name:`ledger_delete`},{operation:`get`,name:`ledger_get`},{operation:`list`,name:`ledger_list`},{operation:`update`,name:`ledger_update`}],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1}],references:[],exposed:!0}],dependencies:[],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`,`#3626`],reason:`core migrations (node:os, node:crypto)`,via:[`@happyvertical/smrt-tenancy`]},recipes:[{id:`ledgers.bookkeeping`,label:`Bookkeeping`,summary:`Keep your books: a chart of accounts and double-entry journals.`,synonyms:[`accounting`,`ledger`,`general ledger`,`journals`,`chart of accounts`],models:[`@happyvertical/smrt-ledgers:Account`,`@happyvertical/smrt-ledgers:Journal`,`@happyvertical/smrt-ledgers:JournalEntry`],nav:[{label:`Accounts`,model:`@happyvertical/smrt-ledgers:Account`,icon:`bank`,description:`The accounts your books are kept in, like sales, rent and bank.`},{label:`Journals`,model:`@happyvertical/smrt-ledgers:Journal`,icon:`book`,description:`The entries behind your accounts, so every dollar has a trail.`}],requires:[],section:{id:`accounting`,label:`Accounting`,icon:`bank`,description:`Your books: accounts, journals and balances.`},options:{"@happyvertical/smrt-ledgers:Account":{fields:{metadata:{visibility:`hidden`},parentId:{visibility:`hidden`}}},"@happyvertical/smrt-ledgers:Journal":{fields:{sourceModule:{visibility:`hidden`},sourceRef:{visibility:`hidden`},idempotencyKey:{visibility:`hidden`},requestDigest:{visibility:`hidden`},voidedAt:{visibility:`hidden`},voidReason:{visibility:`hidden`},metadata:{visibility:`hidden`}}},"@happyvertical/smrt-ledgers:JournalEntry":{fields:{exchangeRate:{visibility:`hidden`},settlesSourceRef:{visibility:`hidden`},metadata:{visibility:`hidden`}}}},help:{markdown:`## Overview
669
-
670
- Bookkeeping keeps your accounts. You list the accounts you use (your chart of
671
- accounts) and record each transaction as a journal whose entries debit and
672
- credit those accounts.
673
-
674
- ## Tasks
675
-
676
- ### Set up your accounts
677
-
678
- 1. Create a new account.
679
- 2. Give it a **{field:number}** and a **{field:name}**.
680
- 3. Choose its **{field:type}**: asset, liability, equity, revenue or expense.
681
-
682
- ### Record a transaction
683
-
684
- 1. Create a new journal and add a **{field:description}**.
685
- 2. Add entries: pick the account on each and enter a **{field:debit}** or a
686
- **{field:credit}**. They must add up to the same total.
687
- 3. Set the journal's **{field:status}** to posted when it is final. A posted
688
- journal is voided, not edited.
689
- `,fieldRefs:[`credit`,`debit`,`description`,`name`,`number`,`status`,`type`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: core migrations (node:os, node:crypto); and its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624, #3626).`]}}]},{id:`manufacturing`,packageName:`@happyvertical/smrt-manufacturing`,version:`0.57.9`,description:`Bills of materials, cost rollup, and production-order operations for the SMRT framework — strictly industry-neutral`,models:[{id:`@happyvertical/smrt-manufacturing:Assembly`,name:`Assembly`,collection:`products`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`productType`,type:`json`,required:!1},{name:`name`,type:`text`,required:!1,description:`The product name, as customers see it.`},{name:`description`,type:`text`,required:!1,description:`A few words on what the product is and who it is for.`},{name:`category`,type:`text`,required:!1},{name:`manufacturer`,type:`text`,required:!1},{name:`model`,type:`text`,required:!1},{name:`price`,type:`integer`,required:!0,default:0,description:`The price in minor units (cents), for example 1999 for 19.99.`},{name:`defaultSalesTaxCodeId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-commerce:TaxCode`,description:`The tax code normally used when this product is sold.`},{name:`defaultPurchaseTaxCodeId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-commerce:TaxCode`,description:`The tax code normally used when this product is purchased.`},{name:`inStock`,type:`boolean`,required:!0,default:!0},{name:`specifications`,type:`json`,required:!1},{name:`tags`,type:`json`,required:!1},{name:`estimatedLabourMinutes`,type:`integer`,required:!1,default:0},{name:`defaultOperationId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-manufacturing:Operation`},{name:`partReference`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/products`},{method:`GET`,path:`/products/[id]`},{method:`POST`,path:`/products`},{method:`PATCH`,path:`/products/[id]`}],mcp:[{operation:`get`,name:`assembly_get`},{operation:`list`,name:`assembly_list`}],cli:[{operation:`addAsset`,name:`assembly_addAsset`},{operation:`create`,name:`assembly_create`},{operation:`delete`,name:`assembly_delete`},{operation:`get`,name:`assembly_get`},{operation:`getAssets`,name:`assembly_getAssets`},{operation:`getSpecification`,name:`assembly_getSpecification`},{operation:`list`,name:`assembly_list`},{operation:`removeAsset`,name:`assembly_removeAsset`},{operation:`update`,name:`assembly_update`},{operation:`updateSpecification`,name:`assembly_updateSpecification`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getSpecification`,async:!0,parameters:[`key: string`],returnType:`Promise<unknown>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`updateSpecification`,async:!0,parameters:[`key: string`,`value: unknown`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:TaxCode`,`@happyvertical/smrt-manufacturing:Operation`],exposed:!0},{id:`@happyvertical/smrt-manufacturing:BillOfMaterials`,name:`BillOfMaterials`,collection:`billofmaterialses`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`productId`,type:`text`,required:!0,default:``},{name:`version`,type:`integer`,required:!0,default:1},{name:`effectiveDate`,type:`datetime`,required:!1},{name:`status`,type:`text`,required:!0,default:`draft`,enum:[`draft`,`active`,`superseded`]},{name:`notes`,type:`text`,required:!1,default:``},{name:`currency`,type:`text`,required:!1,default:`USD`}],rest:[{method:`GET`,path:`/billofmaterialses`},{method:`GET`,path:`/billofmaterialses/[id]`},{method:`POST`,path:`/billofmaterialses`},{method:`PATCH`,path:`/billofmaterialses/[id]`}],mcp:[{operation:`get`,name:`billofmaterials_get`},{operation:`list`,name:`billofmaterials_list`}],cli:[{operation:`create`,name:`billofmaterials_create`},{operation:`delete`,name:`billofmaterials_delete`},{operation:`get`,name:`billofmaterials_get`},{operation:`list`,name:`billofmaterials_list`},{operation:`update`,name:`billofmaterials_update`},{operation:`findActiveForProduct`,name:`billofmaterialscollection_findActiveForProduct`},{operation:`findByProduct`,name:`billofmaterialscollection_findByProduct`},{operation:`findByStatus`,name:`billofmaterialscollection_findByStatus`}],methods:[{name:`findActiveForProduct`,async:!0,parameters:[`productId: string`],returnType:`Promise<BillOfMaterials | null>`,aiCallable:!1},{name:`findByProduct`,async:!0,parameters:[`productId: string`],returnType:`Promise<BillOfMaterials[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: BomStatus`],returnType:`Promise<BillOfMaterials[]>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-manufacturing:BomLine`,name:`BomLine`,collection:`bomlines`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`bomId`,type:`text`,required:!0,default:``},{name:`componentSkuId`,type:`text`,required:!0,default:``},{name:`qtyPerUnit`,type:`decimal`,required:!1},{name:`uom`,type:`text`,required:!1,default:`each`},{name:`wastePercent`,type:`decimal`,required:!1},{name:`notes`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/bomlines`},{method:`GET`,path:`/bomlines/[id]`},{method:`POST`,path:`/bomlines`},{method:`PATCH`,path:`/bomlines/[id]`}],mcp:[{operation:`get`,name:`bomline_get`},{operation:`list`,name:`bomline_list`}],cli:[{operation:`create`,name:`bomline_create`},{operation:`delete`,name:`bomline_delete`},{operation:`effectiveQtyPerUnit`,name:`bomline_effectiveQtyPerUnit`},{operation:`get`,name:`bomline_get`},{operation:`list`,name:`bomline_list`},{operation:`update`,name:`bomline_update`},{operation:`findByBom`,name:`bomlinecollection_findByBom`},{operation:`findByComponent`,name:`bomlinecollection_findByComponent`}],methods:[{name:`effectiveQtyPerUnit`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`findByBom`,async:!0,parameters:[`bomId: string`],returnType:`Promise<BomLine[]>`,aiCallable:!1},{name:`findByComponent`,async:!0,parameters:[`componentSkuId: string`],returnType:`Promise<BomLine[]>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-manufacturing:Operation`,name:`Operation`,collection:`operations`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`code`,type:`text`,required:!0,default:``},{name:`name`,type:`text`,required:!0,default:``},{name:`category`,type:`text`,required:!1,default:``},{name:`isActive`,type:`boolean`,required:!1,default:!0},{name:`requiredQualificationId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-human-resources:Qualification`}],rest:[{method:`GET`,path:`/operations`},{method:`GET`,path:`/operations/[id]`}],mcp:[{operation:`get`,name:`operation_get`},{operation:`list`,name:`operation_list`}],cli:[{operation:`get`,name:`operation_get`},{operation:`list`,name:`operation_list`}],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`findByCode`,async:!0,parameters:[`code: string`],returnType:`Promise<Operation | null>`,aiCallable:!1},{name:`listOperations`,async:!0,parameters:[`options?: object`],returnType:`Promise<Operation[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-human-resources:Qualification`],exposed:!0},{id:`@happyvertical/smrt-manufacturing:ProductionRun`,name:`ProductionRun`,collection:`productionruns`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`bomId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-manufacturing:BillOfMaterials`},{name:`targetQty`,type:`decimal`,required:!1},{name:`completedQty`,type:`decimal`,required:!1},{name:`status`,type:`text`,required:!0,default:`planned`,enum:[`planned`,`in_progress`,`done`,`cancelled`]}],rest:[{method:`GET`,path:`/productionruns`},{method:`GET`,path:`/productionruns/[id]`}],mcp:[{operation:`get`,name:`productionrun_get`},{operation:`list`,name:`productionrun_list`}],cli:[{operation:`get`,name:`productionrun_get`},{operation:`list`,name:`productionrun_list`}],methods:[{name:`findByBom`,async:!0,parameters:[`bomId: string`],returnType:`Promise<ProductionRun[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: ProductionRunStatus`],returnType:`Promise<ProductionRun[]>`,aiCallable:!1},{name:`remainingQty`,async:!1,parameters:[],returnType:`number`,aiCallable:!1}],references:[`@happyvertical/smrt-manufacturing:BillOfMaterials`],exposed:!0},{id:`@happyvertical/smrt-manufacturing:ProductionRunCompletion`,name:`ProductionRunCompletion`,collection:`productionruncompletions`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`runId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-manufacturing:ProductionRun`},{name:`qty`,type:`decimal`,required:!1},{name:`completedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/productionruncompletions`},{method:`GET`,path:`/productionruncompletions/[id]`}],mcp:[{operation:`get`,name:`productionruncompletion_get`},{operation:`list`,name:`productionruncompletion_list`}],cli:[{operation:`get`,name:`productionruncompletion_get`},{operation:`list`,name:`productionruncompletion_list`}],methods:[{name:`findByRun`,async:!0,parameters:[`runId: string`],returnType:`Promise<ProductionRunCompletion[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-manufacturing:ProductionRun`],exposed:!0},{id:`@happyvertical/smrt-manufacturing:RoutingStep`,name:`RoutingStep`,collection:`routingsteps`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`bomId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-manufacturing:BillOfMaterials`},{name:`operationId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-manufacturing:Operation`},{name:`sequence`,type:`integer`,required:!0,default:1},{name:`estimatedMinutes`,type:`decimal`,required:!1},{name:`notes`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/routingsteps`},{method:`GET`,path:`/routingsteps/[id]`}],mcp:[{operation:`get`,name:`routingstep_get`},{operation:`list`,name:`routingstep_list`}],cli:[{operation:`create`,name:`routingstep_create`},{operation:`delete`,name:`routingstep_delete`},{operation:`get`,name:`routingstep_get`},{operation:`list`,name:`routingstep_list`},{operation:`update`,name:`routingstep_update`},{operation:`findByBom`,name:`routingstepcollection_findByBom`},{operation:`findByOperation`,name:`routingstepcollection_findByOperation`}],methods:[{name:`findByBom`,async:!0,parameters:[`bomId: string`],returnType:`Promise<RoutingStep[]>`,aiCallable:!1},{name:`findByOperation`,async:!0,parameters:[`operationId: string`],returnType:`Promise<RoutingStep[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-manufacturing:BillOfMaterials`,`@happyvertical/smrt-manufacturing:Operation`],exposed:!0}],dependencies:[`commerce`,`human-resources`,`inventory`,`products`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3616`,`#3624`,`#3626`],via:[`@happyvertical/smrt-products`,`@happyvertical/smrt-tenancy`]}},{id:`marketing`,packageName:`@happyvertical/smrt-marketing`,version:`0.57.9`,description:`Cross-channel campaign coordination, immutable performance evidence, budget pacing, and reusable Svelte marketing surfaces for SMRT`,models:[{id:`@happyvertical/smrt-marketing:Campaign`,name:`Campaign`,collection:`campaigns`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`customerId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-commerce:Customer`},{name:`campaignKey`,type:`text`,required:!0,default:``},{name:`name`,type:`text`,required:!0,default:``},{name:`objective`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,default:`draft`},{name:`startAt`,type:`datetime`,required:!1},{name:`endAt`,type:`datetime`,required:!1},{name:`budgetCents`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/campaigns`},{method:`GET`,path:`/campaigns/[id]`},{method:`POST`,path:`/campaigns`},{method:`PATCH`,path:`/campaigns/[id]`}],mcp:[{operation:`create`,name:`campaign_create`},{operation:`get`,name:`campaign_get`},{operation:`list`,name:`campaign_list`},{operation:`update`,name:`campaign_update`}],cli:[{operation:`create`,name:`campaign_create`},{operation:`get`,name:`campaign_get`},{operation:`list`,name:`campaign_list`},{operation:`update`,name:`campaign_update`}],methods:[{name:`findByCampaignKey`,async:!0,parameters:[`campaignKey: string`,`tenantId?: string | null`],returnType:`Promise<Campaign | null>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: CampaignStatus`],returnType:`Promise<Campaign[]>`,aiCallable:!1},{name:`get`,async:!0,parameters:[`filter: string | SmrtWhereClause<Campaign>`,`options?: object`],returnType:`Promise<Campaign | null>`,aiCallable:!0},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`list`,async:!0,parameters:[`options?: SmrtListOptions<Campaign>`],returnType:`Promise<Campaign[] | Record<string, unknown>[]>`,aiCallable:!0},{name:`listByCustomer`,async:!0,parameters:[`tenantId: string | null`,`customerId: string`,`options?: ListCampaignsByCustomerOptions`],returnType:`Promise<CampaignCustomerPage>`,aiCallable:!1},{name:`listReportingByCustomer`,async:!0,parameters:[`tenantId: string | null`,`customerId: string`,`options?: ListCampaignReportingByCustomerOptions`],returnType:`Promise<CampaignReportingPage>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`summarizeByCustomers`,async:!0,parameters:[`tenantId: string | null`,`customerIds: string[]`],returnType:`Promise<CampaignCustomerSummary[]>`,aiCallable:!1},{name:`transitionTo`,async:!1,parameters:[`next: CampaignStatus`],returnType:`this`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Customer`],exposed:!0},{id:`@happyvertical/smrt-marketing:CampaignChannel`,name:`CampaignChannel`,collection:`campaignchannels`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`campaignId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-marketing:Campaign`},{name:`channelKind`,type:`text`,required:!0,default:``},{name:`channelRef`,type:`text`,required:!0,default:``},{name:`allocatedBudgetCents`,type:`integer`,required:!1,default:0},{name:`startAt`,type:`datetime`,required:!1},{name:`endAt`,type:`datetime`,required:!1},{name:`status`,type:`text`,required:!1,default:`planned`}],rest:[{method:`GET`,path:`/campaignchannels`},{method:`GET`,path:`/campaignchannels/[id]`},{method:`POST`,path:`/campaignchannels`},{method:`PATCH`,path:`/campaignchannels/[id]`},{method:`DELETE`,path:`/campaignchannels/[id]`}],mcp:[{operation:`create`,name:`campaignchannel_create`},{operation:`get`,name:`campaignchannel_get`},{operation:`list`,name:`campaignchannel_list`},{operation:`update`,name:`campaignchannel_update`}],cli:[{operation:`create`,name:`campaignchannel_create`},{operation:`delete`,name:`campaignchannel_delete`},{operation:`get`,name:`campaignchannel_get`},{operation:`list`,name:`campaignchannel_list`},{operation:`update`,name:`campaignchannel_update`}],methods:[{name:`findByCampaign`,async:!0,parameters:[`campaignId: string`],returnType:`Promise<CampaignChannel[]>`,aiCallable:!1},{name:`findByExecutionRef`,async:!0,parameters:[`channelKind: string`,`channelRef: string`],returnType:`Promise<CampaignChannel[]>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-marketing:Campaign`],exposed:!0},{id:`@happyvertical/smrt-marketing:CampaignMetricSnapshot`,name:`CampaignMetricSnapshot`,collection:`campaignmetricsnapshots`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`campaignId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-marketing:Campaign`},{name:`campaignChannelId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-marketing:CampaignChannel`},{name:`periodStart`,type:`datetime`,required:!0},{name:`periodEnd`,type:`datetime`,required:!0},{name:`spendCents`,type:`integer`,required:!1,default:0},{name:`impressions`,type:`integer`,required:!1,default:0},{name:`clicks`,type:`integer`,required:!1,default:0},{name:`conversions`,type:`integer`,required:!1,default:0},{name:`leads`,type:`integer`,required:!1,default:0},{name:`revenueCents`,type:`integer`,required:!1},{name:`source`,type:`text`,required:!0,default:``},{name:`dedupeKey`,type:`text`,required:!0,default:``}],rest:[{method:`GET`,path:`/campaignmetricsnapshots`},{method:`GET`,path:`/campaignmetricsnapshots/[id]`},{method:`POST`,path:`/campaignmetricsnapshots`}],mcp:[{operation:`create`,name:`campaignmetricsnapshot_create`},{operation:`get`,name:`campaignmetricsnapshot_get`},{operation:`list`,name:`campaignmetricsnapshot_list`}],cli:[{operation:`create`,name:`campaignmetricsnapshot_create`},{operation:`get`,name:`campaignmetricsnapshot_get`},{operation:`list`,name:`campaignmetricsnapshot_list`}],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`findByCampaign`,async:!0,parameters:[`campaignId: string`],returnType:`Promise<CampaignMetricSnapshot[]>`,aiCallable:!1},{name:`findByChannel`,async:!0,parameters:[`campaignChannelId: string`],returnType:`Promise<CampaignMetricSnapshot[]>`,aiCallable:!1},{name:`findByDedupeKey`,async:!0,parameters:[`dedupeKey: string`],returnType:`Promise<CampaignMetricSnapshot | null>`,aiCallable:!1},{name:`getOrCreateByDedupeKey`,async:!0,parameters:[`options: CampaignMetricSnapshotOptions`],returnType:`Promise<object>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-marketing:Campaign`,`@happyvertical/smrt-marketing:CampaignChannel`],exposed:!0}],dependencies:[`commerce`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`],via:[`@happyvertical/smrt-tenancy`]}},{id:`messages`,packageName:`@happyvertical/smrt-messages`,version:`0.57.9`,description:`Unified multi-channel messaging with STI-based hierarchies`,models:[{id:`@happyvertical/smrt-messages:Account`,name:`Account`,collection:`accounts`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,description:`The display name for this connected messaging account.`},{name:`providerType`,type:`text`,required:!1,description:`The service that connects this account to your application.`},{name:`channelType`,type:`text`,required:!1,description:`The kind of messaging this account supports, such as email or chat.`},{name:`credentialSecretId`,type:`text`,required:!1},{name:`isActive`,type:`boolean`,required:!0,default:!0,description:`Whether this account is enabled for messaging.`},{name:`lastSyncAt`,type:`datetime`,required:!1,description:`When this account last checked for new messages.`},{name:`settings`,type:`text`,required:!1},{name:`configuration`,type:`text`,required:!1,description:`The public connection settings for this account; credentials are stored separately.`},{name:`createdAt`,type:`text`,required:!1,description:`When this account was added.`,system:!0},{name:`updatedAt`,type:`text`,required:!1,description:`When this account was last changed.`,system:!0}],rest:[{method:`GET`,path:`/accounts`},{method:`GET`,path:`/accounts/[id]`}],mcp:[{operation:`get`,name:`account_get`},{operation:`list`,name:`account_list`}],cli:[{operation:`get`,name:`account_get`},{operation:`list`,name:`account_list`}],methods:[{name:`activate`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`createSender`,async:!0,parameters:[],returnType:`Promise<MessageSenderInterface>`,aiCallable:!1},{name:`deactivate`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`getActive`,async:!0,parameters:[],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`getByProviderType`,async:!0,parameters:[`providerType: string`],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`getByType`,async:!0,parameters:[`accountType: string`],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`getConfiguration`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getCredentials`,async:!0,parameters:[],returnType:`Promise<Record<string, unknown> | null>`,aiCallable:!1},{name:`getInactive`,async:!0,parameters:[],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`getSettings`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getStats`,async:!0,parameters:[],returnType:`Promise<object>`,aiCallable:!1},{name:`search`,async:!0,parameters:[`query: string`,`filters?: AccountSearchFilters`],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`setConfiguration`,async:!1,parameters:[`configuration: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setCredentials`,async:!0,parameters:[`credentials: Record<string, unknown>`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`setSettings`,async:!1,parameters:[`settings: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-messages:Attachment`,name:`Attachment`,collection:`attachments`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`messageId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:Message`},{name:`filename`,type:`text`,required:!1},{name:`contentType`,type:`text`,required:!1},{name:`size`,type:`integer`,required:!0,default:0},{name:`contentId`,type:`text`,required:!1},{name:`contentDisposition`,type:`text`,required:!1,default:`attachment`,enum:[`attachment`,`inline`]},{name:`filePath`,type:`text`,required:!1},{name:`sourceUrl`,type:`text`,required:!1},{name:`createdAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/attachments`},{method:`GET`,path:`/attachments/[id]`},{method:`POST`,path:`/attachments`},{method:`DELETE`,path:`/attachments/[id]`}],mcp:[{operation:`get`,name:`attachment_get`},{operation:`list`,name:`attachment_list`}],cli:[{operation:`create`,name:`attachment_create`},{operation:`delete`,name:`attachment_delete`},{operation:`get`,name:`attachment_get`},{operation:`getExtension`,name:`attachment_getExtension`},{operation:`getFormattedSize`,name:`attachment_getFormattedSize`},{operation:`getMessage`,name:`attachment_getMessage`},{operation:`hasExternalFile`,name:`attachment_hasExternalFile`},{operation:`isImage`,name:`attachment_isImage`},{operation:`isInline`,name:`attachment_isInline`},{operation:`isPdf`,name:`attachment_isPdf`},{operation:`list`,name:`attachment_list`},{operation:`readContent`,name:`attachment_readContent`},{operation:`update`,name:`attachment_update`},{operation:`deleteByMessage`,name:`attachmentcollection_deleteByMessage`},{operation:`findByTenant`,name:`attachmentcollection_findByTenant`},{operation:`findGlobal`,name:`attachmentcollection_findGlobal`},{operation:`findWithGlobals`,name:`attachmentcollection_findWithGlobals`},{operation:`getByContentType`,name:`attachmentcollection_getByContentType`},{operation:`getByExtension`,name:`attachmentcollection_getByExtension`},{operation:`getByMessage`,name:`attachmentcollection_getByMessage`},{operation:`getImages`,name:`attachmentcollection_getImages`},{operation:`getInline`,name:`attachmentcollection_getInline`},{operation:`getLargest`,name:`attachmentcollection_getLargest`},{operation:`getPdfs`,name:`attachmentcollection_getPdfs`},{operation:`getRegular`,name:`attachmentcollection_getRegular`},{operation:`getStats`,name:`attachmentcollection_getStats`},{operation:`getTotalSize`,name:`attachmentcollection_getTotalSize`},{operation:`getWithExternalFiles`,name:`attachmentcollection_getWithExternalFiles`},{operation:`searchByFilename`,name:`attachmentcollection_searchByFilename`}],methods:[{name:`deleteByMessage`,async:!0,parameters:[`messageId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getByContentType`,async:!0,parameters:[`contentType: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getByExtension`,async:!0,parameters:[`extension: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getByMessage`,async:!0,parameters:[`messageId: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getExtension`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`getFormattedSize`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`getImages`,async:!0,parameters:[`messageId?: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getInline`,async:!0,parameters:[`messageId: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getLargest`,async:!0,parameters:[`limit?: any`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getMessage`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getPdfs`,async:!0,parameters:[`messageId?: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getRegular`,async:!0,parameters:[`messageId: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getStats`,async:!0,parameters:[],returnType:`Promise<object>`,aiCallable:!1},{name:`getTotalSize`,async:!0,parameters:[`messageId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`getWithExternalFiles`,async:!0,parameters:[],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`hasExternalFile`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isImage`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInline`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPdf`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`readContent`,async:!0,parameters:[],returnType:`Promise<Buffer | null>`,aiCallable:!1},{name:`searchByFilename`,async:!0,parameters:[`query: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-messages:Message`],exposed:!0},{id:`@happyvertical/smrt-messages:Blacklist`,name:`Blacklist`,collection:`blacklists`,description:`Block entries for email filtering`,fields:[{name:`pattern`,type:`text`,required:!1,default:``},{name:`type`,type:`text`,required:!1,default:`email`,enum:[`email`,`domain`,`regex`]},{name:`reason`,type:`text`,required:!1,default:``},{name:`autoArchive`,type:`boolean`,required:!1,default:!0},{name:`tenantId`,type:`text`,required:!0,system:!0}],rest:[{method:`GET`,path:`/blacklists`},{method:`GET`,path:`/blacklists/[id]`},{method:`POST`,path:`/blacklists`},{method:`PATCH`,path:`/blacklists/[id]`},{method:`DELETE`,path:`/blacklists/[id]`}],mcp:[{operation:`create`,name:`blacklist_create`},{operation:`delete`,name:`blacklist_delete`},{operation:`get`,name:`blacklist_get`},{operation:`list`,name:`blacklist_list`},{operation:`matches`,name:`blacklist_matches`},{operation:`update`,name:`blacklist_update`},{operation:`getMatchingEntry`,name:`blacklistcollection_getmatchingentry`},{operation:`isBlacklisted`,name:`blacklistcollection_isblacklisted`}],cli:[{operation:`create`,name:`blacklist_create`},{operation:`delete`,name:`blacklist_delete`},{operation:`get`,name:`blacklist_get`},{operation:`list`,name:`blacklist_list`},{operation:`matches`,name:`blacklist_matches`},{operation:`update`,name:`blacklist_update`},{operation:`getMatchingEntry`,name:`blacklistcollection_getMatchingEntry`},{operation:`isBlacklisted`,name:`blacklistcollection_isBlacklisted`}],methods:[{name:`getMatchingEntry`,async:!0,parameters:[`email: string`],returnType:`Promise<Blacklist | null>`,aiCallable:!0},{name:`isBlacklisted`,async:!0,parameters:[`email: string`],returnType:`Promise<boolean>`,aiCallable:!0},{name:`matches`,async:!1,parameters:[`email: string`],returnType:`boolean`,aiCallable:!0}],references:[],exposed:!0},{id:`@happyvertical/smrt-messages:Email`,name:`Email`,collection:`messages`,extends:`@happyvertical/smrt-messages:Message`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accountId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:Account`,description:`The connected account used to receive or send this message.`},{name:`personaId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-personas:AgentPersona`,description:`The assistant identity associated with this message, when one was used.`},{name:`endpointId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:MessagingEndpoint`,description:`The saved destination used to deliver this message.`},{name:`correlationId`,type:`text`,required:!1,description:`A tracking reference that connects this message to related activity.`},{name:`threadId`,type:`text`,required:!1,description:`The conversation this message belongs to.`},{name:`subject`,type:`text`,required:!1,description:`The subject shown in the message list.`},{name:`body`,type:`text`,required:!1,description:`The message content in plain text.`},{name:`fromAddress`,type:`text`,required:!1,description:`The address the message was sent from.`},{name:`fromName`,type:`text`,required:!1,description:`The sender name shown beside their address.`},{name:`toAddresses`,type:`text`,required:!1,description:`The people or addresses receiving this message.`},{name:`date`,type:`datetime`,required:!1,description:`When the message was sent or received.`},{name:`isRead`,type:`boolean`,required:!0,default:!1,description:`Whether this message has been marked as read.`},{name:`isFlagged`,type:`boolean`,required:!0,default:!1,description:`Whether this message is flagged for follow-up.`},{name:`hasAttachments`,type:`boolean`,required:!0,default:!1,description:`Whether files are attached to this message.`},{name:`size`,type:`integer`,required:!0,default:0,description:`The size of the message in bytes.`},{name:`metadata`,type:`text`,required:!1,description:`Additional details supplied by the messaging connection.`},{name:`sendStatus`,type:`text`,required:!1,default:`draft`,enum:[`draft`,`pending`,`sending`,`sent`,`failed`,`scheduled`],description:`The latest sending state: draft, sending, sent, or failed. Received mail may also show draft here.`},{name:`sentAt`,type:`datetime`,required:!1,description:`When the message was successfully sent.`},{name:`sendError`,type:`text`,required:!1,description:`The reason the latest send attempt failed.`},{name:`retryCount`,type:`integer`,required:!0,default:0,description:`How many times delivery has been retried.`},{name:`maxRetries`,type:`integer`,required:!0,default:3,description:`The maximum number of delivery retries allowed.`},{name:`scheduledSendAt`,type:`datetime`,required:!1,description:`When this message is scheduled to be sent.`},{name:`inReplyToMessageId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:Message`,description:`The earlier message this one replies to.`},{name:`createdAt`,type:`text`,required:!1,description:`When this message was recorded.`,system:!0},{name:`updatedAt`,type:`text`,required:!1,description:`When this message was last changed.`,system:!0},{name:`messageId`,type:`text`,required:!1,description:`The email reference assigned by the sender for tracking replies.`},{name:`inReplyTo`,type:`text`,required:!1,description:`The sender-assigned reference of the email being replied to.`},{name:`ccAddresses`,type:`text`,required:!1,description:`Recipients receiving a visible copy of this email.`},{name:`bccAddresses`,type:`text`,required:!1,description:`Recipients receiving a copy without appearing in the visible recipient list.`},{name:`replyToAddress`,type:`text`,required:!1,description:`The address replies should be sent to.`},{name:`replyToName`,type:`text`,required:!1,description:`The name associated with the reply address.`},{name:`textBody`,type:`text`,required:!1,description:`The plain-text version of the email.`},{name:`htmlBody`,type:`text`,required:!1,description:`The formatted version of the email.`},{name:`folderId`,type:`text`,required:!1,description:`The mailbox folder reference supplied by the email connection.`},{name:`folderPath`,type:`text`,required:!1,description:`The location of this email within the mailbox folders.`},{name:`labels`,type:`text`,required:!1,description:`Labels applied to this email by the mailbox provider.`},{name:`flags`,type:`text`,required:!1,description:`Mailbox markers such as read, answered, or flagged.`},{name:`isAnswered`,type:`boolean`,required:!0,default:!1,description:`Whether this email has been replied to.`},{name:`isDraft`,type:`boolean`,required:!0,default:!1,description:`Whether this email is saved as an unfinished draft.`},{name:`rawMessage`,type:`text`,required:!1,description:`The original email content as received from the mail server.`},{name:`headers`,type:`text`,required:!1,description:`Delivery and routing details included with the email.`}],rest:[{method:`GET`,path:`/messages`},{method:`GET`,path:`/messages/[id]`},{method:`POST`,path:`/messages`},{method:`PATCH`,path:`/messages/[id]`},{method:`DELETE`,path:`/messages/[id]`}],mcp:[{operation:`get`,name:`email_get`},{operation:`list`,name:`email_list`}],cli:[{operation:`create`,name:`email_create`},{operation:`createForward`,name:`email_createForward`},{operation:`createReply`,name:`email_createReply`},{operation:`delete`,name:`email_delete`},{operation:`get`,name:`email_get`},{operation:`getAccount`,name:`email_getAccount`},{operation:`getAttachments`,name:`email_getAttachments`},{operation:`getBccAddresses`,name:`email_getBccAddresses`},{operation:`getCcAddresses`,name:`email_getCcAddresses`},{operation:`getEndpoint`,name:`email_getEndpoint`},{operation:`getFlags`,name:`email_getFlags`},{operation:`getFolder`,name:`email_getFolder`},{operation:`getHeaders`,name:`email_getHeaders`},{operation:`getLabels`,name:`email_getLabels`},{operation:`getMetadata`,name:`email_getMetadata`},{operation:`getPreview`,name:`email_getPreview`},{operation:`getReferences`,name:`email_getReferences`},{operation:`getThreadEmails`,name:`email_getThreadEmails`},{operation:`getThreadMessages`,name:`email_getThreadMessages`},{operation:`getToAddresses`,name:`email_getToAddresses`},{operation:`isUnread`,name:`email_isUnread`},{operation:`list`,name:`email_list`},{operation:`markRead`,name:`email_markRead`},{operation:`markUnread`,name:`email_markUnread`},{operation:`retrySend`,name:`email_retrySend`},{operation:`send`,name:`email_send`},{operation:`setFlags`,name:`email_setFlags`},{operation:`setHeaders`,name:`email_setHeaders`},{operation:`setLabels`,name:`email_setLabels`},{operation:`setMetadata`,name:`email_setMetadata`},{operation:`setToAddresses`,name:`email_setToAddresses`},{operation:`toggleFlagged`,name:`email_toggleFlagged`},{operation:`update`,name:`email_update`},{operation:`countByFolder`,name:`emailcollection_countByFolder`},{operation:`countUnreadByAccount`,name:`emailcollection_countUnreadByAccount`},{operation:`countUnreadByFolder`,name:`emailcollection_countUnreadByFolder`},{operation:`deleteByFolder`,name:`emailcollection_deleteByFolder`},{operation:`findByTenant`,name:`emailcollection_findByTenant`},{operation:`findGlobal`,name:`emailcollection_findGlobal`},{operation:`findWithGlobals`,name:`emailcollection_findWithGlobals`},{operation:`getAccountStats`,name:`emailcollection_getAccountStats`},{operation:`getByAccount`,name:`emailcollection_getByAccount`},{operation:`getByAccounts`,name:`emailcollection_getByAccounts`},{operation:`getByFolder`,name:`emailcollection_getByFolder`},{operation:`getByMessageId`,name:`emailcollection_getByMessageId`},{operation:`getByThread`,name:`emailcollection_getByThread`},{operation:`getByType`,name:`emailcollection_getByType`},{operation:`getDrafts`,name:`emailcollection_getDrafts`},{operation:`getFailedSends`,name:`emailcollection_getFailedSends`},{operation:`getFlagged`,name:`emailcollection_getFlagged`},{operation:`getOutbox`,name:`emailcollection_getOutbox`},{operation:`getRecent`,name:`emailcollection_getRecent`},{operation:`getScheduled`,name:`emailcollection_getScheduled`},{operation:`getSent`,name:`emailcollection_getSent`},{operation:`getUnread`,name:`emailcollection_getUnread`},{operation:`getWithAttachments`,name:`emailcollection_getWithAttachments`},{operation:`markAllRead`,name:`emailcollection_markAllRead`},{operation:`markFolderRead`,name:`emailcollection_markFolderRead`},{operation:`search`,name:`emailcollection_search`},{operation:`searchEmails`,name:`emailcollection_searchEmails`}],methods:[{name:`countByFolder`,async:!0,parameters:[`folderId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`countUnreadByAccount`,async:!0,parameters:[`accountId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`countUnreadByFolder`,async:!0,parameters:[`folderId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`createForward`,async:!1,parameters:[],returnType:`Email`,aiCallable:!1},{name:`createReply`,async:!1,parameters:[`options?: object`],returnType:`Email`,aiCallable:!1},{name:`deleteByFolder`,async:!0,parameters:[`folderId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`getAccount`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getAccountStats`,async:!0,parameters:[`accountId: string`],returnType:`Promise<object>`,aiCallable:!1},{name:`getAttachments`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getBccAddresses`,async:!1,parameters:[],returnType:`Array<object>`,aiCallable:!1},{name:`getByAccount`,async:!0,parameters:[`accountId: string`],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`getByAccounts`,async:!0,parameters:[`accountIds: string[]`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getByFolder`,async:!0,parameters:[`folderId: string`],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`getByMessageId`,async:!0,parameters:[`accountId: string`,`messageId: string`],returnType:`Promise<Email | null>`,aiCallable:!1},{name:`getByThread`,async:!0,parameters:[`threadId: string`],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`getByType`,async:!0,parameters:[`messageType: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getCcAddresses`,async:!1,parameters:[],returnType:`Array<object>`,aiCallable:!1},{name:`getDrafts`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getEndpoint`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFailedSends`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getFlagged`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`getFlags`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getFolder`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getHeaders`,async:!1,parameters:[],returnType:`Record<string, string | string[]>`,aiCallable:!1},{name:`getLabels`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getOutbox`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getPreview`,async:!1,parameters:[`maxLength?: any`],returnType:`string`,aiCallable:!1},{name:`getRecent`,async:!0,parameters:[`limit?: any`,`accountId?: string`],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`getReferences`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getScheduled`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getSent`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getThreadEmails`,async:!0,parameters:[],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`getThreadMessages`,async:!0,parameters:[],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getToAddresses`,async:!1,parameters:[],returnType:`Array<object>`,aiCallable:!1},{name:`getUnread`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`getWithAttachments`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`isUnread`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markAllRead`,async:!0,parameters:[`messageIds: string[]`],returnType:`Promise<void>`,aiCallable:!1},{name:`markFolderRead`,async:!0,parameters:[`folderId: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`markRead`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`markUnread`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`retrySend`,async:!0,parameters:[`options?: SendEmailOptions`],returnType:`Promise<MessageSendResult>`,aiCallable:!1},{name:`search`,async:!0,parameters:[`query: string`,`filters?: EmailSearchFilters`],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`searchEmails`,async:!0,parameters:[`query: string`,`filters?: EmailSearchFilters`],returnType:`Promise<Email[]>`,aiCallable:!1},{name:`send`,async:!0,parameters:[`options?: SendEmailOptions`],returnType:`Promise<MessageSendResult>`,aiCallable:!1},{name:`setFlags`,async:!1,parameters:[`flags: string[]`],returnType:`void`,aiCallable:!1},{name:`setHeaders`,async:!1,parameters:[`headers: Record<string, string | string[]>`],returnType:`void`,aiCallable:!1},{name:`setLabels`,async:!1,parameters:[`labels: string[]`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setToAddresses`,async:!1,parameters:[`addresses: Array<object>`],returnType:`void`,aiCallable:!1},{name:`toggleFlagged`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-messages:Account`,`@happyvertical/smrt-messages:Message`,`@happyvertical/smrt-messages:MessagingEndpoint`,`@happyvertical/smrt-personas:AgentPersona`],exposed:!0},{id:`@happyvertical/smrt-messages:EmailAccount`,name:`EmailAccount`,collection:`accounts`,extends:`@happyvertical/smrt-messages:Account`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,description:`The display name for this connected messaging account.`},{name:`providerType`,type:`text`,required:!1,description:`The service that connects this account to your application.`},{name:`channelType`,type:`text`,required:!1,description:`The kind of messaging this account supports, such as email or chat.`},{name:`credentialSecretId`,type:`text`,required:!1},{name:`isActive`,type:`boolean`,required:!0,default:!0,description:`Whether this account is enabled for messaging.`},{name:`lastSyncAt`,type:`datetime`,required:!1,description:`When this account last checked for new messages.`},{name:`settings`,type:`text`,required:!1},{name:`configuration`,type:`text`,required:!1,description:`The public connection settings for this account; credentials are stored separately.`},{name:`createdAt`,type:`text`,required:!1,description:`When this account was added.`,system:!0},{name:`updatedAt`,type:`text`,required:!1,description:`When this account was last changed.`,system:!0},{name:`email`,type:`text`,required:!1,description:`The email address associated with this mailbox.`},{name:`syncIntervalMinutes`,type:`integer`,required:!0,default:60,description:`The time in minutes between scheduled mailbox checks.`}],rest:[{method:`GET`,path:`/accounts`},{method:`GET`,path:`/accounts/[id]`}],mcp:[{operation:`get`,name:`emailaccount_get`},{operation:`list`,name:`emailaccount_list`}],cli:[{operation:`get`,name:`emailaccount_get`},{operation:`list`,name:`emailaccount_list`}],methods:[{name:`activate`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`createClient`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`createSender`,async:!0,parameters:[],returnType:`Promise<MessageSenderInterface>`,aiCallable:!1},{name:`deactivate`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EmailAccount[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<EmailAccount[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EmailAccount[]>`,aiCallable:!1},{name:`getActive`,async:!0,parameters:[],returnType:`Promise<EmailAccount[]>`,aiCallable:!1},{name:`getByEmail`,async:!0,parameters:[`email: string`],returnType:`Promise<EmailAccount | null>`,aiCallable:!1},{name:`getByEmailProviderType`,async:!0,parameters:[`providerType: ProviderType`],returnType:`Promise<EmailAccount[]>`,aiCallable:!1},{name:`getByProviderType`,async:!0,parameters:[`providerType: string`],returnType:`Promise<EmailAccount[]>`,aiCallable:!1},{name:`getByType`,async:!0,parameters:[`accountType: string`],returnType:`Promise<Account[]>`,aiCallable:!1},{name:`getConfiguration`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getCredentials`,async:!0,parameters:[],returnType:`Promise<Record<string, unknown> | null>`,aiCallable:!1},{name:`getEmailStats`,async:!0,parameters:[],returnType:`Promise<object>`,aiCallable:!1},{name:`getEmails`,async:!0,parameters:[`limit?: number`],returnType:`any`,aiCallable:!1},{name:`getFolders`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getInactive`,async:!0,parameters:[],returnType:`Promise<EmailAccount[]>`,aiCallable:!1},{name:`getNeedingSync`,async:!0,parameters:[`maxAgeMinutes?: any`],returnType:`Promise<EmailAccount[]>`,aiCallable:!1},{name:`getSettings`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getStats`,async:!0,parameters:[],returnType:`Promise<object>`,aiCallable:!1},{name:`getTotalUnreadCount`,async:!0,parameters:[],returnType:`Promise<number>`,aiCallable:!1},{name:`getUnreadCount`,async:!0,parameters:[],returnType:`Promise<number>`,aiCallable:!1},{name:`migrateToSecrets`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`readIntakeMessage`,async:!0,parameters:[`locator: string`,`maxBytes: number`,`imapIdentity?: object`],returnType:`any`,aiCallable:!1},{name:`search`,async:!0,parameters:[`query: string`,`filters?: EmailAccountSearchFilters`],returnType:`Promise<EmailAccount[]>`,aiCallable:!1},{name:`searchEmailAccounts`,async:!0,parameters:[`query: string`,`filters?: EmailAccountSearchFilters`],returnType:`Promise<EmailAccount[]>`,aiCallable:!1},{name:`setConfiguration`,async:!1,parameters:[`configuration: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setCredentials`,async:!0,parameters:[`credentials: Record<string, unknown>`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`setSettings`,async:!1,parameters:[`settings: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`syncAll`,async:!0,parameters:[`args?: Record<string, unknown>`],returnType:`Promise<Map<string, object>>`,aiCallable:!1},{name:`syncFrom`,async:!0,parameters:[`options?: SyncOptions`],returnType:`Promise<SyncResult>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-messages:EmailAttachment`,name:`EmailAttachment`,collection:`emailattachments`,extends:`@happyvertical/smrt-messages:Attachment`,fields:[],rest:[{method:`GET`,path:`/emailattachments`},{method:`GET`,path:`/emailattachments/[id]`},{method:`POST`,path:`/emailattachments`},{method:`DELETE`,path:`/emailattachments/[id]`}],mcp:[{operation:`get`,name:`emailattachment_get`},{operation:`list`,name:`emailattachment_list`}],cli:[{operation:`create`,name:`emailattachment_create`},{operation:`delete`,name:`emailattachment_delete`},{operation:`get`,name:`emailattachment_get`},{operation:`getEmail`,name:`emailattachment_getEmail`},{operation:`getExtension`,name:`emailattachment_getExtension`},{operation:`getFormattedSize`,name:`emailattachment_getFormattedSize`},{operation:`getMessage`,name:`emailattachment_getMessage`},{operation:`hasExternalFile`,name:`emailattachment_hasExternalFile`},{operation:`isImage`,name:`emailattachment_isImage`},{operation:`isInline`,name:`emailattachment_isInline`},{operation:`isPdf`,name:`emailattachment_isPdf`},{operation:`list`,name:`emailattachment_list`},{operation:`readContent`,name:`emailattachment_readContent`},{operation:`update`,name:`emailattachment_update`},{operation:`deleteByEmail`,name:`emailattachmentcollection_deleteByEmail`},{operation:`deleteByMessage`,name:`emailattachmentcollection_deleteByMessage`},{operation:`findByTenant`,name:`emailattachmentcollection_findByTenant`},{operation:`findGlobal`,name:`emailattachmentcollection_findGlobal`},{operation:`findWithGlobals`,name:`emailattachmentcollection_findWithGlobals`},{operation:`getByContentType`,name:`emailattachmentcollection_getByContentType`},{operation:`getByEmail`,name:`emailattachmentcollection_getByEmail`},{operation:`getByExtension`,name:`emailattachmentcollection_getByExtension`},{operation:`getByMessage`,name:`emailattachmentcollection_getByMessage`},{operation:`getImages`,name:`emailattachmentcollection_getImages`},{operation:`getInline`,name:`emailattachmentcollection_getInline`},{operation:`getLargest`,name:`emailattachmentcollection_getLargest`},{operation:`getPdfs`,name:`emailattachmentcollection_getPdfs`},{operation:`getRegular`,name:`emailattachmentcollection_getRegular`},{operation:`getStats`,name:`emailattachmentcollection_getStats`},{operation:`getTotalSize`,name:`emailattachmentcollection_getTotalSize`},{operation:`getWithExternalFiles`,name:`emailattachmentcollection_getWithExternalFiles`},{operation:`searchByFilename`,name:`emailattachmentcollection_searchByFilename`}],methods:[{name:`deleteByEmail`,async:!0,parameters:[`emailId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`deleteByMessage`,async:!0,parameters:[`messageId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<EmailAttachment[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!1},{name:`getByContentType`,async:!0,parameters:[`contentType: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getByEmail`,async:!0,parameters:[`emailId: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!1},{name:`getByExtension`,async:!0,parameters:[`extension: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getByMessage`,async:!0,parameters:[`messageId: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getEmail`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getExtension`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`getFormattedSize`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`getImages`,async:!0,parameters:[`emailId?: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!1},{name:`getInline`,async:!0,parameters:[`emailId: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!1},{name:`getLargest`,async:!0,parameters:[`limit?: any`],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`getMessage`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getPdfs`,async:!0,parameters:[`emailId?: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!1},{name:`getRegular`,async:!0,parameters:[`emailId: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!1},{name:`getStats`,async:!0,parameters:[],returnType:`Promise<object>`,aiCallable:!1},{name:`getTotalSize`,async:!0,parameters:[`messageId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`getWithExternalFiles`,async:!0,parameters:[],returnType:`Promise<Attachment[]>`,aiCallable:!1},{name:`hasExternalFile`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isImage`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInline`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPdf`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`readContent`,async:!0,parameters:[],returnType:`Promise<Buffer | null>`,aiCallable:!1},{name:`searchByFilename`,async:!0,parameters:[`query: string`],returnType:`Promise<Attachment[]>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-messages:EmailFolder`,name:`EmailFolder`,collection:`emailfolders`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accountId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:Account`},{name:`name`,type:`text`,required:!1},{name:`path`,type:`text`,required:!1},{name:`delimiter`,type:`text`,required:!1},{name:`specialUse`,type:`text`,required:!1},{name:`messageCount`,type:`integer`,required:!0,default:0},{name:`unreadCount`,type:`integer`,required:!0,default:0},{name:`subscribed`,type:`boolean`,required:!0,default:!0},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/emailfolders`},{method:`GET`,path:`/emailfolders/[id]`},{method:`POST`,path:`/emailfolders`},{method:`PATCH`,path:`/emailfolders/[id]`},{method:`DELETE`,path:`/emailfolders/[id]`}],mcp:[{operation:`get`,name:`emailfolder_get`},{operation:`list`,name:`emailfolder_list`}],cli:[{operation:`create`,name:`emailfolder_create`},{operation:`delete`,name:`emailfolder_delete`},{operation:`get`,name:`emailfolder_get`},{operation:`getAccount`,name:`emailfolder_getAccount`},{operation:`getEmails`,name:`emailfolder_getEmails`},{operation:`getUnreadEmails`,name:`emailfolder_getUnreadEmails`},{operation:`isDrafts`,name:`emailfolder_isDrafts`},{operation:`isInbox`,name:`emailfolder_isInbox`},{operation:`isSent`,name:`emailfolder_isSent`},{operation:`isSpam`,name:`emailfolder_isSpam`},{operation:`isSystemFolder`,name:`emailfolder_isSystemFolder`},{operation:`isTrash`,name:`emailfolder_isTrash`},{operation:`list`,name:`emailfolder_list`},{operation:`refreshCounts`,name:`emailfolder_refreshCounts`},{operation:`subscribe`,name:`emailfolder_subscribe`},{operation:`unsubscribe`,name:`emailfolder_unsubscribe`},{operation:`update`,name:`emailfolder_update`},{operation:`createSystemFolders`,name:`emailfoldercollection_createSystemFolders`},{operation:`findByTenant`,name:`emailfoldercollection_findByTenant`},{operation:`findGlobal`,name:`emailfoldercollection_findGlobal`},{operation:`findWithGlobals`,name:`emailfoldercollection_findWithGlobals`},{operation:`getAccountStats`,name:`emailfoldercollection_getAccountStats`},{operation:`getByAccount`,name:`emailfoldercollection_getByAccount`},{operation:`getByPath`,name:`emailfoldercollection_getByPath`},{operation:`getDrafts`,name:`emailfoldercollection_getDrafts`},{operation:`getInbox`,name:`emailfoldercollection_getInbox`},{operation:`getSent`,name:`emailfoldercollection_getSent`},{operation:`getSpam`,name:`emailfoldercollection_getSpam`},{operation:`getSubscribed`,name:`emailfoldercollection_getSubscribed`},{operation:`getSystemFolders`,name:`emailfoldercollection_getSystemFolders`},{operation:`getTrash`,name:`emailfoldercollection_getTrash`},{operation:`getUserFolders`,name:`emailfoldercollection_getUserFolders`},{operation:`getWithUnread`,name:`emailfoldercollection_getWithUnread`},{operation:`refreshAllCounts`,name:`emailfoldercollection_refreshAllCounts`},{operation:`search`,name:`emailfoldercollection_search`}],methods:[{name:`createSystemFolders`,async:!0,parameters:[`accountId: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EmailFolder[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<EmailFolder[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EmailFolder[]>`,aiCallable:!1},{name:`getAccount`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getAccountStats`,async:!0,parameters:[`accountId: string`],returnType:`Promise<object>`,aiCallable:!1},{name:`getByAccount`,async:!0,parameters:[`accountId: string`],returnType:`Promise<EmailFolder[]>`,aiCallable:!1},{name:`getByPath`,async:!0,parameters:[`accountId: string`,`path: string`],returnType:`Promise<EmailFolder | null>`,aiCallable:!1},{name:`getDrafts`,async:!0,parameters:[`accountId: string`],returnType:`Promise<EmailFolder | null>`,aiCallable:!1},{name:`getEmails`,async:!0,parameters:[`limit?: number`],returnType:`any`,aiCallable:!1},{name:`getInbox`,async:!0,parameters:[`accountId: string`],returnType:`Promise<EmailFolder | null>`,aiCallable:!1},{name:`getSent`,async:!0,parameters:[`accountId: string`],returnType:`Promise<EmailFolder | null>`,aiCallable:!1},{name:`getSpam`,async:!0,parameters:[`accountId: string`],returnType:`Promise<EmailFolder | null>`,aiCallable:!1},{name:`getSubscribed`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<EmailFolder[]>`,aiCallable:!1},{name:`getSystemFolders`,async:!0,parameters:[`accountId: string`],returnType:`Promise<EmailFolder[]>`,aiCallable:!1},{name:`getTrash`,async:!0,parameters:[`accountId: string`],returnType:`Promise<EmailFolder | null>`,aiCallable:!1},{name:`getUnreadEmails`,async:!0,parameters:[`limit?: number`],returnType:`any`,aiCallable:!1},{name:`getUserFolders`,async:!0,parameters:[`accountId: string`],returnType:`Promise<EmailFolder[]>`,aiCallable:!1},{name:`getWithUnread`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<EmailFolder[]>`,aiCallable:!1},{name:`isDrafts`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInbox`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSent`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSpam`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSystemFolder`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isTrash`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`refreshAllCounts`,async:!0,parameters:[`accountId: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`refreshCounts`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`search`,async:!0,parameters:[`query: string`,`filters?: EmailFolderSearchFilters`],returnType:`Promise<EmailFolder[]>`,aiCallable:!1},{name:`subscribe`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`unsubscribe`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-messages:Account`],exposed:!0},{id:`@happyvertical/smrt-messages:Message`,name:`Message`,collection:`messages`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accountId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:Account`,description:`The connected account used to receive or send this message.`},{name:`personaId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-personas:AgentPersona`,description:`The assistant identity associated with this message, when one was used.`},{name:`endpointId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:MessagingEndpoint`,description:`The saved destination used to deliver this message.`},{name:`correlationId`,type:`text`,required:!1,description:`A tracking reference that connects this message to related activity.`},{name:`threadId`,type:`text`,required:!1,description:`The conversation this message belongs to.`},{name:`subject`,type:`text`,required:!1,description:`The subject shown in the message list.`},{name:`body`,type:`text`,required:!1,description:`The message content in plain text.`},{name:`fromAddress`,type:`text`,required:!1,description:`The address the message was sent from.`},{name:`fromName`,type:`text`,required:!1,description:`The sender name shown beside their address.`},{name:`toAddresses`,type:`text`,required:!1,description:`The people or addresses receiving this message.`},{name:`date`,type:`datetime`,required:!1,description:`When the message was sent or received.`},{name:`isRead`,type:`boolean`,required:!0,default:!1,description:`Whether this message has been marked as read.`},{name:`isFlagged`,type:`boolean`,required:!0,default:!1,description:`Whether this message is flagged for follow-up.`},{name:`hasAttachments`,type:`boolean`,required:!0,default:!1,description:`Whether files are attached to this message.`},{name:`size`,type:`integer`,required:!0,default:0,description:`The size of the message in bytes.`},{name:`metadata`,type:`text`,required:!1,description:`Additional details supplied by the messaging connection.`},{name:`sendStatus`,type:`text`,required:!1,default:`draft`,enum:[`draft`,`pending`,`sending`,`sent`,`failed`,`scheduled`],description:`The latest sending state: draft, sending, sent, or failed. Received mail may also show draft here.`},{name:`sentAt`,type:`datetime`,required:!1,description:`When the message was successfully sent.`},{name:`sendError`,type:`text`,required:!1,description:`The reason the latest send attempt failed.`},{name:`retryCount`,type:`integer`,required:!0,default:0,description:`How many times delivery has been retried.`},{name:`maxRetries`,type:`integer`,required:!0,default:3,description:`The maximum number of delivery retries allowed.`},{name:`scheduledSendAt`,type:`datetime`,required:!1,description:`When this message is scheduled to be sent.`},{name:`inReplyToMessageId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:Message`,description:`The earlier message this one replies to.`},{name:`createdAt`,type:`text`,required:!1,description:`When this message was recorded.`,system:!0},{name:`updatedAt`,type:`text`,required:!1,description:`When this message was last changed.`,system:!0}],rest:[{method:`GET`,path:`/messages`},{method:`GET`,path:`/messages/[id]`}],mcp:[{operation:`get`,name:`message_get`},{operation:`list`,name:`message_list`}],cli:[{operation:`create`,name:`message_create`},{operation:`createForward`,name:`message_createForward`},{operation:`createReply`,name:`message_createReply`},{operation:`delete`,name:`message_delete`},{operation:`get`,name:`message_get`},{operation:`getAccount`,name:`message_getAccount`},{operation:`getAttachments`,name:`message_getAttachments`},{operation:`getEndpoint`,name:`message_getEndpoint`},{operation:`getMetadata`,name:`message_getMetadata`},{operation:`getPreview`,name:`message_getPreview`},{operation:`getThreadMessages`,name:`message_getThreadMessages`},{operation:`getToAddresses`,name:`message_getToAddresses`},{operation:`isUnread`,name:`message_isUnread`},{operation:`list`,name:`message_list`},{operation:`markRead`,name:`message_markRead`},{operation:`markUnread`,name:`message_markUnread`},{operation:`retrySend`,name:`message_retrySend`},{operation:`send`,name:`message_send`},{operation:`setMetadata`,name:`message_setMetadata`},{operation:`setToAddresses`,name:`message_setToAddresses`},{operation:`toggleFlagged`,name:`message_toggleFlagged`},{operation:`update`,name:`message_update`},{operation:`findByTenant`,name:`messagecollection_findByTenant`},{operation:`findGlobal`,name:`messagecollection_findGlobal`},{operation:`findWithGlobals`,name:`messagecollection_findWithGlobals`},{operation:`getAccountStats`,name:`messagecollection_getAccountStats`},{operation:`getByAccounts`,name:`messagecollection_getByAccounts`},{operation:`getByThread`,name:`messagecollection_getByThread`},{operation:`getByType`,name:`messagecollection_getByType`},{operation:`getDrafts`,name:`messagecollection_getDrafts`},{operation:`getFailedSends`,name:`messagecollection_getFailedSends`},{operation:`getFlagged`,name:`messagecollection_getFlagged`},{operation:`getOutbox`,name:`messagecollection_getOutbox`},{operation:`getRecent`,name:`messagecollection_getRecent`},{operation:`getScheduled`,name:`messagecollection_getScheduled`},{operation:`getSent`,name:`messagecollection_getSent`},{operation:`getUnread`,name:`messagecollection_getUnread`},{operation:`markAllRead`,name:`messagecollection_markAllRead`},{operation:`search`,name:`messagecollection_search`}],methods:[{name:`createForward`,async:!1,parameters:[],returnType:`Message`,aiCallable:!1},{name:`createReply`,async:!1,parameters:[`_options?: object`],returnType:`Message`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getAccount`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getAccountStats`,async:!0,parameters:[`accountId: string`],returnType:`Promise<object>`,aiCallable:!1},{name:`getAttachments`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getByAccounts`,async:!0,parameters:[`accountIds: string[]`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getByThread`,async:!0,parameters:[`threadId: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getByType`,async:!0,parameters:[`messageType: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getDrafts`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getEndpoint`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFailedSends`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getFlagged`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getOutbox`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getPreview`,async:!1,parameters:[`maxLength?: any`],returnType:`string`,aiCallable:!1},{name:`getRecent`,async:!0,parameters:[`limit?: any`,`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getScheduled`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getSent`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getThreadMessages`,async:!0,parameters:[],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getToAddresses`,async:!1,parameters:[],returnType:`Array<object>`,aiCallable:!1},{name:`getUnread`,async:!0,parameters:[`accountId?: string`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`isUnread`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markAllRead`,async:!0,parameters:[`messageIds: string[]`],returnType:`Promise<void>`,aiCallable:!1},{name:`markRead`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`markUnread`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`retrySend`,async:!0,parameters:[`options?: SendMessageOptions`],returnType:`Promise<MessageSendResult>`,aiCallable:!1},{name:`search`,async:!0,parameters:[`query: string`,`filters?: MessageSearchFilters`],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`send`,async:!0,parameters:[`options?: SendMessageOptions`],returnType:`Promise<MessageSendResult>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setToAddresses`,async:!1,parameters:[`addresses: Array<object>`],returnType:`void`,aiCallable:!1},{name:`toggleFlagged`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-messages:Account`,`@happyvertical/smrt-messages:Message`,`@happyvertical/smrt-messages:MessagingEndpoint`,`@happyvertical/smrt-personas:AgentPersona`],exposed:!0},{id:`@happyvertical/smrt-messages:MessagingEndpoint`,name:`MessagingEndpoint`,collection:`messagingendpoints`,display:{label:`label`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`label`,type:`text`,required:!0},{name:`channel`,type:`text`,required:!0,default:`email`},{name:`address`,type:`text`,required:!0},{name:`isActive`,type:`boolean`,required:!0,default:!0},{name:`verifiedAt`,type:`datetime`,required:!1},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/messagingendpoints`},{method:`GET`,path:`/messagingendpoints/[id]`}],mcp:[{operation:`get`,name:`messagingendpoint_get`},{operation:`list`,name:`messagingendpoint_list`}],cli:[{operation:`get`,name:`messagingendpoint_get`},{operation:`list`,name:`messagingendpoint_list`}],methods:[{name:`getAddress`,async:!1,parameters:[],returnType:`T`,aiCallable:!1},{name:`getMaskedAddress`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`setAddress`,async:!1,parameters:[`address: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-messages:PersonaMessageRoute`,name:`PersonaMessageRoute`,collection:`personamessageroutes`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`personaId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-personas:AgentPersona`},{name:`accountId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-messages:Account`},{name:`endpointId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-messages:MessagingEndpoint`},{name:`purpose`,type:`text`,required:!0},{name:`priority`,type:`integer`,required:!0,default:0},{name:`enabled`,type:`boolean`,required:!0,default:!0},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/personamessageroutes`},{method:`GET`,path:`/personamessageroutes/[id]`}],mcp:[{operation:`get`,name:`personamessageroute_get`},{operation:`list`,name:`personamessageroute_list`}],cli:[{operation:`get`,name:`personamessageroute_get`},{operation:`list`,name:`personamessageroute_list`}],methods:[{name:`forPersona`,async:!0,parameters:[`personaId: string`],returnType:`Promise<PersonaMessageRoute[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-messages:Account`,`@happyvertical/smrt-messages:MessagingEndpoint`,`@happyvertical/smrt-personas:AgentPersona`],exposed:!0},{id:`@happyvertical/smrt-messages:SlackAccount`,name:`SlackAccount`,collection:`accounts`,extends:`@happyvertical/smrt-messages:Account`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,description:`The display name for this connected messaging account.`},{name:`providerType`,type:`text`,required:!1,description:`The service that connects this account to your application.`},{name:`channelType`,type:`text`,required:!1,description:`The kind of messaging this account supports, such as email or chat.`},{name:`credentialSecretId`,type:`text`,required:!1},{name:`isActive`,type:`boolean`,required:!0,default:!0,description:`Whether this account is enabled for messaging.`},{name:`lastSyncAt`,type:`datetime`,required:!1,description:`When this account last checked for new messages.`},{name:`settings`,type:`text`,required:!1},{name:`configuration`,type:`text`,required:!1,description:`The public connection settings for this account; credentials are stored separately.`},{name:`createdAt`,type:`text`,required:!1,description:`When this account was added.`,system:!0},{name:`updatedAt`,type:`text`,required:!1,description:`When this account was last changed.`,system:!0},{name:`workspaceId`,type:`text`,required:!1},{name:`workspaceName`,type:`text`,required:!1},{name:`botUserId`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/accounts`},{method:`GET`,path:`/accounts/[id]`}],mcp:[{operation:`get`,name:`slackaccount_get`},{operation:`list`,name:`slackaccount_list`}],cli:[{operation:`get`,name:`slackaccount_get`},{operation:`list`,name:`slackaccount_list`}],methods:[{name:`activate`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`createSender`,async:!0,parameters:[],returnType:`Promise<MessageSenderInterface>`,aiCallable:!1},{name:`deactivate`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`getConfiguration`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getCredentials`,async:!0,parameters:[],returnType:`Promise<Record<string, unknown> | null>`,aiCallable:!1},{name:`getSettings`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setConfiguration`,async:!1,parameters:[`configuration: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setCredentials`,async:!0,parameters:[`credentials: Record<string, unknown>`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`setSettings`,async:!1,parameters:[`settings: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-messages:SlackMessage`,name:`SlackMessage`,collection:`messages`,extends:`@happyvertical/smrt-messages:Message`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accountId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:Account`,description:`The connected account used to receive or send this message.`},{name:`personaId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-personas:AgentPersona`,description:`The assistant identity associated with this message, when one was used.`},{name:`endpointId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:MessagingEndpoint`,description:`The saved destination used to deliver this message.`},{name:`correlationId`,type:`text`,required:!1,description:`A tracking reference that connects this message to related activity.`},{name:`threadId`,type:`text`,required:!1,description:`The conversation this message belongs to.`},{name:`subject`,type:`text`,required:!1,description:`The subject shown in the message list.`},{name:`body`,type:`text`,required:!1,description:`The message content in plain text.`},{name:`fromAddress`,type:`text`,required:!1,description:`The address the message was sent from.`},{name:`fromName`,type:`text`,required:!1,description:`The sender name shown beside their address.`},{name:`toAddresses`,type:`text`,required:!1,description:`The people or addresses receiving this message.`},{name:`date`,type:`datetime`,required:!1,description:`When the message was sent or received.`},{name:`isRead`,type:`boolean`,required:!0,default:!1,description:`Whether this message has been marked as read.`},{name:`isFlagged`,type:`boolean`,required:!0,default:!1,description:`Whether this message is flagged for follow-up.`},{name:`hasAttachments`,type:`boolean`,required:!0,default:!1,description:`Whether files are attached to this message.`},{name:`size`,type:`integer`,required:!0,default:0,description:`The size of the message in bytes.`},{name:`metadata`,type:`text`,required:!1,description:`Additional details supplied by the messaging connection.`},{name:`sendStatus`,type:`text`,required:!1,default:`draft`,enum:[`draft`,`pending`,`sending`,`sent`,`failed`,`scheduled`],description:`The latest sending state: draft, sending, sent, or failed. Received mail may also show draft here.`},{name:`sentAt`,type:`datetime`,required:!1,description:`When the message was successfully sent.`},{name:`sendError`,type:`text`,required:!1,description:`The reason the latest send attempt failed.`},{name:`retryCount`,type:`integer`,required:!0,default:0,description:`How many times delivery has been retried.`},{name:`maxRetries`,type:`integer`,required:!0,default:3,description:`The maximum number of delivery retries allowed.`},{name:`scheduledSendAt`,type:`datetime`,required:!1,description:`When this message is scheduled to be sent.`},{name:`inReplyToMessageId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:Message`,description:`The earlier message this one replies to.`},{name:`createdAt`,type:`text`,required:!1,description:`When this message was recorded.`,system:!0},{name:`updatedAt`,type:`text`,required:!1,description:`When this message was last changed.`,system:!0},{name:`channelId`,type:`text`,required:!1},{name:`channelName`,type:`text`,required:!1},{name:`slackTs`,type:`text`,required:!1},{name:`slackThreadTs`,type:`text`,required:!1},{name:`reactions`,type:`text`,required:!1},{name:`isEdited`,type:`boolean`,required:!0,default:!1},{name:`messageType`,type:`text`,required:!1},{name:`blocks`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/messages`},{method:`GET`,path:`/messages/[id]`},{method:`POST`,path:`/messages`}],mcp:[{operation:`get`,name:`slackmessage_get`},{operation:`list`,name:`slackmessage_list`}],cli:[{operation:`create`,name:`slackmessage_create`},{operation:`createForward`,name:`slackmessage_createForward`},{operation:`createReply`,name:`slackmessage_createReply`},{operation:`delete`,name:`slackmessage_delete`},{operation:`get`,name:`slackmessage_get`},{operation:`getAccount`,name:`slackmessage_getAccount`},{operation:`getAttachments`,name:`slackmessage_getAttachments`},{operation:`getBlocks`,name:`slackmessage_getBlocks`},{operation:`getEndpoint`,name:`slackmessage_getEndpoint`},{operation:`getMetadata`,name:`slackmessage_getMetadata`},{operation:`getPreview`,name:`slackmessage_getPreview`},{operation:`getReactions`,name:`slackmessage_getReactions`},{operation:`getThreadMessages`,name:`slackmessage_getThreadMessages`},{operation:`getToAddresses`,name:`slackmessage_getToAddresses`},{operation:`getTotalReactions`,name:`slackmessage_getTotalReactions`},{operation:`isInThread`,name:`slackmessage_isInThread`},{operation:`isUnread`,name:`slackmessage_isUnread`},{operation:`list`,name:`slackmessage_list`},{operation:`markRead`,name:`slackmessage_markRead`},{operation:`markUnread`,name:`slackmessage_markUnread`},{operation:`retrySend`,name:`slackmessage_retrySend`},{operation:`send`,name:`slackmessage_send`},{operation:`setMetadata`,name:`slackmessage_setMetadata`},{operation:`setToAddresses`,name:`slackmessage_setToAddresses`},{operation:`toggleFlagged`,name:`slackmessage_toggleFlagged`},{operation:`update`,name:`slackmessage_update`}],methods:[{name:`createForward`,async:!1,parameters:[],returnType:`Message`,aiCallable:!1},{name:`createReply`,async:!1,parameters:[`_options?: object`],returnType:`Message`,aiCallable:!1},{name:`getAccount`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getAttachments`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getBlocks`,async:!1,parameters:[],returnType:`Record<string, unknown>[]`,aiCallable:!1},{name:`getEndpoint`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getPreview`,async:!1,parameters:[`maxLength?: any`],returnType:`string`,aiCallable:!1},{name:`getReactions`,async:!1,parameters:[],returnType:`Array<object>`,aiCallable:!1},{name:`getThreadMessages`,async:!0,parameters:[],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getToAddresses`,async:!1,parameters:[],returnType:`Array<object>`,aiCallable:!1},{name:`getTotalReactions`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`isInThread`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isUnread`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markRead`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`markUnread`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`retrySend`,async:!0,parameters:[`options?: SendMessageOptions`],returnType:`Promise<MessageSendResult>`,aiCallable:!1},{name:`send`,async:!0,parameters:[`options?: SendMessageOptions`],returnType:`Promise<MessageSendResult>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setToAddresses`,async:!1,parameters:[`addresses: Array<object>`],returnType:`void`,aiCallable:!1},{name:`toggleFlagged`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-messages:Account`,`@happyvertical/smrt-messages:Message`,`@happyvertical/smrt-messages:MessagingEndpoint`,`@happyvertical/smrt-personas:AgentPersona`],exposed:!0},{id:`@happyvertical/smrt-messages:TelegramAccount`,name:`TelegramAccount`,collection:`accounts`,extends:`@happyvertical/smrt-messages:Account`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,description:`The display name for this connected messaging account.`},{name:`providerType`,type:`text`,required:!1,description:`The service that connects this account to your application.`},{name:`channelType`,type:`text`,required:!1,description:`The kind of messaging this account supports, such as email or chat.`},{name:`credentialSecretId`,type:`text`,required:!1},{name:`isActive`,type:`boolean`,required:!0,default:!0,description:`Whether this account is enabled for messaging.`},{name:`lastSyncAt`,type:`datetime`,required:!1,description:`When this account last checked for new messages.`},{name:`settings`,type:`text`,required:!1},{name:`configuration`,type:`text`,required:!1,description:`The public connection settings for this account; credentials are stored separately.`},{name:`createdAt`,type:`text`,required:!1,description:`When this account was added.`,system:!0},{name:`updatedAt`,type:`text`,required:!1,description:`When this account was last changed.`,system:!0}],rest:[{method:`GET`,path:`/accounts`},{method:`GET`,path:`/accounts/[id]`}],mcp:[{operation:`get`,name:`telegramaccount_get`},{operation:`list`,name:`telegramaccount_list`}],cli:[{operation:`get`,name:`telegramaccount_get`},{operation:`list`,name:`telegramaccount_list`}],methods:[{name:`activate`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`createSender`,async:!0,parameters:[],returnType:`Promise<MessageSenderInterface>`,aiCallable:!1},{name:`deactivate`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`getConfiguration`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getCredentials`,async:!0,parameters:[],returnType:`Promise<Record<string, unknown> | null>`,aiCallable:!1},{name:`getSettings`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setConfiguration`,async:!1,parameters:[`configuration: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setCredentials`,async:!0,parameters:[`credentials: Record<string, unknown>`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`setSettings`,async:!1,parameters:[`settings: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-messages:Tweet`,name:`Tweet`,collection:`messages`,extends:`@happyvertical/smrt-messages:Message`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accountId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:Account`,description:`The connected account used to receive or send this message.`},{name:`personaId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-personas:AgentPersona`,description:`The assistant identity associated with this message, when one was used.`},{name:`endpointId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:MessagingEndpoint`,description:`The saved destination used to deliver this message.`},{name:`correlationId`,type:`text`,required:!1,description:`A tracking reference that connects this message to related activity.`},{name:`threadId`,type:`text`,required:!1,description:`The conversation this message belongs to.`},{name:`subject`,type:`text`,required:!1,description:`The subject shown in the message list.`},{name:`body`,type:`text`,required:!1,description:`The message content in plain text.`},{name:`fromAddress`,type:`text`,required:!1,description:`The address the message was sent from.`},{name:`fromName`,type:`text`,required:!1,description:`The sender name shown beside their address.`},{name:`toAddresses`,type:`text`,required:!1,description:`The people or addresses receiving this message.`},{name:`date`,type:`datetime`,required:!1,description:`When the message was sent or received.`},{name:`isRead`,type:`boolean`,required:!0,default:!1,description:`Whether this message has been marked as read.`},{name:`isFlagged`,type:`boolean`,required:!0,default:!1,description:`Whether this message is flagged for follow-up.`},{name:`hasAttachments`,type:`boolean`,required:!0,default:!1,description:`Whether files are attached to this message.`},{name:`size`,type:`integer`,required:!0,default:0,description:`The size of the message in bytes.`},{name:`metadata`,type:`text`,required:!1,description:`Additional details supplied by the messaging connection.`},{name:`sendStatus`,type:`text`,required:!1,default:`draft`,enum:[`draft`,`pending`,`sending`,`sent`,`failed`,`scheduled`],description:`The latest sending state: draft, sending, sent, or failed. Received mail may also show draft here.`},{name:`sentAt`,type:`datetime`,required:!1,description:`When the message was successfully sent.`},{name:`sendError`,type:`text`,required:!1,description:`The reason the latest send attempt failed.`},{name:`retryCount`,type:`integer`,required:!0,default:0,description:`How many times delivery has been retried.`},{name:`maxRetries`,type:`integer`,required:!0,default:3,description:`The maximum number of delivery retries allowed.`},{name:`scheduledSendAt`,type:`datetime`,required:!1,description:`When this message is scheduled to be sent.`},{name:`inReplyToMessageId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-messages:Message`,description:`The earlier message this one replies to.`},{name:`createdAt`,type:`text`,required:!1,description:`When this message was recorded.`,system:!0},{name:`updatedAt`,type:`text`,required:!1,description:`When this message was last changed.`,system:!0},{name:`tweetId`,type:`text`,required:!1},{name:`retweetCount`,type:`integer`,required:!0,default:0},{name:`likeCount`,type:`integer`,required:!0,default:0},{name:`replyCount`,type:`integer`,required:!0,default:0},{name:`isRetweet`,type:`boolean`,required:!0,default:!1},{name:`isReply`,type:`boolean`,required:!0,default:!1},{name:`mediaUrls`,type:`text`,required:!1},{name:`hashtags`,type:`text`,required:!1},{name:`mentions`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/messages`},{method:`GET`,path:`/messages/[id]`},{method:`POST`,path:`/messages`}],mcp:[{operation:`get`,name:`tweet_get`},{operation:`list`,name:`tweet_list`}],cli:[{operation:`create`,name:`tweet_create`},{operation:`createForward`,name:`tweet_createForward`},{operation:`createReply`,name:`tweet_createReply`},{operation:`delete`,name:`tweet_delete`},{operation:`get`,name:`tweet_get`},{operation:`getAccount`,name:`tweet_getAccount`},{operation:`getAttachments`,name:`tweet_getAttachments`},{operation:`getEndpoint`,name:`tweet_getEndpoint`},{operation:`getEngagement`,name:`tweet_getEngagement`},{operation:`getHashtags`,name:`tweet_getHashtags`},{operation:`getMediaUrls`,name:`tweet_getMediaUrls`},{operation:`getMentions`,name:`tweet_getMentions`},{operation:`getMetadata`,name:`tweet_getMetadata`},{operation:`getPreview`,name:`tweet_getPreview`},{operation:`getThreadMessages`,name:`tweet_getThreadMessages`},{operation:`getToAddresses`,name:`tweet_getToAddresses`},{operation:`isUnread`,name:`tweet_isUnread`},{operation:`list`,name:`tweet_list`},{operation:`markRead`,name:`tweet_markRead`},{operation:`markUnread`,name:`tweet_markUnread`},{operation:`retrySend`,name:`tweet_retrySend`},{operation:`send`,name:`tweet_send`},{operation:`setMetadata`,name:`tweet_setMetadata`},{operation:`setToAddresses`,name:`tweet_setToAddresses`},{operation:`toggleFlagged`,name:`tweet_toggleFlagged`},{operation:`update`,name:`tweet_update`}],methods:[{name:`createForward`,async:!1,parameters:[],returnType:`Message`,aiCallable:!1},{name:`createReply`,async:!1,parameters:[`_options?: object`],returnType:`Message`,aiCallable:!1},{name:`getAccount`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getAttachments`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getEndpoint`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getEngagement`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`getHashtags`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getMediaUrls`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getMentions`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getPreview`,async:!1,parameters:[`maxLength?: any`],returnType:`string`,aiCallable:!1},{name:`getThreadMessages`,async:!0,parameters:[],returnType:`Promise<Message[]>`,aiCallable:!1},{name:`getToAddresses`,async:!1,parameters:[],returnType:`Array<object>`,aiCallable:!1},{name:`isUnread`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markRead`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`markUnread`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`retrySend`,async:!0,parameters:[`options?: SendMessageOptions`],returnType:`Promise<MessageSendResult>`,aiCallable:!1},{name:`send`,async:!0,parameters:[`options?: SendMessageOptions`],returnType:`Promise<MessageSendResult>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setToAddresses`,async:!1,parameters:[`addresses: Array<object>`],returnType:`void`,aiCallable:!1},{name:`toggleFlagged`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-messages:Account`,`@happyvertical/smrt-messages:Message`,`@happyvertical/smrt-messages:MessagingEndpoint`,`@happyvertical/smrt-personas:AgentPersona`],exposed:!0},{id:`@happyvertical/smrt-messages:TwitterAccount`,name:`TwitterAccount`,collection:`accounts`,extends:`@happyvertical/smrt-messages:Account`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,description:`The display name for this connected messaging account.`},{name:`providerType`,type:`text`,required:!1,description:`The service that connects this account to your application.`},{name:`channelType`,type:`text`,required:!1,description:`The kind of messaging this account supports, such as email or chat.`},{name:`credentialSecretId`,type:`text`,required:!1},{name:`isActive`,type:`boolean`,required:!0,default:!0,description:`Whether this account is enabled for messaging.`},{name:`lastSyncAt`,type:`datetime`,required:!1,description:`When this account last checked for new messages.`},{name:`settings`,type:`text`,required:!1},{name:`configuration`,type:`text`,required:!1,description:`The public connection settings for this account; credentials are stored separately.`},{name:`createdAt`,type:`text`,required:!1,description:`When this account was added.`,system:!0},{name:`updatedAt`,type:`text`,required:!1,description:`When this account was last changed.`,system:!0},{name:`handle`,type:`text`,required:!1},{name:`twitterUserId`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/accounts`},{method:`GET`,path:`/accounts/[id]`}],mcp:[{operation:`get`,name:`twitteraccount_get`},{operation:`list`,name:`twitteraccount_list`}],cli:[{operation:`get`,name:`twitteraccount_get`},{operation:`list`,name:`twitteraccount_list`}],methods:[{name:`activate`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`createSender`,async:!0,parameters:[],returnType:`Promise<MessageSenderInterface>`,aiCallable:!1},{name:`deactivate`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`getConfiguration`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getCredentials`,async:!0,parameters:[],returnType:`Promise<Record<string, unknown> | null>`,aiCallable:!1},{name:`getSettings`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setConfiguration`,async:!1,parameters:[`configuration: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setCredentials`,async:!0,parameters:[`credentials: Record<string, unknown>`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`setSettings`,async:!1,parameters:[`settings: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-messages:UserNotification`,name:`UserNotification`,collection:`usernotifications`,description:`One in-app notification for one person, with its own read state.`,display:{label:`title`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`recipientUserId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:User`},{name:`kind`,type:`text`,required:!0},{name:`title`,type:`text`,required:!0},{name:`body`,type:`text`,required:!1},{name:`href`,type:`text`,required:!1},{name:`severity`,type:`text`,required:!1,default:`info`,enum:[`info`,`success`,`warning`,`error`]},{name:`sourceRef`,type:`text`,required:!0},{name:`occurredAt`,type:`text`,required:!1},{name:`readAt`,type:`datetime`,required:!1},{name:`dismissedAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-users:User`],exposed:!1},{id:`@happyvertical/smrt-messages:Whitelist`,name:`Whitelist`,collection:`whitelists`,description:`Allow-only entries for email filtering`,fields:[{name:`pattern`,type:`text`,required:!1,default:``},{name:`type`,type:`text`,required:!1,default:`email`,enum:[`email`,`domain`,`regex`]},{name:`category`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1,default:``},{name:`tenantId`,type:`text`,required:!0,system:!0}],rest:[{method:`GET`,path:`/whitelists`},{method:`GET`,path:`/whitelists/[id]`},{method:`POST`,path:`/whitelists`},{method:`PATCH`,path:`/whitelists/[id]`},{method:`DELETE`,path:`/whitelists/[id]`}],mcp:[{operation:`create`,name:`whitelist_create`},{operation:`delete`,name:`whitelist_delete`},{operation:`get`,name:`whitelist_get`},{operation:`list`,name:`whitelist_list`},{operation:`matches`,name:`whitelist_matches`},{operation:`update`,name:`whitelist_update`},{operation:`getByCategory`,name:`whitelistcollection_getbycategory`},{operation:`getMatchingEntry`,name:`whitelistcollection_getmatchingentry`},{operation:`isWhitelisted`,name:`whitelistcollection_iswhitelisted`}],cli:[{operation:`create`,name:`whitelist_create`},{operation:`delete`,name:`whitelist_delete`},{operation:`get`,name:`whitelist_get`},{operation:`list`,name:`whitelist_list`},{operation:`matches`,name:`whitelist_matches`},{operation:`update`,name:`whitelist_update`},{operation:`getByCategory`,name:`whitelistcollection_getByCategory`},{operation:`getMatchingEntry`,name:`whitelistcollection_getMatchingEntry`},{operation:`isWhitelisted`,name:`whitelistcollection_isWhitelisted`}],methods:[{name:`getByCategory`,async:!0,parameters:[`category: string`],returnType:`Promise<Whitelist[]>`,aiCallable:!0},{name:`getMatchingEntry`,async:!0,parameters:[`email: string`],returnType:`Promise<Whitelist | null>`,aiCallable:!0},{name:`isWhitelisted`,async:!0,parameters:[`email: string`,`category?: string`],returnType:`Promise<boolean>`,aiCallable:!0},{name:`matches`,async:!1,parameters:[`email: string`],returnType:`boolean`,aiCallable:!0}],references:[],exposed:!0},{id:`@happyvertical/smrt-messages:ZulipAccount`,name:`ZulipAccount`,collection:`accounts`,extends:`@happyvertical/smrt-messages:Account`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,description:`The display name for this connected messaging account.`},{name:`providerType`,type:`text`,required:!1,description:`The service that connects this account to your application.`},{name:`channelType`,type:`text`,required:!1,description:`The kind of messaging this account supports, such as email or chat.`},{name:`credentialSecretId`,type:`text`,required:!1},{name:`isActive`,type:`boolean`,required:!0,default:!0,description:`Whether this account is enabled for messaging.`},{name:`lastSyncAt`,type:`datetime`,required:!1,description:`When this account last checked for new messages.`},{name:`settings`,type:`text`,required:!1},{name:`configuration`,type:`text`,required:!1,description:`The public connection settings for this account; credentials are stored separately.`},{name:`createdAt`,type:`text`,required:!1,description:`When this account was added.`,system:!0},{name:`updatedAt`,type:`text`,required:!1,description:`When this account was last changed.`,system:!0}],rest:[{method:`GET`,path:`/accounts`},{method:`GET`,path:`/accounts/[id]`}],mcp:[{operation:`get`,name:`zulipaccount_get`},{operation:`list`,name:`zulipaccount_list`}],cli:[{operation:`get`,name:`zulipaccount_get`},{operation:`list`,name:`zulipaccount_list`}],methods:[{name:`activate`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`createSender`,async:!0,parameters:[],returnType:`Promise<MessageSenderInterface>`,aiCallable:!1},{name:`deactivate`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`getConfiguration`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getCredentials`,async:!0,parameters:[],returnType:`Promise<Record<string, unknown> | null>`,aiCallable:!1},{name:`getSettings`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setConfiguration`,async:!1,parameters:[`configuration: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setCredentials`,async:!0,parameters:[`credentials: Record<string, unknown>`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`setSettings`,async:!1,parameters:[`settings: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0}],dependencies:[`ledgers`,`profiles`,`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3617`,`#3624`,`#3626`,`#3627`],via:[`@happyvertical/smrt-profiles`,`@happyvertical/smrt-secrets`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`]},recipes:[{id:`messages.mailbox`,label:`Mailbox`,summary:`Read and compose email from your connected accounts.`,synonyms:[`email`,`inbox`,`mail`],models:[`@happyvertical/smrt-messages:Email`,`@happyvertical/smrt-messages:EmailAccount`],nav:[{label:`Mailbox`,model:`@happyvertical/smrt-messages:Email`,icon:`folder`,description:`Read email from your connected accounts.`,key:`mailbox`,noun:`email`},{label:`Failed sends`,model:`@happyvertical/smrt-messages:Email`,icon:`fileText`,description:`Review email whose last send attempt failed.`,key:`failed-sends`,noun:`email`,filter:{field:`sendStatus`,value:`failed`}}],requires:[],group:{id:`messages`,label:`Messaging`,summary:`Choose email and personal updates independently.`},section:{id:`messages`,label:`Messaging`,icon:`folder`,description:`Read email and keep up with updates addressed to you.`},options:{"@happyvertical/smrt-messages:Email":{fields:{created_at:{help:`When this email was first recorded.`},updated_at:{help:`When this email record was last changed.`}}},"@happyvertical/smrt-messages:EmailAccount":{fields:{created_at:{help:`When this mailbox connection was first recorded.`},updated_at:{help:`When this mailbox connection was last changed.`}}}},help:{markdown:`## Your mailbox
690
- Read messages, open a conversation, or compose an email using a connected account.
691
- Choose the sender account, add recipients, and check the subject and message before sending.
692
-
693
- ## Failed sends
694
- Use Failed sends to review email whose last send attempt failed. Returning to the mailbox shows all email again.
695
- Check the failure and sender connection before retrying through your application. This view does not resend email automatically.
696
-
697
- ## Preview
698
- The playground uses fictional messages. Sending and saving are mocked and never contact a mail server.
699
-
700
- ## Connect an account
701
- Your application administrator connects an authorized email provider on the server. Real sending and mailbox synchronization require that connection; a preview does not verify delivery.
702
- `,fieldRefs:[]},surfaces:[{kind:`route`,path:`/messages/mailbox`,export:`@happyvertical/smrt-messages/svelte#MessageList`,label:`Mailbox`},{kind:`playground`,export:`@happyvertical/smrt-messages/svelte#MailboxDemo`,label:`Mailbox with mocked sending`}],providers:[{id:`email-inbox`,kind:`email`,options:[`imap`,`pop3`,`gmail`],required:!0},{id:`email-send`,kind:`email`,options:[`smtp`,`gmail`],required:!1}],runtime:`both`,demoSeed:{data:{accounts:[{id:`demo-account`,name:`Demo Inbox`,providerType:`email`,email:`you@example.com`,isActive:!0}],messages:[{id:`demo-welcome`,type:`email`,accountId:`demo-account`,subject:`Welcome to your mailbox`,body:`Fictional mail. Sending is mocked; nothing leaves this browser.`,senderName:`Demo colleague`,senderAddress:`colleague@example.com`,recipientAddresses:[{address:`you@example.com`}],date:`2026-01-01T12:00:00Z`,isRead:!1,isFlagged:!1,hasAttachments:!1}]}},demo:{mode:`server`,reasons:[`Needs a server because its package depends on @happyvertical/smrt-profiles, @happyvertical/smrt-secrets, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3617, #3624, #3626, #3627).`]}},{id:`messages.notifications`,label:`Notifications`,summary:`See updates addressed to you and mark them read.`,synonyms:[`alerts`,`notification bell`],models:[`@happyvertical/smrt-messages:UserNotification`],nav:[],requires:[],group:{id:`messages`,label:`Messaging`,summary:`Choose email and personal updates independently.`},section:{id:`messages`,label:`Messaging`,icon:`folder`,description:`Read email and keep up with updates addressed to you.`},help:{markdown:`## Notifications
703
- Open the notification bell to see updates addressed to you. Unread updates have a visible marker.
704
- Choose Mark read for one update or Mark all read for every unread update in your authorized accounts.
705
- Follow a notification link to open its related record when one is available.
706
-
707
- ## Availability
708
- Notifications are scoped to the signed-in person. Your application connects the notification provider and may enable live updates. If loading fails, try again after the connection returns.
709
- `,fieldRefs:[]},surfaces:[{kind:`shell-widget`,slot:`header.end`,export:`@happyvertical/smrt-svelte/notifications#NotificationBell`,label:`Notifications`}],providers:[{id:`notifications`,kind:`notifications`,options:[`user-notification-service`],required:!0}],runtime:`both`,demoSeed:{data:{items:[{id:`demo-notification`,title:`You were mentioned`,body:`A fictional update for the demo user.`,occurredAt:`2026-01-01T12:00:00Z`,severity:`info`,readAt:null}]}},demo:{mode:`server`,reasons:[`Needs a server because its package depends on @happyvertical/smrt-profiles, @happyvertical/smrt-secrets, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3617, #3624, #3626, #3627).`]}}]},{id:`places`,packageName:`@happyvertical/smrt-places`,version:`0.57.9`,description:`Hierarchical place management with geo integration and SMRT framework support`,models:[{id:`@happyvertical/smrt-places:Place`,name:`Place`,collection:`places`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`parentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-places:Place`},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`typeId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-places:PlaceType`},{name:`name`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`latitude`,type:`decimal`,required:!1},{name:`longitude`,type:`decimal`,required:!1},{name:`streetNumber`,type:`text`,required:!1},{name:`streetName`,type:`text`,required:!1},{name:`city`,type:`text`,required:!1},{name:`region`,type:`text`,required:!1},{name:`country`,type:`text`,required:!1},{name:`postalCode`,type:`text`,required:!1},{name:`countryCode`,type:`text`,required:!1},{name:`timezone`,type:`text`,required:!1},{name:`externalId`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/places`},{method:`GET`,path:`/places/[id]`},{method:`POST`,path:`/places`},{method:`PATCH`,path:`/places/[id]`},{method:`DELETE`,path:`/places/[id]`}],mcp:[{operation:`create`,name:`place_create`},{operation:`get`,name:`place_get`},{operation:`list`,name:`place_list`},{operation:`update`,name:`place_update`}],cli:[{operation:`addAsset`,name:`place_addAsset`},{operation:`create`,name:`place_create`},{operation:`delete`,name:`place_delete`},{operation:`get`,name:`place_get`},{operation:`getAncestors`,name:`place_getAncestors`},{operation:`getAssets`,name:`place_getAssets`},{operation:`getChildren`,name:`place_getChildren`},{operation:`getDescendants`,name:`place_getDescendants`},{operation:`getGeoData`,name:`place_getGeoData`},{operation:`getHierarchy`,name:`place_getHierarchy`},{operation:`getMainAsset`,name:`place_getMainAsset`},{operation:`getMetadata`,name:`place_getMetadata`},{operation:`getParent`,name:`place_getParent`},{operation:`getType`,name:`place_getType`},{operation:`hasCoordinates`,name:`place_hasCoordinates`},{operation:`list`,name:`place_list`},{operation:`moveTo`,name:`place_moveTo`},{operation:`removeAsset`,name:`place_removeAsset`},{operation:`setMainAsset`,name:`place_setMainAsset`},{operation:`setMetadata`,name:`place_setMetadata`},{operation:`update`,name:`place_update`},{operation:`updateMetadata`,name:`place_updateMetadata`},{operation:`addAsset`,name:`placecollection_addAsset`},{operation:`discoverNearby`,name:`placecollection_discoverNearby`},{operation:`findByTenant`,name:`placecollection_findByTenant`},{operation:`findGlobal`,name:`placecollection_findGlobal`},{operation:`findWithGlobals`,name:`placecollection_findWithGlobals`},{operation:`getAssets`,name:`placecollection_getAssets`},{operation:`getByType`,name:`placecollection_getByType`},{operation:`getChildren`,name:`placecollection_getChildren`},{operation:`getHierarchy`,name:`placecollection_getHierarchy`},{operation:`getRootPlaces`,name:`placecollection_getRootPlaces`},{operation:`lookupOrCreate`,name:`placecollection_lookupOrCreate`},{operation:`removeAsset`,name:`placecollection_removeAsset`},{operation:`resolveTrackPlaces`,name:`placecollection_resolveTrackPlaces`},{operation:`searchByProximity`,name:`placecollection_searchByProximity`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`discoverNearby`,async:!0,parameters:[`latitude: number`,`longitude: number`,`radiusMeters: number`,`options?: DiscoverNearbyOptions`],returnType:`Promise<Place[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Place[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Place[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Place[]>`,aiCallable:!1},{name:`getAncestors`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getByType`,async:!0,parameters:[`typeSlug: string`],returnType:`Promise<Place[]>`,aiCallable:!1},{name:`getChildren`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getDescendants`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getGeoData`,async:!1,parameters:[],returnType:`GeoData`,aiCallable:!1},{name:`getHierarchy`,async:!0,parameters:[],returnType:`Promise<HierarchyView<this>>`,aiCallable:!1},{name:`getMainAsset`,async:!0,parameters:[],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getParent`,async:!0,parameters:[],returnType:`Promise<this | null>`,aiCallable:!1},{name:`getRootPlaces`,async:!0,parameters:[],returnType:`Promise<Place[]>`,aiCallable:!1},{name:`getType`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`hasCoordinates`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`lookupOrCreate`,async:!0,parameters:[`query: string`,`options?: LookupOrCreateOptions`],returnType:`Promise<Place | null>`,aiCallable:!1},{name:`moveTo`,async:!0,parameters:[`newParent: this | string | null`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`resolveTrackPlaces`,async:!0,parameters:[`points: ReadonlyArray<TrackPoint>`,`options?: ResolveTrackPlacesOptions`],returnType:`Promise<TrackPlacesResult>`,aiCallable:!1},{name:`searchByProximity`,async:!0,parameters:[`latitude: number`,`longitude: number`,`radiusKm?: number`],returnType:`Promise<Place[]>`,aiCallable:!1},{name:`setMainAsset`,async:!0,parameters:[`asset: Asset | null`],returnType:`Promise<void>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-places:Place`,`@happyvertical/smrt-places:PlaceType`],exposed:!0},{id:`@happyvertical/smrt-places:PlaceAsset`,name:`PlaceAsset`,collection:`placeassets`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`placeId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-places:Place`},{name:`assetId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-assets:Asset`},{name:`relationship`,type:`text`,required:!0},{name:`sortOrder`,type:`integer`,required:!0,default:0}],rest:[],mcp:[],cli:[],methods:[{name:`addAsset`,async:!0,parameters:[`placeId: string`,`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`attach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<TItem>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`placeId: string`,`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`placeId: string`,`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`leftId: string`,`rightIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-places:Place`],exposed:!1},{id:`@happyvertical/smrt-places:PlaceType`,name:`PlaceType`,collection:`placetypes`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`name`,type:`text`,required:!0,default:``},{name:`description`,type:`text`,required:!1},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0}],rest:[{method:`GET`,path:`/placetypes`},{method:`GET`,path:`/placetypes/[id]`},{method:`POST`,path:`/placetypes`},{method:`PATCH`,path:`/placetypes/[id]`},{method:`DELETE`,path:`/placetypes/[id]`}],mcp:[{operation:`create`,name:`placetype_create`},{operation:`get`,name:`placetype_get`},{operation:`list`,name:`placetype_list`}],cli:[{operation:`create`,name:`placetype_create`},{operation:`delete`,name:`placetype_delete`},{operation:`get`,name:`placetype_get`},{operation:`getBySlug`,name:`placetype_getBySlug`},{operation:`list`,name:`placetype_list`},{operation:`update`,name:`placetype_update`},{operation:`getBySlug`,name:`placetypecollection_getBySlug`},{operation:`getOrCreate`,name:`placetypecollection_getOrCreate`},{operation:`initializeDefaults`,name:`placetypecollection_initializeDefaults`}],methods:[{name:`getBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<PlaceType | null>`,aiCallable:!1},{name:`getOrCreate`,async:!0,parameters:[`slug: string`,`name?: string`],returnType:`Promise<PlaceType>`,aiCallable:!1},{name:`initializeDefaults`,async:!0,parameters:[],returnType:`Promise<PlaceType[]>`,aiCallable:!1}],references:[],exposed:!0}],dependencies:[`assets`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`,`#3627`],reason:`geo -> cache -> redis, node:zlib; url-signature node:crypto`,via:[`@happyvertical/smrt-tenancy`]}},{id:`preferences`,packageName:`@happyvertical/smrt-preferences`,version:`0.57.9`,description:`Tenant defaults and per-user overrides for user-interface preferences (overview layouts, shell layout), validated per registered kind`,models:[{id:`@happyvertical/smrt-preferences:UiPreferenceRecord`,name:`UiPreferenceRecord`,collection:`uipreferencerecords`,description:`One stored user-interface preference (#3727): the canonical payload of a registered preference kind (overview, shell-layout, ...) for one surface at one tier of one tenant.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`kind`,type:`text`,required:!0,default:``},{name:`surfaceId`,type:`text`,required:!0,default:``},{name:`scopeType`,type:`text`,required:!0,default:`tenant`},{name:`userId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:User`},{name:`scopeKey`,type:`text`,required:!0},{name:`payloadJson`,type:`text`,required:!0},{name:`formatVersion`,type:`integer`,required:!1},{name:`updatedBy`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:User`}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[`options?: DeleteOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`findTier`,async:!0,parameters:[`tenantId: string`,`kind: string`,`surfaceId: string`,`scope: PreferenceScope`,`userId?: string`],returnType:`Promise<UiPreferenceRecord | null>`,aiCallable:!1},{name:`getPayload`,async:!1,parameters:[],returnType:`unknown`,aiCallable:!1},{name:`loadFromId`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`loadFromSlug`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SaveOptions`],returnType:`Promise<this>`,aiCallable:!1},{name:`setPayload`,async:!1,parameters:[`value: unknown`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-users:User`],exposed:!1}],dependencies:[`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3617`,`#3624`,`#3626`],via:[`@happyvertical/smrt-profiles`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`]}},{id:`products`,packageName:`@happyvertical/smrt-products`,version:`0.57.9`,description:`SMRT products module: triple-purpose microservice template for standalone apps, federated modules, and NPM libraries`,models:[{id:`@happyvertical/smrt-products:Category`,name:`Category`,collection:`categories`,description:`Product knowledge base category for organizing product information.`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`parentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-products:Category`},{name:`level`,type:`integer`,required:!0,default:0},{name:`productCount`,type:`integer`,required:!0,default:0},{name:`active`,type:`boolean`,required:!0,default:!0}],rest:[{method:`GET`,path:`/categories`},{method:`GET`,path:`/categories/[id]`},{method:`POST`,path:`/categories`},{method:`PATCH`,path:`/categories/[id]`}],mcp:[{operation:`get`,name:`category_get`},{operation:`list`,name:`category_list`}],cli:[{operation:`create`,name:`category_create`},{operation:`delete`,name:`category_delete`},{operation:`get`,name:`category_get`},{operation:`list`,name:`category_list`},{operation:`update`,name:`category_update`},{operation:`getRootCategories`,name:`categorycollection_getRootCategories`}],methods:[{name:`getRootCategories`,async:!0,parameters:[],returnType:`Promise<Category[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-products:Category`],exposed:!0},{id:`@happyvertical/smrt-products:Material`,name:`Material`,collection:`products`,extends:`@happyvertical/smrt-products:Product`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`productType`,type:`text`,required:!1,enum:[`product`,`material`,`assembly`]},{name:`name`,type:`text`,required:!1,description:`The product name, as customers see it.`},{name:`description`,type:`text`,required:!1,description:`A few words on what the product is and who it is for.`},{name:`category`,type:`text`,required:!1},{name:`manufacturer`,type:`text`,required:!1},{name:`model`,type:`text`,required:!1},{name:`price`,type:`integer`,required:!0,default:0,description:`The price in minor units (cents), for example 1999 for 19.99.`},{name:`defaultSalesTaxCodeId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-commerce:TaxCode`,description:`The tax code normally used when this product is sold.`},{name:`defaultPurchaseTaxCodeId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-commerce:TaxCode`,description:`The tax code normally used when this product is purchased.`},{name:`inStock`,type:`boolean`,required:!0,default:!0},{name:`specifications`,type:`json`,required:!1},{name:`tags`,type:`json`,required:!1},{name:`materialKind`,type:`text`,required:!1,default:`component`},{name:`uom`,type:`text`,required:!1,default:`each`},{name:`costPerUnit`,type:`decimal`,required:!1,default:0}],rest:[{method:`GET`,path:`/products`},{method:`GET`,path:`/products/[id]`},{method:`POST`,path:`/products`},{method:`PATCH`,path:`/products/[id]`}],mcp:[{operation:`get`,name:`material_get`},{operation:`list`,name:`material_list`}],cli:[{operation:`addAsset`,name:`material_addAsset`},{operation:`create`,name:`material_create`},{operation:`delete`,name:`material_delete`},{operation:`get`,name:`material_get`},{operation:`getAssets`,name:`material_getAssets`},{operation:`getSpecification`,name:`material_getSpecification`},{operation:`list`,name:`material_list`},{operation:`removeAsset`,name:`material_removeAsset`},{operation:`update`,name:`material_update`},{operation:`updateSpecification`,name:`material_updateSpecification`},{operation:`addAsset`,name:`materialcollection_addAsset`},{operation:`findByKind`,name:`materialcollection_findByKind`},{operation:`findByManufacturer`,name:`materialcollection_findByManufacturer`},{operation:`findInStock`,name:`materialcollection_findInStock`},{operation:`getAssets`,name:`materialcollection_getAssets`},{operation:`removeAsset`,name:`materialcollection_removeAsset`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByKind`,async:!0,parameters:[`materialKind: MaterialKind`],returnType:`Promise<Material[]>`,aiCallable:!1},{name:`findByManufacturer`,async:!0,parameters:[`manufacturer: string`],returnType:`Promise<Product[]>`,aiCallable:!1},{name:`findInStock`,async:!0,parameters:[],returnType:`Promise<Product[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getSpecification`,async:!0,parameters:[`key: string`],returnType:`Promise<unknown>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`updateSpecification`,async:!0,parameters:[`key: string`,`value: unknown`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:TaxCode`],exposed:!0},{id:`@happyvertical/smrt-products:Product`,name:`Product`,collection:`products`,description:`Product information for knowledge base queries.`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`productType`,type:`text`,required:!1,enum:[`product`,`material`,`assembly`]},{name:`name`,type:`text`,required:!1,description:`The product name, as customers see it.`},{name:`description`,type:`text`,required:!1,description:`A few words on what the product is and who it is for.`},{name:`category`,type:`text`,required:!1},{name:`manufacturer`,type:`text`,required:!1},{name:`model`,type:`text`,required:!1},{name:`price`,type:`integer`,required:!0,default:0,description:`The price in minor units (cents), for example 1999 for 19.99.`},{name:`defaultSalesTaxCodeId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-commerce:TaxCode`,description:`The tax code normally used when this product is sold.`},{name:`defaultPurchaseTaxCodeId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-commerce:TaxCode`,description:`The tax code normally used when this product is purchased.`},{name:`inStock`,type:`boolean`,required:!0,default:!0},{name:`specifications`,type:`json`,required:!1},{name:`tags`,type:`json`,required:!1}],rest:[{method:`GET`,path:`/products`},{method:`GET`,path:`/products/[id]`},{method:`POST`,path:`/products`},{method:`PATCH`,path:`/products/[id]`}],mcp:[{operation:`get`,name:`product_get`},{operation:`list`,name:`product_list`}],cli:[{operation:`addAsset`,name:`product_addAsset`},{operation:`create`,name:`product_create`},{operation:`delete`,name:`product_delete`},{operation:`get`,name:`product_get`},{operation:`getAssets`,name:`product_getAssets`},{operation:`getSpecification`,name:`product_getSpecification`},{operation:`list`,name:`product_list`},{operation:`removeAsset`,name:`product_removeAsset`},{operation:`update`,name:`product_update`},{operation:`updateSpecification`,name:`product_updateSpecification`},{operation:`addAsset`,name:`productcollection_addAsset`},{operation:`findByManufacturer`,name:`productcollection_findByManufacturer`},{operation:`findInStock`,name:`productcollection_findInStock`},{operation:`getAssets`,name:`productcollection_getAssets`},{operation:`removeAsset`,name:`productcollection_removeAsset`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByManufacturer`,async:!0,parameters:[`manufacturer: string`],returnType:`Promise<Product[]>`,aiCallable:!1},{name:`findInStock`,async:!0,parameters:[],returnType:`Promise<Product[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getSpecification`,async:!0,parameters:[`key: string`],returnType:`Promise<unknown>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`updateSpecification`,async:!0,parameters:[`key: string`,`value: unknown`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:TaxCode`],exposed:!0},{id:`@happyvertical/smrt-products:ProductAsset`,name:`ProductAsset`,collection:`productassets`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`productId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-products:Product`},{name:`assetId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-assets:Asset`},{name:`relationship`,type:`text`,required:!0},{name:`sortOrder`,type:`integer`,required:!0,default:0}],rest:[],mcp:[],cli:[],methods:[{name:`addAsset`,async:!0,parameters:[`productId: string`,`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`attach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<TItem>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`productId: string`,`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`productId: string`,`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`leftId: string`,`rightIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-products:Product`],exposed:!1},{id:`@happyvertical/smrt-products:ProductVariant`,name:`ProductVariant`,collection:`productvariants`,display:{label:`label`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`productId`,type:`text`,required:!0,default:``,description:`The product this choice belongs to.`},{name:`axisName`,type:`text`,required:!0,default:``,description:`What the product varies by, for example size or color.`},{name:`label`,type:`text`,required:!1,default:``},{name:`allowedValues`,type:`text`,required:!1,default:`[]`,description:`The values on offer, for example S, M and L, stored as a JSON list.`},{name:`sortOrder`,type:`integer`,required:!1,default:0}],rest:[{method:`GET`,path:`/productvariants`},{method:`GET`,path:`/productvariants/[id]`},{method:`POST`,path:`/productvariants`},{method:`PATCH`,path:`/productvariants/[id]`}],mcp:[{operation:`get`,name:`productvariant_get`},{operation:`list`,name:`productvariant_list`}],cli:[{operation:`create`,name:`productvariant_create`},{operation:`delete`,name:`productvariant_delete`},{operation:`get`,name:`productvariant_get`},{operation:`getValues`,name:`productvariant_getValues`},{operation:`list`,name:`productvariant_list`},{operation:`setValues`,name:`productvariant_setValues`},{operation:`update`,name:`productvariant_update`},{operation:`findAxis`,name:`productvariantcollection_findAxis`},{operation:`findForProduct`,name:`productvariantcollection_findForProduct`}],methods:[{name:`findAxis`,async:!0,parameters:[`productId: string`,`axisName: string`],returnType:`Promise<ProductVariant | null>`,aiCallable:!1},{name:`findForProduct`,async:!0,parameters:[`productId: string`],returnType:`Promise<ProductVariant[]>`,aiCallable:!1},{name:`getValues`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`setValues`,async:!1,parameters:[`value: string[] | string`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-products:Sku`,name:`Sku`,collection:`skus`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`productId`,type:`text`,required:!0,default:``,description:`The product this item is a version of.`},{name:`code`,type:`text`,required:!0,default:``,description:`The short code that identifies this exact item, such as a UPC or part number.`},{name:`barcode`,type:`text`,required:!1,default:``},{name:`name`,type:`text`,required:!1,default:``},{name:`attributes`,type:`text`,required:!1,default:`{}`,description:`Which attribute values, such as size and color, this item has, stored as JSON.`},{name:`weightGrams`,type:`decimal`,required:!1},{name:`parentSkuId`,type:`text`,required:!1,default:``},{name:`active`,type:`boolean`,required:!1,default:!0}],rest:[{method:`GET`,path:`/skus`},{method:`GET`,path:`/skus/[id]`},{method:`POST`,path:`/skus`},{method:`PATCH`,path:`/skus/[id]`}],mcp:[{operation:`get`,name:`sku_get`},{operation:`list`,name:`sku_list`}],cli:[{operation:`create`,name:`sku_create`},{operation:`delete`,name:`sku_delete`},{operation:`get`,name:`sku_get`},{operation:`getAttributes`,name:`sku_getAttributes`},{operation:`list`,name:`sku_list`},{operation:`setAttributes`,name:`sku_setAttributes`},{operation:`update`,name:`sku_update`},{operation:`findActive`,name:`skucollection_findActive`},{operation:`findByBarcode`,name:`skucollection_findByBarcode`},{operation:`findByCode`,name:`skucollection_findByCode`},{operation:`findByParent`,name:`skucollection_findByParent`},{operation:`findByProduct`,name:`skucollection_findByProduct`}],methods:[{name:`findActive`,async:!0,parameters:[`productId?: string`],returnType:`Promise<Sku[]>`,aiCallable:!1},{name:`findByBarcode`,async:!0,parameters:[`barcode: string`],returnType:`Promise<Sku | null>`,aiCallable:!1},{name:`findByCode`,async:!0,parameters:[`code: string`],returnType:`Promise<Sku | null>`,aiCallable:!1},{name:`findByParent`,async:!0,parameters:[`parentSkuId: string`],returnType:`Promise<Sku[]>`,aiCallable:!1},{name:`findByProduct`,async:!0,parameters:[`productId: string`],returnType:`Promise<Sku[]>`,aiCallable:!1},{name:`getAttributes`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setAttributes`,async:!1,parameters:[`value: Record<string, unknown> | string`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0}],dependencies:[`assets`,`commerce`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3616`,`#3624`,`#3626`],reason:`server bootstrap (startRestServer, express/cors), core generators/mcp`,via:[`@happyvertical/smrt-tenancy`]},recipes:[{id:`products.clothing`,label:`Clothing`,summary:`Products that come in sizes and colors, with a stock-keeping unit for each combination.`,synonyms:[`apparel`,`garments`,`sizes`,`variants`],models:[`@happyvertical/smrt-products:Product`,`@happyvertical/smrt-products:ProductVariant`,`@happyvertical/smrt-products:Sku`],nav:[{label:`Products`,model:`@happyvertical/smrt-products:Product`,icon:`package`,description:`What you sell, with prices and details.`}],requires:[],group:{id:`products`,label:`Products`,summary:`Sell goods: simple items, or clothing that comes in sizes and colors.`},section:{id:`catalog`,label:`Catalog`,icon:`package`,description:`Products, ingredients and the stock you hold.`},options:{"@happyvertical/smrt-products:Product":{fields:{productType:{visibility:`hidden`},category:{visibility:`hidden`},manufacturer:{visibility:`hidden`},model:{visibility:`hidden`},inStock:{visibility:`hidden`},specifications:{visibility:`hidden`},tags:{visibility:`hidden`},description:{visibility:`hidden`}}},"@happyvertical/smrt-products:ProductVariant":{fields:{label:{visibility:`hidden`},sortOrder:{visibility:`hidden`}}},"@happyvertical/smrt-products:Sku":{fields:{barcode:{visibility:`hidden`},name:{visibility:`hidden`},weightGrams:{visibility:`hidden`},parentSkuId:{visibility:`hidden`},active:{visibility:`hidden`}}}},help:{markdown:`## Overview
710
-
711
- Clothing is for products that come in sizes and colors. You describe the product
712
- once, say which sizes and colors you offer, and each combination becomes its own
713
- item you can sell and count separately: a shirt in three sizes and two colors is
714
- six items.
715
-
716
- ## Tasks
717
-
718
- ### Add a clothing item
719
-
720
- 1. Create a product with a **{field:name}** and a **{field:price}**.
721
- 2. Add a variant axis for sizes and list the values you offer, for example XS to
722
- XL. Leave out the ones you do not make.
723
- 3. Add a variant axis for colors the same way.
724
- 4. Create an item (SKU) for each size and color combination, with its own code
725
- and its size and color attributes.
726
-
727
- ### Add a size or a color later
728
-
729
- 1. Add the new value to the size or color axis of the product.
730
- 2. Create items for the new combinations. Items you already had keep their
731
- codes.
732
-
733
- ### Stop selling a size
734
-
735
- 1. Remove the size from the product's size axis.
736
- 2. Remove the items for that size.
737
- `,fieldRefs:[`name`,`price`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: server bootstrap (startRestServer, express/cors), core generators/mcp; and its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3616, #3624, #3626).`]}},{id:`products.ingredients`,label:`Ingredients`,summary:`Things you buy in to make what you sell, kept as products of the material kind with their own list.`,synonyms:[`materials`,`raw materials`,`supplies`,`stock items`],models:[`@happyvertical/smrt-products:Product`],nav:[{label:`Ingredients`,model:`@happyvertical/smrt-products:Product`,icon:`package`,description:`What you buy to make what you sell, with what each costs.`,key:`ingredients`,noun:`ingredient`,filter:{field:`productType`,value:`material`}}],requires:[`products.simple`],group:{id:`products`,label:`Products`,summary:`Sell goods: simple items, or clothing that comes in sizes and colors.`},section:{id:`catalog`,label:`Catalog`,icon:`package`,description:`Products, ingredients and the stock you hold.`},options:{"@happyvertical/smrt-products:Product":{fields:{productType:{visibility:`hidden`},category:{visibility:`hidden`},manufacturer:{visibility:`hidden`},model:{visibility:`hidden`},inStock:{visibility:`hidden`},specifications:{visibility:`hidden`},tags:{visibility:`hidden`}}}},help:{markdown:`## Overview
738
-
739
- Ingredients are the things you buy in to make what you sell: flour, butter,
740
- steel, fabric. They are products of the material kind, so they have the same
741
- name, price and description as anything you sell, and they are listed apart from
742
- the products you sell. Count them with inventory like any other item.
743
-
744
- ## Tasks
745
-
746
- ### Add an ingredient
747
-
748
- 1. Create a new ingredient.
749
- 2. Give it a **{field:name}** that includes the pack size, for example "Bread flour, 25 kg".
750
- 3. Enter what you pay in the **{field:price}**, in minor units (cents).
751
- 4. Add a **{field:description}** such as the brand or grade.
752
- 5. Save. It appears in the ingredients list, not in the products you sell.
753
-
754
- ### Update what you pay
755
-
756
- 1. Find the ingredient.
757
- 2. Change the **{field:price}** and save.
758
- `,fieldRefs:[`description`,`name`,`price`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: server bootstrap (startRestServer, express/cors), core generators/mcp; and its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3616, #3624, #3626).`]},effectiveDemo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: server bootstrap (startRestServer, express/cors), core generators/mcp; and its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3616, #3624, #3626).`,`Needs products.simple, which is server.`]}},{id:`products.simple`,label:`Simple products`,summary:`Items with a name, a price and a description.`,synonyms:[`items`,`goods`,`catalog`],models:[`@happyvertical/smrt-products:Product`],nav:[{label:`Products`,model:`@happyvertical/smrt-products:Product`,icon:`package`,description:`What you sell, with prices and details.`}],requires:[],group:{id:`products`,label:`Products`,summary:`Sell goods: simple items, or clothing that comes in sizes and colors.`},section:{id:`catalog`,label:`Catalog`,icon:`package`,description:`Products, ingredients and the stock you hold.`},options:{"@happyvertical/smrt-products:Product":{fields:{productType:{visibility:`hidden`},category:{visibility:`hidden`},manufacturer:{visibility:`hidden`},model:{visibility:`hidden`},inStock:{visibility:`hidden`},specifications:{visibility:`hidden`},tags:{visibility:`hidden`}}}},help:{markdown:`## Overview
759
-
760
- Simple products are things you sell that come in one form: one name, one price,
761
- one description. Keep a record for each so you can see everything you offer in
762
- one list, with the price next to it, and change it whenever it moves.
763
-
764
- ## Tasks
765
-
766
- ### Add a simple product
767
-
768
- 1. Create a new product.
769
- 2. Give it a **{field:name}**, for example "Ceramic mug".
770
- 3. Enter the **{field:price}** in minor units (cents).
771
- 4. Add a **{field:description}** so anyone reading the list knows what it is.
772
- 5. Save. The product is now on your list.
773
-
774
- ### Change a price
775
-
776
- 1. Find the product.
777
- 2. Change the **{field:price}** and save.
778
- `,fieldRefs:[`description`,`name`,`price`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: server bootstrap (startRestServer, express/cors), core generators/mcp; and its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3616, #3624, #3626).`]}}]},{id:`profiles`,packageName:`@happyvertical/smrt-profiles`,version:`0.57.9`,description:`Profile management system with relationships, metadata, and reciprocal associations for SMRT framework`,models:[{id:`@happyvertical/smrt-profiles:ApiKey`,name:`ApiKey`,collection:`apikeys`,display:{label:`name`},fields:[{name:`profileId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`keyHash`,type:`text`,required:!1,default:``},{name:`keyPrefix`,type:`text`,required:!1,default:``},{name:`name`,type:`text`,required:!1,default:``},{name:`scopes`,type:`json`,required:!1},{name:`lastUsedAt`,type:`datetime`,required:!1},{name:`expiresAt`,type:`datetime`,required:!1},{name:`revokedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/apikeys`},{method:`GET`,path:`/apikeys/[id]`}],mcp:[{operation:`get`,name:`apikey_get`},{operation:`list`,name:`apikey_list`}],cli:[{operation:`create`,name:`apikey_create`},{operation:`get`,name:`apikey_get`},{operation:`list`,name:`apikey_list`},{operation:`revoke`,name:`apikey_revoke`}],methods:[{name:`cleanupExpired`,async:!0,parameters:[],returnType:`Promise<number>`,aiCallable:!1},{name:`findActiveByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<ApiKey[]>`,aiCallable:!1},{name:`findByHash`,async:!0,parameters:[`keyHash: string`],returnType:`Promise<ApiKey | null>`,aiCallable:!1},{name:`findByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<ApiKey[]>`,aiCallable:!1},{name:`generateForProfile`,async:!0,parameters:[`profile: Profile`,`options: object`],returnType:`Promise<GenerateKeyResult>`,aiCallable:!1},{name:`getProfile`,async:!0,parameters:[],returnType:`Promise<Profile | null>`,aiCallable:!1},{name:`hasScope`,async:!1,parameters:[`scope: string`],returnType:`boolean`,aiCallable:!1},{name:`isValid`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`recordUsage`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`revoke`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`revokeAllForProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`revokeByPrefix`,async:!0,parameters:[`keyPrefix: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`verify`,async:!0,parameters:[`key: string`],returnType:`Promise<ApiKey | null>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-profiles:AuditLog`,name:`AuditLog`,collection:`auditlogs`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`profileId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`action`,type:`text`,required:!1,default:``},{name:`reason`,type:`text`,required:!1,default:``},{name:`changes`,type:`json`,required:!1},{name:`resourceType`,type:`text`,required:!1,default:``},{name:`resourceId`,type:`text`,required:!1,default:``},{name:`occurredAt`,type:`datetime`,required:!1,default:`current_timestamp`},{name:`source`,type:`text`,required:!1,default:`web`,enum:[`web`,`cli`,`ci`,`webhook`,`mcp`]},{name:`metadata`,type:`json`,required:!1},{name:`onBehalfOfId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-profiles:Profile`}],rest:[],mcp:[],cli:[],methods:[{name:`findByAction`,async:!0,parameters:[`action: string`],returnType:`Promise<AuditLog[]>`,aiCallable:!1},{name:`findByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<AuditLog[]>`,aiCallable:!1},{name:`findByResource`,async:!0,parameters:[`resourceType: string`,`resourceId: string`],returnType:`Promise<AuditLog[]>`,aiCallable:!1},{name:`findBySource`,async:!0,parameters:[`source: AuditSource`],returnType:`Promise<AuditLog[]>`,aiCallable:!1},{name:`findOnBehalfOf`,async:!0,parameters:[`profileId: string`],returnType:`Promise<AuditLog[]>`,aiCallable:!1},{name:`getEffectiveActor`,async:!0,parameters:[],returnType:`Promise<Profile | null>`,aiCallable:!1},{name:`getOnBehalfOf`,async:!0,parameters:[],returnType:`Promise<Profile | null>`,aiCallable:!1},{name:`getProfile`,async:!0,parameters:[],returnType:`Promise<Profile | null>`,aiCallable:!1},{name:`getRecentActivity`,async:!0,parameters:[`profileId: string`,`limit?: number`],returnType:`Promise<AuditLog[]>`,aiCallable:!1},{name:`getResourceTimeline`,async:!0,parameters:[`resourceType: string`,`resourceId: string`],returnType:`Promise<AuditLog[]>`,aiCallable:!1},{name:`record`,async:!0,parameters:[`options: object`],returnType:`Promise<AuditLog>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!1},{id:`@happyvertical/smrt-profiles:Bot`,name:`Bot`,collection:`profiles`,extends:`@happyvertical/smrt-profiles:Profile`,description:`Bot profile type`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`typeId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:ProfileType`},{name:`email`,type:`text`,required:!1},{name:`emailKey`,type:`text`,required:!1},{name:`name`,type:`text`,required:!0,default:``},{name:`description`,type:`text`,required:!1},{name:`isPublic`,type:`boolean`,required:!1,default:!1}],rest:[{method:`GET`,path:`/profiles`},{method:`GET`,path:`/profiles/[id]`},{method:`POST`,path:`/profiles`},{method:`PATCH`,path:`/profiles/[id]`},{method:`DELETE`,path:`/profiles/[id]`}],mcp:[{operation:`create`,name:`bot_create`},{operation:`get`,name:`bot_get`},{operation:`list`,name:`bot_list`},{operation:`update`,name:`bot_update`}],cli:[{operation:`addAsset`,name:`bot_addAsset`},{operation:`addMetadata`,name:`bot_addMetadata`},{operation:`addRelationship`,name:`bot_addRelationship`},{operation:`create`,name:`bot_create`},{operation:`delete`,name:`bot_delete`},{operation:`findByMetadata`,name:`bot_findByMetadata`},{operation:`findByType`,name:`bot_findByType`},{operation:`findRelated`,name:`bot_findRelated`},{operation:`generateApiKey`,name:`bot_generateApiKey`},{operation:`generateBio`,name:`bot_generateBio`},{operation:`get`,name:`bot_get`},{operation:`getActiveApiKeys`,name:`bot_getActiveApiKeys`},{operation:`getApiKeys`,name:`bot_getApiKeys`},{operation:`getAssets`,name:`bot_getAssets`},{operation:`getAuditLogs`,name:`bot_getAuditLogs`},{operation:`getLinks`,name:`bot_getLinks`},{operation:`getMetadata`,name:`bot_getMetadata`},{operation:`getNostrIdentities`,name:`bot_getNostrIdentities`},{operation:`getOidcIdentities`,name:`bot_getOidcIdentities`},{operation:`getRelatedProfiles`,name:`bot_getRelatedProfiles`},{operation:`getRelationships`,name:`bot_getRelationships`},{operation:`getTypeSlug`,name:`bot_getTypeSlug`},{operation:`linkNostrIdentity`,name:`bot_linkNostrIdentity`},{operation:`linkOidcIdentity`,name:`bot_linkOidcIdentity`},{operation:`list`,name:`bot_list`},{operation:`matches`,name:`bot_matches`},{operation:`recordAction`,name:`bot_recordAction`},{operation:`removeAsset`,name:`bot_removeAsset`},{operation:`removeMetadata`,name:`bot_removeMetadata`},{operation:`removeRelationship`,name:`bot_removeRelationship`},{operation:`searchByEmail`,name:`bot_searchByEmail`},{operation:`setLinks`,name:`bot_setLinks`},{operation:`setTypeBySlug`,name:`bot_setTypeBySlug`},{operation:`update`,name:`bot_update`},{operation:`updateMetadata`,name:`bot_updateMetadata`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`addMetadata`,async:!0,parameters:[`metafieldSlug: string`,`value: unknown`],returnType:`Promise<void>`,aiCallable:!1},{name:`addRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`,`contextProfile?: Profile`],returnType:`Promise<void>`,aiCallable:!1},{name:`generateApiKey`,async:!0,parameters:[`options: object`],returnType:`Promise<GenerateKeyResult>`,aiCallable:!1},{name:`generateBio`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`getActiveApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!1},{name:`getApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getAuditLogs`,async:!0,parameters:[`limit?: number`],returnType:`Promise<AuditLog[]>`,aiCallable:!1},{name:`getLinks`,async:!0,parameters:[],returnType:`Promise<ProfileLink[]>`,aiCallable:!1},{name:`getMetadata`,async:!0,parameters:[],returnType:`Promise<Record<string, string>>`,aiCallable:!1},{name:`getNostrIdentities`,async:!0,parameters:[],returnType:`Promise<NostrIdentity[]>`,aiCallable:!1},{name:`getOidcIdentities`,async:!0,parameters:[],returnType:`Promise<OidcIdentity[]>`,aiCallable:!1},{name:`getRelatedProfiles`,async:!0,parameters:[`relationshipSlug?: string`],returnType:`Promise<Profile[]>`,aiCallable:!1},{name:`getRelationships`,async:!0,parameters:[`options?: object`],returnType:`Promise<ProfileRelationship[]>`,aiCallable:!1},{name:`getTypeSlug`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`linkNostrIdentity`,async:!0,parameters:[`nostrData: object`],returnType:`Promise<NostrIdentity>`,aiCallable:!1},{name:`linkOidcIdentity`,async:!0,parameters:[`oidcData: object`],returnType:`Promise<OidcIdentity>`,aiCallable:!1},{name:`matches`,async:!0,parameters:[`criteria: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`recordAction`,async:!0,parameters:[`options: object`],returnType:`Promise<AuditLog>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeMetadata`,async:!0,parameters:[`metafieldSlug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`links: any`],returnType:`Promise<ProfileLink[]>`,aiCallable:!1},{name:`setTypeBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`updateMetadata`,async:!0,parameters:[`metadata: Record<string, unknown>`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:ProfileType`],exposed:!0},{id:`@happyvertical/smrt-profiles:MagicLinkToken`,name:`MagicLinkToken`,collection:`magiclinktokens`,fields:[{name:`nostrIdentityId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:NostrIdentity`},{name:`tokenHash`,type:`text`,required:!1,default:``},{name:`email`,type:`text`,required:!1,default:``},{name:`expiresAt`,type:`datetime`,required:!1},{name:`usedAt`,type:`datetime`,required:!1},{name:`requestedFromIp`,type:`text`,required:!1,default:``},{name:`createdAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`POST`,path:`/magiclinktokens/findByTokenHash`},{method:`POST`,path:`/magiclinktokens/findActiveForEmail`},{method:`POST`,path:`/magiclinktokens/findByIdentity`},{method:`POST`,path:`/magiclinktokens/countRecentByEmail`},{method:`POST`,path:`/magiclinktokens/countRecentByIp`},{method:`POST`,path:`/magiclinktokens/verify`},{method:`POST`,path:`/magiclinktokens/cleanupExpired`},{method:`POST`,path:`/magiclinktokens/revokeForIdentity`},{method:`POST`,path:`/magiclinktokens/isRateLimitedByEmail`},{method:`POST`,path:`/magiclinktokens/isRateLimitedByIp`},{method:`GET`,path:`/magiclinktokens`},{method:`GET`,path:`/magiclinktokens/[id]`},{method:`POST`,path:`/magiclinktokens`},{method:`PATCH`,path:`/magiclinktokens/[id]`},{method:`DELETE`,path:`/magiclinktokens/[id]`},{method:`POST`,path:`/magiclinktokens/hashToken`},{method:`POST`,path:`/magiclinktokens/[id]/isValid`},{method:`POST`,path:`/magiclinktokens/[id]/isExpired`},{method:`POST`,path:`/magiclinktokens/[id]/isUsed`},{method:`POST`,path:`/magiclinktokens/[id]/markUsed`},{method:`POST`,path:`/magiclinktokens/[id]/getNostrIdentity`},{method:`POST`,path:`/magiclinktokens/[id]/getTimeRemainingSeconds`}],mcp:[{operation:`create`,name:`magiclinktoken_create`},{operation:`delete`,name:`magiclinktoken_delete`},{operation:`generate`,name:`magiclinktoken_generate`},{operation:`get`,name:`magiclinktoken_get`},{operation:`getNostrIdentity`,name:`magiclinktoken_getnostridentity`},{operation:`getTimeRemainingSeconds`,name:`magiclinktoken_gettimeremainingseconds`},{operation:`hashToken`,name:`magiclinktoken_hashtoken`},{operation:`isExpired`,name:`magiclinktoken_isexpired`},{operation:`isUsed`,name:`magiclinktoken_isused`},{operation:`isValid`,name:`magiclinktoken_isvalid`},{operation:`list`,name:`magiclinktoken_list`},{operation:`markUsed`,name:`magiclinktoken_markused`},{operation:`update`,name:`magiclinktoken_update`},{operation:`verify`,name:`magiclinktoken_verify`}],cli:[{operation:`list`,name:`magiclinktoken_list`}],methods:[{name:`cleanupExpired`,async:!0,parameters:[],returnType:`Promise<number>`,aiCallable:!1},{name:`countRecentByEmail`,async:!0,parameters:[`email: string`,`withinMinutes: number`],returnType:`Promise<number>`,aiCallable:!1},{name:`countRecentByIp`,async:!0,parameters:[`ip: string`,`withinMinutes: number`],returnType:`Promise<number>`,aiCallable:!1},{name:`findActiveForEmail`,async:!0,parameters:[`email: string`],returnType:`Promise<MagicLinkToken[]>`,aiCallable:!1},{name:`findByIdentity`,async:!0,parameters:[`nostrIdentityId: string`],returnType:`Promise<MagicLinkToken[]>`,aiCallable:!1},{name:`findByTokenHash`,async:!0,parameters:[`tokenHash: string`],returnType:`Promise<MagicLinkToken | null>`,aiCallable:!1},{name:`getNostrIdentity`,async:!0,parameters:[],returnType:`Promise<NostrIdentity | null>`,aiCallable:!0},{name:`getTimeRemainingSeconds`,async:!1,parameters:[],returnType:`number`,aiCallable:!0},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isRateLimitedByEmail`,async:!0,parameters:[`email: string`,`maxPerHour?: number`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isRateLimitedByIp`,async:!0,parameters:[`ip: string`,`maxPerHour?: number`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isUsed`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isValid`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`markUsed`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`revokeForIdentity`,async:!0,parameters:[`nostrIdentityId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`verify`,async:!0,parameters:[`token: string`],returnType:`Promise<MagicLinkToken | null>`,aiCallable:!0}],references:[`@happyvertical/smrt-profiles:NostrIdentity`],exposed:!0},{id:`@happyvertical/smrt-profiles:NostrIdentity`,name:`NostrIdentity`,collection:`nostridentities`,fields:[{name:`profileId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`pubkey`,type:`text`,required:!1,default:``},{name:`encryptedPrivkey`,type:`text`,required:!1,default:``},{name:`encryptionIv`,type:`text`,required:!1,default:``},{name:`encryptionTag`,type:`text`,required:!1,default:``},{name:`email`,type:`text`,required:!1,default:``},{name:`nip05Username`,type:`text`,required:!1,default:``},{name:`lastUsedAt`,type:`datetime`,required:!1},{name:`verifiedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/nostridentities`},{method:`GET`,path:`/nostridentities/[id]`}],mcp:[{operation:`get`,name:`nostridentity_get`},{operation:`list`,name:`nostridentity_list`}],cli:[{operation:`get`,name:`nostridentity_get`},{operation:`list`,name:`nostridentity_list`}],methods:[{name:`createForProfile`,async:!0,parameters:[`profile: Profile`,`email: string`,`masterSecret: string`,`nip05Username?: string`],returnType:`Promise<NostrIdentity>`,aiCallable:!1},{name:`decryptPrivkey`,async:!1,parameters:[`masterSecret: string`],returnType:`string`,aiCallable:!1},{name:`findByEmail`,async:!0,parameters:[`email: string`],returnType:`Promise<NostrIdentity | null>`,aiCallable:!1},{name:`findByNip05`,async:!0,parameters:[`username: string`],returnType:`Promise<NostrIdentity | null>`,aiCallable:!1},{name:`findByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<NostrIdentity[]>`,aiCallable:!1},{name:`findByPubkey`,async:!0,parameters:[`pubkey: string`],returnType:`Promise<NostrIdentity | null>`,aiCallable:!1},{name:`getKeypair`,async:!1,parameters:[`masterSecret: string`],returnType:`object`,aiCallable:!1},{name:`getNip05Identifier`,async:!1,parameters:[`domain: string`],returnType:`string`,aiCallable:!1},{name:`getNip05Response`,async:!0,parameters:[`username?: string`],returnType:`Promise<Nip05Response>`,aiCallable:!1},{name:`getProfile`,async:!0,parameters:[],returnType:`Promise<Profile | null>`,aiCallable:!1},{name:`isNip05Available`,async:!0,parameters:[`username: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isVerified`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`linkToProfile`,async:!0,parameters:[`profile: Profile`,`nostrData: object`],returnType:`Promise<NostrIdentity>`,aiCallable:!1},{name:`markVerified`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`recordUsage`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`unlinkFromProfile`,async:!0,parameters:[`profileId: string`,`pubkey: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`updateNip05Username`,async:!0,parameters:[`identity: NostrIdentity`,`newUsername: string`],returnType:`Promise<NostrIdentity>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-profiles:OidcIdentity`,name:`OidcIdentity`,collection:`oidcidentities`,fields:[{name:`profileId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`provider`,type:`text`,required:!1},{name:`issuer`,type:`text`,required:!1},{name:`subject`,type:`text`,required:!1},{name:`identityKey`,type:`text`,required:!1},{name:`email`,type:`text`,required:!1},{name:`lastUsedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/oidcidentities`},{method:`GET`,path:`/oidcidentities/[id]`}],mcp:[{operation:`get`,name:`oidcidentity_get`},{operation:`list`,name:`oidcidentity_list`}],cli:[{operation:`get`,name:`oidcidentity_get`},{operation:`list`,name:`oidcidentity_list`}],methods:[{name:`findByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<OidcIdentity[]>`,aiCallable:!1},{name:`findByProvider`,async:!0,parameters:[`provider: string`],returnType:`Promise<OidcIdentity[]>`,aiCallable:!1},{name:`findBySubject`,async:!0,parameters:[`issuer: string`,`subject: string`],returnType:`Promise<OidcIdentity | null>`,aiCallable:!1},{name:`getProfile`,async:!0,parameters:[],returnType:`Promise<Profile | null>`,aiCallable:!1},{name:`linkToProfile`,async:!0,parameters:[`profile: Profile`,`oidcData: object`],returnType:`Promise<OidcIdentity>`,aiCallable:!1},{name:`recordUsage`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`unlinkFromProfile`,async:!0,parameters:[`profileId: string`,`issuer: string`,`subject: string`],returnType:`Promise<boolean>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-profiles:OidcProfileEmailReservation`,name:`OidcProfileEmailReservation`,collection:`oidcprofileemailreservations`,description:`Private database arbiter for canonical OIDC email provisioning races.`,fields:[{name:`profileId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`emailKey`,type:`text`,required:!0}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!1},{id:`@happyvertical/smrt-profiles:Organization`,name:`Organization`,collection:`profiles`,extends:`@happyvertical/smrt-profiles:Profile`,description:`Organization profile type`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`typeId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:ProfileType`},{name:`email`,type:`text`,required:!1},{name:`emailKey`,type:`text`,required:!1},{name:`name`,type:`text`,required:!0,default:``},{name:`description`,type:`text`,required:!1},{name:`isPublic`,type:`boolean`,required:!1,default:!1}],rest:[{method:`GET`,path:`/profiles`},{method:`GET`,path:`/profiles/[id]`},{method:`POST`,path:`/profiles`},{method:`PATCH`,path:`/profiles/[id]`},{method:`DELETE`,path:`/profiles/[id]`}],mcp:[{operation:`create`,name:`organization_create`},{operation:`get`,name:`organization_get`},{operation:`list`,name:`organization_list`},{operation:`update`,name:`organization_update`}],cli:[{operation:`addAsset`,name:`organization_addAsset`},{operation:`addMetadata`,name:`organization_addMetadata`},{operation:`addRelationship`,name:`organization_addRelationship`},{operation:`create`,name:`organization_create`},{operation:`delete`,name:`organization_delete`},{operation:`findByMetadata`,name:`organization_findByMetadata`},{operation:`findByType`,name:`organization_findByType`},{operation:`findRelated`,name:`organization_findRelated`},{operation:`generateApiKey`,name:`organization_generateApiKey`},{operation:`generateBio`,name:`organization_generateBio`},{operation:`get`,name:`organization_get`},{operation:`getActiveApiKeys`,name:`organization_getActiveApiKeys`},{operation:`getApiKeys`,name:`organization_getApiKeys`},{operation:`getAssets`,name:`organization_getAssets`},{operation:`getAuditLogs`,name:`organization_getAuditLogs`},{operation:`getLinks`,name:`organization_getLinks`},{operation:`getMetadata`,name:`organization_getMetadata`},{operation:`getNostrIdentities`,name:`organization_getNostrIdentities`},{operation:`getOidcIdentities`,name:`organization_getOidcIdentities`},{operation:`getRelatedProfiles`,name:`organization_getRelatedProfiles`},{operation:`getRelationships`,name:`organization_getRelationships`},{operation:`getTypeSlug`,name:`organization_getTypeSlug`},{operation:`linkNostrIdentity`,name:`organization_linkNostrIdentity`},{operation:`linkOidcIdentity`,name:`organization_linkOidcIdentity`},{operation:`list`,name:`organization_list`},{operation:`matches`,name:`organization_matches`},{operation:`recordAction`,name:`organization_recordAction`},{operation:`removeAsset`,name:`organization_removeAsset`},{operation:`removeMetadata`,name:`organization_removeMetadata`},{operation:`removeRelationship`,name:`organization_removeRelationship`},{operation:`searchByEmail`,name:`organization_searchByEmail`},{operation:`setLinks`,name:`organization_setLinks`},{operation:`setTypeBySlug`,name:`organization_setTypeBySlug`},{operation:`update`,name:`organization_update`},{operation:`updateMetadata`,name:`organization_updateMetadata`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`addMetadata`,async:!0,parameters:[`metafieldSlug: string`,`value: unknown`],returnType:`Promise<void>`,aiCallable:!1},{name:`addRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`,`contextProfile?: Profile`],returnType:`Promise<void>`,aiCallable:!1},{name:`generateApiKey`,async:!0,parameters:[`options: object`],returnType:`Promise<GenerateKeyResult>`,aiCallable:!1},{name:`generateBio`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`getActiveApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!1},{name:`getApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getAuditLogs`,async:!0,parameters:[`limit?: number`],returnType:`Promise<AuditLog[]>`,aiCallable:!1},{name:`getLinks`,async:!0,parameters:[],returnType:`Promise<ProfileLink[]>`,aiCallable:!1},{name:`getMetadata`,async:!0,parameters:[],returnType:`Promise<Record<string, string>>`,aiCallable:!1},{name:`getNostrIdentities`,async:!0,parameters:[],returnType:`Promise<NostrIdentity[]>`,aiCallable:!1},{name:`getOidcIdentities`,async:!0,parameters:[],returnType:`Promise<OidcIdentity[]>`,aiCallable:!1},{name:`getRelatedProfiles`,async:!0,parameters:[`relationshipSlug?: string`],returnType:`Promise<Profile[]>`,aiCallable:!1},{name:`getRelationships`,async:!0,parameters:[`options?: object`],returnType:`Promise<ProfileRelationship[]>`,aiCallable:!1},{name:`getTypeSlug`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`linkNostrIdentity`,async:!0,parameters:[`nostrData: object`],returnType:`Promise<NostrIdentity>`,aiCallable:!1},{name:`linkOidcIdentity`,async:!0,parameters:[`oidcData: object`],returnType:`Promise<OidcIdentity>`,aiCallable:!1},{name:`matches`,async:!0,parameters:[`criteria: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`recordAction`,async:!0,parameters:[`options: object`],returnType:`Promise<AuditLog>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeMetadata`,async:!0,parameters:[`metafieldSlug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`links: any`],returnType:`Promise<ProfileLink[]>`,aiCallable:!1},{name:`setTypeBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`updateMetadata`,async:!0,parameters:[`metadata: Record<string, unknown>`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:ProfileType`],exposed:!0},{id:`@happyvertical/smrt-profiles:Person`,name:`Person`,collection:`profiles`,extends:`@happyvertical/smrt-profiles:Profile`,description:`Person profile type`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`typeId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:ProfileType`},{name:`email`,type:`text`,required:!1},{name:`emailKey`,type:`text`,required:!1},{name:`name`,type:`text`,required:!0,default:``},{name:`description`,type:`text`,required:!1},{name:`isPublic`,type:`boolean`,required:!1,default:!1}],rest:[{method:`GET`,path:`/profiles`},{method:`GET`,path:`/profiles/[id]`},{method:`POST`,path:`/profiles`},{method:`PATCH`,path:`/profiles/[id]`},{method:`DELETE`,path:`/profiles/[id]`}],mcp:[{operation:`create`,name:`person_create`},{operation:`get`,name:`person_get`},{operation:`list`,name:`person_list`},{operation:`update`,name:`person_update`}],cli:[{operation:`addAsset`,name:`person_addAsset`},{operation:`addMetadata`,name:`person_addMetadata`},{operation:`addRelationship`,name:`person_addRelationship`},{operation:`create`,name:`person_create`},{operation:`delete`,name:`person_delete`},{operation:`findByMetadata`,name:`person_findByMetadata`},{operation:`findByType`,name:`person_findByType`},{operation:`findRelated`,name:`person_findRelated`},{operation:`generateApiKey`,name:`person_generateApiKey`},{operation:`generateBio`,name:`person_generateBio`},{operation:`get`,name:`person_get`},{operation:`getActiveApiKeys`,name:`person_getActiveApiKeys`},{operation:`getApiKeys`,name:`person_getApiKeys`},{operation:`getAssets`,name:`person_getAssets`},{operation:`getAuditLogs`,name:`person_getAuditLogs`},{operation:`getLinks`,name:`person_getLinks`},{operation:`getMetadata`,name:`person_getMetadata`},{operation:`getNostrIdentities`,name:`person_getNostrIdentities`},{operation:`getOidcIdentities`,name:`person_getOidcIdentities`},{operation:`getRelatedProfiles`,name:`person_getRelatedProfiles`},{operation:`getRelationships`,name:`person_getRelationships`},{operation:`getTypeSlug`,name:`person_getTypeSlug`},{operation:`linkNostrIdentity`,name:`person_linkNostrIdentity`},{operation:`linkOidcIdentity`,name:`person_linkOidcIdentity`},{operation:`list`,name:`person_list`},{operation:`matches`,name:`person_matches`},{operation:`recordAction`,name:`person_recordAction`},{operation:`removeAsset`,name:`person_removeAsset`},{operation:`removeMetadata`,name:`person_removeMetadata`},{operation:`removeRelationship`,name:`person_removeRelationship`},{operation:`searchByEmail`,name:`person_searchByEmail`},{operation:`setLinks`,name:`person_setLinks`},{operation:`setTypeBySlug`,name:`person_setTypeBySlug`},{operation:`update`,name:`person_update`},{operation:`updateMetadata`,name:`person_updateMetadata`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`addMetadata`,async:!0,parameters:[`metafieldSlug: string`,`value: unknown`],returnType:`Promise<void>`,aiCallable:!1},{name:`addRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`,`contextProfile?: Profile`],returnType:`Promise<void>`,aiCallable:!1},{name:`generateApiKey`,async:!0,parameters:[`options: object`],returnType:`Promise<GenerateKeyResult>`,aiCallable:!1},{name:`generateBio`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`getActiveApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!1},{name:`getApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getAuditLogs`,async:!0,parameters:[`limit?: number`],returnType:`Promise<AuditLog[]>`,aiCallable:!1},{name:`getLinks`,async:!0,parameters:[],returnType:`Promise<ProfileLink[]>`,aiCallable:!1},{name:`getMetadata`,async:!0,parameters:[],returnType:`Promise<Record<string, string>>`,aiCallable:!1},{name:`getNostrIdentities`,async:!0,parameters:[],returnType:`Promise<NostrIdentity[]>`,aiCallable:!1},{name:`getOidcIdentities`,async:!0,parameters:[],returnType:`Promise<OidcIdentity[]>`,aiCallable:!1},{name:`getRelatedProfiles`,async:!0,parameters:[`relationshipSlug?: string`],returnType:`Promise<Profile[]>`,aiCallable:!1},{name:`getRelationships`,async:!0,parameters:[`options?: object`],returnType:`Promise<ProfileRelationship[]>`,aiCallable:!1},{name:`getTypeSlug`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`linkNostrIdentity`,async:!0,parameters:[`nostrData: object`],returnType:`Promise<NostrIdentity>`,aiCallable:!1},{name:`linkOidcIdentity`,async:!0,parameters:[`oidcData: object`],returnType:`Promise<OidcIdentity>`,aiCallable:!1},{name:`matches`,async:!0,parameters:[`criteria: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`recordAction`,async:!0,parameters:[`options: object`],returnType:`Promise<AuditLog>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeMetadata`,async:!0,parameters:[`metafieldSlug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`links: any`],returnType:`Promise<ProfileLink[]>`,aiCallable:!1},{name:`setTypeBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`updateMetadata`,async:!0,parameters:[`metadata: Record<string, unknown>`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:ProfileType`],exposed:!0},{id:`@happyvertical/smrt-profiles:Profile`,name:`Profile`,collection:`profiles`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`typeId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:ProfileType`},{name:`email`,type:`text`,required:!1},{name:`emailKey`,type:`text`,required:!1},{name:`name`,type:`text`,required:!0,default:``},{name:`description`,type:`text`,required:!1},{name:`isPublic`,type:`boolean`,required:!1,default:!1}],rest:[{method:`GET`,path:`/profiles`},{method:`GET`,path:`/profiles/[id]`},{method:`POST`,path:`/profiles`},{method:`PATCH`,path:`/profiles/[id]`},{method:`DELETE`,path:`/profiles/[id]`}],mcp:[{operation:`create`,name:`profile_create`},{operation:`get`,name:`profile_get`},{operation:`list`,name:`profile_list`},{operation:`update`,name:`profile_update`}],cli:[{operation:`addAsset`,name:`profile_addAsset`},{operation:`addMetadata`,name:`profile_addMetadata`},{operation:`addRelationship`,name:`profile_addRelationship`},{operation:`create`,name:`profile_create`},{operation:`delete`,name:`profile_delete`},{operation:`findByMetadata`,name:`profile_findByMetadata`},{operation:`findByType`,name:`profile_findByType`},{operation:`findRelated`,name:`profile_findRelated`},{operation:`generateApiKey`,name:`profile_generateApiKey`},{operation:`generateBio`,name:`profile_generateBio`},{operation:`get`,name:`profile_get`},{operation:`getActiveApiKeys`,name:`profile_getActiveApiKeys`},{operation:`getApiKeys`,name:`profile_getApiKeys`},{operation:`getAssets`,name:`profile_getAssets`},{operation:`getAuditLogs`,name:`profile_getAuditLogs`},{operation:`getLinks`,name:`profile_getLinks`},{operation:`getMetadata`,name:`profile_getMetadata`},{operation:`getNostrIdentities`,name:`profile_getNostrIdentities`},{operation:`getOidcIdentities`,name:`profile_getOidcIdentities`},{operation:`getRelatedProfiles`,name:`profile_getRelatedProfiles`},{operation:`getRelationships`,name:`profile_getRelationships`},{operation:`getTypeSlug`,name:`profile_getTypeSlug`},{operation:`linkNostrIdentity`,name:`profile_linkNostrIdentity`},{operation:`linkOidcIdentity`,name:`profile_linkOidcIdentity`},{operation:`list`,name:`profile_list`},{operation:`matches`,name:`profile_matches`},{operation:`recordAction`,name:`profile_recordAction`},{operation:`removeAsset`,name:`profile_removeAsset`},{operation:`removeMetadata`,name:`profile_removeMetadata`},{operation:`removeRelationship`,name:`profile_removeRelationship`},{operation:`searchByEmail`,name:`profile_searchByEmail`},{operation:`setLinks`,name:`profile_setLinks`},{operation:`setTypeBySlug`,name:`profile_setTypeBySlug`},{operation:`update`,name:`profile_update`},{operation:`updateMetadata`,name:`profile_updateMetadata`},{operation:`addAsset`,name:`profilecollection_addAsset`},{operation:`batchGetMetadata`,name:`profilecollection_batchGetMetadata`},{operation:`batchUpdateMetadata`,name:`profilecollection_batchUpdateMetadata`},{operation:`findByEmail`,name:`profilecollection_findByEmail`},{operation:`findByTenant`,name:`profilecollection_findByTenant`},{operation:`findByType`,name:`profilecollection_findByType`},{operation:`findGlobal`,name:`profilecollection_findGlobal`},{operation:`findRelated`,name:`profilecollection_findRelated`},{operation:`findUniqueGlobalPersonByEmail`,name:`profilecollection_findUniqueGlobalPersonByEmail`},{operation:`findWithGlobals`,name:`profilecollection_findWithGlobals`},{operation:`getAssets`,name:`profilecollection_getAssets`},{operation:`getRelationshipNetwork`,name:`profilecollection_getRelationshipNetwork`},{operation:`removeAsset`,name:`profilecollection_removeAsset`},{operation:`requireCanonicalGlobalPerson`,name:`profilecollection_requireCanonicalGlobalPerson`},{operation:`reserveCanonicalIdentityEmail`,name:`profilecollection_reserveCanonicalIdentityEmail`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`addMetadata`,async:!0,parameters:[`metafieldSlug: string`,`value: unknown`],returnType:`Promise<void>`,aiCallable:!1},{name:`addRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`,`contextProfile?: Profile`],returnType:`Promise<void>`,aiCallable:!1},{name:`batchGetMetadata`,async:!0,parameters:[`profileIds: string[]`],returnType:`Promise<Map<string, Record<string, string>>>`,aiCallable:!1},{name:`batchUpdateMetadata`,async:!0,parameters:[`updates: Array<object>`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByEmail`,async:!0,parameters:[`email: string`],returnType:`Promise<Profile | null>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Profile[]>`,aiCallable:!1},{name:`findByType`,async:!0,parameters:[`typeSlug: string`],returnType:`Promise<Profile[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Profile[]>`,aiCallable:!1},{name:`findRelated`,async:!0,parameters:[`profileId: string`,`relationshipSlug?: string`],returnType:`Promise<Profile[]>`,aiCallable:!1},{name:`findUniqueGlobalPersonByEmail`,async:!0,parameters:[`email: string`],returnType:`Promise<Profile | null>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Profile[]>`,aiCallable:!1},{name:`generateApiKey`,async:!0,parameters:[`options: object`],returnType:`Promise<GenerateKeyResult>`,aiCallable:!1},{name:`generateBio`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`getActiveApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!1},{name:`getApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getAuditLogs`,async:!0,parameters:[`limit?: number`],returnType:`Promise<AuditLog[]>`,aiCallable:!1},{name:`getLinks`,async:!0,parameters:[],returnType:`Promise<ProfileLink[]>`,aiCallable:!1},{name:`getMetadata`,async:!0,parameters:[],returnType:`Promise<Record<string, string>>`,aiCallable:!1},{name:`getNostrIdentities`,async:!0,parameters:[],returnType:`Promise<NostrIdentity[]>`,aiCallable:!1},{name:`getOidcIdentities`,async:!0,parameters:[],returnType:`Promise<OidcIdentity[]>`,aiCallable:!1},{name:`getRelatedProfiles`,async:!0,parameters:[`relationshipSlug?: string`],returnType:`Promise<Profile[]>`,aiCallable:!1},{name:`getRelationshipNetwork`,async:!0,parameters:[`profileId: string`,`options?: object`],returnType:`Promise<Map<string, number>>`,aiCallable:!1},{name:`getRelationships`,async:!0,parameters:[`options?: object`],returnType:`Promise<ProfileRelationship[]>`,aiCallable:!1},{name:`getTypeSlug`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`linkNostrIdentity`,async:!0,parameters:[`nostrData: object`],returnType:`Promise<NostrIdentity>`,aiCallable:!1},{name:`linkOidcIdentity`,async:!0,parameters:[`oidcData: object`],returnType:`Promise<OidcIdentity>`,aiCallable:!1},{name:`matches`,async:!0,parameters:[`criteria: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`recordAction`,async:!0,parameters:[`options: object`],returnType:`Promise<AuditLog>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeMetadata`,async:!0,parameters:[`metafieldSlug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`requireCanonicalGlobalPerson`,async:!0,parameters:[`profileId: string`,`email?: string`],returnType:`Promise<Profile>`,aiCallable:!1},{name:`reserveCanonicalIdentityEmail`,async:!0,parameters:[`profileId: string`,`email?: string`],returnType:`Promise<Profile>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`links: any`],returnType:`Promise<ProfileLink[]>`,aiCallable:!1},{name:`setTypeBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`updateMetadata`,async:!0,parameters:[`metadata: Record<string, unknown>`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:ProfileType`],exposed:!0},{id:`@happyvertical/smrt-profiles:ProfileAsset`,name:`ProfileAsset`,collection:`profileassets`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`profileId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`assetId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-assets:Asset`},{name:`relationship`,type:`text`,required:!0},{name:`sortOrder`,type:`integer`,required:!0,default:0}],rest:[],mcp:[],cli:[],methods:[{name:`addAsset`,async:!0,parameters:[`profileId: string`,`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`attach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<TItem>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`profileId: string`,`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`profileId: string`,`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`leftId: string`,`rightIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-profiles:Profile`],exposed:!1},{id:`@happyvertical/smrt-profiles:ProfileLink`,name:`ProfileLink`,collection:`profilelinks`,display:{label:`label`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`profileId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`platform`,type:`text`,required:!0,default:`website`},{name:`url`,type:`text`,required:!0},{name:`label`,type:`text`,required:!1},{name:`sortOrder`,type:`integer`,required:!0,default:0}],rest:[],mcp:[],cli:[],methods:[{name:`getSlug`,async:!0,parameters:[],returnType:`Promise<string | null | undefined>`,aiCallable:!1},{name:`listForProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<ProfileLink[]>`,aiCallable:!1},{name:`reorder`,async:!0,parameters:[`profileId: string`,`linkIds: any`],returnType:`Promise<ProfileLink[]>`,aiCallable:!1},{name:`replaceForProfile`,async:!0,parameters:[`profileId: string`,`links: any`],returnType:`Promise<ProfileLink[]>`,aiCallable:!1},{name:`save`,async:!0,parameters:[`...args?: any`],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!1},{id:`@happyvertical/smrt-profiles:ProfileMetadata`,name:`ProfileMetadata`,collection:`profilemetadatas`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`profileId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`metafieldId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:ProfileMetafield`},{name:`value`,type:`text`,required:!0,default:``}],rest:[{method:`GET`,path:`/profilemetadatas`},{method:`GET`,path:`/profilemetadatas/[id]`},{method:`POST`,path:`/profilemetadatas`},{method:`PATCH`,path:`/profilemetadatas/[id]`},{method:`DELETE`,path:`/profilemetadatas/[id]`}],mcp:[{operation:`get`,name:`profilemetadata_get`},{operation:`list`,name:`profilemetadata_list`}],cli:[{operation:`create`,name:`profilemetadata_create`},{operation:`delete`,name:`profilemetadata_delete`},{operation:`get`,name:`profilemetadata_get`},{operation:`getMetafieldSlug`,name:`profilemetadata_getMetafieldSlug`},{operation:`list`,name:`profilemetadata_list`},{operation:`update`,name:`profilemetadata_update`},{operation:`validate`,name:`profilemetadata_validate`},{operation:`findProfilesByMetadata`,name:`profilemetadatacollection_findProfilesByMetadata`},{operation:`getByProfile`,name:`profilemetadatacollection_getByProfile`},{operation:`getMetadataObject`,name:`profilemetadatacollection_getMetadataObject`}],methods:[{name:`findProfilesByMetadata`,async:!0,parameters:[`metafieldId: string`,`value: unknown`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<ProfileMetadata[]>`,aiCallable:!1},{name:`getMetadataObject`,async:!0,parameters:[`profileId: string`],returnType:`Promise<Record<string, string>>`,aiCallable:!1},{name:`getMetafieldSlug`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`validate`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-profiles:ProfileMetafield`],exposed:!0},{id:`@happyvertical/smrt-profiles:ProfileMetafield`,name:`ProfileMetafield`,collection:`profilemetafields`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!0,default:``},{name:`description`,type:`text`,required:!1},{name:`validation`,type:`json`,required:!1}],rest:[{method:`GET`,path:`/profilemetafields`},{method:`GET`,path:`/profilemetafields/[id]`},{method:`POST`,path:`/profilemetafields`},{method:`PATCH`,path:`/profilemetafields/[id]`}],mcp:[{operation:`get`,name:`profilemetafield_get`},{operation:`list`,name:`profilemetafield_list`}],cli:[{operation:`create`,name:`profilemetafield_create`},{operation:`delete`,name:`profilemetafield_delete`},{operation:`get`,name:`profilemetafield_get`},{operation:`getBySlug`,name:`profilemetafield_getBySlug`},{operation:`getValidator`,name:`profilemetafield_getValidator`},{operation:`list`,name:`profilemetafield_list`},{operation:`registerValidator`,name:`profilemetafield_registerValidator`},{operation:`update`,name:`profilemetafield_update`},{operation:`validateValue`,name:`profilemetafield_validateValue`},{operation:`getBySlug`,name:`profilemetafieldcollection_getBySlug`},{operation:`getOrCreateBySlug`,name:`profilemetafieldcollection_getOrCreateBySlug`}],methods:[{name:`getBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<ProfileMetafield | null>`,aiCallable:!1},{name:`getOrCreateBySlug`,async:!0,parameters:[`slug: string`,`defaults: object`],returnType:`Promise<ProfileMetafield>`,aiCallable:!1},{name:`validateValue`,async:!0,parameters:[`value: unknown`],returnType:`Promise<boolean>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-profiles:ProfileRelationship`,name:`ProfileRelationship`,collection:`profilerelationships`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`fromProfileId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`toProfileId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`typeId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:ProfileRelationshipType`},{name:`contextProfileId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-profiles:Profile`}],rest:[{method:`GET`,path:`/profilerelationships`},{method:`GET`,path:`/profilerelationships/[id]`},{method:`POST`,path:`/profilerelationships`},{method:`DELETE`,path:`/profilerelationships/[id]`}],mcp:[{operation:`get`,name:`profilerelationship_get`},{operation:`list`,name:`profilerelationship_list`}],cli:[{operation:`addTerm`,name:`profilerelationship_addTerm`},{operation:`create`,name:`profilerelationship_create`},{operation:`delete`,name:`profilerelationship_delete`},{operation:`endCurrentTerm`,name:`profilerelationship_endCurrentTerm`},{operation:`get`,name:`profilerelationship_get`},{operation:`getActiveTerm`,name:`profilerelationship_getActiveTerm`},{operation:`getTerms`,name:`profilerelationship_getTerms`},{operation:`getTypeSlug`,name:`profilerelationship_getTypeSlug`},{operation:`list`,name:`profilerelationship_list`},{operation:`update`,name:`profilerelationship_update`},{operation:`exists`,name:`profilerelationshipcollection_exists`},{operation:`getForProfile`,name:`profilerelationshipcollection_getForProfile`},{operation:`getFromProfile`,name:`profilerelationshipcollection_getFromProfile`},{operation:`getToProfile`,name:`profilerelationshipcollection_getToProfile`}],methods:[{name:`addTerm`,async:!0,parameters:[`startedAt: Date`,`endedAt?: Date`],returnType:`Promise<void>`,aiCallable:!1},{name:`endCurrentTerm`,async:!0,parameters:[`endedAt: Date`],returnType:`Promise<void>`,aiCallable:!1},{name:`exists`,async:!0,parameters:[`fromProfileId: string`,`toProfileId: string`,`typeId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`getActiveTerm`,async:!0,parameters:[],returnType:`Promise<ProfileRelationshipTerm | null>`,aiCallable:!1},{name:`getForProfile`,async:!0,parameters:[`profileId: string`,`typeId?: string`],returnType:`Promise<ProfileRelationship[]>`,aiCallable:!1},{name:`getFromProfile`,async:!0,parameters:[`fromProfileId: string`,`typeId?: string`],returnType:`Promise<ProfileRelationship[]>`,aiCallable:!1},{name:`getTerms`,async:!0,parameters:[],returnType:`Promise<ProfileRelationshipTerm[]>`,aiCallable:!1},{name:`getToProfile`,async:!0,parameters:[`toProfileId: string`,`typeId?: string`],returnType:`Promise<ProfileRelationship[]>`,aiCallable:!1},{name:`getTypeSlug`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-profiles:ProfileRelationshipType`],exposed:!0},{id:`@happyvertical/smrt-profiles:ProfileRelationshipTerm`,name:`ProfileRelationshipTerm`,collection:`profilerelationshipterms`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`relationshipId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-profiles:ProfileRelationship`},{name:`startedAt`,type:`datetime`,required:!0},{name:`endedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/profilerelationshipterms`},{method:`GET`,path:`/profilerelationshipterms/[id]`},{method:`POST`,path:`/profilerelationshipterms`},{method:`PATCH`,path:`/profilerelationshipterms/[id]`},{method:`DELETE`,path:`/profilerelationshipterms/[id]`}],mcp:[{operation:`get`,name:`profilerelationshipterm_get`},{operation:`list`,name:`profilerelationshipterm_list`}],cli:[{operation:`create`,name:`profilerelationshipterm_create`},{operation:`delete`,name:`profilerelationshipterm_delete`},{operation:`end`,name:`profilerelationshipterm_end`},{operation:`get`,name:`profilerelationshipterm_get`},{operation:`getDurationDays`,name:`profilerelationshipterm_getDurationDays`},{operation:`isActive`,name:`profilerelationshipterm_isActive`},{operation:`list`,name:`profilerelationshipterm_list`},{operation:`update`,name:`profilerelationshipterm_update`},{operation:`getActiveTerm`,name:`profilerelationshiptermcollection_getActiveTerm`},{operation:`getByRelationship`,name:`profilerelationshiptermcollection_getByRelationship`},{operation:`getHistoricalTerms`,name:`profilerelationshiptermcollection_getHistoricalTerms`}],methods:[{name:`end`,async:!0,parameters:[`endedAt?: Date`],returnType:`Promise<void>`,aiCallable:!1},{name:`getActiveTerm`,async:!0,parameters:[`relationshipId: string`],returnType:`Promise<ProfileRelationshipTerm | null>`,aiCallable:!1},{name:`getByRelationship`,async:!0,parameters:[`relationshipId: string`],returnType:`Promise<ProfileRelationshipTerm[]>`,aiCallable:!1},{name:`getDurationDays`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`getHistoricalTerms`,async:!0,parameters:[`relationshipId: string`],returnType:`Promise<ProfileRelationshipTerm[]>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:ProfileRelationship`],exposed:!0},{id:`@happyvertical/smrt-profiles:ProfileRelationshipType`,name:`ProfileRelationshipType`,collection:`profilerelationshiptypes`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`name`,type:`text`,required:!0,default:``},{name:`reciprocal`,type:`boolean`,required:!1,default:!0}],rest:[{method:`GET`,path:`/profilerelationshiptypes`},{method:`GET`,path:`/profilerelationshiptypes/[id]`},{method:`POST`,path:`/profilerelationshiptypes`},{method:`PATCH`,path:`/profilerelationshiptypes/[id]`}],mcp:[{operation:`get`,name:`profilerelationshiptype_get`},{operation:`list`,name:`profilerelationshiptype_list`}],cli:[{operation:`create`,name:`profilerelationshiptype_create`},{operation:`delete`,name:`profilerelationshiptype_delete`},{operation:`get`,name:`profilerelationshiptype_get`},{operation:`getBySlug`,name:`profilerelationshiptype_getBySlug`},{operation:`getReciprocalHandler`,name:`profilerelationshiptype_getReciprocalHandler`},{operation:`isReciprocal`,name:`profilerelationshiptype_isReciprocal`},{operation:`list`,name:`profilerelationshiptype_list`},{operation:`registerReciprocalHandler`,name:`profilerelationshiptype_registerReciprocalHandler`},{operation:`update`,name:`profilerelationshiptype_update`},{operation:`getBySlug`,name:`profilerelationshiptypecollection_getBySlug`},{operation:`getDirectional`,name:`profilerelationshiptypecollection_getDirectional`},{operation:`getOrCreateBySlug`,name:`profilerelationshiptypecollection_getOrCreateBySlug`},{operation:`getReciprocal`,name:`profilerelationshiptypecollection_getReciprocal`}],methods:[{name:`getBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<ProfileRelationshipType | null>`,aiCallable:!1},{name:`getDirectional`,async:!0,parameters:[],returnType:`Promise<ProfileRelationshipType[]>`,aiCallable:!1},{name:`getOrCreateBySlug`,async:!0,parameters:[`slug: string`,`defaults: object`],returnType:`Promise<ProfileRelationshipType>`,aiCallable:!1},{name:`getReciprocal`,async:!0,parameters:[],returnType:`Promise<ProfileRelationshipType[]>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-profiles:ProfileType`,name:`ProfileType`,collection:`profiletypes`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!0,default:``},{name:`description`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/profiletypes`},{method:`GET`,path:`/profiletypes/[id]`},{method:`POST`,path:`/profiletypes`},{method:`PATCH`,path:`/profiletypes/[id]`}],mcp:[{operation:`get`,name:`profiletype_get`},{operation:`list`,name:`profiletype_list`}],cli:[{operation:`create`,name:`profiletype_create`},{operation:`delete`,name:`profiletype_delete`},{operation:`get`,name:`profiletype_get`},{operation:`getBySlug`,name:`profiletype_getBySlug`},{operation:`list`,name:`profiletype_list`},{operation:`update`,name:`profiletype_update`},{operation:`getAvailableById`,name:`profiletypecollection_getAvailableById`},{operation:`getBySlug`,name:`profiletypecollection_getBySlug`},{operation:`getOrCreateBySlug`,name:`profiletypecollection_getOrCreateBySlug`},{operation:`getOrCreateGlobalBySlug`,name:`profiletypecollection_getOrCreateGlobalBySlug`}],methods:[{name:`getAvailableById`,async:!0,parameters:[`id: string`,`tenantId: string`],returnType:`Promise<ProfileType | null>`,aiCallable:!1},{name:`getBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<ProfileType | null>`,aiCallable:!1},{name:`getOrCreateBySlug`,async:!0,parameters:[`slug: string`,`defaults: object`],returnType:`Promise<ProfileType>`,aiCallable:!1},{name:`getOrCreateGlobalBySlug`,async:!0,parameters:[`slug: string`,`defaults: object`],returnType:`Promise<ProfileType>`,aiCallable:!1}],references:[],exposed:!0}],dependencies:[`assets`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3617`,`#3624`,`#3626`],reason:`node:crypto in root; core migrations (node:os)`,via:[`@happyvertical/smrt-tenancy`]},recipes:[{id:`profiles.audit-log`,label:`Activity log`,summary:`Review who changed a record and when.`,synonyms:[`audit trail`,`record history`,`activity`],models:[`@happyvertical/smrt-profiles:AuditLog`],nav:[],requires:[],group:{id:`activity`,label:`Activity`,summary:`Review authorized record history independently of messaging.`},section:{id:`activity`,label:`Activity`,icon:`book`,description:`See who changed records and why.`},help:{markdown:`## Activity log
779
- Review changes to records you are authorized to inspect. Each activity shows the actor, action, time, and recorded reason or resource.
780
- Open the related record when your application provides a link.
781
-
782
- ## Record history
783
- The application enables auditing on selected models and authorizes audit reads. Only recorded events appear; enabling auditing does not reconstruct earlier changes.
784
- Sensitive audit details are available only through the application's authorized history service.
785
- `,fieldRefs:[]},surfaces:[{kind:`route`,path:`/activity`,export:`@happyvertical/smrt-svelte#ActivityList`,label:`Activity log`}],providers:[{id:`audit-trail`,kind:`activity`,options:[`audit-log`],required:!0}],runtime:`both`,demoSeed:{data:{entries:[{id:`demo-audit`,title:`Demo colleague · updated`,detail:`Approved a fictional record.`,occurredAt:`2026-01-01T12:00:00Z`,href:null}]}},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: node:crypto in root; core migrations (node:os); and its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3617, #3624, #3626).`]}}]},{id:`projects`,packageName:`@happyvertical/smrt-projects`,version:`0.57.9`,description:`Provider-agnostic project management models (Issues, PRs, Repositories, Projects) for SMRT framework`,models:[{id:`@happyvertical/smrt-projects:AssistanceRequest`,name:`AssistanceRequest`,collection:`assistancerequests`,description:`Lossless conversational intake before support/development classification.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`integrationId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-projects:ProjectIntegration`},{name:`requesterId`,type:`text`,required:!1},{name:`subject`,type:`text`,required:!1},{name:`applicationContext`,type:`text`,required:!1},{name:`conversation`,type:`text`,required:!1},{name:`evidence`,type:`text`,required:!1},{name:`classification`,type:`text`,required:!1,enum:[`unclassified`,`support`,`development`,`both`]},{name:`supportCaseId`,type:`text`,required:!1},{name:`developmentRequestId`,type:`text`,required:!1},{name:`deliveryHandoffLinkedAt`,type:`datetime`,required:!1},{name:`createdAt`,type:`datetime`,required:!1,system:!0}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-projects:ProjectIntegration`],exposed:!1},{id:`@happyvertical/smrt-projects:AssistanceRequestEvent`,name:`AssistanceRequestEvent`,collection:`assistancerequestevents`,description:`Append-only explanation of Assistance Request routing decisions.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`assistanceRequestId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-projects:AssistanceRequest`},{name:`priorClassification`,type:`text`,required:!1,enum:[`unclassified`,`support`,`development`,`both`]},{name:`resultingClassification`,type:`text`,required:!1,enum:[`unclassified`,`support`,`development`,`both`]},{name:`actorRef`,type:`text`,required:!1},{name:`reason`,type:`text`,required:!1},{name:`resultingLinks`,type:`text`,required:!1},{name:`occurredAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-projects:AssistanceRequest`],exposed:!1},{id:`@happyvertical/smrt-projects:Comment`,name:`Comment`,collection:`comments`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`issueId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-projects:Issue`,description:`The issue this comment is on.`},{name:`commentId`,type:`text`,required:!1,default:``},{name:`body`,type:`text`,required:!1,default:``,description:`The comment text.`},{name:`author`,type:`text`,required:!1,default:``,description:`Who wrote it.`},{name:`createdAt`,type:`datetime`,required:!1,system:!0},{name:`updatedAt`,type:`datetime`,required:!1,system:!0},{name:`url`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/comments`},{method:`GET`,path:`/comments/[id]`}],mcp:[{operation:`get`,name:`comment_get`},{operation:`list`,name:`comment_list`}],cli:[{operation:`get`,name:`comment_get`},{operation:`list`,name:`comment_list`}],methods:[{name:`extractActionItems`,async:!0,parameters:[],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getSentiment`,async:!0,parameters:[],returnType:`Promise<CommentSentiment>`,aiCallable:!1},{name:`isApproval`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isQuestion`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`requestsChanges`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`summarize`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1}],references:[`@happyvertical/smrt-projects:Issue`],exposed:!0},{id:`@happyvertical/smrt-projects:DevelopmentRequest`,name:`DevelopmentRequest`,collection:`developmentrequests`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`projectId`,type:`text`,required:!1,default:``},{name:`integrationId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-projects:ProjectIntegration`},{name:`requesterId`,type:`text`,required:!1,default:``},{name:`participantId`,type:`text`,required:!1,default:``},{name:`type`,type:`text`,required:!1,default:`feature`},{name:`description`,type:`text`,required:!1,default:``},{name:`evidence`,type:`text`,required:!1,default:`[]`},{name:`visibility`,type:`text`,required:!1,default:`requester`,enum:[`requester`,`workspace`,`public`,`project_team`,`internal`]},{name:`origin`,type:`text`,required:!1,default:`managed-app`},{name:`discussion`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,default:`submitted`,enum:[`submitted`,`triaged`,`planned`,`in_progress`,`completed`,`declined`]}],rest:[],mcp:[],cli:[],methods:[{name:`createManaged`,async:!0,parameters:[`input: any`],returnType:`Promise<DevelopmentRequest>`,aiCallable:!1},{name:`getEvidence`,async:!1,parameters:[],returnType:`DevelopmentRequestEvidence[]`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`listByIntegrationRequester`,async:!0,parameters:[`input: object`],returnType:`Promise<DevelopmentRequest[]>`,aiCallable:!1},{name:`listForProject`,async:!0,parameters:[`tenantId: string`,`projectId: string`,`status?: DevelopmentRequestStatus`],returnType:`Promise<DevelopmentRequest[]>`,aiCallable:!1},{name:`setEvidence`,async:!1,parameters:[`value: DevelopmentRequestEvidence[] | string`],returnType:`void`,aiCallable:!1},{name:`transitionStatus`,async:!0,parameters:[`tenantId: string`,`requestId: string`,`transition: DevelopmentRequestTransitionInput`],returnType:`Promise<DevelopmentRequest>`,aiCallable:!1}],references:[`@happyvertical/smrt-projects:ProjectIntegration`],exposed:!1},{id:`@happyvertical/smrt-projects:DevelopmentRequestHistory`,name:`DevelopmentRequestHistory`,collection:`developmentrequesthistories`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`requestId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-projects:DevelopmentRequest`},{name:`fromStatus`,type:`text`,required:!1,default:``},{name:`toStatus`,type:`text`,required:!1,default:`submitted`,enum:[`submitted`,`triaged`,`planned`,`in_progress`,`completed`,`declined`]},{name:`actorType`,type:`text`,required:!1,default:`system`,enum:[`integration`,`participant`,`system`]},{name:`actorId`,type:`text`,required:!1,default:``},{name:`note`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`listForRequest`,async:!0,parameters:[`tenantId: string`,`requestId: string`],returnType:`Promise<DevelopmentRequestHistory[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-projects:DevelopmentRequest`],exposed:!1},{id:`@happyvertical/smrt-projects:DevelopmentRequestWorkLink`,name:`DevelopmentRequestWorkLink`,collection:`developmentrequestworklinks`,description:`Provider-neutral connection from a Development Request to canonical work.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`requestId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-projects:DevelopmentRequest`},{name:`workItemType`,type:`text`,required:!1},{name:`workItemId`,type:`text`,required:!1},{name:`canonicalStatus`,type:`text`,required:!1},{name:`providerRef`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1},{name:`lastProjectedAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-projects:DevelopmentRequest`],exposed:!1},{id:`@happyvertical/smrt-projects:Issue`,name:`Issue`,collection:`issues`,display:{label:`title`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`repositoryId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-projects:Repository`},{name:`projectId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-projects:Project`,description:`The project this issue belongs to.`},{name:`number`,type:`integer`,required:!1,default:0},{name:`nodeId`,type:`text`,required:!1,default:``},{name:`title`,type:`text`,required:!1,default:``,description:`A short summary of the issue.`},{name:`body`,type:`text`,required:!1,default:``,description:`The full description.`},{name:`state`,type:`text`,required:!1,default:`open`,enum:[`open`,`closed`],description:`open or closed.`},{name:`author`,type:`text`,required:!1,default:``,description:`Who raised the issue.`},{name:`labels`,type:`json`,required:!1,description:`The labels attached to the issue.`},{name:`assignees`,type:`json`,required:!1,description:`The people working on it.`},{name:`commentsCount`,type:`integer`,required:!1,default:0},{name:`lastSyncedAt`,type:`datetime`,required:!1},{name:`originalBody`,type:`text`,required:!1,default:``},{name:`synthesisCount`,type:`integer`,required:!1,default:0}],rest:[{method:`GET`,path:`/issues`},{method:`GET`,path:`/issues/[id]`},{method:`POST`,path:`/issues`},{method:`PATCH`,path:`/issues/[id]`}],mcp:[{operation:`get`,name:`issue_get`},{operation:`incorporateFeedback`,name:`issue_incorporatefeedback`},{operation:`list`,name:`issue_list`},{operation:`sync`,name:`issue_sync`}],cli:[{operation:`get`,name:`issue_get`},{operation:`incorporateFeedback`,name:`issue_incorporateFeedback`},{operation:`list`,name:`issue_list`},{operation:`rollback`,name:`issue_rollback`},{operation:`sync`,name:`issue_sync`}],methods:[{name:`addComment`,async:!0,parameters:[`body: string`],returnType:`Promise<Comment>`,aiCallable:!1},{name:`addLabels`,async:!0,parameters:[`labels: string[]`],returnType:`Promise<void>`,aiCallable:!1},{name:`assign`,async:!0,parameters:[`assignees: string[]`],returnType:`Promise<void>`,aiCallable:!1},{name:`batchSync`,async:!0,parameters:[`repository: Repository`,`options?: object`],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`clearCache`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`close`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`discover`,async:!0,parameters:[`options: object`],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`findByAssignee`,async:!0,parameters:[`assignee: string`,`repositoryId?: string`],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`findByLabel`,async:!0,parameters:[`label: string`,`repositoryId?: string`],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`findByNumber`,async:!0,parameters:[`repositoryId: string`,`number: number`],returnType:`Promise<Issue | null>`,aiCallable:!1},{name:`findByProject`,async:!0,parameters:[`projectId: string`],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`findByRepository`,async:!0,parameters:[`repositoryId: string`],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`findNeedingReview`,async:!0,parameters:[`repositoryId?: string`],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`findOpen`,async:!0,parameters:[`repositoryId?: string`],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`findWithUnincorporatedFeedback`,async:!0,parameters:[`repositoryId?: string`],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`getClient`,async:!0,parameters:[],returnType:`Promise<IRepository>`,aiCallable:!1},{name:`getComments`,async:!0,parameters:[],returnType:`Promise<Comment[]>`,aiCallable:!1},{name:`getRepository`,async:!0,parameters:[],returnType:`Promise<Repository>`,aiCallable:!1},{name:`getUrl`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`hasRepository`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`incorporateFeedback`,async:!0,parameters:[`options?: IncorporateFeedbackOptions`],returnType:`Promise<IncorporateFeedbackResult>`,aiCallable:!0},{name:`isBugReport`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isFeatureRequest`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`needsReview`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`removeLabel`,async:!0,parameters:[`label: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`rollback`,async:!0,parameters:[],returnType:`Promise<object>`,aiCallable:!1},{name:`suggestLabels`,async:!0,parameters:[`vocabulary?: IssueLabelVocabulary`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`sync`,async:!0,parameters:[`options?: SyncOptions`],returnType:`Promise<this>`,aiCallable:!0}],references:[`@happyvertical/smrt-projects:Project`,`@happyvertical/smrt-projects:Repository`],exposed:!0},{id:`@happyvertical/smrt-projects:Label`,name:`Label`,collection:`labels`,display:{label:`name`},fields:[{name:`repositoryId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-projects:Repository`},{name:`projectId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-projects:Project`,description:`The project this label belongs to.`},{name:`name`,type:`text`,required:!1,default:``,description:`The label's name, for example bug.`},{name:`color`,type:`text`,required:!1,default:``,description:`The label's colour.`},{name:`description`,type:`text`,required:!1,default:``,description:`What the label means.`}],rest:[{method:`GET`,path:`/labels`},{method:`GET`,path:`/labels/[id]`},{method:`POST`,path:`/labels`},{method:`PATCH`,path:`/labels/[id]`},{method:`DELETE`,path:`/labels/[id]`}],mcp:[{operation:`create`,name:`label_create`},{operation:`get`,name:`label_get`},{operation:`list`,name:`label_list`}],cli:[{operation:`create`,name:`label_create`},{operation:`delete`,name:`label_delete`},{operation:`get`,name:`label_get`},{operation:`list`,name:`label_list`},{operation:`update`,name:`label_update`}],methods:[{name:`createInRepository`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`getCategory`,async:!1,parameters:[],returnType:`'type' | 'priority' | 'status' | 'area' | 'other'`,aiCallable:!1},{name:`getHexColor`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`getPriorityLevel`,async:!1,parameters:[],returnType:`number | null`,aiCallable:!1},{name:`isPriorityLabel`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isStatusLabel`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isTypeLabel`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`updateInRepository`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-projects:Project`,`@happyvertical/smrt-projects:Repository`],exposed:!0},{id:`@happyvertical/smrt-projects:PreviewApproval`,name:`PreviewApproval`,collection:`previewapprovals`,description:`Client decision state for one preview produced during delivery.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`requestId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-projects:DevelopmentRequest`},{name:`previewId`,type:`text`,required:!1},{name:`previewUrl`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`pending`,`approved`,`rejected`,`stale`]},{name:`decidedByRef`,type:`text`,required:!1},{name:`reason`,type:`text`,required:!1},{name:`createdAt`,type:`datetime`,required:!1,system:!0},{name:`decidedAt`,type:`datetime`,required:!1},{name:`staleAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-projects:DevelopmentRequest`],exposed:!1},{id:`@happyvertical/smrt-projects:Project`,name:`Project`,collection:`projects`,display:{label:`title`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`projectId`,type:`text`,required:!1,default:``},{name:`projectNumber`,type:`integer`,required:!1,default:0},{name:`title`,type:`text`,required:!1,default:``,description:`The project's name.`},{name:`description`,type:`text`,required:!1,default:``,description:`What the project is about.`},{name:`owner`,type:`text`,required:!1,default:``,description:`Who owns or runs the project.`},{name:`url`,type:`text`,required:!1,default:``,description:`A link to the project elsewhere.`},{name:`providerType`,type:`text`,required:!1,default:`github`,enum:[`github`,`jira`,`linear`,`zenhub`]},{name:`tokenConfigKey`,type:`text`,required:!1,default:`GITHUB_TOKEN`},{name:`statuses`,type:`json`,required:!1},{name:`fields`,type:`json`,required:!1},{name:`statusFieldId`,type:`text`,required:!1,default:``},{name:`statusOptions`,type:`json`,required:!1},{name:`lastSyncedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/projects`},{method:`GET`,path:`/projects/[id]`},{method:`POST`,path:`/projects`},{method:`PATCH`,path:`/projects/[id]`}],mcp:[{operation:`addItem`,name:`project_additem`},{operation:`get`,name:`project_get`},{operation:`list`,name:`project_list`},{operation:`sync`,name:`project_sync`},{operation:`updateItemStatus`,name:`project_updateitemstatus`}],cli:[{operation:`addItem`,name:`project_addItem`},{operation:`get`,name:`project_get`},{operation:`list`,name:`project_list`},{operation:`listItems`,name:`project_listItems`},{operation:`sync`,name:`project_sync`},{operation:`updateItemStatus`,name:`project_updateItemStatus`}],methods:[{name:`addItem`,async:!0,parameters:[`item: Issue | PullRequest`],returnType:`Promise<ProjectItem>`,aiCallable:!0},{name:`analyzeHealth`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`clearClient`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`findByOwner`,async:!0,parameters:[`owner: string`],returnType:`Promise<Project[]>`,aiCallable:!1},{name:`findByProvider`,async:!0,parameters:[`providerType: ProjectProviderType`],returnType:`Promise<Project[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Project[]>`,aiCallable:!1},{name:`findByTitle`,async:!0,parameters:[`title: string`],returnType:`Promise<Project | null>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Project[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Project[]>`,aiCallable:!1},{name:`findWithItemsInStatus`,async:!0,parameters:[`status: string`],returnType:`Promise<Project[]>`,aiCallable:!1},{name:`getClient`,async:!0,parameters:[],returnType:`Promise<IProject>`,aiCallable:!1},{name:`getFields`,async:!0,parameters:[],returnType:`Promise<ProjectField[]>`,aiCallable:!1},{name:`getItem`,async:!0,parameters:[`itemId: string`],returnType:`Promise<ProjectItem | null>`,aiCallable:!1},{name:`getItemsByStatus`,async:!0,parameters:[`status: string`],returnType:`Promise<ProjectItem[]>`,aiCallable:!1},{name:`getOrCreate`,async:!0,parameters:[`projectId: string`,`options?: object`],returnType:`Promise<Project>`,aiCallable:!1},{name:`getStatistics`,async:!0,parameters:[`projectId: string`],returnType:`Promise<object>`,aiCallable:!1},{name:`getStatuses`,async:!0,parameters:[],returnType:`Promise<ProjectStatus[]>`,aiCallable:!1},{name:`listItems`,async:!0,parameters:[`filters?: ItemFilters`],returnType:`Promise<ProjectItem[]>`,aiCallable:!1},{name:`moveItem`,async:!0,parameters:[`item: Issue | PullRequest`,`status: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeItem`,async:!0,parameters:[`itemId: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`sync`,async:!0,parameters:[`options?: SyncOptions`],returnType:`Promise<this>`,aiCallable:!0},{name:`syncAll`,async:!0,parameters:[`options?: object`],returnType:`Promise<Project[]>`,aiCallable:!1},{name:`updateItemField`,async:!0,parameters:[`itemId: string`,`fieldId: string`,`value: unknown`],returnType:`Promise<void>`,aiCallable:!1},{name:`updateItemStatus`,async:!0,parameters:[`itemId: string`,`status: string`],returnType:`Promise<void>`,aiCallable:!0}],references:[],exposed:!0},{id:`@happyvertical/smrt-projects:ProjectDeliveryEvent`,name:`ProjectDeliveryEvent`,collection:`projectdeliveryevents`,description:`Ordered, idempotent delivery update emitted by the control plane.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`integrationId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-projects:ProjectIntegration`},{name:`requestId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-projects:DevelopmentRequest`},{name:`idempotencyKey`,type:`text`,required:!1},{name:`sequence`,type:`integer`,required:!1,default:0},{name:`type`,type:`text`,required:!1,enum:[`work_linked`,`branch`,`pull_request`,`ci`,`preview`,`approval`,`deployment`,`completed`,`rejected`]},{name:`payload`,type:`text`,required:!1},{name:`occurredAt`,type:`datetime`,required:!1},{name:`deliveredAt`,type:`datetime`,required:!1},{name:`deliveryAttempts`,type:`integer`,required:!1,default:0},{name:`lastDeliveryError`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-projects:DevelopmentRequest`,`@happyvertical/smrt-projects:ProjectIntegration`],exposed:!1},{id:`@happyvertical/smrt-projects:ProjectIntegration`,name:`ProjectIntegration`,collection:`projectintegrations`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`projectId`,type:`text`,required:!1,default:``},{name:`name`,type:`text`,required:!1,default:``},{name:`credentialHash`,type:`text`,required:!1,default:``},{name:`capabilities`,type:`json`,required:!1},{name:`status`,type:`text`,required:!1,default:`active`,enum:[`active`,`revoked`]},{name:`revokedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/projectintegrations`},{method:`GET`,path:`/projectintegrations/[id]`}],mcp:[{operation:`get`,name:`projectintegration_get`},{operation:`list`,name:`projectintegration_list`}],cli:[{operation:`get`,name:`projectintegration_get`},{operation:`list`,name:`projectintegration_list`}],methods:[{name:`authenticate`,async:!0,parameters:[`credential: string`],returnType:`Promise<ProjectIntegration | null>`,aiCallable:!1},{name:`findActive`,async:!0,parameters:[`tenantId: string`,`integrationId: string`],returnType:`Promise<ProjectIntegration | null>`,aiCallable:!1},{name:`hasCapability`,async:!1,parameters:[`capability: ProjectIntegrationCapability`],returnType:`boolean`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`listForProject`,async:!0,parameters:[`tenantId: string`,`projectId: string`],returnType:`Promise<ProjectIntegration[]>`,aiCallable:!1},{name:`provision`,async:!0,parameters:[`input: object`],returnType:`Promise<object>`,aiCallable:!1},{name:`revoke`,async:!0,parameters:[`tenantId: string`,`integrationId: string`],returnType:`Promise<ProjectIntegration>`,aiCallable:!1},{name:`rotate`,async:!0,parameters:[`tenantId: string`,`integrationId: string`],returnType:`Promise<object>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-projects:ProjectIntegrationAudit`,name:`ProjectIntegrationAudit`,collection:`projectintegrationaudits`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`integrationId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-projects:ProjectIntegration`},{name:`action`,type:`text`,required:!1,default:`created`,enum:[`created`,`rotated`,`revoked`]},{name:`note`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`listForIntegration`,async:!0,parameters:[`tenantId: string`,`integrationId: string`],returnType:`Promise<ProjectIntegrationAudit[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-projects:ProjectIntegration`],exposed:!1},{id:`@happyvertical/smrt-projects:PullRequest`,name:`PullRequest`,collection:`issues`,extends:`@happyvertical/smrt-projects:Issue`,display:{label:`title`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`repositoryId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-projects:Repository`},{name:`projectId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-projects:Project`,description:`The project this issue belongs to.`},{name:`number`,type:`integer`,required:!1,default:0},{name:`nodeId`,type:`text`,required:!1,default:``},{name:`title`,type:`text`,required:!1,default:``,description:`A short summary of the issue.`},{name:`body`,type:`text`,required:!1,default:``,description:`The full description.`},{name:`state`,type:`text`,required:!1,default:`open`,enum:[`open`,`closed`],description:`open or closed.`},{name:`author`,type:`text`,required:!1,default:``,description:`Who raised the issue.`},{name:`labels`,type:`json`,required:!1,description:`The labels attached to the issue.`},{name:`assignees`,type:`json`,required:!1,description:`The people working on it.`},{name:`commentsCount`,type:`integer`,required:!1,default:0},{name:`lastSyncedAt`,type:`datetime`,required:!1},{name:`originalBody`,type:`text`,required:!1,default:``},{name:`synthesisCount`,type:`integer`,required:!1,default:0},{name:`headRef`,type:`text`,required:!1,default:``},{name:`baseRef`,type:`text`,required:!1,default:``},{name:`merged`,type:`boolean`,required:!1,default:!1},{name:`mergedAt`,type:`datetime`,required:!1},{name:`mergeable`,type:`boolean`,required:!1,default:!0},{name:`draft`,type:`boolean`,required:!1,default:!1},{name:`additions`,type:`integer`,required:!1,default:0},{name:`deletions`,type:`integer`,required:!1,default:0},{name:`changedFiles`,type:`integer`,required:!1,default:0}],rest:[{method:`GET`,path:`/issues`},{method:`GET`,path:`/issues/[id]`},{method:`POST`,path:`/issues`},{method:`PATCH`,path:`/issues/[id]`}],mcp:[{operation:`get`,name:`pullrequest_get`},{operation:`list`,name:`pullrequest_list`},{operation:`merge`,name:`pullrequest_merge`},{operation:`summarize`,name:`pullrequest_summarize`},{operation:`sync`,name:`pullrequest_sync`}],cli:[{operation:`get`,name:`pullrequest_get`},{operation:`list`,name:`pullrequest_list`},{operation:`markReady`,name:`pullrequest_markReady`},{operation:`merge`,name:`pullrequest_merge`},{operation:`summarize`,name:`pullrequest_summarize`},{operation:`sync`,name:`pullrequest_sync`}],methods:[{name:`addComment`,async:!0,parameters:[`body: string`],returnType:`Promise<Comment>`,aiCallable:!1},{name:`addLabels`,async:!0,parameters:[`labels: string[]`],returnType:`Promise<void>`,aiCallable:!1},{name:`assign`,async:!0,parameters:[`assignees: string[]`],returnType:`Promise<void>`,aiCallable:!1},{name:`batchSync`,async:!0,parameters:[`repository: Repository`,`options?: object`],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`clearCache`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`close`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`convertToDraft`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`discover`,async:!0,parameters:[`options: object`],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`findAIReadyToMerge`,async:!0,parameters:[`repositoryId?: string`],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`findByBranch`,async:!0,parameters:[`branch: string`,`repositoryId?: string`],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`findByNumber`,async:!0,parameters:[`repositoryId: string`,`number: number`],returnType:`Promise<PullRequest | null>`,aiCallable:!1},{name:`findByRepository`,async:!0,parameters:[`repositoryId: string`],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`findBySize`,async:!0,parameters:[`size: 'xs' | 's' | 'm' | 'l' | 'xl'`,`repositoryId?: string`],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`findDrafts`,async:!0,parameters:[`repositoryId?: string`],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`findLinkedIssue`,async:!0,parameters:[],returnType:`Promise<Issue | null>`,aiCallable:!1},{name:`findOpen`,async:!0,parameters:[`repositoryId?: string`],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`findReadyToMerge`,async:!0,parameters:[`repositoryId?: string`],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`getChangeSize`,async:!1,parameters:[],returnType:`'xs' | 's' | 'm' | 'l' | 'xl'`,aiCallable:!1},{name:`getClient`,async:!0,parameters:[],returnType:`Promise<IRepository>`,aiCallable:!1},{name:`getComments`,async:!0,parameters:[],returnType:`Promise<Comment[]>`,aiCallable:!1},{name:`getRepository`,async:!0,parameters:[],returnType:`Promise<Repository>`,aiCallable:!1},{name:`getUrl`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`hasRepository`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`incorporateFeedback`,async:!0,parameters:[`options?: IncorporateFeedbackOptions`],returnType:`Promise<IncorporateFeedbackResult>`,aiCallable:!1},{name:`isBugReport`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isFeatureRequest`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isReadyToMerge`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`markReady`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`merge`,async:!0,parameters:[`method?: MergeMethod`],returnType:`Promise<void>`,aiCallable:!0},{name:`needsReview`,async:!0,parameters:[],returnType:`Promise<boolean>`,aiCallable:!1},{name:`removeLabel`,async:!0,parameters:[`label: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`requestReviewers`,async:!0,parameters:[`reviewers: string[]`],returnType:`Promise<void>`,aiCallable:!1},{name:`rollback`,async:!0,parameters:[],returnType:`Promise<object>`,aiCallable:!1},{name:`suggestLabels`,async:!0,parameters:[`vocabulary?: IssueLabelVocabulary`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`suggestReviewers`,async:!0,parameters:[],returnType:`Promise<string[]>`,aiCallable:!1},{name:`summarize`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!0},{name:`sync`,async:!0,parameters:[`options?: SyncOptions`],returnType:`Promise<this>`,aiCallable:!0}],references:[`@happyvertical/smrt-projects:Project`,`@happyvertical/smrt-projects:Repository`],exposed:!0},{id:`@happyvertical/smrt-projects:Repository`,name:`Repository`,collection:`repositories`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`owner`,type:`text`,required:!1,default:``},{name:`name`,type:`text`,required:!1,default:``},{name:`fullName`,type:`text`,required:!1,default:``},{name:`description`,type:`text`,required:!1,default:``},{name:`defaultBranch`,type:`text`,required:!1,default:`main`},{name:`isPrivate`,type:`boolean`,required:!1,default:!1},{name:`providerType`,type:`text`,required:!1,default:`github`,enum:[`github`,`gitlab`,`bitbucket`,`azure`]},{name:`baseUrl`,type:`text`,required:!1,default:``},{name:`tokenConfigKey`,type:`text`,required:!1,default:`GITHUB_TOKEN`},{name:`lastSyncedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/repositories`},{method:`GET`,path:`/repositories/[id]`},{method:`POST`,path:`/repositories`},{method:`PATCH`,path:`/repositories/[id]`}],mcp:[{operation:`get`,name:`repository_get`},{operation:`list`,name:`repository_list`},{operation:`sync`,name:`repository_sync`}],cli:[{operation:`create`,name:`repository_create`},{operation:`get`,name:`repository_get`},{operation:`list`,name:`repository_list`},{operation:`sync`,name:`repository_sync`}],methods:[{name:`clearClient`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`createIssue`,async:!0,parameters:[`data: CreateIssueInput`],returnType:`Promise<Issue>`,aiCallable:!1},{name:`createPullRequest`,async:!0,parameters:[`data: CreatePRInput`],returnType:`Promise<PullRequest>`,aiCallable:!1},{name:`findByFullName`,async:!0,parameters:[`owner: string`,`name: string`],returnType:`Promise<Repository | null>`,aiCallable:!1},{name:`findByOwner`,async:!0,parameters:[`owner: string`],returnType:`Promise<Repository[]>`,aiCallable:!1},{name:`findByProvider`,async:!0,parameters:[`providerType: RepositoryProviderType`],returnType:`Promise<Repository[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Repository[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Repository[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Repository[]>`,aiCallable:!1},{name:`findWithOpenIssues`,async:!0,parameters:[],returnType:`Promise<Repository[]>`,aiCallable:!1},{name:`getClient`,async:!0,parameters:[],returnType:`Promise<IRepository>`,aiCallable:!1},{name:`getIssues`,async:!0,parameters:[`filters?: SearchFilters`],returnType:`Promise<Issue[]>`,aiCallable:!1},{name:`getOrCreate`,async:!0,parameters:[`owner: string`,`name: string`,`options?: object`],returnType:`Promise<Repository>`,aiCallable:!1},{name:`getPullRequests`,async:!0,parameters:[`filters?: SearchFilters`],returnType:`Promise<PullRequest[]>`,aiCallable:!1},{name:`hasOpenIssuesMatching`,async:!0,parameters:[`criteria: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`summarizeActivity`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`sync`,async:!0,parameters:[`options?: SyncOptions`],returnType:`Promise<this>`,aiCallable:!0},{name:`syncAll`,async:!0,parameters:[`options?: object`],returnType:`Promise<Repository[]>`,aiCallable:!1}],references:[],exposed:!0}],dependencies:[`subscriptions`,`timesheets`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3617`,`#3624`,`#3626`,`#3627`],reason:`node:crypto/async_hooks; core migrations; repos and ai SDKs`,via:[`@happyvertical/smrt-profiles`,`@happyvertical/smrt-subscriptions`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-timesheets`,`@happyvertical/smrt-users`]},recipes:[{id:`projects.tracker`,label:`Projects`,summary:`Track projects and the issues, labels and comments inside them.`,synonyms:[`issues`,`tasks`,`tickets`,`bugs`,`kanban`],models:[`@happyvertical/smrt-projects:Project`,`@happyvertical/smrt-projects:Issue`,`@happyvertical/smrt-projects:Label`,`@happyvertical/smrt-projects:Comment`],nav:[{label:`All projects`,model:`@happyvertical/smrt-projects:Project`,icon:`folder`,description:`Bigger jobs broken into steps you can follow.`},{label:`Issues`,model:`@happyvertical/smrt-projects:Issue`,icon:`wrench`,description:`Problems and to-dos to track until they are done.`},{label:`Labels`,model:`@happyvertical/smrt-projects:Label`,icon:`tag`,description:`Tags to sort your projects and issues your way.`}],requires:[],section:{id:`projects`,label:`Projects`,icon:`briefcase`,description:`Projects, their issues, labels and comments.`},options:{"@happyvertical/smrt-projects:Project":{fields:{projectId:{visibility:`hidden`},projectNumber:{visibility:`hidden`},providerType:{visibility:`hidden`},tokenConfigKey:{visibility:`hidden`},statuses:{visibility:`hidden`},fields:{visibility:`hidden`},statusFieldId:{visibility:`hidden`},statusOptions:{visibility:`hidden`},lastSyncedAt:{visibility:`hidden`}}},"@happyvertical/smrt-projects:Issue":{fields:{nodeId:{visibility:`hidden`},originalBody:{visibility:`hidden`},synthesisCount:{visibility:`hidden`},lastSyncedAt:{visibility:`hidden`},commentsCount:{visibility:`hidden`},repositoryId:{visibility:`hidden`},number:{visibility:`hidden`}}},"@happyvertical/smrt-projects:Comment":{fields:{commentId:{visibility:`hidden`},url:{visibility:`hidden`}}},"@happyvertical/smrt-projects:Label":{fields:{repositoryId:{visibility:`hidden`}}}},help:{markdown:`## Overview
786
-
787
- Projects tracks the work you are planning: projects, the issues in them, and
788
- the labels and comments that organise them.
789
-
790
- ## Tasks
791
-
792
- ### Start a project
793
-
794
- 1. Create a new project.
795
- 2. Give it a **{field:title}** and a **{field:description}**.
796
-
797
- ### Log an issue
798
-
799
- 1. Create a new issue and pick the **{field:projectId}**.
800
- 2. Write a **{field:title}** and a **{field:body}**.
801
- 3. Close it by setting **{field:state}** to closed. Comments are attached to the
802
- issue.
803
- `,fieldRefs:[`body`,`description`,`projectId`,`state`,`title`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: node:crypto/async_hooks; core migrations; repos and ai SDKs; and its package depends on @happyvertical/smrt-profiles, @happyvertical/smrt-subscriptions, @happyvertical/smrt-tenancy, @happyvertical/smrt-timesheets, @happyvertical/smrt-users, which do not build for a browser (#3617, #3624, #3626, #3627).`]}}]},{id:`properties`,packageName:`@happyvertical/smrt-properties`,version:`0.57.9`,description:`Digital property and zone management models for SMRT framework`,models:[{id:`@happyvertical/smrt-properties:Property`,name:`Property`,collection:`properties`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`domain`,type:`text`,required:!1,default:``},{name:`url`,type:`text`,required:!1,default:``},{name:`description`,type:`text`,required:!1,default:``},{name:`repositoryId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-projects:Repository`},{name:`ownerId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`status`,type:`text`,required:!1,default:`active`,enum:[`active`,`inactive`,`pending`]},{name:`metadata`,type:`json`,required:!1}],rest:[{method:`GET`,path:`/properties`},{method:`GET`,path:`/properties/[id]`},{method:`POST`,path:`/properties`},{method:`PATCH`,path:`/properties/[id]`},{method:`DELETE`,path:`/properties/[id]`}],mcp:[{operation:`create`,name:`property_create`},{operation:`get`,name:`property_get`},{operation:`list`,name:`property_list`}],cli:[{operation:`create`,name:`property_create`},{operation:`createZone`,name:`property_createZone`},{operation:`delete`,name:`property_delete`},{operation:`get`,name:`property_get`},{operation:`getZoneTree`,name:`property_getZoneTree`},{operation:`getZones`,name:`property_getZones`},{operation:`isActive`,name:`property_isActive`},{operation:`list`,name:`property_list`},{operation:`summarize`,name:`property_summarize`},{operation:`update`,name:`property_update`},{operation:`countByStatus`,name:`propertycollection_countByStatus`},{operation:`findActive`,name:`propertycollection_findActive`},{operation:`findByDomain`,name:`propertycollection_findByDomain`},{operation:`findByOwner`,name:`propertycollection_findByOwner`},{operation:`findByRepository`,name:`propertycollection_findByRepository`},{operation:`findByStatus`,name:`propertycollection_findByStatus`},{operation:`findByTenant`,name:`propertycollection_findByTenant`},{operation:`findGlobal`,name:`propertycollection_findGlobal`},{operation:`findWithGlobals`,name:`propertycollection_findWithGlobals`},{operation:`getOrCreateByDomain`,name:`propertycollection_getOrCreateByDomain`}],methods:[{name:`countByStatus`,async:!0,parameters:[],returnType:`Promise<Record<PropertyStatus, number>>`,aiCallable:!1},{name:`createZone`,async:!0,parameters:[`options: any`],returnType:`any`,aiCallable:!1},{name:`findActive`,async:!0,parameters:[],returnType:`Promise<Property[]>`,aiCallable:!1},{name:`findByDomain`,async:!0,parameters:[`domain: string`],returnType:`Promise<Property | null>`,aiCallable:!1},{name:`findByOwner`,async:!0,parameters:[`ownerId: string`],returnType:`Promise<Property[]>`,aiCallable:!1},{name:`findByRepository`,async:!0,parameters:[`repositoryId: string`],returnType:`Promise<Property[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: PropertyStatus`],returnType:`Promise<Property[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Property[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Property[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Property[]>`,aiCallable:!1},{name:`getOrCreateByDomain`,async:!0,parameters:[`domain: string`,`defaults?: object`],returnType:`Promise<Property>`,aiCallable:!1},{name:`getZoneTree`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getZones`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`summarize`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-projects:Repository`],exposed:!0},{id:`@happyvertical/smrt-properties:Zone`,name:`Zone`,collection:`zones`,display:{label:`name`},fields:[{name:`parentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-properties:Zone`},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`propertyId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-properties:Property`},{name:`name`,type:`text`,required:!1,default:``},{name:`type`,type:`text`,required:!1,default:``},{name:`path`,type:`text`,required:!1,default:``},{name:`selector`,type:`text`,required:!1,default:``},{name:`position`,type:`text`,required:!1,default:``},{name:`width`,type:`integer`,required:!1},{name:`height`,type:`integer`,required:!1},{name:`allowedFormats`,type:`json`,required:!1},{name:`defaultContentId`,type:`text`,required:!1},{name:`metadata`,type:`json`,required:!1}],rest:[{method:`GET`,path:`/zones`},{method:`GET`,path:`/zones/[id]`},{method:`POST`,path:`/zones`},{method:`PATCH`,path:`/zones/[id]`},{method:`DELETE`,path:`/zones/[id]`}],mcp:[{operation:`create`,name:`zone_create`},{operation:`get`,name:`zone_get`},{operation:`list`,name:`zone_list`}],cli:[{operation:`create`,name:`zone_create`},{operation:`createChild`,name:`zone_createChild`},{operation:`delete`,name:`zone_delete`},{operation:`get`,name:`zone_get`},{operation:`getAncestors`,name:`zone_getAncestors`},{operation:`getChildren`,name:`zone_getChildren`},{operation:`getDepth`,name:`zone_getDepth`},{operation:`getDescendants`,name:`zone_getDescendants`},{operation:`getDimensionString`,name:`zone_getDimensionString`},{operation:`getFullPath`,name:`zone_getFullPath`},{operation:`getHierarchy`,name:`zone_getHierarchy`},{operation:`getParent`,name:`zone_getParent`},{operation:`getProperty`,name:`zone_getProperty`},{operation:`hasDimensions`,name:`zone_hasDimensions`},{operation:`isFormatAllowed`,name:`zone_isFormatAllowed`},{operation:`isTopLevel`,name:`zone_isTopLevel`},{operation:`list`,name:`zone_list`},{operation:`moveTo`,name:`zone_moveTo`},{operation:`toTreeNode`,name:`zone_toTreeNode`},{operation:`update`,name:`zone_update`},{operation:`deleteZone`,name:`zonecollection_deleteZone`},{operation:`findByAllowedFormat`,name:`zonecollection_findByAllowedFormat`},{operation:`findByDimensions`,name:`zonecollection_findByDimensions`},{operation:`findByPath`,name:`zonecollection_findByPath`},{operation:`findByProperty`,name:`zonecollection_findByProperty`},{operation:`findByTenant`,name:`zonecollection_findByTenant`},{operation:`findByType`,name:`zonecollection_findByType`},{operation:`findChildren`,name:`zonecollection_findChildren`},{operation:`findGlobal`,name:`zonecollection_findGlobal`},{operation:`findTopLevel`,name:`zonecollection_findTopLevel`},{operation:`findWithGlobals`,name:`zonecollection_findWithGlobals`},{operation:`getAncestors`,name:`zonecollection_getAncestors`},{operation:`getDescendants`,name:`zonecollection_getDescendants`},{operation:`getMaxDepth`,name:`zonecollection_getMaxDepth`},{operation:`getTree`,name:`zonecollection_getTree`},{operation:`moveZone`,name:`zonecollection_moveZone`}],methods:[{name:`createChild`,async:!0,parameters:[`options: Omit<ZoneOptions, 'propertyId' | 'parentId'>`],returnType:`Promise<Zone>`,aiCallable:!1},{name:`deleteZone`,async:!0,parameters:[`zoneId: string`,`cascade?: boolean`],returnType:`Promise<number>`,aiCallable:!1},{name:`findByAllowedFormat`,async:!0,parameters:[`propertyId: string`,`format: string`],returnType:`Promise<Zone[]>`,aiCallable:!1},{name:`findByDimensions`,async:!0,parameters:[`propertyId: string`,`width: number`,`height: number`],returnType:`Promise<Zone[]>`,aiCallable:!1},{name:`findByPath`,async:!0,parameters:[`propertyId: string`,`path: string`],returnType:`Promise<Zone[]>`,aiCallable:!1},{name:`findByProperty`,async:!0,parameters:[`propertyId: string`],returnType:`Promise<Zone[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Zone[]>`,aiCallable:!1},{name:`findByType`,async:!0,parameters:[`propertyId: string`,`type: string`],returnType:`Promise<Zone[]>`,aiCallable:!1},{name:`findChildren`,async:!0,parameters:[`parentId: string`],returnType:`Promise<Zone[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Zone[]>`,aiCallable:!1},{name:`findTopLevel`,async:!0,parameters:[`propertyId: string`],returnType:`Promise<Zone[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Zone[]>`,aiCallable:!1},{name:`getAncestors`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getChildren`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getDepth`,async:!0,parameters:[],returnType:`Promise<number>`,aiCallable:!1},{name:`getDescendants`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getDimensionString`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getFullPath`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`getHierarchy`,async:!0,parameters:[],returnType:`Promise<HierarchyView<this>>`,aiCallable:!1},{name:`getMaxDepth`,async:!0,parameters:[`propertyId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`getParent`,async:!0,parameters:[],returnType:`Promise<this | null>`,aiCallable:!1},{name:`getProperty`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getTree`,async:!0,parameters:[`propertyId: string`],returnType:`Promise<ZoneTree<Zone>>`,aiCallable:!1},{name:`hasDimensions`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isFormatAllowed`,async:!1,parameters:[`format: string`],returnType:`boolean`,aiCallable:!1},{name:`isTopLevel`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`moveTo`,async:!0,parameters:[`newParent: this | string | null`],returnType:`Promise<void>`,aiCallable:!1},{name:`moveZone`,async:!0,parameters:[`zoneId: string`,`newParentId: string | null`],returnType:`Promise<Zone | null>`,aiCallable:!1},{name:`toTreeNode`,async:!0,parameters:[],returnType:`Promise<ZoneTreeNode<Zone>>`,aiCallable:!1}],references:[`@happyvertical/smrt-properties:Property`,`@happyvertical/smrt-properties:Zone`],exposed:!0}],dependencies:[`profiles`,`projects`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`],via:[`@happyvertical/smrt-tenancy`]}},{id:`reports`,packageName:`@happyvertical/smrt-reports`,version:`0.57.9`,description:`Materialized aggregate report models for SMRT`,models:[{id:`@happyvertical/smrt-reports:RuntimeReport`,name:`RuntimeReport`,collection:`runtimereports`,display:{label:`title`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`sourceId`,type:`text`,required:!1},{name:`spec`,type:`text`,required:!0},{name:`specHash`,type:`text`,required:!1},{name:`status`,type:`text`,required:!0,enum:[`active`,`archived`]},{name:`createdByUserId`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/runtimereports`},{method:`GET`,path:`/runtimereports/[id]`},{method:`POST`,path:`/runtimereports`},{method:`POST`,path:`/runtimereports/[id]/run`},{method:`POST`,path:`/runtimereports/[id]/archive`}],mcp:[{operation:`archive`,name:`runtimereport_archive`},{operation:`get`,name:`runtimereport_get`},{operation:`list`,name:`runtimereport_list`},{operation:`run`,name:`runtimereport_run`}],cli:[{operation:`archive`,name:`runtimereport_archive`},{operation:`get`,name:`runtimereport_get`},{operation:`list`,name:`runtimereport_list`},{operation:`run`,name:`runtimereport_run`}],methods:[{name:`archive`,async:!0,parameters:[`options: object`],returnType:`Promise<object>`,aiCallable:!0},{name:`getSpec`,async:!1,parameters:[],returnType:`RuntimeReportSpec`,aiCallable:!1},{name:`run`,async:!0,parameters:[],returnType:`Promise<RuntimeReportResult>`,aiCallable:!0},{name:`setSpec`,async:!1,parameters:[`spec: RuntimeReportSpec`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-reports:SmrtPrincipalReportRefreshTask`,name:`SmrtPrincipalReportRefreshTask`,collection:`smrtprincipalreportrefreshtasks`,extends:`@happyvertical/smrt-reports:SmrtReportRefreshTask`,description:`Worker target whose authority requirement cannot be downgraded by job args.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0}],rest:[],mcp:[],cli:[{operation:`get`,name:`smrtprincipalreportrefreshtask_get`},{operation:`list`,name:`smrtprincipalreportrefreshtask_list`}],methods:[{name:`run`,async:!0,parameters:[`args?: ReportRefreshJobArgs`,`context?: JobExecutionContext`],returnType:`Promise<unknown>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-reports:SmrtReport`,name:`SmrtReport`,collection:`smrtreports`,fields:[{name:`refreshedAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`isStale`,async:!1,parameters:[`ttlMs?: number`],returnType:`boolean`,aiCallable:!1},{name:`refresh`,async:!0,parameters:[`options?: Omit<ReportRefreshOptions, 'db'>`],returnType:`Promise<ReportRefreshResult>`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-reports:SmrtReportLock`,name:`SmrtReportLock`,collection:`smrtreportlocks`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`scopeKey`,type:`text`,required:!0},{name:`reportClass`,type:`text`,required:!0},{name:`ownerId`,type:`text`,required:!1},{name:`acquiredAt`,type:`datetime`,required:!1},{name:`heartbeatAt`,type:`datetime`,required:!1},{name:`expiresAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[{operation:`get`,name:`smrtreportlock_get`},{operation:`list`,name:`smrtreportlock_list`}],methods:[],references:[],exposed:!0},{id:`@happyvertical/smrt-reports:SmrtReportRefreshTask`,name:`SmrtReportRefreshTask`,collection:`smrtreportrefreshtasks`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`reportClass`,type:`text`,required:!0},{name:`mode`,type:`text`,required:!0,enum:[`rebuild`,`incremental`]},{name:`trigger`,type:`text`,required:!0,enum:[`manual`,`schedule`,`change`,`ttl`,`job`]},{name:`args`,type:`json`,required:!1}],rest:[],mcp:[],cli:[{operation:`get`,name:`smrtreportrefreshtask_get`},{operation:`list`,name:`smrtreportrefreshtask_list`}],methods:[{name:`run`,async:!0,parameters:[`args?: ReportRefreshJobArgs`,`context?: JobExecutionContext`],returnType:`Promise<unknown>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-reports:SmrtReportRun`,name:`SmrtReportRun`,collection:`smrtreportruns`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`scopeKey`,type:`text`,required:!0},{name:`reportClass`,type:`text`,required:!0},{name:`sourceClass`,type:`text`,required:!0},{name:`mode`,type:`text`,required:!0,enum:[`rebuild`,`incremental`]},{name:`trigger`,type:`text`,required:!0,enum:[`manual`,`schedule`,`change`,`ttl`,`job`]},{name:`status`,type:`text`,required:!0,enum:[`running`,`success`,`failed`,`skipped`],description:`Whether the refresh is running, finished, failed or was skipped.`},{name:`startedAt`,type:`datetime`,required:!0,description:`When the refresh began.`},{name:`completedAt`,type:`datetime`,required:!1,description:`When the refresh finished. Empty while it is still running.`},{name:`rowCount`,type:`integer`,required:!0,description:`How many rows the report held after the refresh.`},{name:`changedGroupCount`,type:`integer`,required:!0},{name:`watermarkBefore`,type:`text`,required:!1},{name:`watermarkAfter`,type:`text`,required:!1},{name:`error`,type:`text`,required:!1,description:`Why the refresh failed. Empty when it worked.`},{name:`metadata`,type:`json`,required:!1}],rest:[],mcp:[],cli:[{operation:`get`,name:`smrtreportrun_get`},{operation:`list`,name:`smrtreportrun_list`}],methods:[],references:[],exposed:!0},{id:`@happyvertical/smrt-reports:SmrtReportSchedule`,name:`SmrtReportSchedule`,collection:`smrtreportschedules`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`scopeKey`,type:`text`,required:!0},{name:`reportClass`,type:`text`,required:!0},{name:`cron`,type:`text`,required:!0,description:`When the report refreshes, as a cron schedule such as 0 6 * * * for 6 am daily.`},{name:`trigger`,type:`text`,required:!0,enum:[`manual`,`schedule`,`change`,`ttl`,`job`]},{name:`mode`,type:`text`,required:!0,enum:[`rebuild`,`incremental`],description:`Rebuild recomputes the whole report. Incremental updates only what changed.`},{name:`enabled`,type:`boolean`,required:!0,description:`Turn off to stop refreshing without deleting the schedule.`},{name:`status`,type:`text`,required:!0,enum:[`active`,`paused`,`disabled`,`error`],description:`Whether the schedule is active, paused, disabled or in error.`},{name:`nextRun`,type:`datetime`,required:!1,description:`When the report is next due to refresh.`},{name:`lastRun`,type:`datetime`,required:!1,description:`When the report last started a scheduled refresh.`},{name:`lastStatus`,type:`text`,required:!1,enum:[`success`,`failed`],description:`Whether the last scheduled refresh worked or failed.`},{name:`lastError`,type:`text`,required:!1,description:`Why the last scheduled refresh failed. Empty when it worked.`},{name:`runCount`,type:`integer`,required:!0},{name:`successCount`,type:`integer`,required:!0},{name:`failureCount`,type:`integer`,required:!0},{name:`runningCount`,type:`integer`,required:!0},{name:`maxConcurrent`,type:`integer`,required:!0},{name:`queue`,type:`text`,required:!0},{name:`priority`,type:`integer`,required:!0},{name:`timeout`,type:`integer`,required:!0}],rest:[],mcp:[],cli:[{operation:`get`,name:`smrtreportschedule_get`},{operation:`list`,name:`smrtreportschedule_list`}],methods:[],references:[],exposed:!0},{id:`@happyvertical/smrt-reports:SmrtReportWatermark`,name:`SmrtReportWatermark`,collection:`smrtreportwatermarks`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`scopeKey`,type:`text`,required:!0},{name:`reportClass`,type:`text`,required:!0},{name:`sourceClass`,type:`text`,required:!0},{name:`watermarkColumn`,type:`text`,required:!0},{name:`watermarkValue`,type:`text`,required:!1},{name:`lastRunId`,type:`text`,required:!1}],rest:[],mcp:[],cli:[{operation:`get`,name:`smrtreportwatermark_get`},{operation:`list`,name:`smrtreportwatermark_list`}],methods:[],references:[],exposed:!0}],dependencies:[],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3615`,`#3624`,`#3625`,`#3627`],reason:`node:crypto/events; @happyvertical/sql root: the sync query builders it needs (validateColumnName, buildWhere, buildAggregate, bucketExpr, tableExists) have no browser-safe SDK entry`,via:[`@happyvertical/smrt-jobs`,`@happyvertical/smrt-tenancy`]},recipes:[{id:`reports.materialized`,label:`Scheduled reports`,summary:`Keep totals and trends ready to read, refreshed on a schedule and open to the assistant.`,synonyms:[`rollups`,`kpis`,`refresh schedule`,`materialized`],models:[`@happyvertical/smrt-reports:SmrtReportRun`,`@happyvertical/smrt-reports:SmrtReportWatermark`,`@happyvertical/smrt-reports:SmrtReportLock`,`@happyvertical/smrt-reports:SmrtReportSchedule`,`@happyvertical/smrt-reports:SmrtReportRefreshTask`,`@happyvertical/smrt-reports:SmrtPrincipalReportRefreshTask`],nav:[],requires:[],help:{markdown:`## Overview
804
-
805
- Reports keep totals and trends, such as revenue by month or signups by week,
806
- worked out ahead of time so they open instantly. Someone on your team sets up
807
- each report once. This feature then records when each report was last
808
- refreshed, how that went, and when it runs next.
809
-
810
- Reports are calculated on your server, never in the browser, so this feature
811
- needs your app's database.
812
-
813
- ## Tasks
814
-
815
- ### Ask the assistant about a report
816
-
817
- 1. Ask in plain words, for example "what was revenue last month?".
818
- 2. The assistant looks up the reports your account may see
819
- (\`data.discover\`, \`data.inspect\`), then reads rows with \`reports.query\`.
820
- It only ever sees the columns and the customer data you are allowed to see.
821
- 3. If the numbers look old, ask how fresh the report is. The answer says when
822
- it was last refreshed.
823
- 4. Ask the assistant to refresh a stale report. It previews the refresh with
824
- \`reports.refresh\` and your app decides who may apply it.
825
-
826
- The assistant offers these tools only when your app has switched them on.
827
-
828
- ### Ask a question no report covers
829
-
830
- 1. Describe what you want to see, for example "orders by status this quarter".
831
- 2. The assistant checks what it may report on (\`reports.runtime.sources\`) and
832
- shows a preview of the report it would save (\`reports.runtime.define\`).
833
- 3. Nothing is saved until you confirm that exact report.
834
- 4. Open it again later with \`reports.runtime.list\` and \`reports.runtime.run\`.
835
-
836
- These reports are worked out live each time and their rows are never stored.
837
- They are not refreshed in the background. A report that people open every day
838
- is worth asking your team to set up as a refreshed report instead.
839
-
840
- ### Keep a report fresh
841
-
842
- 1. Ask your team how the report refreshes: by hand, on a schedule, after the
843
- data changes, or when it goes out of date.
844
- 2. A scheduled report repeats on its **{field:SmrtReportSchedule.cron}**, either
845
- rebuilding everything or updating only what changed, per its
846
- **{field:SmrtReportSchedule.mode}**.
847
- 3. Turn **{field:SmrtReportSchedule.enabled}** off to pause a schedule without
848
- losing it.
849
- 4. **{field:SmrtReportSchedule.nextRun}** shows when it is next due.
850
-
851
- ### Check that a refresh worked
852
-
853
- 1. Look at the latest run for the report. **{field:SmrtReportRun.status}**
854
- says whether it is running, finished, failed or skipped.
855
- 2. **{field:SmrtReportRun.completedAt}** and **{field:SmrtReportRun.rowCount}**
856
- show when it finished and how many rows it holds.
857
- 3. If it failed, **{field:SmrtReportRun.error}** says why.
858
- `,fieldRefs:[`SmrtReportRun.completedAt`,`SmrtReportRun.error`,`SmrtReportRun.rowCount`,`SmrtReportRun.status`,`SmrtReportSchedule.cron`,`SmrtReportSchedule.enabled`,`SmrtReportSchedule.mode`,`SmrtReportSchedule.nextRun`]},runtime:`server`,demo:{mode:`server`,reasons:[`The recipe declares runtime "server".`,`Needs a server because its package does not build for a browser: node:crypto/events; @happyvertical/sql root: the sync query builders it needs (validateColumnName, buildWhere, buildAggregate, bucketExpr, tableExists) have no browser-safe SDK entry; and its package depends on @happyvertical/smrt-jobs, @happyvertical/smrt-tenancy, which do not build for a browser (#3615, #3624, #3625, #3627).`]}},{id:`reports.runtime`,label:`Reports`,summary:`Ask for a report, approve it, and share its live totals with your team.`,synonyms:[`report`,`summary`,`summaries`,`totals`,`trends`,`dashboards`],models:[`@happyvertical/smrt-reports:RuntimeReport`],nav:[{label:`Saved reports`,model:`@happyvertical/smrt-reports:RuntimeReport`,icon:`fileText`,description:`Reports your team approved, kept up to date.`,noun:`report`}],requires:[],help:{markdown:`# Reports
859
-
860
- Ask the assistant for a total, comparison, or trend. Review the proposed report
861
- and approve it to save it. Your saved reports are shared with your team; each
862
- person sees results using their own access to the underlying information.
863
-
864
- Reports run fresh when opened. You can archive a report to hide it from the
865
- active list and restore it later. Creating and restoring reports needs report
866
- writing access. Reports need a connected server; the smrt planner previews them over its
867
- sample records instead. Scheduling, renaming, and exporting reports are not available yet.
868
- `,fieldRefs:[]},surfaces:[{kind:`widget`,type:`saved-reports`,export:`@happyvertical/smrt-reports/svelte#SavedReportsWidget`,label:`Saved reports`,description:`Your team’s saved reports with their latest figures.`,icon:`fileText`,options:[{key:`limit`,type:`integer`,label:`Reports shown`,default:6,min:1,max:24}],sectionDefault:!0,defaultSpan:4,minSpan:2,maxSpan:4},{kind:`route`,path:`/reports`,export:`@happyvertical/smrt-reports/svelte#RuntimeReportsRoute`,label:`Reports`},{kind:`route`,path:`/reports/:id`,export:`@happyvertical/smrt-reports/svelte#RuntimeReportDetailRoute`,label:`Report detail`},{kind:`widget`,type:`runtime-report-chart`,export:`@happyvertical/smrt-reports/svelte#RuntimeReportChartWidget`,label:`Report chart`,description:`Chart a measure from a saved report.`,icon:`chart`,optionsEditor:`@happyvertical/smrt-reports/svelte#RuntimeReportWidgetOptions`,options:[{key:`reportId`,type:`text`,label:`Report`,required:!0},{key:`measure`,type:`identifier`,label:`Measure`,required:!0},{key:`dimension`,type:`identifier`,label:`Dimension`}],data:{load:`@happyvertical/smrt-reports#loadRuntimeReportChart`,models:[`@happyvertical/smrt-reports:RuntimeReport`]},defaultSpan:2,maxSpan:4}],runtime:`server`,demo:{mode:`server`,reasons:[`The recipe declares runtime "server".`,`Needs a server because its package does not build for a browser: node:crypto/events; @happyvertical/sql root: the sync query builders it needs (validateColumnName, buildWhere, buildAggregate, bucketExpr, tableExists) have no browser-safe SDK entry; and its package depends on @happyvertical/smrt-jobs, @happyvertical/smrt-tenancy, which do not build for a browser (#3615, #3624, #3625, #3627).`]}}]},{id:`sales`,packageName:`@happyvertical/smrt-sales`,version:`0.57.9`,description:`Modular sales for the SMRT framework: agreement execution, CRM, referral intake, neutral commissions, and reusable Svelte surfaces`,models:[{id:`@happyvertical/smrt-sales:Agreement`,name:`Agreement`,collection:`agreements`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`kind`,type:`text`,required:!0,default:``},{name:`partyA`,type:`text`,required:!0,default:``},{name:`partyB`,type:`text`,required:!0,default:``},{name:`version`,type:`integer`,required:!1,default:1},{name:`status`,type:`text`,required:!1,default:`draft`},{name:`terms`,type:`text`,required:!1,default:`{}`},{name:`effectiveFrom`,type:`datetime`,required:!1},{name:`effectiveTo`,type:`datetime`,required:!1},{name:`executedAgreementId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:ExecutedAgreement`},{name:`amendmentPredecessorId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:Agreement`},{name:`amendmentPredecessorEnd`,type:`datetime`,required:!1},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/agreements`},{method:`GET`,path:`/agreements/[id]`},{method:`POST`,path:`/agreements`}],mcp:[{operation:`get`,name:`agreement_get`},{operation:`list`,name:`agreement_list`}],cli:[{operation:`activate`,name:`agreement_activate`},{operation:`create`,name:`agreement_create`},{operation:`delete`,name:`agreement_delete`},{operation:`get`,name:`agreement_get`},{operation:`getPartyA`,name:`agreement_getPartyA`},{operation:`getPartyB`,name:`agreement_getPartyB`},{operation:`getTerms`,name:`agreement_getTerms`},{operation:`isActive`,name:`agreement_isActive`},{operation:`isDraft`,name:`agreement_isDraft`},{operation:`isEffectiveAt`,name:`agreement_isEffectiveAt`},{operation:`list`,name:`agreement_list`},{operation:`refreshAfterLifecycleTransition`,name:`agreement_refreshAfterLifecycleTransition`},{operation:`setPartyA`,name:`agreement_setPartyA`},{operation:`setPartyB`,name:`agreement_setPartyB`},{operation:`setTerms`,name:`agreement_setTerms`},{operation:`supersede`,name:`agreement_supersede`},{operation:`terminate`,name:`agreement_terminate`},{operation:`update`,name:`agreement_update`},{operation:`activateAmendment`,name:`agreementcollection_activateAmendment`},{operation:`activeFor`,name:`agreementcollection_activeFor`},{operation:`createAmendment`,name:`agreementcollection_createAmendment`},{operation:`findVersions`,name:`agreementcollection_findVersions`},{operation:`withdrawAmendment`,name:`agreementcollection_withdrawAmendment`}],methods:[{name:`activate`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`activateAmendment`,async:!0,parameters:[`id: string`],returnType:`Promise<Agreement>`,aiCallable:!1},{name:`activeFor`,async:!0,parameters:[`kind: string`,`partyA: AgreementParty`,`partyB: AgreementParty`,`at?: Date`,`tenantId?: string | null`],returnType:`Promise<Agreement | null>`,aiCallable:!1},{name:`createAmendment`,async:!0,parameters:[`kind: string`,`partyA: AgreementParty`,`partyB: AgreementParty`,`changes?: AgreementAmendmentChanges`],returnType:`Promise<Agreement>`,aiCallable:!1},{name:`findVersions`,async:!0,parameters:[`kind: string`,`partyA: AgreementParty`,`partyB: AgreementParty`],returnType:`Promise<Agreement[]>`,aiCallable:!1},{name:`getPartyA`,async:!1,parameters:[],returnType:`AgreementParty | null`,aiCallable:!1},{name:`getPartyB`,async:!1,parameters:[],returnType:`AgreementParty | null`,aiCallable:!1},{name:`getTerms`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isEffectiveAt`,async:!1,parameters:[`at: Date`],returnType:`boolean`,aiCallable:!1},{name:`refreshAfterLifecycleTransition`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setPartyA`,async:!1,parameters:[`party: AgreementParty`],returnType:`void`,aiCallable:!1},{name:`setPartyB`,async:!1,parameters:[`party: AgreementParty`],returnType:`void`,aiCallable:!1},{name:`setTerms`,async:!1,parameters:[`terms: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`supersede`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`terminate`,async:!1,parameters:[`at?: Date`],returnType:`void`,aiCallable:!1},{name:`withdrawAmendment`,async:!0,parameters:[`id: string`],returnType:`Promise<Agreement>`,aiCallable:!1}],references:[`@happyvertical/smrt-sales:Agreement`,`@happyvertical/smrt-sales:ExecutedAgreement`],exposed:!0},{id:`@happyvertical/smrt-sales:AgreementExecution`,name:`AgreementExecution`,collection:`agreementexecutions`,display:{label:`title`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`provider`,type:`text`,required:!0,default:``},{name:`providerAccountRef`,type:`text`,required:!1,default:``},{name:`credentialRef`,type:`text`,required:!1,default:``},{name:`idempotencyKey`,type:`text`,required:!0,default:``},{name:`sourceKind`,type:`text`,required:!0,default:``},{name:`sourceId`,type:`text`,required:!0,default:``},{name:`sourceVersion`,type:`integer`,required:!1,default:1},{name:`sourceAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`sourceSha256`,type:`text`,required:!1,default:``},{name:`sourceSizeBytes`,type:`integer`,required:!1,default:0},{name:`requestIntentSha256`,type:`text`,required:!1,default:``},{name:`title`,type:`text`,required:!1,default:``},{name:`signerIntent`,type:`text`,required:!1,default:`[]`},{name:`providerRequestId`,type:`text`,required:!1,default:``},{name:`providerRequestKey`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`prepared`},{name:`expiresAt`,type:`datetime`,required:!1},{name:`cancellationReason`,type:`text`,required:!1,default:``},{name:`lastProviderEventAt`,type:`datetime`,required:!1},{name:`lastReconciledAt`,type:`datetime`,required:!1},{name:`completedAt`,type:`datetime`,required:!1},{name:`effectiveFrom`,type:`datetime`,required:!1},{name:`effectiveTo`,type:`datetime`,required:!1},{name:`supersedesExecutedAgreementId`,type:`text`,required:!1,default:``},{name:`signedDocumentAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`signedDocumentSha256`,type:`text`,required:!1,default:``},{name:`signedDocumentSizeBytes`,type:`integer`,required:!1,default:0},{name:`signedDocumentMediaType`,type:`text`,required:!1,default:``},{name:`signedDocumentFilename`,type:`text`,required:!1,default:``},{name:`auditTrailAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`auditTrailSha256`,type:`text`,required:!1,default:``},{name:`auditTrailSizeBytes`,type:`integer`,required:!1,default:0},{name:`auditTrailMediaType`,type:`text`,required:!1,default:``},{name:`auditTrailFilename`,type:`text`,required:!1,default:``},{name:`attemptCount`,type:`integer`,required:!1,default:0},{name:`createLeaseId`,type:`text`,required:!1,default:``},{name:`createLeaseExpiresAt`,type:`datetime`,required:!1},{name:`lastError`,type:`text`,required:!1,default:``},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[],mcp:[],cli:[],methods:[{name:`bindEvidenceArtifact`,async:!0,parameters:[`input: BindAgreementEvidenceArtifactInput`],returnType:`Promise<AgreementExecution | null>`,aiCallable:!1},{name:`bindProviderRequest`,async:!0,parameters:[`input: BindAgreementProviderRequestInput`],returnType:`Promise<AgreementExecution | null>`,aiCallable:!1},{name:`claimCreateAttempt`,async:!0,parameters:[`input: ClaimAgreementCreateAttemptInput`],returnType:`Promise<AgreementExecution | null>`,aiCallable:!1},{name:`compareAndSetLifecycle`,async:!0,parameters:[`input: CompareAndSetAgreementLifecycleInput`],returnType:`Promise<AgreementExecution | null>`,aiCallable:!1},{name:`completeCreateAttempt`,async:!0,parameters:[`input: CompleteAgreementCreateAttemptInput`],returnType:`Promise<AgreementExecution | null>`,aiCallable:!1},{name:`failCreateAttempt`,async:!0,parameters:[`input: FailAgreementCreateAttemptInput`],returnType:`Promise<AgreementExecution | null>`,aiCallable:!1},{name:`findByIdempotencyKey`,async:!0,parameters:[`idempotencyKey: string`],returnType:`Promise<AgreementExecution | null>`,aiCallable:!1},{name:`findByProviderRequest`,async:!0,parameters:[`provider: string`,`providerRequestId: string`],returnType:`Promise<AgreementExecution | null>`,aiCallable:!1},{name:`findBySource`,async:!0,parameters:[`sourceKind: string`,`sourceId: string`],returnType:`Promise<AgreementExecution[]>`,aiCallable:!1},{name:`getSignerIntent`,async:!1,parameters:[],returnType:`AgreementSignerIntent[]`,aiCallable:!1},{name:`incrementAttemptCount`,async:!0,parameters:[`tenantId: string`,`executionId: string`],returnType:`Promise<AgreementExecution>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`updateLastError`,async:!0,parameters:[`input: UpdateAgreementExecutionErrorInput`],returnType:`Promise<AgreementExecution>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`],exposed:!1},{id:`@happyvertical/smrt-sales:AgreementExecutionEvent`,name:`AgreementExecutionEvent`,collection:`agreementexecutionevents`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`executionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:AgreementExecution`},{name:`provider`,type:`text`,required:!1,default:``},{name:`providerEventId`,type:`text`,required:!1,default:``},{name:`eventOrigin`,type:`text`,required:!1,default:`provider_webhook`},{name:`operationId`,type:`text`,required:!1,default:``},{name:`dedupeKey`,type:`text`,required:!0,default:``},{name:`orderingKey`,type:`text`,required:!1,default:``},{name:`eventType`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,default:`prepared`},{name:`occurredAt`,type:`datetime`,required:!1},{name:`receivedAt`,type:`datetime`,required:!1},{name:`payloadSha256`,type:`text`,required:!1,default:``},{name:`signerEvidence`,type:`text`,required:!1,default:`[]`},{name:`payload`,type:`text`,required:!1,default:`{}`}],rest:[],mcp:[],cli:[],methods:[{name:`findByDedupeKey`,async:!0,parameters:[`dedupeKey: string`],returnType:`Promise<AgreementExecutionEvent | null>`,aiCallable:!1},{name:`findByExecution`,async:!0,parameters:[`executionId: string`],returnType:`Promise<AgreementExecutionEvent[]>`,aiCallable:!1},{name:`findProviderEventsByExecution`,async:!0,parameters:[`executionId: string`],returnType:`Promise<AgreementExecutionEvent[]>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`recordVerified`,async:!0,parameters:[`options: VerifiedAgreementExecutionEventOptions`],returnType:`Promise<object>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-sales:AgreementExecution`],exposed:!1},{id:`@happyvertical/smrt-sales:AttributionException`,name:`AttributionException`,collection:`attributionexceptions`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`targetKind`,type:`text`,required:!0,default:``},{name:`targetId`,type:`text`,required:!0,default:``},{name:`programId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:ReferralProgram`},{name:`status`,type:`text`,required:!1,default:`open`},{name:`conflictReason`,type:`text`,required:!1,default:``},{name:`candidates`,type:`text`,required:!1,default:`[]`},{name:`resolutionMode`,type:`text`,required:!1,default:``},{name:`resolutionReason`,type:`text`,required:!1,default:``},{name:`resolvedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`resolvedReferralIds`,type:`text`,required:!1,default:`[]`},{name:`resolvedAt`,type:`datetime`,required:!1},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/attributionexceptions`},{method:`GET`,path:`/attributionexceptions/[id]`}],mcp:[{operation:`get`,name:`attributionexception_get`},{operation:`list`,name:`attributionexception_list`}],cli:[],methods:[{name:`findByTarget`,async:!0,parameters:[`targetKind: string`,`targetId: string`],returnType:`Promise<AttributionException[]>`,aiCallable:!1},{name:`findOpen`,async:!0,parameters:[],returnType:`Promise<AttributionException[]>`,aiCallable:!1},{name:`findOpenByTarget`,async:!0,parameters:[`targetKind: string`,`targetId: string`,`programId: string`],returnType:`Promise<AttributionException | null>`,aiCallable:!1},{name:`getCandidates`,async:!1,parameters:[],returnType:`AttributionExceptionCandidate[]`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getResolvedReferralIds`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isOpen`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markResolved`,async:!1,parameters:[`input: object`],returnType:`void`,aiCallable:!1},{name:`setCandidates`,async:!1,parameters:[`candidates: AttributionExceptionCandidate[]`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setResolvedReferralIds`,async:!1,parameters:[`ids: string[]`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-sales:ReferralProgram`],exposed:!0},{id:`@happyvertical/smrt-sales:AttributionPolicy`,name:`AttributionPolicy`,collection:`attributionpolicies`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`policyKey`,type:`text`,required:!0,default:``},{name:`version`,type:`integer`,required:!1,default:1},{name:`status`,type:`text`,required:!1,default:`draft`},{name:`effectiveFrom`,type:`datetime`,required:!1},{name:`windowDays`,type:`integer`,required:!1,default:30},{name:`creditMode`,type:`text`,required:!1,default:`first_touch`},{name:`conflictBehavior`,type:`text`,required:!1,default:`auto`},{name:`allowSelfReferral`,type:`boolean`,required:!1,default:!1},{name:`allowExistingClients`,type:`boolean`,required:!1,default:!1},{name:`eligibleServices`,type:`text`,required:!1,default:`[]`},{name:`eligibleCampaigns`,type:`text`,required:!1,default:`[]`},{name:`eligibleRegions`,type:`text`,required:!1,default:`[]`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/attributionpolicies`},{method:`GET`,path:`/attributionpolicies/[id]`},{method:`POST`,path:`/attributionpolicies`}],mcp:[{operation:`get`,name:`attributionpolicy_get`},{operation:`list`,name:`attributionpolicy_list`}],cli:[{operation:`activate`,name:`attributionpolicy_activate`},{operation:`create`,name:`attributionpolicy_create`},{operation:`delete`,name:`attributionpolicy_delete`},{operation:`get`,name:`attributionpolicy_get`},{operation:`getEligibleCampaigns`,name:`attributionpolicy_getEligibleCampaigns`},{operation:`getEligibleRegions`,name:`attributionpolicy_getEligibleRegions`},{operation:`getEligibleServices`,name:`attributionpolicy_getEligibleServices`},{operation:`getMetadata`,name:`attributionpolicy_getMetadata`},{operation:`isActive`,name:`attributionpolicy_isActive`},{operation:`isDraft`,name:`attributionpolicy_isDraft`},{operation:`list`,name:`attributionpolicy_list`},{operation:`retire`,name:`attributionpolicy_retire`},{operation:`setEligibleCampaigns`,name:`attributionpolicy_setEligibleCampaigns`},{operation:`setEligibleRegions`,name:`attributionpolicy_setEligibleRegions`},{operation:`setEligibleServices`,name:`attributionpolicy_setEligibleServices`},{operation:`setMetadata`,name:`attributionpolicy_setMetadata`},{operation:`supersede`,name:`attributionpolicy_supersede`},{operation:`update`,name:`attributionpolicy_update`},{operation:`createAmendment`,name:`attributionpolicycollection_createAmendment`},{operation:`findByPolicyKey`,name:`attributionpolicycollection_findByPolicyKey`},{operation:`findByStatus`,name:`attributionpolicycollection_findByStatus`},{operation:`latestActiveByKey`,name:`attributionpolicycollection_latestActiveByKey`}],methods:[{name:`activate`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`createAmendment`,async:!0,parameters:[`policyKey: string`,`changes?: AttributionPolicyAmendmentChanges`],returnType:`Promise<AttributionPolicy>`,aiCallable:!1},{name:`findByPolicyKey`,async:!0,parameters:[`policyKey: string`],returnType:`Promise<AttributionPolicy[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: AttributionPolicyStatus`],returnType:`Promise<AttributionPolicy[]>`,aiCallable:!1},{name:`getEligibleCampaigns`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getEligibleRegions`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getEligibleServices`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`latestActiveByKey`,async:!0,parameters:[`policyKey: string`,`at?: Date`,`tenantId?: string | null`],returnType:`Promise<AttributionPolicy | null>`,aiCallable:!1},{name:`retire`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setEligibleCampaigns`,async:!1,parameters:[`campaigns: string[]`],returnType:`void`,aiCallable:!1},{name:`setEligibleRegions`,async:!1,parameters:[`regions: string[]`],returnType:`void`,aiCallable:!1},{name:`setEligibleServices`,async:!1,parameters:[`services: string[]`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`supersede`,async:!1,parameters:[],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-sales:Commission`,name:`Commission`,collection:`commissions`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`earnerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:Earner`},{name:`earningEventId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:EarningEvent`},{name:`planKey`,type:`text`,required:!1,default:``},{name:`planVersion`,type:`integer`,required:!1,default:0},{name:`componentKey`,type:`text`,required:!1,default:``},{name:`termsSnapshotKind`,type:`text`,required:!1,default:``},{name:`termsSnapshotId`,type:`text`,required:!1,default:``},{name:`basis`,type:`text`,required:!1,default:`gross`},{name:`baseAmountCents`,type:`integer`,required:!1,default:0},{name:`rate`,type:`decimal`,required:!1,default:0},{name:`shareFraction`,type:`decimal`,required:!1,default:1},{name:`splitGroupId`,type:`text`,required:!1,default:``},{name:`amountCents`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`status`,type:`text`,required:!1,default:`pending`},{name:`clearingEndsAt`,type:`datetime`,required:!1},{name:`earnedAt`,type:`datetime`,required:!1},{name:`approvedAt`,type:`datetime`,required:!1},{name:`payableAt`,type:`datetime`,required:!1},{name:`paidAt`,type:`datetime`,required:!1},{name:`payoutId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:CommissionPayout`},{name:`sourceKind`,type:`text`,required:!1,default:``},{name:`sourceId`,type:`text`,required:!1,default:``},{name:`calculationTrace`,type:`text`,required:!1,default:`{}`},{name:`dedupeKey`,type:`text`,required:!0,default:``},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/commissions`},{method:`GET`,path:`/commissions/[id]`},{method:`POST`,path:`/commissions`}],mcp:[{operation:`get`,name:`commission_get`},{operation:`list`,name:`commission_list`}],cli:[],methods:[{name:`approve`,async:!1,parameters:[`now?: Date`],returnType:`void`,aiCallable:!1},{name:`claimForPayout`,async:!0,parameters:[`commissionIds: string[]`,`payoutId: string`],returnType:`Promise<Commission[]>`,aiCallable:!1},{name:`findByDedupeKey`,async:!0,parameters:[`dedupeKey: string`],returnType:`Promise<Commission | null>`,aiCallable:!1},{name:`findByEarner`,async:!0,parameters:[`earnerId: string`],returnType:`Promise<Commission[]>`,aiCallable:!1},{name:`findByEvent`,async:!0,parameters:[`earningEventId: string`],returnType:`Promise<Commission[]>`,aiCallable:!1},{name:`findByPayout`,async:!0,parameters:[`payoutId: string`],returnType:`Promise<Commission[]>`,aiCallable:!1},{name:`findByPayouts`,async:!0,parameters:[`payoutIds: string[]`],returnType:`Promise<Commission[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: CommissionStatus`],returnType:`Promise<Commission[]>`,aiCallable:!1},{name:`findPayableUnsettled`,async:!0,parameters:[`earnerId: string`,`currency: string`,`scope?: object`],returnType:`Promise<Commission[]>`,aiCallable:!1},{name:`getCalculationTrace`,async:!1,parameters:[],returnType:`CommissionCalculationTrace | null`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isApproved`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isEarned`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPaid`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPayable`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPending`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSettled`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markEarned`,async:!1,parameters:[`now?: Date`],returnType:`void`,aiCallable:!1},{name:`markPaid`,async:!1,parameters:[`now?: Date`],returnType:`void`,aiCallable:!1},{name:`markPayable`,async:!1,parameters:[`now?: Date`],returnType:`void`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setCalculationTrace`,async:!1,parameters:[`trace: CommissionCalculationTrace`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`sumPayableByEarner`,async:!0,parameters:[`earnerId: string`,`currency: string`],returnType:`Promise<number>`,aiCallable:!1}],references:[`@happyvertical/smrt-sales:CommissionPayout`,`@happyvertical/smrt-sales:Earner`,`@happyvertical/smrt-sales:EarningEvent`],exposed:!0},{id:`@happyvertical/smrt-sales:CommissionAdjustment`,name:`CommissionAdjustment`,collection:`commissionadjustments`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`commissionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:Commission`},{name:`earnerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:Earner`},{name:`adjustmentKind`,type:`text`,required:!1,default:`correction`},{name:`amountCents`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`reason`,type:`text`,required:!0,default:``},{name:`createdByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`payoutId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:CommissionPayout`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/commissionadjustments`},{method:`GET`,path:`/commissionadjustments/[id]`},{method:`POST`,path:`/commissionadjustments`}],mcp:[{operation:`create`,name:`commissionadjustment_create`},{operation:`list`,name:`commissionadjustment_list`}],cli:[],methods:[{name:`claimForPayout`,async:!0,parameters:[`adjustmentIds: string[]`,`payoutId: string`],returnType:`Promise<CommissionAdjustment[]>`,aiCallable:!1},{name:`findByCommission`,async:!0,parameters:[`commissionId: string`],returnType:`Promise<CommissionAdjustment[]>`,aiCallable:!1},{name:`findByPayout`,async:!0,parameters:[`payoutId: string`],returnType:`Promise<CommissionAdjustment[]>`,aiCallable:!1},{name:`findByPayouts`,async:!0,parameters:[`payoutIds: string[]`],returnType:`Promise<CommissionAdjustment[]>`,aiCallable:!1},{name:`findUnsettledByEarner`,async:!0,parameters:[`earnerId: string`,`currency: string`],returnType:`Promise<CommissionAdjustment[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isSettled`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`sumUnsettledByEarner`,async:!0,parameters:[`earnerId: string`,`currency: string`],returnType:`Promise<number>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-sales:Commission`,`@happyvertical/smrt-sales:CommissionPayout`,`@happyvertical/smrt-sales:Earner`],exposed:!0},{id:`@happyvertical/smrt-sales:CommissionAdjustmentOperation`,name:`CommissionAdjustmentOperation`,collection:`commissionadjustmentoperations`,description:`One globally unique adjustment operation UUID mapped to its adjustment.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`adjustmentId`,type:`text`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`claim`,async:!0,parameters:[`input: ClaimCommissionAdjustmentOperationInput`],returnType:`Promise<ClaimCommissionAdjustmentOperationResult>`,aiCallable:!1},{name:`findByOperationId`,async:!0,parameters:[`operationId: string`],returnType:`Promise<CommissionAdjustmentOperation | null>`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-sales:CommissionPayout`,name:`CommissionPayout`,collection:`commissionpayouts`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`earnerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:Earner`},{name:`periodStart`,type:`datetime`,required:!1},{name:`periodEnd`,type:`datetime`,required:!1},{name:`commissionTotalCents`,type:`integer`,required:!1,default:0},{name:`adjustmentTotalCents`,type:`integer`,required:!1,default:0},{name:`totalAmountCents`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`payoutMethod`,type:`text`,required:!1,default:`bank_transfer`},{name:`status`,type:`text`,required:!1,default:`pending`},{name:`paymentReference`,type:`text`,required:!1,default:``},{name:`providerRef`,type:`text`,required:!1,default:``},{name:`paidAt`,type:`datetime`,required:!1},{name:`invoiceId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-commerce:Invoice`},{name:`notes`,type:`text`,required:!1,default:``},{name:`idempotencyKey`,type:`text`,required:!0,default:``},{name:`sourceKind`,type:`text`,required:!1,default:``},{name:`sourceId`,type:`text`,required:!1,default:``},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/commissionpayouts`},{method:`GET`,path:`/commissionpayouts/[id]`}],mcp:[{operation:`get`,name:`commissionpayout_get`},{operation:`list`,name:`commissionpayout_list`}],cli:[{operation:`get`,name:`commissionpayout_get`},{operation:`list`,name:`commissionpayout_list`}],methods:[{name:`approve`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`complete`,async:!1,parameters:[`paymentReference: string`,`now?: Date`],returnType:`void`,aiCallable:!1},{name:`fail`,async:!1,parameters:[`reason: string`],returnType:`void`,aiCallable:!1},{name:`findByEarner`,async:!0,parameters:[`earnerId: string`],returnType:`Promise<CommissionPayout[]>`,aiCallable:!1},{name:`findByIdempotencyKey`,async:!0,parameters:[`idempotencyKey: string`],returnType:`Promise<CommissionPayout | null>`,aiCallable:!1},{name:`findBySource`,async:!0,parameters:[`sourceKind: string`,`sourceId: string`,`page: object`],returnType:`Promise<CommissionPayout[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: CommissionPayoutStatus`],returnType:`Promise<CommissionPayout[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isApproved`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isFailed`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPending`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isProcessing`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isRejected`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markProcessing`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`reject`,async:!1,parameters:[`reason: string`],returnType:`void`,aiCallable:!1},{name:`resetFromFailed`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`sumPaidByEarner`,async:!0,parameters:[`earnerId: string`,`currency: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`validateTotals`,async:!1,parameters:[],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-commerce:Invoice`,`@happyvertical/smrt-sales:Earner`],exposed:!0},{id:`@happyvertical/smrt-sales:CommissionPlan`,name:`CommissionPlan`,collection:`commissionplans`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`planKey`,type:`text`,required:!0,default:``},{name:`version`,type:`integer`,required:!1,default:1},{name:`name`,type:`text`,required:!1,default:``},{name:`description`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,default:`draft`},{name:`effectiveFrom`,type:`datetime`,required:!1},{name:`effectiveTo`,type:`datetime`,required:!1},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`components`,type:`text`,required:!1,default:`[]`},{name:`steps`,type:`text`,required:!1,default:`[]`},{name:`remainderSink`,type:`text`,required:!1,default:`{}`},{name:`applicationFeeOffsetRecipient`,type:`text`,required:!1,default:`{}`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/commissionplans`},{method:`GET`,path:`/commissionplans/[id]`},{method:`POST`,path:`/commissionplans`}],mcp:[{operation:`get`,name:`commissionplan_get`},{operation:`list`,name:`commissionplan_list`}],cli:[{operation:`activate`,name:`commissionplan_activate`},{operation:`create`,name:`commissionplan_create`},{operation:`delete`,name:`commissionplan_delete`},{operation:`get`,name:`commissionplan_get`},{operation:`getComponents`,name:`commissionplan_getComponents`},{operation:`getMetadata`,name:`commissionplan_getMetadata`},{operation:`getRemainderSink`,name:`commissionplan_getRemainderSink`},{operation:`getSteps`,name:`commissionplan_getSteps`},{operation:`getWaterfallPlan`,name:`commissionplan_getWaterfallPlan`},{operation:`isActive`,name:`commissionplan_isActive`},{operation:`isDraft`,name:`commissionplan_isDraft`},{operation:`list`,name:`commissionplan_list`},{operation:`retire`,name:`commissionplan_retire`},{operation:`setComponents`,name:`commissionplan_setComponents`},{operation:`setMetadata`,name:`commissionplan_setMetadata`},{operation:`setRemainderSink`,name:`commissionplan_setRemainderSink`},{operation:`setSteps`,name:`commissionplan_setSteps`},{operation:`supersede`,name:`commissionplan_supersede`},{operation:`update`,name:`commissionplan_update`},{operation:`createAmendment`,name:`commissionplancollection_createAmendment`},{operation:`findByPlanKey`,name:`commissionplancollection_findByPlanKey`},{operation:`findByStatus`,name:`commissionplancollection_findByStatus`},{operation:`latestActiveByKey`,name:`commissionplancollection_latestActiveByKey`}],methods:[{name:`activate`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`createAmendment`,async:!0,parameters:[`planKey: string`,`changes?: CommissionPlanAmendmentChanges`],returnType:`Promise<CommissionPlan>`,aiCallable:!1},{name:`findByPlanKey`,async:!0,parameters:[`planKey: string`],returnType:`Promise<CommissionPlan[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: CommissionPlanStatus`],returnType:`Promise<CommissionPlan[]>`,aiCallable:!1},{name:`getComponents`,async:!1,parameters:[],returnType:`CommissionPlanComponent[]`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getRemainderSink`,async:!1,parameters:[],returnType:`WaterfallRecipientDescriptor | null`,aiCallable:!1},{name:`getSteps`,async:!1,parameters:[],returnType:`WaterfallStep[]`,aiCallable:!1},{name:`getWaterfallPlan`,async:!1,parameters:[],returnType:`WaterfallPlan | null`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`latestActiveByKey`,async:!0,parameters:[`planKey: string`,`at?: Date`,`tenantId?: string | null`],returnType:`Promise<CommissionPlan | null>`,aiCallable:!1},{name:`retire`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setComponents`,async:!1,parameters:[`components: CommissionPlanComponent[]`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setRemainderSink`,async:!1,parameters:[`sink: WaterfallRecipientDescriptor`],returnType:`void`,aiCallable:!1},{name:`setSteps`,async:!1,parameters:[`steps: WaterfallStep[]`],returnType:`void`,aiCallable:!1},{name:`supersede`,async:!1,parameters:[],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-sales:Earner`,name:`Earner`,collection:`earners`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`displayName`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,default:`pending`},{name:`payoutMethod`,type:`text`,required:!1,default:`bank_transfer`},{name:`payoutThresholdCents`,type:`integer`,required:!1,default:5e3},{name:`payoutScheduleKey`,type:`text`,required:!1,default:`manual`},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/earners`},{method:`GET`,path:`/earners/[id]`},{method:`POST`,path:`/earners`},{method:`PATCH`,path:`/earners/[id]`}],mcp:[{operation:`create`,name:`earner_create`},{operation:`get`,name:`earner_get`},{operation:`list`,name:`earner_list`}],cli:[{operation:`create`,name:`earner_create`},{operation:`delete`,name:`earner_delete`},{operation:`get`,name:`earner_get`},{operation:`getMetadata`,name:`earner_getMetadata`},{operation:`isActive`,name:`earner_isActive`},{operation:`isPending`,name:`earner_isPending`},{operation:`isSuspended`,name:`earner_isSuspended`},{operation:`list`,name:`earner_list`},{operation:`setMetadata`,name:`earner_setMetadata`},{operation:`update`,name:`earner_update`},{operation:`findActive`,name:`earnercollection_findActive`},{operation:`findByProfile`,name:`earnercollection_findByProfile`},{operation:`findByStatus`,name:`earnercollection_findByStatus`}],methods:[{name:`findActive`,async:!0,parameters:[],returnType:`Promise<Earner[]>`,aiCallable:!1},{name:`findByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<Earner[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: EarnerStatus`],returnType:`Promise<Earner[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPending`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSuspended`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-sales:EarnerSourceAttribution`,name:`EarnerSourceAttribution`,collection:`earnersourceattributions`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`earnerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:Earner`},{name:`sourceKind`,type:`text`,required:!0,default:``},{name:`sourceId`,type:`text`,required:!0,default:``},{name:`status`,type:`text`,required:!1,default:`active`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/earnersourceattributions`},{method:`GET`,path:`/earnersourceattributions/[id]`},{method:`POST`,path:`/earnersourceattributions`},{method:`PATCH`,path:`/earnersourceattributions/[id]`}],mcp:[{operation:`create`,name:`earnersourceattribution_create`},{operation:`get`,name:`earnersourceattribution_get`},{operation:`list`,name:`earnersourceattribution_list`}],cli:[{operation:`create`,name:`earnersourceattribution_create`},{operation:`get`,name:`earnersourceattribution_get`},{operation:`list`,name:`earnersourceattribution_list`},{operation:`update`,name:`earnersourceattribution_update`}],methods:[{name:`findByEarner`,async:!0,parameters:[`earnerId: string`],returnType:`Promise<EarnerSourceAttribution[]>`,aiCallable:!1},{name:`findBySource`,async:!0,parameters:[`sourceKind: string`,`sourceId: string`],returnType:`Promise<EarnerSourceAttribution[]>`,aiCallable:!1},{name:`findBySources`,async:!0,parameters:[`sourceKind: string`,`sourceIds: string[]`],returnType:`Promise<EarnerSourceAttribution[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-sales:Earner`],exposed:!0},{id:`@happyvertical/smrt-sales:EarningEvent`,name:`EarningEvent`,collection:`earningevents`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`eventKind`,type:`text`,required:!0,default:``},{name:`occurredAt`,type:`datetime`,required:!1},{name:`sourceKind`,type:`text`,required:!1,default:``},{name:`sourceId`,type:`text`,required:!1,default:``},{name:`grossAmountCents`,type:`integer`,required:!1,default:0},{name:`netAmountCents`,type:`integer`,required:!1},{name:`marginCents`,type:`integer`,required:!1},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`customBases`,type:`text`,required:!1,default:`{}`},{name:`dedupeKey`,type:`text`,required:!0,default:``},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/earningevents`},{method:`GET`,path:`/earningevents/[id]`},{method:`POST`,path:`/earningevents`}],mcp:[{operation:`create`,name:`earningevent_create`},{operation:`list`,name:`earningevent_list`}],cli:[],methods:[{name:`findByDedupeKey`,async:!0,parameters:[`dedupeKey: string`],returnType:`Promise<EarningEvent | null>`,aiCallable:!1},{name:`findByKind`,async:!0,parameters:[`eventKind: string`],returnType:`Promise<EarningEvent[]>`,aiCallable:!1},{name:`findBySource`,async:!0,parameters:[`sourceKind: string`,`sourceId: string`],returnType:`Promise<EarningEvent[]>`,aiCallable:!1},{name:`getCustomBases`,async:!1,parameters:[],returnType:`Record<string, number>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getOrCreateByDedupeKey`,async:!0,parameters:[`options: EarningEventOptions`],returnType:`Promise<object>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setCustomBases`,async:!1,parameters:[`bases: Record<string, number>`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-sales:ExecutedAgreement`,name:`ExecutedAgreement`,collection:`executedagreements`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`executionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:AgreementExecution`},{name:`sourceKind`,type:`text`,required:!0,default:``},{name:`sourceId`,type:`text`,required:!0,default:``},{name:`sourceVersion`,type:`integer`,required:!1,default:1},{name:`sourceAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`sourceSha256`,type:`text`,required:!1,default:``},{name:`sourceSizeBytes`,type:`integer`,required:!1,default:0},{name:`signedDocumentAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`signedDocumentSha256`,type:`text`,required:!1,default:``},{name:`signedDocumentSizeBytes`,type:`integer`,required:!1,default:0},{name:`signedDocumentMediaType`,type:`text`,required:!1,default:``},{name:`signedDocumentFilename`,type:`text`,required:!1,default:``},{name:`auditTrailAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`auditTrailSha256`,type:`text`,required:!1,default:``},{name:`auditTrailSizeBytes`,type:`integer`,required:!1,default:0},{name:`auditTrailMediaType`,type:`text`,required:!1,default:``},{name:`auditTrailFilename`,type:`text`,required:!1,default:``},{name:`signerEvidence`,type:`text`,required:!1,default:`[]`},{name:`acceptedAt`,type:`datetime`,required:!1},{name:`effectiveFrom`,type:`datetime`,required:!1},{name:`effectiveTo`,type:`datetime`,required:!1},{name:`supersedesExecutedAgreementId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:ExecutedAgreement`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/executedagreements`},{method:`GET`,path:`/executedagreements/[id]`}],mcp:[{operation:`get`,name:`executedagreement_get`},{operation:`list`,name:`executedagreement_list`}],cli:[],methods:[{name:`createImmutable`,async:!0,parameters:[`options: ExecutedAgreementOptions`],returnType:`Promise<object>`,aiCallable:!1},{name:`effectiveForSource`,async:!0,parameters:[`sourceKind: string`,`sourceId: string`,`at?: Date`],returnType:`Promise<ExecutedAgreement | null>`,aiCallable:!1},{name:`findByExecution`,async:!0,parameters:[`executionId: string`],returnType:`Promise<ExecutedAgreement | null>`,aiCallable:!1},{name:`findVersionsBySource`,async:!0,parameters:[`sourceKind: string`,`sourceId: string`],returnType:`Promise<ExecutedAgreement[]>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isEffectiveAt`,async:!1,parameters:[`at: Date`],returnType:`boolean`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-sales:AgreementExecution`,`@happyvertical/smrt-sales:ExecutedAgreement`],exposed:!0},{id:`@happyvertical/smrt-sales:Lead`,name:`Lead`,collection:`leads`,description:`Lead is an identified prospect: a person/organization that showed intent but has not yet been qualified into an Opportunity.`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!0,default:``,description:`What you call this lead.`},{name:`contactName`,type:`text`,required:!1,default:``,description:`The person to talk to.`},{name:`email`,type:`text`,required:!1,default:``,description:`Their email address.`},{name:`phone`,type:`text`,required:!1,default:``,description:`Their phone number.`},{name:`organizationName`,type:`text`,required:!1,default:``,description:`The company they are with.`},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`ownerRepId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:SalesRepresentative`,description:`The sales representative who owns this lead.`},{name:`status`,type:`text`,required:!1,default:`new`,description:`Where the lead stands, for example new or qualified.`},{name:`sourceKind`,type:`text`,required:!1,default:``},{name:`sourceId`,type:`text`,required:!1,default:``},{name:`acquisitionContext`,type:`text`,required:!1,default:`{}`},{name:`intakeRef`,type:`text`,required:!1,default:``},{name:`mergedIntoId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:Lead`},{name:`qualifiedAt`,type:`datetime`,required:!1},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/leads`},{method:`GET`,path:`/leads/[id]`},{method:`POST`,path:`/leads`},{method:`PATCH`,path:`/leads/[id]`}],mcp:[{operation:`create`,name:`lead_create`},{operation:`get`,name:`lead_get`},{operation:`list`,name:`lead_list`}],cli:[{operation:`create`,name:`lead_create`},{operation:`delete`,name:`lead_delete`},{operation:`get`,name:`lead_get`},{operation:`getAcquisitionContext`,name:`lead_getAcquisitionContext`},{operation:`getMetadata`,name:`lead_getMetadata`},{operation:`isMerged`,name:`lead_isMerged`},{operation:`isQualified`,name:`lead_isQualified`},{operation:`list`,name:`lead_list`},{operation:`setAcquisitionContext`,name:`lead_setAcquisitionContext`},{operation:`setMetadata`,name:`lead_setMetadata`},{operation:`update`,name:`lead_update`},{operation:`activitiesIncludingMerged`,name:`leadcollection_activitiesIncludingMerged`},{operation:`findByOwner`,name:`leadcollection_findByOwner`},{operation:`findByStatus`,name:`leadcollection_findByStatus`},{operation:`listInbox`,name:`leadcollection_listInbox`},{operation:`mergeLeads`,name:`leadcollection_mergeLeads`},{operation:`qualify`,name:`leadcollection_qualify`}],methods:[{name:`activitiesIncludingMerged`,async:!0,parameters:[`leadId: string`],returnType:`Promise<SalesActivity[]>`,aiCallable:!1},{name:`findByOwner`,async:!0,parameters:[`ownerRepId: string`],returnType:`Promise<Lead[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: LeadStatus`],returnType:`Promise<Lead[]>`,aiCallable:!1},{name:`getAcquisitionContext`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isMerged`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isQualified`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`listInbox`,async:!0,parameters:[`options: LeadInboxOptions`],returnType:`Promise<LeadInboxResult>`,aiCallable:!1},{name:`mergeLeads`,async:!0,parameters:[`params: MergeLeadsParams`],returnType:`Promise<MergeLeadsResult>`,aiCallable:!1},{name:`qualify`,async:!0,parameters:[`params: QualifyLeadParams`],returnType:`Promise<Opportunity>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setAcquisitionContext`,async:!1,parameters:[`context: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-sales:Lead`,`@happyvertical/smrt-sales:SalesRepresentative`],exposed:!0},{id:`@happyvertical/smrt-sales:Opportunity`,name:`Opportunity`,collection:`opportunities`,description:`Opportunity is a qualified engagement: a deal with an expected value moving through the stages of a PipelineDefinition.`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!0,default:``,description:`What you call this deal.`},{name:`leadId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:Lead`,description:`The lead it came from.`},{name:`ownerRepId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:SalesRepresentative`,description:`The sales representative who owns this deal.`},{name:`pipelineId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:PipelineDefinition`,description:`The pipeline it moves through.`},{name:`stageId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:PipelineStage`,description:`The stage it is at now.`},{name:`expectedValueCents`,type:`integer`,required:!1,default:0,description:`What you expect the deal to be worth, in cents.`},{name:`currency`,type:`text`,required:!1,default:`USD`,description:`The currency of that value.`},{name:`probability`,type:`decimal`,required:!1,default:0,description:`How likely it is to close, as a decimal (0.5 is 50%).`},{name:`expectedCloseAt`,type:`datetime`,required:!1,description:`When you expect it to close.`},{name:`status`,type:`text`,required:!1,default:`open`,description:`open, won or lost.`},{name:`outcomeReason`,type:`text`,required:!1,default:``},{name:`wonAt`,type:`datetime`,required:!1},{name:`lostAt`,type:`datetime`,required:!1},{name:`sourceKind`,type:`text`,required:!1,default:``},{name:`sourceId`,type:`text`,required:!1,default:``},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/opportunities`},{method:`GET`,path:`/opportunities/[id]`},{method:`POST`,path:`/opportunities`},{method:`PATCH`,path:`/opportunities/[id]`}],mcp:[{operation:`get`,name:`opportunity_get`},{operation:`list`,name:`opportunity_list`}],cli:[{operation:`create`,name:`opportunity_create`},{operation:`delete`,name:`opportunity_delete`},{operation:`get`,name:`opportunity_get`},{operation:`getMetadata`,name:`opportunity_getMetadata`},{operation:`isClosed`,name:`opportunity_isClosed`},{operation:`isOpen`,name:`opportunity_isOpen`},{operation:`list`,name:`opportunity_list`},{operation:`setMetadata`,name:`opportunity_setMetadata`},{operation:`update`,name:`opportunity_update`},{operation:`findByLead`,name:`opportunitycollection_findByLead`},{operation:`findOpen`,name:`opportunitycollection_findOpen`},{operation:`moveToStage`,name:`opportunitycollection_moveToStage`}],methods:[{name:`findByLead`,async:!0,parameters:[`leadId: string`],returnType:`Promise<Opportunity[]>`,aiCallable:!1},{name:`findOpen`,async:!0,parameters:[`pipelineId?: string`],returnType:`Promise<Opportunity[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isClosed`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOpen`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`moveToStage`,async:!0,parameters:[`params: MoveToStageParams`],returnType:`Promise<Opportunity>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-sales:Lead`,`@happyvertical/smrt-sales:PipelineDefinition`,`@happyvertical/smrt-sales:PipelineStage`,`@happyvertical/smrt-sales:SalesRepresentative`],exposed:!0},{id:`@happyvertical/smrt-sales:OpportunityConversion`,name:`OpportunityConversion`,collection:`opportunityconversions`,description:`OpportunityConversion records that a WON opportunity materialized into a downstream record — a client, project, contract, subscription, or any caller-defined kind.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`opportunityId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:Opportunity`},{name:`targetKind`,type:`text`,required:!0,default:``},{name:`targetId`,type:`text`,required:!0,default:``},{name:`note`,type:`text`,required:!1,default:``},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/opportunityconversions`},{method:`GET`,path:`/opportunityconversions/[id]`},{method:`POST`,path:`/opportunityconversions`}],mcp:[{operation:`get`,name:`opportunityconversion_get`},{operation:`list`,name:`opportunityconversion_list`}],cli:[],methods:[{name:`findByOpportunity`,async:!0,parameters:[`opportunityId: string`],returnType:`Promise<OpportunityConversion[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`recordConversion`,async:!0,parameters:[`params: RecordConversionParams`],returnType:`Promise<RecordConversionResult>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-sales:Opportunity`],exposed:!0},{id:`@happyvertical/smrt-sales:PipelineDefinition`,name:`PipelineDefinition`,collection:`pipelinedefinitions`,description:`PipelineDefinition names an ordered set of stages that opportunities move through. Pipelines are configuration rows, not code: tenants can run several (e.g.`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`key`,type:`text`,required:!0,default:``,description:`A short code for the pipeline.`},{name:`name`,type:`text`,required:!1,default:``,description:`What the pipeline is called.`},{name:`isDefault`,type:`boolean`,required:!1,default:!1,description:`Whether this is the default pipeline for new deals.`},{name:`status`,type:`text`,required:!1,default:`active`,description:`Whether the pipeline is active (accepts new deals) or archived.`},{name:`metadata`,type:`text`,required:!1,default:`{}`,description:`Extra details kept with the pipeline.`}],rest:[{method:`GET`,path:`/pipelinedefinitions`},{method:`GET`,path:`/pipelinedefinitions/[id]`},{method:`POST`,path:`/pipelinedefinitions`},{method:`PATCH`,path:`/pipelinedefinitions/[id]`}],mcp:[{operation:`get`,name:`pipelinedefinition_get`},{operation:`list`,name:`pipelinedefinition_list`}],cli:[{operation:`create`,name:`pipelinedefinition_create`},{operation:`delete`,name:`pipelinedefinition_delete`},{operation:`get`,name:`pipelinedefinition_get`},{operation:`getMetadata`,name:`pipelinedefinition_getMetadata`},{operation:`isActive`,name:`pipelinedefinition_isActive`},{operation:`list`,name:`pipelinedefinition_list`},{operation:`setMetadata`,name:`pipelinedefinition_setMetadata`},{operation:`update`,name:`pipelinedefinition_update`},{operation:`ensureDefaultPipeline`,name:`pipelinedefinitioncollection_ensureDefaultPipeline`},{operation:`findByKey`,name:`pipelinedefinitioncollection_findByKey`},{operation:`findDefault`,name:`pipelinedefinitioncollection_findDefault`},{operation:`getStages`,name:`pipelinedefinitioncollection_getStages`}],methods:[{name:`ensureDefaultPipeline`,async:!0,parameters:[`params?: EnsureDefaultPipelineParams`],returnType:`Promise<EnsureDefaultPipelineResult>`,aiCallable:!1},{name:`findByKey`,async:!0,parameters:[`key: string`],returnType:`Promise<PipelineDefinition | null>`,aiCallable:!1},{name:`findDefault`,async:!0,parameters:[],returnType:`Promise<PipelineDefinition | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getStages`,async:!0,parameters:[`pipelineId: string`],returnType:`Promise<PipelineStage[]>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-sales:PipelineStage`,name:`PipelineStage`,collection:`pipelinestages`,description:`PipelineStage is a configurable step within a pipeline.`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`pipelineId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:PipelineDefinition`,description:`The pipeline this stage belongs to.`},{name:`key`,type:`text`,required:!0,default:``,description:`A short code for the stage.`},{name:`name`,type:`text`,required:!1,default:``,description:`What the stage is called.`},{name:`sortOrder`,type:`integer`,required:!1,default:0,description:`Where it comes in the pipeline.`},{name:`probability`,type:`decimal`,required:!1,default:0,description:`How likely a deal at this stage is to close, as a decimal.`},{name:`isWon`,type:`boolean`,required:!1,default:!1,description:`Whether reaching this stage closes the deal as won.`},{name:`isLost`,type:`boolean`,required:!1,default:!1,description:`Whether reaching this stage closes the deal as lost.`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/pipelinestages`},{method:`GET`,path:`/pipelinestages/[id]`},{method:`POST`,path:`/pipelinestages`},{method:`PATCH`,path:`/pipelinestages/[id]`}],mcp:[{operation:`get`,name:`pipelinestage_get`},{operation:`list`,name:`pipelinestage_list`}],cli:[],methods:[{name:`findByKey`,async:!0,parameters:[`pipelineId: string`,`key: string`],returnType:`Promise<PipelineStage | null>`,aiCallable:!1},{name:`findByPipeline`,async:!0,parameters:[`pipelineId: string`],returnType:`Promise<PipelineStage[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`isTerminal`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-sales:PipelineDefinition`],exposed:!0},{id:`@happyvertical/smrt-sales:Referral`,name:`Referral`,collection:`referrals`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`referrerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:Referrer`},{name:`programId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:ReferralProgram`},{name:`policyKey`,type:`text`,required:!1,default:``},{name:`policyVersion`,type:`integer`,required:!1,default:0},{name:`status`,type:`text`,required:!1,default:`pending`},{name:`targetKind`,type:`text`,required:!1,default:``},{name:`targetId`,type:`text`,required:!1,default:``},{name:`creditFraction`,type:`decimal`,required:!1,default:1},{name:`splitGroupId`,type:`text`,required:!1,default:``},{name:`primaryTouchId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:ReferralTouch`},{name:`attributedAt`,type:`datetime`,required:!1},{name:`qualifiedAt`,type:`datetime`,required:!1},{name:`expiresAt`,type:`datetime`,required:!1},{name:`snapshotId`,type:`text`,required:!1,default:``},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/referrals`},{method:`GET`,path:`/referrals/[id]`},{method:`POST`,path:`/referrals`}],mcp:[{operation:`get`,name:`referral_get`},{operation:`list`,name:`referral_list`}],cli:[{operation:`create`,name:`referral_create`},{operation:`delete`,name:`referral_delete`},{operation:`disqualify`,name:`referral_disqualify`},{operation:`get`,name:`referral_get`},{operation:`getMetadata`,name:`referral_getMetadata`},{operation:`isAttributed`,name:`referral_isAttributed`},{operation:`isQualified`,name:`referral_isQualified`},{operation:`isTerminal`,name:`referral_isTerminal`},{operation:`list`,name:`referral_list`},{operation:`markAttributed`,name:`referral_markAttributed`},{operation:`markExpired`,name:`referral_markExpired`},{operation:`markQualified`,name:`referral_markQualified`},{operation:`markUnderReview`,name:`referral_markUnderReview`},{operation:`setMetadata`,name:`referral_setMetadata`},{operation:`update`,name:`referral_update`},{operation:`findByReferrer`,name:`referralcollection_findByReferrer`},{operation:`findByTarget`,name:`referralcollection_findByTarget`},{operation:`findQualifiedByTarget`,name:`referralcollection_findQualifiedByTarget`},{operation:`sweepExpired`,name:`referralcollection_sweepExpired`}],methods:[{name:`disqualify`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`findByReferrer`,async:!0,parameters:[`referrerId: string`],returnType:`Promise<Referral[]>`,aiCallable:!1},{name:`findByTarget`,async:!0,parameters:[`targetKind: string`,`targetId: string`],returnType:`Promise<Referral[]>`,aiCallable:!1},{name:`findQualifiedByTarget`,async:!0,parameters:[`targetKind: string`,`targetId: string`],returnType:`Promise<Referral[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAttributed`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isQualified`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isTerminal`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markAttributed`,async:!1,parameters:[`at?: Date`],returnType:`void`,aiCallable:!1},{name:`markExpired`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`markQualified`,async:!1,parameters:[`at?: Date`],returnType:`void`,aiCallable:!1},{name:`markUnderReview`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`sweepExpired`,async:!0,parameters:[`now?: Date`],returnType:`Promise<Referral[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-sales:ReferralProgram`,`@happyvertical/smrt-sales:ReferralTouch`,`@happyvertical/smrt-sales:Referrer`],exposed:!0},{id:`@happyvertical/smrt-sales:ReferralAgreement`,name:`ReferralAgreement`,collection:`referralagreements`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`referrerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:Referrer`},{name:`programId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:ReferralProgram`},{name:`version`,type:`integer`,required:!1,default:1},{name:`status`,type:`text`,required:!1,default:`draft`},{name:`effectiveFrom`,type:`datetime`,required:!1},{name:`effectiveTo`,type:`datetime`,required:!1},{name:`commissionPlanKey`,type:`text`,required:!1,default:``},{name:`commissionPlanVersion`,type:`integer`,required:!1,default:0},{name:`clearingDays`,type:`integer`,required:!1,default:0},{name:`approvalMode`,type:`text`,required:!1,default:`manual`},{name:`executionId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:AgreementExecution`},{name:`executedAgreementId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:ExecutedAgreement`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/referralagreements`},{method:`GET`,path:`/referralagreements/[id]`},{method:`POST`,path:`/referralagreements`}],mcp:[{operation:`get`,name:`referralagreement_get`},{operation:`list`,name:`referralagreement_list`}],cli:[{operation:`activate`,name:`referralagreement_activate`},{operation:`bindExecutedAgreement`,name:`referralagreement_bindExecutedAgreement`},{operation:`bindExecution`,name:`referralagreement_bindExecution`},{operation:`create`,name:`referralagreement_create`},{operation:`delete`,name:`referralagreement_delete`},{operation:`get`,name:`referralagreement_get`},{operation:`getMetadata`,name:`referralagreement_getMetadata`},{operation:`isActive`,name:`referralagreement_isActive`},{operation:`isDraft`,name:`referralagreement_isDraft`},{operation:`isEffectiveAt`,name:`referralagreement_isEffectiveAt`},{operation:`list`,name:`referralagreement_list`},{operation:`setMetadata`,name:`referralagreement_setMetadata`},{operation:`supersede`,name:`referralagreement_supersede`},{operation:`terminate`,name:`referralagreement_terminate`},{operation:`update`,name:`referralagreement_update`},{operation:`activeFor`,name:`referralagreementcollection_activeFor`},{operation:`createAmendment`,name:`referralagreementcollection_createAmendment`},{operation:`findByReferrerAndProgram`,name:`referralagreementcollection_findByReferrerAndProgram`}],methods:[{name:`activate`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`activeFor`,async:!0,parameters:[`referrerId: string`,`programId: string`,`at?: Date`],returnType:`Promise<ReferralAgreement | null>`,aiCallable:!1},{name:`bindExecutedAgreement`,async:!1,parameters:[`executedAgreementId: string`],returnType:`void`,aiCallable:!1},{name:`bindExecution`,async:!1,parameters:[`executionId: string`],returnType:`void`,aiCallable:!1},{name:`createAmendment`,async:!0,parameters:[`referrerId: string`,`programId: string`,`changes?: ReferralAgreementAmendmentChanges`],returnType:`Promise<ReferralAgreement>`,aiCallable:!1},{name:`findByReferrerAndProgram`,async:!0,parameters:[`referrerId: string`,`programId: string`],returnType:`Promise<ReferralAgreement[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isEffectiveAt`,async:!1,parameters:[`at: Date`],returnType:`boolean`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`supersede`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`terminate`,async:!1,parameters:[],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-sales:AgreementExecution`,`@happyvertical/smrt-sales:ExecutedAgreement`,`@happyvertical/smrt-sales:ReferralProgram`,`@happyvertical/smrt-sales:Referrer`],exposed:!0},{id:`@happyvertical/smrt-sales:ReferralClickOperation`,name:`ReferralClickOperation`,collection:`referralclickoperations`,description:`One globally unique caller replay key mapped to its immutable click touch.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`keyHash`,type:`text`,required:!0},{name:`linkId`,type:`text`,required:!0},{name:`touchId`,type:`text`,required:!0},{name:`intentHash`,type:`text`,required:!0},{name:`callerEvidenceHash`,type:`text`,required:!0},{name:`requestedOccurredAt`,type:`text`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`claim`,async:!0,parameters:[`input: ClaimReferralClickOperationInput`],returnType:`Promise<ClaimReferralClickOperationResult>`,aiCallable:!1},{name:`findByOperationId`,async:!0,parameters:[`operationId: string`],returnType:`Promise<ReferralClickOperation | null>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-sales:ReferralLink`,name:`ReferralLink`,collection:`referrallinks`,description:`A ReferralLink is the shareable artifact a Referrer distributes: a globally unique code (natural key ['code'] — codes resolve without knowing the tenant/program) plus an optional destination…`,display:{label:`label`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`referrerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:Referrer`},{name:`programId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:ReferralProgram`},{name:`code`,type:`text`,required:!0,default:``},{name:`targetUrl`,type:`text`,required:!1,default:``},{name:`label`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,default:`active`},{name:`clickCount`,type:`integer`,required:!1,default:0},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/referrallinks`},{method:`GET`,path:`/referrallinks/[id]`},{method:`POST`,path:`/referrallinks`},{method:`PATCH`,path:`/referrallinks/[id]`}],mcp:[{operation:`create`,name:`referrallink_create`},{operation:`get`,name:`referrallink_get`},{operation:`list`,name:`referrallink_list`}],cli:[{operation:`create`,name:`referrallink_create`},{operation:`delete`,name:`referrallink_delete`},{operation:`get`,name:`referrallink_get`},{operation:`getMetadata`,name:`referrallink_getMetadata`},{operation:`isActive`,name:`referrallink_isActive`},{operation:`list`,name:`referrallink_list`},{operation:`setMetadata`,name:`referrallink_setMetadata`},{operation:`update`,name:`referrallink_update`},{operation:`createWithUniqueCode`,name:`referrallinkcollection_createWithUniqueCode`},{operation:`findByCode`,name:`referrallinkcollection_findByCode`},{operation:`findByReferrer`,name:`referrallinkcollection_findByReferrer`},{operation:`recordClick`,name:`referrallinkcollection_recordClick`}],methods:[{name:`createWithUniqueCode`,async:!0,parameters:[`input: CreateReferralLinkInput`],returnType:`Promise<ReferralLink>`,aiCallable:!1},{name:`findByCode`,async:!0,parameters:[`code: string`],returnType:`Promise<ReferralLink | null>`,aiCallable:!1},{name:`findByReferrer`,async:!0,parameters:[`referrerId: string`],returnType:`Promise<ReferralLink[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`recordClick`,async:!0,parameters:[`input: RecordClickInput`],returnType:`Promise<RecordClickResult>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-sales:ReferralProgram`,`@happyvertical/smrt-sales:Referrer`],exposed:!0},{id:`@happyvertical/smrt-sales:ReferralProgram`,name:`ReferralProgram`,collection:`referralprograms`,description:`A ReferralProgram anchors links, touches, referrals, agreements, and exceptions, and carries the program-level DEFAULTS:`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`key`,type:`text`,required:!0,default:``},{name:`name`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,default:`draft`},{name:`defaultCommissionPlanKey`,type:`text`,required:!1,default:``},{name:`defaultAttributionPolicyKey`,type:`text`,required:!1,default:``},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/referralprograms`},{method:`GET`,path:`/referralprograms/[id]`},{method:`POST`,path:`/referralprograms`},{method:`PATCH`,path:`/referralprograms/[id]`}],mcp:[{operation:`get`,name:`referralprogram_get`},{operation:`list`,name:`referralprogram_list`}],cli:[{operation:`create`,name:`referralprogram_create`},{operation:`delete`,name:`referralprogram_delete`},{operation:`get`,name:`referralprogram_get`},{operation:`getMetadata`,name:`referralprogram_getMetadata`},{operation:`isActive`,name:`referralprogram_isActive`},{operation:`list`,name:`referralprogram_list`},{operation:`setMetadata`,name:`referralprogram_setMetadata`},{operation:`update`,name:`referralprogram_update`},{operation:`findActive`,name:`referralprogramcollection_findActive`},{operation:`findByKey`,name:`referralprogramcollection_findByKey`},{operation:`findByStatus`,name:`referralprogramcollection_findByStatus`}],methods:[{name:`findActive`,async:!0,parameters:[],returnType:`Promise<ReferralProgram[]>`,aiCallable:!1},{name:`findByKey`,async:!0,parameters:[`key: string`],returnType:`Promise<ReferralProgram | null>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: ReferralProgramStatus`],returnType:`Promise<ReferralProgram[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-sales:ReferralTermSnapshot`,name:`ReferralTermSnapshot`,collection:`referraltermsnapshots`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`referralId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:Referral`},{name:`agreementId`,type:`text`,required:!1,default:``},{name:`agreementVersion`,type:`integer`,required:!1,default:0},{name:`planKey`,type:`text`,required:!1,default:``},{name:`planVersion`,type:`integer`,required:!1,default:0},{name:`policyKey`,type:`text`,required:!1,default:``},{name:`policyVersion`,type:`integer`,required:!1,default:0},{name:`components`,type:`text`,required:!1,default:`[]`},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`clearingDays`,type:`integer`,required:!1,default:0},{name:`approvalMode`,type:`text`,required:!1,default:`manual`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/referraltermsnapshots`},{method:`GET`,path:`/referraltermsnapshots/[id]`}],mcp:[{operation:`get`,name:`referraltermsnapshot_get`},{operation:`list`,name:`referraltermsnapshot_list`}],cli:[],methods:[{name:`findByReferral`,async:!0,parameters:[`referralId: string`],returnType:`Promise<ReferralTermSnapshot[]>`,aiCallable:!1},{name:`getComponents`,async:!1,parameters:[],returnType:`CommissionPlanComponent[]`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-sales:Referral`],exposed:!0},{id:`@happyvertical/smrt-sales:ReferralTouch`,name:`ReferralTouch`,collection:`referraltouches`,display:{label:`code`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`linkId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:ReferralLink`},{name:`code`,type:`text`,required:!1,default:``},{name:`referrerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-sales:Referrer`},{name:`programId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:ReferralProgram`},{name:`kind`,type:`text`,required:!1,default:`click`},{name:`subjectKind`,type:`text`,required:!1,default:``},{name:`subjectId`,type:`text`,required:!1,default:``},{name:`occurredAt`,type:`datetime`,required:!1},{name:`evidence`,type:`text`,required:!1,default:`{}`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/referraltouches`},{method:`GET`,path:`/referraltouches/[id]`},{method:`POST`,path:`/referraltouches`}],mcp:[{operation:`create`,name:`referraltouch_create`},{operation:`list`,name:`referraltouch_list`}],cli:[],methods:[{name:`findByReferrer`,async:!0,parameters:[`referrerId: string`],returnType:`Promise<ReferralTouch[]>`,aiCallable:!1},{name:`findBySubject`,async:!0,parameters:[`subjectKind: string`,`subjectId: string`],returnType:`Promise<ReferralTouch[]>`,aiCallable:!1},{name:`findByTargetWindow`,async:!0,parameters:[`query: TouchWindowQuery`],returnType:`Promise<ReferralTouch[]>`,aiCallable:!1},{name:`getEvidence`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setEvidence`,async:!1,parameters:[`evidence: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-sales:ReferralLink`,`@happyvertical/smrt-sales:ReferralProgram`,`@happyvertical/smrt-sales:Referrer`],exposed:!0},{id:`@happyvertical/smrt-sales:Referrer`,name:`Referrer`,collection:`referrers`,description:`Referrer is a ROLE model: it links an identity (smrt-profiles Profile) to referral activity (ReferralLinks, ReferralTouches, and Referrals reference referrerId).`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`earnerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:Earner`},{name:`displayName`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,default:`pending`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/referrers`},{method:`GET`,path:`/referrers/[id]`},{method:`POST`,path:`/referrers`},{method:`PATCH`,path:`/referrers/[id]`}],mcp:[{operation:`create`,name:`referrer_create`},{operation:`get`,name:`referrer_get`},{operation:`list`,name:`referrer_list`}],cli:[{operation:`create`,name:`referrer_create`},{operation:`delete`,name:`referrer_delete`},{operation:`get`,name:`referrer_get`},{operation:`getMetadata`,name:`referrer_getMetadata`},{operation:`isActive`,name:`referrer_isActive`},{operation:`isPending`,name:`referrer_isPending`},{operation:`isSuspended`,name:`referrer_isSuspended`},{operation:`list`,name:`referrer_list`},{operation:`setMetadata`,name:`referrer_setMetadata`},{operation:`update`,name:`referrer_update`},{operation:`findActive`,name:`referrercollection_findActive`},{operation:`findByProfile`,name:`referrercollection_findByProfile`},{operation:`findByStatus`,name:`referrercollection_findByStatus`}],methods:[{name:`findActive`,async:!0,parameters:[],returnType:`Promise<Referrer[]>`,aiCallable:!1},{name:`findByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<Referrer[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: ReferrerStatus`],returnType:`Promise<Referrer[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPending`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSuspended`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-sales:Earner`],exposed:!0},{id:`@happyvertical/smrt-sales:SalesActivity`,name:`SalesActivity`,collection:`salesactivities`,description:`SalesActivity is the shared trail for Leads and Opportunities: human touchpoints (note, call, email, meeting), next actions (task with dueAt/completedAt), and framework-written audit rows…`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`subjectKind`,type:`text`,required:!1,default:`lead`,description:`What the activity is about: a lead or an opportunity.`},{name:`subjectId`,type:`text`,required:!0,default:``,description:`The lead or opportunity it is about.`},{name:`activityKind`,type:`text`,required:!1,default:`note`,description:`The kind of activity, for example call, note or email.`},{name:`summary`,type:`text`,required:!1,default:``,description:`What happened or what needs doing.`},{name:`dueAt`,type:`datetime`,required:!1,description:`When it is due.`},{name:`completedAt`,type:`datetime`,required:!1,description:`When it was done.`},{name:`actorProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/salesactivities`},{method:`GET`,path:`/salesactivities/[id]`},{method:`POST`,path:`/salesactivities`}],mcp:[{operation:`create`,name:`salesactivity_create`},{operation:`list`,name:`salesactivity_list`}],cli:[],methods:[{name:`findBySubject`,async:!0,parameters:[`subjectKind: SalesActivitySubjectKind`,`subjectId: string`],returnType:`Promise<SalesActivity[]>`,aiCallable:!1},{name:`findOpenTasks`,async:!0,parameters:[`subjectKind: SalesActivitySubjectKind`,`subjectId: string`],returnType:`Promise<SalesActivity[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`isOpenTask`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-sales:SalesRepresentative`,name:`SalesRepresentative`,collection:`salesrepresentatives`,description:`SalesRepresentative is a ROLE model: it links an identity (smrt-profiles Profile) to sales ownership (Leads/Opportunities reference ownerRepId).`,display:{label:`title`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`earnerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sales:Earner`},{name:`status`,type:`text`,required:!1,default:`active`},{name:`title`,type:`text`,required:!1,default:``},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/salesrepresentatives`},{method:`GET`,path:`/salesrepresentatives/[id]`},{method:`POST`,path:`/salesrepresentatives`},{method:`PATCH`,path:`/salesrepresentatives/[id]`}],mcp:[{operation:`get`,name:`salesrepresentative_get`},{operation:`list`,name:`salesrepresentative_list`}],cli:[{operation:`create`,name:`salesrepresentative_create`},{operation:`delete`,name:`salesrepresentative_delete`},{operation:`get`,name:`salesrepresentative_get`},{operation:`getMetadata`,name:`salesrepresentative_getMetadata`},{operation:`isActive`,name:`salesrepresentative_isActive`},{operation:`list`,name:`salesrepresentative_list`},{operation:`setMetadata`,name:`salesrepresentative_setMetadata`},{operation:`update`,name:`salesrepresentative_update`},{operation:`findActive`,name:`salesrepresentativecollection_findActive`},{operation:`findByProfile`,name:`salesrepresentativecollection_findByProfile`}],methods:[{name:`findActive`,async:!0,parameters:[],returnType:`Promise<SalesRepresentative[]>`,aiCallable:!1},{name:`findByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<SalesRepresentative[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-sales:Earner`],exposed:!0}],dependencies:[`assets`,`commerce`,`profiles`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`],reason:`node:crypto`,via:[`@happyvertical/smrt-tenancy`]},recipes:[{id:`sales.pipeline`,label:`Leads & pipeline`,summary:`Capture leads and move them through your sales stages.`,synonyms:[`crm`,`prospects`,`opportunities`,`deals`,`funnel`],models:[`@happyvertical/smrt-sales:Lead`,`@happyvertical/smrt-sales:Opportunity`,`@happyvertical/smrt-sales:PipelineDefinition`,`@happyvertical/smrt-sales:PipelineStage`,`@happyvertical/smrt-sales:SalesActivity`],nav:[{label:`Leads`,model:`@happyvertical/smrt-sales:Lead`,icon:`users`,description:`People who might become customers, and where each one stands.`},{label:`Opportunities`,model:`@happyvertical/smrt-sales:Opportunity`,icon:`briefcase`,description:`Deals in progress, with their value and next step.`},{label:`Pipelines`,model:`@happyvertical/smrt-sales:PipelineDefinition`,icon:`layers`,description:`The stages a deal moves through on its way to a sale.`}],requires:[],section:{id:`sales`,label:`Sales`,icon:`shoppingBag`,description:`Customers, orders and quotes: everything you sell.`},options:{"@happyvertical/smrt-sales:Lead":{fields:{profileId:{visibility:`hidden`},mergedIntoId:{visibility:`hidden`},sourceKind:{visibility:`hidden`},sourceId:{visibility:`hidden`},acquisitionContext:{visibility:`hidden`},intakeRef:{visibility:`hidden`},metadata:{visibility:`hidden`},qualifiedAt:{visibility:`hidden`}}},"@happyvertical/smrt-sales:Opportunity":{fields:{sourceKind:{visibility:`hidden`},sourceId:{visibility:`hidden`},metadata:{visibility:`hidden`},outcomeReason:{visibility:`hidden`},wonAt:{visibility:`hidden`},lostAt:{visibility:`hidden`}}},"@happyvertical/smrt-sales:PipelineStage":{fields:{metadata:{visibility:`hidden`}}},"@happyvertical/smrt-sales:SalesActivity":{fields:{metadata:{visibility:`hidden`},actorProfileId:{visibility:`hidden`}}}},help:{markdown:`## Overview
869
-
870
- Leads and pipeline is a light CRM. You capture leads, turn the promising ones
871
- into opportunities, and move each through the stages of a pipeline. Activities
872
- record calls, notes and follow-ups.
873
-
874
- ## Tasks
875
-
876
- ### Capture a lead
877
-
878
- 1. Create a new lead.
879
- 2. Enter the **{field:name}**, **{field:email}** and **{field:phone}**.
880
- 3. Keep **{field:status}** up to date as you qualify them.
881
-
882
- ### Work an opportunity
883
-
884
- 1. Create a pipeline, then add its stages in order.
885
- 2. Create a new opportunity and pick the **{field:leadId}**.
886
- 3. Choose the **{field:pipelineId}** and **{field:stageId}**, and enter the
887
- **{field:expectedValueCents}** and **{field:expectedCloseAt}**.
888
- 4. Move the **{field:stageId}** along as the deal progresses.
889
- `,fieldRefs:[`email`,`expectedCloseAt`,`expectedValueCents`,`leadId`,`name`,`phone`,`pipelineId`,`stageId`,`status`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: node:crypto; and its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624).`]}}]},{id:`sites`,packageName:`@happyvertical/smrt-sites`,version:`0.57.9`,description:`Site lifecycle management for multi-tenant SMRT networks`,models:[{id:`@happyvertical/smrt-sites:Site`,name:`Site`,collection:`sites`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`domain`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`draft`,`active`,`suspended`,`archived`]},{name:`tier`,type:`text`,required:!1,default:`free`,enum:[`free`,`standard`,`premium`]},{name:`databaseUrl`,type:`text`,required:!1,default:``},{name:`databaseType`,type:`text`,required:!1,default:``},{name:`portalConfig`,type:`text`,required:!1,default:``},{name:`repositoryUrl`,type:`text`,required:!1,default:``},{name:`templateName`,type:`text`,required:!1,default:``},{name:`provisioningStatus`,type:`text`,required:!1,default:``,enum:[`pending`,`provisioning`,`ready`,`failed`,``]},{name:`provisionedAt`,type:`datetime`,required:!1},{name:`provisioningError`,type:`text`,required:!1,default:``},{name:`metadata`,type:`text`,required:!1,default:``},{name:`createdAt`,type:`datetime`,required:!1,system:!0},{name:`updatedAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`GET`,path:`/sites`},{method:`GET`,path:`/sites/[id]`},{method:`POST`,path:`/sites`},{method:`PATCH`,path:`/sites/[id]`},{method:`DELETE`,path:`/sites/[id]`}],mcp:[{operation:`create`,name:`site_create`},{operation:`get`,name:`site_get`},{operation:`list`,name:`site_list`},{operation:`update`,name:`site_update`}],cli:[{operation:`create`,name:`site_create`},{operation:`delete`,name:`site_delete`},{operation:`get`,name:`site_get`},{operation:`getMetadata`,name:`site_getMetadata`},{operation:`getPortalConfig`,name:`site_getPortalConfig`},{operation:`isActive`,name:`site_isActive`},{operation:`isReady`,name:`site_isReady`},{operation:`list`,name:`site_list`},{operation:`setMetadata`,name:`site_setMetadata`},{operation:`setPortalConfig`,name:`site_setPortalConfig`},{operation:`update`,name:`site_update`},{operation:`updateMetadata`,name:`site_updateMetadata`},{operation:`findActive`,name:`sitecollection_findActive`},{operation:`findByDomain`,name:`sitecollection_findByDomain`},{operation:`findByStatus`,name:`sitecollection_findByStatus`},{operation:`findByTenant`,name:`sitecollection_findByTenant`}],methods:[{name:`findActive`,async:!0,parameters:[],returnType:`Promise<Site[]>`,aiCallable:!1},{name:`findByDomain`,async:!0,parameters:[`domain: string`],returnType:`Promise<Site | null>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: SiteStatus`],returnType:`Promise<Site[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Site[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getPortalConfig`,async:!1,parameters:[],returnType:`SitePortalConfig`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isReady`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setPortalConfig`,async:!1,parameters:[`config: SitePortalConfig`],returnType:`void`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-sites:SiteAgentBinding`,name:`SiteAgentBinding`,collection:`siteagentbindings`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`siteId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-sites:Site`},{name:`agentClass`,type:`text`,required:!1,default:``},{name:`enabled`,type:`boolean`,required:!1,default:!0},{name:`config`,type:`json`,required:!1},{name:`priority`,type:`integer`,required:!1,default:0}],rest:[{method:`GET`,path:`/siteagentbindings`},{method:`GET`,path:`/siteagentbindings/[id]`},{method:`POST`,path:`/siteagentbindings`},{method:`PATCH`,path:`/siteagentbindings/[id]`},{method:`DELETE`,path:`/siteagentbindings/[id]`}],mcp:[{operation:`get`,name:`siteagentbinding_get`},{operation:`list`,name:`siteagentbinding_list`}],cli:[{operation:`get`,name:`siteagentbinding_get`},{operation:`list`,name:`siteagentbinding_list`}],methods:[{name:`findByAgent`,async:!0,parameters:[`agentClass: string`],returnType:`Promise<SiteAgentBinding[]>`,aiCallable:!1},{name:`findBySite`,async:!0,parameters:[`siteId: string`],returnType:`Promise<SiteAgentBinding[]>`,aiCallable:!1},{name:`findBySiteAndAgent`,async:!0,parameters:[`siteId: string`,`agentClass: string`],returnType:`Promise<SiteAgentBinding | null>`,aiCallable:!1},{name:`findEnabled`,async:!0,parameters:[`siteId: string`],returnType:`Promise<SiteAgentBinding[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-sites:Site`],exposed:!0}],dependencies:[],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`],via:[`@happyvertical/smrt-tenancy`]}},{id:`social`,packageName:`@happyvertical/smrt-social`,version:`0.57.9`,description:`Social media account management for multi-platform publishing in the SMRT ecosystem`,models:[{id:`@happyvertical/smrt-social:OAuthState`,name:`OAuthState`,collection:`oauthstates`,description:`Temporary OAuth state for social account connection`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`platform`,type:`text`,required:!1,default:`youtube`,enum:[`youtube`,`threads`,`x`,`bluesky`,`facebook`]},{name:`state`,type:`text`,required:!1,default:``},{name:`codeVerifier`,type:`text`,required:!1},{name:`redirectUri`,type:`text`,required:!1,default:``},{name:`scopes`,type:`json`,required:!1},{name:`expiresAt`,type:`datetime`,required:!1},{name:`createdByUserId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:User`},{name:`returnTo`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/oauthstates`},{method:`GET`,path:`/oauthstates/[id]`},{method:`POST`,path:`/oauthstates`},{method:`DELETE`,path:`/oauthstates/[id]`}],mcp:[],cli:[{operation:`create`,name:`oauthstate_create`},{operation:`delete`,name:`oauthstate_delete`},{operation:`generateCodeChallenge`,name:`oauthstate_generateCodeChallenge`},{operation:`generateCodeVerifier`,name:`oauthstate_generateCodeVerifier`},{operation:`generateState`,name:`oauthstate_generateState`},{operation:`get`,name:`oauthstate_get`},{operation:`list`,name:`oauthstate_list`},{operation:`update`,name:`oauthstate_update`},{operation:`verifyState`,name:`oauthstate_verifyState`},{operation:`consume`,name:`oauthstatecollection_consume`},{operation:`deleteExpired`,name:`oauthstatecollection_deleteExpired`},{operation:`findByState`,name:`oauthstatecollection_findByState`},{operation:`findExpired`,name:`oauthstatecollection_findExpired`}],methods:[{name:`consume`,async:!0,parameters:[`state: OAuthState`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`deleteExpired`,async:!0,parameters:[`now?: Date`],returnType:`Promise<number>`,aiCallable:!1},{name:`findByState`,async:!0,parameters:[`state: string`],returnType:`Promise<OAuthState | null>`,aiCallable:!1},{name:`findExpired`,async:!0,parameters:[`now?: Date`],returnType:`Promise<OAuthState[]>`,aiCallable:!1},{name:`verifyState`,async:!1,parameters:[`callbackState: string`],returnType:`boolean`,aiCallable:!1}],references:[`@happyvertical/smrt-users:User`],exposed:!0},{id:`@happyvertical/smrt-social:SocialAccount`,name:`SocialAccount`,collection:`socialaccounts`,description:`Connected social media account for publishing`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`platform`,type:`text`,required:!1,default:`youtube`,enum:[`youtube`,`threads`,`x`,`bluesky`,`facebook`]},{name:`platformUserId`,type:`text`,required:!1},{name:`platformUsername`,type:`text`,required:!1},{name:`platformUrl`,type:`text`,required:!1},{name:`accessToken`,type:`text`,required:!1},{name:`refreshToken`,type:`text`,required:!1},{name:`credentialSecretId`,type:`text`,required:!1},{name:`accessTokenSecretName`,type:`text`,required:!1},{name:`refreshTokenSecretName`,type:`text`,required:!1},{name:`tokenExpiresAt`,type:`datetime`,required:!1},{name:`isActive`,type:`boolean`,required:!1,default:!0},{name:`defaultHashtags`,type:`json`,required:!1},{name:`scopes`,type:`json`,required:!1},{name:`missingPermissions`,type:`json`,required:!1},{name:`linkBehavior`,type:`text`,required:!1,default:`description`,enum:[`description`,`inline`,`attachment`,`reply`,`none`]},{name:`publishMode`,type:`text`,required:!1,default:`dry_run`,enum:[`dry_run`,`stage_remote`,`private_or_scheduled`,`public`]},{name:`publicPublishingAllowed`,type:`boolean`,required:!1,default:!1},{name:`status`,type:`text`,required:!1,default:`connected`,enum:[`connected`,`disconnected`,`expired`,`missing_permissions`,`error`]},{name:`errorMessage`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/socialaccounts`},{method:`GET`,path:`/socialaccounts/[id]`},{method:`POST`,path:`/socialaccounts`},{method:`PATCH`,path:`/socialaccounts/[id]`},{method:`DELETE`,path:`/socialaccounts/[id]`}],mcp:[{operation:`get`,name:`socialaccount_get`},{operation:`list`,name:`socialaccount_list`}],cli:[{operation:`create`,name:`socialaccount_create`},{operation:`delete`,name:`socialaccount_delete`},{operation:`get`,name:`socialaccount_get`},{operation:`getCredentials`,name:`socialaccount_getCredentials`},{operation:`list`,name:`socialaccount_list`},{operation:`setCredentials`,name:`socialaccount_setCredentials`},{operation:`update`,name:`socialaccount_update`},{operation:`findActive`,name:`socialaccountcollection_findActive`},{operation:`findNeedsAttention`,name:`socialaccountcollection_findNeedsAttention`},{operation:`findReady`,name:`socialaccountcollection_findReady`}],methods:[{name:`findActive`,async:!0,parameters:[`platform?: SocialPlatformType`],returnType:`Promise<SocialAccount[]>`,aiCallable:!1},{name:`findNeedsAttention`,async:!0,parameters:[],returnType:`Promise<SocialAccount[]>`,aiCallable:!1},{name:`findReady`,async:!0,parameters:[`platform?: SocialPlatformType`],returnType:`Promise<SocialAccount[]>`,aiCallable:!1},{name:`getCredentials`,async:!0,parameters:[],returnType:`Promise<Record<string, unknown> | null>`,aiCallable:!1},{name:`getSlug`,async:!0,parameters:[],returnType:`Promise<string | null | undefined>`,aiCallable:!1},{name:`setCredentials`,async:!0,parameters:[`credentials: Record<string, unknown>`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-social:SocialPost`,name:`SocialPost`,collection:`socialposts`,description:`Social media post for multi-platform publishing`,display:{label:`title`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`socialAccountId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-social:SocialAccount`},{name:`createdByUserId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:User`},{name:`videoContentId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-video:VideoContent`},{name:`contentId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-content:Content`},{name:`postType`,type:`text`,required:!1,default:`text`,enum:[`text`,`link`,`image`,`video`]},{name:`mediaUrl`,type:`text`,required:!1},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1,default:``},{name:`hashtags`,type:`json`,required:!1},{name:`linkUrl`,type:`text`,required:!1},{name:`platformPostId`,type:`text`,required:!1},{name:`platformUrl`,type:`text`,required:!1},{name:`scheduledAt`,type:`datetime`,required:!1},{name:`publishedAt`,type:`datetime`,required:!1},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`draft`,`pending_approval`,`approved`,`scheduled`,`publishing`,`dry_run`,`staged`,`published`,`failed`,`cancelled`]},{name:`errorMessage`,type:`text`,required:!1},{name:`analytics`,type:`json`,required:!1},{name:`analyticsLastSyncedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/socialposts`},{method:`GET`,path:`/socialposts/[id]`},{method:`POST`,path:`/socialposts`},{method:`PATCH`,path:`/socialposts/[id]`},{method:`DELETE`,path:`/socialposts/[id]`}],mcp:[{operation:`get`,name:`socialpost_get`},{operation:`list`,name:`socialpost_list`}],cli:[{operation:`create`,name:`socialpost_create`},{operation:`delete`,name:`socialpost_delete`},{operation:`get`,name:`socialpost_get`},{operation:`list`,name:`socialpost_list`},{operation:`update`,name:`socialpost_update`},{operation:`createDraft`,name:`socialpostcollection_createDraft`},{operation:`findByStatus`,name:`socialpostcollection_findByStatus`},{operation:`findDueForPublish`,name:`socialpostcollection_findDueForPublish`},{operation:`findForAccount`,name:`socialpostcollection_findForAccount`},{operation:`recordPublishFailure`,name:`socialpostcollection_recordPublishFailure`},{operation:`recordPublishSuccess`,name:`socialpostcollection_recordPublishSuccess`},{operation:`updateLatestAnalytics`,name:`socialpostcollection_updateLatestAnalytics`}],methods:[{name:`createDraft`,async:!0,parameters:[`options: CreateSocialPostDraftOptions`],returnType:`Promise<SocialPost>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: PostStatus`],returnType:`Promise<SocialPost[]>`,aiCallable:!1},{name:`findDueForPublish`,async:!0,parameters:[`now?: Date`],returnType:`Promise<SocialPost[]>`,aiCallable:!1},{name:`findForAccount`,async:!0,parameters:[`socialAccountId: string`],returnType:`Promise<SocialPost[]>`,aiCallable:!1},{name:`recordPublishFailure`,async:!0,parameters:[`post: SocialPost`,`error: Error | string`],returnType:`Promise<SocialPost>`,aiCallable:!1},{name:`recordPublishSuccess`,async:!0,parameters:[`post: SocialPost`,`data: PublishSuccessData`],returnType:`Promise<SocialPost>`,aiCallable:!1},{name:`updateLatestAnalytics`,async:!0,parameters:[`post: SocialPost`,`analytics: PostAnalytics`,`syncedAt?: Date`],returnType:`Promise<SocialPost>`,aiCallable:!1}],references:[`@happyvertical/smrt-content:Content`,`@happyvertical/smrt-social:SocialAccount`,`@happyvertical/smrt-users:User`,`@happyvertical/smrt-video:VideoContent`],exposed:!0},{id:`@happyvertical/smrt-social:SocialPostAnalyticsSnapshot`,name:`SocialPostAnalyticsSnapshot`,collection:`socialpostanalyticssnapshots`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`socialPostId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-social:SocialPost`},{name:`platform`,type:`text`,required:!0,enum:[`youtube`,`threads`,`x`,`bluesky`,`facebook`]},{name:`analytics`,type:`json`,required:!1},{name:`raw`,type:`json`,required:!1},{name:`capturedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/socialpostanalyticssnapshots`},{method:`GET`,path:`/socialpostanalyticssnapshots/[id]`},{method:`POST`,path:`/socialpostanalyticssnapshots`},{method:`DELETE`,path:`/socialpostanalyticssnapshots/[id]`}],mcp:[{operation:`get`,name:`socialpostanalyticssnapshot_get`},{operation:`list`,name:`socialpostanalyticssnapshot_list`}],cli:[{operation:`create`,name:`socialpostanalyticssnapshot_create`},{operation:`delete`,name:`socialpostanalyticssnapshot_delete`},{operation:`get`,name:`socialpostanalyticssnapshot_get`},{operation:`list`,name:`socialpostanalyticssnapshot_list`},{operation:`update`,name:`socialpostanalyticssnapshot_update`},{operation:`findForPost`,name:`socialpostanalyticssnapshotcollection_findForPost`},{operation:`findLatestForPost`,name:`socialpostanalyticssnapshotcollection_findLatestForPost`},{operation:`recordSnapshot`,name:`socialpostanalyticssnapshotcollection_recordSnapshot`}],methods:[{name:`findForPost`,async:!0,parameters:[`socialPostId: string`],returnType:`Promise<SocialPostAnalyticsSnapshot[]>`,aiCallable:!1},{name:`findLatestForPost`,async:!0,parameters:[`socialPostId: string`],returnType:`Promise<SocialPostAnalyticsSnapshot | null>`,aiCallable:!1},{name:`recordSnapshot`,async:!0,parameters:[`options: object`],returnType:`Promise<SocialPostAnalyticsSnapshot>`,aiCallable:!1}],references:[`@happyvertical/smrt-social:SocialPost`],exposed:!0}],dependencies:[`content`,`users`,`video`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3615`,`#3617`,`#3624`,`#3625`,`#3626`,`#3627`,`#3628`],reason:`node:crypto`,via:[`@happyvertical/smrt-agents`,`@happyvertical/smrt-chat`,`@happyvertical/smrt-content`,`@happyvertical/smrt-images`,`@happyvertical/smrt-jobs`,`@happyvertical/smrt-profiles`,`@happyvertical/smrt-reports`,`@happyvertical/smrt-secrets`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`,`@happyvertical/smrt-video`,`@happyvertical/smrt-voice`]}},{id:`subscriptions`,packageName:`@happyvertical/smrt-subscriptions`,version:`0.57.9`,description:`Tenant subscriptions, entitlement resolution, usage thresholds, and subscription UI for SMRT`,models:[{id:`@happyvertical/smrt-subscriptions:BillingAdjustment`,name:`BillingAdjustment`,collection:`billingadjustments`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`clientChargeId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:ClientCharge`},{name:`amount`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`reason`,type:`text`,required:!1,default:``},{name:`source`,type:`text`,required:!1,default:``},{name:`sourceId`,type:`text`,required:!1,default:``},{name:`createdBy`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/billingadjustments`},{method:`GET`,path:`/billingadjustments/[id]`}],mcp:[{operation:`get`,name:`billingadjustment_get`},{operation:`list`,name:`billingadjustment_list`}],cli:[{operation:`get`,name:`billingadjustment_get`},{operation:`list`,name:`billingadjustment_list`}],methods:[],references:[`@happyvertical/smrt-subscriptions:ClientCharge`],exposed:!0},{id:`@happyvertical/smrt-subscriptions:ClientCharge`,name:`ClientCharge`,collection:`clientcharges`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`usageEventId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:TenantUsageMetric`},{name:`usageTenantId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:Tenant`},{name:`subscriberKind`,type:`text`,required:!1,default:`tenant`},{name:`subscriberExternalId`,type:`text`,required:!1,default:``},{name:`projectId`,type:`text`,required:!1,default:``},{name:`workRefType`,type:`text`,required:!1,default:``},{name:`workRefId`,type:`text`,required:!1,default:``},{name:`provider`,type:`text`,required:!1,default:``},{name:`serviceKey`,type:`text`,required:!1,default:``},{name:`metricKey`,type:`text`,required:!1,default:``},{name:`quantity`,type:`decimal`,required:!1,default:0},{name:`amount`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`pricingRuleId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:PricingRule`},{name:`priceBookId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:PriceBook`},{name:`pricingSnapshot`,type:`text`,required:!1,default:`{}`},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`draft`,`approved`,`adjusted`]},{name:`approvedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/clientcharges`},{method:`GET`,path:`/clientcharges/[id]`}],mcp:[{operation:`get`,name:`clientcharge_get`},{operation:`list`,name:`clientcharge_list`}],cli:[{operation:`get`,name:`clientcharge_get`},{operation:`list`,name:`clientcharge_list`}],methods:[{name:`getPricingSnapshot`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-subscriptions:PriceBook`,`@happyvertical/smrt-subscriptions:PricingRule`,`@happyvertical/smrt-subscriptions:TenantUsageMetric`,`@happyvertical/smrt-users:Tenant`],exposed:!0},{id:`@happyvertical/smrt-subscriptions:CreditGrant`,name:`CreditGrant`,collection:`creditgrants`,description:`An append-only credit on a prepaid (period: 'balance') spending policy. Positive amounts add credit; a negative amount reverses an earlier grant.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`spendingPolicyId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:SpendingPolicy`},{name:`amount`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`reason`,type:`text`,required:!1,default:``},{name:`source`,type:`text`,required:!1,default:``},{name:`sourceId`,type:`text`,required:!1,default:``},{name:`grantedByTenantId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:Tenant`}],rest:[{method:`GET`,path:`/creditgrants`},{method:`GET`,path:`/creditgrants/[id]`}],mcp:[{operation:`get`,name:`creditgrant_get`},{operation:`list`,name:`creditgrant_list`}],cli:[{operation:`get`,name:`creditgrant_get`},{operation:`list`,name:`creditgrant_list`}],methods:[],references:[`@happyvertical/smrt-subscriptions:SpendingPolicy`,`@happyvertical/smrt-users:Tenant`],exposed:!0},{id:`@happyvertical/smrt-subscriptions:PriceBook`,name:`PriceBook`,collection:`pricebooks`,description:`A named set of prices published by one seller tenant. Its prices are ordinary PricingRule rows that carry this book's id and the same tenant; one rule per currency gives a price in several currencies.`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`bookKey`,type:`text`,required:!1,default:``},{name:`name`,type:`text`,required:!1,default:``},{name:`kind`,type:`text`,required:!1,default:`retail`,enum:[`wholesale`,`retail`]},{name:`active`,type:`boolean`,required:!1,default:!0}],rest:[],mcp:[],cli:[],methods:[],references:[],exposed:!1},{id:`@happyvertical/smrt-subscriptions:PriceBookAssignment`,name:`PriceBookAssignment`,collection:`pricebookassignments`,description:`Which price books rate one child tenant's usage, keyed like the tenancy billing relationship it belongs to (one row per child).`,fields:[{name:`childTenantId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:Tenant`},{name:`resellerTenantId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-users:Tenant`},{name:`wholesalePriceBookId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:PriceBook`},{name:`wholesaleCurrency`,type:`text`,required:!1,default:``},{name:`retailPriceBookId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:PriceBook`},{name:`retailCurrency`,type:`text`,required:!1,default:``}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-subscriptions:PriceBook`,`@happyvertical/smrt-users:Tenant`],exposed:!1},{id:`@happyvertical/smrt-subscriptions:PricingRule`,name:`PricingRule`,collection:`pricingrules`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`ruleKey`,type:`text`,required:!1,default:``},{name:`metricKey`,type:`text`,required:!1,default:``},{name:`serviceKey`,type:`text`,required:!1,default:``},{name:`strategy`,type:`text`,required:!1,default:`fixed_unit`,enum:[`fixed_unit`,`cost_plus`,`multiplier`,`tiered`,`included_overage`,`flat`,`custom`]},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`effectiveFrom`,type:`datetime`,required:!1},{name:`effectiveTo`,type:`datetime`,required:!1},{name:`priority`,type:`integer`,required:!1,default:0},{name:`terms`,type:`text`,required:!1,default:`{}`},{name:`active`,type:`boolean`,required:!1,default:!0},{name:`priceBookId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:PriceBook`}],rest:[{method:`GET`,path:`/pricingrules`},{method:`GET`,path:`/pricingrules/[id]`},{method:`POST`,path:`/pricingrules`},{method:`PATCH`,path:`/pricingrules/[id]`},{method:`DELETE`,path:`/pricingrules/[id]`},{method:`POST`,path:`/pricingrules/[id]/getTerms`},{method:`POST`,path:`/pricingrules/[id]/setTerms`}],mcp:[{operation:`create`,name:`pricingrule_create`},{operation:`delete`,name:`pricingrule_delete`},{operation:`get`,name:`pricingrule_get`},{operation:`getTerms`,name:`pricingrule_getterms`},{operation:`list`,name:`pricingrule_list`},{operation:`setTerms`,name:`pricingrule_setterms`},{operation:`update`,name:`pricingrule_update`}],cli:[{operation:`create`,name:`pricingrule_create`},{operation:`delete`,name:`pricingrule_delete`},{operation:`get`,name:`pricingrule_get`},{operation:`getTerms`,name:`pricingrule_getTerms`},{operation:`list`,name:`pricingrule_list`},{operation:`setTerms`,name:`pricingrule_setTerms`},{operation:`update`,name:`pricingrule_update`}],methods:[{name:`getTerms`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!0},{name:`setTerms`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!0}],references:[`@happyvertical/smrt-subscriptions:PriceBook`],exposed:!0},{id:`@happyvertical/smrt-subscriptions:RetailCharge`,name:`RetailCharge`,collection:`retailcharges`,description:`What a reseller charges one child for one usage event, priced from the reseller's retail book.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`resellerTenantId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:Tenant`},{name:`usageEventId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:TenantUsageMetric`},{name:`clientChargeId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:ClientCharge`},{name:`subscriberKind`,type:`text`,required:!1,default:`tenant`},{name:`subscriberExternalId`,type:`text`,required:!1,default:``},{name:`projectId`,type:`text`,required:!1,default:``},{name:`workRefType`,type:`text`,required:!1,default:``},{name:`workRefId`,type:`text`,required:!1,default:``},{name:`provider`,type:`text`,required:!1,default:``},{name:`serviceKey`,type:`text`,required:!1,default:``},{name:`metricKey`,type:`text`,required:!1,default:``},{name:`quantity`,type:`decimal`,required:!1,default:0},{name:`amount`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`priceBookId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:PriceBook`},{name:`pricingRuleId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:PricingRule`},{name:`pricingSnapshot`,type:`text`,required:!1,default:`{}`},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`draft`,`approved`]},{name:`approvedAt`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/retailcharges`},{method:`GET`,path:`/retailcharges/[id]`}],mcp:[{operation:`get`,name:`retailcharge_get`},{operation:`list`,name:`retailcharge_list`}],cli:[{operation:`get`,name:`retailcharge_get`},{operation:`list`,name:`retailcharge_list`}],methods:[{name:`getPricingSnapshot`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-subscriptions:ClientCharge`,`@happyvertical/smrt-subscriptions:PriceBook`,`@happyvertical/smrt-subscriptions:PricingRule`,`@happyvertical/smrt-subscriptions:TenantUsageMetric`,`@happyvertical/smrt-users:Tenant`],exposed:!0},{id:`@happyvertical/smrt-subscriptions:SpendingPolicy`,name:`SpendingPolicy`,collection:`spendingpolicies`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`subscriberKind`,type:`text`,required:!1,default:``},{name:`subscriberExternalId`,type:`text`,required:!1,default:``},{name:`projectId`,type:`text`,required:!1,default:``},{name:`serviceKey`,type:`text`,required:!1,default:``},{name:`metricKey`,type:`text`,required:!1,default:``},{name:`period`,type:`text`,required:!1,default:`month`,enum:[`day`,`week`,`month`,`year`,`rolling`,`balance`]},{name:`rollingSeconds`,type:`integer`,required:!1,default:0},{name:`limitAmount`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`behavior`,type:`text`,required:!1,default:`observe`,enum:[`observe`,`warn`,`block`,`approval_required`]},{name:`priority`,type:`integer`,required:!1,default:0},{name:`active`,type:`boolean`,required:!1,default:!0},{name:`basis`,type:`text`,required:!1,default:`billed`,enum:[`billed`,`retail`,`wholesale`]},{name:`setByTenantId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-users:Tenant`},{name:`balanceFrom`,type:`datetime`,required:!1}],rest:[{method:`GET`,path:`/spendingpolicies`},{method:`GET`,path:`/spendingpolicies/[id]`},{method:`POST`,path:`/spendingpolicies`},{method:`PATCH`,path:`/spendingpolicies/[id]`},{method:`DELETE`,path:`/spendingpolicies/[id]`}],mcp:[{operation:`create`,name:`spendingpolicy_create`},{operation:`delete`,name:`spendingpolicy_delete`},{operation:`get`,name:`spendingpolicy_get`},{operation:`list`,name:`spendingpolicy_list`},{operation:`update`,name:`spendingpolicy_update`}],cli:[{operation:`create`,name:`spendingpolicy_create`},{operation:`delete`,name:`spendingpolicy_delete`},{operation:`get`,name:`spendingpolicy_get`},{operation:`list`,name:`spendingpolicy_list`},{operation:`update`,name:`spendingpolicy_update`}],methods:[],references:[`@happyvertical/smrt-users:Tenant`],exposed:!0},{id:`@happyvertical/smrt-subscriptions:SubscriptionPlan`,name:`SubscriptionPlan`,collection:`subscriptionplans`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`planKey`,type:`text`,required:!1,default:``},{name:`name`,type:`text`,required:!1,default:``},{name:`description`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1,default:`active`,enum:[`active`,`archived`,`draft`]},{name:`sortOrder`,type:`integer`,required:!1,default:0},{name:`priceAmount`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1,default:`USD`},{name:`billingInterval`,type:`text`,required:!1,default:`month`,enum:[`day`,`week`,`month`,`year`]},{name:`pricingMode`,type:`text`,required:!1,default:`fixed`,enum:[`free`,`fixed`,`pay_what_you_can`]},{name:`minimumAmount`,type:`integer`,required:!1,default:0},{name:`suggestedAmount`,type:`integer`,required:!1,default:0},{name:`externalProvider`,type:`text`,required:!1},{name:`providerProductId`,type:`text`,required:!1},{name:`providerPriceId`,type:`text`,required:!1},{name:`stripeProductId`,type:`text`,required:!1},{name:`stripePriceId`,type:`text`,required:!1},{name:`features`,type:`text`,required:!1,default:`[]`},{name:`thresholds`,type:`text`,required:!1,default:`[]`},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/subscriptionplans`},{method:`GET`,path:`/subscriptionplans/[id]`},{method:`POST`,path:`/subscriptionplans`},{method:`PATCH`,path:`/subscriptionplans/[id]`}],mcp:[{operation:`get`,name:`subscriptionplan_get`},{operation:`list`,name:`subscriptionplan_list`}],cli:[{operation:`create`,name:`subscriptionplan_create`},{operation:`delete`,name:`subscriptionplan_delete`},{operation:`get`,name:`subscriptionplan_get`},{operation:`getFeatureGrants`,name:`subscriptionplan_getFeatureGrants`},{operation:`getFeatureKeys`,name:`subscriptionplan_getFeatureKeys`},{operation:`getMetadata`,name:`subscriptionplan_getMetadata`},{operation:`getThresholds`,name:`subscriptionplan_getThresholds`},{operation:`isActive`,name:`subscriptionplan_isActive`},{operation:`list`,name:`subscriptionplan_list`},{operation:`setFeatureGrants`,name:`subscriptionplan_setFeatureGrants`},{operation:`setMetadata`,name:`subscriptionplan_setMetadata`},{operation:`setThresholds`,name:`subscriptionplan_setThresholds`},{operation:`update`,name:`subscriptionplan_update`},{operation:`findActive`,name:`subscriptionplancollection_findActive`},{operation:`findByPlanKey`,name:`subscriptionplancollection_findByPlanKey`},{operation:`findByProviderPriceId`,name:`subscriptionplancollection_findByProviderPriceId`},{operation:`findByStripePriceId`,name:`subscriptionplancollection_findByStripePriceId`}],methods:[{name:`findActive`,async:!0,parameters:[],returnType:`Promise<SubscriptionPlan[]>`,aiCallable:!1},{name:`findByPlanKey`,async:!0,parameters:[`tenantId: string | null`,`planKey: string`],returnType:`Promise<SubscriptionPlan | null>`,aiCallable:!1},{name:`findByProviderPriceId`,async:!0,parameters:[`providerPriceId: string`],returnType:`Promise<SubscriptionPlan | null>`,aiCallable:!1},{name:`findByStripePriceId`,async:!0,parameters:[`stripePriceId: string`],returnType:`Promise<SubscriptionPlan | null>`,aiCallable:!1},{name:`getFeatureGrants`,async:!1,parameters:[],returnType:`PlanFeatureGrant[]`,aiCallable:!1},{name:`getFeatureKeys`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`JsonObject`,aiCallable:!1},{name:`getThresholds`,async:!1,parameters:[],returnType:`PlanThreshold[]`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`setFeatureGrants`,async:!1,parameters:[`grants: Array<string | PlanFeatureGrant>`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: JsonObject`],returnType:`void`,aiCallable:!1},{name:`setThresholds`,async:!1,parameters:[`thresholds: PlanThreshold[]`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-subscriptions:TenantSubscription`,name:`TenantSubscription`,collection:`tenantsubscriptions`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`subscriberKind`,type:`text`,required:!1,default:`tenant`,enum:[`tenant`,`external`]},{name:`subscriberExternalId`,type:`text`,required:!1,default:``},{name:`planId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-subscriptions:SubscriptionPlan`},{name:`status`,type:`text`,required:!1,default:`incomplete`,enum:[`active`,`canceled`,`incomplete`,`past_due`,`trialing`,`unpaid`]},{name:`startedAt`,type:`datetime`,required:!1},{name:`currentPeriodStart`,type:`datetime`,required:!1},{name:`currentPeriodEnd`,type:`datetime`,required:!1},{name:`trialEndsAt`,type:`datetime`,required:!1},{name:`cancelAtPeriodEnd`,type:`boolean`,required:!1,default:!1},{name:`canceledAt`,type:`datetime`,required:!1},{name:`agreedAmount`,type:`integer`,required:!1},{name:`externalProvider`,type:`text`,required:!1},{name:`stripeCustomerId`,type:`text`,required:!1,default:``},{name:`stripeSubscriptionId`,type:`text`,required:!1,default:``},{name:`stripeCheckoutSessionId`,type:`text`,required:!1,default:``},{name:`metadata`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/tenantsubscriptions`},{method:`GET`,path:`/tenantsubscriptions/[id]`},{method:`POST`,path:`/tenantsubscriptions`},{method:`PATCH`,path:`/tenantsubscriptions/[id]`}],mcp:[{operation:`get`,name:`tenantsubscription_get`},{operation:`list`,name:`tenantsubscription_list`}],cli:[{operation:`create`,name:`tenantsubscription_create`},{operation:`delete`,name:`tenantsubscription_delete`},{operation:`get`,name:`tenantsubscription_get`},{operation:`getMetadata`,name:`tenantsubscription_getMetadata`},{operation:`getSubscriber`,name:`tenantsubscription_getSubscriber`},{operation:`isEntitled`,name:`tenantsubscription_isEntitled`},{operation:`list`,name:`tenantsubscription_list`},{operation:`setMetadata`,name:`tenantsubscription_setMetadata`},{operation:`update`,name:`tenantsubscription_update`},{operation:`findByStripeSubscriptionId`,name:`tenantsubscriptioncollection_findByStripeSubscriptionId`},{operation:`findByTenant`,name:`tenantsubscriptioncollection_findByTenant`},{operation:`findCurrentForSubscriber`,name:`tenantsubscriptioncollection_findCurrentForSubscriber`},{operation:`findCurrentForTenant`,name:`tenantsubscriptioncollection_findCurrentForTenant`}],methods:[{name:`findByStripeSubscriptionId`,async:!0,parameters:[`stripeSubscriptionId: string`],returnType:`Promise<TenantSubscription | null>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<TenantSubscription[]>`,aiCallable:!1},{name:`findCurrentForSubscriber`,async:!0,parameters:[`subscriber: Subscriber`,`now?: any`],returnType:`Promise<TenantSubscription | null>`,aiCallable:!1},{name:`findCurrentForTenant`,async:!0,parameters:[`tenantId: string`,`now?: any`],returnType:`Promise<TenantSubscription | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`JsonObject`,aiCallable:!1},{name:`getSubscriber`,async:!1,parameters:[],returnType:`Subscriber | null`,aiCallable:!1},{name:`isEntitled`,async:!1,parameters:[`now?: any`],returnType:`boolean`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: JsonObject`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-subscriptions:SubscriptionPlan`],exposed:!0},{id:`@happyvertical/smrt-subscriptions:TenantUsageMetric`,name:`TenantUsageMetric`,collection:`tenantusagemetrics`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`subscriberKind`,type:`text`,required:!1,default:`tenant`,enum:[`tenant`,`external`]},{name:`subscriberExternalId`,type:`text`,required:!1,default:``},{name:`metricKey`,type:`text`,required:!1,default:``},{name:`quantity`,type:`decimal`,required:!1,default:0},{name:`windowStart`,type:`datetime`,required:!1},{name:`windowEnd`,type:`datetime`,required:!1},{name:`source`,type:`text`,required:!1,default:``},{name:`sourceId`,type:`text`,required:!1,default:``},{name:`projectId`,type:`text`,required:!1,default:``},{name:`workRefType`,type:`text`,required:!1,default:``},{name:`workRefId`,type:`text`,required:!1,default:``},{name:`provider`,type:`text`,required:!1,default:``},{name:`dimensions`,type:`text`,required:!1,default:`{}`}],rest:[{method:`GET`,path:`/tenantusagemetrics`},{method:`GET`,path:`/tenantusagemetrics/[id]`},{method:`POST`,path:`/tenantusagemetrics`}],mcp:[{operation:`get`,name:`tenantusagemetric_get`},{operation:`list`,name:`tenantusagemetric_list`}],cli:[{operation:`create`,name:`tenantusagemetric_create`},{operation:`get`,name:`tenantusagemetric_get`},{operation:`list`,name:`tenantusagemetric_list`}],methods:[{name:`findByTenantAndMetric`,async:!0,parameters:[`tenantId: string`,`metricKey: string`],returnType:`Promise<TenantUsageMetric[]>`,aiCallable:!1},{name:`getDimensions`,async:!1,parameters:[],returnType:`JsonObject`,aiCallable:!1},{name:`getSubscriber`,async:!1,parameters:[],returnType:`Subscriber | null`,aiCallable:!1},{name:`recordUsage`,async:!0,parameters:[`options: RecordUsageOptions`],returnType:`Promise<TenantUsageMetric>`,aiCallable:!1},{name:`setDimensions`,async:!1,parameters:[`dimensions: JsonObject`],returnType:`void`,aiCallable:!1},{name:`summarizeTenantAiUsage`,async:!0,parameters:[`options: SummarizeAiUsageOptions`],returnType:`Promise<AiUsageSummary>`,aiCallable:!1},{name:`summarizeUsage`,async:!0,parameters:[`options: SummarizeUsageOptions`],returnType:`Promise<UsageSummary>`,aiCallable:!1},{name:`summarizeUsageBatch`,async:!0,parameters:[`options: SummarizeUsageBatchOptions`],returnType:`Promise<UsageSummary[]>`,aiCallable:!1}],references:[],exposed:!0}],dependencies:[`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`,`#3626`],reason:`core migrations (node:crypto, node:os)`,via:[`@happyvertical/smrt-tenancy`]}},{id:`support`,packageName:`@happyvertical/smrt-support`,version:`0.57.9`,description:`AI-first Support Cases: channel-neutral intake, lifecycle, routing, service targets, and service time for the SMRT framework`,models:[{id:`@happyvertical/smrt-support:ServiceTimeEntry`,name:`ServiceTimeEntry`,collection:`servicetimeentries`,extends:`@happyvertical/smrt-support:ServiceTimeEntry`,description:`Support subtype over the shared service_time_entries table: the shared entry plus caseId (a SupportCase) and specialistId (a SupportSpecialist).`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`caseId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportCase`},{name:`workRefType`,type:`text`,required:!1},{name:`workRefId`,type:`text`,required:!1},{name:`specialistId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportSpecialist`},{name:`participantKind`,type:`text`,required:!1},{name:`participantProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`agentRef`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`startedAt`,type:`datetime`,required:!1},{name:`endedAt`,type:`datetime`,required:!1},{name:`durationSeconds`,type:`integer`,required:!1},{name:`evidence`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1},{name:`submittedAt`,type:`datetime`,required:!1},{name:`submittedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`approvedAt`,type:`datetime`,required:!1},{name:`approvedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`approvalPath`,type:`text`,required:!1},{name:`rejectedAt`,type:`datetime`,required:!1},{name:`rejectedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`rejectionReason`,type:`text`,required:!1},{name:`correctionOfId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:ServiceTimeEntry`},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/servicetimeentries`},{method:`GET`,path:`/servicetimeentries/[id]`}],mcp:[{operation:`get`,name:`servicetimeentry_get`},{operation:`list`,name:`servicetimeentry_list`}],cli:[{operation:`get`,name:`servicetimeentry_get`},{operation:`list`,name:`servicetimeentry_list`}],methods:[{name:`durationHours`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`durationHoursExact`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`forCase`,async:!0,parameters:[`caseId: string`],returnType:`Promise<ServiceTimeEntry[]>`,aiCallable:!1},{name:`forSpecialist`,async:!0,parameters:[`specialistId: string`],returnType:`Promise<ServiceTimeEntry[]>`,aiCallable:!1},{name:`getEvidence`,async:!1,parameters:[],returnType:`ServiceEvidence[]`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`pendingApproval`,async:!0,parameters:[],returnType:`Promise<ServiceTimeEntry[]>`,aiCallable:!1},{name:`requireDurationSeconds`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setEvidence`,async:!1,parameters:[`value: ServiceEvidence[]`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-support:ServiceTimeEntry`,`@happyvertical/smrt-support:SupportCase`,`@happyvertical/smrt-support:SupportSpecialist`],exposed:!0},{id:`@happyvertical/smrt-support:SupportAiRun`,name:`SupportAiRun`,collection:`supportairuns`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`caseId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-support:SupportCase`},{name:`interactionId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportInteraction`},{name:`phase`,type:`text`,required:!1,enum:[`acknowledge`,`classify`,`answer`,`troubleshoot`,`resolve`]},{name:`outcome`,type:`text`,required:!1,enum:[`completed`,`skipped`,`failed`,`handed_off`]},{name:`confidence`,type:`decimal`,required:!1},{name:`classification`,type:`text`,required:!1},{name:`responseInteractionId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportInteraction`},{name:`knowledgeRefs`,type:`text`,required:!1},{name:`toolCalls`,type:`text`,required:!1},{name:`error`,type:`text`,required:!1},{name:`correlationId`,type:`text`,required:!1},{name:`model`,type:`text`,required:!1},{name:`startedAt`,type:`datetime`,required:!1},{name:`completedAt`,type:`datetime`,required:!1},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportairuns`},{method:`GET`,path:`/supportairuns/[id]`}],mcp:[{operation:`get`,name:`supportairun_get`},{operation:`list`,name:`supportairun_list`}],cli:[{operation:`get`,name:`supportairun_get`},{operation:`list`,name:`supportairun_list`}],methods:[{name:`forCase`,async:!0,parameters:[`caseId: string`],returnType:`Promise<SupportAiRun[]>`,aiCallable:!1},{name:`getClassification`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getKnowledgeRefs`,async:!1,parameters:[],returnType:`Array<Record<string, unknown>>`,aiCallable:!1},{name:`getToolCalls`,async:!1,parameters:[],returnType:`Array<Record<string, unknown>>`,aiCallable:!1},{name:`setClassification`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setKnowledgeRefs`,async:!1,parameters:[`refs: Array<Record<string, unknown>>`],returnType:`void`,aiCallable:!1},{name:`setToolCalls`,async:!1,parameters:[`calls: Array<Record<string, unknown>>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-support:SupportCase`,`@happyvertical/smrt-support:SupportInteraction`],exposed:!0},{id:`@happyvertical/smrt-support:SupportAvailability`,name:`SupportAvailability`,collection:`supportavailabilities`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`specialistId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-support:SupportSpecialist`},{name:`kind`,type:`text`,required:!1,enum:[`weekly`,`on_call`,`time_off`]},{name:`weekday`,type:`integer`,required:!1},{name:`startMinute`,type:`integer`,required:!1,default:0},{name:`endMinute`,type:`integer`,required:!1,default:0},{name:`startsAt`,type:`datetime`,required:!1},{name:`endsAt`,type:`datetime`,required:!1},{name:`notes`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportavailabilities`},{method:`GET`,path:`/supportavailabilities/[id]`},{method:`POST`,path:`/supportavailabilities`},{method:`PATCH`,path:`/supportavailabilities/[id]`},{method:`DELETE`,path:`/supportavailabilities/[id]`}],mcp:[{operation:`get`,name:`supportavailability_get`},{operation:`list`,name:`supportavailability_list`}],cli:[{operation:`get`,name:`supportavailability_get`},{operation:`list`,name:`supportavailability_list`}],methods:[{name:`forSpecialist`,async:!0,parameters:[`specialistId: string`],returnType:`Promise<SupportAvailability[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-support:SupportSpecialist`],exposed:!0},{id:`@happyvertical/smrt-support:SupportCase`,name:`SupportCase`,collection:`supportcases`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`caseNumber`,type:`text`,required:!1},{name:`subject`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`new`,`triaged`,`assigned`,`in_progress`,`waiting_on_client`,`escalated`,`resolved`,`closed`]},{name:`priority`,type:`text`,required:!1},{name:`severity`,type:`text`,required:!1},{name:`category`,type:`text`,required:!1},{name:`sensitive`,type:`boolean`,required:!1},{name:`channelKind`,type:`text`,required:!1},{name:`clientProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`openedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`projectId`,type:`text`,required:!1},{name:`bindingId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportChannelBinding`},{name:`threadKey`,type:`text`,required:!1},{name:`planId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportPlan`},{name:`planSnapshot`,type:`text`,required:!1},{name:`assignedSpecialistId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportSpecialist`},{name:`assignedAt`,type:`datetime`,required:!1},{name:`preferredSpecialistId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportSpecialist`},{name:`escalationLevel`,type:`integer`,required:!1,default:0},{name:`escalatedAt`,type:`datetime`,required:!1},{name:`acknowledgedAt`,type:`datetime`,required:!1},{name:`firstRespondedAt`,type:`datetime`,required:!1},{name:`humanRequestedAt`,type:`datetime`,required:!1},{name:`resolvedAt`,type:`datetime`,required:!1},{name:`resolvedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`resolutionKind`,type:`text`,required:!1},{name:`resolutionSummary`,type:`text`,required:!1},{name:`closedAt`,type:`datetime`,required:!1},{name:`reopenCount`,type:`integer`,required:!1,default:0},{name:`lastReopenedAt`,type:`datetime`,required:!1},{name:`aiEnabled`,type:`boolean`,required:!1},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportcases`},{method:`GET`,path:`/supportcases/[id]`}],mcp:[{operation:`get`,name:`supportcase_get`},{operation:`list`,name:`supportcase_list`}],cli:[{operation:`get`,name:`supportcase_get`},{operation:`list`,name:`supportcase_list`}],methods:[{name:`attemptTriageDecision`,async:!0,parameters:[`request: DecisionRequest`],returnType:`Promise<DecisionResult | undefined>`,aiCallable:!1},{name:`findOpenByThreadKey`,async:!0,parameters:[`threadKey: string`,`options?: object`],returnType:`Promise<SupportCase | null>`,aiCallable:!1},{name:`findQueue`,async:!0,parameters:[`options?: object`],returnType:`Promise<SupportCase[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getPlanSnapshot`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isOpen`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setPlanSnapshot`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`patch: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-support:SupportChannelBinding`,`@happyvertical/smrt-support:SupportPlan`,`@happyvertical/smrt-support:SupportSpecialist`],exposed:!0},{id:`@happyvertical/smrt-support:SupportCaseEvent`,name:`SupportCaseEvent`,collection:`supportcaseevents`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`caseId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-support:SupportCase`},{name:`eventType`,type:`text`,required:!1,enum:[`created`,`interaction`,`transition`,`assignment`,`ai_run`,`handoff`,`human_requested`,`escalation`,`target_scheduled`,`target_satisfied`,`target_breached`,`target_paused`,`target_resumed`,`work_linked`,`reopened`,`plan_applied`,`time_recorded`,`note`]},{name:`actorKind`,type:`text`,required:!1,enum:[`client`,`specialist`,`agent`,`system`]},{name:`actorProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`occurredAt`,type:`datetime`,required:!1},{name:`summary`,type:`text`,required:!1},{name:`payload`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportcaseevents`},{method:`GET`,path:`/supportcaseevents/[id]`}],mcp:[{operation:`get`,name:`supportcaseevent_get`},{operation:`list`,name:`supportcaseevent_list`}],cli:[{operation:`get`,name:`supportcaseevent_get`},{operation:`list`,name:`supportcaseevent_list`}],methods:[{name:`forCase`,async:!0,parameters:[`caseId: string`,`options?: object`],returnType:`Promise<SupportCaseEvent[]>`,aiCallable:!1},{name:`getPayload`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setPayload`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-support:SupportCase`],exposed:!0},{id:`@happyvertical/smrt-support:SupportChannelBinding`,name:`SupportChannelBinding`,collection:`supportchannelbindings`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`bindingKind`,type:`text`,required:!1,enum:[`chat_room`,`email_account`]},{name:`channelKind`,type:`text`,required:!1,enum:[`chat`,`email`,`phone`,`voice`,`web`,`api`]},{name:`targetType`,type:`text`,required:!1},{name:`targetId`,type:`text`,required:!1},{name:`clientProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`projectId`,type:`text`,required:!1},{name:`planId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportPlan`},{name:`enabled`,type:`boolean`,required:!1},{name:`selfAddresses`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportchannelbindings`},{method:`GET`,path:`/supportchannelbindings/[id]`},{method:`POST`,path:`/supportchannelbindings`},{method:`PATCH`,path:`/supportchannelbindings/[id]`},{method:`DELETE`,path:`/supportchannelbindings/[id]`}],mcp:[{operation:`get`,name:`supportchannelbinding_get`},{operation:`list`,name:`supportchannelbinding_list`}],cli:[{operation:`get`,name:`supportchannelbinding_get`},{operation:`list`,name:`supportchannelbinding_list`}],methods:[{name:`findForTarget`,async:!0,parameters:[`targetType: string`,`targetId: string`],returnType:`Promise<SupportChannelBinding | null>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getSelfAddresses`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setSelfAddresses`,async:!1,parameters:[`addresses: string[]`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-support:SupportPlan`],exposed:!0},{id:`@happyvertical/smrt-support:SupportCharge`,name:`SupportCharge`,collection:`supportcharges`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`timeEntryId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-support:ServiceTimeEntry`},{name:`caseId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportCase`},{name:`planId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportPlan`},{name:`amount`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1},{name:`billableSeconds`,type:`integer`,required:!1,default:0},{name:`includedSecondsApplied`,type:`integer`,required:!1,default:0},{name:`rateSnapshot`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`pending`,`final`,`corrected`,`voided`]},{name:`finalizedAt`,type:`datetime`,required:!1},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportcharges`},{method:`GET`,path:`/supportcharges/[id]`}],mcp:[{operation:`get`,name:`supportcharge_get`},{operation:`list`,name:`supportcharge_list`}],cli:[{operation:`get`,name:`supportcharge_get`},{operation:`list`,name:`supportcharge_list`}],methods:[{name:`forCase`,async:!0,parameters:[`caseId: string`],returnType:`Promise<SupportCharge[]>`,aiCallable:!1},{name:`forTimeEntry`,async:!0,parameters:[`timeEntryId: string`],returnType:`Promise<SupportCharge | null>`,aiCallable:!1},{name:`getRateSnapshot`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setRateSnapshot`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-support:ServiceTimeEntry`,`@happyvertical/smrt-support:SupportCase`,`@happyvertical/smrt-support:SupportPlan`],exposed:!0},{id:`@happyvertical/smrt-support:SupportCompensation`,name:`SupportCompensation`,collection:`supportcompensations`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`timeEntryId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-support:ServiceTimeEntry`},{name:`specialistId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportSpecialist`},{name:`compensationPlanId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportCompensationPlan`},{name:`amount`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1},{name:`payableSeconds`,type:`integer`,required:!1,default:0},{name:`rateSnapshot`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`pending`,`final`,`corrected`,`voided`]},{name:`finalizedAt`,type:`datetime`,required:!1},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportcompensations`},{method:`GET`,path:`/supportcompensations/[id]`}],mcp:[{operation:`get`,name:`supportcompensation_get`},{operation:`list`,name:`supportcompensation_list`}],cli:[{operation:`get`,name:`supportcompensation_get`},{operation:`list`,name:`supportcompensation_list`}],methods:[{name:`forSpecialist`,async:!0,parameters:[`specialistId: string`],returnType:`Promise<SupportCompensation[]>`,aiCallable:!1},{name:`forTimeEntry`,async:!0,parameters:[`timeEntryId: string`],returnType:`Promise<SupportCompensation | null>`,aiCallable:!1},{name:`getRateSnapshot`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setRateSnapshot`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-support:ServiceTimeEntry`,`@happyvertical/smrt-support:SupportCompensationPlan`,`@happyvertical/smrt-support:SupportSpecialist`],exposed:!0},{id:`@happyvertical/smrt-support:SupportCompensationPlan`,name:`SupportCompensationPlan`,collection:`supportcompensationplans`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`specialistId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportSpecialist`},{name:`name`,type:`text`,required:!1,default:``},{name:`hourlyRate`,type:`decimal`,required:!1,default:0},{name:`currency`,type:`text`,required:!1},{name:`effectiveFrom`,type:`datetime`,required:!1},{name:`effectiveTo`,type:`datetime`,required:!1},{name:`status`,type:`text`,required:!1},{name:`terms`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportcompensationplans`},{method:`GET`,path:`/supportcompensationplans/[id]`}],mcp:[{operation:`get`,name:`supportcompensationplan_get`},{operation:`list`,name:`supportcompensationplan_list`}],cli:[{operation:`get`,name:`supportcompensationplan_get`},{operation:`list`,name:`supportcompensationplan_list`}],methods:[{name:`getTerms`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`isEffectiveAt`,async:!1,parameters:[`at?: Date`],returnType:`boolean`,aiCallable:!1},{name:`resolveForSpecialist`,async:!0,parameters:[`specialistId: string`,`at?: Date`,`options?: object`],returnType:`Promise<SupportCompensationPlan | null>`,aiCallable:!1},{name:`setTerms`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-support:SupportSpecialist`],exposed:!0},{id:`@happyvertical/smrt-support:SupportEscalation`,name:`SupportEscalation`,collection:`supportescalations`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`caseId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-support:SupportCase`},{name:`level`,type:`integer`,required:!1,default:1},{name:`reason`,type:`text`,required:!1,enum:[`target_breach`,`target_risk`,`manual`,`ai_trigger`]},{name:`targetId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportServiceTarget`},{name:`targetType`,type:`text`,required:!1},{name:`action`,type:`text`,required:!1},{name:`fromSpecialistId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportSpecialist`},{name:`toSpecialistId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportSpecialist`},{name:`notifiedProfileIds`,type:`text`,required:!1},{name:`occurredAt`,type:`datetime`,required:!1},{name:`note`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportescalations`},{method:`GET`,path:`/supportescalations/[id]`}],mcp:[{operation:`get`,name:`supportescalation_get`},{operation:`list`,name:`supportescalation_list`}],cli:[{operation:`get`,name:`supportescalation_get`},{operation:`list`,name:`supportescalation_list`}],methods:[{name:`forCase`,async:!0,parameters:[`caseId: string`],returnType:`Promise<SupportEscalation[]>`,aiCallable:!1},{name:`getNotifiedProfileIds`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`setNotifiedProfileIds`,async:!1,parameters:[`ids: string[]`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-support:SupportCase`,`@happyvertical/smrt-support:SupportServiceTarget`,`@happyvertical/smrt-support:SupportSpecialist`],exposed:!0},{id:`@happyvertical/smrt-support:SupportInteraction`,name:`SupportInteraction`,collection:`supportinteractions`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`caseId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-support:SupportCase`},{name:`direction`,type:`text`,required:!1,enum:[`inbound`,`outbound`,`internal`]},{name:`channelKind`,type:`text`,required:!1,enum:[`chat`,`email`,`phone`,`voice`,`web`,`api`]},{name:`actorKind`,type:`text`,required:!1,enum:[`client`,`specialist`,`agent`,`system`]},{name:`authorProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`occurredAt`,type:`datetime`,required:!1},{name:`body`,type:`text`,required:!1},{name:`sourceType`,type:`text`,required:!1},{name:`sourceId`,type:`text`,required:!1},{name:`sourceKey`,type:`text`,required:!1},{name:`rfcMessageId`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportinteractions`},{method:`GET`,path:`/supportinteractions/[id]`}],mcp:[{operation:`get`,name:`supportinteraction_get`},{operation:`list`,name:`supportinteraction_list`}],cli:[{operation:`get`,name:`supportinteraction_get`},{operation:`list`,name:`supportinteraction_list`}],methods:[{name:`byRfcMessageId`,async:!0,parameters:[`rfcMessageId: string`],returnType:`Promise<SupportInteraction | null>`,aiCallable:!1},{name:`bySourceKey`,async:!0,parameters:[`sourceKey: string`],returnType:`Promise<SupportInteraction | null>`,aiCallable:!1},{name:`forCase`,async:!0,parameters:[`caseId: string`],returnType:`Promise<SupportInteraction[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-support:SupportCase`],exposed:!0},{id:`@happyvertical/smrt-support:SupportPlan`,name:`SupportPlan`,collection:`supportplans`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`planKey`,type:`text`,required:!1},{name:`name`,type:`text`,required:!1,default:``},{name:`description`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1},{name:`channels`,type:`text`,required:!1},{name:`timezone`,type:`text`,required:!1},{name:`coverage`,type:`text`,required:!1},{name:`holidays`,type:`text`,required:!1},{name:`severityDefinitions`,type:`text`,required:!1},{name:`targets`,type:`text`,required:!1},{name:`pauseStatuses`,type:`text`,required:!1},{name:`escalationPolicy`,type:`text`,required:!1},{name:`availabilityFeeAmount`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1},{name:`includedMinutes`,type:`integer`,required:!1,default:0},{name:`overageHourlyRate`,type:`decimal`,required:!1,default:0},{name:`onCallHourlyRate`,type:`decimal`,required:!1,default:0},{name:`timeApprovalPolicy`,type:`text`,required:!1},{name:`subscriptionPlanKey`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportplans`},{method:`GET`,path:`/supportplans/[id]`}],mcp:[{operation:`get`,name:`supportplan_get`},{operation:`list`,name:`supportplan_list`}],cli:[{operation:`get`,name:`supportplan_get`},{operation:`list`,name:`supportplan_list`}],methods:[{name:`byPlanKey`,async:!0,parameters:[`planKey: string`],returnType:`Promise<SupportPlan | null>`,aiCallable:!1},{name:`getChannels`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getCoverage`,async:!1,parameters:[],returnType:`CoverageWindow[]`,aiCallable:!1},{name:`getEscalationPolicy`,async:!1,parameters:[],returnType:`EscalationStep[]`,aiCallable:!1},{name:`getHolidays`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getPauseStatuses`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getSeverityDefinitions`,async:!1,parameters:[],returnType:`Record<string, SeverityDefinition>`,aiCallable:!1},{name:`getTargets`,async:!1,parameters:[],returnType:`Record<string, Partial<ServiceTargetMinutes>>`,aiCallable:!1},{name:`getTimeApprovalPolicy`,async:!1,parameters:[],returnType:`TimeApprovalPolicy`,aiCallable:!1},{name:`setChannels`,async:!1,parameters:[`channels: string[]`],returnType:`void`,aiCallable:!1},{name:`setCoverage`,async:!1,parameters:[`windows: CoverageWindow[]`],returnType:`void`,aiCallable:!1},{name:`setEscalationPolicy`,async:!1,parameters:[`steps: EscalationStep[]`],returnType:`void`,aiCallable:!1},{name:`setHolidays`,async:!1,parameters:[`dates: string[]`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setPauseStatuses`,async:!1,parameters:[`statuses: string[]`],returnType:`void`,aiCallable:!1},{name:`setSeverityDefinitions`,async:!1,parameters:[`defs: Record<string, SeverityDefinition>`],returnType:`void`,aiCallable:!1},{name:`setTargets`,async:!1,parameters:[`targets: Record<string, Partial<ServiceTargetMinutes>>`],returnType:`void`,aiCallable:!1},{name:`setTimeApprovalPolicy`,async:!1,parameters:[`policy: TimeApprovalPolicy`],returnType:`void`,aiCallable:!1},{name:`snapshotTerms`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`targetsForSeverity`,async:!1,parameters:[`severity: string`],returnType:`ServiceTargetMinutes`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-support:SupportPolicy`,name:`SupportPolicy`,collection:`supportpolicies`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`planId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-support:SupportPlan`},{name:`projectId`,type:`text`,required:!1},{name:`enabled`,type:`boolean`,required:!1},{name:`autoAcknowledge`,type:`boolean`,required:!1},{name:`autoClassify`,type:`boolean`,required:!1},{name:`autoAnswer`,type:`boolean`,required:!1},{name:`autoTroubleshoot`,type:`boolean`,required:!1},{name:`autoResolve`,type:`boolean`,required:!1},{name:`autoResolveMaxSeverity`,type:`text`,required:!1},{name:`confidenceThreshold`,type:`decimal`,required:!1,default:.7},{name:`maxAutoAttempts`,type:`integer`,required:!1,default:1},{name:`autoSendEmailReplies`,type:`boolean`,required:!1},{name:`sensitiveCategories`,type:`text`,required:!1},{name:`allowedCategories`,type:`text`,required:!1},{name:`allowedTools`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportpolicies`},{method:`GET`,path:`/supportpolicies/[id]`},{method:`POST`,path:`/supportpolicies`},{method:`PATCH`,path:`/supportpolicies/[id]`},{method:`DELETE`,path:`/supportpolicies/[id]`}],mcp:[{operation:`get`,name:`supportpolicy_get`},{operation:`list`,name:`supportpolicy_list`}],cli:[{operation:`get`,name:`supportpolicy_get`},{operation:`list`,name:`supportpolicy_list`}],methods:[{name:`getAllowedCategories`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getAllowedTools`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getSensitiveCategories`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`resolveForScope`,async:!0,parameters:[`options: object`],returnType:`Promise<SupportPolicy | null>`,aiCallable:!1},{name:`scopeRank`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`setAllowedCategories`,async:!1,parameters:[`categories: string[]`],returnType:`void`,aiCallable:!1},{name:`setAllowedTools`,async:!1,parameters:[`tools: string[]`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setSensitiveCategories`,async:!1,parameters:[`categories: string[]`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-support:SupportPlan`],exposed:!0},{id:`@happyvertical/smrt-support:SupportQualification`,name:`SupportQualification`,collection:`supportqualifications`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`specialistId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-support:SupportSpecialist`},{name:`projectId`,type:`text`,required:!1},{name:`level`,type:`text`,required:!1,enum:[`trainee`,`qualified`,`expert`]},{name:`effectiveFrom`,type:`datetime`,required:!1},{name:`effectiveTo`,type:`datetime`,required:!1},{name:`grantedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`notes`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportqualifications`},{method:`GET`,path:`/supportqualifications/[id]`},{method:`POST`,path:`/supportqualifications`},{method:`PATCH`,path:`/supportqualifications/[id]`},{method:`DELETE`,path:`/supportqualifications/[id]`}],mcp:[{operation:`get`,name:`supportqualification_get`},{operation:`list`,name:`supportqualification_list`}],cli:[{operation:`get`,name:`supportqualification_get`},{operation:`list`,name:`supportqualification_list`}],methods:[{name:`forProject`,async:!0,parameters:[`projectId: string`],returnType:`Promise<SupportQualification[]>`,aiCallable:!1},{name:`forSpecialist`,async:!0,parameters:[`specialistId: string`],returnType:`Promise<SupportQualification[]>`,aiCallable:!1},{name:`isEffectiveAt`,async:!1,parameters:[`at?: Date`],returnType:`boolean`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-support:SupportSpecialist`],exposed:!0},{id:`@happyvertical/smrt-support:SupportServiceTarget`,name:`SupportServiceTarget`,collection:`supportservicetargets`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`caseId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-support:SupportCase`},{name:`targetType`,type:`text`,required:!1,enum:[`acknowledgement`,`response`,`update`,`resolution`]},{name:`cycle`,type:`integer`,required:!1,default:0},{name:`severity`,type:`text`,required:!1},{name:`baseMinutes`,type:`integer`,required:!1,default:0},{name:`startedAt`,type:`datetime`,required:!1},{name:`dueAt`,type:`datetime`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`pending`,`paused`,`satisfied`,`breached`,`cancelled`]},{name:`pausedAt`,type:`datetime`,required:!1},{name:`pausedTotalSeconds`,type:`integer`,required:!1,default:0},{name:`satisfiedAt`,type:`datetime`,required:!1},{name:`breachedAt`,type:`datetime`,required:!1},{name:`cancelledAt`,type:`datetime`,required:!1},{name:`escalationJobId`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportservicetargets`},{method:`GET`,path:`/supportservicetargets/[id]`}],mcp:[{operation:`get`,name:`supportservicetarget_get`},{operation:`list`,name:`supportservicetarget_list`}],cli:[{operation:`get`,name:`supportservicetarget_get`},{operation:`list`,name:`supportservicetarget_list`}],methods:[{name:`activeTarget`,async:!0,parameters:[`caseId: string`,`targetType: ServiceTargetType`],returnType:`Promise<SupportServiceTarget | null>`,aiCallable:!1},{name:`checkAndEscalate`,async:!0,parameters:[`args?: Record<string, unknown>`,`_context?: unknown`],returnType:`Promise<CheckAndEscalateResult>`,aiCallable:!1},{name:`forCase`,async:!0,parameters:[`caseId: string`],returnType:`Promise<SupportServiceTarget[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`isRunning`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-support:SupportCase`],exposed:!0},{id:`@happyvertical/smrt-support:SupportSpecialist`,name:`SupportSpecialist`,collection:`supportspecialists`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`profileId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-profiles:Profile`},{name:`displayName`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`active`,`inactive`]},{name:`languages`,type:`text`,required:!1},{name:`timezone`,type:`text`,required:!1},{name:`maxConcurrentCases`,type:`integer`,required:!1,default:10},{name:`onCallPriority`,type:`integer`,required:!1,default:0},{name:`notes`,type:`text`,required:!1},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportspecialists`},{method:`GET`,path:`/supportspecialists/[id]`},{method:`POST`,path:`/supportspecialists`},{method:`PATCH`,path:`/supportspecialists/[id]`},{method:`DELETE`,path:`/supportspecialists/[id]`}],mcp:[{operation:`get`,name:`supportspecialist_get`},{operation:`list`,name:`supportspecialist_list`}],cli:[{operation:`get`,name:`supportspecialist_get`},{operation:`list`,name:`supportspecialist_list`}],methods:[{name:`byProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<SupportSpecialist | null>`,aiCallable:!1},{name:`findActive`,async:!0,parameters:[],returnType:`Promise<SupportSpecialist[]>`,aiCallable:!1},{name:`getLanguages`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`setLanguages`,async:!1,parameters:[`languages: string[]`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-support:SupportWorkLink`,name:`SupportWorkLink`,collection:`supportworklinks`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`caseId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-support:SupportCase`},{name:`linkKind`,type:`text`,required:!1,enum:[`support_work_item`,`development_work_item`]},{name:`targetType`,type:`text`,required:!1},{name:`targetId`,type:`text`,required:!1},{name:`targetLabel`,type:`text`,required:!1},{name:`externalUrl`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1},{name:`lastStatusAt`,type:`datetime`,required:!1},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/supportworklinks`},{method:`GET`,path:`/supportworklinks/[id]`}],mcp:[{operation:`get`,name:`supportworklink_get`},{operation:`list`,name:`supportworklink_list`}],cli:[{operation:`get`,name:`supportworklink_get`},{operation:`list`,name:`supportworklink_list`}],methods:[{name:`forCase`,async:!0,parameters:[`caseId: string`],returnType:`Promise<SupportWorkLink[]>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-support:SupportCase`],exposed:!0}],dependencies:[`chat`,`messages`,`profiles`,`projects`,`timesheets`,`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3615`,`#3617`,`#3624`,`#3625`,`#3626`,`#3627`,`#3628`],reason:`core migrations (node:os)`,via:[`@happyvertical/smrt-agents`,`@happyvertical/smrt-chat`,`@happyvertical/smrt-images`,`@happyvertical/smrt-jobs`,`@happyvertical/smrt-profiles`,`@happyvertical/smrt-projects`,`@happyvertical/smrt-reports`,`@happyvertical/smrt-secrets`,`@happyvertical/smrt-subscriptions`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-timesheets`,`@happyvertical/smrt-users`]}},{id:`tags`,packageName:`@happyvertical/smrt-tags`,version:`0.57.9`,description:`Reusable tagging system with hierarchies, contexts, and multi-language support for SMRT framework`,models:[{id:`@happyvertical/smrt-tags:Tag`,name:`Tag`,collection:`tags`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`parentId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-tags:Tag`},{name:`name`,type:`text`,required:!0,default:``,description:`The name people see when they pick or browse tags.`},{name:`level`,type:`integer`,required:!1,default:0},{name:`description`,type:`text`,required:!1,default:``,description:`A short note on what belongs under this tag.`},{name:`metadata`,type:`text`,required:!1,default:``,description:`Extra details about the tag, saved as named items.`},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`datetime`,required:!1,system:!0},{name:`updatedAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`GET`,path:`/tags`},{method:`GET`,path:`/tags/[id]`},{method:`POST`,path:`/tags`},{method:`PATCH`,path:`/tags/[id]`},{method:`DELETE`,path:`/tags/[id]`}],mcp:[{operation:`create`,name:`tag_create`},{operation:`get`,name:`tag_get`},{operation:`list`,name:`tag_list`},{operation:`update`,name:`tag_update`}],cli:[{operation:`create`,name:`tag_create`},{operation:`delete`,name:`tag_delete`},{operation:`get`,name:`tag_get`},{operation:`getAncestors`,name:`tag_getAncestors`},{operation:`getBySlug`,name:`tag_getBySlug`},{operation:`getChildren`,name:`tag_getChildren`},{operation:`getDescendants`,name:`tag_getDescendants`},{operation:`getHierarchy`,name:`tag_getHierarchy`},{operation:`getMetadata`,name:`tag_getMetadata`},{operation:`getParent`,name:`tag_getParent`},{operation:`getRootTags`,name:`tag_getRootTags`},{operation:`list`,name:`tag_list`},{operation:`moveTo`,name:`tag_moveTo`},{operation:`setMetadata`,name:`tag_setMetadata`},{operation:`update`,name:`tag_update`},{operation:`updateMetadata`,name:`tag_updateMetadata`},{operation:`calculateLevel`,name:`tagcollection_calculateLevel`},{operation:`cleanupUnused`,name:`tagcollection_cleanupUnused`},{operation:`findByTenant`,name:`tagcollection_findByTenant`},{operation:`findGlobal`,name:`tagcollection_findGlobal`},{operation:`findWithGlobals`,name:`tagcollection_findWithGlobals`},{operation:`getChildren`,name:`tagcollection_getChildren`},{operation:`getHierarchy`,name:`tagcollection_getHierarchy`},{operation:`getOrCreate`,name:`tagcollection_getOrCreate`},{operation:`getRootTags`,name:`tagcollection_getRootTags`},{operation:`listByContext`,name:`tagcollection_listByContext`},{operation:`mergeTag`,name:`tagcollection_mergeTag`},{operation:`moveTag`,name:`tagcollection_moveTag`}],methods:[{name:`calculateLevel`,async:!0,parameters:[`parentSlug: string | null`,`context?: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`cleanupUnused`,async:!0,parameters:[`context?: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`getAncestors`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getChildren`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getDescendants`,async:!0,parameters:[],returnType:`Promise<this[]>`,aiCallable:!1},{name:`getHierarchy`,async:!0,parameters:[],returnType:`Promise<HierarchyView<this>>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`TagMetadata`,aiCallable:!1},{name:`getOrCreate`,async:!0,parameters:[`slug: string`,`context?: string`],returnType:`Promise<Tag>`,aiCallable:!1},{name:`getParent`,async:!0,parameters:[],returnType:`Promise<this | null>`,aiCallable:!1},{name:`getRootTags`,async:!0,parameters:[`context?: string`],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`listByContext`,async:!0,parameters:[`context: string`,`parentSlug?: string | null`],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`mergeTag`,async:!0,parameters:[`fromSlug: string`,`toSlug: string`,`context?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`moveTag`,async:!0,parameters:[`slug: string`,`newParentSlug: string | null`,`context?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`moveTo`,async:!0,parameters:[`newParent: this | string | null`],returnType:`Promise<void>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`data: TagMetadata`],returnType:`void`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`updates: Partial<TagMetadata>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-tags:Tag`],exposed:!0},{id:`@happyvertical/smrt-tags:TagAlias`,name:`TagAlias`,collection:`tagaliases`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tagSlug`,type:`text`,required:!1,default:``,description:`The tag this alternative name points to.`},{name:`alias`,type:`text`,required:!0,default:``,description:`Another name or a translation people may use for the tag.`},{name:`language`,type:`text`,required:!1,default:``,description:`The two-letter language code of the alternative name.`},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`createdAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`GET`,path:`/tagaliases`},{method:`GET`,path:`/tagaliases/[id]`},{method:`POST`,path:`/tagaliases`},{method:`PATCH`,path:`/tagaliases/[id]`},{method:`DELETE`,path:`/tagaliases/[id]`}],mcp:[{operation:`create`,name:`tagalias_create`},{operation:`get`,name:`tagalias_get`},{operation:`list`,name:`tagalias_list`}],cli:[{operation:`create`,name:`tagalias_create`},{operation:`delete`,name:`tagalias_delete`},{operation:`get`,name:`tagalias_get`},{operation:`getAliasesForTag`,name:`tagalias_getAliasesForTag`},{operation:`getTag`,name:`tagalias_getTag`},{operation:`list`,name:`tagalias_list`},{operation:`searchByAlias`,name:`tagalias_searchByAlias`},{operation:`update`,name:`tagalias_update`},{operation:`addAlias`,name:`tagaliascollection_addAlias`},{operation:`bulkAddAliases`,name:`tagaliascollection_bulkAddAliases`},{operation:`findByTenant`,name:`tagaliascollection_findByTenant`},{operation:`findGlobal`,name:`tagaliascollection_findGlobal`},{operation:`findMatchingAliases`,name:`tagaliascollection_findMatchingAliases`},{operation:`findWithGlobals`,name:`tagaliascollection_findWithGlobals`},{operation:`getAliasesByLanguage`,name:`tagaliascollection_getAliasesByLanguage`},{operation:`getAliasesForTag`,name:`tagaliascollection_getAliasesForTag`},{operation:`removeAlias`,name:`tagaliascollection_removeAlias`},{operation:`searchByAlias`,name:`tagaliascollection_searchByAlias`}],methods:[{name:`addAlias`,async:!0,parameters:[`tagSlug: string`,`alias: string`,`language?: string`,`context?: string`],returnType:`Promise<TagAlias>`,aiCallable:!1},{name:`bulkAddAliases`,async:!0,parameters:[`tagSlug: string`,`aliases: Array<object>`],returnType:`Promise<TagAlias[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<TagAlias[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<TagAlias[]>`,aiCallable:!1},{name:`findMatchingAliases`,async:!0,parameters:[`query: string`,`language?: string`],returnType:`Promise<TagAlias[]>`,aiCallable:!1},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<TagAlias[]>`,aiCallable:!1},{name:`getAliasesByLanguage`,async:!0,parameters:[`tagSlug: string`],returnType:`Promise<Map<string, string[]>>`,aiCallable:!1},{name:`getAliasesForTag`,async:!0,parameters:[`tagSlug: string`,`language?: string`],returnType:`Promise<TagAlias[]>`,aiCallable:!1},{name:`getTag`,async:!0,parameters:[],returnType:`Promise<Tag | null>`,aiCallable:!1},{name:`removeAlias`,async:!0,parameters:[`aliasId: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`searchByAlias`,async:!0,parameters:[`alias: string`,`language?: string`],returnType:`Promise<Tag[]>`,aiCallable:!1}],references:[],exposed:!0}],dependencies:[],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3624`],via:[`@happyvertical/smrt-tenancy`]},recipes:[{id:`tags.taxonomy`,label:`Taxonomy`,summary:`Organise anything with a shared set of nested tags and alternative names.`,synonyms:[`tags`,`tagging`,`categories`,`labels`,`topics`],models:[`@happyvertical/smrt-tags:Tag`,`@happyvertical/smrt-tags:TagAlias`],nav:[{label:`Tags`,model:`@happyvertical/smrt-tags:Tag`,icon:`tag`,description:`The shared set of tags, including tags inside other tags.`},{label:`Alternative names`,model:`@happyvertical/smrt-tags:TagAlias`,icon:`book`,description:`Other names and translations that lead people to the same tag.`}],requires:[],section:{id:`taxonomy`,label:`Taxonomy`,icon:`tag`,description:`The tags people use to sort and find things.`},options:{"@happyvertical/smrt-tags:Tag":{fields:{name:{order:1},parentId:{label:`Parent tag`,help:`The broader tag this one sits under. Leave it empty for a top-level tag.`,order:2},description:{order:3},level:{visibility:`hidden`,locked:!0},metadata:{visibility:`advanced`}}},"@happyvertical/smrt-tags:TagAlias":{fields:{alias:{label:`Alternative name`,order:1},tagSlug:{label:`Tag`,order:2},language:{order:3}}}},help:{markdown:`## Overview
890
-
891
- Taxonomy is a shared list of tags you can use to organise anything in your app.
892
- Tags can sit inside other tags, so a broad tag such as "Events" can hold
893
- narrower ones such as "Concerts" and "Workshops". A tag can also have
894
- alternative names, including translations, so people find it by whichever word
895
- they know.
896
-
897
- ## Tasks
898
-
899
- ### Add a tag
900
-
901
- 1. Choose the **New** button above the list of tags.
902
- 2. Give the tag a **{field:name}** people will recognise.
903
- 3. Add a **{field:description}** that says what belongs under it.
904
- 4. Save. The tag is now ready to use.
905
-
906
- ### Put a tag inside another tag
907
-
908
- 1. Open the tag from the list and choose Edit.
909
- 2. Pick the **{field:parentId}**, the broader tag it belongs under.
910
- 3. Leave it empty to make the tag a top-level tag.
911
- 4. Save. Moving a tag moves everything under it too.
912
-
913
- ### Add another name for a tag
914
-
915
- 1. Open the list of alternative names and choose **New**.
916
- 2. Pick the **{field:tagSlug}** the new name belongs to.
917
- 3. Type the **{field:alias}**, for example a common nickname or a translation.
918
- 4. Set the **{field:language}** if the name is in a specific language.
919
- 5. Save. The alternative name is now on file for that tag.
920
-
921
- ### Keep the list tidy
922
-
923
- Keep one tag for each idea. If two tags mean the same thing, record the second
924
- as an alternative name instead of keeping both.
925
- `,fieldRefs:[`alias`,`description`,`language`,`name`,`parentId`,`tagSlug`]},demo:{mode:`server`,reasons:[`Needs a server because its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624).`]}}]},{id:`timesheets`,packageName:`@happyvertical/smrt-timesheets`,version:`0.57.9`,description:`Shared time entries for the SMRT framework: who worked how long on what, approval and correction, with immutable charge and compensation snapshots`,models:[{id:`@happyvertical/smrt-timesheets:AttendanceBreak`,name:`AttendanceBreak`,collection:`attendancebreaks`,description:`A paid or unpaid break inside one attendance punch.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`punchId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-timesheets:AttendancePunch`},{name:`startedAt`,type:`datetime`,required:!1},{name:`endedAt`,type:`datetime`,required:!1},{name:`paid`,type:`boolean`,required:!0,default:!1},{name:`kind`,type:`text`,required:!1},{name:`openSlot`,type:`text`,required:!0}],rest:[{method:`GET`,path:`/attendancebreaks`},{method:`GET`,path:`/attendancebreaks/[id]`}],mcp:[{operation:`get`,name:`attendancebreak_get`},{operation:`list`,name:`attendancebreak_list`}],cli:[{operation:`get`,name:`attendancebreak_get`},{operation:`list`,name:`attendancebreak_list`}],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-timesheets:AttendancePunch`],exposed:!0},{id:`@happyvertical/smrt-timesheets:AttendanceCorrection`,name:`AttendanceCorrection`,collection:`attendancecorrections`,description:`One append-only change to closed attendance: who changed whose time, why, and the before/after values as JSON (null for an addition's before or a removal's after).`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`subjectProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`actorProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`kind`,type:`text`,required:!1},{name:`punchId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-timesheets:AttendancePunch`},{name:`targetId`,type:`text`,required:!1},{name:`beforeState`,type:`text`,required:!1},{name:`afterState`,type:`text`,required:!1},{name:`reason`,type:`text`,required:!1},{name:`acknowledgementRequired`,type:`boolean`,required:!0,default:!1},{name:`acknowledgedAt`,type:`datetime`,required:!1},{name:`acknowledgedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`getAfter`,async:!1,parameters:[],returnType:`T | null`,aiCallable:!1},{name:`getBefore`,async:!1,parameters:[],returnType:`T | null`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-timesheets:AttendancePunch`],exposed:!1},{id:`@happyvertical/smrt-timesheets:AttendancePunch`,name:`AttendancePunch`,collection:`attendancepunches`,description:`A tenant-scoped interval of attendance, independent of billable work.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`startedAt`,type:`datetime`,required:!1},{name:`endedAt`,type:`datetime`,required:!1},{name:`durationSeconds`,type:`integer`,required:!0,default:0},{name:`unpaidBreakSeconds`,type:`integer`,required:!0,default:0},{name:`reviewRequired`,type:`boolean`,required:!0,default:!1},{name:`autoCloseReason`,type:`text`,required:!1},{name:`recordedOffline`,type:`boolean`,required:!0,default:!1},{name:`source`,type:`text`,required:!1},{name:`deviceRefType`,type:`text`,required:!1},{name:`deviceRefId`,type:`text`,required:!1},{name:`serviceTimeEntryId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-timesheets:ServiceTimeEntry`},{name:`openSlot`,type:`text`,required:!0}],rest:[{method:`GET`,path:`/attendancepunches`},{method:`GET`,path:`/attendancepunches/[id]`}],mcp:[{operation:`get`,name:`attendancepunch_get`},{operation:`list`,name:`attendancepunch_list`}],cli:[{operation:`get`,name:`attendancepunch_get`},{operation:`list`,name:`attendancepunch_list`}],methods:[{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-timesheets:ServiceTimeEntry`],exposed:!0},{id:`@happyvertical/smrt-timesheets:AttendanceReplay`,name:`AttendanceReplay`,collection:`attendancereplays`,description:`Durable offline-tap outcome; never exposed through generated operations.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`replayKey`,type:`text`,required:!0},{name:`content`,type:`text`,required:!1},{name:`outcome`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`getOutcome`,async:!1,parameters:[],returnType:`AttendanceReplayOutcome`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setOutcome`,async:!1,parameters:[`value: AttendanceReplayOutcome`],returnType:`void`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-timesheets:AttendanceSegment`,name:`AttendanceSegment`,collection:`attendancesegments`,description:`A running unit of work inside one attendance punch: a work reference plus an optional second (task) reference as queryable columns, so job costing can index and join them.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`punchId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-timesheets:AttendancePunch`},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`workRefType`,type:`text`,required:!1},{name:`workRefId`,type:`text`,required:!1},{name:`taskRefType`,type:`text`,required:!1},{name:`taskRefId`,type:`text`,required:!1},{name:`kind`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`startedAt`,type:`datetime`,required:!1},{name:`endedAt`,type:`datetime`,required:!1},{name:`durationSeconds`,type:`integer`,required:!0,default:0},{name:`closedReason`,type:`text`,required:!1,default:``},{name:`reviewRequired`,type:`boolean`,required:!0,default:!1},{name:`openSlot`,type:`text`,required:!0}],rest:[{method:`GET`,path:`/attendancesegments`},{method:`GET`,path:`/attendancesegments/[id]`}],mcp:[{operation:`get`,name:`attendancesegment_get`},{operation:`list`,name:`attendancesegment_list`}],cli:[{operation:`get`,name:`attendancesegment_get`},{operation:`list`,name:`attendancesegment_list`}],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-timesheets:AttendancePunch`],exposed:!0},{id:`@happyvertical/smrt-timesheets:PeriodTimecard`,name:`PeriodTimecard`,collection:`periodtimecards`,description:`One person's immutable-on-confirmation period snapshot, in integer seconds.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`startsAt`,type:`datetime`,required:!1},{name:`endsAt`,type:`datetime`,required:!1},{name:`timezone`,type:`text`,required:!1},{name:`rulesVersion`,type:`text`,required:!1},{name:`rulesSnapshot`,type:`text`,required:!1},{name:`sourceSnapshot`,type:`text`,required:!1},{name:`regularSeconds`,type:`integer`,required:!0,default:0},{name:`overtimeSeconds`,type:`integer`,required:!0,default:0},{name:`totalSeconds`,type:`integer`,required:!0,default:0},{name:`status`,type:`text`,required:!1,enum:[`open`,`submitted`,`confirmed`]},{name:`submittedAt`,type:`datetime`,required:!1},{name:`submittedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`confirmedAt`,type:`datetime`,required:!1},{name:`confirmedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`getRules`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getSources`,async:!1,parameters:[],returnType:`TimecardSource[]`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!1},{id:`@happyvertical/smrt-timesheets:ServiceChargeSnapshot`,name:`ServiceChargeSnapshot`,collection:`servicechargesnapshots`,description:`Immutable client-charge snapshot for one approved time entry. Money is integer minor units, consistent with smrt-commerce (#2401).`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`timeEntryId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-timesheets:ServiceTimeEntry`},{name:`amount`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1},{name:`pricingVersion`,type:`text`,required:!1},{name:`strategy`,type:`text`,required:!1},{name:`rateSnapshot`,type:`text`,required:!1},{name:`sourceChargeRef`,type:`text`,required:!1},{name:`createdAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`GET`,path:`/servicechargesnapshots`},{method:`GET`,path:`/servicechargesnapshots/[id]`}],mcp:[{operation:`get`,name:`servicechargesnapshot_get`},{operation:`list`,name:`servicechargesnapshot_list`}],cli:[{operation:`get`,name:`servicechargesnapshot_get`},{operation:`list`,name:`servicechargesnapshot_list`}],methods:[{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-timesheets:ServiceTimeEntry`],exposed:!0},{id:`@happyvertical/smrt-timesheets:ServiceCompensationSnapshot`,name:`ServiceCompensationSnapshot`,collection:`servicecompensationsnapshots`,description:`Immutable provider-compensation snapshot for one approved time entry, kept separate from the client charge so the margin is charge - compensation.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`timeEntryId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-timesheets:ServiceTimeEntry`},{name:`amount`,type:`integer`,required:!1,default:0},{name:`currency`,type:`text`,required:!1},{name:`termsVersion`,type:`text`,required:!1},{name:`rateSnapshot`,type:`text`,required:!1},{name:`createdAt`,type:`datetime`,required:!1,system:!0}],rest:[{method:`GET`,path:`/servicecompensationsnapshots`},{method:`GET`,path:`/servicecompensationsnapshots/[id]`}],mcp:[{operation:`get`,name:`servicecompensationsnapshot_get`},{operation:`list`,name:`servicecompensationsnapshot_list`}],cli:[{operation:`get`,name:`servicecompensationsnapshot_get`},{operation:`list`,name:`servicecompensationsnapshot_list`}],methods:[{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-timesheets:ServiceTimeEntry`],exposed:!0},{id:`@happyvertical/smrt-timesheets:ServiceTimeEntry`,name:`ServiceTimeEntry`,collection:`servicetimeentries`,description:`A person or agent worked this long on this thing, and someone approved it.`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`workRefType`,type:`text`,required:!1},{name:`workRefId`,type:`text`,required:!1},{name:`participantKind`,type:`text`,required:!1,enum:[`human`,`agent`]},{name:`participantProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`agentRef`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1,enum:[`timer`,`manual`,`import`,`agent`]},{name:`description`,type:`text`,required:!1},{name:`startedAt`,type:`datetime`,required:!1},{name:`endedAt`,type:`datetime`,required:!1},{name:`durationSeconds`,type:`integer`,required:!1},{name:`evidence`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`draft`,`submitted`,`approved`,`rejected`,`corrected`]},{name:`submittedAt`,type:`datetime`,required:!1},{name:`submittedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`approvedAt`,type:`datetime`,required:!1},{name:`approvedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`approvalPath`,type:`text`,required:!1},{name:`rejectedAt`,type:`datetime`,required:!1},{name:`rejectedByProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`rejectionReason`,type:`text`,required:!1},{name:`correctionOfId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-timesheets:ServiceTimeEntry`},{name:`metadata`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/servicetimeentries`},{method:`GET`,path:`/servicetimeentries/[id]`},{method:`POST`,path:`/servicetimeentries/record`},{method:`POST`,path:`/servicetimeentries/submit`},{method:`POST`,path:`/servicetimeentries/approve`},{method:`POST`,path:`/servicetimeentries/forWork`},{method:`POST`,path:`/servicetimeentries/pendingApproval`}],mcp:[{operation:`get`,name:`servicetimeentry_get`},{operation:`list`,name:`servicetimeentry_list`},{operation:`forWork`,name:`servicetimeentrycollection_forwork`},{operation:`pendingApproval`,name:`servicetimeentrycollection_pendingapproval`}],cli:[{operation:`get`,name:`servicetimeentry_get`},{operation:`list`,name:`servicetimeentry_list`}],methods:[{name:`approve`,async:!0,parameters:[`options: ServiceTimeEntryActionTarget`],returnType:`Promise<ServiceTimeEntry>`,aiCallable:!1},{name:`durationHours`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`durationHoursExact`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`forWork`,async:!0,parameters:[`workRefType: string`,`workRefId: string`],returnType:`Promise<ServiceTimeEntry[]>`,aiCallable:!0},{name:`getEvidence`,async:!1,parameters:[],returnType:`ServiceEvidence[]`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`pendingApproval`,async:!0,parameters:[],returnType:`Promise<ServiceTimeEntry[]>`,aiCallable:!0},{name:`record`,async:!0,parameters:[`options: RecordServiceTimeActionInput`],returnType:`Promise<ServiceTimeEntry>`,aiCallable:!1},{name:`requireDurationSeconds`,async:!1,parameters:[],returnType:`number`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setEvidence`,async:!1,parameters:[`value: ServiceEvidence[]`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`submit`,async:!0,parameters:[`options: ServiceTimeEntryActionTarget`],returnType:`Promise<ServiceTimeEntry>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-timesheets:ServiceTimeEntry`],exposed:!0},{id:`@happyvertical/smrt-timesheets:TimecardAdjustment`,name:`TimecardAdjustment`,collection:`timecardadjustments`,description:`Attributed append-only signed seconds; the confirmed base card never changes.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`timecardId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-timesheets:PeriodTimecard`},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`actorProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`operationId`,type:`text`,required:!1},{name:`regularSeconds`,type:`integer`,required:!0,default:0},{name:`overtimeSeconds`,type:`integer`,required:!0,default:0},{name:`reason`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-timesheets:PeriodTimecard`],exposed:!1},{id:`@happyvertical/smrt-timesheets:TimecardReopening`,name:`TimecardReopening`,collection:`timecardreopenings`,description:`Append-only audit row for one reopening of a submitted or confirmed card: who reopened whose period, why, and the totals it had at that moment (base, adjustments and effective, in integer seconds).`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`timecardId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-timesheets:PeriodTimecard`},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`actorProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`operationId`,type:`text`,required:!1},{name:`fromStatus`,type:`text`,required:!1,enum:[`open`,`submitted`,`confirmed`]},{name:`reason`,type:`text`,required:!1},{name:`previousState`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`getPrevious`,async:!1,parameters:[],returnType:`T`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-timesheets:PeriodTimecard`],exposed:!1}],dependencies:[`profiles`,`users`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3617`,`#3624`,`#3626`],reason:`node:crypto`,via:[`@happyvertical/smrt-profiles`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`]},recipes:[{id:`timesheets.time-entries`,label:`Time entries`,summary:`Record who worked how long on what, for approval.`,synonyms:[`timesheets`,`time tracking`,`hours`,`billable hours`,`timecards`],models:[`@happyvertical/smrt-timesheets:ServiceTimeEntry`],nav:[{label:`Time entries`,model:`@happyvertical/smrt-timesheets:ServiceTimeEntry`,icon:`fileText`,description:`Hours worked, by person and by job, from draft to approved.`}],requires:[],section:{id:`work`,label:`Work`,icon:`wrench`,description:`Time and costs: the work behind each job.`},options:{"@happyvertical/smrt-timesheets:ServiceTimeEntry":{fields:{participantProfileId:{label:`Person`,order:1},description:{order:2,help:`What the time was spent on, in a few words.`},startedAt:{label:`Started`,order:3},endedAt:{label:`Ended`,order:4},durationSeconds:{label:`Duration (seconds)`,order:5,help:`Whole seconds: 3600 is one hour.`},workRefId:{label:`Work reference`,order:6,help:`The job, project or case this time belongs to.`},workRefType:{visibility:`hidden`},participantKind:{default:`human`,visibility:`hidden`},agentRef:{visibility:`hidden`},source:{default:`manual`,visibility:`hidden`},evidence:{visibility:`hidden`},status:{visibility:`hidden`,locked:!0},submittedAt:{visibility:`hidden`,locked:!0},submittedByProfileId:{visibility:`hidden`,locked:!0},approvedAt:{visibility:`hidden`,locked:!0},approvedByProfileId:{visibility:`hidden`,locked:!0},approvalPath:{visibility:`hidden`,locked:!0},rejectedAt:{visibility:`hidden`,locked:!0},rejectedByProfileId:{visibility:`hidden`,locked:!0},rejectionReason:{visibility:`hidden`,locked:!0},correctionOfId:{visibility:`hidden`,locked:!0},metadata:{visibility:`hidden`}}}},help:{markdown:`## Overview
926
-
927
- Time entries record who worked how long on what. Each entry names the person,
928
- what they did and when, and moves from draft to submitted to approved.
929
-
930
- ## Tasks
931
-
932
- ### Record time
933
-
934
- 1. Create a new time entry.
935
- 2. Pick the **{field:participantProfileId}** who did the work.
936
- 3. Write a short **{field:description}** of what was done.
937
- 4. Enter when it **{field:startedAt}** and **{field:endedAt}**, or type the
938
- **{field:durationSeconds}** directly (3600 is one hour).
939
-
940
- ### Send it for approval
941
-
942
- Approval is not something you change on this form. It runs through your
943
- app's approval screen, which records who did each step and when.
944
-
945
- 1. When an entry is ready to check, the person who did the work submits it.
946
- 2. An approver, someone your app allows to approve time, approves it or sends
947
- it back with a reason. Approving fixes what the hours are charged and paid
948
- at, so an approved entry never changes; correct it with a new entry.
949
- 3. If your app has no approval screen yet, entries stay as drafts until one is
950
- added.
951
- `,fieldRefs:[`description`,`durationSeconds`,`endedAt`,`participantProfileId`,`startedAt`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: node:crypto; and its package depends on @happyvertical/smrt-profiles, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3617, #3624, #3626).`]}}]},{id:`users`,packageName:`@happyvertical/smrt-users`,version:`0.57.9`,description:`Multi-tenant user management for the SMRT framework - users, tenants, roles, permissions, groups`,models:[{id:`@happyvertical/smrt-users:AccessRequest`,name:`AccessRequest`,collection:`accessrequests`,description:`A prospective user's request for access, captured before they become a User.`,display:{label:`name`},fields:[{name:`email`,type:`text`,required:!0,default:``},{name:`name`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1,default:``},{name:`requestContext`,type:`text`,required:!1,default:`{}`},{name:`note`,type:`text`,required:!1},{name:`requestedAt`,type:`datetime`,required:!1},{name:`decidedAt`,type:`datetime`,required:!1},{name:`decidedBy`,type:`text`,required:!1},{name:`resultingUserId`,type:`text`,required:!1},{name:`tenantHint`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`findByEmail`,async:!0,parameters:[`email: string`],returnType:`Promise<AccessRequest[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: AccessRequestStatus`],returnType:`Promise<AccessRequest[]>`,aiCallable:!1},{name:`findOpen`,async:!0,parameters:[],returnType:`Promise<AccessRequest[]>`,aiCallable:!1},{name:`findOpenByEmail`,async:!0,parameters:[`email: string`],returnType:`Promise<AccessRequest | null>`,aiCallable:!1},{name:`getRequestContext`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getTenantHint`,async:!1,parameters:[],returnType:`Record<string, unknown> | null`,aiCallable:!1},{name:`isApproved`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isOpen`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isTerminal`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`setRequestContext`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setTenantHint`,async:!1,parameters:[`value: Record<string, unknown> | null`],returnType:`void`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-users:Group`,name:`Group`,collection:`groups`,description:`Group represents a team or department within a tenant.`,display:{label:`name`},fields:[{name:`tenantId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Tenant`,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`description`,type:`text`,required:!1,default:``}],rest:[{method:`GET`,path:`/groups`},{method:`GET`,path:`/groups/[id]`}],mcp:[{operation:`get`,name:`group_get`},{operation:`list`,name:`group_list`}],cli:[{operation:`get`,name:`group_get`},{operation:`list`,name:`group_list`}],methods:[{name:`findBySlug`,async:!0,parameters:[`slug: string`,`tenantId: string`],returnType:`Promise<Group | null>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Group[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:Tenant`],exposed:!0},{id:`@happyvertical/smrt-users:GroupMember`,name:`GroupMember`,collection:`groupmembers`,description:`GroupMember is a join table linking Users to Groups.`,fields:[{name:`groupId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Group`},{name:`userId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:User`}],rest:[{method:`GET`,path:`/groupmembers`},{method:`GET`,path:`/groupmembers/[id]`}],mcp:[{operation:`get`,name:`groupmember_get`},{operation:`list`,name:`groupmember_list`}],cli:[{operation:`get`,name:`groupmember_get`},{operation:`list`,name:`groupmember_list`}],methods:[{name:`addMember`,async:!0,parameters:[`groupId: string`,`userId: string`],returnType:`Promise<GroupMember>`,aiCallable:!1},{name:`findByGroup`,async:!0,parameters:[`groupId: string`],returnType:`Promise<GroupMember[]>`,aiCallable:!1},{name:`findByUser`,async:!0,parameters:[`userId: string`],returnType:`Promise<GroupMember[]>`,aiCallable:!1},{name:`getGroupIds`,async:!0,parameters:[`userId: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getGroupIdsForTenant`,async:!0,parameters:[`userId: string`,`tenantId: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getUserIds`,async:!0,parameters:[`groupId: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`isMember`,async:!0,parameters:[`groupId: string`,`userId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`removeMember`,async:!0,parameters:[`groupId: string`,`userId: string`],returnType:`Promise<boolean>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:Group`,`@happyvertical/smrt-users:User`],exposed:!0},{id:`@happyvertical/smrt-users:GroupRole`,name:`GroupRole`,collection:`grouproles`,description:`GroupRole is a join table linking Groups to Roles.`,fields:[{name:`groupId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Group`},{name:`roleId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Role`}],rest:[{method:`GET`,path:`/grouproles`},{method:`GET`,path:`/grouproles/[id]`}],mcp:[{operation:`get`,name:`grouprole_get`},{operation:`list`,name:`grouprole_list`}],cli:[{operation:`get`,name:`grouprole_get`},{operation:`list`,name:`grouprole_list`}],methods:[{name:`addRole`,async:!0,parameters:[`groupId: string`,`roleId: string`],returnType:`Promise<GroupRole>`,aiCallable:!1},{name:`findByGroup`,async:!0,parameters:[`groupId: string`],returnType:`Promise<GroupRole[]>`,aiCallable:!1},{name:`findByRole`,async:!0,parameters:[`roleId: string`],returnType:`Promise<GroupRole[]>`,aiCallable:!1},{name:`getRoleIds`,async:!0,parameters:[`groupId: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`hasRole`,async:!0,parameters:[`groupId: string`,`roleId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`removeRole`,async:!0,parameters:[`groupId: string`,`roleId: string`],returnType:`Promise<boolean>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:Group`,`@happyvertical/smrt-users:Role`],exposed:!0},{id:`@happyvertical/smrt-users:LegalMember`,name:`LegalMember`,collection:`legalmembers`,description:`The legal register entry, deliberately separate from RBAC Membership.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`memberClassId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:MemberClass`},{name:`kind`,type:`text`,required:!1,enum:[`individual`,`organisation`]},{name:`displayName`,type:`text`,required:!1},{name:`userId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:User`},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`},{name:`externalPartyRef`,type:`text`,required:!1},{name:`joinedOn`,type:`text`,required:!1},{name:`leftOn`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,enum:[`active`,`suspended`,`resigned`,`ceased`]}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-users:MemberClass`,`@happyvertical/smrt-users:User`],exposed:!1},{id:`@happyvertical/smrt-users:LegalMemberReference`,name:`LegalMemberReference`,collection:`legalmemberreferences`,description:`A link to authoritative share/dues/subscription/agreement/ledger evidence.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`memberId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:LegalMember`},{name:`kind`,type:`text`,required:!1,enum:[`share`,`dues`,`subscription`,`agreement`,`ledger`]},{name:`sourceType`,type:`text`,required:!1},{name:`sourceId`,type:`text`,required:!1},{name:`authoritative`,type:`boolean`,required:!1},{name:`effectiveFrom`,type:`text`,required:!1},{name:`effectiveTo`,type:`text`,required:!1},{name:`revokesId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:LegalMemberReference`}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:LegalMember`,`@happyvertical/smrt-users:LegalMemberReference`],exposed:!1},{id:`@happyvertical/smrt-users:LegalMemberStatusHistory`,name:`LegalMemberStatusHistory`,collection:`legalmemberstatushistories`,description:`Append-only effective history; current status never erases it.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`memberId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:LegalMember`},{name:`status`,type:`text`,required:!1,enum:[`active`,`suspended`,`resigned`,`ceased`]},{name:`effectiveOn`,type:`text`,required:!1},{name:`sequence`,type:`integer`,required:!1},{name:`reason`,type:`text`,required:!1},{name:`actorRef`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:LegalMember`],exposed:!1},{id:`@happyvertical/smrt-users:MemberClass`,name:`MemberClass`,collection:`memberclasses`,description:`A tenant-configured legal class; it has no authority or entitlement effect.`,display:{label:`name`},fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`key`,type:`text`,required:!1},{name:`name`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`policyMetadata`,type:`json`,required:!1}],rest:[],mcp:[],cli:[],methods:[],references:[],exposed:!1},{id:`@happyvertical/smrt-users:MemberEligibilitySnapshot`,name:`MemberEligibilitySnapshot`,collection:`membereligibilitysnapshots`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`memberId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:LegalMember`},{name:`recordDate`,type:`text`,required:!1},{name:`eligible`,type:`boolean`,required:!1},{name:`reason`,type:`text`,required:!1},{name:`evidence`,type:`json`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:LegalMember`],exposed:!1},{id:`@happyvertical/smrt-users:MemberOfficerAppointment`,name:`MemberOfficerAppointment`,collection:`memberofficerappointments`,description:`A dated register of board/officer appointments; it does not implement elections.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`memberId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:LegalMember`},{name:`role`,type:`text`,required:!1},{name:`effectiveFrom`,type:`text`,required:!1},{name:`effectiveTo`,type:`text`,required:!1},{name:`authority`,type:`json`,required:!1}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-users:LegalMember`],exposed:!1},{id:`@happyvertical/smrt-users:Membership`,name:`Membership`,collection:`memberships`,description:`Membership represents a user's membership in a tenant with an assigned role.`,fields:[{name:`userId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:User`,description:`The person who belongs to this organization.`},{name:`tenantId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Tenant`,system:!0},{name:`roleId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Role`,description:`The role that determines this member's permissions.`},{name:`status`,type:`text`,required:!1,description:`Whether this membership is active, pending, or inactive.`}],rest:[{method:`GET`,path:`/memberships`},{method:`GET`,path:`/memberships/[id]`}],mcp:[{operation:`get`,name:`membership_get`},{operation:`list`,name:`membership_list`}],cli:[{operation:`get`,name:`membership_get`},{operation:`list`,name:`membership_list`}],methods:[{name:`findActiveByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Membership[]>`,aiCallable:!1},{name:`findActiveByUser`,async:!0,parameters:[`userId: string`],returnType:`Promise<Membership[]>`,aiCallable:!1},{name:`findByRole`,async:!0,parameters:[`roleId: string`],returnType:`Promise<Membership[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: MembershipStatus`],returnType:`Promise<Membership[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Membership[]>`,aiCallable:!1},{name:`findByUser`,async:!0,parameters:[`userId: string`],returnType:`Promise<Membership[]>`,aiCallable:!1},{name:`findByUserAndTenant`,async:!0,parameters:[`userId: string`,`tenantId: string`],returnType:`Promise<Membership | null>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPending`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1}],references:[`@happyvertical/smrt-users:Role`,`@happyvertical/smrt-users:Tenant`,`@happyvertical/smrt-users:User`],exposed:!0},{id:`@happyvertical/smrt-users:MembershipOverride`,name:`MembershipOverride`,collection:`membershipoverrides`,description:`MembershipOverride allows granting or denying specific permissions to a user beyond what their role and groups provide.`,fields:[{name:`membershipId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Membership`},{name:`permissionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Permission`},{name:`effect`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/membershipoverrides`},{method:`GET`,path:`/membershipoverrides/[id]`}],mcp:[{operation:`get`,name:`membershipoverride_get`},{operation:`list`,name:`membershipoverride_list`}],cli:[{operation:`get`,name:`membershipoverride_get`},{operation:`list`,name:`membershipoverride_list`}],methods:[{name:`denyPermission`,async:!0,parameters:[`membershipId: string`,`permissionId: string`],returnType:`Promise<MembershipOverride>`,aiCallable:!1},{name:`findByMembership`,async:!0,parameters:[`membershipId: string`],returnType:`Promise<MembershipOverride[]>`,aiCallable:!1},{name:`findDenies`,async:!0,parameters:[`membershipId: string`],returnType:`Promise<MembershipOverride[]>`,aiCallable:!1},{name:`findGrants`,async:!0,parameters:[`membershipId: string`],returnType:`Promise<MembershipOverride[]>`,aiCallable:!1},{name:`getDeniedPermissionIds`,async:!0,parameters:[`membershipId: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getGrantedPermissionIds`,async:!0,parameters:[`membershipId: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`grantPermission`,async:!0,parameters:[`membershipId: string`,`permissionId: string`],returnType:`Promise<MembershipOverride>`,aiCallable:!1},{name:`isDeny`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isGrant`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`removeOverride`,async:!0,parameters:[`membershipId: string`,`permissionId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`setOverride`,async:!0,parameters:[`membershipId: string`,`permissionId: string`,`effect: OverrideEffect`],returnType:`Promise<MembershipOverride>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:Membership`,`@happyvertical/smrt-users:Permission`],exposed:!0},{id:`@happyvertical/smrt-users:Permission`,name:`Permission`,collection:`permissions`,description:`Permission represents a named capability in the system.`,display:{label:`name`},fields:[{name:`name`,type:`text`,required:!1,default:``,description:`The name of an action people can be allowed to perform.`},{name:`description`,type:`text`,required:!1,default:``,description:`What this permission allows someone to do.`},{name:`category`,type:`text`,required:!1,default:``,description:`The area of the application this permission belongs to.`}],rest:[{method:`GET`,path:`/permissions`},{method:`GET`,path:`/permissions/[id]`}],mcp:[{operation:`get`,name:`permission_get`},{operation:`list`,name:`permission_list`}],cli:[{operation:`get`,name:`permission_get`},{operation:`list`,name:`permission_list`}],methods:[{name:`findByCategory`,async:!0,parameters:[`category: string`],returnType:`Promise<Permission[]>`,aiCallable:!1},{name:`findByIds`,async:!0,parameters:[`ids: string[]`],returnType:`Promise<Map<string, Permission>>`,aiCallable:!1},{name:`findBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<Permission | null>`,aiCallable:!1},{name:`findOrCreate`,async:!0,parameters:[`slug: string`,`defaults?: Partial<object>`],returnType:`Promise<Permission>`,aiCallable:!1},{name:`getAction`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`getCategories`,async:!0,parameters:[],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getResource`,async:!1,parameters:[],returnType:`string`,aiCallable:!1},{name:`isValidSlug`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`parseSlug`,async:!1,parameters:[],returnType:`ParsedPermissionSlug`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-users:ResourceGrant`,name:`ResourceGrant`,collection:`resourcegrants`,description:`An exact tenant/resource/user/permission decision. This deliberately does not replace tenant RBAC: ResourceGrantResolver only allows after the normal operation guard has allowed the same permission.`,fields:[{name:`tenantId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Tenant`,system:!0},{name:`userId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:User`,description:`The person receiving this record-specific access rule.`},{name:`resourceType`,type:`text`,required:!1,description:`The kind of record this access rule applies to.`},{name:`resourceId`,type:`text`,required:!1,description:`The specific record covered by this access rule.`},{name:`permission`,type:`text`,required:!1,description:`The action this rule allows or denies for the record.`},{name:`effect`,type:`text`,required:!1,enum:[`grant`,`deny`],description:`Whether this rule grants access or denies it. Denies take precedence.`},{name:`canDelegate`,type:`boolean`,required:!1,default:!1,description:`Whether the recipient may pass this grant on to another person.`},{name:`parentGrantId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:ResourceGrant`,description:`The earlier grant from which this access was delegated.`},{name:`revokedAt`,type:`text`,required:!1,description:`When this access rule was revoked, if it has ended.`}],rest:[],mcp:[],cli:[],methods:[{name:`findChildren`,async:!0,parameters:[`parentGrantId: string`],returnType:`Promise<ResourceGrant[]>`,aiCallable:!1},{name:`findExact`,async:!0,parameters:[`tenantId: string`,`userId: string`,`resourceType: string`,`resourceId: string`,`permission: string`],returnType:`Promise<ResourceGrant[]>`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1}],references:[`@happyvertical/smrt-users:ResourceGrant`,`@happyvertical/smrt-users:Tenant`,`@happyvertical/smrt-users:User`],exposed:!1},{id:`@happyvertical/smrt-users:Role`,name:`Role`,collection:`roles`,description:`Role represents a permission template that can be assigned to users.`,display:{label:`name`},fields:[{name:`tenantId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:Tenant`,system:!0},{name:`name`,type:`text`,required:!1,default:``,description:`The name of this set of permissions.`},{name:`description`,type:`text`,required:!1,default:``,description:`What this role allows and who should receive it.`},{name:`isSystem`,type:`boolean`,required:!1,default:!1,description:`Whether this is a built-in role protected from deletion.`},{name:`inheritsToDescendants`,type:`boolean`,required:!1,default:!1,description:`Whether this role can give members access to organizations below theirs.`}],rest:[{method:`GET`,path:`/roles`},{method:`GET`,path:`/roles/[id]`}],mcp:[{operation:`get`,name:`role_get`},{operation:`list`,name:`role_list`}],cli:[{operation:`get`,name:`role_get`},{operation:`list`,name:`role_list`}],methods:[{name:`canDelete`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`delete`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!1},{name:`findBySlug`,async:!0,parameters:[`slug: string`,`tenantId?: string`],returnType:`Promise<Role | null>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Role[]>`,aiCallable:!1},{name:`findSystemRoleBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<Role | null>`,aiCallable:!1},{name:`findSystemRoles`,async:!0,parameters:[],returnType:`Promise<Role[]>`,aiCallable:!1},{name:`findTenantRoles`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Role[]>`,aiCallable:!1},{name:`isSystemRole`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isTenantRole`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`seedSystemRoles`,async:!0,parameters:[`options?: SeedSystemRolesOptions`],returnType:`Promise<Role[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:Tenant`],exposed:!0},{id:`@happyvertical/smrt-users:RolePermission`,name:`RolePermission`,collection:`rolepermissions`,description:`RolePermission is a join table linking Roles to Permissions.`,fields:[{name:`roleId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Role`},{name:`permissionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Permission`}],rest:[{method:`GET`,path:`/rolepermissions`},{method:`GET`,path:`/rolepermissions/[id]`}],mcp:[{operation:`get`,name:`rolepermission_get`},{operation:`list`,name:`rolepermission_list`}],cli:[{operation:`get`,name:`rolepermission_get`},{operation:`list`,name:`rolepermission_list`}],methods:[{name:`addPermission`,async:!0,parameters:[`roleId: string`,`permissionId: string`],returnType:`Promise<RolePermission>`,aiCallable:!1},{name:`findByPermission`,async:!0,parameters:[`permissionId: string`],returnType:`Promise<RolePermission[]>`,aiCallable:!1},{name:`findByRole`,async:!0,parameters:[`roleId: string`],returnType:`Promise<RolePermission[]>`,aiCallable:!1},{name:`getPermissionIds`,async:!0,parameters:[`roleId: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`hasPermission`,async:!0,parameters:[`roleId: string`,`permissionId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`removePermission`,async:!0,parameters:[`roleId: string`,`permissionId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`seedDefaultRolePersonalizationPermissions`,async:!0,parameters:[`options?: Omit<SeedRolePermissionsOptions, 'prune'>`],returnType:`Promise<SeedRolePermissionsResult>`,aiCallable:!1},{name:`seedRolePermissions`,async:!0,parameters:[`matrix?: RolePermissionPatternMatrix`,`options?: SeedRolePermissionsOptions`],returnType:`Promise<SeedRolePermissionsResult>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:Permission`,`@happyvertical/smrt-users:Role`],exposed:!0},{id:`@happyvertical/smrt-users:Session`,name:`Session`,collection:`sessions`,description:`Session represents an authenticated user session.`,fields:[{name:`userId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:User`,description:`The person signed in through this session.`},{name:`tenantId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:Tenant`,system:!0},{name:`status`,type:`text`,required:!1,description:`Whether this sign-in session is active or has ended.`},{name:`expiresAt`,type:`datetime`,required:!1,description:`When this session expires unless renewed within its allowed limits.`},{name:`userAgent`,type:`text`,required:!1,default:``,description:`The browser or device reported when this session was created.`},{name:`ipAddress`,type:`text`,required:!1,default:``,description:`The network address reported for this session.`},{name:`lastAccessedAt`,type:`datetime`,required:!1,description:`When this session was last used.`},{name:`data`,type:`json`,required:!1,description:`Additional session details maintained by your application.`},{name:`authMethod`,type:`text`,required:!1,description:`The sign-in method used to establish this session.`},{name:`parentSessionId`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/sessions/[id]`},{method:`DELETE`,path:`/sessions/[id]`}],mcp:[],cli:[],methods:[{name:`countUserSessions`,async:!0,parameters:[`userId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`createSession`,async:!0,parameters:[`options: CreateSessionOptions`],returnType:`Promise<Session>`,aiCallable:!1},{name:`deleteExpired`,async:!0,parameters:[`options?: object`],returnType:`Promise<number>`,aiCallable:!1},{name:`deleteUserSessions`,async:!0,parameters:[`userId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`extend`,async:!1,parameters:[`ttlSeconds?: number`],returnType:`void`,aiCallable:!1},{name:`findByUser`,async:!0,parameters:[`userId: string`],returnType:`Promise<Session[]>`,aiCallable:!1},{name:`findChildren`,async:!0,parameters:[`parentSessionId: string`],returnType:`Promise<Session[]>`,aiCallable:!1},{name:`findValidSession`,async:!0,parameters:[`sessionId: string`],returnType:`Promise<Session | null>`,aiCallable:!1},{name:`getAbsoluteExpiry`,async:!1,parameters:[],returnType:`Date | null`,aiCallable:!1},{name:`getData`,async:!1,parameters:[`key: string`],returnType:`T | undefined`,aiCallable:!1},{name:`getIdleSeconds`,async:!1,parameters:[],returnType:`number | null`,aiCallable:!1},{name:`getPermissionCeiling`,async:!1,parameters:[],returnType:`string[] | null`,aiCallable:!1},{name:`getSessionData`,async:!0,parameters:[`sessionId: string`,`key: string`],returnType:`Promise<T | undefined>`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isLayered`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isRevoked`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isValid`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`recordActivity`,async:!0,parameters:[`extendTtl?: any`,`ttlSeconds?: number`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`removeData`,async:!1,parameters:[`key: string`],returnType:`void`,aiCallable:!1},{name:`revoke`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`revokeChildren`,async:!0,parameters:[`parentSessionId: string`,`options?: object`],returnType:`Promise<number>`,aiCallable:!1},{name:`revokeSession`,async:!0,parameters:[`sessionId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`revokeUserSessions`,async:!0,parameters:[`userId: string`,`options?: object`],returnType:`Promise<number>`,aiCallable:!1},{name:`revokeUserSessionsByAuthMethod`,async:!0,parameters:[`userId: string`,`authMethod: SessionAuthMethod`,`options?: object`],returnType:`Promise<number>`,aiCallable:!1},{name:`setData`,async:!1,parameters:[`key: string`,`value: unknown`],returnType:`void`,aiCallable:!1},{name:`setSessionData`,async:!0,parameters:[`sessionId: string`,`key: string`,`value: unknown`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`setSessionTenant`,async:!0,parameters:[`sessionId: string`,`tenantId: string | null`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`setTenant`,async:!1,parameters:[`tenantId: string | null`],returnType:`void`,aiCallable:!1},{name:`touch`,async:!1,parameters:[],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-users:Tenant`,`@happyvertical/smrt-users:User`],exposed:!0},{id:`@happyvertical/smrt-users:Tenant`,name:`Tenant`,collection:`tenants`,description:`Tenant represents an organizational boundary in the multi-tenant system.`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`status`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1,default:``},{name:`parentTenantId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:Tenant`},{name:`hierarchyLevel`,type:`integer`,required:!1,default:0},{name:`hierarchyPath`,type:`text`,required:!1,default:``},{name:`cascadePermissions`,type:`boolean`,required:!1,default:!0},{name:`inheritPermissions`,type:`boolean`,required:!1,default:!0}],rest:[{method:`GET`,path:`/tenants`},{method:`GET`,path:`/tenants/[id]`}],mcp:[{operation:`get`,name:`tenant_get`},{operation:`list`,name:`tenant_list`}],cli:[{operation:`get`,name:`tenant_get`},{operation:`list`,name:`tenant_list`}],methods:[{name:`acceptsInheritance`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`canCascadeToChildren`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`createChild`,async:!0,parameters:[`parentTenantId: string`,`options: CreateChildTenantOptions`],returnType:`Promise<Tenant>`,aiCallable:!1},{name:`findActive`,async:!0,parameters:[],returnType:`Promise<Tenant[]>`,aiCallable:!1},{name:`findBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<Tenant | null>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: TenantStatus`],returnType:`Promise<Tenant[]>`,aiCallable:!1},{name:`findChildren`,async:!0,parameters:[`parentTenantId: string`],returnType:`Promise<Tenant[]>`,aiCallable:!1},{name:`findParent`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Tenant | null>`,aiCallable:!1},{name:`findRoots`,async:!0,parameters:[],returnType:`Promise<Tenant[]>`,aiCallable:!1},{name:`getAncestorIds`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getAncestors`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Tenant[]>`,aiCallable:!1},{name:`getAncestorsFromRoot`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Tenant[]>`,aiCallable:!1},{name:`getDescendantIds`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getDescendants`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Tenant[]>`,aiCallable:!1},{name:`getSiblings`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Tenant[]>`,aiCallable:!1},{name:`getTree`,async:!0,parameters:[`rootTenantId?: string`],returnType:`any`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isAncestorOf`,async:!0,parameters:[`potentialAncestorId: string`,`tenantId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isDescendantOf`,async:!0,parameters:[`potentialDescendantId: string`,`tenantId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`isRoot`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSuspended`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`makeRoot`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Tenant>`,aiCallable:!1},{name:`moveToParent`,async:!0,parameters:[`tenantId: string`,`newParentId: string | null`],returnType:`Promise<Tenant>`,aiCallable:!1},{name:`requireChildOf`,async:!0,parameters:[`parentId: string`,`childId: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SmrtSaveOptions`],returnType:`Promise<this>`,aiCallable:!1},{name:`validateHierarchy`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`withTenantCatalogReadScope`,async:!0,parameters:[`options: TenantReadScopeOptions`,`callback: Function`],returnType:`Promise<T>`,aiCallable:!1},{name:`withTenantHierarchyContext`,async:!0,parameters:[`rootTenantId: string`,`options: TenantReadScopeOptions`,`callback: Function`],returnType:`Promise<T>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:Tenant`],exposed:!0},{id:`@happyvertical/smrt-users:TenantIntegration`,name:`TenantIntegration`,collection:`tenantintegrations`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`provider`,type:`text`,required:!1,default:`aws`},{name:`externalIds`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`unprovisioned`,enum:[`unprovisioned`,`provisioning`,`active`,`drifted`,`failed`]},{name:`lastCheckedAt`,type:`datetime`,required:!1},{name:`lastCheckSummary`,type:`text`,required:!1},{name:`lastError`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/tenantintegrations`},{method:`GET`,path:`/tenantintegrations/[id]`}],mcp:[{operation:`get`,name:`tenantintegration_get`},{operation:`list`,name:`tenantintegration_list`}],cli:[{operation:`get`,name:`tenantintegration_get`},{operation:`list`,name:`tenantintegration_list`}],methods:[{name:`findFor`,async:!0,parameters:[`tenantId: string`,`provider: TenantIntegrationProvider`],returnType:`Promise<TenantIntegration | null>`,aiCallable:!1},{name:`findOrInit`,async:!0,parameters:[`tenantId: string`,`provider: TenantIntegrationProvider`],returnType:`Promise<TenantIntegration>`,aiCallable:!1},{name:`getExternalId`,async:!1,parameters:[`key: string`],returnType:`string | undefined`,aiCallable:!1},{name:`getExternalIds`,async:!1,parameters:[],returnType:`Record<string, string>`,aiCallable:!1},{name:`getLastCheckSummary`,async:!1,parameters:[],returnType:`TenantIntegrationCheckSummary[]`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`listForTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<TenantIntegration[]>`,aiCallable:!1},{name:`recordDoctorRun`,async:!1,parameters:[`outcome: object`],returnType:`void`,aiCallable:!1},{name:`setExternalId`,async:!1,parameters:[`key: string`,`value: string | undefined`],returnType:`void`,aiCallable:!1},{name:`setExternalIds`,async:!1,parameters:[`externalIds: Record<string, string> | string`],returnType:`void`,aiCallable:!1},{name:`setLastCheckSummary`,async:!1,parameters:[`summary: TenantIntegrationCheckSummary[] | string`],returnType:`void`,aiCallable:!1}],references:[],exposed:!0},{id:`@happyvertical/smrt-users:TenantPermissionOverride`,name:`TenantPermissionOverride`,collection:`tenantpermissionoverrides`,description:`TenantPermissionOverride allows setting explicit permission values at the tenant level.`,fields:[{name:`tenantId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Tenant`,system:!0},{name:`permissionId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:Permission`},{name:`effect`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/tenantpermissionoverrides`},{method:`GET`,path:`/tenantpermissionoverrides/[id]`}],mcp:[{operation:`get`,name:`tenantpermissionoverride_get`},{operation:`list`,name:`tenantpermissionoverride_list`}],cli:[{operation:`get`,name:`tenantpermissionoverride_get`},{operation:`list`,name:`tenantpermissionoverride_list`}],methods:[{name:`bulkSetOverrides`,async:!0,parameters:[`tenantId: string`,`overrides: Array<object>`],returnType:`Promise<TenantPermissionOverride[]>`,aiCallable:!1},{name:`copyOverrides`,async:!0,parameters:[`fromTenantId: string`,`toTenantId: string`],returnType:`Promise<TenantPermissionOverride[]>`,aiCallable:!1},{name:`denyPermission`,async:!0,parameters:[`tenantId: string`,`permissionId: string`],returnType:`Promise<TenantPermissionOverride>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<TenantPermissionOverride[]>`,aiCallable:!1},{name:`findDenies`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<TenantPermissionOverride[]>`,aiCallable:!1},{name:`findGrants`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<TenantPermissionOverride[]>`,aiCallable:!1},{name:`findInherits`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<TenantPermissionOverride[]>`,aiCallable:!1},{name:`getDeniedPermissionIds`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getGrantedPermissionIds`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getOverridesByEffect`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<TenantPermissionOverrideResult>`,aiCallable:!1},{name:`getOverridesByEffectBatch`,async:!0,parameters:[`tenantIds: string[]`],returnType:`Promise<Map<string, TenantPermissionOverrideResult>>`,aiCallable:!1},{name:`grantPermission`,async:!0,parameters:[`tenantId: string`,`permissionId: string`],returnType:`Promise<TenantPermissionOverride>`,aiCallable:!1},{name:`hasExplicitEffect`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`inheritPermission`,async:!0,parameters:[`tenantId: string`,`permissionId: string`],returnType:`Promise<TenantPermissionOverride>`,aiCallable:!1},{name:`isDeny`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isGrant`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInherit`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`removeAllOverrides`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<number>`,aiCallable:!1},{name:`removeOverride`,async:!0,parameters:[`tenantId: string`,`permissionId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`setOverride`,async:!0,parameters:[`tenantId: string`,`permissionId: string`,`effect: TenantPermissionEffect`],returnType:`Promise<TenantPermissionOverride>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:Permission`,`@happyvertical/smrt-users:Tenant`],exposed:!0},{id:`@happyvertical/smrt-users:User`,name:`User`,collection:`users`,description:`User represents an authenticated identity in the system.`,fields:[{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`The personal profile linked to this account.`},{name:`email`,type:`text`,required:!1,default:``,description:`The email address used for this account.`},{name:`emailKey`,type:`text`,required:!1,description:`The standardized email address used to recognize this account; maintained automatically.`},{name:`username`,type:`text`,required:!1,description:`Optional username used to sign in; lowercase and globally unique.`},{name:`usernameKey`,type:`text`,required:!1,description:`The standardized username used to recognize this account; maintained automatically.`},{name:`status`,type:`text`,required:!1,description:`Whether this account is active, inactive, pending, or suspended.`},{name:`lastLoginAt`,type:`datetime`,required:!1,description:`When this person most recently signed in.`}],rest:[{method:`GET`,path:`/users`},{method:`GET`,path:`/users/[id]`}],mcp:[{operation:`get`,name:`user_get`},{operation:`list`,name:`user_list`}],cli:[{operation:`get`,name:`user_get`},{operation:`list`,name:`user_list`}],methods:[{name:`findActive`,async:!0,parameters:[],returnType:`Promise<User[]>`,aiCallable:!1},{name:`findByEmail`,async:!0,parameters:[`email: string`],returnType:`Promise<User | null>`,aiCallable:!1},{name:`findByProfile`,async:!0,parameters:[`profileId: string`],returnType:`Promise<User | null>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`status: UserStatus`],returnType:`Promise<User[]>`,aiCallable:!1},{name:`findPending`,async:!0,parameters:[],returnType:`Promise<User[]>`,aiCallable:!1},{name:`getOrCreateForProfile`,async:!0,parameters:[`profileId: string`,`email: string`,`defaults?: Partial<object>`],returnType:`Promise<User>`,aiCallable:!1},{name:`getOrCreateFromOidc`,async:!0,parameters:[`claims: OidcClaims`,`provider: string`,`options?: GetOrCreateFromOidcOptions`],returnType:`Promise<OidcIdentityResult>`,aiCallable:!1},{name:`hasValidEmail`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isActive`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isPending`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isSuspended`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`recordLogin`,async:!1,parameters:[],returnType:`void`,aiCallable:!1},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`],exposed:!0},{id:`@happyvertical/smrt-users:UsersCliAuthApproveLimit`,name:`UsersCliAuthApproveLimit`,collection:`userscliauthapprovelimits`,description:`Private database arbiter shared by every terminal-auth process.`,fields:[{name:`userId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:User`},{name:`attemptCount`,type:`integer`,required:!0,default:0},{name:`windowStartedAt`,type:`datetime`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`releaseAttempt`,async:!0,parameters:[`userId: string`,`windowStartedAt: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`reserveAttempt`,async:!0,parameters:[`input: object`],returnType:`Promise<CliAuthApproveReservation>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:User`],exposed:!1},{id:`@happyvertical/smrt-users:UsersCliAuthRequest`,name:`UsersCliAuthRequest`,collection:`userscliauthrequests`,fields:[{name:`userCode`,type:`text`,required:!0},{name:`deviceCodeHash`,type:`text`,required:!0},{name:`status`,type:`text`,required:!1,enum:[`pending`,`approved`,`consumed`,`expired`]},{name:`userId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:User`},{name:`tenantId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:Tenant`,system:!0},{name:`sessionId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-users:Session`},{name:`expiresAt`,type:`datetime`,required:!1},{name:`approvedAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`approvePendingRequest`,async:!0,parameters:[`input: ApprovePendingCliAuthRequestInput`],returnType:`Promise<ApprovedCliAuthRequestSnapshot | null>`,aiCallable:!1},{name:`consumeApprovedSession`,async:!0,parameters:[`deviceCodeHash: string`],returnType:`Promise<string | null>`,aiCallable:!1},{name:`deleteExpired`,async:!0,parameters:[`options?: object`],returnType:`Promise<number>`,aiCallable:!1},{name:`findByDeviceCodeHash`,async:!0,parameters:[`deviceCodeHash: string`],returnType:`Promise<UsersCliAuthRequest | null>`,aiCallable:!1},{name:`findByUserCode`,async:!0,parameters:[`userCode: string`],returnType:`Promise<UsersCliAuthRequest | null>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:Session`,`@happyvertical/smrt-users:Tenant`,`@happyvertical/smrt-users:User`],exposed:!1},{id:`@happyvertical/smrt-users:UsersLoginAttempt`,name:`UsersLoginAttempt`,collection:`usersloginattempts`,description:`Private database arbiter shared by every process that authenticates.`,fields:[{name:`limiterKey`,type:`text`,required:!0},{name:`scope`,type:`text`,required:!0,enum:[`subject`,`source`]},{name:`attemptCount`,type:`integer`,required:!0,default:0},{name:`windowStartedAt`,type:`datetime`,required:!0},{name:`failureStreak`,type:`integer`,required:!0,default:0},{name:`lockedUntil`,type:`datetime`,required:!1},{name:`lastFailedAt`,type:`datetime`,required:!1},{name:`retainUntil`,type:`datetime`,required:!0}],rest:[],mcp:[],cli:[],methods:[{name:`deleteIdle`,async:!0,parameters:[`options?: object`],returnType:`Promise<number>`,aiCallable:!1},{name:`recordFailure`,async:!0,parameters:[`input: RecordLoginFailureInput`],returnType:`Promise<RecordedLoginFailure>`,aiCallable:!1},{name:`releaseAttempt`,async:!0,parameters:[`limiterKey: string`,`windowStartedAt: string`,`options?: object`],returnType:`Promise<void>`,aiCallable:!1},{name:`reserveAttempt`,async:!0,parameters:[`input: ReserveLoginAttemptInput`],returnType:`Promise<LoginAttemptReservation>`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-users:UsersLoginAuditEvent`,name:`UsersLoginAuditEvent`,collection:`usersloginauditevents`,fields:[{name:`kind`,type:`text`,required:!0},{name:`outcome`,type:`text`,required:!0,enum:[`denied`,`failed`,`succeeded`,`locked`,`source-locked`,`managed`]},{name:`subjectKeyHash`,type:`text`,required:!1},{name:`sourceKeyHash`,type:`text`,required:!1},{name:`retryAfterSeconds`,type:`integer`,required:!1},{name:`occurredAt`,type:`datetime`,required:!0},{name:`metadata`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`deleteOlderThan`,async:!0,parameters:[`maxAgeMs: number`,`options?: object`],returnType:`Promise<number>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`value: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-users:UsersMagicLinkToken`,name:`UsersMagicLinkToken`,collection:`usersmagiclinktokens`,fields:[{name:`nonce`,type:`text`,required:!0,default:``},{name:`email`,type:`text`,required:!1,default:``},{name:`used`,type:`boolean`,required:!1,default:!1},{name:`expiresAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`deleteExpired`,async:!0,parameters:[`options?: object`],returnType:`Promise<number>`,aiCallable:!1},{name:`findByNonce`,async:!0,parameters:[`nonce: string`],returnType:`Promise<UsersMagicLinkToken | null>`,aiCallable:!1},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isValid`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`markUsed`,async:!0,parameters:[`nonce: string`],returnType:`Promise<boolean>`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-users:UsersOAuthAccessTokenRevocation`,name:`UsersOAuthAccessTokenRevocation`,collection:`usersoauthaccesstokenrevocations`,fields:[{name:`jti`,type:`text`,required:!0},{name:`expiresAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`findByJti`,async:!0,parameters:[`jti: string`],returnType:`Promise<UsersOAuthAccessTokenRevocation | null>`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-users:UsersOAuthAuthorization`,name:`UsersOAuthAuthorization`,collection:`usersoauthauthorizations`,description:`A consent decision bound to a server-side session; never exposes its bearer.`,fields:[{name:`subject`,type:`text`,required:!1},{name:`sessionId`,type:`text`,required:!1},{name:`clientId`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`scopes`,type:`text`,required:!1},{name:`permissionCeiling`,type:`text`,required:!1},{name:`resource`,type:`text`,required:!1},{name:`revokedAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`getPermissionCeiling`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getScopes`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-users:UsersOAuthAuthorizationCode`,name:`UsersOAuthAuthorizationCode`,collection:`usersoauthauthorizationcodes`,fields:[{name:`authorizationId`,type:`text`,required:!1},{name:`codeHash`,type:`text`,required:!0},{name:`clientId`,type:`text`,required:!1},{name:`subject`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`claims`,type:`text`,required:!1},{name:`redirectUri`,type:`text`,required:!1},{name:`scopes`,type:`text`,required:!1},{name:`resource`,type:`text`,required:!1},{name:`codeChallenge`,type:`text`,required:!1},{name:`expiresAt`,type:`datetime`,required:!1},{name:`consumedAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`consume`,async:!0,parameters:[`id: string`,`codeHash: string`,`clientId: string`,`redirectUri: string`,`resource: string | null`,`now: Date`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`getClaims`,async:!1,parameters:[],returnType:`OAuthTokenClaims`,aiCallable:!1},{name:`getScopes`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-users:UsersOAuthClient`,name:`UsersOAuthClient`,collection:`usersoauthclients`,fields:[{name:`clientId`,type:`text`,required:!0},{name:`redirectUris`,type:`text`,required:!1},{name:`allowedScopes`,type:`text`,required:!1},{name:`tokenEndpointAuthMethod`,type:`text`,required:!1,default:`none`,enum:[`none`,`client_secret_post`]},{name:`secretHash`,type:`text`,required:!1},{name:`allowedResources`,type:`text`,required:!1},{name:`createdAt`,type:`datetime`,required:!1,system:!0}],rest:[],mcp:[],cli:[],methods:[{name:`findByClientId`,async:!1,parameters:[`clientId: string`],returnType:`Promise<UsersOAuthClient | null>`,aiCallable:!1},{name:`getAllowedResources`,async:!1,parameters:[],returnType:`string[] | undefined`,aiCallable:!1},{name:`getAllowedScopes`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getRedirectUris`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-users:UsersOAuthRefreshFamily`,name:`UsersOAuthRefreshFamily`,collection:`usersoauthrefreshfamilies`,description:`Stable lock row: rotation and revocation always serialize on this family.`,fields:[{name:`authorizationId`,type:`text`,required:!1},{name:`revokedAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`lock`,async:!0,parameters:[`id: string`,`now: Date`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`revoke`,async:!0,parameters:[`id: string`,`now: Date`],returnType:`Promise<void>`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-users:UsersOAuthRefreshGrant`,name:`UsersOAuthRefreshGrant`,collection:`usersoauthrefreshgrants`,fields:[{name:`authorizationId`,type:`text`,required:!1},{name:`tokenHash`,type:`text`,required:!0},{name:`familyId`,type:`text`,required:!1},{name:`clientId`,type:`text`,required:!1},{name:`subject`,type:`text`,required:!1},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`claims`,type:`text`,required:!1},{name:`scopes`,type:`text`,required:!1},{name:`resource`,type:`text`,required:!1},{name:`expiresAt`,type:`datetime`,required:!1},{name:`consumedAt`,type:`datetime`,required:!1},{name:`revokedAt`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`consume`,async:!0,parameters:[`id: string`,`tokenHash: string`,`clientId: string`,`resource: string | null`,`now: Date`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`getClaims`,async:!1,parameters:[],returnType:`OAuthTokenClaims`,aiCallable:!1},{name:`getScopes`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`revokeFamily`,async:!0,parameters:[`familyId: string`,`now: Date`],returnType:`Promise<void>`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-users:UsersPasswordCredential`,name:`UsersPasswordCredential`,collection:`userspasswordcredentials`,fields:[{name:`userId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:User`},{name:`passwordHash`,type:`text`,required:!0},{name:`version`,type:`integer`,required:!0,default:1},{name:`mustChange`,type:`boolean`,required:!0,default:!1},{name:`rotatedAt`,type:`datetime`,required:!1},{name:`rotatedBy`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`deleteByUserId`,async:!0,parameters:[`userId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`deleteIfCurrent`,async:!0,parameters:[`expected: UsersPasswordCredential`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`findByUserId`,async:!0,parameters:[`userId: string`],returnType:`Promise<UsersPasswordCredential | null>`,aiCallable:!1},{name:`insertIfAbsent`,async:!0,parameters:[`userId: string`,`write: PasswordCredentialWrite`],returnType:`Promise<UsersPasswordCredential | null>`,aiCallable:!1},{name:`replaceHashIfUnchanged`,async:!0,parameters:[`userId: string`,`expectedHash: string`,`upgradedHash: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`replaceIfCurrent`,async:!0,parameters:[`expected: UsersPasswordCredential`,`write: Omit<PasswordCredentialWrite, 'mustChange'>`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`upsertForUser`,async:!0,parameters:[`userId: string`,`write: PasswordCredentialWrite`],returnType:`Promise<UsersPasswordCredential>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:User`],exposed:!1},{id:`@happyvertical/smrt-users:UsersPinCredential`,name:`UsersPinCredential`,collection:`userspincredentials`,fields:[{name:`userId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-users:User`},{name:`pinHash`,type:`text`,required:!0},{name:`version`,type:`integer`,required:!0,default:1},{name:`mustReset`,type:`boolean`,required:!0,default:!1},{name:`rotatedAt`,type:`datetime`,required:!1},{name:`rotatedBy`,type:`text`,required:!1}],rest:[],mcp:[],cli:[],methods:[{name:`deleteByUserId`,async:!0,parameters:[`userId: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`findByUserId`,async:!0,parameters:[`userId: string`],returnType:`Promise<UsersPinCredential | null>`,aiCallable:!1},{name:`upsertForUser`,async:!0,parameters:[`userId: string`,`write: PinCredentialWrite`],returnType:`Promise<UsersPinCredential>`,aiCallable:!1}],references:[`@happyvertical/smrt-users:User`],exposed:!1}],dependencies:[`profiles`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3617`,`#3624`,`#3626`],reason:`node:crypto/async_hooks; core migrations`,via:[`@happyvertical/smrt-profiles`,`@happyvertical/smrt-tenancy`]},recipes:[{id:`users.roles-and-permissions`,label:`Roles and permissions`,summary:`Manage tenant roles, memberships, permissions, and controlled sharing.`,synonyms:[`access control`,`rbac`,`sharing`],models:[`@happyvertical/smrt-users:Role`,`@happyvertical/smrt-users:Permission`,`@happyvertical/smrt-users:Membership`,`@happyvertical/smrt-users:ResourceGrant`],nav:[{label:`Roles`,model:`@happyvertical/smrt-users:Role`,icon:`users`,description:`Define tenant permission bundles.`,noun:`role`},{label:`Permissions`,model:`@happyvertical/smrt-users:Permission`,icon:`settings`,description:`Review operations available to roles.`,noun:`permission`}],requires:[],group:{id:`account-access`,label:`Account access`,summary:`Sign in and manage account sessions.`},section:{id:`access-control`,label:`Access control`,icon:`users`,description:`Manage tenant roles, permissions, and reviewed sharing.`},options:{"@happyvertical/smrt-users:ResourceGrant":{exposure:{api:!1,mcp:!1,cli:!1}}},help:{markdown:`## Overview
952
-
953
- Roles and permissions control access to your organization. Denies take precedence, and role changes should be reviewed before they are applied.
954
-
955
- ## Tasks
956
-
957
- - Ask an authorized administrator to create a role and assign only the permissions required for its work.
958
- - Add a member to the correct organization through your approved membership settings and assign a role through {field:Membership.roleId}.
959
- - Use a resource grant only when a record needs a reviewed exception to its ordinary role rules.
960
- `,fieldRefs:[`Membership.roleId`]},demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: node:crypto/async_hooks; core migrations; and its package depends on @happyvertical/smrt-profiles, @happyvertical/smrt-tenancy, which do not build for a browser (#3617, #3624, #3626).`]}},{id:`users.sign-in`,label:`Sign in`,summary:`Access an account through an application-authorized sign-in flow.`,synonyms:[`log in`,`authentication`,`single sign-on`],models:[`@happyvertical/smrt-users:User`,`@happyvertical/smrt-users:Session`],nav:[{label:`Security sessions`,model:`@happyvertical/smrt-users:Session`,icon:`settings`,description:`Review active sessions and sign out unrecognized devices.`,noun:`security session`}],requires:[],group:{id:`account-access`,label:`Account access`,summary:`Sign in and manage account sessions.`},section:{id:`account-security`,label:`Account security`,icon:`settings`,description:`Review account access and active sessions.`},options:{"@happyvertical/smrt-users:Session":{exposure:{api:!1,mcp:!1,cli:!1}}},help:{markdown:`## Overview
961
-
962
- Use your organization’s approved sign-in method. Review your signed-in devices on your account security page.
963
-
964
- ## Tasks
965
-
966
- - Review active sign-in sessions from your account security page and end sessions you no longer recognize.
967
- - Ask an administrator for recovery help if you lose access to every available credential.
968
- `,fieldRefs:[]},surfaces:[{kind:`settings-panel`,export:`@happyvertical/smrt-users/svelte#AccountSecurityPanel`,label:`Account security`}],providers:[{id:`oidc`,kind:`oauth`,options:[`oidc`],required:!1}],demo:{mode:`server`,reasons:[`Needs a server because its package does not build for a browser: node:crypto/async_hooks; core migrations; and its package depends on @happyvertical/smrt-profiles, @happyvertical/smrt-tenancy, which do not build for a browser (#3617, #3624, #3626).`]}}]},{id:`video`,packageName:`@happyvertical/smrt-video`,version:`0.57.9`,description:`Video content management for AI-powered video production in the SMRT ecosystem`,models:[{id:`@happyvertical/smrt-video:Character`,name:`Character`,collection:`characters`,description:`Virtual character for AI-powered video production`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`description`,type:`text`,required:!1},{name:`imageAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`baseMotionAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`voiceProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-voice:VoiceProfile`},{name:`brandingKit`,type:`json`,required:!1},{name:`status`,type:`text`,required:!1,default:`pending`,enum:[`pending`,`ready`]},{name:`performerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-video:Performer`},{name:`defaultSceneId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-video:Scene`},{name:`sceneConfigs`,type:`json`,required:!1},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`}],rest:[{method:`GET`,path:`/characters`},{method:`GET`,path:`/characters/[id]`},{method:`POST`,path:`/characters`},{method:`PATCH`,path:`/characters/[id]`},{method:`DELETE`,path:`/characters/[id]`}],mcp:[{operation:`get`,name:`character_get`},{operation:`list`,name:`character_list`}],cli:[{operation:`addAsset`,name:`character_addAsset`},{operation:`create`,name:`character_create`},{operation:`delete`,name:`character_delete`},{operation:`get`,name:`character_get`},{operation:`getAssetByRole`,name:`character_getAssetByRole`},{operation:`getAssets`,name:`character_getAssets`},{operation:`list`,name:`character_list`},{operation:`removeAsset`,name:`character_removeAsset`},{operation:`update`,name:`character_update`},{operation:`findByPerformer`,name:`charactercollection_findByPerformer`},{operation:`findByTenant`,name:`charactercollection_findByTenant`},{operation:`findGlobal`,name:`charactercollection_findGlobal`},{operation:`findReady`,name:`charactercollection_findReady`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`role?: CharacterAssetRole`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`findByPerformer`,async:!0,parameters:[`performerId: string`],returnType:`Promise<Character[]>`,aiCallable:!1},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<Character[]>`,aiCallable:!1},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<Character[]>`,aiCallable:!1},{name:`findReady`,async:!0,parameters:[],returnType:`Promise<Character[]>`,aiCallable:!1},{name:`getAssetByRole`,async:!0,parameters:[`role: CharacterAssetRole`],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`role?: CharacterAssetRole`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`role?: CharacterAssetRole`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-video:Performer`,`@happyvertical/smrt-video:Scene`,`@happyvertical/smrt-voice:VoiceProfile`],exposed:!0},{id:`@happyvertical/smrt-video:CharacterAsset`,name:`CharacterAsset`,collection:`assets`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accessMode`,type:`text`,required:!1,default:`public`,enum:[`public`,`private`],description:`Whether this record is public to ordinary asset APIs or private.`},{name:`name`,type:`text`,required:!1,description:`A recognizable name for this file or media item.`},{name:`sourceUri`,type:`text`,required:!1,description:`Where the original file is stored or can be retrieved.`},{name:`mimeType`,type:`text`,required:!1,description:`The file format, such as image/jpeg or application/pdf.`},{name:`description`,type:`text`,required:!1,description:`Explain what the file contains and when it should be used.`},{name:`metadata`,type:`text`,required:!1,description:`Additional details recorded while processing this file.`},{name:`version`,type:`integer`,required:!0,default:1,description:`The revision number of this file in its version history.`},{name:`primaryVersionId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The first version of this file, linking its revision history.`},{name:`typeSlug`,type:`text`,required:!1,description:`The category of asset, such as an image, video, or document.`},{name:`statusSlug`,type:`text`,required:!1,description:`The stage of this asset, such as draft, published, or archived.`},{name:`ownerProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`The person or organization responsible for this asset.`},{name:`sourceAssetId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The original asset used to produce this file or variation.`},{name:`folderId`,type:`foreignKey`,required:!1,related:`Folder`,description:`The folder that organizes this file in the asset library.`},{name:`sourceType`,type:`text`,required:!1,description:`The service or source from which this file was obtained.`},{name:`externalId`,type:`text`,required:!1,description:`The reference used to identify this file at its original source.`},{name:`externalRefs`,type:`text`,required:!1,description:`References that connect this file to copies held by other services.`},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0},{name:`characterId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-video:Character`},{name:`role`,type:`text`,required:!1,default:`seed-image`,enum:[`seed-image`,`base-motion`,`logo`]}],rest:[{method:`GET`,path:`/assets`},{method:`GET`,path:`/assets/[id]`},{method:`POST`,path:`/assets`},{method:`PATCH`,path:`/assets/[id]`},{method:`DELETE`,path:`/assets/[id]`}],mcp:[{operation:`get`,name:`characterasset_get`},{operation:`list`,name:`characterasset_list`}],cli:[{operation:`associateWith`,name:`characterasset_associateWith`},{operation:`create`,name:`characterasset_create`},{operation:`delete`,name:`characterasset_delete`},{operation:`get`,name:`characterasset_get`},{operation:`getAssociations`,name:`characterasset_getAssociations`},{operation:`getBySlug`,name:`characterasset_getBySlug`},{operation:`getDerivatives`,name:`characterasset_getDerivatives`},{operation:`getExternalRef`,name:`characterasset_getExternalRef`},{operation:`getExternalRefs`,name:`characterasset_getExternalRefs`},{operation:`getMetadata`,name:`characterasset_getMetadata`},{operation:`getSource`,name:`characterasset_getSource`},{operation:`getStatus`,name:`characterasset_getStatus`},{operation:`getTags`,name:`characterasset_getTags`},{operation:`getType`,name:`characterasset_getType`},{operation:`hasTag`,name:`characterasset_hasTag`},{operation:`list`,name:`characterasset_list`},{operation:`mergeMetadata`,name:`characterasset_mergeMetadata`},{operation:`setExternalRef`,name:`characterasset_setExternalRef`},{operation:`setMetadata`,name:`characterasset_setMetadata`},{operation:`update`,name:`characterasset_update`}],methods:[{name:`associateWith`,async:!0,parameters:[`metaType: string`,`metaId: string`,`role?: any`],returnType:`Promise<AssetAssociation>`,aiCallable:!1},{name:`getAssociations`,async:!0,parameters:[],returnType:`Promise<AssetAssociation[]>`,aiCallable:!1},{name:`getDerivatives`,async:!0,parameters:[],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getExternalRef`,async:!1,parameters:[`provider: string`],returnType:`AssetExternalReference | null`,aiCallable:!1},{name:`getExternalRefs`,async:!1,parameters:[],returnType:`Record<string, AssetExternalReference>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getSlug`,async:!0,parameters:[],returnType:`Promise<string | null | undefined>`,aiCallable:!1},{name:`getSource`,async:!0,parameters:[],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getStatus`,async:!0,parameters:[],returnType:`Promise<AssetStatus | null>`,aiCallable:!1},{name:`getTags`,async:!0,parameters:[],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`getType`,async:!0,parameters:[],returnType:`Promise<AssetType | null>`,aiCallable:!1},{name:`hasTag`,async:!0,parameters:[`tagSlug: string`,`context?: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`mergeMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setExternalRef`,async:!1,parameters:[`provider: string`,`reference: any`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-video:Character`,`Asset`,`Folder`],exposed:!0},{id:`@happyvertical/smrt-video:CharacterOwnedAsset`,name:`CharacterOwnedAsset`,collection:`characterownedassets`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`characterId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-video:Character`},{name:`assetId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-assets:Asset`},{name:`role`,type:`text`,required:!0,default:`seed-image`,enum:[`seed-image`,`base-motion`,`logo`]},{name:`sortOrder`,type:`integer`,required:!0,default:0}],rest:[],mcp:[],cli:[],methods:[{name:`attach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<TItem>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`leftId: string`,`rightIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-video:Character`],exposed:!1},{id:`@happyvertical/smrt-video:CompositeJob`,name:`CompositeJob`,collection:`compositejobs`,description:`Composite job for tracking virtual production compositing`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`characterVideoAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`sceneId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-video:Scene`},{name:`viewpointId`,type:`text`,required:!1},{name:`anchorPointId`,type:`text`,required:!1},{name:`scale`,type:`decimal`,required:!1,default:1},{name:`position`,type:`json`,required:!1},{name:`status`,type:`text`,required:!1,default:`pending`,enum:[`pending`,`removing_bg`,`analyzing_light`,`compositing`,`complete`,`failed`]},{name:`progress`,type:`integer`,required:!1,default:0},{name:`outputAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`errorMessage`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/compositejobs`},{method:`GET`,path:`/compositejobs/[id]`},{method:`POST`,path:`/compositejobs`},{method:`PATCH`,path:`/compositejobs/[id]`}],mcp:[{operation:`get`,name:`compositejob_get`},{operation:`list`,name:`compositejob_list`}],cli:[{operation:`create`,name:`compositejob_create`},{operation:`delete`,name:`compositejob_delete`},{operation:`get`,name:`compositejob_get`},{operation:`list`,name:`compositejob_list`},{operation:`update`,name:`compositejob_update`}],methods:[],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-video:Scene`],exposed:!0},{id:`@happyvertical/smrt-video:Performer`,name:`Performer`,collection:`performers`,description:`The physical likeness/face DNA`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`description`,type:`text`,required:!1},{name:`dna`,type:`json`,required:!1},{name:`referenceAssetIds`,type:`json`,required:!1},{name:`seedImageAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`voiceProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-voice:VoiceProfile`},{name:`status`,type:`text`,required:!1,default:`pending`,enum:[`pending`,`ready`]},{name:`profileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`}],rest:[{method:`GET`,path:`/performers`},{method:`GET`,path:`/performers/[id]`},{method:`POST`,path:`/performers`},{method:`PATCH`,path:`/performers/[id]`},{method:`DELETE`,path:`/performers/[id]`}],mcp:[{operation:`get`,name:`performer_get`},{operation:`list`,name:`performer_list`}],cli:[{operation:`addAsset`,name:`performer_addAsset`},{operation:`create`,name:`performer_create`},{operation:`delete`,name:`performer_delete`},{operation:`get`,name:`performer_get`},{operation:`getAssetByRole`,name:`performer_getAssetByRole`},{operation:`getAssets`,name:`performer_getAssets`},{operation:`list`,name:`performer_list`},{operation:`removeAsset`,name:`performer_removeAsset`},{operation:`update`,name:`performer_update`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`role?: PerformerAssetRole`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`getAssetByRole`,async:!0,parameters:[`role: PerformerAssetRole`],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`role?: PerformerAssetRole`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`role?: PerformerAssetRole`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-voice:VoiceProfile`],exposed:!0},{id:`@happyvertical/smrt-video:PerformerAsset`,name:`PerformerAsset`,collection:`assets`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accessMode`,type:`text`,required:!1,default:`public`,enum:[`public`,`private`],description:`Whether this record is public to ordinary asset APIs or private.`},{name:`name`,type:`text`,required:!1,description:`A recognizable name for this file or media item.`},{name:`sourceUri`,type:`text`,required:!1,description:`Where the original file is stored or can be retrieved.`},{name:`mimeType`,type:`text`,required:!1,description:`The file format, such as image/jpeg or application/pdf.`},{name:`description`,type:`text`,required:!1,description:`Explain what the file contains and when it should be used.`},{name:`metadata`,type:`text`,required:!1,description:`Additional details recorded while processing this file.`},{name:`version`,type:`integer`,required:!0,default:1,description:`The revision number of this file in its version history.`},{name:`primaryVersionId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The first version of this file, linking its revision history.`},{name:`typeSlug`,type:`text`,required:!1,description:`The category of asset, such as an image, video, or document.`},{name:`statusSlug`,type:`text`,required:!1,description:`The stage of this asset, such as draft, published, or archived.`},{name:`ownerProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`The person or organization responsible for this asset.`},{name:`sourceAssetId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The original asset used to produce this file or variation.`},{name:`folderId`,type:`foreignKey`,required:!1,related:`Folder`,description:`The folder that organizes this file in the asset library.`},{name:`sourceType`,type:`text`,required:!1,description:`The service or source from which this file was obtained.`},{name:`externalId`,type:`text`,required:!1,description:`The reference used to identify this file at its original source.`},{name:`externalRefs`,type:`text`,required:!1,description:`References that connect this file to copies held by other services.`},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0},{name:`performerId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-video:Performer`},{name:`role`,type:`text`,required:!1,default:`reference`,enum:[`reference`,`seed`]}],rest:[{method:`GET`,path:`/assets`},{method:`GET`,path:`/assets/[id]`},{method:`POST`,path:`/assets`},{method:`PATCH`,path:`/assets/[id]`},{method:`DELETE`,path:`/assets/[id]`}],mcp:[{operation:`get`,name:`performerasset_get`},{operation:`list`,name:`performerasset_list`}],cli:[{operation:`associateWith`,name:`performerasset_associateWith`},{operation:`create`,name:`performerasset_create`},{operation:`delete`,name:`performerasset_delete`},{operation:`get`,name:`performerasset_get`},{operation:`getAssociations`,name:`performerasset_getAssociations`},{operation:`getBySlug`,name:`performerasset_getBySlug`},{operation:`getDerivatives`,name:`performerasset_getDerivatives`},{operation:`getExternalRef`,name:`performerasset_getExternalRef`},{operation:`getExternalRefs`,name:`performerasset_getExternalRefs`},{operation:`getMetadata`,name:`performerasset_getMetadata`},{operation:`getSource`,name:`performerasset_getSource`},{operation:`getStatus`,name:`performerasset_getStatus`},{operation:`getTags`,name:`performerasset_getTags`},{operation:`getType`,name:`performerasset_getType`},{operation:`hasTag`,name:`performerasset_hasTag`},{operation:`list`,name:`performerasset_list`},{operation:`mergeMetadata`,name:`performerasset_mergeMetadata`},{operation:`setExternalRef`,name:`performerasset_setExternalRef`},{operation:`setMetadata`,name:`performerasset_setMetadata`},{operation:`update`,name:`performerasset_update`}],methods:[{name:`associateWith`,async:!0,parameters:[`metaType: string`,`metaId: string`,`role?: any`],returnType:`Promise<AssetAssociation>`,aiCallable:!1},{name:`getAssociations`,async:!0,parameters:[],returnType:`Promise<AssetAssociation[]>`,aiCallable:!1},{name:`getDerivatives`,async:!0,parameters:[],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getExternalRef`,async:!1,parameters:[`provider: string`],returnType:`AssetExternalReference | null`,aiCallable:!1},{name:`getExternalRefs`,async:!1,parameters:[],returnType:`Record<string, AssetExternalReference>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getSlug`,async:!0,parameters:[],returnType:`Promise<string | null | undefined>`,aiCallable:!1},{name:`getSource`,async:!0,parameters:[],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getStatus`,async:!0,parameters:[],returnType:`Promise<AssetStatus | null>`,aiCallable:!1},{name:`getTags`,async:!0,parameters:[],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`getType`,async:!0,parameters:[],returnType:`Promise<AssetType | null>`,aiCallable:!1},{name:`hasTag`,async:!0,parameters:[`tagSlug: string`,`context?: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`mergeMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setExternalRef`,async:!1,parameters:[`provider: string`,`reference: any`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-video:Performer`,`Asset`,`Folder`],exposed:!0},{id:`@happyvertical/smrt-video:PerformerOwnedAsset`,name:`PerformerOwnedAsset`,collection:`performerownedassets`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`performerId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-video:Performer`},{name:`assetId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-assets:Asset`},{name:`role`,type:`text`,required:!0,default:`reference`,enum:[`reference`,`seed`]},{name:`sortOrder`,type:`integer`,required:!0,default:0}],rest:[],mcp:[],cli:[],methods:[{name:`attach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<TItem>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`leftId: string`,`rightIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-video:Performer`],exposed:!1},{id:`@happyvertical/smrt-video:Scene`,name:`Scene`,collection:`scenes`,description:`Scene for virtual production compositing`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`description`,type:`text`,required:!1},{name:`sourceAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`sourceType`,type:`text`,required:!1,default:`image`,enum:[`image`,`video`,`panorama_360`,`panorama_180`]},{name:`projection`,type:`text`,required:!1,enum:[`equirectangular`,`cubemap`]},{name:`viewpoints`,type:`json`,required:!1},{name:`lightingProfile`,type:`json`,required:!1},{name:`location`,type:`json`,required:!1},{name:`anchorPoints`,type:`json`,required:!1},{name:`status`,type:`text`,required:!1,default:`pending`,enum:[`pending`,`processing`,`ready`,`failed`]}],rest:[{method:`GET`,path:`/scenes`},{method:`GET`,path:`/scenes/[id]`},{method:`POST`,path:`/scenes`},{method:`PATCH`,path:`/scenes/[id]`},{method:`DELETE`,path:`/scenes/[id]`}],mcp:[{operation:`get`,name:`scene_get`},{operation:`list`,name:`scene_list`}],cli:[{operation:`addAsset`,name:`scene_addAsset`},{operation:`create`,name:`scene_create`},{operation:`delete`,name:`scene_delete`},{operation:`get`,name:`scene_get`},{operation:`getAssetByRole`,name:`scene_getAssetByRole`},{operation:`getAssets`,name:`scene_getAssets`},{operation:`list`,name:`scene_list`},{operation:`removeAsset`,name:`scene_removeAsset`},{operation:`update`,name:`scene_update`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`role?: SceneAssetRole`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`getAssetByRole`,async:!0,parameters:[`role: SceneAssetRole`],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`role?: SceneAssetRole`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`role?: SceneAssetRole`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`],exposed:!0},{id:`@happyvertical/smrt-video:SceneAsset`,name:`SceneAsset`,collection:`assets`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accessMode`,type:`text`,required:!1,default:`public`,enum:[`public`,`private`],description:`Whether this record is public to ordinary asset APIs or private.`},{name:`name`,type:`text`,required:!1,description:`A recognizable name for this file or media item.`},{name:`sourceUri`,type:`text`,required:!1,description:`Where the original file is stored or can be retrieved.`},{name:`mimeType`,type:`text`,required:!1,description:`The file format, such as image/jpeg or application/pdf.`},{name:`description`,type:`text`,required:!1,description:`Explain what the file contains and when it should be used.`},{name:`metadata`,type:`text`,required:!1,description:`Additional details recorded while processing this file.`},{name:`version`,type:`integer`,required:!0,default:1,description:`The revision number of this file in its version history.`},{name:`primaryVersionId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The first version of this file, linking its revision history.`},{name:`typeSlug`,type:`text`,required:!1,description:`The category of asset, such as an image, video, or document.`},{name:`statusSlug`,type:`text`,required:!1,description:`The stage of this asset, such as draft, published, or archived.`},{name:`ownerProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`The person or organization responsible for this asset.`},{name:`sourceAssetId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The original asset used to produce this file or variation.`},{name:`folderId`,type:`foreignKey`,required:!1,related:`Folder`,description:`The folder that organizes this file in the asset library.`},{name:`sourceType`,type:`text`,required:!1,description:`The service or source from which this file was obtained.`},{name:`externalId`,type:`text`,required:!1,description:`The reference used to identify this file at its original source.`},{name:`externalRefs`,type:`text`,required:!1,description:`References that connect this file to copies held by other services.`},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0},{name:`sceneId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-video:Scene`},{name:`role`,type:`text`,required:!1,default:`source`,enum:[`source`,`viewpoint-extract`,`env-map`]}],rest:[{method:`GET`,path:`/assets`},{method:`GET`,path:`/assets/[id]`},{method:`POST`,path:`/assets`},{method:`PATCH`,path:`/assets/[id]`},{method:`DELETE`,path:`/assets/[id]`}],mcp:[{operation:`get`,name:`sceneasset_get`},{operation:`list`,name:`sceneasset_list`}],cli:[{operation:`associateWith`,name:`sceneasset_associateWith`},{operation:`create`,name:`sceneasset_create`},{operation:`delete`,name:`sceneasset_delete`},{operation:`get`,name:`sceneasset_get`},{operation:`getAssociations`,name:`sceneasset_getAssociations`},{operation:`getBySlug`,name:`sceneasset_getBySlug`},{operation:`getDerivatives`,name:`sceneasset_getDerivatives`},{operation:`getExternalRef`,name:`sceneasset_getExternalRef`},{operation:`getExternalRefs`,name:`sceneasset_getExternalRefs`},{operation:`getMetadata`,name:`sceneasset_getMetadata`},{operation:`getSource`,name:`sceneasset_getSource`},{operation:`getStatus`,name:`sceneasset_getStatus`},{operation:`getTags`,name:`sceneasset_getTags`},{operation:`getType`,name:`sceneasset_getType`},{operation:`hasTag`,name:`sceneasset_hasTag`},{operation:`list`,name:`sceneasset_list`},{operation:`mergeMetadata`,name:`sceneasset_mergeMetadata`},{operation:`setExternalRef`,name:`sceneasset_setExternalRef`},{operation:`setMetadata`,name:`sceneasset_setMetadata`},{operation:`update`,name:`sceneasset_update`}],methods:[{name:`associateWith`,async:!0,parameters:[`metaType: string`,`metaId: string`,`role?: any`],returnType:`Promise<AssetAssociation>`,aiCallable:!1},{name:`getAssociations`,async:!0,parameters:[],returnType:`Promise<AssetAssociation[]>`,aiCallable:!1},{name:`getDerivatives`,async:!0,parameters:[],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getExternalRef`,async:!1,parameters:[`provider: string`],returnType:`AssetExternalReference | null`,aiCallable:!1},{name:`getExternalRefs`,async:!1,parameters:[],returnType:`Record<string, AssetExternalReference>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getSlug`,async:!0,parameters:[],returnType:`Promise<string | null | undefined>`,aiCallable:!1},{name:`getSource`,async:!0,parameters:[],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getStatus`,async:!0,parameters:[],returnType:`Promise<AssetStatus | null>`,aiCallable:!1},{name:`getTags`,async:!0,parameters:[],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`getType`,async:!0,parameters:[],returnType:`Promise<AssetType | null>`,aiCallable:!1},{name:`hasTag`,async:!0,parameters:[`tagSlug: string`,`context?: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`mergeMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setExternalRef`,async:!1,parameters:[`provider: string`,`reference: any`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-video:Scene`,`Asset`,`Folder`],exposed:!0},{id:`@happyvertical/smrt-video:SceneOwnedAsset`,name:`SceneOwnedAsset`,collection:`sceneownedassets`,fields:[{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`sceneId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-video:Scene`},{name:`assetId`,type:`crossPackageRef`,required:!0,related:`@happyvertical/smrt-assets:Asset`},{name:`role`,type:`text`,required:!0,default:`source`,enum:[`source`,`viewpoint-extract`,`env-map`]},{name:`sortOrder`,type:`integer`,required:!0,default:0}],rest:[],mcp:[],cli:[],methods:[{name:`attach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionAttachOptions`],returnType:`Promise<TItem>`,aiCallable:!1},{name:`byLeft`,async:!0,parameters:[`leftId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`byRight`,async:!0,parameters:[`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<TItem[]>`,aiCallable:!1},{name:`detach`,async:!0,parameters:[`leftId: string`,`rightId: string`,`opts?: JunctionFilterOptions`],returnType:`Promise<void>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`leftId: string`,`rightIds: string[]`,`opts?: JunctionAttachOptions`],returnType:`Promise<void>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-video:Scene`],exposed:!1},{id:`@happyvertical/smrt-video:VideoComposition`,name:`VideoComposition`,collection:`contents`,description:`Publishable video composition`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`type`,type:`text`,required:!1},{name:`variant`,type:`text`,required:!1},{name:`fileKey`,type:`text`,required:!1},{name:`author`,type:`text`,required:!1},{name:`name`,type:`text`,required:!0,default:``},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`body`,type:`text`,required:!1},{name:`bodyFormat`,type:`text`,required:!1,enum:[`markdown`,`html`]},{name:`publish_date`,type:`datetime`,required:!1},{name:`url`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`original_url`,type:`text`,required:!1},{name:`language`,type:`text`,required:!1},{name:`tags`,type:`json`,required:!1},{name:`category`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`published`,`draft`,`review`,`archived`,`deleted`]},{name:`state`,type:`text`,required:!1,default:`active`,enum:[`deprecated`,`active`,`highlighted`]},{name:`metadata`,type:`json`,required:!1},{name:`thumbnailAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`fps`,type:`integer`,required:!1,default:30},{name:`width`,type:`integer`,required:!1,default:1920},{name:`height`,type:`integer`,required:!1,default:1080},{name:`durationInFrames`,type:`integer`,required:!1,default:0},{name:`renderStatus`,type:`text`,required:!1,default:`draft`,enum:[`draft`,`rendering`,`ready`,`failed`]},{name:`renderProgress`,type:`integer`,required:!1,default:0}],rest:[{method:`GET`,path:`/contents`},{method:`GET`,path:`/contents/[id]`},{method:`POST`,path:`/contents`},{method:`PATCH`,path:`/contents/[id]`},{method:`DELETE`,path:`/contents/[id]`}],mcp:[{operation:`get`,name:`videocomposition_get`},{operation:`list`,name:`videocomposition_list`}],cli:[{operation:`addAsset`,name:`videocomposition_addAsset`},{operation:`addFact`,name:`videocomposition_addFact`},{operation:`addReference`,name:`videocomposition_addReference`},{operation:`browseFacts`,name:`videocomposition_browseFacts`},{operation:`create`,name:`videocomposition_create`},{operation:`createVersion`,name:`videocomposition_createVersion`},{operation:`delete`,name:`videocomposition_delete`},{operation:`evaluateReviewProfile`,name:`videocomposition_evaluateReviewProfile`},{operation:`evaluateReviewProfileAction`,name:`videocomposition_evaluateReviewProfileAction`},{operation:`generateThumbnail`,name:`videocomposition_generateThumbnail`},{operation:`get`,name:`videocomposition_get`},{operation:`getAncestorPaths`,name:`videocomposition_getAncestorPaths`},{operation:`getAssetByRole`,name:`videocomposition_getAssetByRole`},{operation:`getAssetIds`,name:`videocomposition_getAssetIds`},{operation:`getAssets`,name:`videocomposition_getAssets`},{operation:`getCategorySegments`,name:`videocomposition_getCategorySegments`},{operation:`getCorrections`,name:`videocomposition_getCorrections`},{operation:`getFactAuditState`,name:`videocomposition_getFactAuditState`},{operation:`getFactAuditStateAction`,name:`videocomposition_getFactAuditStateAction`},{operation:`getFactLinks`,name:`videocomposition_getFactLinks`},{operation:`getFacts`,name:`videocomposition_getFacts`},{operation:`getFactsState`,name:`videocomposition_getFactsState`},{operation:`getGovernanceState`,name:`videocomposition_getGovernanceState`},{operation:`getGovernanceStateAction`,name:`videocomposition_getGovernanceStateAction`},{operation:`getMetadata`,name:`videocomposition_getMetadata`},{operation:`getParentCategory`,name:`videocomposition_getParentCategory`},{operation:`getPublishedTransparency`,name:`videocomposition_getPublishedTransparency`},{operation:`getPublishedTransparencyAction`,name:`videocomposition_getPublishedTransparencyAction`},{operation:`getReferenceDrift`,name:`videocomposition_getReferenceDrift`},{operation:`getReferenceEdges`,name:`videocomposition_getReferenceEdges`},{operation:`getReferences`,name:`videocomposition_getReferences`},{operation:`getReviewRequirements`,name:`videocomposition_getReviewRequirements`},{operation:`getReviews`,name:`videocomposition_getReviews`},{operation:`getRootCategory`,name:`videocomposition_getRootCategory`},{operation:`getThumbnail`,name:`videocomposition_getThumbnail`},{operation:`getVersions`,name:`videocomposition_getVersions`},{operation:`isGoverned`,name:`videocomposition_isGoverned`},{operation:`isInCategory`,name:`videocomposition_isInCategory`},{operation:`isReadyForReviewProfile`,name:`videocomposition_isReadyForReviewProfile`},{operation:`issueCorrection`,name:`videocomposition_issueCorrection`},{operation:`issueCorrectionAction`,name:`videocomposition_issueCorrectionAction`},{operation:`list`,name:`videocomposition_list`},{operation:`listCorrections`,name:`videocomposition_listCorrections`},{operation:`listReviewProfilesAction`,name:`videocomposition_listReviewProfilesAction`},{operation:`listReviews`,name:`videocomposition_listReviews`},{operation:`listVersions`,name:`videocomposition_listVersions`},{operation:`loadReferences`,name:`videocomposition_loadReferences`},{operation:`mutateVersionAction`,name:`videocomposition_mutateVersionAction`},{operation:`previewTransparency`,name:`videocomposition_previewTransparency`},{operation:`previewTransparencyAction`,name:`videocomposition_previewTransparencyAction`},{operation:`recheckFactClaims`,name:`videocomposition_recheckFactClaims`},{operation:`recheckFactClaimsAction`,name:`videocomposition_recheckFactClaimsAction`},{operation:`removeAsset`,name:`videocomposition_removeAsset`},{operation:`removeFact`,name:`videocomposition_removeFact`},{operation:`removeReference`,name:`videocomposition_removeReference`},{operation:`repairFactAudit`,name:`videocomposition_repairFactAudit`},{operation:`repairFactAuditAction`,name:`videocomposition_repairFactAuditAction`},{operation:`repairFactEvidence`,name:`videocomposition_repairFactEvidence`},{operation:`repairFactEvidenceAction`,name:`videocomposition_repairFactEvidenceAction`},{operation:`resolveGovernance`,name:`videocomposition_resolveGovernance`},{operation:`restoreFromVersion`,name:`videocomposition_restoreFromVersion`},{operation:`reviewFacts`,name:`videocomposition_reviewFacts`},{operation:`reviewSafety`,name:`videocomposition_reviewSafety`},{operation:`runReview`,name:`videocomposition_runReview`},{operation:`runReviewAction`,name:`videocomposition_runReviewAction`},{operation:`setMetadata`,name:`videocomposition_setMetadata`},{operation:`setThumbnail`,name:`videocomposition_setThumbnail`},{operation:`syncFacts`,name:`videocomposition_syncFacts`},{operation:`syncFactsState`,name:`videocomposition_syncFactsState`},{operation:`update`,name:`videocomposition_update`},{operation:`updateFactEvidenceStatus`,name:`videocomposition_updateFactEvidenceStatus`},{operation:`updateFactEvidenceStatusAction`,name:`videocomposition_updateFactEvidenceStatusAction`},{operation:`updateMetadata`,name:`videocomposition_updateMetadata`},{operation:`findByRenderStatus`,name:`videocompositioncollection_findByRenderStatus`},{operation:`findReady`,name:`videocompositioncollection_findReady`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`addFact`,async:!0,parameters:[`fact: Fact | string`,`relationship?: FactContentRelationship`,`metadata?: Record<string, unknown>`],returnType:`any`,aiCallable:!1},{name:`addReference`,async:!0,parameters:[`content: Content | string`,`options?: object`],returnType:`any`,aiCallable:!1},{name:`browseFacts`,async:!0,parameters:[`query?: any`,`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`createVersion`,async:!0,parameters:[`options?: CreateContentVersionOptions`],returnType:`any`,aiCallable:!1},{name:`evaluateReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<ContentReviewProfileEvaluation>`,aiCallable:!1},{name:`evaluateReviewProfileAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`findByRenderStatus`,async:!0,parameters:[`renderStatus: RenderStatus`],returnType:`Promise<VideoComposition[]>`,aiCallable:!1},{name:`findReady`,async:!0,parameters:[],returnType:`Promise<VideoComposition[]>`,aiCallable:!1},{name:`generateThumbnail`,async:!0,parameters:[`options: ThumbnailOptions`],returnType:`Promise<Image>`,aiCallable:!1},{name:`getAncestorPaths`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getAssetByRole`,async:!0,parameters:[`role: VideoCompositionAssetRole`],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getAssetIds`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getCategorySegments`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactAuditState`,async:!0,parameters:[],returnType:`Promise<FactAuditState>`,aiCallable:!1},{name:`getFactAuditStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactLinks`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getFacts`,async:!0,parameters:[`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getGovernanceState`,async:!0,parameters:[],returnType:`Promise<ContentGovernanceState>`,aiCallable:!1},{name:`getGovernanceStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getParentCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getPublishedTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getPublishedTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReferenceDrift`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferenceEdges`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReviewRequirements`,async:!0,parameters:[`profileKey: string`,`governance?: ResolvedContentGovernance`],returnType:`any`,aiCallable:!1},{name:`getReviews`,async:!0,parameters:[`kind?: any`],returnType:`any`,aiCallable:!1},{name:`getRootCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getThumbnail`,async:!0,parameters:[],returnType:`Promise<Image | null>`,aiCallable:!1},{name:`getVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isGoverned`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInCategory`,async:!1,parameters:[`categoryPath: string`,`includeChildren?: any`],returnType:`boolean`,aiCallable:!1},{name:`isReadyForReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`issueCorrection`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`issueCorrectionAction`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`listCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviewProfilesAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviews`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`listVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`loadReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`mutateVersionAction`,async:!0,parameters:[`options?: any`],returnType:`any`,aiCallable:!1},{name:`previewTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`previewTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`recheckFactClaims`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`recheckFactClaimsAction`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeFact`,async:!0,parameters:[`factId: string`,`relationship?: FactContentRelationship`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeReference`,async:!0,parameters:[`targetId: string`],returnType:`any`,aiCallable:!1},{name:`repairFactAudit`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactAuditAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidence`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidenceAction`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`resolveGovernance`,async:!0,parameters:[],returnType:`Promise<ResolvedContentGovernance>`,aiCallable:!1},{name:`restoreFromVersion`,async:!0,parameters:[`versionNumber: number`],returnType:`any`,aiCallable:!1},{name:`reviewFacts`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`reviewSafety`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`runReview`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`runReviewAction`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SmrtSaveOptions`],returnType:`any`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown> | null | undefined`],returnType:`void`,aiCallable:!1},{name:`setThumbnail`,async:!0,parameters:[`image: Image`],returnType:`Promise<void>`,aiCallable:!1},{name:`syncFacts`,async:!0,parameters:[`factIds: string[]`,`relationship?: FactContentRelationship`],returnType:`Promise<object>`,aiCallable:!1},{name:`syncFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatus`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatusAction`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`patch: Partial<Record<string, unknown>>`],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`],exposed:!0},{id:`@happyvertical/smrt-video:VideoCompositionAsset`,name:`VideoCompositionAsset`,collection:`assets`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accessMode`,type:`text`,required:!1,default:`public`,enum:[`public`,`private`],description:`Whether this record is public to ordinary asset APIs or private.`},{name:`name`,type:`text`,required:!1,description:`A recognizable name for this file or media item.`},{name:`sourceUri`,type:`text`,required:!1,description:`Where the original file is stored or can be retrieved.`},{name:`mimeType`,type:`text`,required:!1,description:`The file format, such as image/jpeg or application/pdf.`},{name:`description`,type:`text`,required:!1,description:`Explain what the file contains and when it should be used.`},{name:`metadata`,type:`text`,required:!1,description:`Additional details recorded while processing this file.`},{name:`version`,type:`integer`,required:!0,default:1,description:`The revision number of this file in its version history.`},{name:`primaryVersionId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The first version of this file, linking its revision history.`},{name:`typeSlug`,type:`text`,required:!1,description:`The category of asset, such as an image, video, or document.`},{name:`statusSlug`,type:`text`,required:!1,description:`The stage of this asset, such as draft, published, or archived.`},{name:`ownerProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`The person or organization responsible for this asset.`},{name:`sourceAssetId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The original asset used to produce this file or variation.`},{name:`folderId`,type:`foreignKey`,required:!1,related:`Folder`,description:`The folder that organizes this file in the asset library.`},{name:`sourceType`,type:`text`,required:!1,description:`The service or source from which this file was obtained.`},{name:`externalId`,type:`text`,required:!1,description:`The reference used to identify this file at its original source.`},{name:`externalRefs`,type:`text`,required:!1,description:`References that connect this file to copies held by other services.`},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0},{name:`videoCompositionId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-video:VideoComposition`},{name:`role`,type:`text`,required:!1,default:`video`,enum:[`video`,`audio`,`thumbnail`]}],rest:[{method:`GET`,path:`/assets`},{method:`GET`,path:`/assets/[id]`},{method:`POST`,path:`/assets`},{method:`PATCH`,path:`/assets/[id]`},{method:`DELETE`,path:`/assets/[id]`}],mcp:[{operation:`get`,name:`videocompositionasset_get`},{operation:`list`,name:`videocompositionasset_list`}],cli:[{operation:`associateWith`,name:`videocompositionasset_associateWith`},{operation:`create`,name:`videocompositionasset_create`},{operation:`delete`,name:`videocompositionasset_delete`},{operation:`get`,name:`videocompositionasset_get`},{operation:`getAssociations`,name:`videocompositionasset_getAssociations`},{operation:`getBySlug`,name:`videocompositionasset_getBySlug`},{operation:`getDerivatives`,name:`videocompositionasset_getDerivatives`},{operation:`getExternalRef`,name:`videocompositionasset_getExternalRef`},{operation:`getExternalRefs`,name:`videocompositionasset_getExternalRefs`},{operation:`getMetadata`,name:`videocompositionasset_getMetadata`},{operation:`getSource`,name:`videocompositionasset_getSource`},{operation:`getStatus`,name:`videocompositionasset_getStatus`},{operation:`getTags`,name:`videocompositionasset_getTags`},{operation:`getType`,name:`videocompositionasset_getType`},{operation:`hasTag`,name:`videocompositionasset_hasTag`},{operation:`list`,name:`videocompositionasset_list`},{operation:`mergeMetadata`,name:`videocompositionasset_mergeMetadata`},{operation:`setExternalRef`,name:`videocompositionasset_setExternalRef`},{operation:`setMetadata`,name:`videocompositionasset_setMetadata`},{operation:`update`,name:`videocompositionasset_update`}],methods:[{name:`associateWith`,async:!0,parameters:[`metaType: string`,`metaId: string`,`role?: any`],returnType:`Promise<AssetAssociation>`,aiCallable:!1},{name:`getAssociations`,async:!0,parameters:[],returnType:`Promise<AssetAssociation[]>`,aiCallable:!1},{name:`getDerivatives`,async:!0,parameters:[],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getExternalRef`,async:!1,parameters:[`provider: string`],returnType:`AssetExternalReference | null`,aiCallable:!1},{name:`getExternalRefs`,async:!1,parameters:[],returnType:`Record<string, AssetExternalReference>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getSlug`,async:!0,parameters:[],returnType:`Promise<string | null | undefined>`,aiCallable:!1},{name:`getSource`,async:!0,parameters:[],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getStatus`,async:!0,parameters:[],returnType:`Promise<AssetStatus | null>`,aiCallable:!1},{name:`getTags`,async:!0,parameters:[],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`getType`,async:!0,parameters:[],returnType:`Promise<AssetType | null>`,aiCallable:!1},{name:`hasTag`,async:!0,parameters:[`tagSlug: string`,`context?: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`mergeMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setExternalRef`,async:!1,parameters:[`provider: string`,`reference: any`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-video:VideoComposition`,`Asset`,`Folder`],exposed:!0},{id:`@happyvertical/smrt-video:VideoSequence`,name:`VideoSequence`,collection:`contents`,description:`Thematic section of a video composition`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`type`,type:`text`,required:!1},{name:`variant`,type:`text`,required:!1},{name:`fileKey`,type:`text`,required:!1},{name:`author`,type:`text`,required:!1},{name:`name`,type:`text`,required:!0,default:``},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`body`,type:`text`,required:!1},{name:`bodyFormat`,type:`text`,required:!1,enum:[`markdown`,`html`]},{name:`publish_date`,type:`datetime`,required:!1},{name:`url`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`original_url`,type:`text`,required:!1},{name:`language`,type:`text`,required:!1},{name:`tags`,type:`json`,required:!1},{name:`category`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`published`,`draft`,`review`,`archived`,`deleted`]},{name:`state`,type:`text`,required:!1,default:`active`,enum:[`deprecated`,`active`,`highlighted`]},{name:`metadata`,type:`json`,required:!1},{name:`thumbnailAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`compositionId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-video:VideoComposition`},{name:`position`,type:`integer`,required:!1,default:0},{name:`durationInFrames`,type:`integer`,required:!1,default:0},{name:`transitionType`,type:`text`,required:!1,default:`none`,enum:[`none`,`fade`,`slide`,`wipe`]},{name:`transitionDurationFrames`,type:`integer`,required:!1,default:0}],rest:[{method:`GET`,path:`/contents`},{method:`GET`,path:`/contents/[id]`},{method:`POST`,path:`/contents`},{method:`PATCH`,path:`/contents/[id]`},{method:`DELETE`,path:`/contents/[id]`}],mcp:[{operation:`get`,name:`videosequence_get`},{operation:`list`,name:`videosequence_list`}],cli:[{operation:`addAsset`,name:`videosequence_addAsset`},{operation:`addFact`,name:`videosequence_addFact`},{operation:`addReference`,name:`videosequence_addReference`},{operation:`browseFacts`,name:`videosequence_browseFacts`},{operation:`create`,name:`videosequence_create`},{operation:`createVersion`,name:`videosequence_createVersion`},{operation:`delete`,name:`videosequence_delete`},{operation:`evaluateReviewProfile`,name:`videosequence_evaluateReviewProfile`},{operation:`evaluateReviewProfileAction`,name:`videosequence_evaluateReviewProfileAction`},{operation:`generateThumbnail`,name:`videosequence_generateThumbnail`},{operation:`get`,name:`videosequence_get`},{operation:`getAncestorPaths`,name:`videosequence_getAncestorPaths`},{operation:`getAssetByRole`,name:`videosequence_getAssetByRole`},{operation:`getAssetIds`,name:`videosequence_getAssetIds`},{operation:`getAssets`,name:`videosequence_getAssets`},{operation:`getCategorySegments`,name:`videosequence_getCategorySegments`},{operation:`getCorrections`,name:`videosequence_getCorrections`},{operation:`getFactAuditState`,name:`videosequence_getFactAuditState`},{operation:`getFactAuditStateAction`,name:`videosequence_getFactAuditStateAction`},{operation:`getFactLinks`,name:`videosequence_getFactLinks`},{operation:`getFacts`,name:`videosequence_getFacts`},{operation:`getFactsState`,name:`videosequence_getFactsState`},{operation:`getGovernanceState`,name:`videosequence_getGovernanceState`},{operation:`getGovernanceStateAction`,name:`videosequence_getGovernanceStateAction`},{operation:`getMetadata`,name:`videosequence_getMetadata`},{operation:`getParentCategory`,name:`videosequence_getParentCategory`},{operation:`getPublishedTransparency`,name:`videosequence_getPublishedTransparency`},{operation:`getPublishedTransparencyAction`,name:`videosequence_getPublishedTransparencyAction`},{operation:`getReferenceDrift`,name:`videosequence_getReferenceDrift`},{operation:`getReferenceEdges`,name:`videosequence_getReferenceEdges`},{operation:`getReferences`,name:`videosequence_getReferences`},{operation:`getReviewRequirements`,name:`videosequence_getReviewRequirements`},{operation:`getReviews`,name:`videosequence_getReviews`},{operation:`getRootCategory`,name:`videosequence_getRootCategory`},{operation:`getThumbnail`,name:`videosequence_getThumbnail`},{operation:`getVersions`,name:`videosequence_getVersions`},{operation:`isGoverned`,name:`videosequence_isGoverned`},{operation:`isInCategory`,name:`videosequence_isInCategory`},{operation:`isReadyForReviewProfile`,name:`videosequence_isReadyForReviewProfile`},{operation:`issueCorrection`,name:`videosequence_issueCorrection`},{operation:`issueCorrectionAction`,name:`videosequence_issueCorrectionAction`},{operation:`list`,name:`videosequence_list`},{operation:`listCorrections`,name:`videosequence_listCorrections`},{operation:`listReviewProfilesAction`,name:`videosequence_listReviewProfilesAction`},{operation:`listReviews`,name:`videosequence_listReviews`},{operation:`listVersions`,name:`videosequence_listVersions`},{operation:`loadReferences`,name:`videosequence_loadReferences`},{operation:`mutateVersionAction`,name:`videosequence_mutateVersionAction`},{operation:`previewTransparency`,name:`videosequence_previewTransparency`},{operation:`previewTransparencyAction`,name:`videosequence_previewTransparencyAction`},{operation:`recheckFactClaims`,name:`videosequence_recheckFactClaims`},{operation:`recheckFactClaimsAction`,name:`videosequence_recheckFactClaimsAction`},{operation:`removeAsset`,name:`videosequence_removeAsset`},{operation:`removeFact`,name:`videosequence_removeFact`},{operation:`removeReference`,name:`videosequence_removeReference`},{operation:`repairFactAudit`,name:`videosequence_repairFactAudit`},{operation:`repairFactAuditAction`,name:`videosequence_repairFactAuditAction`},{operation:`repairFactEvidence`,name:`videosequence_repairFactEvidence`},{operation:`repairFactEvidenceAction`,name:`videosequence_repairFactEvidenceAction`},{operation:`resolveGovernance`,name:`videosequence_resolveGovernance`},{operation:`restoreFromVersion`,name:`videosequence_restoreFromVersion`},{operation:`reviewFacts`,name:`videosequence_reviewFacts`},{operation:`reviewSafety`,name:`videosequence_reviewSafety`},{operation:`runReview`,name:`videosequence_runReview`},{operation:`runReviewAction`,name:`videosequence_runReviewAction`},{operation:`setMetadata`,name:`videosequence_setMetadata`},{operation:`setThumbnail`,name:`videosequence_setThumbnail`},{operation:`syncFacts`,name:`videosequence_syncFacts`},{operation:`syncFactsState`,name:`videosequence_syncFactsState`},{operation:`update`,name:`videosequence_update`},{operation:`updateFactEvidenceStatus`,name:`videosequence_updateFactEvidenceStatus`},{operation:`updateFactEvidenceStatusAction`,name:`videosequence_updateFactEvidenceStatusAction`},{operation:`updateMetadata`,name:`videosequence_updateMetadata`},{operation:`findByComposition`,name:`videosequencecollection_findByComposition`},{operation:`findStandalone`,name:`videosequencecollection_findStandalone`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`addFact`,async:!0,parameters:[`fact: Fact | string`,`relationship?: FactContentRelationship`,`metadata?: Record<string, unknown>`],returnType:`any`,aiCallable:!1},{name:`addReference`,async:!0,parameters:[`content: Content | string`,`options?: object`],returnType:`any`,aiCallable:!1},{name:`browseFacts`,async:!0,parameters:[`query?: any`,`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`createVersion`,async:!0,parameters:[`options?: CreateContentVersionOptions`],returnType:`any`,aiCallable:!1},{name:`evaluateReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<ContentReviewProfileEvaluation>`,aiCallable:!1},{name:`evaluateReviewProfileAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`findByComposition`,async:!0,parameters:[`compositionId: string`],returnType:`Promise<VideoSequence[]>`,aiCallable:!1},{name:`findStandalone`,async:!0,parameters:[],returnType:`Promise<VideoSequence[]>`,aiCallable:!1},{name:`generateThumbnail`,async:!0,parameters:[`options: ThumbnailOptions`],returnType:`Promise<Image>`,aiCallable:!1},{name:`getAncestorPaths`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getAssetByRole`,async:!0,parameters:[`role: VideoSequenceAssetRole`],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getAssetIds`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getCategorySegments`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactAuditState`,async:!0,parameters:[],returnType:`Promise<FactAuditState>`,aiCallable:!1},{name:`getFactAuditStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactLinks`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getFacts`,async:!0,parameters:[`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getGovernanceState`,async:!0,parameters:[],returnType:`Promise<ContentGovernanceState>`,aiCallable:!1},{name:`getGovernanceStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getParentCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getPublishedTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getPublishedTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReferenceDrift`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferenceEdges`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReviewRequirements`,async:!0,parameters:[`profileKey: string`,`governance?: ResolvedContentGovernance`],returnType:`any`,aiCallable:!1},{name:`getReviews`,async:!0,parameters:[`kind?: any`],returnType:`any`,aiCallable:!1},{name:`getRootCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getThumbnail`,async:!0,parameters:[],returnType:`Promise<Image | null>`,aiCallable:!1},{name:`getVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isGoverned`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInCategory`,async:!1,parameters:[`categoryPath: string`,`includeChildren?: any`],returnType:`boolean`,aiCallable:!1},{name:`isReadyForReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`issueCorrection`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`issueCorrectionAction`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`listCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviewProfilesAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviews`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`listVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`loadReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`mutateVersionAction`,async:!0,parameters:[`options?: any`],returnType:`any`,aiCallable:!1},{name:`previewTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`previewTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`recheckFactClaims`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`recheckFactClaimsAction`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeFact`,async:!0,parameters:[`factId: string`,`relationship?: FactContentRelationship`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeReference`,async:!0,parameters:[`targetId: string`],returnType:`any`,aiCallable:!1},{name:`repairFactAudit`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactAuditAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidence`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidenceAction`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`resolveGovernance`,async:!0,parameters:[],returnType:`Promise<ResolvedContentGovernance>`,aiCallable:!1},{name:`restoreFromVersion`,async:!0,parameters:[`versionNumber: number`],returnType:`any`,aiCallable:!1},{name:`reviewFacts`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`reviewSafety`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`runReview`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`runReviewAction`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SmrtSaveOptions`],returnType:`any`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown> | null | undefined`],returnType:`void`,aiCallable:!1},{name:`setThumbnail`,async:!0,parameters:[`image: Image`],returnType:`Promise<void>`,aiCallable:!1},{name:`syncFacts`,async:!0,parameters:[`factIds: string[]`,`relationship?: FactContentRelationship`],returnType:`Promise<object>`,aiCallable:!1},{name:`syncFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatus`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatusAction`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`patch: Partial<Record<string, unknown>>`],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-video:VideoComposition`],exposed:!0},{id:`@happyvertical/smrt-video:VideoSequenceAsset`,name:`VideoSequenceAsset`,collection:`assets`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accessMode`,type:`text`,required:!1,default:`public`,enum:[`public`,`private`],description:`Whether this record is public to ordinary asset APIs or private.`},{name:`name`,type:`text`,required:!1,description:`A recognizable name for this file or media item.`},{name:`sourceUri`,type:`text`,required:!1,description:`Where the original file is stored or can be retrieved.`},{name:`mimeType`,type:`text`,required:!1,description:`The file format, such as image/jpeg or application/pdf.`},{name:`description`,type:`text`,required:!1,description:`Explain what the file contains and when it should be used.`},{name:`metadata`,type:`text`,required:!1,description:`Additional details recorded while processing this file.`},{name:`version`,type:`integer`,required:!0,default:1,description:`The revision number of this file in its version history.`},{name:`primaryVersionId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The first version of this file, linking its revision history.`},{name:`typeSlug`,type:`text`,required:!1,description:`The category of asset, such as an image, video, or document.`},{name:`statusSlug`,type:`text`,required:!1,description:`The stage of this asset, such as draft, published, or archived.`},{name:`ownerProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`The person or organization responsible for this asset.`},{name:`sourceAssetId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The original asset used to produce this file or variation.`},{name:`folderId`,type:`foreignKey`,required:!1,related:`Folder`,description:`The folder that organizes this file in the asset library.`},{name:`sourceType`,type:`text`,required:!1,description:`The service or source from which this file was obtained.`},{name:`externalId`,type:`text`,required:!1,description:`The reference used to identify this file at its original source.`},{name:`externalRefs`,type:`text`,required:!1,description:`References that connect this file to copies held by other services.`},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0},{name:`videoSequenceId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-video:VideoSequence`},{name:`role`,type:`text`,required:!1,default:`video`,enum:[`video`,`audio`,`thumbnail`]}],rest:[{method:`GET`,path:`/assets`},{method:`GET`,path:`/assets/[id]`},{method:`POST`,path:`/assets`},{method:`PATCH`,path:`/assets/[id]`},{method:`DELETE`,path:`/assets/[id]`}],mcp:[{operation:`get`,name:`videosequenceasset_get`},{operation:`list`,name:`videosequenceasset_list`}],cli:[{operation:`associateWith`,name:`videosequenceasset_associateWith`},{operation:`create`,name:`videosequenceasset_create`},{operation:`delete`,name:`videosequenceasset_delete`},{operation:`get`,name:`videosequenceasset_get`},{operation:`getAssociations`,name:`videosequenceasset_getAssociations`},{operation:`getBySlug`,name:`videosequenceasset_getBySlug`},{operation:`getDerivatives`,name:`videosequenceasset_getDerivatives`},{operation:`getExternalRef`,name:`videosequenceasset_getExternalRef`},{operation:`getExternalRefs`,name:`videosequenceasset_getExternalRefs`},{operation:`getMetadata`,name:`videosequenceasset_getMetadata`},{operation:`getSource`,name:`videosequenceasset_getSource`},{operation:`getStatus`,name:`videosequenceasset_getStatus`},{operation:`getTags`,name:`videosequenceasset_getTags`},{operation:`getType`,name:`videosequenceasset_getType`},{operation:`hasTag`,name:`videosequenceasset_hasTag`},{operation:`list`,name:`videosequenceasset_list`},{operation:`mergeMetadata`,name:`videosequenceasset_mergeMetadata`},{operation:`setExternalRef`,name:`videosequenceasset_setExternalRef`},{operation:`setMetadata`,name:`videosequenceasset_setMetadata`},{operation:`update`,name:`videosequenceasset_update`}],methods:[{name:`associateWith`,async:!0,parameters:[`metaType: string`,`metaId: string`,`role?: any`],returnType:`Promise<AssetAssociation>`,aiCallable:!1},{name:`getAssociations`,async:!0,parameters:[],returnType:`Promise<AssetAssociation[]>`,aiCallable:!1},{name:`getDerivatives`,async:!0,parameters:[],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getExternalRef`,async:!1,parameters:[`provider: string`],returnType:`AssetExternalReference | null`,aiCallable:!1},{name:`getExternalRefs`,async:!1,parameters:[],returnType:`Record<string, AssetExternalReference>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getSlug`,async:!0,parameters:[],returnType:`Promise<string | null | undefined>`,aiCallable:!1},{name:`getSource`,async:!0,parameters:[],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getStatus`,async:!0,parameters:[],returnType:`Promise<AssetStatus | null>`,aiCallable:!1},{name:`getTags`,async:!0,parameters:[],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`getType`,async:!0,parameters:[],returnType:`Promise<AssetType | null>`,aiCallable:!1},{name:`hasTag`,async:!0,parameters:[`tagSlug: string`,`context?: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`mergeMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setExternalRef`,async:!1,parameters:[`provider: string`,`reference: any`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-video:VideoSequence`,`Asset`,`Folder`],exposed:!0},{id:`@happyvertical/smrt-video:VideoShot`,name:`VideoShot`,collection:`contents`,description:`Atomic video generation unit`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`type`,type:`text`,required:!1},{name:`variant`,type:`text`,required:!1},{name:`fileKey`,type:`text`,required:!1},{name:`author`,type:`text`,required:!1},{name:`name`,type:`text`,required:!0,default:``},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`body`,type:`text`,required:!1},{name:`bodyFormat`,type:`text`,required:!1,enum:[`markdown`,`html`]},{name:`publish_date`,type:`datetime`,required:!1},{name:`url`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`original_url`,type:`text`,required:!1},{name:`language`,type:`text`,required:!1},{name:`tags`,type:`json`,required:!1},{name:`category`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`published`,`draft`,`review`,`archived`,`deleted`]},{name:`state`,type:`text`,required:!1,default:`active`,enum:[`deprecated`,`active`,`highlighted`]},{name:`metadata`,type:`json`,required:!1},{name:`thumbnailAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`sequenceId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-video:VideoSequence`},{name:`sceneId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-video:Scene`},{name:`position`,type:`integer`,required:!1,default:0},{name:`durationInFrames`,type:`integer`,required:!1,default:0},{name:`trimBeforeFrames`,type:`integer`,required:!1,default:0},{name:`trimAfterFrames`,type:`integer`,required:!1,default:0},{name:`scriptText`,type:`text`,required:!1,default:``},{name:`scriptWordCount`,type:`integer`,required:!1,default:0},{name:`targetDuration`,type:`integer`,required:!1,default:30},{name:`shotStatus`,type:`text`,required:!1,default:`draft`,enum:[`draft`,`queued`,`processing`,`ready`,`failed`,`published`]},{name:`progress`,type:`integer`,required:!1,default:0},{name:`errorMessage`,type:`text`,required:!1},{name:`statusMessage`,type:`text`,required:!1},{name:`videoMetadata`,type:`json`,required:!1}],rest:[{method:`GET`,path:`/contents`},{method:`GET`,path:`/contents/[id]`},{method:`POST`,path:`/contents`},{method:`PATCH`,path:`/contents/[id]`},{method:`DELETE`,path:`/contents/[id]`}],mcp:[{operation:`get`,name:`videoshot_get`},{operation:`list`,name:`videoshot_list`}],cli:[{operation:`addAsset`,name:`videoshot_addAsset`},{operation:`addFact`,name:`videoshot_addFact`},{operation:`addReference`,name:`videoshot_addReference`},{operation:`browseFacts`,name:`videoshot_browseFacts`},{operation:`create`,name:`videoshot_create`},{operation:`createVersion`,name:`videoshot_createVersion`},{operation:`delete`,name:`videoshot_delete`},{operation:`evaluateReviewProfile`,name:`videoshot_evaluateReviewProfile`},{operation:`evaluateReviewProfileAction`,name:`videoshot_evaluateReviewProfileAction`},{operation:`generateThumbnail`,name:`videoshot_generateThumbnail`},{operation:`get`,name:`videoshot_get`},{operation:`getAncestorPaths`,name:`videoshot_getAncestorPaths`},{operation:`getAssetByRole`,name:`videoshot_getAssetByRole`},{operation:`getAssetIds`,name:`videoshot_getAssetIds`},{operation:`getAssets`,name:`videoshot_getAssets`},{operation:`getCategorySegments`,name:`videoshot_getCategorySegments`},{operation:`getCorrections`,name:`videoshot_getCorrections`},{operation:`getFactAuditState`,name:`videoshot_getFactAuditState`},{operation:`getFactAuditStateAction`,name:`videoshot_getFactAuditStateAction`},{operation:`getFactLinks`,name:`videoshot_getFactLinks`},{operation:`getFacts`,name:`videoshot_getFacts`},{operation:`getFactsState`,name:`videoshot_getFactsState`},{operation:`getGovernanceState`,name:`videoshot_getGovernanceState`},{operation:`getGovernanceStateAction`,name:`videoshot_getGovernanceStateAction`},{operation:`getMetadata`,name:`videoshot_getMetadata`},{operation:`getParentCategory`,name:`videoshot_getParentCategory`},{operation:`getPublishedTransparency`,name:`videoshot_getPublishedTransparency`},{operation:`getPublishedTransparencyAction`,name:`videoshot_getPublishedTransparencyAction`},{operation:`getReferenceDrift`,name:`videoshot_getReferenceDrift`},{operation:`getReferenceEdges`,name:`videoshot_getReferenceEdges`},{operation:`getReferences`,name:`videoshot_getReferences`},{operation:`getReviewRequirements`,name:`videoshot_getReviewRequirements`},{operation:`getReviews`,name:`videoshot_getReviews`},{operation:`getRootCategory`,name:`videoshot_getRootCategory`},{operation:`getThumbnail`,name:`videoshot_getThumbnail`},{operation:`getVersions`,name:`videoshot_getVersions`},{operation:`isGoverned`,name:`videoshot_isGoverned`},{operation:`isInCategory`,name:`videoshot_isInCategory`},{operation:`isReadyForReviewProfile`,name:`videoshot_isReadyForReviewProfile`},{operation:`issueCorrection`,name:`videoshot_issueCorrection`},{operation:`issueCorrectionAction`,name:`videoshot_issueCorrectionAction`},{operation:`list`,name:`videoshot_list`},{operation:`listCorrections`,name:`videoshot_listCorrections`},{operation:`listReviewProfilesAction`,name:`videoshot_listReviewProfilesAction`},{operation:`listReviews`,name:`videoshot_listReviews`},{operation:`listVersions`,name:`videoshot_listVersions`},{operation:`loadReferences`,name:`videoshot_loadReferences`},{operation:`mutateVersionAction`,name:`videoshot_mutateVersionAction`},{operation:`previewTransparency`,name:`videoshot_previewTransparency`},{operation:`previewTransparencyAction`,name:`videoshot_previewTransparencyAction`},{operation:`recheckFactClaims`,name:`videoshot_recheckFactClaims`},{operation:`recheckFactClaimsAction`,name:`videoshot_recheckFactClaimsAction`},{operation:`removeAsset`,name:`videoshot_removeAsset`},{operation:`removeFact`,name:`videoshot_removeFact`},{operation:`removeReference`,name:`videoshot_removeReference`},{operation:`repairFactAudit`,name:`videoshot_repairFactAudit`},{operation:`repairFactAuditAction`,name:`videoshot_repairFactAuditAction`},{operation:`repairFactEvidence`,name:`videoshot_repairFactEvidence`},{operation:`repairFactEvidenceAction`,name:`videoshot_repairFactEvidenceAction`},{operation:`resolveGovernance`,name:`videoshot_resolveGovernance`},{operation:`restoreFromVersion`,name:`videoshot_restoreFromVersion`},{operation:`reviewFacts`,name:`videoshot_reviewFacts`},{operation:`reviewSafety`,name:`videoshot_reviewSafety`},{operation:`runReview`,name:`videoshot_runReview`},{operation:`runReviewAction`,name:`videoshot_runReviewAction`},{operation:`setMetadata`,name:`videoshot_setMetadata`},{operation:`setScript`,name:`videoshot_setScript`},{operation:`setThumbnail`,name:`videoshot_setThumbnail`},{operation:`syncFacts`,name:`videoshot_syncFacts`},{operation:`syncFactsState`,name:`videoshot_syncFactsState`},{operation:`update`,name:`videoshot_update`},{operation:`updateFactEvidenceStatus`,name:`videoshot_updateFactEvidenceStatus`},{operation:`updateFactEvidenceStatusAction`,name:`videoshot_updateFactEvidenceStatusAction`},{operation:`updateMetadata`,name:`videoshot_updateMetadata`},{operation:`findBySequence`,name:`videoshotcollection_findBySequence`},{operation:`findByStatus`,name:`videoshotcollection_findByStatus`},{operation:`findStandalone`,name:`videoshotcollection_findStandalone`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`addFact`,async:!0,parameters:[`fact: Fact | string`,`relationship?: FactContentRelationship`,`metadata?: Record<string, unknown>`],returnType:`any`,aiCallable:!1},{name:`addReference`,async:!0,parameters:[`content: Content | string`,`options?: object`],returnType:`any`,aiCallable:!1},{name:`browseFacts`,async:!0,parameters:[`query?: any`,`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`createVersion`,async:!0,parameters:[`options?: CreateContentVersionOptions`],returnType:`any`,aiCallable:!1},{name:`evaluateReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<ContentReviewProfileEvaluation>`,aiCallable:!1},{name:`evaluateReviewProfileAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`findBySequence`,async:!0,parameters:[`sequenceId: string`],returnType:`Promise<VideoShot[]>`,aiCallable:!1},{name:`findByStatus`,async:!0,parameters:[`shotStatus: VideoShotStatus`],returnType:`Promise<VideoShot[]>`,aiCallable:!1},{name:`findStandalone`,async:!0,parameters:[],returnType:`Promise<VideoShot[]>`,aiCallable:!1},{name:`generateThumbnail`,async:!0,parameters:[`options: ThumbnailOptions`],returnType:`Promise<Image>`,aiCallable:!1},{name:`getAncestorPaths`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getAssetByRole`,async:!0,parameters:[`role: VideoShotAssetRole`],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getAssetIds`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getCategorySegments`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactAuditState`,async:!0,parameters:[],returnType:`Promise<FactAuditState>`,aiCallable:!1},{name:`getFactAuditStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactLinks`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getFacts`,async:!0,parameters:[`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getGovernanceState`,async:!0,parameters:[],returnType:`Promise<ContentGovernanceState>`,aiCallable:!1},{name:`getGovernanceStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getParentCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getPublishedTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getPublishedTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReferenceDrift`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferenceEdges`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReviewRequirements`,async:!0,parameters:[`profileKey: string`,`governance?: ResolvedContentGovernance`],returnType:`any`,aiCallable:!1},{name:`getReviews`,async:!0,parameters:[`kind?: any`],returnType:`any`,aiCallable:!1},{name:`getRootCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getThumbnail`,async:!0,parameters:[],returnType:`Promise<Image | null>`,aiCallable:!1},{name:`getVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isGoverned`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInCategory`,async:!1,parameters:[`categoryPath: string`,`includeChildren?: any`],returnType:`boolean`,aiCallable:!1},{name:`isReadyForReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`issueCorrection`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`issueCorrectionAction`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`listCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviewProfilesAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviews`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`listVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`loadReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`mutateVersionAction`,async:!0,parameters:[`options?: any`],returnType:`any`,aiCallable:!1},{name:`previewTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`previewTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`recheckFactClaims`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`recheckFactClaimsAction`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeFact`,async:!0,parameters:[`factId: string`,`relationship?: FactContentRelationship`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeReference`,async:!0,parameters:[`targetId: string`],returnType:`any`,aiCallable:!1},{name:`repairFactAudit`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactAuditAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidence`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidenceAction`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`resolveGovernance`,async:!0,parameters:[],returnType:`Promise<ResolvedContentGovernance>`,aiCallable:!1},{name:`restoreFromVersion`,async:!0,parameters:[`versionNumber: number`],returnType:`any`,aiCallable:!1},{name:`reviewFacts`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`reviewSafety`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`runReview`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`runReviewAction`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SmrtSaveOptions`],returnType:`any`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown> | null | undefined`],returnType:`void`,aiCallable:!1},{name:`setScript`,async:!1,parameters:[`text: string`],returnType:`void`,aiCallable:!1},{name:`setThumbnail`,async:!0,parameters:[`image: Image`],returnType:`Promise<void>`,aiCallable:!1},{name:`syncFacts`,async:!0,parameters:[`factIds: string[]`,`relationship?: FactContentRelationship`],returnType:`Promise<object>`,aiCallable:!1},{name:`syncFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatus`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatusAction`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`patch: Partial<Record<string, unknown>>`],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-video:Scene`,`@happyvertical/smrt-video:VideoSequence`],exposed:!0},{id:`@happyvertical/smrt-video:VideoShotAsset`,name:`VideoShotAsset`,collection:`assets`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`accessMode`,type:`text`,required:!1,default:`public`,enum:[`public`,`private`],description:`Whether this record is public to ordinary asset APIs or private.`},{name:`name`,type:`text`,required:!1,description:`A recognizable name for this file or media item.`},{name:`sourceUri`,type:`text`,required:!1,description:`Where the original file is stored or can be retrieved.`},{name:`mimeType`,type:`text`,required:!1,description:`The file format, such as image/jpeg or application/pdf.`},{name:`description`,type:`text`,required:!1,description:`Explain what the file contains and when it should be used.`},{name:`metadata`,type:`text`,required:!1,description:`Additional details recorded while processing this file.`},{name:`version`,type:`integer`,required:!0,default:1,description:`The revision number of this file in its version history.`},{name:`primaryVersionId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The first version of this file, linking its revision history.`},{name:`typeSlug`,type:`text`,required:!1,description:`The category of asset, such as an image, video, or document.`},{name:`statusSlug`,type:`text`,required:!1,description:`The stage of this asset, such as draft, published, or archived.`},{name:`ownerProfileId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-profiles:Profile`,description:`The person or organization responsible for this asset.`},{name:`sourceAssetId`,type:`foreignKey`,required:!1,related:`Asset`,description:`The original asset used to produce this file or variation.`},{name:`folderId`,type:`foreignKey`,required:!1,related:`Folder`,description:`The folder that organizes this file in the asset library.`},{name:`sourceType`,type:`text`,required:!1,description:`The service or source from which this file was obtained.`},{name:`externalId`,type:`text`,required:!1,description:`The reference used to identify this file at its original source.`},{name:`externalRefs`,type:`text`,required:!1,description:`References that connect this file to copies held by other services.`},{name:`createdAt`,type:`text`,required:!1,system:!0},{name:`updatedAt`,type:`text`,required:!1,system:!0},{name:`videoShotId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-video:VideoShot`},{name:`role`,type:`text`,required:!1,default:`video`,enum:[`video`,`audio`,`thumbnail`]}],rest:[{method:`GET`,path:`/assets`},{method:`GET`,path:`/assets/[id]`},{method:`POST`,path:`/assets`},{method:`PATCH`,path:`/assets/[id]`},{method:`DELETE`,path:`/assets/[id]`}],mcp:[{operation:`get`,name:`videoshotasset_get`},{operation:`list`,name:`videoshotasset_list`}],cli:[{operation:`associateWith`,name:`videoshotasset_associateWith`},{operation:`create`,name:`videoshotasset_create`},{operation:`delete`,name:`videoshotasset_delete`},{operation:`get`,name:`videoshotasset_get`},{operation:`getAssociations`,name:`videoshotasset_getAssociations`},{operation:`getBySlug`,name:`videoshotasset_getBySlug`},{operation:`getDerivatives`,name:`videoshotasset_getDerivatives`},{operation:`getExternalRef`,name:`videoshotasset_getExternalRef`},{operation:`getExternalRefs`,name:`videoshotasset_getExternalRefs`},{operation:`getMetadata`,name:`videoshotasset_getMetadata`},{operation:`getSource`,name:`videoshotasset_getSource`},{operation:`getStatus`,name:`videoshotasset_getStatus`},{operation:`getTags`,name:`videoshotasset_getTags`},{operation:`getType`,name:`videoshotasset_getType`},{operation:`hasTag`,name:`videoshotasset_hasTag`},{operation:`list`,name:`videoshotasset_list`},{operation:`mergeMetadata`,name:`videoshotasset_mergeMetadata`},{operation:`setExternalRef`,name:`videoshotasset_setExternalRef`},{operation:`setMetadata`,name:`videoshotasset_setMetadata`},{operation:`update`,name:`videoshotasset_update`}],methods:[{name:`associateWith`,async:!0,parameters:[`metaType: string`,`metaId: string`,`role?: any`],returnType:`Promise<AssetAssociation>`,aiCallable:!1},{name:`getAssociations`,async:!0,parameters:[],returnType:`Promise<AssetAssociation[]>`,aiCallable:!1},{name:`getDerivatives`,async:!0,parameters:[],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getExternalRef`,async:!1,parameters:[`provider: string`],returnType:`AssetExternalReference | null`,aiCallable:!1},{name:`getExternalRefs`,async:!1,parameters:[],returnType:`Record<string, AssetExternalReference>`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getSlug`,async:!0,parameters:[],returnType:`Promise<string | null | undefined>`,aiCallable:!1},{name:`getSource`,async:!0,parameters:[],returnType:`Promise<Asset | null>`,aiCallable:!1},{name:`getStatus`,async:!0,parameters:[],returnType:`Promise<AssetStatus | null>`,aiCallable:!1},{name:`getTags`,async:!0,parameters:[],returnType:`Promise<Tag[]>`,aiCallable:!1},{name:`getType`,async:!0,parameters:[],returnType:`Promise<AssetType | null>`,aiCallable:!1},{name:`hasTag`,async:!0,parameters:[`tagSlug: string`,`context?: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`mergeMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1},{name:`setExternalRef`,async:!1,parameters:[`provider: string`,`reference: any`],returnType:`void`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown>`],returnType:`void`,aiCallable:!1}],references:[`@happyvertical/smrt-profiles:Profile`,`@happyvertical/smrt-video:VideoShot`,`Asset`,`Folder`],exposed:!0},{id:`@happyvertical/smrt-video:VideoShotCharacter`,name:`VideoShotCharacter`,collection:`videoshotcharacters`,description:`Join model linking a VideoShot to a Character`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`videoShotId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-video:VideoShot`},{name:`characterId`,type:`foreignKey`,required:!0,related:`@happyvertical/smrt-video:Character`},{name:`role`,type:`text`,required:!1,default:`primary`,enum:[`primary`,`secondary`,`background`]},{name:`position`,type:`integer`,required:!1,default:0}],rest:[{method:`GET`,path:`/videoshotcharacters`},{method:`GET`,path:`/videoshotcharacters/[id]`},{method:`POST`,path:`/videoshotcharacters`},{method:`DELETE`,path:`/videoshotcharacters/[id]`}],mcp:[{operation:`get`,name:`videoshotcharacter_get`},{operation:`list`,name:`videoshotcharacter_list`}],cli:[{operation:`create`,name:`videoshotcharacter_create`},{operation:`delete`,name:`videoshotcharacter_delete`},{operation:`get`,name:`videoshotcharacter_get`},{operation:`list`,name:`videoshotcharacter_list`},{operation:`update`,name:`videoshotcharacter_update`},{operation:`findByCharacter`,name:`videoshotcharactercollection_findByCharacter`},{operation:`findByShot`,name:`videoshotcharactercollection_findByShot`}],methods:[{name:`findByCharacter`,async:!0,parameters:[`characterId: string`],returnType:`Promise<VideoShotCharacter[]>`,aiCallable:!1},{name:`findByShot`,async:!0,parameters:[`videoShotId: string`],returnType:`Promise<VideoShotCharacter[]>`,aiCallable:!1}],references:[`@happyvertical/smrt-video:Character`,`@happyvertical/smrt-video:VideoShot`],exposed:!0},{id:`@happyvertical/smrt-video:VideoWorkflow`,name:`VideoWorkflow`,collection:`videoworkflows`,description:`ComfyUI workflow template for video generation`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`description`,type:`text`,required:!1},{name:`workflowType`,type:`text`,required:!1,default:`custom`,enum:[`prebake`,`broadcast`,`lipsync`,`postprod`,`custom`]},{name:`workflowJson`,type:`text`,required:!1},{name:`nodeMapping`,type:`json`,required:!1},{name:`estimatedTime`,type:`integer`,required:!1,default:300},{name:`isActive`,type:`boolean`,required:!1,default:!0},{name:`requiredModels`,type:`json`,required:!1}],rest:[{method:`GET`,path:`/videoworkflows`},{method:`GET`,path:`/videoworkflows/[id]`},{method:`POST`,path:`/videoworkflows`},{method:`PATCH`,path:`/videoworkflows/[id]`}],mcp:[{operation:`get`,name:`videoworkflow_get`},{operation:`list`,name:`videoworkflow_list`}],cli:[{operation:`create`,name:`videoworkflow_create`},{operation:`delete`,name:`videoworkflow_delete`},{operation:`get`,name:`videoworkflow_get`},{operation:`injectParameters`,name:`videoworkflow_injectParameters`},{operation:`list`,name:`videoworkflow_list`},{operation:`update`,name:`videoworkflow_update`}],methods:[{name:`injectParameters`,async:!1,parameters:[`params: Record<string, unknown>`],returnType:`any`,aiCallable:!1}],references:[],exposed:!0}],dependencies:[`assets`,`content`,`profiles`,`voice`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3615`,`#3617`,`#3624`,`#3625`,`#3626`,`#3627`,`#3628`],reason:`documents/spider SDK graph; CJS parse error`,via:[`@happyvertical/smrt-agents`,`@happyvertical/smrt-chat`,`@happyvertical/smrt-content`,`@happyvertical/smrt-images`,`@happyvertical/smrt-jobs`,`@happyvertical/smrt-profiles`,`@happyvertical/smrt-reports`,`@happyvertical/smrt-secrets`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`,`@happyvertical/smrt-voice`]}},{id:`voice`,packageName:`@happyvertical/smrt-voice`,version:`0.57.9`,description:`Voice profile management for AI-powered voice synthesis and cloning in the SMRT ecosystem`,models:[{id:`@happyvertical/smrt-voice:VoiceOutput`,name:`VoiceOutput`,collection:`contents`,description:`Generated audio output from text-to-speech synthesis`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`type`,type:`text`,required:!1},{name:`variant`,type:`text`,required:!1},{name:`fileKey`,type:`text`,required:!1},{name:`author`,type:`text`,required:!1},{name:`name`,type:`text`,required:!0,default:``},{name:`title`,type:`text`,required:!1},{name:`description`,type:`text`,required:!1},{name:`body`,type:`text`,required:!1},{name:`bodyFormat`,type:`text`,required:!1,enum:[`markdown`,`html`]},{name:`publish_date`,type:`datetime`,required:!1},{name:`url`,type:`text`,required:!1},{name:`source`,type:`text`,required:!1},{name:`original_url`,type:`text`,required:!1},{name:`language`,type:`text`,required:!1},{name:`tags`,type:`json`,required:!1},{name:`category`,type:`text`,required:!1},{name:`status`,type:`text`,required:!1,default:`draft`,enum:[`published`,`draft`,`review`,`archived`,`deleted`]},{name:`state`,type:`text`,required:!1,default:`active`,enum:[`deprecated`,`active`,`highlighted`]},{name:`metadata`,type:`json`,required:!1},{name:`thumbnailAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`voiceProfileId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-voice:VoiceProfile`},{name:`sourceText`,type:`text`,required:!1,default:``},{name:`audioAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`duration`,type:`integer`,required:!1,default:0},{name:`wordTimings`,type:`json`,required:!1},{name:`audioMetadata`,type:`json`,required:!1}],rest:[{method:`GET`,path:`/contents`},{method:`GET`,path:`/contents/[id]`},{method:`POST`,path:`/contents`},{method:`DELETE`,path:`/contents/[id]`}],mcp:[{operation:`get`,name:`voiceoutput_get`},{operation:`list`,name:`voiceoutput_list`}],cli:[{operation:`addAsset`,name:`voiceoutput_addAsset`},{operation:`addFact`,name:`voiceoutput_addFact`},{operation:`addReference`,name:`voiceoutput_addReference`},{operation:`browseFacts`,name:`voiceoutput_browseFacts`},{operation:`create`,name:`voiceoutput_create`},{operation:`createVersion`,name:`voiceoutput_createVersion`},{operation:`delete`,name:`voiceoutput_delete`},{operation:`evaluateReviewProfile`,name:`voiceoutput_evaluateReviewProfile`},{operation:`evaluateReviewProfileAction`,name:`voiceoutput_evaluateReviewProfileAction`},{operation:`fromSynthesizedSpeech`,name:`voiceoutput_fromSynthesizedSpeech`},{operation:`generateThumbnail`,name:`voiceoutput_generateThumbnail`},{operation:`get`,name:`voiceoutput_get`},{operation:`getAncestorPaths`,name:`voiceoutput_getAncestorPaths`},{operation:`getAssetIds`,name:`voiceoutput_getAssetIds`},{operation:`getAssets`,name:`voiceoutput_getAssets`},{operation:`getCategorySegments`,name:`voiceoutput_getCategorySegments`},{operation:`getCorrections`,name:`voiceoutput_getCorrections`},{operation:`getFactAuditState`,name:`voiceoutput_getFactAuditState`},{operation:`getFactAuditStateAction`,name:`voiceoutput_getFactAuditStateAction`},{operation:`getFactLinks`,name:`voiceoutput_getFactLinks`},{operation:`getFacts`,name:`voiceoutput_getFacts`},{operation:`getFactsState`,name:`voiceoutput_getFactsState`},{operation:`getGovernanceState`,name:`voiceoutput_getGovernanceState`},{operation:`getGovernanceStateAction`,name:`voiceoutput_getGovernanceStateAction`},{operation:`getMetadata`,name:`voiceoutput_getMetadata`},{operation:`getParentCategory`,name:`voiceoutput_getParentCategory`},{operation:`getPublishedTransparency`,name:`voiceoutput_getPublishedTransparency`},{operation:`getPublishedTransparencyAction`,name:`voiceoutput_getPublishedTransparencyAction`},{operation:`getReferenceDrift`,name:`voiceoutput_getReferenceDrift`},{operation:`getReferenceEdges`,name:`voiceoutput_getReferenceEdges`},{operation:`getReferences`,name:`voiceoutput_getReferences`},{operation:`getReviewRequirements`,name:`voiceoutput_getReviewRequirements`},{operation:`getReviews`,name:`voiceoutput_getReviews`},{operation:`getRootCategory`,name:`voiceoutput_getRootCategory`},{operation:`getThumbnail`,name:`voiceoutput_getThumbnail`},{operation:`getVersions`,name:`voiceoutput_getVersions`},{operation:`getWordAtTime`,name:`voiceoutput_getWordAtTime`},{operation:`isGoverned`,name:`voiceoutput_isGoverned`},{operation:`isInCategory`,name:`voiceoutput_isInCategory`},{operation:`isReadyForReviewProfile`,name:`voiceoutput_isReadyForReviewProfile`},{operation:`issueCorrection`,name:`voiceoutput_issueCorrection`},{operation:`issueCorrectionAction`,name:`voiceoutput_issueCorrectionAction`},{operation:`list`,name:`voiceoutput_list`},{operation:`listCorrections`,name:`voiceoutput_listCorrections`},{operation:`listReviewProfilesAction`,name:`voiceoutput_listReviewProfilesAction`},{operation:`listReviews`,name:`voiceoutput_listReviews`},{operation:`listVersions`,name:`voiceoutput_listVersions`},{operation:`loadReferences`,name:`voiceoutput_loadReferences`},{operation:`mutateVersionAction`,name:`voiceoutput_mutateVersionAction`},{operation:`previewTransparency`,name:`voiceoutput_previewTransparency`},{operation:`previewTransparencyAction`,name:`voiceoutput_previewTransparencyAction`},{operation:`recheckFactClaims`,name:`voiceoutput_recheckFactClaims`},{operation:`recheckFactClaimsAction`,name:`voiceoutput_recheckFactClaimsAction`},{operation:`removeAsset`,name:`voiceoutput_removeAsset`},{operation:`removeFact`,name:`voiceoutput_removeFact`},{operation:`removeReference`,name:`voiceoutput_removeReference`},{operation:`repairFactAudit`,name:`voiceoutput_repairFactAudit`},{operation:`repairFactAuditAction`,name:`voiceoutput_repairFactAuditAction`},{operation:`repairFactEvidence`,name:`voiceoutput_repairFactEvidence`},{operation:`repairFactEvidenceAction`,name:`voiceoutput_repairFactEvidenceAction`},{operation:`resolveGovernance`,name:`voiceoutput_resolveGovernance`},{operation:`restoreFromVersion`,name:`voiceoutput_restoreFromVersion`},{operation:`reviewFacts`,name:`voiceoutput_reviewFacts`},{operation:`reviewSafety`,name:`voiceoutput_reviewSafety`},{operation:`runReview`,name:`voiceoutput_runReview`},{operation:`runReviewAction`,name:`voiceoutput_runReviewAction`},{operation:`setMetadata`,name:`voiceoutput_setMetadata`},{operation:`setThumbnail`,name:`voiceoutput_setThumbnail`},{operation:`syncFacts`,name:`voiceoutput_syncFacts`},{operation:`syncFactsState`,name:`voiceoutput_syncFactsState`},{operation:`update`,name:`voiceoutput_update`},{operation:`updateFactEvidenceStatus`,name:`voiceoutput_updateFactEvidenceStatus`},{operation:`updateFactEvidenceStatusAction`,name:`voiceoutput_updateFactEvidenceStatusAction`},{operation:`updateMetadata`,name:`voiceoutput_updateMetadata`}],methods:[{name:`addAsset`,async:!0,parameters:[`asset: Asset`,`relationship?: any`,`sortOrder?: any`],returnType:`Promise<void>`,aiCallable:!1},{name:`addFact`,async:!0,parameters:[`fact: Fact | string`,`relationship?: FactContentRelationship`,`metadata?: Record<string, unknown>`],returnType:`any`,aiCallable:!1},{name:`addReference`,async:!0,parameters:[`content: Content | string`,`options?: object`],returnType:`any`,aiCallable:!1},{name:`browseFacts`,async:!0,parameters:[`query?: any`,`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`createVersion`,async:!0,parameters:[`options?: CreateContentVersionOptions`],returnType:`any`,aiCallable:!1},{name:`evaluateReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<ContentReviewProfileEvaluation>`,aiCallable:!1},{name:`evaluateReviewProfileAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`generateThumbnail`,async:!0,parameters:[`options: ThumbnailOptions`],returnType:`Promise<Image>`,aiCallable:!1},{name:`getAncestorPaths`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getAssetIds`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<string[]>`,aiCallable:!1},{name:`getAssets`,async:!0,parameters:[`relationship?: string`,`options?: object`],returnType:`Promise<Asset[]>`,aiCallable:!1},{name:`getCategorySegments`,async:!1,parameters:[],returnType:`string[]`,aiCallable:!1},{name:`getCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactAuditState`,async:!0,parameters:[],returnType:`Promise<FactAuditState>`,aiCallable:!1},{name:`getFactAuditStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getFactLinks`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getFacts`,async:!0,parameters:[`options?: object`],returnType:`Promise<Fact[]>`,aiCallable:!1},{name:`getFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`getGovernanceState`,async:!0,parameters:[],returnType:`Promise<ContentGovernanceState>`,aiCallable:!1},{name:`getGovernanceStateAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getMetadata`,async:!1,parameters:[],returnType:`Record<string, unknown>`,aiCallable:!1},{name:`getParentCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getPublishedTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getPublishedTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReferenceDrift`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferenceEdges`,async:!0,parameters:[],returnType:`Promise<Array<object>>`,aiCallable:!1},{name:`getReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getReviewRequirements`,async:!0,parameters:[`profileKey: string`,`governance?: ResolvedContentGovernance`],returnType:`any`,aiCallable:!1},{name:`getReviews`,async:!0,parameters:[`kind?: any`],returnType:`any`,aiCallable:!1},{name:`getRootCategory`,async:!1,parameters:[],returnType:`string | null`,aiCallable:!1},{name:`getThumbnail`,async:!0,parameters:[],returnType:`Promise<Image | null>`,aiCallable:!1},{name:`getVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`getWordAtTime`,async:!1,parameters:[`seconds: number`],returnType:`WordTiming | null`,aiCallable:!1},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isGoverned`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!1},{name:`isInCategory`,async:!1,parameters:[`categoryPath: string`,`includeChildren?: any`],returnType:`boolean`,aiCallable:!1},{name:`isReadyForReviewProfile`,async:!0,parameters:[`profileKey: string`],returnType:`Promise<boolean>`,aiCallable:!1},{name:`issueCorrection`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`issueCorrectionAction`,async:!0,parameters:[`options: IssueContentCorrectionOptions`],returnType:`any`,aiCallable:!1},{name:`listCorrections`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviewProfilesAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`listReviews`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`listVersions`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`loadReferences`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`mutateVersionAction`,async:!0,parameters:[`options?: any`],returnType:`any`,aiCallable:!1},{name:`previewTransparency`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`previewTransparencyAction`,async:!0,parameters:[],returnType:`any`,aiCallable:!1},{name:`recheckFactClaims`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`recheckFactClaimsAction`,async:!0,parameters:[`options?: FactAuditClaimRecheckOptions`],returnType:`any`,aiCallable:!1},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeFact`,async:!0,parameters:[`factId: string`,`relationship?: FactContentRelationship`],returnType:`Promise<void>`,aiCallable:!1},{name:`removeReference`,async:!0,parameters:[`targetId: string`],returnType:`any`,aiCallable:!1},{name:`repairFactAudit`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactAuditAction`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidence`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`repairFactEvidenceAction`,async:!0,parameters:[`options?: FactAuditResourceRepairOptions`],returnType:`any`,aiCallable:!1},{name:`resolveGovernance`,async:!0,parameters:[],returnType:`Promise<ResolvedContentGovernance>`,aiCallable:!1},{name:`restoreFromVersion`,async:!0,parameters:[`versionNumber: number`],returnType:`any`,aiCallable:!1},{name:`reviewFacts`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`reviewSafety`,async:!0,parameters:[`options?: Omit<RunContentReviewOptions, 'kind'>`],returnType:`any`,aiCallable:!1},{name:`runReview`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`runReviewAction`,async:!0,parameters:[`options?: RunContentReviewOptions`],returnType:`any`,aiCallable:!1},{name:`save`,async:!0,parameters:[`options?: SmrtSaveOptions`],returnType:`any`,aiCallable:!1},{name:`setMetadata`,async:!1,parameters:[`metadata: Record<string, unknown> | null | undefined`],returnType:`void`,aiCallable:!1},{name:`setThumbnail`,async:!0,parameters:[`image: Image`],returnType:`Promise<void>`,aiCallable:!1},{name:`syncFacts`,async:!0,parameters:[`factIds: string[]`,`relationship?: FactContentRelationship`],returnType:`Promise<object>`,aiCallable:!1},{name:`syncFactsState`,async:!0,parameters:[`options?: object`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatus`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateFactEvidenceStatusAction`,async:!0,parameters:[`options?: FactEvidenceStatusUpdateOptions`],returnType:`any`,aiCallable:!1},{name:`updateMetadata`,async:!1,parameters:[`patch: Partial<Record<string, unknown>>`],returnType:`Record<string, unknown>`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-voice:VoiceProfile`],exposed:!0},{id:`@happyvertical/smrt-voice:VoiceProfile`,name:`VoiceProfile`,collection:`voiceprofiles`,description:`Voice profile for AI-powered speech synthesis`,display:{label:`name`},fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`name`,type:`text`,required:!1,default:``},{name:`description`,type:`text`,required:!1},{name:`language`,type:`text`,required:!1,default:`en-US`},{name:`gender`,type:`text`,required:!1,default:`neutral`,enum:[`male`,`female`,`neutral`]},{name:`designPrompt`,type:`text`,required:!1},{name:`sampleAssetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`voiceData`,type:`json`,required:!1},{name:`defaultSpeed`,type:`decimal`,required:!1,default:1},{name:`defaultPitch`,type:`integer`,required:!1,default:0},{name:`status`,type:`text`,required:!1,default:`pending`,enum:[`pending`,`processing`,`ready`,`failed`]},{name:`provider`,type:`text`,required:!1,default:`qwen3-tts`},{name:`errorMessage`,type:`text`,required:!1}],rest:[{method:`GET`,path:`/voiceprofiles`},{method:`GET`,path:`/voiceprofiles/[id]`},{method:`POST`,path:`/voiceprofiles`},{method:`PATCH`,path:`/voiceprofiles/[id]`},{method:`DELETE`,path:`/voiceprofiles/[id]`}],mcp:[{operation:`get`,name:`voiceprofile_get`},{operation:`list`,name:`voiceprofile_list`}],cli:[{operation:`create`,name:`voiceprofile_create`},{operation:`delete`,name:`voiceprofile_delete`},{operation:`get`,name:`voiceprofile_get`},{operation:`list`,name:`voiceprofile_list`},{operation:`toSpeechVoice`,name:`voiceprofile_toSpeechVoice`},{operation:`update`,name:`voiceprofile_update`}],methods:[{name:`toSpeechVoice`,async:!1,parameters:[],returnType:`SpeechVoice`,aiCallable:!1}],references:[`@happyvertical/smrt-assets:Asset`],exposed:!0},{id:`@happyvertical/smrt-voice:VoiceSample`,name:`VoiceSample`,collection:`voicesamples`,description:`Audio sample for voice cloning`,fields:[{name:`created_at`,type:`datetime`,required:!1,system:!0},{name:`updated_at`,type:`datetime`,required:!1,system:!0},{name:`tenantId`,type:`text`,required:!1,system:!0},{name:`voiceProfileId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-voice:VoiceProfile`},{name:`assetId`,type:`crossPackageRef`,required:!1,related:`@happyvertical/smrt-assets:Asset`},{name:`duration`,type:`integer`,required:!1,default:0},{name:`transcription`,type:`text`,required:!1},{name:`quality`,type:`text`,required:!1,default:`medium`,enum:[`low`,`medium`,`high`]},{name:`sampleRate`,type:`integer`,required:!1},{name:`channels`,type:`integer`,required:!1},{name:`format`,type:`text`,required:!1},{name:`isPrimary`,type:`boolean`,required:!1,default:!1}],rest:[{method:`GET`,path:`/voicesamples`},{method:`GET`,path:`/voicesamples/[id]`},{method:`POST`,path:`/voicesamples`},{method:`DELETE`,path:`/voicesamples/[id]`}],mcp:[{operation:`get`,name:`voicesample_get`},{operation:`list`,name:`voicesample_list`}],cli:[{operation:`create`,name:`voicesample_create`},{operation:`delete`,name:`voicesample_delete`},{operation:`get`,name:`voicesample_get`},{operation:`list`,name:`voicesample_list`},{operation:`update`,name:`voicesample_update`}],methods:[],references:[`@happyvertical/smrt-assets:Asset`,`@happyvertical/smrt-voice:VoiceProfile`],exposed:!0}],dependencies:[`assets`,`content`],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3615`,`#3617`,`#3624`,`#3625`,`#3626`,`#3627`,`#3628`],reason:`documents/spider SDK graph; CJS parse error`,via:[`@happyvertical/smrt-agents`,`@happyvertical/smrt-chat`,`@happyvertical/smrt-content`,`@happyvertical/smrt-images`,`@happyvertical/smrt-jobs`,`@happyvertical/smrt-profiles`,`@happyvertical/smrt-reports`,`@happyvertical/smrt-secrets`,`@happyvertical/smrt-tenancy`,`@happyvertical/smrt-users`]}},{id:`webhooks`,packageName:`@happyvertical/smrt-webhooks`,version:`0.57.9`,description:`Outbound webhook subscriptions, signed delivery, and durable retries`,models:[{id:`@happyvertical/smrt-webhooks:WebhookCursor`,name:`WebhookCursor`,collection:`webhookcursors`,description:`Tenant-bound durable cursor for replayable model change-feed publication.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`runtime`,type:`text`,required:!0},{name:`position`,type:`integer`,required:!1,default:0}],rest:[],mcp:[],cli:[],methods:[],references:[],exposed:!1},{id:`@happyvertical/smrt-webhooks:WebhookDelivery`,name:`WebhookDelivery`,collection:`webhookdeliveries`,description:`Durable outbox and safe outcome metadata; payload never appears in public projections.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`subscriptionId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-webhooks:WebhookSubscription`},{name:`eventId`,type:`text`,required:!0},{name:`payload`,type:`text`,required:!0},{name:`status`,type:`text`,required:!1,default:`pending`},{name:`generation`,type:`integer`,required:!1,default:0},{name:`attempts`,type:`integer`,required:!1,default:0},{name:`responseStatus`,type:`integer`,required:!1},{name:`error`,type:`text`,required:!1},{name:`leaseToken`,type:`text`,required:!1},{name:`leaseUntil`,type:`datetime`,required:!1}],rest:[],mcp:[],cli:[],methods:[],references:[`@happyvertical/smrt-webhooks:WebhookSubscription`],exposed:!1},{id:`@happyvertical/smrt-webhooks:WebhookDeliveryTask`,name:`WebhookDeliveryTask`,collection:`webhookdeliverytasks`,description:`Jobs queue entry point; persisted arguments contain IDs only.`,fields:[],rest:[],mcp:[],cli:[],methods:[{name:`deliver`,async:!0,parameters:[`args?: Record<string, unknown>`,`_context?: JobExecutionContext`],returnType:`Promise<void>`,aiCallable:!1}],references:[],exposed:!1},{id:`@happyvertical/smrt-webhooks:WebhookSubscription`,name:`WebhookSubscription`,collection:`webhooksubscriptions`,description:`Server-only subscription. Hosts authorize administration before accessing it.`,fields:[{name:`tenantId`,type:`text`,required:!0,system:!0},{name:`url`,type:`text`,required:!0},{name:`events`,type:`json`,required:!1},{name:`models`,type:`json`,required:!1},{name:`secret`,type:`text`,required:!0},{name:`enabled`,type:`boolean`,required:!1,default:!0}],rest:[],mcp:[],cli:[],methods:[{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1}],references:[],exposed:!1}],dependencies:[],surfaceSource:`knowledge`,browser:{status:`server-only`,issues:[`#3615`,`#3624`,`#3627`,`#3717`],reason:`Intentionally server-only outbound delivery: node:crypto HMAC and node:https/dns/net pinned transport enforce signing and SSRF protection. Browser hosts use the separate /svelte admin export with authenticated server callbacks.`,via:[`@happyvertical/smrt-jobs`,`@happyvertical/smrt-tenancy`]},recipes:[{id:`integrations.webhooks`,label:`Outbound webhooks`,summary:`Deliver signed model events and inspect delivery attempts from a server.`,synonyms:[],models:[`@happyvertical/smrt-webhooks:WebhookSubscription`,`@happyvertical/smrt-webhooks:WebhookDelivery`,`@happyvertical/smrt-webhooks:WebhookDeliveryTask`,`@happyvertical/smrt-webhooks:WebhookCursor`],nav:[],requires:[],group:{id:`integrations`,label:`Integrations`,summary:`Connect your application to external services.`},help:{markdown:`## Overview
969
-
970
- Send signed event notifications to an external HTTPS endpoint. Administrators
971
- can pause subscriptions and inspect delivery attempts. This integration requires
972
- a server and a running background worker.
973
-
974
- ## Tasks
975
-
976
- - Add a subscription with a public HTTPS endpoint, signing secret, and event/model filters.
977
- - Disable a subscription to cancel unsent deliveries.
978
- - Inspect the delivery log, then retry failed deliveries after correcting their endpoint.
979
- - Ask the endpoint owner to verify signatures and deduplicate delivery IDs.
980
- `,fieldRefs:[]},surfaces:[{kind:`settings-panel`,export:`@happyvertical/smrt-webhooks/svelte#WebhookAdmin`,label:`Outbound webhooks`}],runtime:`server`,demo:{mode:`server`,reasons:[`The recipe declares runtime "server".`,`Needs a server because its package does not build for a browser: Intentionally server-only outbound delivery: node:crypto HMAC and node:https/dns/net pinned transport enforce signing and SSRF protection. Browser hosts use the separate /svelte admin export with authenticated server callbacks.; and its package depends on @happyvertical/smrt-jobs, @happyvertical/smrt-tenancy, which do not build for a browser (#3615, #3624, #3627, #3717).`]}}]}]}),rt=new Map(nt.packages.map(e=>[e.id,e]));function it(e){return rt.get(e)}function at(e,t){return rt.get(e)?.models.find(e=>e.name===t)}function ot(e){let t=e.lastIndexOf(`:`);if(t<0)return;let n=e.slice(0,t),r=nt.packages.find(e=>e.packageName===n),i=r?.models.find(t=>t.id===e);return r&&i?{pkg:r,model:i}:void 0}function st(e){return e.models.filter(e=>e.exposed)}function ct(e,t){let n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?[...e]:e.filter(e=>{let t=[e.id,e.description,...e.models.flatMap(e=>[e.name,e.collection,...e.fields.map(e=>e.name)])].join(` `).toLowerCase();return n.every(e=>t.includes(e))})}function lt(e){return e.models.reduce((e,t)=>e+t.rest.length+t.mcp.length+t.cli.length,0)}function ut(e,t){let n=e<0n?-e:e,r=t<0n?-t:t;for(;r!==0n;)[n,r]=[r,n%r];return n}function dt(e,t){if(t<=0n)throw RangeError(`Rational denominator must be positive`);let n=((e<0n?-e:e)*2n+t)/(t*2n);return e<0n?-n:n}function ft(e,t){let n=e.numerator%e.denominator*t.denominator-t.numerator%t.denominator*e.denominator;return n<0n?-1:+(n>0n)}function pt(e){let t=0n,n=1n,r=new Set,i=e.map(e=>{if(typeof e.id!=`string`||e.id.trim().length===0)throw TypeError(`Rational IDs must be nonempty strings`);if(r.has(e.id))throw TypeError(`Duplicate rational ID`);if(r.add(e.id),e.denominator<=0n)throw RangeError(`Rational denominator must be positive`);let i=ut(n,e.denominator),a=e.denominator/i,o=n/i;t=t*a+e.numerator*o,n*=a;let s=ut(t,n);return s>1n&&(t/=s,n/=s),{...e,value:e.numerator/e.denominator}}),a=dt(t,n),o=a-i.reduce((e,t)=>e+t.value,0n);if(o!==0n){let e=o>0n?1n:-1n,t=[...i].sort((t,n)=>{let r=ft(t,n);return r===0?t.id<n.id?-1:+(t.id>n.id):e>0n?-r:r}),n=o*e;for(let r=0;BigInt(r)<n;r++)t[r].value+=e}return{target:a,allocations:i.map(({id:e,value:t})=>({id:e,value:t}))}}var mt=class extends Error{constructor(e,t){super(t),this.code=e,this.publicMessage=t}code;name=`MoneyValidationError`;publicMessage},ht=1000000n,U=100n*ht,gt=BigInt(2**53-1),_t=/^\S(?:.*\S)?$/;function W(e,t){throw new mt(e,t)}function vt(e,t){(typeof e!=`string`||!_t.test(e))&&W(`INVALID_MONEY_INPUT`,`${t} must be a nonempty string`)}function G(e){return(e>gt||e<-gt)&&W(`UNSAFE_MONEY`,`Money exceeds safe integer minor units`),Number(e)}function yt(e){return Number.isSafeInteger(e)||W(`UNSAFE_MONEY`,`Money must be safe integer minor units`),BigInt(e)}function bt(e,t){(!Number.isFinite(e)||e<0||e>2**53-1)&&W(`INVALID_MONEY_INPUT`,`Quantity is outside the supported range`);let[n,r=`0`]=e.toString().split(`e`),[i,a=``]=n.split(`.`),o=a.length-Number(r);o>t&&W(`INVALID_MONEY_INPUT`,`Quantity exceeds the supported decimal precision`);let s=BigInt(i+a);return o<0?{coefficient:s*10n**BigInt(-o),scale:1n}:{coefficient:s,scale:10n**BigInt(o)}}function xt(e){(typeof e!=`string`||!/^(?:0|[1-9]\d{0,2})(?:\.\d{1,6})?$/.test(e))&&W(`PERCENT_OUT_OF_RANGE`,`Percent must be an exact decimal from 0 through 100 with at most six fractional digits`);let[t,n=``]=e.split(`.`),r=BigInt(t)*ht+BigInt(n.padEnd(6,`0`));return r>U&&W(`PERCENT_OUT_OF_RANGE`,`Percent exceeds 100`),r}function St(e,t){(!e||typeof e!=`object`)&&W(`INVALID_MONEY_INPUT`,`Tax code must be an object`),vt(e.id,`Tax code ID`),e.kind!==`taxable`&&e.kind!==`zero-rated`&&e.kind!==`exempt`&&e.kind!==`out-of-scope`&&W(`TAX_CODE_KIND`,`Unknown tax code kind`),Array.isArray(e.components)||W(`INVALID_MONEY_INPUT`,`Tax code components must be an array`),e.kind===`taxable`&&e.components.length===0&&W(`TAX_CODE_TAXABLE_EMPTY`,`Taxable codes require at least one component`),e.kind!==`taxable`&&e.components.length!==0&&W(`TAX_CODE_NON_TAXABLE_COMPONENTS`,`Non-taxable codes cannot contain components`);let n=new Set;return e.components.map(e=>{(!e||typeof e!=`object`)&&W(`INVALID_MONEY_INPUT`,`Tax component must be an object`),vt(e.taxComponentId,`Tax component ID`),n.has(e.taxComponentId)&&W(`TAX_CODE_DUPLICATE_COMPONENT`,`Duplicate tax component within code`),n.add(e.taxComponentId),typeof e.compound!=`boolean`&&W(`INVALID_MONEY_INPUT`,`Tax component compound must be boolean`);let r=xt(e.percent),i=t.get(e.taxComponentId);return i!==void 0&&i!==r&&W(`TAX_COMPONENT_RATE_CONFLICT`,`Shared tax component has conflicting percentages`),t.set(e.taxComponentId,r),{taxComponentId:e.taxComponentId,rate:r,compound:e.compound}})}function Ct(e,t){(!t||typeof t!=`object`)&&W(`INVALID_MONEY_INPUT`,`Discount must be a tagged object`);let n=t;n.rate!==void 0&&n.minor!==void 0&&W(`DISCOUNT_BOTH_FORMS`,`A discount cannot include both percent and amount forms`);let r;t.kind===`none`?((n.rate!==void 0||n.minor!==void 0)&&W(`DISCOUNT_BOTH_FORMS`,`A none discount cannot include percent or amount values`),r=0n):t.kind===`percent`?r=dt(e*xt(t.rate),U):t.kind===`amount`?r=yt(t.minor):W(`INVALID_MONEY_INPUT`,`Unknown discount kind`),r!==0n&&e!==0n&&r<0n!=e<0n&&W(`DISCOUNT_SIGN`,`Discount amount must carry the sign of gross`),e===0n&&r!==0n&&W(`DISCOUNT_SIGN`,`A zero gross cannot carry a discount`);let i=e=>e<0n?-e:e;return i(r)>i(e)&&W(`DISCOUNT_EXCEEDS_GROSS`,`Discount cannot exceed gross`),r}function wt(e){(!e||typeof e!=`object`)&&W(`INVALID_MONEY_INPUT`,`Money input must be an object`),(typeof e.currency!=`string`||!/^[A-Z]{3}$/.test(e.currency)||!z.has(e.currency)||z.get(e.currency)===null)&&W(`CURRENCY_MISMATCH`,`Currency must be a supported uppercase ISO 4217 code with minor units`),e.lineAmountType!==`exclusive`&&e.lineAmountType!==`inclusive`&&e.lineAmountType!==`none`&&W(`INVALID_MONEY_INPUT`,`Unknown line amount type`),e.roundingScope!==`line`&&e.roundingScope!==`document`&&W(`INVALID_MONEY_INPUT`,`Unknown tax rounding scope`),Array.isArray(e.lines)||W(`INVALID_MONEY_INPUT`,`Lines must be an array`)}function Tt(e){wt(e);let t=new Set,n=new Map,r=e.lines.map(r=>{(!r||typeof r!=`object`)&&W(`INVALID_MONEY_INPUT`,`Money line must be an object`),vt(r.id,`Line ID`),t.has(r.id)&&W(`INVALID_MONEY_INPUT`,`Duplicate money line ID`),t.add(r.id);let i=r.netAmountMinor===void 0?null:yt(r.netAmountMinor),a=bt(r.quantity,6),o=i??dt(a.coefficient*yt(r.unitPrice),a.scale);G(o);let s=i===null?Ct(o,r.discount):0n,c=o-s;G(c),e.lineAmountType===`none`&&!r.taxCode&&W(`TAX_CODE_NOT_FOUND`,`None pricing requires an out-of-scope tax code`),e.lineAmountType===`none`&&r.taxCode?.kind!==`out-of-scope`&&W(`TAX_CODE_KIND`,`None pricing requires an out-of-scope tax code`);let l=r.taxCode?St(r.taxCode,n):[],u=1n,d=1n,f=l.map(e=>{let t=e.rate*(e.compound?u:d),n=U*d;return u=u*U+t,d=n,{...e,numerator:t,denominator:n}});return{input:r,gross:o,discount:s,amount:c,explicitNet:i,inclusive:i===null&&e.lineAmountType===`inclusive`,exact:e.lineAmountType===`none`?[]:f.map((e,t)=>({...e,priorIds:e.compound?l.slice(0,t).map(e=>e.taxComponentId):[],numerator:c*e.numerator*d,denominator:e.denominator*u})),taxes:new Map,bases:new Map}}),i=new Map([...n.keys()].map(e=>[e,new Set]));for(let e of r)for(let t of e.exact)for(let e of t.priorIds)i.get(t.taxComponentId)?.add(e);let a=[];for(;i.size;){let e=[...i].filter(([,e])=>e.size===0).map(([e])=>e).sort();e.length||W(`TAX_COMPONENT_DEPENDENCY_CYCLE`,`Tax codes impose contradictory compound component order`);for(let t of e){a.push(t),i.delete(t);for(let e of i.values())e.delete(t)}}let o=(e,t)=>{if(e.inclusive)return t;let n=e.amount+t.priorIds.reduce((t,n)=>t+(e.taxes.get(n)??0n),0n);return G(n),e.bases.set(t.taxComponentId,n),{numerator:n*t.rate,denominator:U}};if(e.roundingScope===`line`)for(let e of r)for(let t of e.exact){let n=o(e,t);e.taxes.set(t.taxComponentId,dt(n.numerator,n.denominator))}else for(let e of a){let t=r.flatMap(t=>{let n=t.exact.find(t=>t.taxComponentId===e);return n?[{line:t,exact:o(t,n)}]:[]}),n=pt(t.map(({line:e,exact:t})=>({id:e.input.id,numerator:t.numerator,denominator:t.denominator})));for(let r of n.allocations)t.find(({line:e})=>e.input.id===r.id)?.line.taxes.set(e,r.value)}let s=r.map(t=>{let n=t.exact.map(e=>({taxComponentId:e.taxComponentId,taxMinor:G(t.taxes.get(e.taxComponentId)??0n)})),r=n.reduce((e,t)=>e+BigInt(t.taxMinor),0n),i=t.explicitNet??(e.lineAmountType===`inclusive`?t.amount-r:t.amount);for(let e=0;e<n.length;e++){let r=t.exact[e];r.compound&&Object.assign(n[e],{compound:!0,taxableMinor:G(t.inclusive?i+r.priorIds.reduce((e,n)=>e+(t.taxes.get(n)??0n),0n):t.bases.get(r.taxComponentId)??i)})}let a=t.explicitNet!==null&&e.lineAmountType===`inclusive`?i+r:t.amount;return{id:t.input.id,grossMinor:G(t.gross),discountMinor:G(t.discount),amountMinor:G(a),components:n,taxMinor:G(r),netMinor:G(i)}}),c=new Map;for(let t=0;t<r.length;t++){let n=r[t].input,i=s[t];if(!n.taxCode||n.taxCode.components.length===0||e.lineAmountType===`none`){let e=`${n.taxCode?.id??``}\0`,t=c.get(e)??{taxCodeId:n.taxCode?.id??null,taxComponentId:null,taxableMinor:0,taxMinor:0};t.taxableMinor=G(BigInt(t.taxableMinor)+BigInt(i.netMinor)),c.set(e,t)}else for(let e of i.components){n.taxCode||W(`INVALID_MONEY_INPUT`,`Tax component requires a tax code`);let t=`${n.taxCode.id}\0${e.taxComponentId}`,r=c.get(t)??{taxCodeId:n.taxCode.id,taxComponentId:e.taxComponentId,taxableMinor:0,taxMinor:0};r.taxableMinor=G(BigInt(r.taxableMinor)+BigInt(e.taxableMinor??i.netMinor)),e.compound&&(r.netMinor=G(BigInt(r.netMinor??0)+BigInt(i.netMinor))),r.taxMinor=G(BigInt(r.taxMinor)+BigInt(e.taxMinor)),c.set(t,r)}}let l=[...c.values()].sort((e,t)=>{let n=e.taxCodeId??``,r=t.taxCodeId??``;if(n!==r)return n<r?-1:1;let i=e.taxComponentId??``,a=t.taxComponentId??``;return i<a?-1:+(i>a)}),u=s.reduce((e,t)=>e+BigInt(t.netMinor),0n),d=s.reduce((e,t)=>e+BigInt(t.discountMinor),0n),f=s.reduce((e,t)=>e+BigInt(t.taxMinor),0n);return{lines:s,subtotalMinor:G(u),discountTotalMinor:G(d),taxMinor:G(f),totalMinor:G(u+f),taxes:l}}function Et(e,t,n){if(!e)return null;let r=n.codes[e];return r||W(`TAX_CODE_NOT_FOUND`,`Unknown tax code: ${e}`),typeof r.active!=`boolean`&&W(`INVALID_MONEY_INPUT`,`Tax code ${e} has invalid state`),r.active||W(`TAX_CODE_INACTIVE`,`Tax code ${e} is inactive`),r.appliesTo!==`sales`&&r.appliesTo!==`purchases`&&r.appliesTo!==`both`&&W(`INVALID_MONEY_INPUT`,`Tax code ${e} has invalid applicability`),r.appliesTo!==`both`&&r.appliesTo!==n.direction&&W(`TAX_CODE_SCOPE`,`Tax code ${e} does not apply to ${n.direction}`),{taxCode:r,source:t}}function Dt(e,t){if((!e||typeof e!=`object`||!t||typeof t!=`object`)&&W(`INVALID_MONEY_INPUT`,`Tax-code resolution inputs must be objects`),(!t.codes||typeof t.codes!=`object`)&&W(`INVALID_MONEY_INPUT`,`Tax-code map must be an object`),e.lineAmountType!==`exclusive`&&e.lineAmountType!==`inclusive`&&e.lineAmountType!==`none`&&W(`INVALID_MONEY_INPUT`,`Unknown line amount type`),t.direction!==`sales`&&t.direction!==`purchases`&&W(`INVALID_MONEY_INPUT`,`Unknown tax-code direction`),e.lineAmountType===`none`){t.outOfScopeCodeId||W(`TAX_CODE_NOT_FOUND`,`None mode requires an out-of-scope tax code`);let e=Et(t.outOfScopeCodeId,`none`,t);return e?.taxCode?.kind!==`out-of-scope`&&W(`TAX_CODE_KIND`,`None mode requires an out-of-scope tax code`),e}if(t.customerTaxExempt&&!e.lineOverride){t.exemptCodeId||W(`TAX_CODE_NOT_FOUND`,`An exempt customer requires an exempt tax code`);let e=Et(t.exemptCodeId,`exempt-customer`,t);return e?.taxCode?.kind!==`exempt`&&W(`TAX_CODE_KIND`,`Customer exemption requires an exempt tax code`),e}let n=[[e.lineOverride,`line`],[t.productCodeId,`product`],[t.partyCodeId,`customer`],[t.appDefaultCodeId,`app`]];for(let[e,r]of n){let n=Et(e,r,t);if(n)return n}return{taxCode:null,source:`none`}}function Ot(e){let t=2166136261,n=[];for(let r=0;r<4;r++){for(let n=0;n<e.length;n++)t^=e.charCodeAt(n)+r,t=Math.imul(t,16777619);n.push((t>>>0).toString(16).padStart(8,`0`))}let r=n.join(``);return`${r.slice(0,8)}-${r.slice(8,12)}-4${r.slice(13,16)}-8${r.slice(17,20)}-${r.slice(20,32)}`}var K=(e,t,n,r=[])=>({id:Ot(`tax-code:${e}`),code:e,name:t,kind:n,appliesTo:`both`,active:!0,components:r}),kt=[K(`exempt`,`Exempt`,`exempt`),K(`zero-rated`,`Zero-rated`,`zero-rated`),K(`out-of-scope`,`Out of scope`,`out-of-scope`)],At={id:`common-sales-taxes-v1`,components:[{key:`ca-gst-5`,name:`Canada GST 5%`,percent:`5`,recoverable:!0},{key:`ca-pst-bc-7`,name:`BC PST 7%`,percent:`7`,recoverable:!1},{key:`ca-hst-on-13`,name:`Ontario HST 13%`,percent:`13`,recoverable:!0},{key:`uk-vat-20`,name:`UK VAT 20%`,percent:`20`,recoverable:!0},{key:`au-gst-10`,name:`Australia GST 10%`,percent:`10`,recoverable:!0},{key:`nz-gst-15`,name:`New Zealand GST 15%`,percent:`15`,recoverable:!0}],codes:[{code:`ca-gst`,name:`Canada GST`,appliesTo:`both`,componentKeys:[`ca-gst-5`]},{code:`ca-gst-pst-bc`,name:`BC GST + PST`,appliesTo:`both`,componentKeys:[`ca-gst-5`,`ca-pst-bc-7`]},{code:`ca-hst-on`,name:`Ontario HST`,appliesTo:`both`,componentKeys:[`ca-hst-on-13`]},{code:`uk-vat-standard`,name:`UK VAT standard`,appliesTo:`both`,componentKeys:[`uk-vat-20`]},{code:`au-gst`,name:`Australia GST`,appliesTo:`both`,componentKeys:[`au-gst-10`]},{code:`nz-gst`,name:`New Zealand GST`,appliesTo:`both`,componentKeys:[`nz-gst-15`]}]},jt=(e,t,n,r)=>({id:Ot(`tax-component:${e}`),key:e,name:t,percent:n,recoverable:r}),Mt=new Map(At.components.map(e=>[e.key,jt(e.key,e.name,e.percent,e.recoverable)])),Nt=At.codes.map(e=>({...K(e.code,e.name,`taxable`,e.componentKeys.flatMap(e=>{let t=Mt.get(e);return t?[t]:[]})),appliesTo:e.appliesTo})),Pt={"ca-gst":`CAD`,"ca-gst-pst-bc":`CAD`,"ca-hst-on":`CAD`,"uk-vat-standard":`GBP`,"au-gst":`AUD`,"nz-gst":`NZD`};function Ft(e){return String(Number((e*100).toFixed(6)))}function It(e){let t=kt.find(e=>e.kind===`out-of-scope`);if(!(e>0)&&t)return t;let n=Ft(e);return K(`default-${n.replace(`.`,`_`)}`,`Default ${n}%`,`taxable`,[jt(`cookbook-${n}`,`Tax ${n}%`,n,!1)])}function Lt(e){return Nt.filter(t=>Pt[t.code]===e.toUpperCase()).sort((e,t)=>t.components.length-e.components.length)[0]}function Rt(e){let t=It(e),n=[...kt,t,...Nt];return n.filter((e,t)=>n.findIndex(t=>t.id===e.id)===t)}function zt(e){let t=new Map;for(let n of e)for(let e of n.components)t.set(e.id,e);return[...t.values()]}var Bt=e=>{let t=Number(e??0);return Number.isFinite(t)?t:0},q=e=>Math.round(Bt(e));function Vt(e){if(e.discountType===`percent`){let t=String(e.discountRate??``).trim();return t&&Number(t)!==0?{kind:`percent`,rate:Ht(t)}:{kind:`none`}}if(e.discountType===`amount`){let t=q(e.discount);return t?{kind:`amount`,minor:t}:{kind:`none`}}return{kind:`none`}}function Ht(e){let t=Number(e);return Number.isFinite(t)?String(Number(t.toFixed(6))):`0`}function Ut(e,t=`USD`){let n=typeof e==`string`?e.trim().toUpperCase():``;return n in z?n:t}var Wt=e=>{let t=Bt(e);return t<0?0:Number(t.toFixed(6))};function Gt(e){return{id:e.id,kind:e.kind,active:e.active,appliesTo:e.appliesTo,components:e.components.map(e=>({taxComponentId:e.id,percent:e.percent,compound:!1}))}}function Kt(e,t){let n=Object.fromEntries(t.codes.map(e=>[e.id,Gt(e)])),r=new Map(t.codes.map(e=>[e.id,e])),i=t.codes.find(e=>e.kind===`exempt`)?.id??null,a=t.codes.find(e=>e.kind===`out-of-scope`)?.id??null,o=e.map((e,t)=>typeof e.id==`string`&&e.id?e.id:`line-${t}`),s=e.map(e=>{let r=e.taxMode===`override`&&typeof e.taxCodeId==`string`&&e.taxCodeId||null,o=typeof e.productId==`string`&&e.productId?e.productId:null;return Dt({lineAmountType:t.lineAmountType,lineOverride:r},{direction:`sales`,codes:n,customerTaxExempt:t.customerTaxExempt??!1,exemptCodeId:i,productCodeId:o?t.productCodeOf?.(o)??null:null,partyCodeId:t.partyCodeId??null,appDefaultCodeId:t.appDefaultCodeId,outOfScopeCodeId:a}).taxCode}),c=Tt({currency:t.currency,lineAmountType:t.lineAmountType,roundingScope:t.roundingScope,lines:e.map((e,t)=>({id:o[t],quantity:Wt(e.quantity),unitPrice:q(e.unitPrice),discount:Vt(e),taxCode:s[t]??null}))}),l=new Map(t.codes.flatMap(e=>e.components.map(e=>[e.id,e]))),u=e.map((e,t)=>{let n=c.lines[t],i=s[t]?r.get(s[t].id):void 0,a=(n?.components??[]).map(e=>{let t=l.get(e.taxComponentId);return{taxComponentId:e.taxComponentId,name:t?.name??``,percent:t?.percent??`0`,taxMinor:e.taxMinor}}),o=a.reduce((e,t)=>e+Number(t.percent),0);return{...e,discount:n?.discountMinor??0,amount:n?.amountMinor??0,taxAmount:n?.taxMinor??0,taxCodeId:i?.id??null,taxCodeCode:i?.code??null,taxCodeName:i?.name??null,taxComponentsJson:JSON.stringify(a),taxRate:Number((o/100).toFixed(6))}}),d=c.taxes.map(e=>{let t=e.taxComponentId?l.get(e.taxComponentId):void 0,n=e.taxCodeId?r.get(e.taxCodeId):void 0;return{taxCodeId:e.taxCodeId,taxComponentId:e.taxComponentId,name:t?.name??n?.name??``,percent:t?.percent??`0`,taxable:e.taxableMinor,tax:e.taxMinor}});return{lines:u,subtotal:c.subtotalMinor,discountTotal:c.discountTotalMinor,taxAmount:c.taxMinor,totalAmount:c.totalMinor,taxes:d}}function qt(e){let t=e.taxComponentsJson;if(typeof t!=`string`||!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.taxComponentId==`string`&&Number.isSafeInteger(e.taxMinor)):[]}catch{return[]}}function Jt(e,t){let n=new Map;for(let r of e){let e=t===`inclusive`?q(r.amount)-q(r.taxAmount):q(r.amount);for(let t of qt(r)){let i=n.get(t.taxComponentId);i?(i.taxable+=e,i.tax+=t.taxMinor):n.set(t.taxComponentId,{taxCodeId:typeof r.taxCodeId==`string`?r.taxCodeId:null,taxComponentId:t.taxComponentId,name:t.name,percent:t.percent,taxable:e,tax:t.taxMinor})}}return[...n.values()]}function Yt(e){try{return Kt([e],{lineAmountType:`exclusive`,roundingScope:`line`,currency:`USD`,codes:[],appDefaultCodeId:null}).lines[0]?.amount??0}catch{return Math.round(Wt(e.quantity)*q(e.unitPrice))}}var Xt=e=>{let t=Number(e??0);return Number.isFinite(t)?t:0},J=(e,t)=>e.fields.some(e=>e.name===t);function Zt(e){return[`quantity`,`unitPrice`,`amount`].every(t=>J(e,t))}var Qt=[`subtotal`,`taxAmount`,`totalAmount`],$t=[...Qt,`discountTotal`],en=[`amount`,`taxAmount`,`taxRate`,`taxCodeCode`,`taxCodeName`],tn=[`exclusive`,`inclusive`,`none`];function nn(e,t){let n=e.lineAmountType;return typeof n==`string`&&tn.includes(n)?n:t}function rn(e,t){let n=e.taxRoundingScope;return n===`line`||n===`document`?n:t}function an(e,t,n,r){let i=Kt(n,r),a={...t};for(let t of $t)J(e,t)&&(a[t]=i[t]);return{row:a,lines:i.lines}}function on(e){return[`totalAmount`,`amountPaid`,`status`].every(t=>J(e,t))}var sn=e=>e.type===`foreignKey`||e.type===`crossPackageRef`;function cn(e){return e.fields.find(e=>sn(e)&&/^payment/i.test(e.name))}function ln(e){return e.fields.find(e=>sn(e)&&/^invoice/i.test(e.name))}function un(e){return J(e,`amount`)&&!!cn(e)&&!!ln(e)}var dn=`completed`;function fn(e,t,n){let r=t.reduce((e,t)=>e+Xt(t.amount),0),i=Xt(e.totalAmount),a=String(e.status??`draft`),o=i>0&&r>=i,s=a;if(o)s=`paid`;else if(a!==`draft`&&a!==`cancelled`){let t=Date.parse(String(e.dueDate??``));s=Number.isFinite(t)&&t<n?`overdue`:a===`viewed`?`viewed`:`sent`}let c=t.map(e=>e.at).sort().at(-1);return{amountPaid:r,status:s,paidDate:o?c??String(e.issueDate??``):null}}function pn(e,t,n=!1){let r=new Set;if(Zt(e))for(let t of en)J(e,t)&&r.add(t);if(t)for(let t of $t)J(e,t)&&r.add(t);if(n&&on(e))for(let t of[`amountPaid`,`paidDate`])J(e,t)&&r.add(t);return r}function mn(e){return sn(e)&&(e.related?.endsWith(`:Product`)===!0||/^product(Id)?$/i.test(e.name))}function hn(e,t){let n={};return t&&(J(e,`description`)&&typeof t.name==`string`&&t.name&&(n.description=t.name),J(e,`unitPrice`)&&typeof t.price==`number`&&(n.unitPrice=t.price)),n}var gn={id:`generic`,products:[{name:`Canvas tote`,price:2400},{name:`Ceramic mug`,price:1800},{name:`Linen apron`,price:3600},{name:`Beeswax candle`,price:1500},{name:`Walnut cutting board`,price:5800},{name:`Wool throw blanket`,price:8900},{name:`Enamel camp cup`,price:1200},{name:`Leather notebook`,price:2900}],locations:[{code:`MAIN`,name:`Main floor`,kind:`store`},{code:`STORE`,name:`Storage room`,kind:`warehouse`}]},_n={id:`bakery`,taxRate:0,products:[{name:`Sourdough loaf`,price:850,category:`Bread`,productType:`product`,description:`Slow-fermented, baked daily.`,at:0},{name:`Baguette`,price:450,category:`Bread`,productType:`product`,description:`Crisp crust, soft crumb.`,at:0},{name:`Butter croissant`,price:400,category:`Pastry`,productType:`product`,description:`Laminated with cultured butter.`,at:0},{name:`Pain au chocolat`,price:450,category:`Pastry`,productType:`product`,description:`Two bars of dark chocolate.`,at:0},{name:`Cinnamon bun`,price:475,category:`Pastry`,productType:`product`,description:`Cream cheese glaze.`,at:0},{name:`Chocolate layer cake`,price:4800,category:`Cake`,productType:`product`,description:`Serves eight. Order a day ahead.`,at:1},{name:`Carrot cake slice`,price:650,category:`Cake`,productType:`product`,description:`Walnuts and cream cheese frosting.`,at:1},{name:`Flat white`,price:450,category:`Coffee`,productType:`product`,description:`Double shot, steamed milk.`,at:0},{name:`Bread flour, 25 kg`,price:3200,category:`Ingredient`,productType:`material`,description:`High-protein stone-milled flour.`,at:2},{name:`Unsalted butter, 5 kg`,price:5400,category:`Ingredient`,productType:`material`,description:`European-style, 82% fat.`,at:1},{name:`Cane sugar, 10 kg`,description:`Fine granulated cane sugar.`,price:1900,category:`Ingredient`,productType:`material`,at:2},{name:`Instant yeast, 500 g`,description:`Fast-acting, no proofing needed.`,price:1100,category:`Ingredient`,productType:`material`,at:2},{name:`Free-range eggs, tray of 30`,description:`Free-range, graded large.`,price:1300,category:`Ingredient`,productType:`material`,at:1},{name:`Dark chocolate, 2 kg`,description:`Couverture, 64% cacao.`,price:3800,category:`Ingredient`,productType:`material`,at:2}],customers:[`Corner Café`,`Maple Street Deli`,`Sunrise Diner`,`Willow Bistro`,`Harbor Coffee Roasters`,`Anna Petrov`,`Marcus Lee`,`Priya Shah`],vendors:[`Stonemill Flour Co.`,`Valley Creamery`,`Heritage Grain Mill`,`Meadowbrook Dairy`,`Cascade Packaging`],notes:[`Deliver before 6 a.m.`,`Standing order; confirm each week.`,`No nuts, please. Allergy on file.`,`Extra baguettes for the weekend.`,`Pickup at the front counter.`],terms:[`Net 15`,`Due on receipt`,`Net 30`],customerNotes:[`Standing order every Friday.`,`No nuts, please. Allergy on file.`,`Prefers pickup at the front counter.`,`Orders extra for the weekend.`,`Pays on the first of the month.`],vendorNotes:[`Delivers before 5 a.m.`,`Invoice arrives with the delivery.`,`Call ahead for holiday orders.`,`Minimum order of ten bags.`,`Credit note owed for a short delivery.`],lineQuantity:[1,6],locations:[{code:`FRONT`,name:`Front counter`,kind:`store`},{code:`COOLER`,name:`Walk-in cooler`,kind:`cooler`},{code:`DRY`,name:`Dry store`,kind:`warehouse`}],rowCounts:{"@happyvertical/smrt-products:Product":14},weights:{"Order.status":{completed:6,accepted:2,sent:1,draft:1},"WholesaleOrder.status":{completed:5,accepted:3,sent:1,draft:1}}},vn={id:`mechanic`,taxRate:.0825,products:[{name:`Brake pads, front set`,description:`Ceramic pads with hardware kit.`,price:8900,category:`Brakes`,productType:`product`},{name:`Oil filter`,description:`Spin-on filter for most cars.`,price:1400,category:`Filters`,productType:`product`},{name:`Spark plugs, set of 4`,description:`Iridium plugs, pre-gapped.`,price:3600,category:`Ignition`,productType:`product`},{name:`Synthetic engine oil, 5 L`,description:`Full synthetic, 5W-30.`,price:4200,category:`Fluids`,productType:`product`},{name:`Air filter`,description:`Pleated paper element.`,price:2200,category:`Filters`,productType:`product`},{name:`Wiper blades, pair`,description:`Beam blades, all weather.`,price:2400,category:`Body`,productType:`product`},{name:`Brake rotor, front`,description:`Vented, coated against rust.`,price:11500,category:`Brakes`,productType:`product`},{name:`Car battery, 12 V`,description:`Maintenance-free, 3-year warranty.`,price:14900,category:`Electrical`,productType:`product`}],lines:[{description:`Labour: oil and filter change`,price:6500,quantity:[1,3]},{description:`Labour: brake service, per axle`,price:12e3,quantity:[1,2]},{description:`Front brake pads`,price:8900,quantity:[1,4]},{description:`Diagnostic inspection`,price:9500,quantity:[1,3]},{description:`Spark plug replacement`,price:3600,quantity:[1,4]},{description:`Tire rotation and balance`,price:4500,quantity:[1,2]},{description:`Synthetic oil, 5 L`,price:4200,quantity:[1,4]},{description:`Battery test and replacement`,price:14900,quantity:[1,1]}],customers:[`Dana Whitfield`,`Luis Moreno`,`Hannah Brooks`,`Tom Okafor`,`Sofia Reyes`,`Greg Patel`,`Maya Chen`,`Riverside Delivery Co.`],vendors:[`Northside Auto Parts`,`Acme Brake & Supply`,`Pacific Filter Distributors`,`GearHead Wholesale`,`Lubricant Direct`],notes:[`Customer is waiting.`,`Check for open recalls before release.`,`Approved by phone.`,`Return the old parts to the customer.`,`Warning light on since last week.`],terms:[`Due on receipt`,`Net 15`,`Net 30`],customerNotes:[`Prefers a call over a text.`,`Drives a company van; invoice the fleet account.`,`Usually waits at the shop during service.`,`Pick-up after 5 p.m. only.`,`Keeps the service history in the glovebox.`],vendorNotes:[`Same-day delivery before 10 a.m.`,`Core charge refunded on return.`,`Account number is on the packing slip.`,`Backordered items ship free.`,`Minimum order for free freight.`],instructors:[`Ray Delgado`,`Kim Nakamura`,`Owen Pryce`],descriptions:{Event:[`Drain, new filter and fresh oil, with a fluid top-up.`,`Pads, rotors and fluid checked and replaced as needed.`,`Full safety inspection with a written report.`,`Rotate all four tires and check pressure and tread.`,`Scan the codes and trace the warning light.`,`Drain, new filter and fresh oil, with a fluid top-up.`,`Pads, rotors and fluid checked and replaced as needed.`,`Full safety inspection with a written report.`],EventType:[`Routine oil and filter change.`,`Inspect and replace brake components.`,`Annual safety and emissions inspection.`,`Rotate and balance the tires.`,`Trace faults with the scan tool.`,`Test and replace the battery.`,`Set toe, camber and caster.`,`Anything else the shop agrees to take on.`],EventSeries:[`Regular service on the manufacturer schedule.`,`Winter and summer tire swaps.`,`Recurring work for company vehicles.`,`Repairs covered by the manufacturer.`,`Condition check before a used car is bought.`],Place:[`Lift bay for general repairs.`,`Second lift bay.`,`Alignment rack with laser targets.`,`Where finished cars wait for their owners.`,`Where parts are sold and picked up.`]},eventNames:[`Oil change`,`Brake service`,`Annual inspection`,`Tire rotation`,`Diagnostics`,`Oil change`,`Brake service`,`Annual inspection`],eventTypes:[`Oil change`,`Brake service`,`Inspection`,`Tire rotation`,`Diagnostics`,`Battery service`,`Alignment`,`Other`],seriesNames:[`Scheduled maintenance`,`Seasonal tire change`,`Fleet contracts`,`Warranty work`,`Pre-purchase checks`],placeNames:[`Service bay 1`,`Service bay 2`,`Alignment rack`,`Customer pickup lot`,`Parts counter`],placeTypes:[`Service bay`,`Rack`,`Lot`,`Counter`],locations:[{code:`PARTS`,name:`Parts counter`,kind:`store`},{code:`BAYS`,name:`Bay storage`,kind:`warehouse`}],weights:{"Order.status":{completed:5,accepted:3,sent:1,draft:1},"Estimate.status":{sent:3,accepted:3,declined:1,draft:1},"Event.status":{scheduled:5,completed:4,cancelled:1},"Customer.customerType":{retail:1}}},yn={id:`welder`,taxRate:0,products:[{name:`Flat bar 50 x 6 mm, 6 m`,description:`Mild steel, cut to length on request.`,price:4800,category:`Steel stock`,productType:`material`},{name:`Square tube 40 x 40 mm, 6 m`,description:`Mild steel hollow section.`,price:9200,category:`Steel stock`,productType:`material`},{name:`Steel plate 6 mm, 4 x 8 ft`,description:`Hot-rolled mild steel sheet.`,price:21500,category:`Steel stock`,productType:`material`},{name:`Angle iron 50 x 50 mm, 6 m`,description:`Equal-leg mild steel angle.`,price:7400,category:`Steel stock`,productType:`material`},{name:`Round bar 20 mm, 3 m`,description:`Hot-rolled mild steel round.`,price:3900,category:`Steel stock`,productType:`material`},{name:`Argon/CO2 shielding gas cylinder`,description:`Argon and CO2 mix for MIG welding.`,price:6800,category:`Gas`,productType:`material`,at:1},{name:`MIG wire ER70S-6, 15 kg spool`,description:`Copper-coated solid MIG wire.`,price:7900,category:`Consumables`,productType:`material`,at:1},{name:`Welding rods E7018, 5 kg`,description:`Low-hydrogen stick electrodes.`,price:3400,category:`Consumables`,productType:`material`,at:1}],lines:[{description:`Swing gate, fabricated and installed`,price:185e3,quantity:[1,1]},{description:`Stair railing, 3 m run`,price:94e3,quantity:[1,2]},{description:`Trailer frame repair`,price:62e3,quantity:[1,1]},{description:`Custom bracket set (4)`,price:18e3,quantity:[1,3]},{description:`Site welding, per hour`,price:9500,quantity:[2,8]},{description:`Powder coat finish`,price:32e3,quantity:[1,1]},{description:`Delivery and site setup`,price:8500,quantity:[1,1]},{description:`Fence post replacement, each`,price:14e3,quantity:[2,6]}],customers:[`Ridgeline Construction`,`Harbor Builders`,`Summit Roofing`,`Oakdale Farms`,`Granite Peak Contracting`,`Nolan Excavation`,`Bluewater Marine`,`Hartley Property Group`],vendors:[`Continental Steel Supply`,`Western Metals Depot`,`Pro Weld Gas & Gear`,`Ironworks Wholesale`,`Allied Fasteners`],notes:[`Measure on site before cutting.`,`Customer supplies the gate posts.`,`Hot work permit required.`,`Galvanise after fabrication.`,`Access through the rear lane only.`],terms:[`50% deposit, balance on completion`,`Net 30`,`Due on completion`],customerNotes:[`Site foreman is the contact for access.`,`Pays by cheque, thirty days.`,`Prefers quotes by email.`,`Repeat customer; same crew each time.`,`Needs a purchase order number on invoices.`],vendorNotes:[`Cut lengths ready next morning.`,`Mill certificates come with each order.`,`Cylinder rental is billed monthly.`,`Delivers Tuesdays and Fridays.`,`Minimum order for free delivery.`],instructors:[`Frank Dillard`,`Rosa Quintero`,`Jed Harlan`],descriptions:{Event:[`Measure the opening and check the access on site.`,`Walk the job with the customer and agree the scope.`,`Crew delivers, fits and finishes the work.`,`Return to repair the fault under the original quote.`,`Walk the finished job with the customer.`,`Measure the opening and check the access on site.`,`Walk the job with the customer and agree the scope.`,`Crew delivers, fits and finishes the work.`],EventType:[`Measure up before a quote.`,`Walk through a quote with the customer.`,`Fit finished work on site.`,`Return to fix a fault.`,`Sign-off with the customer.`,`Drop finished work at the customer.`,`Customer collects from the shop.`,`Anything else the shop agrees to take on.`],EventSeries:[`Site visits that lead to a written quote.`,`Crews booked for fitting days.`,`Return visits for repairs.`,`Sign-off walks at the end of a job.`,`Scheduled trips with finished work.`],Place:[`Wherever the work is to be fitted.`,`Where work is cut, welded and finished.`,`Outdoor space for loading and staging.`,`Where stock is collected from the supplier.`,`Cabin for paperwork on large jobs.`]},eventNames:[`Site measure`,`Quote walk-through`,`Install day`,`Repair call-out`,`Final inspection`,`Site measure`,`Quote walk-through`,`Install day`],eventTypes:[`Site measure`,`Quote walk-through`,`Install`,`Repair call-out`,`Final inspection`,`Delivery`,`Pickup`,`Other`],seriesNames:[`Estimates and site measures`,`Install crews`,`Repair call-outs`,`Final inspections`,`Delivery runs`],placeNames:[`Customer site`,`Fabrication shop`,`Yard and loading dock`,`Supplier pickup`,`Job site office`],placeTypes:[`Job site`,`Workshop`,`Yard`,`Supplier`],locations:[{code:`RACK`,name:`Steel rack`,kind:`warehouse`},{code:`GAS`,name:`Gas cage`,kind:`cage`}],weights:{"Order.status":{completed:4,accepted:3,sent:1,draft:1},"Estimate.status":{sent:3,accepted:3,declined:1,draft:1},"Event.status":{scheduled:5,completed:4,cancelled:1}}},bn={id:`yoga-studio`,taxRate:0,products:[{name:`Cork yoga mat`,description:`Natural cork, non-slip.`,price:7800,category:`Mats`,productType:`product`},{name:`Yoga blocks, pair`,description:`Dense foam, light and firm.`,price:2400,category:`Props`,productType:`product`},{name:`Cotton yoga strap`,description:`Adjustable D-ring strap.`,price:1500,category:`Props`,productType:`product`},{name:`Insulated water bottle`,description:`Keeps water cold all class.`,price:3200,category:`Bottles`,productType:`product`},{name:`Bolster`,description:`Firm support for restorative poses.`,price:6400,category:`Props`,productType:`product`},{name:`Lavender eye pillow`,description:`Weighted, with flax and lavender.`,price:1800,category:`Wellness`,productType:`product`},{name:`Meditation cushion`,description:`Buckwheat-filled zafu.`,price:5200,category:`Wellness`,productType:`product`},{name:`Studio tote bag`,description:`Roomy canvas tote.`,price:2800,category:`Apparel`,productType:`product`}],lines:[{description:`Monthly unlimited membership`,price:12900,quantity:[1,1]},{description:`10-class pack`,price:17e3,quantity:[1,1]},{description:`Drop-in class`,price:2200,quantity:[1,3]},{description:`Private session, 60 min`,price:9e3,quantity:[1,2]},{description:`6-week beginners series`,price:14400,quantity:[1,1]},{description:`Workshop ticket`,price:4500,quantity:[1,2]},{description:`Mat rental`,price:300,quantity:[1,3]},{description:`Teacher training deposit`,price:5e4,quantity:[1,1]}],customers:[`Emma Larsen`,`Noah Fischer`,`Ava Mehta`,`Liam O’Connor`,`Sofia Rinaldi`,`Ethan Park`,`Mia Tanaka`,`Olivia Brandt`],vendors:[`Lotus Yoga Supply`,`Evergreen Mats`,`Pure Tea Co.`,`Sunrise Apparel`,`Calm Candle Works`],notes:[`Paid at the front desk.`,`Includes mat rental.`,`Renews on the first of the month.`,`Class pass applied.`,`Booked as a gift.`],terms:[`Due on receipt`,`Net 15`,`Monthly, auto-renewing`],customerNotes:[`Prefers the back row near the window.`,`Recovering from a knee injury; offer modifications.`,`Joined through the summer promotion.`,`Pays by card on the first of the month.`,`Interested in the teacher training.`],vendorNotes:[`Free shipping over $500.`,`Allow two weeks for custom colours.`,`Net 30 after delivery.`,`Samples sent on request.`,`Reorders by email on the first of the month.`],instructors:[`Priya Raman`,`Daniel Okoye`,`Hana Sato`,`Marco Bellini`],descriptions:{Event:[`Flowing breath-led practice that builds heat steadily.`,`Slow, grounding practice with long holds.`,`Heated room, steady pace, plenty of water.`,`Gentle, alignment-focused classical postures.`,`Supported poses and long rests to unwind.`,`Strong, athletic flow for experienced students.`,`Longer yin holds for the hips and spine.`,`Sixty minutes in the heat, a little faster.`],EventType:[`Linked movement and breath.`,`Passive floor poses held for minutes.`,`Practice in a heated room.`,`Slower, classical postures.`,`Props and rest to restore.`,`Safe, supported practice for expecting mothers.`,`Seated stillness and guided breath.`,`A longer session on a single theme.`],EventSeries:[`Six weeks of foundations for new students.`,`Eight mornings of steady flow.`,`A slow Sunday class, week after week.`,`A weekend of practice around the longest day.`,`The 200-hour course for future teachers.`],Place:[`Our main room with sprung floors.`,`Smaller room for workshops and private lessons.`,`Open-air deck for summer classes.`,`Tea, books and a place to wait.`,`Large hall for retreats and trainings.`]},lineQuantity:[1,2],eventNames:[`Vinyasa Flow`,`Yin Yoga`,`Hot Yoga`,`Gentle Hatha`,`Restorative Evening`,`Power Vinyasa`,`Deep Yin`,`Hot Yoga 60`],eventTypes:[`Vinyasa`,`Yin`,`Hot yoga`,`Hatha`,`Restorative`,`Prenatal`,`Meditation`,`Workshop`],seriesNames:[`6-week beginners`,`Morning flow, 8 weeks`,`Restorative Sundays`,`Summer solstice weekend`,`Teacher training, 200 h`],placeNames:[`Studio A`,`Studio B`,`Garden terrace`,`Lobby lounge`,`Retreat hall`],placeTypes:[`Studio`,`Outdoor`,`Lounge`,`Hall`],locations:[{code:`DESK`,name:`Front desk`,kind:`store`},{code:`CLOSET`,name:`Storage closet`,kind:`warehouse`}],weights:{"Event.status":{scheduled:6,completed:3,cancelled:1},"Customer.customerType":{retail:1},"Agreement.status":{accepted:6,sent:1,completed:2,cancelled:1}}},xn={id:`landscaping`,taxRate:.06,products:[{name:`Hardwood mulch, per cubic yard`,description:`Double-shredded, natural brown.`,price:4200,category:`Mulch and soil`,productType:`product`,at:0},{name:`Screened topsoil, per cubic yard`,description:`Screened to half an inch, no stones.`,price:3800,category:`Mulch and soil`,productType:`product`,at:0},{name:`Sod, per pallet`,description:`Tall fescue blend, 450 sq ft.`,price:28500,category:`Turf`,productType:`product`,at:0},{name:`Paver stones, per sq ft`,description:`Tumbled concrete pavers, grey blend.`,price:650,category:`Hardscape`,productType:`product`,at:0},{name:`Boxwood shrub, 3 gallon`,description:`Evergreen, holds a clipped shape.`,price:4500,category:`Plants`,productType:`product`,at:0},{name:`Perennials, flat of 12`,description:`Mixed sun perennials in 4-inch pots.`,price:5400,category:`Plants`,productType:`product`,at:0},{name:`Lawn fertilizer, 50 lb bag`,description:`Slow-release granular, covers 12,000 sq ft.`,price:6200,category:`Lawn care`,productType:`product`,at:1},{name:`Drip irrigation kit`,description:`Tubing, emitters and timer for one bed.`,price:8900,category:`Irrigation`,productType:`product`,at:1}],lines:[{description:`Mowing, per visit`,price:5500,quantity:[1,4]},{description:`Spring clean-up`,price:32500,quantity:[1,1]},{description:`Mulch installed, per cubic yard`,price:9500,quantity:[2,8]},{description:`Irrigation repair, per hour`,price:8500,quantity:[1,4]},{description:`Hedge trimming`,price:18e3,quantity:[1,2]},{description:`Sod installation, per pallet`,price:42e3,quantity:[1,4]},{description:`Design consultation`,price:15e3,quantity:[1,1]},{description:`Snow plowing, per visit`,price:7500,quantity:[1,4]}],customers:[`Carol Jensen`,`Mike Delaney`,`Angela Ruiz`,`Steve Kowalski`,`Denise Thompson`,`Birchwood Property Management`,`Fox Hollow Homeowners Association`,`Grace Lutheran Church`],vendors:[`Green Valley Nursery`,`Ridge Stone & Mulch Yard`,`Clearwater Irrigation Supply`,`Hilltop Equipment Sales`,`Prairie Seed & Fertilizer`],notes:[`Gate code is on the customer record.`,`Dog in the back yard; close the gate.`,`Haul away all clippings and debris.`,`Price assumes two crew for one day.`,`Leave the invoice in the mailbox.`],terms:[`Net 15`,`Due on receipt`,`Net 30`],customerNotes:[`Mow on Thursdays; no visits before 8 a.m.`,`Bills go to the property manager, not the tenant.`,`Wants the beds edged every visit.`,`Irrigation controller is in the garage.`,`Board approves anything over $2,000.`],vendorNotes:[`Plant material guaranteed for one season.`,`Bulk mulch loaded by the yard; bring a tarp.`,`Parts counter opens at 6:30 a.m.`,`Mower service takes a week in spring.`,`Early-order discount through February.`],instructors:[`Jorge Castillo`,`Brett Hanlon`,`Tasha Williams`],descriptions:{Event:[`Mow, trim and blow off the walks.`,`Rake out the beds, cut back perennials and haul debris.`,`Edge the beds and spread fresh mulch.`,`Run each zone, adjust heads and fix leaks.`,`Thin and shape the trees before the leaves come in.`,`Mow, trim and blow off the walks.`,`Rake out the beds, cut back perennials and haul debris.`,`Edge the beds and spread fresh mulch.`],EventType:[`Routine cut, trim and blow-off.`,`Bed clean-up at the start of the season.`,`Edge beds and spread mulch.`,`Test and adjust the sprinkler system.`,`Prune trees and large shrubs.`,`Build patios, walks and walls.`,`Plow and salt after a snowfall.`,`Walk the property and plan the work.`],EventSeries:[`Weekly mowing on a set route.`,`Bed clean-ups in April and November.`,`Plowing whenever snow passes two inches.`,`Five fertilizer rounds from spring to fall.`,`Turn the irrigation on in May and blow it out in October.`],Place:[`A customer yard or grounds.`,`Where mulch, soil and stone are piled.`,`Where plants are picked up before a job.`,`Large commercial grounds with several buildings.`,`Where quotes are written and calls are taken.`]},lineQuantity:[1,4],eventNames:[`Weekly mowing`,`Spring clean-up`,`Mulch install`,`Irrigation check`,`Tree pruning`,`Weekly mowing`,`Spring clean-up`,`Mulch install`],eventTypes:[`Mowing`,`Spring clean-up`,`Mulch install`,`Irrigation check`,`Tree pruning`,`Hardscape`,`Snow removal`,`Consultation`],seriesNames:[`Weekly mowing routes`,`Spring and fall clean-ups`,`Snow contracts`,`Fertilizer program`,`Irrigation start-up and shut-down`],placeNames:[`Customer property`,`Materials yard`,`Nursery`,`Commercial campus`,`Office`],placeTypes:[`Residential`,`Commercial`,`Yard`,`Office`],locations:[{code:`YARD`,name:`Materials yard`,kind:`yard`},{code:`TRUCK`,name:`Crew truck`,kind:`vehicle`}],weights:{"Order.status":{completed:5,accepted:3,sent:1,draft:1},"Estimate.status":{sent:3,accepted:3,declined:1,draft:1},"Agreement.status":{accepted:6,sent:1,completed:2,cancelled:1},"Event.status":{scheduled:5,completed:4,cancelled:1},"Customer.customerType":{retail:5,wholesale:3}}},Sn={id:`salon`,taxRate:.07,products:[{name:`Moisture shampoo, 300 ml`,description:`Sulfate-free, for dry or coloured hair.`,price:2800,category:`Hair care`,productType:`product`,at:0},{name:`Moisture conditioner, 300 ml`,description:`Rinse-out conditioner, light hold.`,price:3e3,category:`Hair care`,productType:`product`,at:0},{name:`Pomade, 100 g`,description:`Medium hold, natural shine.`,price:2400,category:`Styling`,productType:`product`,at:0},{name:`Hair oil, 50 ml`,description:`Argan blend for ends and frizz.`,price:3600,category:`Treatment`,productType:`product`,at:0},{name:`Heat protectant spray, 200 ml`,description:`Shields hair to 230 C.`,price:2600,category:`Styling`,productType:`product`,at:0},{name:`Styling clay, 100 g`,description:`Strong hold, matte finish.`,price:2600,category:`Styling`,productType:`product`,at:0},{name:`Dry shampoo, 250 ml`,description:`Absorbs oil between washes.`,price:2200,category:`Hair care`,productType:`product`,at:1},{name:`Beard oil, 30 ml`,description:`Cedar and citrus, softens the beard.`,price:2e3,category:`Barber`,productType:`product`,at:1}],lines:[{description:`Women's cut and finish`,price:7500,quantity:[1,1]},{description:`Men's cut`,price:4e3,quantity:[1,1]},{description:`Full colour`,price:12500,quantity:[1,1]},{description:`Partial highlights`,price:14e3,quantity:[1,1]},{description:`Blow-dry`,price:4500,quantity:[1,1]},{description:`Beard trim`,price:2500,quantity:[1,1]},{description:`Kids' cut`,price:3e3,quantity:[1,2]},{description:`Deep conditioning treatment`,price:3500,quantity:[1,1]}],customers:[`Rachel Donnelly`,`Kevin Oyelaran`,`Jasmine Torres`,`Brian Whitaker`,`Lena Hoffman`,`Andre Beaulieu`,`Megan Choi`,`Patrick Nolan`],vendors:[`Northstar Salon Supply`,`Chroma Colour Co.`,`Fresh Fold Towel Service`,`Studio Line Salon Furniture`,`Edgeworks Shear Sharpening`],notes:[`Paid at the front desk.`,`Retail added to the ticket at checkout.`,`Tip left in cash.`,`Gift card applied.`,`Rebooked before leaving.`],terms:[`Due on receipt`,`Net 15`,`Prepaid package`],customerNotes:[`Allergic to PPD; patch test before colour.`,`Likes the back tapered short, longer on top.`,`Formula card is in the colour bar drawer.`,`Prefers Saturday mornings with the same stylist.`,`Brings her two kids for cuts every eight weeks.`],vendorNotes:[`Orders over $300 ship free.`,`Rep visits the first Tuesday of the month.`,`Towels swapped every Monday.`,`Chair parts take three weeks.`,`Shears picked up and returned the same week.`],instructors:[`Nicole Ferreira`,`Darnell Hayes`,`Sam Lindqvist`,`Yuki Mori`],descriptions:{Event:[`Consult, cut and a finished style.`,`Root touch-up or an all-over change.`,`Foils around the face and part line.`,`Wash and a round-brush finish.`,`Shape the beard with clippers and a razor edge.`,`Consult, cut and a finished style.`,`Root touch-up or an all-over change.`,`Foils around the face and part line.`],EventType:[`Cut and finish for any length.`,`Single-process colour, roots or all over.`,`Foil highlights, partial or full.`,`Wash and style, no cut.`,`Clipper and razor beard shaping.`,`A quick cut for children under twelve.`,`Smoothing treatment, about three hours.`,`Talk through a change before booking it.`],EventSeries:[`The same slot every six weeks.`,`No bookings; first come, first served.`,`Hair for the bride and her party on the day.`,`Root touch-ups and glosses between full colours.`,`Discounted cuts for students after 5 p.m.`],Place:[`First chair by the window.`,`Second chair, nearest the basins.`,`Where colour is mixed and applied.`,`Two reclining basins at the back.`,`Front desk, retail shelf and waiting area.`]},lineQuantity:[1,2],eventNames:[`Cut and finish`,`Root colour`,`Face-frame highlights`,`Wash and blow-dry`,`Beard trim`,`Cut and finish`,`Root colour`,`Face-frame highlights`],eventTypes:[`Haircut`,`Colour`,`Highlights`,`Blow-dry`,`Beard trim`,`Kids' cut`,`Keratin treatment`,`Consultation`],seriesNames:[`Standing six-week appointments`,`Saturday walk-ins`,`Bridal parties`,`Colour maintenance`,`Student evenings`],placeNames:[`Chair 1`,`Chair 2`,`Colour bar`,`Wash basins`,`Reception`],placeTypes:[`Chair`,`Colour bar`,`Basins`,`Reception`],locations:[{code:`RETAIL`,name:`Retail shelf`,kind:`store`},{code:`BACKBAR`,name:`Backbar`,kind:`warehouse`}],weights:{"Order.status":{completed:7,accepted:1,sent:1,draft:1},"Event.status":{scheduled:5,completed:4,cancelled:1},"Customer.customerType":{retail:1},"Payment.method":{credit_card:7,cash:2,other:1}}},Cn={id:`roaster`,taxRate:.0725,products:[{name:`House espresso, 12 oz`,description:`Medium-dark blend for espresso and milk drinks.`,price:1700,category:`Roasted coffee`,productType:`product`,at:0},{name:`Ethiopia Yirgacheffe, 12 oz`,description:`Washed single origin, light roast.`,price:2100,category:`Roasted coffee`,productType:`product`,at:0},{name:`Colombia Huila, 12 oz`,description:`Washed single origin, medium roast.`,price:1900,category:`Roasted coffee`,productType:`product`,at:0},{name:`Decaf Colombia, 12 oz`,description:`Sugarcane process decaf, medium roast.`,price:1900,category:`Roasted coffee`,productType:`product`,at:0},{name:`Harvest blend, 12 oz`,description:`Seasonal blend; changes with the crop.`,price:1800,category:`Roasted coffee`,productType:`product`,at:0},{name:`House espresso, 5 lb`,description:`Cafe bag of the house espresso.`,price:7800,category:`Roasted coffee`,productType:`product`,at:1},{name:`Cold brew concentrate, 32 oz`,description:`Steeped 18 hours; dilute one to one.`,price:1600,category:`Cold brew`,productType:`product`,at:0},{name:`Pour-over kit`,description:`Dripper, server, filters and a 12 oz bag.`,price:5200,category:`Brewing gear`,productType:`product`,at:0},{name:`Ethiopia green, 60 kg bag`,description:`Washed Yirgacheffe, grade 1.`,price:62e3,category:`Green coffee`,productType:`material`,at:2},{name:`Colombia green, 70 kg bag`,description:`Washed Huila, supremo screen.`,price:58e3,category:`Green coffee`,productType:`material`,at:2},{name:`Brazil green, 60 kg bag`,description:`Natural process, Cerrado; blend base.`,price:42e3,category:`Green coffee`,productType:`material`,at:2},{name:`Guatemala green, 69 kg bag`,description:`Washed Huehuetenango, SHB.`,price:56e3,category:`Green coffee`,productType:`material`,at:2},{name:`Decaf green, 70 kg bag`,description:`Colombian, sugarcane process.`,price:64e3,category:`Green coffee`,productType:`material`,at:2},{name:`12 oz valve bags, case of 500`,description:`Kraft bags with one-way valve and tin tie.`,price:16500,category:`Packaging`,productType:`material`,at:1}],customers:[`Lantern Street Cafe`,`Birchwood Bakery`,`The Daily Grind`,`Fieldstone Market`,`Harbor View Bistro`,`Claire Donnelly`,`Omar Haddad`,`Jenna Kowalski`],vendors:[`Highland Green Coffee Importers`,`Equator Trading Co.`,`Pacific Rim Coffee Imports`,`Northgate Packaging Supply`,`Drum & Flame Roaster Service`],notes:[`Deliver Tuesday with the bread order.`,`Whole bean; they grind in house.`,`Standing order; confirm the Friday before.`,`Ground for drip, medium.`,`Roasted two days before shipping.`],terms:[`Net 30`,`Due on receipt`,`Net 15`],customerNotes:[`Delivery days are Tuesday and Friday.`,`Takes the house espresso in 5 lb bags only.`,`Prefers whole bean, light roasts.`,`Standing order of ten cases a month.`,`Wants cupping samples before each seasonal change.`],vendorNotes:[`Container arrives in March; samples sent ahead.`,`Spot lots ship from the warehouse in a week.`,`Pre-ship samples on request.`,`Minimum order of five cases.`,`Services the drum roaster every six months.`],lineQuantity:[1,12],locations:[{code:`SHELF`,name:`Retail shelf`,kind:`store`},{code:`ROAST`,name:`Roastery floor`,kind:`warehouse`},{code:`GREEN`,name:`Green coffee store`,kind:`warehouse`}],rowCounts:{"@happyvertical/smrt-products:Product":14},weights:{"WholesaleOrder.status":{completed:5,accepted:3,sent:1,draft:1},"Order.status":{completed:6,accepted:2,sent:1,draft:1},"ProductionOrder.status":{completed:6,accepted:3,draft:1},"Customer.customerType":{wholesale:5,dtc:2,retail:1}}},wn={id:`equipment-rental`,taxRate:.08,products:[{name:`Mini excavator, 1.7 t`,description:`Tracked mini excavator with two buckets; per day.`,price:28500,category:`Earthmoving`,productType:`product`,at:0},{name:`Plate compactor`,description:`Petrol plate compactor, 90 kg; per day.`,price:7500,category:`Compaction`,productType:`product`,at:0},{name:`Towable generator, 25 kVA`,description:`Diesel generator on a road trailer; per day.`,price:19500,category:`Power`,productType:`product`,at:0},{name:`Scissor lift, 19 ft`,description:`Electric slab scissor lift; per day.`,price:16500,category:`Access`,productType:`product`,at:0},{name:`Concrete mixer, 9 cu ft`,description:`Towable petrol mixer; per day.`,price:8900,category:`Concrete`,productType:`product`,at:0},{name:`Pressure washer, 4000 psi`,description:`Petrol hot-water washer with hose; per day.`,price:9500,category:`Cleaning`,productType:`product`,at:1},{name:`Walk-behind trencher`,description:`Cuts a 4 in trench to 36 in deep; per day.`,price:21e3,category:`Earthmoving`,productType:`product`,at:0},{name:`Scaffold tower, 20 ft`,description:`Aluminium tower with deck and rails; per day.`,price:6500,category:`Access`,productType:`product`,at:1}],lines:[{description:`Mini excavator, per day`,price:28500,quantity:[1,5]},{description:`Scissor lift, weekly rate`,price:66e3,quantity:[1,2]},{description:`Delivery and pickup`,price:15e3,quantity:[1,1]},{description:`Damage waiver`,price:3500,quantity:[1,1]},{description:`Fuel refill`,price:4500,quantity:[1,3]},{description:`Operator, per hour`,price:8500,quantity:[2,8]},{description:`Cleaning fee`,price:7500,quantity:[1,1]},{description:`Late return, per day`,price:12e3,quantity:[1,3]}],customers:[`Cedar Ridge Contracting`,`Baxter & Sons Builders`,`Greenway Landscaping`,`Brightline Event Co.`,`Parkside Property Management`,`Dale Hutchins`,`Renee Alvarado`,`Kevin Osei`],vendors:[`Midwest Equipment Dealers`,`Heavy Parts Distribution`,`Roadrunner Tire Service`,`Valley Fuel Supply`,`Hitch & Hydraulics Shop`],notes:[`Deposit held on card until return.`,`Return with a full tank or pay the refill.`,`Deliver to the site gate; call the foreman.`,`Operator booked for the first morning.`,`Extended a second week by phone.`],terms:[`Deposit on pickup, balance on return`,`Due on return`,`Net 30`],customerNotes:[`Account customer; invoice the office monthly.`,`Needs a purchase order number on every rental.`,`Picks up Saturday mornings in a half-ton truck.`,`First-time renter; walk through the controls.`,`Keeps a scissor lift on long-term hire.`],vendorNotes:[`Parts arrive next day if ordered before noon.`,`Services the fleet under the maintenance contract.`,`Comes to the yard for tyre changes.`,`Fills the bulk tank every Monday.`,`Rebuilds hydraulic cylinders in a week.`],instructors:[`Troy Bannister`,`Marisol Vega`,`Curtis Lang`],descriptions:{Event:[`Customer collects the machine at the counter.`,`Machine checked, fuel and hours noted.`,`Truck drops the machine at the site.`,`Truck picks the machine up from the site.`,`Oil, filters and greasing on the hour meter.`,`Customer collects the machine at the counter.`,`Machine checked, fuel and hours noted.`,`Truck drops the machine at the site.`],EventType:[`Customer collects from the yard.`,`Customer brings the machine back.`,`We deliver to the site.`,`We collect from the site.`,`Routine servicing on the hour meter.`,`Safety inspection with a written record.`,`Delivery to an unattended site.`,`Show a customer how the machine works.`],EventSeries:[`Servicing on the hour meter across the fleet.`,`Delivery runs each week to regular sites.`,`Annual safety inspections of lifts and trailers.`,`Check-ins on machines out longer than a month.`,`Saturday morning pickups for weekend hires.`],Place:[`Where the fleet is parked and loaded.`,`Where machines are serviced and repaired.`,`Wherever the customer is working.`,`Where machines are cleaned on return.`,`Where paperwork and deposits are done.`]},lineQuantity:[1,7],eventNames:[`Counter pickup`,`Equipment return`,`Site delivery`,`Site collection`,`Scheduled service`,`Counter pickup`,`Equipment return`,`Site delivery`],eventTypes:[`Pickup`,`Return`,`Delivery`,`Collection`,`Service`,`Inspection`,`Site drop-off`,`Demo`],seriesNames:[`Scheduled servicing`,`Weekly delivery runs`,`Annual inspections`,`Long-term rental check-ins`,`Saturday pickups`],placeNames:[`Main yard`,`Service bay`,`Customer site`,`Wash bay`,`Counter`],placeTypes:[`Yard`,`Bay`,`Site`,`Counter`],locations:[{code:`YARD`,name:`Main yard`,kind:`yard`},{code:`SHOP`,name:`Service bay`,kind:`warehouse`}],weights:{"Lease.status":{accepted:4,completed:4,sent:1,draft:1},"Estimate.status":{sent:3,accepted:3,declined:1,draft:1},"Event.status":{scheduled:5,completed:4,cancelled:1},"Customer.customerType":{retail:3,wholesale:5}}},Tn={id:`nonprofit`,taxRate:0,products:[{name:`Annual membership`,price:4500,category:`Membership`,productType:`product`,description:`One year, one adult, voting rights.`,at:0},{name:`Family membership`,price:7500,category:`Membership`,productType:`product`,description:`Two adults and children at one address.`,at:0},{name:`Student membership`,price:2e3,category:`Membership`,productType:`product`,description:`Full-time students with a valid card.`,at:0},{name:`Gala ticket`,price:8500,category:`Events`,productType:`product`,description:`Dinner, speaker and the silent auction.`,at:0},{name:`Raffle ticket`,price:500,category:`Events`,productType:`product`,description:`Drawn at the end of the gala.`,at:0},{name:`Club t-shirt`,price:2200,category:`Merchandise`,productType:`product`,description:`Cotton, club logo on the front.`,at:0},{name:`General-fund donation`,price:5e3,category:`Donations`,productType:`product`,description:`Unrestricted gift; receipt issued.`,at:0},{name:`Bronze sponsorship`,price:25e3,category:`Sponsorship`,productType:`product`,description:`Logo on the newsletter for a year.`,at:0}],lines:[{description:`Annual dues`,price:4500,quantity:[1,1]},{description:`Family dues`,price:7500,quantity:[1,1]},{description:`Student dues`,price:2e3,quantity:[1,1]},{description:`Donation`,price:5e3,quantity:[1,1]},{description:`Gala ticket`,price:8500,quantity:[1,4]},{description:`Sponsorship`,price:25e3,quantity:[1,1]},{description:`Workshop fee`,price:1500,quantity:[1,1]},{description:`Memorial gift`,price:1e4,quantity:[1,1]}],customers:[`Margaret Hollis`,`Devon Achebe`,`Ruth Kowalski`,`Sam Delacroix`,`Nora Lindqvist`,`Victor Osei`,`Jean Macpherson`,`Harbourview Hardware`],vendors:[`Elm Street Hall Rentals`,`Quick Copy Printing`,`Maple Lane Catering`,`Shieldstone Insurance`,`Brightpath Web Hosting`],instructors:[`Alice Fenwick`,`Raj Bhattacharya`,`Carol Nguyen`],notes:[`Renewal reminder sent in March.`,`Gift aid declaration on file.`,`Given in memory of a founding member.`,`Paid in cash at the AGM.`,`Receipt mailed with the newsletter.`],terms:[`Due on receipt`,`Net 30`,`Renews each January`],customerNotes:[`Member since 2009; prefers the paper newsletter.`,`Volunteers at every clean-up; bring extra gloves.`,`Pays dues by cheque at the AGM.`,`Asked not to be listed as a donor.`,`Sponsor contact is the shop manager.`],vendorNotes:[`Hall must be booked six weeks ahead.`,`Charity discount on runs over 500.`,`Confirm numbers the Monday before.`,`Policy renews in October; get three quotes.`,`Invoices the treasurer by email each year.`],lineQuantity:[1,1],descriptions:{Event:[`Annual report, elections and the budget vote.`,`A morning of hands-on help on the grounds.`,`Raffle, bake table and a plant sale.`,`Open evening for members and anyone curious.`,`Litter pick along the river path, gloves provided.`,`Annual report, elections and the budget vote.`,`A morning of hands-on help on the grounds.`,`Raffle, bake table and a plant sale.`],EventType:[`A formal meeting with minutes.`,`A day of volunteer work.`,`An event that raises money for the fund.`,`An informal gathering for members.`,`Picking up litter and clearing paths.`,`The board, in private session.`,`A teaching session on a skill.`,`Food and company, no agenda.`],EventSeries:[`First Tuesday of the month, all welcome.`,`The board meets every other month.`,`Four clean-ups a year, one a season.`,`Our biggest fundraiser, every autumn.`,`Second Saturday work parties.`],Place:[`Rented hall with a kitchen and chairs for 120.`,`Small room at the back of the hall.`,`Park along the river, meet at the footbridge.`,`Free meeting room, book through the front desk.`,`A member hosts; address in the newsletter.`]},eventNames:[`Annual general meeting`,`Volunteer Saturday`,`Spring fundraiser`,`Monthly meetup`,`River clean-up`,`Annual general meeting`,`Volunteer Saturday`,`Spring fundraiser`],eventTypes:[`Meeting`,`Volunteer day`,`Fundraiser`,`Meetup`,`Clean-up`,`Board meeting`,`Workshop`,`Social`],seriesNames:[`Monthly meetup`,`Board meetings`,`Quarterly clean-ups`,`Annual gala`,`Volunteer Saturdays`],placeNames:[`Community hall`,`Meeting room`,`Riverside park`,`Public library`,`Member's garden`],placeTypes:[`Hall`,`Room`,`Park`,`Library`],locations:[{code:`HALL`,name:`Community hall storage`,kind:`warehouse`},{code:`DESK`,name:`Welcome desk`,kind:`store`}],weights:{"Agreement.status":{accepted:6,sent:1,completed:2,cancelled:1},"Event.status":{scheduled:5,completed:4,cancelled:1},"Payment.method":{check:3,credit_card:4,bank_transfer:2,cash:1},"Invoice.status":{paid:5,sent:2,overdue:1,draft:1},"Customer.customerType":{retail:1}}},En={id:`agency`,taxRate:0,products:[{name:`Brand identity package`,price:12e5,category:`Brand`,productType:`product`,description:`Logo, type, colour and a short guide.`,at:0},{name:`Website design phase`,price:85e4,category:`Digital`,productType:`product`,description:`Wireframes through final screens.`,at:0},{name:`Strategy workshop day`,price:32e4,category:`Strategy`,productType:`product`,description:`One day with the client team, write-up after.`,at:0},{name:`Monthly retainer`,price:6e5,category:`Retainer`,productType:`product`,description:`Forty hours a month, rolled for one month.`,at:0},{name:`Research and discovery sprint`,price:45e4,category:`Strategy`,productType:`product`,description:`Two weeks of interviews and a findings deck.`,at:0},{name:`Pitch deck design`,price:28e4,category:`Design`,productType:`product`,description:`Up to twenty slides, two rounds.`,at:0},{name:`Copywriting, per page`,price:45e3,category:`Content`,productType:`product`,description:`Draft, one revision, final.`,at:0},{name:`Print production coordination`,price:9e4,category:`Print`,productType:`product`,description:`Quotes, proofs and press check.`,at:0}],lines:[{description:`Design, per hour`,price:15e3,quantity:[4,40]},{description:`Strategy workshop day`,price:32e4,quantity:[1,1]},{description:`Brand identity package`,price:12e5,quantity:[1,1]},{description:`Website design, phase 1`,price:85e4,quantity:[1,1]},{description:`Monthly retainer`,price:6e5,quantity:[1,1]},{description:`Research and discovery`,price:45e4,quantity:[1,1]},{description:`Copywriting, per page`,price:45e3,quantity:[4,40]},{description:`Print production coordination`,price:9e4,quantity:[1,1]}],customers:[`Lowland Brewing Co.`,`Carver & Ostrowski LLP`,`Birch Street Family Clinic`,`Parcelwise Software`,`Department of Geography, Harlow University`,`Visit Port Ellery`,`Stave & Grain Furniture`,`Northgate Food Bank`],vendors:[`Halftone Press`,`Ines Marchetti Photography`,`Kerning House Type Foundry`,`Stackline Hosting`,`Owen Tsai, developer`],instructors:[`Jordan Blake`,`Priya Sethi`,`Marcus Lindgren`],notes:[`Scope change agreed by email on the 12th.`,`Awaiting client approval on round two.`,`Billable to the retainer, not the project.`,`Receipts attached for print and courier.`,`Final files released on payment.`],terms:[`Net 30`,`Net 15`,`50% deposit, balance on delivery`],customerNotes:[`Marketing lead approves; the owner signs.`,`Needs a PO number on every invoice.`,`Quarterly budget; send estimates in the first week.`,`Brand guide is in the shared folder.`,`Prefers a call to a long email.`],vendorNotes:[`Allow ten working days from approved proof.`,`Half-day minimum; travel billed at cost.`,`Licence covers one client per purchase.`,`Annual plan renews in May.`,`Books up fast; confirm dates a month ahead.`],lineQuantity:[1,1],descriptions:{Event:[`Goals, roles, timeline and how we work together.`,`Walk through the current round and collect feedback.`,`Half-day session to map the audience and the problem.`,`Thirty minutes on progress, blockers and next steps.`,`Present credentials and an approach to a prospect.`,`Goals, roles, timeline and how we work together.`,`Walk through the current round and collect feedback.`,`Half-day session to map the audience and the problem.`],EventType:[`First meeting of a project.`,`Client feedback on work in progress.`,`Working session with the client team.`,`Short recurring status call.`,`Meeting a prospective client.`,`What went well and what to change.`,`Showing finished work.`,`Studio only, no client.`],EventSeries:[`Same slot every week for each active project.`,`Fifteen minutes to start the week.`,`Hours used, hours left, what is next.`,`Capacity and pipeline for the coming quarter.`,`Afternoons kept free for pitches and proposals.`],Place:[`Our main room; projector and a long table.`,`At the client, address in the calendar invite.`,`Link in the invite.`,`Desk space we rent by the day.`,`Booked through the building front desk.`]},eventNames:[`Project kickoff`,`Design review`,`Discovery workshop`,`Weekly check-in`,`New business pitch`,`Project kickoff`,`Design review`,`Discovery workshop`],eventTypes:[`Kickoff`,`Review`,`Workshop`,`Check-in`,`Pitch`,`Retrospective`,`Presentation`,`Internal`],seriesNames:[`Weekly client check-ins`,`Monday studio stand-up`,`Monthly retainer reviews`,`Quarterly planning`,`New business Fridays`],placeNames:[`Studio`,`Client office`,`Video call`,`Coworking space`,`Conference room`],placeTypes:[`Studio`,`Office`,`Online`,`Room`],locations:[{code:`STUDIO`,name:`Studio`,kind:`store`},{code:`ARCHIVE`,name:`Print archive`,kind:`warehouse`}],weights:{"Estimate.status":{accepted:4,sent:3,draft:1,declined:1},"Agreement.status":{accepted:5,sent:2,completed:2,draft:1},"Event.status":{scheduled:5,completed:4,cancelled:1},"Invoice.status":{paid:4,sent:3,overdue:1,draft:1}}},Dn={id:`plumber`,taxRate:.07,products:[{name:`Quarter-turn ball valve, 1/2"`,description:`Brass, lead-free, sweat ends.`,price:1850,category:`Valves`,productType:`product`},{name:`PEX-A pipe, 1/2" x 100 ft`,description:`Red coil for hot-water runs.`,price:6900,category:`Pipe`,productType:`product`},{name:`Toilet fill valve`,description:`Universal, adjustable height.`,price:2400,category:`Fixtures`,productType:`product`},{name:`Wax ring with flange bolts`,description:`Reinforced ring for a toilet reset.`,price:900,category:`Fixtures`,productType:`product`},{name:`Water heater anode rod`,description:`Magnesium rod, 44 in.`,price:4200,category:`Water heaters`,productType:`product`},{name:`Kitchen faucet, pull-down`,description:`Single handle, brushed nickel.`,price:18900,category:`Fixtures`,productType:`product`},{name:`P-trap kit, 1-1/2"`,description:`PVC trap with slip nuts.`,price:1300,category:`Drainage`,productType:`product`},{name:`Tank water heater, 50 gal`,description:`Gas, 40,000 BTU, 6-year warranty.`,price:98900,category:`Water heaters`,productType:`product`}],lines:[{description:`Service call and first hour`,price:14500,quantity:[1,1]},{description:`Labour, per additional hour`,price:9800,quantity:[1,4]},{description:`Emergency call-out surcharge`,price:12500,quantity:[1,1]},{description:`Drain clearing with auger`,price:19500,quantity:[1,2]},{description:`Camera inspection of sewer line`,price:27500,quantity:[1,1]},{description:`Ball valve, 1/2"`,price:1850,quantity:[1,6]},{description:`Water heater install`,price:65e3,quantity:[1,1]},{description:`Toilet rebuild kit`,price:3900,quantity:[1,2]}],customers:[`Priya Raman`,`Walt Kowalski`,`Elena Duarte`,`Marcus Bell`,`Joanne Fitch`,`Harbor View Apartments`,`Maple Street Dental`,`Corner Bistro on 5th`],vendors:[`Copperline Plumbing Supply`,`Metro Pipe & Valve`,`Brightwater Heater Distributors`,`Drainworks Tool Rental`,`Allied Fixture Wholesale`],notes:[`Shut-off is in the crawlspace by the furnace.`,`Emergency: water coming through the ceiling.`,`Tenant will let us in; call the property manager first.`,`Quoted replacing the whole trap, not just the washer.`,`Old water heater to be hauled away.`],terms:[`Due on completion`,`Net 15`,`Net 30`],customerNotes:[`Dog in the backyard; use the front door.`,`Property manager approves anything over $500.`,`Prefers a text when we are on the way.`,`Restaurant: no work during the lunch rush.`,`Water heater is under warranty until next spring.`],vendorNotes:[`Will-call counter opens at 6:30 a.m.`,`Water heaters delivered next day; haul-away extra.`,`Trade account; show the card at pickup.`,`Rentals are due back by 5 p.m.`,`Special-order fixtures take a week.`],instructors:[`Dave Ortiz`,`Shauna Riley`,`Ken Ito`],descriptions:{Event:[`Stop the leak, find the source and make it good.`,`Clear the line and check it with the camera.`,`Swap the old tank, test the relief valve and haul it away.`,`Rebuild the flush, check the flange and reset if needed.`,`Walk through the job and price it on the spot.`,`Stop the leak, find the source and make it good.`,`Clear the line and check it with the camera.`,`Swap the old tank, test the relief valve and haul it away.`],EventType:[`A leaking pipe, valve or fitting.`,`A slow or blocked drain or sewer line.`,`Install or replace a water heater.`,`Repair or replace a toilet.`,`A visit to price bigger work.`,`A yearly service under a plan.`,`An after-hours emergency.`,`Anything else the shop agrees to take on.`],EventSeries:[`Yearly flush and anode check under a service plan.`,`Grease trap and drain jetting for restaurants.`,`Common-area checks for a building.`,`Draining and blowing out lines before winter.`,`Install visits for a builder.`],Place:[`Van with the drain machine and camera.`,`Second service van.`,`Shop and parts store.`,`Big-ticket stock: heaters and fixtures.`,`Where customers pick up parts.`]},lineQuantity:[1,3],eventNames:[`Leak repair`,`Drain clearing`,`Water heater swap`,`Toilet repair`,`Estimate visit`,`Leak repair`,`Drain clearing`,`Water heater swap`],eventTypes:[`Leak repair`,`Drain clearing`,`Water heater`,`Toilet repair`,`Estimate`,`Plan service`,`Emergency`,`Other`],seriesNames:[`Water heater service plans`,`Restaurant drain program`,`Building maintenance`,`Winterizing`,`New-build rough-ins`],placeNames:[`Van 1`,`Van 2`,`Shop`,`Warehouse bay`,`Parts counter`],placeTypes:[`Van`,`Shop`,`Warehouse`,`Counter`],locations:[{code:`SHOP`,name:`Shop stock`,kind:`warehouse`},{code:`VAN1`,name:`Van 1`,kind:`vehicle`},{code:`VAN2`,name:`Van 2`,kind:`vehicle`}],weights:{"Order.status":{completed:6,accepted:3,sent:1,draft:1},"Estimate.status":{sent:3,accepted:3,declined:1,draft:1},"Agreement.status":{accepted:6,sent:1,completed:2,cancelled:1},"Event.status":{scheduled:5,completed:4,cancelled:1},"Customer.customerType":{retail:5,wholesale:3}}},On={id:`electrician`,taxRate:.0625,products:[{name:`NM-B cable, 12/2, 250 ft`,description:`Copper building wire with ground.`,price:15900,category:`Wire`,productType:`product`},{name:`20 A single-pole breaker`,description:`Plug-on breaker for most panels.`,price:1200,category:`Breakers`,productType:`product`},{name:`GFCI receptacle, 20 A`,description:`Tamper-resistant, self-testing.`,price:2600,category:`Devices`,productType:`product`},{name:`LED wafer light, 6"`,description:`Canless, 3000 K, dimmable.`,price:2200,category:`Lighting`,productType:`product`},{name:`200 A main breaker panel`,description:`40-space load center with main.`,price:42500,category:`Panels`,productType:`product`},{name:`Level 2 EV charger, 48 A`,description:`Hardwired, Wi-Fi, 25 ft cable.`,price:64900,category:`EV charging`,productType:`product`},{name:`Smoke and CO alarm`,description:`Hardwired with battery backup.`,price:4800,category:`Safety`,productType:`product`},{name:`EMT conduit, 3/4" x 10 ft`,description:`Galvanized steel, sold per stick.`,price:950,category:`Conduit`,productType:`product`}],lines:[{description:`Electrician, per hour`,price:11500,quantity:[2,8]},{description:`Apprentice, per hour`,price:6500,quantity:[2,8]},{description:`Panel upgrade to 200 A`,price:285e3,quantity:[1,1]},{description:`EV charger install`,price:95e3,quantity:[1,1]},{description:`Fault finding, first hour`,price:15500,quantity:[1,1]},{description:`GFCI receptacle`,price:2600,quantity:[1,6]},{description:`Recessed light, installed`,price:14500,quantity:[2,8]},{description:`Permit and inspection fee`,price:22500,quantity:[1,1]}],customers:[`Arjun Mehta`,`Colleen Murphy`,`Darnell Price`,`Ingrid Larsen`,`Victor Huang`,`Summit Ridge Homes`,`Lakeside Self Storage`,`Northgate Community Church`],vendors:[`Voltline Electrical Supply`,`Keystone Wire & Cable`,`Lumen Lighting Distributors`,`ChargePoint Partners Wholesale`,`City Permit Expediters`],notes:[`Panel is full; quote included a sub-panel.`,`Inspection booked; rough-in must be open.`,`Breaker trips when the dryer and microwave run together.`,`Customer supplied the light fixtures.`,`Utility disconnect scheduled for the morning.`],terms:[`Net 15`,`Due on completion`,`Net 30`],customerNotes:[`Builder account; invoice per lot.`,`Facility manager needs 48 hours notice of any shutdown.`,`Older house: knob-and-tube in the attic.`,`Wants an EV charger in the garage next year.`,`Gate code is in the work order.`],vendorNotes:[`Copper price changes weekly; confirm on order.`,`Will deliver to site on orders over $500.`,`Chargers drop-ship in three to five days.`,`Counter credit for returned unopened stock.`,`Permit runner charges per filing.`],instructors:[`Lena Brandt`,`Malik Johnson`,`Pete Szabo`],descriptions:{Event:[`Swap the panel, rebalance the circuits and label it.`,`Run the circuit and mount and commission the charger.`,`Trace the fault and make it safe the same day.`,`Meet the inspector with the walls open.`,`Run the new circuits before the drywall goes up.`,`Swap the panel, rebalance the circuits and label it.`,`Run the circuit and mount and commission the charger.`,`Trace the fault and make it safe the same day.`],EventType:[`Replace or upgrade a service panel.`,`Install a home or workplace EV charger.`,`Find and fix a fault or tripping circuit.`,`A city or insurance inspection.`,`Wire a new build or remodel before drywall.`,`Planned maintenance and testing under a contract.`,`Lighting design and fit-out.`,`Anything else the shop agrees to take on.`],EventSeries:[`Emergency lighting tests at commercial sites.`,`Quarterly checks under maintenance contracts.`,`Rough-ins for a builder, lot by lot.`,`Thermal imaging of panels each year.`,`Holiday lighting installs and removals.`],Place:[`Truck with the ladder rack and wire reels.`,`Second service truck.`,`Shop with the stock shelves.`,`Locked cage for panels and chargers.`,`Where the team loads up each morning.`]},lineQuantity:[1,4],eventNames:[`Panel upgrade`,`EV charger install`,`Fault call`,`Inspection`,`Rough-in`,`Panel upgrade`,`EV charger install`,`Fault call`],eventTypes:[`Panel upgrade`,`EV charger`,`Fault call`,`Inspection`,`Rough-in`,`Maintenance`,`Lighting`,`Other`],seriesNames:[`Emergency lighting tests`,`Maintenance contract visits`,`Builder rough-ins`,`Annual thermal scans`,`Seasonal lighting`],placeNames:[`Truck 1`,`Truck 2`,`Shop`,`Equipment cage`,`Loading dock`],placeTypes:[`Truck`,`Shop`,`Cage`,`Dock`],locations:[{code:`SHOP`,name:`Shop shelves`,kind:`warehouse`},{code:`CAGE`,name:`Equipment cage`,kind:`cage`},{code:`TRK1`,name:`Truck 1`,kind:`vehicle`}],weights:{"Order.status":{completed:5,accepted:3,sent:1,draft:1},"Estimate.status":{sent:3,accepted:3,declined:1,draft:1},"Agreement.status":{accepted:6,sent:1,completed:2,cancelled:1},"Event.status":{scheduled:5,completed:4,cancelled:1},"Customer.customerType":{retail:5,wholesale:3}}},kn={id:`painter`,taxRate:.06,products:[{name:`Interior eggshell, 1 gal`,description:`Scrubbable acrylic, tinted to order.`,price:5400,category:`Interior paint`,productType:`product`},{name:`Exterior satin, 5 gal`,description:`100% acrylic, mildew resistant.`,price:28900,category:`Exterior paint`,productType:`product`},{name:`Bonding primer, 1 gal`,description:`Sticks to glossy trim and laminate.`,price:4600,category:`Primer`,productType:`product`},{name:`Ceiling flat white, 5 gal`,description:`Low spatter, hides flashing.`,price:17500,category:`Interior paint`,productType:`product`},{name:`Painter's caulk, 10 oz`,description:`Paintable acrylic latex.`,price:450,category:`Sundries`,productType:`product`},{name:`Masking tape, 1.88" roll`,description:`Clean release for 14 days.`,price:850,category:`Sundries`,productType:`product`},{name:`Cabinet enamel, 1 qt`,description:`Self-levelling urethane alkyd.`,price:3200,category:`Trim & cabinets`,productType:`product`},{name:`Deck stain, semi-transparent, 1 gal`,description:`Oil-based, cedar tone.`,price:5900,category:`Stain`,productType:`product`}],lines:[{description:`Walls, two coats, per room`,price:42500,quantity:[1,6]},{description:`Ceilings, per room`,price:18500,quantity:[1,6]},{description:`Trim and doors, per linear foot`,price:350,quantity:[40,240]},{description:`Drywall patch and sand`,price:7500,quantity:[1,4]},{description:`Exterior siding, per side`,price:115e3,quantity:[1,4]},{description:`Cabinet refinish, per door`,price:9500,quantity:[8,30]},{description:`Pressure wash and scrape`,price:45e3,quantity:[1,1]},{description:`Paint and materials`,price:5400,quantity:[2,10]}],customers:[`Naomi Feld`,`Carlos Ibarra`,`Bethany Shaw`,`Henry Adeyemi`,`Rachel Kim`,`Oakmont Property Management`,`The Wren Boutique Hotel`,`Fairview Elementary PTA`],vendors:[`Hue & Coat Paint Store`,`ProFinish Coatings Supply`,`Valley Ladder & Scaffold`,`Drop Cloth Depot`,`Ridgeway Lumber & Hardware`],notes:[`Colour: Swiss Coffee walls, Chantilly Lace trim.`,`Deposit received; start date confirmed.`,`Lead-safe practices: house built before 1978.`,`Customer moving furniture before we arrive.`,`Second coat on the stairwell after it cures.`],terms:[`50% deposit, balance on completion`,`Net 15`,`Due on completion`],customerNotes:[`Has a cat; keep the bedroom doors closed.`,`Wants colour samples on the wall before choosing.`,`Hotel: rooms released one floor at a time.`,`Prefers low-VOC paint throughout.`,`Board approval needed for exterior colours.`],vendorNotes:[`Contractor discount on the account.`,`Tinted paint is not returnable.`,`Scaffold rented by the week; delivery extra.`,`Bulk drop cloths ship free over $200.`,`Order before noon for same-day pickup.`],instructors:[`Gina Russo`,`Theo Walsh`,`Ama Boateng`],descriptions:{Event:[`Measure each room, note repairs and choose sheens.`,`Move, mask, patch and prime before the paint goes on.`,`Two coats on walls and trim, room by room.`,`Wash, scrape and spot-prime the siding.`,`Walk the job with the customer and touch up.`,`Measure each room, note repairs and choose sheens.`,`Move, mask, patch and prime before the paint goes on.`,`Two coats on walls and trim, room by room.`],EventType:[`A visit to measure and price the job.`,`Masking, patching and priming.`,`A day of painting.`,`Washing and scraping before exterior paint.`,`The final walkthrough and touch-ups.`,`Cabinet spraying in the shop.`,`Colour consultation with samples.`,`Anything else the crew agrees to take on.`],EventSeries:[`Unit turnovers for a property manager.`,`Hotel floors, one at a time.`,`Spring exterior season.`,`School summer repaint.`,`Touch-up visits after a job.`],Place:[`Van with ladders and drop cloths.`,`Crew trailer with the sprayer.`,`Shop where cabinet doors are sprayed.`,`Store room for paint and sundries.`,`Customer site.`]},eventNames:[`Estimate visit`,`Prep day`,`Paint day`,`Exterior prep`,`Final walkthrough`,`Estimate visit`,`Prep day`,`Paint day`],eventTypes:[`Estimate`,`Prep`,`Paint`,`Exterior prep`,`Walkthrough`,`Cabinet spray`,`Colour consult`,`Other`],seriesNames:[`Apartment turnovers`,`Hotel refresh`,`Exterior season`,`School summer work`,`Touch-up visits`],placeNames:[`Van`,`Crew trailer`,`Spray shop`,`Store room`,`On site`],placeTypes:[`Vehicle`,`Shop`,`Store room`,`Site`],locations:[{code:`STORE`,name:`Store room`,kind:`warehouse`},{code:`VAN`,name:`Crew van`,kind:`vehicle`}],weights:{"Order.status":{completed:5,accepted:3,sent:1,draft:1},"Estimate.status":{sent:4,accepted:3,declined:2,draft:1},"Event.status":{scheduled:5,completed:4,cancelled:1},"Customer.customerType":{retail:5,wholesale:3}}},An={id:`roofer`,taxRate:.07,products:[{name:`Architectural shingles, bundle`,description:`Laminated, 130 mph wind rating.`,price:4300,category:`Shingles`,productType:`product`},{name:`Synthetic underlayment, roll`,description:`10 squares, walkable surface.`,price:12900,category:`Underlayment`,productType:`product`},{name:`Ice and water shield, roll`,description:`Self-adhered, for eaves and valleys.`,price:9800,category:`Underlayment`,productType:`product`},{name:`Drip edge, 10 ft`,description:`Aluminium, white.`,price:1100,category:`Flashing`,productType:`product`},{name:`Ridge vent, 4 ft`,description:`Shingle-over, filtered.`,price:1900,category:`Ventilation`,productType:`product`},{name:`Pipe boot, 3"`,description:`Lead-free, neoprene collar.`,price:1600,category:`Flashing`,productType:`product`},{name:`Roofing nails, coil, 7,200`,description:`1-1/4" galvanized, for coil guns.`,price:5600,category:`Fasteners`,productType:`product`},{name:`Seamless gutter, per foot`,description:`5" K-style, formed on site.`,price:950,category:`Gutters`,productType:`product`}],lines:[{description:`Tear-off, per square`,price:9500,quantity:[12,40]},{description:`Install shingles, per square`,price:32500,quantity:[12,40]},{description:`Replace decking, per sheet`,price:9800,quantity:[2,12]},{description:`Flashing repair at chimney`,price:45e3,quantity:[1,1]},{description:`Leak repair, minimum charge`,price:39500,quantity:[1,1]},{description:`Roof inspection with photo report`,price:17500,quantity:[1,1]},{description:`Dumpster and haul-away`,price:55e3,quantity:[1,1]},{description:`Gutter clean and reseal`,price:22500,quantity:[1,1]}],customers:[`Frank DeLuca`,`Amara Okonkwo`,`Ted Lindqvist`,`Grace Halvorsen`,`Sunil Varma`,`Pinecrest HOA`,`Westfield Business Park`,`St. Brendan Parish`],vendors:[`Summit Roofing Distributors`,`Eastside Lumber Yard`,`Gutterline Metals`,`Haul-It Dumpster Rental`,`Skyline Crane & Hoist`],notes:[`Insurance claim: adjuster meeting on site Thursday.`,`Two layers to tear off; priced extra.`,`Soft decking found around the chimney.`,`Shingle colour: Weathered Wood.`,`Tarped after the storm; full replacement quoted.`],terms:[`Net 30`,`30% deposit, balance on completion`,`Due on completion`],customerNotes:[`HOA approves colours before the job is booked.`,`Skylight leaks in heavy rain only.`,`Business park: work weekends only on the office roofs.`,`Claim number is on the work order.`,`Wants gutter guards quoted with the roof.`],vendorNotes:[`Rooftop delivery by boom truck; book two days ahead.`,`Dumpster swaps same day if called before 9 a.m.`,`Manufacturer warranty registered through them.`,`Gutter coil colours are limited; check stock.`,`Crane hire minimum is four hours.`],instructors:[`Mike Harlan`,`Rosa Jimenez`,`Kyle Benton`],descriptions:{Event:[`Walk the roof, photograph the damage and write it up.`,`Measure, check the decking and price the job.`,`Strip to the deck and dry it in the same day.`,`Lay underlayment, shingles, flashing and ridge.`,`Find the leak, reseal the flashing and test it.`,`Walk the roof, photograph the damage and write it up.`,`Measure, check the decking and price the job.`,`Strip to the deck and dry it in the same day.`],EventType:[`An inspection with a photo report.`,`A visit to measure and price.`,`Tear-off day.`,`Install day.`,`A leak or storm repair.`,`A yearly check under an agreement.`,`Gutter work.`,`Anything else the crew agrees to take on.`],EventSeries:[`Yearly inspections under maintenance agreements.`,`Storm response after a hail event.`,`Fall gutter cleaning round.`,`Phased re-roof of a business park.`,`Warranty checks a year after install.`],Place:[`Crew truck with the ladders and harnesses.`,`Dump trailer for tear-offs.`,`Yard where bundles are stored.`,`Covered rack for flashing and coil.`,`Customer site.`]},eventNames:[`Roof inspection`,`Measure-up`,`Tear-off`,`Shingle install`,`Leak repair`,`Roof inspection`,`Measure-up`,`Tear-off`],eventTypes:[`Inspection`,`Measure-up`,`Tear-off`,`Install`,`Repair`,`Agreement check`,`Gutters`,`Other`],seriesNames:[`Annual inspections`,`Storm response`,`Gutter round`,`Business park re-roof`,`Warranty checks`],placeNames:[`Crew truck`,`Dump trailer`,`Material yard`,`Metal rack`,`On site`],placeTypes:[`Vehicle`,`Trailer`,`Yard`,`Site`],locations:[{code:`YARD`,name:`Material yard`,kind:`yard`},{code:`RACK`,name:`Covered metal rack`,kind:`warehouse`}],weights:{"Order.status":{completed:5,accepted:3,sent:1,draft:1},"Estimate.status":{sent:3,accepted:3,declined:2,draft:1},"Agreement.status":{accepted:6,sent:1,completed:2,cancelled:1},"Event.status":{scheduled:5,completed:4,cancelled:1},"Customer.customerType":{retail:5,wholesale:3}}},jn={id:`music-teacher`,taxRate:0,products:[{name:`Piano method book, level 1`,description:`Lesson book with an online audio pack.`,price:1495,category:`Books`,productType:`product`},{name:`Graded exam pieces, grade 3`,description:`The current syllabus pieces with fingering.`,price:1850,category:`Sheet music`,productType:`product`},{name:`Guitar strings, light gauge`,description:`Phosphor bronze acoustic set.`,price:1200,category:`Accessories`,productType:`product`},{name:`Violin rosin`,description:`Light rosin in a cloth-lined case.`,price:900,category:`Accessories`,productType:`product`},{name:`Folding music stand`,description:`Light steel stand with a carry bag.`,price:2400,category:`Accessories`,productType:`product`},{name:`Student violin, 1/2 size`,description:`Rental outfit with bow and case; per month.`,price:2200,category:`Rental instruments`,productType:`product`,at:1},{name:`Student flute`,description:`Closed-hole rental flute; per month.`,price:3e3,category:`Rental instruments`,productType:`product`,at:1},{name:`Digital keyboard, 61 keys`,description:`Practice keyboard with stand; per month.`,price:2800,category:`Rental instruments`,productType:`product`,at:1}],lines:[{description:`Private lesson, 30 min`,price:4e3,quantity:[1,4]},{description:`Private lesson, 45 min`,price:5500,quantity:[1,4]},{description:`Private lesson, 60 min`,price:7e3,quantity:[1,4]},{description:`Fall term, weekly 30 min`,price:56e3,quantity:[1,1]},{description:`10-lesson package`,price:38e3,quantity:[1,1]},{description:`Group theory class, term`,price:18e3,quantity:[1,1]},{description:`Recital fee`,price:2500,quantity:[1,1]},{description:`Violin rental, monthly`,price:2200,quantity:[1,1]}],customers:[`Lily Chen`,`Mateo Alvarez`,`Grace Okafor`,`Oscar Lindqvist`,`Isla Murphy`,`Ravi Iyer`,`Hannah Weiss`,`Theo Marchand`],vendors:[`Allegro Sheet Music`,`Bridgeway Strings`,`Keynote Piano Service`,`Cadence Print & Copy`,`Harbor Music Supply`],instructors:[`Clara Novak`,`Samuel Adeyemi`,`Mei Lin Ong`],notes:[`Paid by the parent at the first lesson.`,`Missed lesson made up the following week.`,`Sibling discount applied.`,`Includes the recital fee.`,`Books ordered for the new term.`],terms:[`Due at the start of each month`,`Due at the start of term`,`Due on receipt`],customerNotes:[`Mother brings her on Tuesdays; father pays.`,`Preparing for the grade 3 exam in May.`,`Left-handed; uses a reversed guitar.`,`Practises best with a written weekly plan.`,`Rents a 1/2 size violin; due for a 3/4 in spring.`],vendorNotes:[`Orders before noon ship the same day.`,`Tunes the studio pianos twice a year.`,`Rental instruments serviced between terms.`,`Teacher discount on syllabus books.`,`Prints recital programs on two days’ notice.`],descriptions:{Event:[`Weekly private piano lesson.`,`Weekly private guitar lesson.`,`Theory and ear training in a small group.`,`Students play for families in the hall.`,`A run-through before the exam, with feedback.`,`A longer piano lesson for exam students.`,`A longer guitar lesson, with time for theory.`,`Note reading and rhythm for new students.`],EventType:[`One student, one teacher, at the piano.`,`One student, one teacher, guitar.`,`Small-group theory and musicianship.`,`A concert where students perform.`,`A practice exam with written notes.`,`One student, one teacher, strings.`,`A group lesson for new players.`,`A visiting teacher for a single session.`],EventSeries:[`Every Tuesday at the same time, all term.`,`Every Saturday morning, all term.`,`Ten weeks of group theory.`,`Weekly lessons over the summer.`,`Six sessions before the May exams.`],Place:[`Teaching room with the grand piano.`,`Smaller room for guitar and strings.`,`Hall for group classes and recitals.`,`Lessons over video call.`,`At the student’s home.`]},lineQuantity:[1,4],eventNames:[`Piano lesson`,`Guitar lesson`,`Group theory`,`Studio recital`,`Mock exam`,`Piano lesson, 45 min`,`Guitar lesson, 45 min`,`Theory for beginners`],eventTypes:[`Private piano`,`Private guitar`,`Group class`,`Recital`,`Mock exam`,`Private strings`,`Beginners group`,`Masterclass`],seriesNames:[`Tuesday piano, fall term`,`Saturday guitar, fall term`,`Theory, grades 1–3`,`Summer lessons`,`Exam preparation`],placeNames:[`Piano room`,`Studio B`,`Recital hall`,`Online`,`Student’s home`],placeTypes:[`Teaching room`,`Hall`,`Online`,`Home`],locations:[{code:`STUDIO`,name:`Studio shelf`,kind:`store`},{code:`RENTALS`,name:`Rental cupboard`,kind:`warehouse`}],weights:{"Event.status":{scheduled:6,completed:3,cancelled:1},"Customer.customerType":{retail:1},"Agreement.status":{accepted:6,sent:1,completed:2,cancelled:1},"Lease.status":{accepted:6,completed:2,sent:1,draft:1},"Invoice.status":{paid:5,sent:3,overdue:1,draft:1}}},Mn={id:`band`,taxRate:0,products:[{name:`Tour T-shirt`,description:`Black cotton tee with this year’s dates on the back.`,price:2500,category:`Apparel`,productType:`product`},{name:`LP, 12-inch vinyl`,description:`The new album on 180 g vinyl with a download code.`,price:3e3,category:`Records`,productType:`product`},{name:`CD, digipak`,description:`The new album on CD.`,price:1500,category:`Records`,productType:`product`},{name:`Logo hoodie`,description:`Heavyweight pullover hoodie.`,price:5e3,category:`Apparel`,productType:`product`},{name:`Screen-printed poster`,description:`Signed, numbered A2 print.`,price:2e3,category:`Prints`,productType:`product`},{name:`Knit beanie`,description:`Embroidered logo, one size.`,price:2200,category:`Apparel`,productType:`product`},{name:`Enamel pin`,description:`Hard enamel, 25 mm.`,price:800,category:`Accessories`,productType:`product`},{name:`Tote bag`,description:`Natural canvas with the album artwork.`,price:1800,category:`Accessories`,productType:`product`,at:1}],lines:[{description:`Performance fee, club show`,price:12e4,quantity:[1,1]},{description:`Wedding reception, 3 sets`,price:45e4,quantity:[1,1]},{description:`Festival set, 60 min`,price:25e4,quantity:[1,1]},{description:`Booking deposit, 50%`,price:1e5,quantity:[1,1]},{description:`Ceremony music, duo`,price:6e4,quantity:[1,1]},{description:`PA and lighting hire`,price:45e3,quantity:[1,1]},{description:`Extra set, 45 min`,price:4e4,quantity:[1,1]},{description:`Travel, per mile over 50`,price:70,quantity:[20,200]}],customers:[`The Copper Room`,`Riverside Amphitheater`,`Lantern Hall`,`Greenfield Folk Festival`,`Northside Brewing Taproom`,`Elm Street Promotions`,`Ana and Tom Whitaker`,`Harbor City Arts Council`],vendors:[`Inkwell Screen Printing`,`Groove Lab Pressing`,`Backline Rentals`,`Night Owl Van Hire`,`Loudhouse Rehearsal Rooms`],instructors:[`Jess Moreno`,`Kai Okonkwo`,`Ruth Abernathy`,`Leo Sandoval`],notes:[`Deposit received; balance due on the night.`,`Load-in at 5 pm, soundcheck at 6.`,`Rider attached: two vocal mics and a DI.`,`Merch split 85/15 with the venue.`,`Settled in cash after the show.`],terms:[`50% deposit, balance on the night`,`Due on receipt`,`Net 15`],customerNotes:[`Books for the last Friday of the month.`,`Talent buyer prefers email over calls.`,`House PA; bring our own monitors.`,`Pays by bank transfer within a week.`,`Wants the first dance learned from the recording.`],vendorNotes:[`Allow three weeks for shirts from approved proof.`,`Test pressings take six weeks.`,`Drum kit and amps by the day or week.`,`Mileage over 200 a day is extra.`,`Room booked every Tuesday, 7 to 10 pm.`],descriptions:{Event:[`Headline set at the club; doors at 8.`,`Three sets and a first dance for the reception.`,`Main-stage set on the Saturday afternoon.`,`Full run-through of the new set.`,`Free show on the taproom patio.`,`Headline show at the hall, two sets.`,`Ceremony, drinks and two evening sets.`,`Evening set on the river stage.`],EventType:[`A ticketed show at a venue.`,`A private booking for a wedding.`,`A set at a festival.`,`Practice at the rehearsal space.`,`A free or bar-paid show.`,`Opening for another act.`,`A private party or corporate event.`,`Recording at a studio.`],EventSeries:[`Last Friday of every month at the taproom.`,`Every Tuesday evening.`,`Ten dates across the region in spring.`,`Thursday nights through the summer.`,`Studio days for the next record.`],Place:[`Club venue, 300 capacity.`,`Outdoor stage by the river.`,`Room booked by the week.`,`Ballroom at the reception venue.`,`Brewery with a patio stage.`],Expense:[`Van hire for the weekend run.`,`Fuel and tolls to the festival.`,`Strings, sticks and drum heads.`,`Rehearsal room, four sessions.`,`Hotel, two rooms, one night.`,`Backline hire for the fly-in show.`]},eventNames:[`Copper Room headline`,`Whitaker wedding`,`Greenfield Folk Festival`,`Band rehearsal`,`Taproom patio show`,`Lantern Hall headline`,`Spring wedding`,`Riverside festival set`],eventTypes:[`Club show`,`Wedding`,`Festival`,`Rehearsal`,`Bar show`,`Support slot`,`Private event`,`Studio session`],seriesNames:[`Taproom residency`,`Tuesday rehearsals`,`Spring regional tour`,`Summer Thursdays`,`Album sessions`],placeNames:[`The Copper Room`,`Riverside Amphitheater`,`Loudhouse Room 3`,`Lakeview Ballroom`,`Northside Taproom`],placeTypes:[`Club`,`Outdoor stage`,`Rehearsal room`,`Ballroom`],locations:[{code:`CASES`,name:`Merch cases`,kind:`store`},{code:`LOCKUP`,name:`Rehearsal lock-up`,kind:`warehouse`}],weights:{"Event.status":{scheduled:6,completed:3,cancelled:1},"Estimate.status":{sent:3,accepted:3,declined:2,draft:1},"Agreement.status":{accepted:5,sent:2,completed:2,cancelled:1},"Order.status":{completed:6,accepted:2,draft:1},"Invoice.status":{paid:4,sent:3,overdue:1,draft:1}}},Nn={[_n.id]:_n,[vn.id]:vn,[yn.id]:yn,[bn.id]:bn,[xn.id]:xn,[Sn.id]:Sn,[Cn.id]:Cn,[wn.id]:wn,[Tn.id]:Tn,[En.id]:En,[Dn.id]:Dn,[On.id]:On,[kn.id]:kn,[An.id]:An,[jn.id]:jn,[Mn.id]:Mn},Pn=gn;function Y(){return Pn}function Fn(e){return Pn=(e?Nn[e]:void 0)??gn,Pn}var In;function Ln(e){In=e}function Rn(){return In??Pn.taxRate}var zn={pricesIncludeTax:!1,taxRounding:`line`,currency:`USD`},Bn=zn;function Vn(e){Bn={...zn,...e}}function Hn(){return Bn}function Un(e){let t=e>>>0;return()=>{t=t+1831565813>>>0;let e=t;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}}function X(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}var Wn=/(price|amount|cost|total|balance|fee|tax|revenue|budget|salary|wage|subtotal|discount|spend|payout|commission|credit|debit|charge|refund|fare|rent|[a-z]Minor$)/i,Gn=/((?<!dis)count|quantity|qty|percent|ratio|level)/i;function Kn(e){if(e.type!==`integer`)return!1;let t=e.ui?.format;return t===void 0?!e.system&&Wn.test(e.name)&&!Gn.test(e.name):t===`money`}var qn=[`Harbor`,`Maple`,`Summit`,`Cedar`,`Willow`,`Copper`,`Juniper`,`Atlas`,`Meadow`,`Granite`,`Lantern`,`Orchard`,`Saffron`,`Timber`,`Velvet`,`Beacon`],Jn=[`Goods`,`Supply`,`Studio`,`Works`,`Market`,`Collective`,`Trading`,`Labs`];gn.products;var Yn=[`Ada`,`Grace`,`Alan`,`Linus`,`Mae`,`Jun`,`Priya`,`Omar`],Xn=[`Nguyen`,`Garcia`,`Okafor`,`Silva`,`Kim`,`Haddad`,`Rossi`],Zn=[`Reviewed and approved by the team.`,`Waiting on a reply from the customer.`,`Imported from the previous system.`,`Scheduled for the next cycle.`,`Flagged for follow-up next week.`],Qn=Date.UTC(2026,0,1),$n=31536e6;function Z(e,t){return t[Math.floor(e()*t.length)]}function er(e,t,n){let r=t.reduce((e,t)=>e+(n[t]??0),0);if(r<=0)return Z(e,t);let i=e()*r;for(let e of t)if(i-=n[e]??0,i<0)return e;return t[t.length-1]}function tr(e){let t=Un(X(e)),n=e=>Array.from({length:e},()=>Math.floor(t()*16).toString(16)).join(``);return`${n(8)}-${n(4)}-4${n(3)}-a${n(3)}-${n(12)}`}var nr=[`Net 30`,`Net 15`,`Net 60`,`Due on receipt`,`50% deposit, balance on delivery`],rr=[`web`,`retail`,`phone`,`marketplace`,`wholesale`],ir=[`monthly`,`quarterly`,`annual`],ar=.05;function or(e,t,n=``){let r=e.name.toLowerCase();if(/terms/.test(r))return Z(t,Y().terms??nr);if(/channel/.test(r))return Z(t,rr);if(/period/.test(r))return Z(t,ir);if(/^(unit|uom)$/.test(r))return Z(t,[`each`,`hour`,`box`]);if(/email/.test(r))return`${Z(t,Yn).toLowerCase()}@example.com`;if(/(^|_)(url|link|website|href)/.test(r)||/url$/.test(r))return`https://example.com/${Z(t,qn).toLowerCase()}`;if(/phone/.test(r))return`+1-555-01${Math.floor(t()*90+10)}`;if(/(notes?|comment|message)/.test(r)){let e=Y();return Z(t,(n===`Customer`?e.customerNotes:n===`Vendor`?e.vendorNotes:void 0)??e.notes??Zn)}return/(description|summary|body|content|bio)/.test(r)?Z(t,Y().descriptions?.[n]??Zn):/(firstname|first_name)/.test(r)?Z(t,Yn):/(lastname|last_name|surname)/.test(r)?Z(t,Xn):/(tax_?id|vat|^ein$|abn|gst|registration)/.test(r)?`${Math.floor(t()*90+10)}-${Math.floor(t()*9e6+1e6)}`:/(code|sku|barcode|number|reference)/.test(r)?`${Z(t,qn).slice(0,3).toUpperCase()}-${Math.floor(t()*9e3+1e3)}`:/(status|state|stage)/.test(r)?Z(t,[`active`,`pending`,`archived`,`draft`]):/(currency)/.test(r)?Hn().currency:/(person|owner|author|contact|assignee|worker)/.test(r)?`${Z(t,Yn)} ${Z(t,Xn)}`:`${Z(t,qn)} ${Z(t,Jn)}`}var sr=`@happyvertical/smrt-profiles:Profile`,cr={"@happyvertical/smrt-profiles:Profile":13,"@happyvertical/smrt-commerce:Vendor":5},lr=`@happyvertical/smrt-commerce:Customer`;function ur(e){let t=dr.get(e);if(t)return t;let n=Array.from({length:e},(e,t)=>3+X(`customer-rows:${t}`)%4),r=[];for(let e=0;e<6;e++)n.forEach((t,n)=>{t>e&&r.push(n)});return dr.set(e,r),r}var dr=new Map;function fr(e){return(ot(e)?.model)?.fields.some(e=>(e.type===`foreignKey`||e.type===`crossPackageRef`)&&e.related===lr)??!1}function pr(e,t){return e===sr?(Y().rowCounts?.[e]??cr[e]??t)+(Y().instructors?.length??0):Y().rowCounts?.[e]??cr[e]??(fr(e)?ur(pr(lr,t)).length:t)}function mr(e,t){let n=t.rows??8,r=Y().instructors;if(e.name===`organizerId`&&r?.length)return 13+t.index%r.length;if(e.name===`profileId`)return t.modelId.endsWith(`:Vendor`)?8+t.index%5:t.modelId.endsWith(`:Customer`)?t.index:t.index%8;let i=e.related??``;if(i===lr){let e=ur(pr(lr,n));return e[t.index%e.length]??0}return t.index%(i.includes(`:`)?pr(i,n):n)}function hr(e,t,n){if(e.enum&&e.enum.length>0){let r=Y().weights?.[`${n.modelId.split(`:`).pop()}.${e.name}`];return r?er(t,e.enum,r):Z(t,e.enum)}switch(e.type){case`boolean`:return t()<.7;case`integer`:return Kn(e)?(Math.floor(t()*4950)+50)*10:/(quantity|qty|count|stock|on_?hand)/i.test(e.name)?Math.floor(t()*200):/(level|sortorder|position|order)/i.test(e.name)?Math.floor(t()*5):Math.floor(t()*100);case`decimal`:return/taxrate|vatrate/i.test(e.name)?Rn()??.05:/discountrate/i.test(e.name)?Z(t,[`5`,`10`]):/(quantity|qty)/i.test(e.name)?1+Math.floor(t()*5):Math.round(t()*1e4)/100;case`datetime`:return new Date(Qn-Math.floor(t()*$n)).toISOString();case`json`:return Array.isArray(e.default)?[]:{};case`foreignKey`:case`crossPackageRef`:return tr(`${e.related??e.name}:${mr(e,n)}`);default:return or(e,t,n.modelId.split(`:`).pop())}}function gr(e){return e.fields.filter(e=>!e.system)}var Q=864e5;function _r(e){let t=e.toLowerCase();return/^last/.test(t)?null:/(expir|enddate|endat|endsat|endedat|ends|until|closed|cancel|periodend|effectiveto|windowend|trialends|void|revoked)/.test(t)?`end`:/(due|deadline|schedul|renew|nextrun|estimated|expected|payable)/.test(t)?`due`:/(updated|modified|paid|ship|deliver|settled|resolved|completed|approved|confirmed|received|accepted|reviewed|verified|published|posted|viewed|decided|finalized)/.test(t)?`event`:/(issue|startdate|startat|startsat|startedat|periodstart|effectivedate|effectivefrom|windowstart|sentat|occurredat|requestedat|submittedat|^date$|^timestamp$|publish_date|balancefrom)/.test(t)?`start`:null}function vr(e,t,n){let r=e.fields.filter(e=>!e.system&&e.type===`datetime`&&!e.enum).flatMap(e=>{let t=_r(e.name);return t?[{field:e,stage:t}]:[]});if(r.length===0)return;let i=r.find(e=>e.stage===`start`),a=i?Date.parse(String(t[i.field.name])):Qn-Math.floor(n()*$n),o=Math.min(a+(1+Math.floor(n()*20))*Q,Qn),s=Math.max(o,a)+(14+Math.floor(n()*32))*Q,c={start:a,event:o,due:s,end:s+(30+Math.floor(n()*150))*Q};for(let{field:e,stage:n}of r)t[e.name]=new Date(c[n]).toISOString()}var $=(e,t)=>e.fields.some(e=>e.name===t);function yr(e,t,n,r){let i=e.fields.find(e=>e.name===`status`);e.id.endsWith(`:Payment`)&&i?.enum?.includes(`completed`)&&r()<.6&&(t.status=`completed`);let a=Y();br(e,t,n,a);let o=a.products[n%a.products.length];if(o){if(/:(Product|Sku)$/.test(e.id)){if($(e,`name`)&&(t.name=o.name),$(e,`price`)&&(t.price=o.price),e.id.endsWith(`:Product`)){if($(e,`description`)){let e=a.id===gn.id?`${o.name}, made in small batches.`:o.name;t.description=o.description??e}o.category&&$(e,`category`)&&(t.category=o.category),o.productType&&$(e,`productType`)&&(t.productType=o.productType)}}else if(Zt(e)&&$(e,`description`)){let e=a.lines??a.products.map(e=>({description:e.name})),n=e[Math.floor(r()*e.length)];n&&(t.description=n.description)}}}function br(e,t,n,r){let i=(e,t)=>e?.length?e[t%e.length]:void 0;if(e.id.endsWith(`:Profile`)&&$(e,`name`)){let a=n<8?i(r.customers,n):n<13?i(r.vendors,n-8):i(r.instructors,n-13);a&&(t.name=a,$(e,`email`)&&(t.email=`${a.toLowerCase().replace(/[^a-z0-9]+/g,`.`).replace(/^\.+|\.+$/g,``)}@example.com`));return}let a=e.id.split(`:`).pop()??``;if(a===`EventParticipant`){let i=r.instructors,a=!!i?.length&&n%5==0;$(e,`profileId`)&&(t.profileId=tr(`${sr}:${a&&i?13+Math.floor(n/5)%i.length:n%8}`)),$(e,`role`)&&(t.role=a?`instructor`:`attendee`);return}if($(e,`allDay`)&&typeof t.startDate==`string`){let r=Date.parse(t.startDate)-Date.parse(t.startDate)%Q+(6+n%15)*60*60*1e3;t.startDate=new Date(r).toISOString(),$(e,`endDate`)&&(t.endDate=new Date(r+36e5).toISOString())}let o={Event:r.eventNames,EventType:r.eventTypes,EventSeries:r.seriesNames,Place:r.placeNames,PlaceType:r.placeTypes}[a],s=i(o,n);s&&$(e,`name`)&&(t.name=s);let c=i(r.descriptions?.[a],n);c&&o&&$(e,`description`)&&(t.description=c)}function xr(e){let t=Y().lines;return t?.length?t[e%t.length]:void 0}function Sr(e,t,n,r){let i=Un(X(`${n}:${e.id}:${t}`)),a={id:tr(`${e.id}:${t}`)};for(let n of e.fields)n.system||(a[n.name]=hr(n,i,{modelId:e.id,index:t,rows:r}));return vr(e,a,Un(X(`${n}:${e.id}:${t}:dates`))),yr(e,a,t,i),wr(e,a,t),a}var Cr=`@happyvertical/smrt-commerce:`;function wr(e,t,n){let r=(n,r)=>{$(e,n)&&(t[n]=r)};for(let e of[`defaultTaxCodeId`,`defaultSalesTaxCodeId`,`defaultPurchaseTaxCodeId`])r(e,null);if(!e.id.startsWith(Cr))return;let i=Hn();r(`lineAmountType`,i.pricesIncludeTax?`inclusive`:`exclusive`),r(`taxRoundingScope`,i.taxRounding),r(`discountTotal`,0),e.name===`Invoice`&&r(`kind`,`invoice`),e.name===`Payment`&&r(`kind`,`payment`),r(`creditedInvoiceId`,null),r(`creditedLineId`,null),r(`creditedAmount`,0),r(`arReversalJournalId`,null),r(`partyTaxId`,null),Zt(e)&&r(`taxAmount`,0),r(`taxMode`,`inherit`),r(`taxCodeId`,null),r(`taxCodeCode`,null),r(`taxCodeName`,null),$(e,`discountType`)&&(r(`discountType`,`none`),r(`discountRate`,null),r(`discount`,0)),e.name===`Customer`&&r(`taxExempt`,n%8==7)}function Tr(e,t,n=1,r){return Array.from({length:t},(t,i)=>Sr(e,i,n,r))}var Er=new Intl.NumberFormat(`en-US`,{style:`currency`,currency:`USD`});function Dr(e){return Er.format(e/100)}var Or=(e,t)=>`${e}:${String(t)}`;function kr(e,t,n){if(t==null||t===``)return``;if(Kn(e)&&typeof t==`number`)return Dr(t);if(e.enum?.includes(String(t)))return zr(String(t));if(Rr(e)&&typeof t==`number`)return Lr(t);switch(e.type){case`boolean`:return t?`Yes`:`No`;case`datetime`:return e.showTime?String(t).slice(0,16).replace(`T`,` `):String(t).slice(0,10);case`foreignKey`:case`crossPackageRef`:return e.related&&n?.get(Or(e.related,t))||String(t).slice(0,8);case`json`:return JSON.stringify(t);default:return String(t)}}function Ar(e){let t=e.replace(/_/g,` `).replace(/([a-z0-9])([A-Z])/g,`$1 $2`).toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}function jr(e){return/(series|species)$/i.test(e)?e:/[^aeiou]y$/i.test(e)?`${e.slice(0,-1)}ies`:/(s|x|z|ch|sh)$/i.test(e)?`${e}es`:`${e}s`}function Mr(e){return/(series|species)$/i.test(e)?e:/[^aeiou]ies$/i.test(e)?`${e.slice(0,-3)}y`:/(ss|x|z|ch|sh)es$/i.test(e)?e.slice(0,-2):/[^s]s$/i.test(e)?e.slice(0,-1):e}function Nr(e,t){return(t?.trim()||Mr(e)).toLowerCase()}function Pr(e,t,n){return n&&t?.trim()?t.trim():e.toLowerCase()}function Fr(e){return`${e} ${e===1?`record`:`records`}`}function Ir(e){return Ar((e.type===`foreignKey`||e.type===`crossPackageRef`)&&/[a-z]Id$/.test(e.name)?e.name.slice(0,-2):e.name)}function Lr(e){return`${Number((e*100).toFixed(2))}%`}var Rr=e=>e.type===`decimal`&&/^(tax|discount|vat)Rate$/.test(e.name);function zr(e){return/^[a-z]{1,3}$/.test(e)?e.toUpperCase():Ar(e)}function Br(e,t){return Vr((new URLSearchParams(e).get(`p`)??``).split(`,`).filter(e=>t.has(e)))}function Vr(e){return[...new Set(e)].sort()}function Hr(e,t){let n=new Set,r=e=>{let i=t.get(e);if(i&&!n.has(e)){n.add(e);for(let e of i.dependencies)r(e)}};for(let t of e)r(t);return Vr(n)}function Ur(e,t,n){return t.filter(t=>t!==e&&n.get(t)?.dependencies.includes(e))}function Wr(e){return e.packages.length?`?p=${[...e.packages].sort().join(`,`)}`:``}function Gr(e){return new URLSearchParams(e).has(`p`)}function Kr(e,t){let n=new URLSearchParams(e);t===`recipes`?n.delete(`tab`):n.set(`tab`,t);let r=n.toString().replace(/%2C/gi,`,`);return r?`?${r}`:``}var qr=new Map(nt.packages.map(e=>[e.id,e])),Jr=new Set(qr.keys()),Yr=new class{#e=C(O([]));get ids(){return e(this.#e)}set ids(e){I(this.#e,e,!0)}has(e){return this.ids.includes(e)}requiredBy(e){return Ur(e,this.ids,qr)}fromSearch(e){this.ids=Hr(Br(e,Jr),qr)}add(...e){this.ids=Hr([...this.ids,...e],qr)}remove(...e){let t=new Set(e),n=this.ids.filter(e=>!t.has(e));n=Hr(n,qr),this.ids=Vr(n)}toggle(e){this.has(e)?this.remove(e):this.add(e)}apply(e){this.add(...(e.add??[]).filter(e=>Jr.has(e))),this.remove(...e.remove??[])}clear(){this.ids=[]}},Xr=``,Zr=`path`;function Qr(e,t=`path`){Xr=e.replace(/\/+$/,``),Zr=t}function $r(){return Xr}function ei(){return Wr({packages:Yr.ids})}function ti(e){if(Zr===`hash`)return`#${e}`;let t=ei(),n=t&&e.includes(`?`)?`${e}&${t.slice(1)}`:e+t;return`${Xr}${n}`}export{kt as $,mr as A,ln as B,gr as C,ce as Ct,X as D,Tr as E,Fn as F,un as G,pn as H,Vn as I,hn as J,Zt as K,Ln as L,Y as M,Hn as N,Kn as O,Rn as P,Nt as Q,dn as R,Un as S,pe as St,Sr as T,nn as U,cn as V,rn as W,an as X,fn as Y,on as Z,jr as _,Ge as _t,Yr as a,zt as at,ar as b,be as bt,Pr as c,mt as ct,Dr as d,at as dt,It as et,kr as f,ot as ft,Nr as g,Xe as gt,Or as h,lt as ht,Qr as i,Rt as it,pr as j,xr as k,zr as l,nt as lt,Rr as m,ct as mt,ei as n,Yt as nt,Gr as o,Kt as ot,Ar as p,it as pt,mn as q,$r as r,Ut as rt,Kr as s,Jt as st,ti as t,Lt as tt,Ir as u,st as ut,Fr as v,Ve as vt,tr as w,V as wt,Qn as x,he as xt,Q as y,Re as yt,Qt as z};