@happyvertical/smrt-planner 0.0.2 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -8
- package/app/404.html +42 -49
- package/app/_app/immutable/assets/0.DUow1OzM.css +1 -0
- package/app/_app/immutable/assets/10.CdYxvH4G.css +1 -0
- package/app/_app/immutable/assets/11.nOT5Z4Fv.css +1 -0
- package/app/_app/immutable/assets/12.F7A7zP4J.css +1 -0
- package/app/_app/immutable/assets/13.JoySu8W5.css +1 -0
- package/app/_app/immutable/assets/14.nsp62-4b.css +1 -0
- package/app/_app/immutable/assets/2.CbPiqdz5.css +1 -0
- package/app/_app/immutable/assets/3.D518dbB5.css +1 -0
- package/app/_app/immutable/assets/4.B3vt1gMJ.css +1 -0
- package/app/_app/immutable/assets/AiSetup.4fXjMpTZ.css +1 -0
- package/app/_app/immutable/assets/AppShell.DOvXbUZo.css +1 -0
- package/app/_app/immutable/assets/ConnectTools.DTleL8YA.css +1 -0
- package/app/_app/immutable/assets/FieldMapForm.C8SZ3t4N.css +1 -0
- package/app/_app/immutable/assets/ModelPage.DbXvPbHE.css +1 -0
- package/app/_app/immutable/assets/SectionActions.BE1CPmxk.css +1 -0
- package/app/_app/immutable/assets/SectionIcons.BGFcFuOf.css +1 -0
- package/app/_app/immutable/assets/SegmentedControl.BkyuoCEJ.css +1 -0
- package/app/_app/immutable/assets/app.eM0k786r.css +1 -0
- package/app/_app/immutable/assets/currency-metadata.DDyu8_ub.css +1 -0
- package/app/_app/immutable/assets/data.bGq43K60.css +1 -0
- package/app/_app/immutable/assets/feedback.xBpOq9ef.css +1 -0
- package/app/_app/immutable/assets/forms.B3_bbIMe.css +1 -0
- package/app/_app/immutable/assets/labels.BiuUjqHs.css +1 -0
- package/app/_app/immutable/assets/percent.DbwvwMhf.css +1 -0
- package/app/_app/immutable/assets/state.CJipYvSU.css +1 -0
- package/app/_app/immutable/assets/webmcp-ui-context.BnR-DUfO.css +1 -0
- package/app/_app/immutable/assets/workspace.B5Xq-5pJ.css +1 -0
- package/app/_app/immutable/chunks/1ElZWh_R.js +10 -0
- package/app/_app/immutable/chunks/B-CpwO-j.js +1 -0
- package/app/_app/immutable/chunks/{BnRri03M.js → B7KB-rhH.js} +1 -1
- package/app/_app/immutable/chunks/BUhghcIm.js +1 -0
- package/app/_app/immutable/chunks/BV3NwM01.js +1 -0
- package/app/_app/immutable/chunks/BZVZZ6VY.js +1 -0
- package/app/_app/immutable/chunks/Ba1g71Sq.js +1 -0
- package/app/_app/immutable/chunks/BeJD7_hy.js +1 -0
- package/app/_app/immutable/chunks/BiO_bqNH.js +2 -0
- package/app/_app/immutable/chunks/{DkR8_Ws6.js → BqBuCJB_.js} +2 -2
- package/app/_app/immutable/chunks/BsJoBmTA.js +1 -0
- package/app/_app/immutable/chunks/Bxbz6_Mb.js +1 -0
- package/app/_app/immutable/chunks/Bz5uCkjV.js +2 -0
- package/app/_app/immutable/chunks/BzMfoxBk.js +1 -0
- package/app/_app/immutable/chunks/CF6zSg_o.js +2 -0
- package/app/_app/immutable/chunks/CFL0B6dk.js +1 -0
- package/app/_app/immutable/chunks/CRu55ZTy.js +4 -0
- package/app/_app/immutable/chunks/{CyUMm_Wp.js → Cv2EcCr0.js} +1 -1
- package/app/_app/immutable/chunks/D-3Ri0zJ.js +1 -0
- package/app/_app/immutable/chunks/{BWPhGFHl.js → D0FW0z6R.js} +1 -1
- package/app/_app/immutable/chunks/D7d5GssF.js +1 -0
- package/app/_app/immutable/chunks/DCsSRJsN.js +1 -0
- package/app/_app/immutable/chunks/DGqV6_5v.js +1 -0
- package/app/_app/immutable/chunks/DNSRTkf6.js +11 -0
- package/app/_app/immutable/chunks/DQNX_XPY.js +1 -0
- package/app/_app/immutable/chunks/DSyIMN4M.js +1 -0
- package/app/_app/immutable/chunks/DUTtmM1Y.js +1 -0
- package/app/_app/immutable/chunks/DYuawOB3.js +980 -0
- package/app/_app/immutable/chunks/DfCLzLZc.js +1 -0
- package/app/_app/immutable/chunks/Dh5fne6n.js +1 -0
- package/app/_app/immutable/chunks/LruoUXGC.js +1 -0
- package/app/_app/immutable/chunks/ZLqixH7j.js +9 -0
- package/app/_app/immutable/chunks/_pYwB_Eb.js +4 -0
- package/app/_app/immutable/chunks/aoU3lIZI.js +1 -0
- package/app/_app/immutable/chunks/c57ZlocB.js +24 -0
- package/app/_app/immutable/chunks/h8ppmjOm.js +1 -0
- package/app/_app/immutable/chunks/jhcy_jeO.js +1 -0
- package/app/_app/immutable/chunks/vNEnXNLV.js +3 -0
- package/app/_app/immutable/chunks/vwntRvfV.js +1 -0
- package/app/_app/immutable/entry/app.D5LoTsNA.js +2 -0
- package/app/_app/immutable/entry/start.Sb_s0NGC.js +1 -0
- package/app/_app/immutable/nodes/0.Cuo9-RQc.js +9 -0
- package/app/_app/immutable/nodes/1.BW8Ar5T3.js +1 -0
- package/app/_app/immutable/nodes/10.CpLYjN7r.js +3 -0
- package/app/_app/immutable/nodes/11.BMPKD4M3.js +1 -0
- package/app/_app/immutable/nodes/12.WYpy0AHE.js +4 -0
- package/app/_app/immutable/nodes/13.BYo05X9B.js +1 -0
- package/app/_app/immutable/nodes/14.DN0MT3KB.js +1 -0
- package/app/_app/immutable/nodes/2.DM6k_pqu.js +24 -0
- package/app/_app/immutable/nodes/3.YgEwJ-vF.js +1 -0
- package/app/_app/immutable/nodes/4.A3Y6Lax0.js +1 -0
- package/app/_app/immutable/nodes/5.D9Vd85hG.js +1 -0
- package/app/_app/immutable/nodes/6.C5c56bSW.js +1 -0
- package/app/_app/immutable/nodes/7.CDBMbYlD.js +1 -0
- package/app/_app/immutable/nodes/8.8olDkDou.js +1 -0
- package/app/_app/immutable/nodes/9.CWgx__8Z.js +1 -0
- package/app/_app/version.json +1 -1
- package/app/advanced-styles/index.html +84 -0
- package/app/ai/index.html +60 -52
- package/app/blueprint/index.html +46 -53
- package/app/cookbook/index.html +46 -53
- package/app/index.html +92 -64
- package/app/m/ads/AdDeliveryTier/index.html +52 -59
- package/app/m/ads/AdEvent/index.html +52 -59
- package/app/m/ads/AdFormat/index.html +52 -59
- package/app/m/ads/AdGroup/index.html +52 -59
- package/app/m/ads/AdVariation/index.html +52 -59
- package/app/m/analytics/AnalyticsDataStream/index.html +52 -59
- package/app/m/analytics/AnalyticsEvent/index.html +52 -59
- package/app/m/analytics/AnalyticsProperty/index.html +52 -59
- package/app/m/analytics/AnalyticsReport/index.html +52 -59
- package/app/m/approvals/ApprovalEvent/index.html +52 -59
- package/app/m/approvals/ApprovalPolicy/index.html +52 -59
- package/app/m/approvals/ApprovalRequest/index.html +52 -59
- package/app/m/assets/Asset/attachments/index.html +91 -0
- package/app/m/assets/Asset/index.html +52 -59
- package/app/m/assets/AssetAssociation/index.html +53 -60
- package/app/m/assets/AssetMetafield/index.html +52 -59
- package/app/m/assets/AssetStatus/index.html +52 -59
- package/app/m/assets/AssetType/index.html +52 -59
- package/app/m/assets/Folder/index.html +52 -59
- package/app/m/chat/AgentSession/index.html +52 -59
- package/app/m/chat/ChatMessage/index.html +53 -60
- package/app/m/chat/ChatParticipant/index.html +53 -60
- package/app/m/chat/ChatReaction/index.html +52 -59
- package/app/m/chat/ChatRoom/index.html +52 -59
- package/app/m/chat/ChatThread/index.html +53 -60
- package/app/m/chat/VoiceGatewayTurn/index.html +52 -59
- package/app/m/chat/VoiceSession/index.html +52 -59
- package/app/m/commerce/Agreement/index.html +52 -59
- package/app/m/commerce/Cart/index.html +52 -59
- package/app/m/commerce/Contract/index.html +52 -59
- package/app/m/commerce/ContractLineItem/index.html +53 -60
- package/app/m/commerce/Customer/index.html +52 -59
- package/app/m/commerce/DocumentTax/index.html +89 -0
- package/app/m/commerce/Estimate/index.html +52 -59
- package/app/m/commerce/Fulfillment/index.html +52 -59
- package/app/m/commerce/FulfillmentLineItem/index.html +53 -60
- package/app/m/commerce/Invoice/index.html +52 -59
- package/app/m/commerce/InvoiceLineItem/index.html +53 -60
- package/app/m/commerce/Lease/index.html +52 -59
- package/app/m/commerce/LicenseSale/index.html +52 -59
- package/app/m/commerce/Order/index.html +52 -59
- package/app/m/commerce/Payment/index.html +52 -59
- package/app/m/commerce/PaymentAllocation/index.html +53 -60
- package/app/m/commerce/PaymentInstrument/index.html +52 -59
- package/app/m/commerce/PaymentIntent/index.html +52 -59
- package/app/m/commerce/Payout/index.html +52 -59
- package/app/m/commerce/ProductionOrder/index.html +52 -59
- package/app/m/commerce/PurchaseContract/index.html +89 -0
- package/app/m/commerce/PurchaseOrder/index.html +52 -59
- package/app/m/commerce/SalesContract/index.html +89 -0
- package/app/m/commerce/SupplierQuote/index.html +89 -0
- package/app/m/commerce/TaxCode/index.html +89 -0
- package/app/m/commerce/TaxComponent/index.html +89 -0
- package/app/m/commerce/TaxSettings/index.html +89 -0
- package/app/m/commerce/TaxSummaryReport/index.html +89 -0
- package/app/m/commerce/Vendor/index.html +52 -59
- package/app/m/commerce/WholesaleOrder/index.html +52 -59
- package/app/m/content/Content/index.html +52 -59
- package/app/m/content/ContentContribution/index.html +52 -59
- package/app/m/content/ContentContributionAttachment/index.html +52 -59
- package/app/m/content/ContentContributionRevision/index.html +52 -59
- package/app/m/content/ContentContributionType/index.html +52 -59
- package/app/m/content/ContentContributor/index.html +52 -59
- package/app/m/content/ContentCorrection/index.html +52 -59
- package/app/m/content/ContentFeedSource/index.html +52 -59
- package/app/m/content/ContentGovernanceAssignment/index.html +52 -59
- package/app/m/content/ContentGovernancePolicy/index.html +52 -59
- package/app/m/content/ContentGovernanceProfile/index.html +52 -59
- package/app/m/content/ContentReference/index.html +52 -59
- package/app/m/content/ContentReview/index.html +52 -59
- package/app/m/content/ContentVersion/index.html +52 -59
- package/app/m/events/Event/index.html +52 -59
- package/app/m/events/EventParticipant/index.html +53 -60
- package/app/m/events/EventSeries/index.html +52 -59
- package/app/m/events/EventType/index.html +52 -59
- package/app/m/expenses/Expense/index.html +89 -0
- package/app/m/facts/Fact/index.html +52 -59
- package/app/m/facts/FactContent/index.html +52 -59
- package/app/m/facts/FactEvidence/index.html +52 -59
- package/app/m/facts/FactSource/index.html +52 -59
- package/app/m/facts/FactSubject/index.html +52 -59
- package/app/m/facts/FactTag/index.html +52 -59
- package/app/m/fields/FieldPolicy/index.html +52 -59
- package/app/m/fields/FieldPolicySuggestion/index.html +52 -59
- package/app/m/fields/FieldUsageCounter/index.html +52 -59
- package/app/m/images/Image/index.html +52 -59
- package/app/m/inventory/InventoryLocation/index.html +52 -59
- package/app/m/inventory/StockLevel/index.html +52 -59
- package/app/m/inventory/StockMovement/index.html +52 -59
- package/app/m/ledgers/Account/index.html +52 -59
- package/app/m/ledgers/Journal/index.html +52 -59
- package/app/m/ledgers/JournalEntry/index.html +53 -60
- package/app/m/manufacturing/Assembly/index.html +52 -59
- package/app/m/manufacturing/BillOfMaterials/index.html +52 -59
- package/app/m/manufacturing/BomLine/index.html +52 -59
- package/app/m/manufacturing/Operation/index.html +52 -59
- package/app/m/manufacturing/ProductionRun/index.html +52 -59
- package/app/m/manufacturing/ProductionRunCompletion/index.html +52 -59
- package/app/m/manufacturing/RoutingStep/index.html +52 -59
- package/app/m/marketing/Campaign/index.html +52 -59
- package/app/m/marketing/CampaignChannel/index.html +52 -59
- package/app/m/marketing/CampaignMetricSnapshot/index.html +52 -59
- package/app/m/messages/Account/index.html +52 -59
- package/app/m/messages/Attachment/index.html +52 -59
- package/app/m/messages/Blacklist/index.html +52 -59
- package/app/m/messages/Email/failed-sends/index.html +54 -59
- package/app/m/messages/Email/index.html +52 -59
- package/app/m/messages/Email/mailbox/index.html +54 -59
- package/app/m/messages/EmailAccount/index.html +52 -59
- package/app/m/messages/EmailAttachment/index.html +89 -0
- package/app/m/messages/EmailFolder/index.html +52 -59
- package/app/m/messages/Message/index.html +52 -59
- package/app/m/messages/MessagingEndpoint/index.html +52 -59
- package/app/m/messages/PersonaMessageRoute/index.html +52 -59
- package/app/m/messages/SlackAccount/index.html +52 -59
- package/app/m/messages/SlackMessage/index.html +52 -59
- package/app/m/messages/TelegramAccount/index.html +52 -59
- package/app/m/messages/Tweet/index.html +52 -59
- package/app/m/messages/TwitterAccount/index.html +52 -59
- package/app/m/messages/Whitelist/index.html +52 -59
- package/app/m/messages/ZulipAccount/index.html +52 -59
- package/app/m/places/Place/index.html +52 -59
- package/app/m/places/PlaceType/index.html +52 -59
- package/app/m/products/Category/index.html +52 -59
- package/app/m/products/Material/index.html +52 -59
- package/app/m/products/Product/index.html +52 -59
- package/app/m/products/Product/ingredients/index.html +54 -59
- package/app/m/products/ProductVariant/index.html +53 -60
- package/app/m/products/Sku/index.html +53 -60
- package/app/m/profiles/ApiKey/index.html +52 -59
- package/app/m/profiles/Bot/index.html +52 -59
- package/app/m/profiles/MagicLinkToken/index.html +52 -59
- package/app/m/profiles/NostrIdentity/index.html +52 -59
- package/app/m/profiles/OidcIdentity/index.html +52 -59
- package/app/m/profiles/Organization/index.html +52 -59
- package/app/m/profiles/Person/index.html +52 -59
- package/app/m/profiles/Profile/index.html +52 -59
- package/app/m/profiles/ProfileMetadata/index.html +52 -59
- package/app/m/profiles/ProfileMetafield/index.html +52 -59
- package/app/m/profiles/ProfileRelationship/index.html +52 -59
- package/app/m/profiles/ProfileRelationshipTerm/index.html +52 -59
- package/app/m/profiles/ProfileRelationshipType/index.html +52 -59
- package/app/m/profiles/ProfileType/index.html +52 -59
- package/app/m/projects/Comment/index.html +53 -60
- package/app/m/projects/Issue/index.html +52 -59
- package/app/m/projects/Label/index.html +52 -59
- package/app/m/projects/Project/index.html +52 -59
- package/app/m/projects/ProjectIntegration/index.html +52 -59
- package/app/m/projects/PullRequest/index.html +52 -59
- package/app/m/projects/Repository/index.html +52 -59
- package/app/m/properties/Property/index.html +52 -59
- package/app/m/properties/Zone/index.html +52 -59
- package/app/m/reports/RuntimeReport/index.html +52 -59
- package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +52 -59
- package/app/m/reports/SmrtReportLock/index.html +52 -59
- package/app/m/reports/SmrtReportRefreshTask/index.html +52 -59
- package/app/m/reports/SmrtReportRun/index.html +52 -59
- package/app/m/reports/SmrtReportSchedule/index.html +52 -59
- package/app/m/reports/SmrtReportWatermark/index.html +52 -59
- package/app/m/sales/AttributionException/index.html +52 -59
- package/app/m/sales/AttributionPolicy/index.html +52 -59
- package/app/m/sales/Commission/index.html +52 -59
- package/app/m/sales/CommissionAdjustment/index.html +52 -59
- package/app/m/sales/CommissionPayout/index.html +52 -59
- package/app/m/sales/CommissionPlan/index.html +52 -59
- package/app/m/sales/Earner/index.html +52 -59
- package/app/m/sales/EarnerSourceAttribution/index.html +52 -59
- package/app/m/sales/EarningEvent/index.html +52 -59
- package/app/m/sales/ExecutedAgreement/index.html +52 -59
- package/app/m/sales/Lead/index.html +52 -59
- package/app/m/sales/Opportunity/index.html +52 -59
- package/app/m/sales/OpportunityConversion/index.html +52 -59
- package/app/m/sales/PipelineDefinition/index.html +52 -59
- package/app/m/sales/PipelineStage/index.html +53 -60
- package/app/m/sales/Referral/index.html +52 -59
- package/app/m/sales/ReferralAgreement/index.html +52 -59
- package/app/m/sales/ReferralLink/index.html +52 -59
- package/app/m/sales/ReferralProgram/index.html +52 -59
- package/app/m/sales/ReferralTermSnapshot/index.html +52 -59
- package/app/m/sales/ReferralTouch/index.html +52 -59
- package/app/m/sales/Referrer/index.html +52 -59
- package/app/m/sales/SalesActivity/index.html +52 -59
- package/app/m/sales/SalesRepresentative/index.html +52 -59
- package/app/m/sites/Site/index.html +52 -59
- package/app/m/sites/SiteAgentBinding/index.html +52 -59
- package/app/m/social/OAuthState/index.html +52 -59
- package/app/m/social/SocialAccount/index.html +52 -59
- package/app/m/social/SocialPost/index.html +52 -59
- package/app/m/social/SocialPostAnalyticsSnapshot/index.html +52 -59
- package/app/m/subscriptions/BillingAdjustment/index.html +52 -59
- package/app/m/subscriptions/ClientCharge/index.html +52 -59
- package/app/m/subscriptions/CreditGrant/index.html +52 -59
- package/app/m/subscriptions/PricingRule/index.html +52 -59
- package/app/m/subscriptions/RetailCharge/index.html +52 -59
- package/app/m/subscriptions/SpendingPolicy/index.html +52 -59
- package/app/m/subscriptions/SubscriptionPlan/index.html +52 -59
- package/app/m/subscriptions/TenantSubscription/index.html +52 -59
- package/app/m/subscriptions/TenantUsageMetric/index.html +52 -59
- package/app/m/support/ServiceTimeEntry/index.html +52 -59
- package/app/m/support/SupportAiRun/index.html +52 -59
- package/app/m/support/SupportAvailability/index.html +52 -59
- package/app/m/support/SupportCase/index.html +52 -59
- package/app/m/support/SupportCaseEvent/index.html +52 -59
- package/app/m/support/SupportChannelBinding/index.html +52 -59
- package/app/m/support/SupportCharge/index.html +52 -59
- package/app/m/support/SupportCompensation/index.html +52 -59
- package/app/m/support/SupportCompensationPlan/index.html +52 -59
- package/app/m/support/SupportEscalation/index.html +52 -59
- package/app/m/support/SupportInteraction/index.html +52 -59
- package/app/m/support/SupportPlan/index.html +52 -59
- package/app/m/support/SupportPolicy/index.html +52 -59
- package/app/m/support/SupportQualification/index.html +52 -59
- package/app/m/support/SupportServiceTarget/index.html +52 -59
- package/app/m/support/SupportSpecialist/index.html +52 -59
- package/app/m/support/SupportWorkLink/index.html +52 -59
- package/app/m/tags/Tag/index.html +52 -59
- package/app/m/tags/TagAlias/index.html +52 -59
- package/app/m/timesheets/AttendanceBreak/index.html +52 -59
- package/app/m/timesheets/AttendancePunch/index.html +52 -59
- package/app/m/timesheets/AttendanceSegment/index.html +89 -0
- package/app/m/timesheets/ServiceChargeSnapshot/index.html +52 -59
- package/app/m/timesheets/ServiceCompensationSnapshot/index.html +52 -59
- package/app/m/timesheets/ServiceTimeEntry/index.html +52 -59
- package/app/m/users/Group/index.html +52 -59
- package/app/m/users/GroupMember/index.html +52 -59
- package/app/m/users/GroupRole/index.html +52 -59
- package/app/m/users/Membership/index.html +53 -60
- package/app/m/users/MembershipOverride/index.html +52 -59
- package/app/m/users/Permission/index.html +52 -59
- package/app/m/users/Role/index.html +52 -59
- package/app/m/users/RolePermission/index.html +52 -59
- package/app/m/users/Session/index.html +52 -59
- package/app/m/users/Tenant/index.html +52 -59
- package/app/m/users/TenantIntegration/index.html +52 -59
- package/app/m/users/TenantPermissionOverride/index.html +52 -59
- package/app/m/users/User/index.html +52 -59
- package/app/m/video/Character/index.html +52 -59
- package/app/m/video/CharacterAsset/index.html +52 -59
- package/app/m/video/CompositeJob/index.html +52 -59
- package/app/m/video/Performer/index.html +52 -59
- package/app/m/video/PerformerAsset/index.html +52 -59
- package/app/m/video/Scene/index.html +52 -59
- package/app/m/video/SceneAsset/index.html +52 -59
- package/app/m/video/VideoComposition/index.html +52 -59
- package/app/m/video/VideoCompositionAsset/index.html +52 -59
- package/app/m/video/VideoSequence/index.html +52 -59
- package/app/m/video/VideoSequenceAsset/index.html +52 -59
- package/app/m/video/VideoShot/index.html +52 -59
- package/app/m/video/VideoShotAsset/index.html +52 -59
- package/app/m/video/VideoShotCharacter/index.html +52 -59
- package/app/m/video/VideoWorkflow/index.html +52 -59
- package/app/m/voice/VoiceOutput/index.html +52 -59
- package/app/m/voice/VoiceProfile/index.html +52 -59
- package/app/m/voice/VoiceSample/index.html +52 -59
- package/app/packages/ads/index.html +50 -57
- package/app/packages/analytics/index.html +50 -57
- package/app/packages/approvals/index.html +50 -57
- package/app/packages/assets/index.html +50 -57
- package/app/packages/chat/index.html +50 -57
- package/app/packages/comments/index.html +50 -57
- package/app/packages/commerce/index.html +50 -57
- package/app/packages/content/index.html +50 -57
- package/app/packages/events/index.html +50 -57
- package/app/packages/expenses/index.html +50 -57
- package/app/packages/facts/index.html +50 -57
- package/app/packages/fields/index.html +50 -57
- package/app/packages/human-resources/index.html +50 -57
- package/app/packages/images/index.html +50 -57
- package/app/packages/index.html +49 -55
- package/app/packages/ingestion/index.html +85 -0
- package/app/packages/inventory/index.html +50 -57
- package/app/packages/ledgers/index.html +50 -57
- package/app/packages/manufacturing/index.html +50 -57
- package/app/packages/marketing/index.html +50 -57
- package/app/packages/messages/index.html +50 -57
- package/app/packages/places/index.html +50 -57
- package/app/packages/preferences/index.html +50 -57
- package/app/packages/products/index.html +50 -57
- package/app/packages/profiles/index.html +50 -57
- package/app/packages/projects/index.html +50 -57
- package/app/packages/properties/index.html +50 -57
- package/app/packages/reports/index.html +50 -57
- package/app/packages/sales/index.html +50 -57
- package/app/packages/sites/index.html +50 -57
- package/app/packages/social/index.html +50 -57
- package/app/packages/subscriptions/index.html +50 -57
- package/app/packages/support/index.html +50 -57
- package/app/packages/tags/index.html +50 -57
- package/app/packages/timesheets/index.html +50 -57
- package/app/packages/users/index.html +50 -57
- package/app/packages/video/index.html +50 -57
- package/app/packages/voice/index.html +50 -57
- package/app/packages/webhooks/index.html +85 -0
- package/app/recipes/account-access/help/index.html +52 -57
- package/app/recipes/account-access/index.html +57 -59
- package/app/recipes/activity/help/index.html +52 -57
- package/app/recipes/activity/index.html +57 -59
- package/app/recipes/agreements/help/index.html +52 -57
- package/app/recipes/agreements/index.html +57 -59
- package/app/recipes/analytics.reports/help/index.html +52 -57
- package/app/recipes/analytics.reports/index.html +57 -59
- package/app/recipes/assets/help/index.html +52 -57
- package/app/recipes/assets/index.html +57 -59
- package/app/recipes/billing/help/index.html +52 -57
- package/app/recipes/billing/index.html +57 -59
- package/app/recipes/chat.assistant/help/index.html +52 -57
- package/app/recipes/chat.assistant/index.html +57 -59
- package/app/recipes/comments/help/index.html +52 -57
- package/app/recipes/comments/index.html +57 -59
- package/app/recipes/commerce.customers/help/index.html +52 -57
- package/app/recipes/commerce.customers/index.html +57 -59
- package/app/recipes/commerce.estimates/help/index.html +52 -57
- package/app/recipes/commerce.estimates/index.html +57 -59
- package/app/recipes/commerce.purchases/help/index.html +52 -57
- package/app/recipes/commerce.purchases/index.html +57 -59
- package/app/recipes/commerce.sales/help/index.html +52 -57
- package/app/recipes/commerce.sales/index.html +57 -59
- package/app/recipes/commerce.vendors/help/index.html +52 -57
- package/app/recipes/commerce.vendors/index.html +57 -59
- package/app/recipes/commerce.wholesale/help/index.html +52 -57
- package/app/recipes/commerce.wholesale/index.html +57 -59
- package/app/recipes/events.calendar/help/index.html +52 -57
- package/app/recipes/events.calendar/index.html +57 -59
- package/app/recipes/expenses.tracking/help/index.html +88 -0
- package/app/recipes/expenses.tracking/index.html +92 -0
- package/app/recipes/fields.form-customization/help/index.html +52 -57
- package/app/recipes/fields.form-customization/index.html +57 -59
- package/app/recipes/ingestion/help/index.html +88 -0
- package/app/recipes/ingestion/index.html +93 -0
- package/app/recipes/integrations/help/index.html +88 -0
- package/app/recipes/integrations/index.html +92 -0
- package/app/recipes/inventory.stock/help/index.html +52 -57
- package/app/recipes/inventory.stock/index.html +57 -59
- package/app/recipes/ledgers.bookkeeping/help/index.html +52 -57
- package/app/recipes/ledgers.bookkeeping/index.html +57 -59
- package/app/recipes/messages/help/index.html +52 -57
- package/app/recipes/messages/index.html +57 -59
- package/app/recipes/products/help/index.html +52 -57
- package/app/recipes/products/index.html +57 -59
- package/app/recipes/projects.tracker/help/index.html +52 -57
- package/app/recipes/projects.tracker/index.html +57 -59
- package/app/recipes/reports.materialized/help/index.html +52 -57
- package/app/recipes/reports.materialized/index.html +57 -59
- package/app/recipes/reports.runtime/help/index.html +88 -0
- package/app/recipes/reports.runtime/index.html +92 -0
- package/app/recipes/sales.pipeline/help/index.html +52 -57
- package/app/recipes/sales.pipeline/index.html +57 -59
- package/app/recipes/tags.taxonomy/help/index.html +52 -57
- package/app/recipes/tags.taxonomy/index.html +57 -59
- package/app/recipes/team-collaboration/help/index.html +52 -57
- package/app/recipes/team-collaboration/index.html +57 -59
- package/app/recipes/timesheets.time-entries/help/index.html +88 -0
- package/app/recipes/timesheets.time-entries/index.html +92 -0
- package/app/s/custom-accounts/index.html +82 -0
- package/app/s/custom-appointments/index.html +82 -0
- package/app/s/custom-billing/index.html +47 -54
- package/app/s/custom-buying/index.html +47 -54
- package/app/s/custom-checkout/index.html +82 -0
- package/app/s/custom-classes/index.html +47 -54
- package/app/s/custom-clients/index.html +82 -0
- package/app/s/custom-events/index.html +82 -0
- package/app/s/custom-fleet/index.html +82 -0
- package/app/s/custom-giving/index.html +82 -0
- package/app/s/custom-jobs/index.html +47 -54
- package/app/s/custom-kitchen/index.html +47 -54
- package/app/s/custom-material/index.html +47 -54
- package/app/s/custom-meetings/index.html +82 -0
- package/app/s/custom-members/index.html +47 -54
- package/app/s/custom-parts/index.html +47 -54
- package/app/s/custom-rentals/index.html +82 -0
- package/app/s/custom-roastery/index.html +82 -0
- package/app/s/custom-schedule/index.html +47 -54
- package/app/s/custom-shelf/index.html +82 -0
- package/app/s/custom-shop/index.html +47 -54
- package/app/s/custom-wholesale/index.html +47 -54
- package/app/s/custom-work/index.html +82 -0
- package/app/s/custom-yard/index.html +82 -0
- package/app/s/section-access-control/index.html +47 -54
- package/app/s/section-account-security/index.html +47 -54
- package/app/s/section-accounting/index.html +47 -54
- package/app/s/section-activity/index.html +47 -54
- package/app/s/section-agreements/index.html +47 -54
- package/app/s/section-analytics/index.html +47 -54
- package/app/s/section-assets/index.html +47 -54
- package/app/s/section-billing/index.html +47 -54
- package/app/s/section-calendar/index.html +47 -54
- package/app/s/section-catalog/index.html +47 -54
- package/app/s/section-chat.assistant/index.html +47 -54
- package/app/s/section-comments/index.html +47 -54
- package/app/s/section-fields.form-customization/index.html +47 -54
- package/app/s/section-ingestion/index.html +82 -0
- package/app/s/section-integrations/index.html +82 -0
- package/app/s/section-messages/index.html +47 -54
- package/app/s/section-more/index.html +47 -54
- package/app/s/section-operations/index.html +47 -54
- package/app/s/section-projects/index.html +47 -54
- package/app/s/section-purchasing/index.html +47 -54
- package/app/s/section-reports.materialized/index.html +47 -54
- package/app/s/section-reports.runtime/index.html +82 -0
- package/app/s/section-sales/index.html +47 -54
- package/app/s/section-taxonomy/index.html +47 -54
- package/app/s/section-team/index.html +47 -54
- package/app/s/section-work/index.html +82 -0
- package/dist/ai/state.svelte.d.ts +13 -0
- package/dist/ai/state.svelte.js +33 -0
- package/dist/assistant/change.d.ts +14 -3
- package/dist/assistant/change.js +26 -3
- package/dist/assistant/engine.js +5 -1
- package/dist/assistant/prompt.js +7 -3
- package/dist/catalog/catalog.json +11263 -14455
- package/dist/catalog/generate/exclusions.d.ts +2 -0
- package/dist/catalog/generate/exclusions.js +14 -0
- package/dist/catalog/generate/extract.js +28 -7
- package/dist/catalog/types.d.ts +7 -0
- package/dist/components/AdvancedStyles.svelte +138 -0
- package/dist/components/AdvancedStyles.svelte.d.ts +6 -0
- package/dist/components/AiModelsPage.svelte +40 -0
- package/dist/components/AiModelsPage.svelte.d.ts +7 -0
- package/dist/components/AiSetup.svelte +9 -6
- package/dist/components/AiStatusIcons.svelte +8 -5
- package/dist/components/AppSettings.svelte +105 -1
- package/dist/components/BrowserAssistant.svelte +16 -17
- package/dist/components/BrowserAssistant.svelte.d.ts +2 -0
- package/dist/components/ChildRecords.svelte +61 -14
- package/dist/components/ChildRecords.svelte.d.ts +1 -0
- package/dist/components/ConnectTools.svelte +5 -2
- package/dist/components/CookbooksPanel.svelte +56 -33
- package/dist/components/CopyButton.svelte +65 -0
- package/dist/components/CopyButton.svelte.d.ts +24 -0
- package/dist/components/ExportPanel.svelte +292 -57
- package/dist/components/ExportPanel.svelte.d.ts +10 -1
- package/dist/components/FeatureCard.svelte +21 -10
- package/dist/components/FeaturesPanel.svelte +4 -1
- package/dist/components/FieldInput.svelte +6 -3
- package/dist/components/FieldMapForm.svelte +6 -10
- package/dist/components/FieldMapForm.svelte.d.ts +1 -0
- package/dist/components/FormWorkspace.svelte +80 -9
- package/dist/components/FormWorkspace.svelte.d.ts +1 -0
- package/dist/components/HeaderIconLink.svelte +86 -0
- package/dist/components/HeaderIconLink.svelte.d.ts +14 -0
- package/dist/components/HelpView.svelte +3 -0
- package/dist/components/ModelOptions.svelte +13 -2
- package/dist/components/ModelPage.svelte +33 -5
- package/dist/components/ModelPage.svelte.d.ts +4 -0
- package/dist/components/ModelWorkspace.svelte +148 -50
- package/dist/components/ModelWorkspace.svelte.d.ts +4 -0
- package/dist/components/PackagePage.svelte +96 -0
- package/dist/components/PackagePage.svelte.d.ts +9 -0
- package/dist/components/ProductMedia.svelte +95 -0
- package/dist/components/ProductMedia.svelte.d.ts +10 -0
- package/dist/components/RecipeCards.svelte +13 -1
- package/dist/components/RecipeHelp.svelte +3 -0
- package/dist/components/RecipeOptions.svelte +13 -1
- package/dist/components/RecordFeatures.svelte +22 -8
- package/dist/components/RecordView.svelte +354 -0
- package/dist/components/RecordView.svelte.d.ts +14 -0
- package/dist/components/RelationField.svelte +5 -2
- package/dist/components/SectionActions.svelte +8 -5
- package/dist/components/SectionHeading.svelte +63 -0
- package/dist/components/SectionHeading.svelte.d.ts +11 -0
- package/dist/components/SectionIcons.svelte +15 -3
- package/dist/components/SectionOverview.svelte +33 -3
- package/dist/components/SectionOverview.svelte.d.ts +4 -0
- package/dist/components/SectionPage.svelte +25 -165
- package/dist/components/SectionView.svelte +172 -0
- package/dist/components/SectionView.svelte.d.ts +18 -0
- package/dist/components/SettingsPanel.svelte +3 -9
- package/dist/components/SettingsPanel.svelte.d.ts +1 -5
- package/dist/components/ThemeBridge.svelte +80 -4
- package/dist/components/ThemeBridge.svelte.d.ts +5 -1
- package/dist/components/ThemeSection.svelte +208 -117
- package/dist/components/ThemeSection.svelte.d.ts +3 -7
- package/dist/components/VariantGridForm.svelte +9 -13
- package/dist/components/VariantGridForm.svelte.d.ts +1 -0
- package/dist/components/VoiceTyping.svelte +3 -0
- package/dist/cookbook/describe.d.ts +29 -0
- package/dist/cookbook/describe.js +164 -0
- package/dist/cookbook/file.d.ts +6 -0
- package/dist/cookbook/file.js +18 -4
- package/dist/cookbook/prompt.d.ts +49 -0
- package/dist/cookbook/prompt.js +96 -0
- package/dist/cookbook/store.svelte.d.ts +13 -0
- package/dist/cookbook/store.svelte.js +36 -8
- package/dist/core/prompt.js +10 -1
- package/dist/core/reply.d.ts +6 -1
- package/dist/data/children.d.ts +50 -6
- package/dist/data/children.js +146 -16
- package/dist/data/derived.d.ts +37 -29
- package/dist/data/derived.js +49 -30
- package/dist/data/display.d.ts +21 -8
- package/dist/data/display.js +74 -11
- package/dist/data/fakes.d.ts +48 -9
- package/dist/data/fakes.js +146 -22
- package/dist/data/labels.d.ts +7 -2
- package/dist/data/labels.js +12 -2
- package/dist/data/list-sort.d.ts +8 -0
- package/dist/data/list-sort.js +45 -0
- package/dist/data/money.d.ts +225 -0
- package/dist/data/money.js +411 -0
- package/dist/data/packs.d.ts +13 -0
- package/dist/data/packs.js +1224 -0
- package/dist/data/planner-source.js +120 -3
- package/dist/data/source.d.ts +13 -2
- package/dist/data/source.js +274 -40
- package/dist/features/palette.d.ts +2 -0
- package/dist/features/palette.js +1 -1
- package/dist/forms/stock.d.ts +1 -1
- package/dist/forms/stock.js +3 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.js +6 -1
- package/dist/kitchen/LiveKitchenBridge.svelte +73 -0
- package/dist/kitchen/LiveKitchenBridge.svelte.d.ts +8 -0
- package/dist/kitchen/live.d.ts +7 -0
- package/dist/kitchen/live.js +51 -0
- package/dist/library/icons.js +34 -0
- package/dist/library/library.json +1546 -15
- package/dist/library/pending.json +5 -0
- package/dist/library/types.d.ts +4 -0
- package/dist/motion/tokens.d.ts +6 -0
- package/dist/motion/tokens.js +32 -0
- package/dist/motion/view-transition.d.ts +13 -0
- package/dist/motion/view-transition.js +17 -0
- package/dist/overviews/definitions.d.ts +41 -2
- package/dist/overviews/definitions.js +111 -4
- package/dist/overviews/models.d.ts +10 -0
- package/dist/overviews/models.js +19 -0
- package/dist/overviews/registry.d.ts +92 -5
- package/dist/overviews/registry.js +468 -58
- package/dist/overviews/validate.js +2 -2
- package/dist/planner/Planner.svelte +374 -166
- package/dist/planner/PlannerControls.svelte +255 -0
- package/dist/planner/PlannerControls.svelte.d.ts +17 -0
- package/dist/planner/PlannerLifecycle.svelte +73 -0
- package/dist/planner/PlannerLifecycle.svelte.d.ts +9 -0
- package/dist/planner/app.svelte.d.ts +12 -2
- package/dist/planner/app.svelte.js +13 -3
- package/dist/planner/assistant.js +20 -2
- package/dist/planner/commands/adapter.js +9 -2
- package/dist/planner/commands/types.d.ts +1 -1
- package/dist/planner/commands/types.js +1 -0
- package/dist/planner/header-icons.d.ts +12 -0
- package/dist/planner/header-icons.js +12 -0
- package/dist/planner/host/HostPlanner.svelte +70 -0
- package/dist/planner/host/HostPlanner.svelte.d.ts +17 -0
- package/dist/planner/host/session.svelte.d.ts +28 -0
- package/dist/planner/host/session.svelte.js +186 -0
- package/dist/planner/routes.d.ts +49 -0
- package/dist/planner/routes.js +64 -0
- package/dist/planner/shell.d.ts +40 -0
- package/dist/planner/shell.js +56 -0
- package/dist/planner/tab.svelte.d.ts +6 -3
- package/dist/planner/tab.svelte.js +11 -4
- package/dist/planner/title.d.ts +15 -0
- package/dist/planner/title.js +21 -0
- package/dist/planner/title.svelte.d.ts +6 -0
- package/dist/planner/title.svelte.js +11 -0
- package/dist/planner/types.d.ts +39 -7
- package/dist/products/media.d.ts +20 -0
- package/dist/products/media.js +65 -0
- package/dist/recipes/help/descriptions.json +1 -3
- package/dist/recipes/index.d.ts +2 -0
- package/dist/recipes/index.js +6 -0
- package/dist/recipes/plumbing.d.ts +35 -1
- package/dist/recipes/plumbing.js +74 -0
- package/dist/screens/definition.d.ts +35 -0
- package/dist/screens/definition.js +132 -0
- package/dist/screens/relations.d.ts +17 -0
- package/dist/screens/relations.js +98 -0
- package/dist/screens/totals.d.ts +37 -0
- package/dist/screens/totals.js +65 -0
- package/dist/sections/info.d.ts +1 -1
- package/dist/sections/info.js +2 -2
- package/dist/settings/app-settings.d.ts +17 -1
- package/dist/settings/app-settings.js +40 -3
- package/dist/smrt-version.d.ts +2 -0
- package/dist/smrt-version.js +4 -0
- package/dist/styles/planner-forms.css +53 -0
- package/dist/styles/planner-lists.css +43 -0
- package/dist/theme/css-highlight.d.ts +6 -0
- package/dist/theme/css-highlight.js +34 -0
- package/dist/theme/custom-css.svelte.d.ts +34 -0
- package/dist/theme/custom-css.svelte.js +246 -0
- package/dist/theme/runtime.js +25 -5
- package/dist/theme/theme.d.ts +26 -3
- package/dist/theme/theme.js +70 -2
- package/dist/upstream/overlay.d.ts +14 -5
- package/dist/upstream/overlay.js +20 -2
- package/package.json +12 -6
- package/app/_app/immutable/assets/0.B5zXkXe_.css +0 -1
- package/app/_app/immutable/assets/10.hpcnxvK1.css +0 -1
- package/app/_app/immutable/assets/11.D7zoXfVV.css +0 -1
- package/app/_app/immutable/assets/12.CPobm1ED.css +0 -1
- package/app/_app/immutable/assets/2.CyaWdRdI.css +0 -1
- package/app/_app/immutable/assets/3.BlPQOes8.css +0 -1
- package/app/_app/immutable/assets/8.2gQeKBp_.css +0 -1
- package/app/_app/immutable/assets/9.HOPT4xtg.css +0 -1
- package/app/_app/immutable/assets/AiSetup.Cb22AigN.css +0 -1
- package/app/_app/immutable/assets/Button.DkP0qkG9.css +0 -1
- package/app/_app/immutable/assets/ConnectTools.BgIJOOGW.css +0 -1
- package/app/_app/immutable/assets/FieldMapForm.BCU-4pO4.css +0 -1
- package/app/_app/immutable/assets/ModelPage.Dd3LcMta.css +0 -1
- package/app/_app/immutable/assets/SectionActions.CTkVuNMF.css +0 -1
- package/app/_app/immutable/assets/SectionIcons.5Udq9vN-.css +0 -1
- package/app/_app/immutable/assets/SegmentedControl.B8SrQacd.css +0 -1
- package/app/_app/immutable/assets/dist.C5nHBk_O.css +0 -1
- package/app/_app/immutable/assets/feedback.BVKAwFck.css +0 -1
- package/app/_app/immutable/assets/forms.BChZ2RWM.css +0 -1
- package/app/_app/immutable/assets/percent.LH0z-ozZ.css +0 -1
- package/app/_app/immutable/assets/store.CGDwHkkF.css +0 -1
- package/app/_app/immutable/assets/ui.B1A1Zl2p.css +0 -1
- package/app/_app/immutable/assets/workspace.BIMkuZDb.css +0 -1
- package/app/_app/immutable/chunks/1okeBSoq.js +0 -1
- package/app/_app/immutable/chunks/2jFBkS1C.js +0 -1
- package/app/_app/immutable/chunks/6P9zxrzU.js +0 -1
- package/app/_app/immutable/chunks/B32EWqI8.js +0 -9
- package/app/_app/immutable/chunks/B4Kevpe0.js +0 -1
- package/app/_app/immutable/chunks/BKwRT_1p.js +0 -1
- package/app/_app/immutable/chunks/BS4h9ES-.js +0 -1
- package/app/_app/immutable/chunks/CMhpRMKg.js +0 -1
- package/app/_app/immutable/chunks/CPRHZZeW.js +0 -1
- package/app/_app/immutable/chunks/CRQ1Pmzr.js +0 -1
- package/app/_app/immutable/chunks/CWtfVMDz.js +0 -1
- package/app/_app/immutable/chunks/Chyo8rdT.js +0 -3
- package/app/_app/immutable/chunks/Ci0DUht6.js +0 -34
- package/app/_app/immutable/chunks/CmmuWmp6.js +0 -2
- package/app/_app/immutable/chunks/CrFNLK0f.js +0 -1
- package/app/_app/immutable/chunks/CsprTb3f.js +0 -2
- package/app/_app/immutable/chunks/CygC84VT.js +0 -2
- package/app/_app/immutable/chunks/D0VgZnk1.js +0 -1
- package/app/_app/immutable/chunks/DD7gpKb2.js +0 -1
- package/app/_app/immutable/chunks/DNRgqfTx.js +0 -1
- package/app/_app/immutable/chunks/DVRKjN-E.js +0 -1
- package/app/_app/immutable/chunks/D_J_XtJy.js +0 -846
- package/app/_app/immutable/chunks/Dp9GVO-9.js +0 -1
- package/app/_app/immutable/chunks/DqcD-WtP.js +0 -1
- package/app/_app/immutable/chunks/QukgIHDX.js +0 -1
- package/app/_app/immutable/chunks/WxSPP8QW.js +0 -4
- package/app/_app/immutable/chunks/Xp1g1t4n.js +0 -3
- package/app/_app/immutable/chunks/leQCwW2d.js +0 -1
- package/app/_app/immutable/chunks/p6bgzXiY.js +0 -1
- package/app/_app/immutable/entry/app.IZIJXhgq.js +0 -2
- package/app/_app/immutable/entry/start.BuaYHD1N.js +0 -1
- package/app/_app/immutable/nodes/0.m_U8WC7E.js +0 -10
- package/app/_app/immutable/nodes/1.Crw8ULhB.js +0 -1
- package/app/_app/immutable/nodes/10.1nQxyH9H.js +0 -4
- package/app/_app/immutable/nodes/11.Cw0JnQF3.js +0 -1
- package/app/_app/immutable/nodes/12.BIocA1aI.js +0 -1
- package/app/_app/immutable/nodes/2.CR5BwGnt.js +0 -17
- package/app/_app/immutable/nodes/3.1B56hgAG.js +0 -1
- package/app/_app/immutable/nodes/4.SSIC7sUh.js +0 -1
- package/app/_app/immutable/nodes/5.DgdwleDQ.js +0 -1
- package/app/_app/immutable/nodes/6.DmD9rqLU.js +0 -1
- package/app/_app/immutable/nodes/7.DdngsBmo.js +0 -1
- package/app/_app/immutable/nodes/8.D2Mszsua.js +0 -3
- package/app/_app/immutable/nodes/9.CLYsywul.js +0 -1
- package/app/m/content/Contents/index.html +0 -96
- package/app/m/preferences/UiPreferenceRecord/index.html +0 -96
- package/app/m/users/AccessRequest/index.html +0 -96
- package/app/m/users/ResourceGrant/index.html +0 -96
- package/app/m/users/UsersCliAuthRequest/index.html +0 -96
- package/app/m/users/UsersMagicLinkToken/index.html +0 -96
|
@@ -0,0 +1,980 @@
|
|
|
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,U as g,W as _,X as v,Y as y,Z as b,a as x,bt as S,ct as C,d as w,ft as T,g as E,gt as D,ht as O,mt as k,o as A,pt as j,q as M,st as N,tt as ee,u as P,v as F,vt as I}from"./vNEnXNLV.js";import"./xihTtKlq.js";import{i as L,t as R}from"./D0FW0z6R.js";import{t as z}from"./DfCLzLZc.js";y([`click`]);var te=new Set([`$$slots`,`$$events`,`$$legacy`,`src`,`name`,`size`,`status`,`class`]),ne=s(`<img class="avatar__img svelte-1nqvpc8"/>`),re=s(`<span class="avatar__initials svelte-1nqvpc8" role="img"> </span>`),ie=s(`<span><span class="avatar__sr-only svelte-1nqvpc8"> </span></span>`),ae=s(`<span><!> <!></span>`);function oe(n,a){f(a,!0);let s=x(a,`size`,3,`md`),l=x(a,`class`,3,``),u=A(a,te),d=S(!1);C(()=>{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 _=ae();E(_,()=>({class:`avatar ${s()??``} ${l()??``}`,...u,"data-smrt-component":`Avatar`}),void 0,void 0,void 0,`svelte-1nqvpc8`);var v=T(_),y=e=>{var t=ne();N(()=>{F(t,`src`,a.src),F(t,`alt`,a.name)}),b(`error`,t,()=>{I(d,!0)}),m(t),g(e,t)},w=e=>{var t=re(),n=k(t,!0);N(e=>{F(t,`aria-label`,a.name),c(n,e)},[()=>p(a.name)]),g(e,t)};t(v,t=>{a.src&&!e(d)?t(y):t(w,-1)});var D=O(v,2),j=e=>{var t=ie(),n=T(t),r=k(n,!0);o(t),N(()=>{i(t,1,`avatar__status ${a.status??``}`,`svelte-1nqvpc8`),c(r,h[a.status])}),g(e,t)};t(D,e=>{a.status&&e(j)}),o(_),g(n,_),r()}var se=new Set([`$$slots`,`$$events`,`$$legacy`,`variant`,`size`,`children`]),ce=s(`<span><!></span>`);function le(e,t){let n=x(t,`variant`,3,`default`),r=x(t,`size`,3,`md`),i=A(t,se);var s=ce();E(s,()=>({class:`smrt-badge__root smrt-badge__${n()??``} smrt-badge__${r()??``}`,...i,"data-smrt-component":`Badge`}),void 0,void 0,void 0,`svelte-1gld3x0`);var c=T(s);a(c,()=>t.children??d),o(s),g(e,s)}var ue=s(`<button type="button" class="smrt-chip__body svelte-j6916h" data-smrt-part="body"><!></button>`),de=s(`<span class="smrt-chip__body svelte-j6916h" data-smrt-part="body"><!></span>`),fe=s(`<button type="button" class="smrt-chip__close svelte-j6916h" 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>`),pe=s(`<span data-smrt-component="Chip"><!> <!></span>`);function me(e,n){f(n,!0);let s=x(n,`selectable`,3,!1),u=x(n,`selected`,3,!1),d=x(n,`closeable`,3,!1),p=x(n,`disabled`,3,!1),m=x(n,`size`,3,`md`);var h=pe();let y;var b=T(h),S=e=>{var r=ue(),i=T(r),s=e=>{var t=_(),r=j(t);a(r,()=>n.children),g(e,t)},d=e=>{var t=l();N(()=>c(t,n.label)),g(e,t)};t(i,e=>{n.children?e(s):e(d,-1)}),o(r),N(()=>{F(r,`aria-pressed`,u()),r.disabled=p()}),v(`click`,r,()=>n.onselect?.()),g(e,r)},C=e=>{var r=de(),i=T(r),s=e=>{var t=_(),r=j(t);a(r,()=>n.children),g(e,t)},u=e=>{var t=l();N(()=>c(t,n.label)),g(e,t)};t(i,e=>{n.children?e(s):e(u,-1)}),o(r),g(e,r)};t(b,e=>{s()?e(S):e(C,-1)});var w=O(b,2),E=e=>{var t=fe();N(()=>{F(t,`aria-label`,n.label?`Remove ${n.label}`:`Remove`),t.disabled=p()}),v(`click`,t,()=>n.onclose?.()),g(e,t)};t(w,e=>{d()&&e(E)}),o(h),N(()=>y=i(h,1,`smrt-chip__root smrt-chip__${m()??``}`,`svelte-j6916h`,y,{"smrt-chip__selected":u(),"smrt-chip__disabled":p(),"smrt-chip__selectable":s(),"smrt-chip__closeable":d()})),g(e,h),r()}y([`click`]);var he=s(`<details data-smrt-component="Disclosure"><summary class="svelte-3iqy00"><span> </span><span class="chevron svelte-3iqy00" aria-hidden="true">⌄</span></summary> <div class="content svelte-3iqy00"><!></div></details>`);function ge(e,n){f(n,!0);let s=x(n,`open`,15,!1),l=x(n,`disabled`,3,!1),u=x(n,`class`,3,``);function d(e){let t=e.currentTarget.open;if(l()&&t){s(!1);return}s(t),n.onopenchange?.(t)}var m=he(),h=T(m),y=T(h),S=k(y,!0);p(),o(h);var C=O(h,2),w=T(C),E=e=>{var t=_(),r=j(t);a(r,()=>n.children),g(e,t)};t(w,e=>{n.children&&e(E)}),o(C),o(m),N(()=>{i(m,1,`disclosure ${u()??``}`,`svelte-3iqy00`),F(h,`aria-disabled`,l()),c(S,n.title)}),b(`toggle`,m,d),v(`click`,h,e=>l()&&e.preventDefault()),P(`open`,`toggle`,m,s,s),g(e,m),r()}y([`click`]),y([`click`,`keydown`]),y([`focusin`,`focusout`,`keydown`]);var _e=s(`<button class="page-link nav-link first svelte-7uk7cn" type="button">« First</button>`),ve=s(`<a class="page-link nav-link first svelte-7uk7cn">« First</a>`),ye=s(`<span class="page-link nav-link disabled first svelte-7uk7cn" aria-hidden="true">« First</span>`),be=s(`<button class="page-link nav-link svelte-7uk7cn" type="button">← Prev</button>`),xe=s(`<a class="page-link nav-link svelte-7uk7cn">← Prev</a>`),Se=s(`<span class="page-link nav-link disabled svelte-7uk7cn" aria-hidden="true">← Prev</span>`),Ce=s(`<li class="page-numbers__item svelte-7uk7cn"><span class="ellipsis svelte-7uk7cn" aria-hidden="true">…</span></li>`),we=s(`<li class="page-numbers__item svelte-7uk7cn"><span class="page-link current svelte-7uk7cn" aria-current="page"> </span></li>`),Te=s(`<li class="page-numbers__item svelte-7uk7cn"><button class="page-link svelte-7uk7cn" type="button"> </button></li>`),Ee=s(`<li class="page-numbers__item svelte-7uk7cn"><a class="page-link svelte-7uk7cn"> </a></li>`),De=s(`<button class="page-link nav-link svelte-7uk7cn" type="button">Next →</button>`),Oe=s(`<a class="page-link nav-link svelte-7uk7cn">Next →</a>`),ke=s(`<span class="page-link nav-link disabled svelte-7uk7cn" aria-hidden="true">Next →</span>`),Ae=s(`<button class="page-link nav-link last svelte-7uk7cn" type="button">Last »</button>`),je=s(`<a class="page-link nav-link last svelte-7uk7cn">Last »</a>`),Me=s(`<span class="page-link nav-link disabled last svelte-7uk7cn" aria-hidden="true">Last »</span>`),Ne=s(`<nav class="pagination svelte-7uk7cn" data-smrt-component="Pagination"><!> <!> <ul class="page-numbers svelte-7uk7cn"></ul> <!> <!></nav>`);function Pe(i,a){f(a,!0);let{t:s}=R(),l=x(a,`baseUrl`,3,`/articles`),d=x(a,`aria-label`,3,`Pagination`),p=x(a,`showFirstLast`,3,!0),m=x(a,`maxVisible`,3,5);function y(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 S=n(b),C=n(()=>a.currentPage>1),w=n(()=>a.currentPage<a.totalPages),E=n(()=>a.currentPage===1),D=n(()=>a.currentPage===a.totalPages);var A=_(),M=j(A),ee=n=>{var r=Ne(),i=T(r),l=n=>{var r=_(),i=j(r),o=t=>{var n=_e();N(t=>{n.disabled=e(E),F(n,`aria-label`,t)},[()=>s(L[`ui.pagination.first_page`])]),v(`click`,n,()=>a.onPageChange(1)),g(t,n)},c=e=>{var t=ve();N((e,n)=>{F(t,`href`,e),F(t,`aria-label`,n)},[()=>y(1),()=>s(L[`ui.pagination.first_page`])]),g(e,t)},l=e=>{var t=ye();g(e,t)};t(i,t=>{a.onPageChange?t(o):e(E)?t(l,-1):t(c,1)}),g(n,r)};t(i,e=>{p()&&e(l)});var f=O(i,2),m=t=>{var n=be();N(t=>{n.disabled=!e(C),F(n,`aria-label`,t)},[()=>s(L[`ui.pagination.previous_page`])]),v(`click`,n,()=>a.onPageChange(a.currentPage-1)),g(t,n)},b=e=>{var t=xe();N((e,n)=>{F(t,`href`,e),F(t,`aria-label`,n)},[()=>y(a.currentPage-1),()=>s(L[`ui.pagination.previous_page`])]),g(e,t)},x=e=>{var t=Se();g(e,t)};t(f,t=>{a.onPageChange?t(m):e(C)?t(b,1):t(x,-1)});var A=O(f,2);u(A,21,()=>e(S),h,(n,r)=>{var i=_(),l=j(i),u=e=>{var t=Ce();g(e,t)},d=t=>{var n=we(),i=T(n),a=k(i,!0);o(n),N(t=>{F(i,`aria-label`,t),c(a,e(r))},[()=>s(L[`ui.pagination.page_current`],{page:e(r)})]),g(t,n)},f=t=>{var n=Te(),i=T(n),l=k(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)})]),v(`click`,i,()=>a.onPageChange(e(r))),g(t,n)},p=t=>{var n=Ee(),i=T(n),a=k(i,!0);o(n),N((t,n)=>{F(i,`href`,t),F(i,`aria-label`,n),c(a,e(r))},[()=>y(e(r)),()=>s(L[`ui.pagination.go_to_page`],{page:e(r)})]),g(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)}),g(n,i)}),o(A);var M=O(A,2),ee=t=>{var n=De();N(t=>{n.disabled=!e(w),F(n,`aria-label`,t)},[()=>s(L[`ui.pagination.next_page`])]),v(`click`,n,()=>a.onPageChange(a.currentPage+1)),g(t,n)},P=e=>{var t=Oe();N((e,n)=>{F(t,`href`,e),F(t,`aria-label`,n)},[()=>y(a.currentPage+1),()=>s(L[`ui.pagination.next_page`])]),g(e,t)},I=e=>{var t=ke();g(e,t)};t(M,t=>{a.onPageChange?t(ee):e(w)?t(P,1):t(I,-1)});var R=O(M,2),z=n=>{var r=_(),i=j(r),o=t=>{var n=Ae();N(t=>{n.disabled=e(D),F(n,`aria-label`,t)},[()=>s(L[`ui.pagination.last_page`],{totalPages:a.totalPages})]),v(`click`,n,()=>a.onPageChange(a.totalPages)),g(t,n)},c=e=>{var t=je();N((e,n)=>{F(t,`href`,e),F(t,`aria-label`,n)},[()=>y(a.totalPages),()=>s(L[`ui.pagination.last_page`],{totalPages:a.totalPages})]),g(e,t)},l=e=>{var t=Me();g(e,t)};t(i,t=>{a.onPageChange?t(o):e(D)?t(l,-1):t(c,1)}),g(n,r)};t(R,e=>{p()&&e(z)}),o(r),N(()=>{F(r,`data-density`,a.density),F(r,`aria-label`,d())}),g(n,r)};t(M,e=>{a.totalPages>1&&e(ee)}),g(i,A),r()}y([`click`]);var Fe=s(`<div role="dialog" tabindex="-1"><!></div>`),Ie=s(`<span data-smrt-component="Popover"><button type="button" aria-haspopup="dialog"><!></button> <!></span>`);function Le(n,s){let u=M();f(s,!0);let d=x(s,`variant`,3,`button`),p=x(s,`open`,15,!1),m=x(s,`disabled`,3,!1),h=x(s,`placement`,3,`bottom-start`),y=x(s,`closeOnOutsideClick`,3,!0),b=x(s,`class`,3,``),E=`popover-${u}`,D=S(null),k=S(null),A=S(null);async function P(t,n=!1){m()||(p(t),s.onopenchange?.(t),t&&n&&(await ee(),e(A)?.focus()))}function L(t){t.key===`Escape`&&p()&&(t.preventDefault(),P(!1),e(k)?.focus())}C(()=>{if(!p()||!y())return;let t=t=>{e(D)&&!e(D).contains(t.target)&&P(!1)};return document.addEventListener(`pointerdown`,t,!0),()=>document.removeEventListener(`pointerdown`,t,!0)});var R=Ie(),z=T(R);let te;var ne=T(z),re=e=>{var t=_(),n=j(t);a(n,()=>s.trigger),g(e,t)},ie=e=>{var t=l();N(()=>c(t,s.label)),g(e,t)};t(ne,e=>{s.trigger?e(re):e(ie,-1)}),o(z),w(z,e=>I(k,e),()=>e(k));var ae=O(z,2),oe=n=>{var r=Fe(),c=T(r),l=e=>{var t=_(),n=j(t);a(n,()=>s.children),g(e,t)};t(c,e=>{s.children&&e(l)}),o(r),w(r,e=>I(A,e),()=>e(A)),N(()=>{F(r,`id`,E),i(r,1,`popover__panel popover__panel--${h()??``}`,`svelte-cngefe`),F(r,`aria-label`,s.label)}),v(`keydown`,r,L),g(n,r)};t(ae,e=>{p()&&e(oe)}),o(R),w(R,e=>I(D,e),()=>e(D)),N(()=>{i(R,1,`popover ${b()??``}`,`svelte-cngefe`),te=i(z,1,`popover__trigger svelte-cngefe`,null,te,{"popover__trigger--icon":d()===`icon`}),F(z,`aria-label`,s.triggerLabel??(d()===`icon`?s.label:void 0)),F(z,`aria-expanded`,p()),F(z,`aria-controls`,p()?E:void 0),z.disabled=m()}),v(`click`,z,()=>P(!p(),!p())),v(`keydown`,z,L),g(n,R),r()}y([`click`,`keydown`]),y([`click`,`keydown`]);var Re=`@happyvertical/smrt-inventory`,B=`@happyvertical/smrt-products`,ze={[`${Re}:StockLevel`]:{skuId:`${B}:Sku`,locationId:`${Re}:InventoryLocation`},[`${B}:Sku`]:{productId:`${B}:Product`,parentSkuId:`${B}:Sku`},[`${B}:ProductVariant`]:{productId:`${B}:Product`}},V=`@happyvertical/smrt-commerce`,Be={[`${V}:Contract`]:{terms:`textarea`,notes:`textarea`,currency:`currency`},[`${V}:Customer`]:{notes:`textarea`},[`${V}:Vendor`]:{notes:`textarea`,currency:`currency`,defaultContactEmail:`email`,defaultContactPhone:`phone`},"@happyvertical/smrt-profiles:Profile":{email:`email`,description:`textarea`},"@happyvertical/smrt-products:Product":{description:`textarea`}},Ve={[`${V}:Customer`]:[`defaultShippingAddress`,`defaultBillingAddress`]};function He(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 Ue(e,t,n){for(let r of t){let t=e[r]?.[n];if(t!==void 0)return t}}function We(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 Ge(e,t,n){let r=e;if(!e.enum){let i=We(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:Ue(Be,t,e.name);if(i&&(r={...r,ui:{...r.ui,widget:i}}),!e.related){let n=Ue(ze,t,e.name);n&&(r={...r,type:`foreignKey`,related:n})}return r}function Ke(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=He(e,t);return{...e,fields:e.fields.map(e=>Ge(e,n,t))}})}));return{...e,packages:n}}var qe=Ke({schema:1,registry:`https://npm.happyvertical.com`,packages:[{id:`ads`,packageName:`@happyvertical/smrt-ads`,version:`0.57.0`,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.0`,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.0`,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.0`,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:`Assets`,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.0`,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.0`,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}],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-users:User`],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`],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.0`,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:`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,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]`},{method:`DELETE`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts/[id]/isDraft`},{method:`POST`,path:`/contracts/[id]/isAccepted`},{method:`POST`,path:`/contracts/[id]/isCompleted`},{method:`POST`,path:`/contracts/[id]/isExpired`},{method:`POST`,path:`/contracts/[id]/isOverdue`},{method:`POST`,path:`/contracts/[id]/recalculateTotals`},{method:`POST`,path:`/contracts/[id]/saveDerived`}],mcp:[{operation:`create`,name:`agreement_create`},{operation:`delete`,name:`agreement_delete`},{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`}],cli:[{operation:`create`,name:`agreement_create`},{operation:`delete`,name:`agreement_delete`},{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:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!0},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!0}],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:`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,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]`},{method:`DELETE`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts/[id]/isDraft`},{method:`POST`,path:`/contracts/[id]/isAccepted`},{method:`POST`,path:`/contracts/[id]/isCompleted`},{method:`POST`,path:`/contracts/[id]/isExpired`},{method:`POST`,path:`/contracts/[id]/isOverdue`},{method:`POST`,path:`/contracts/[id]/recalculateTotals`},{method:`POST`,path:`/contracts/[id]/saveDerived`}],mcp:[{operation:`create`,name:`cart_create`},{operation:`delete`,name:`cart_delete`},{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`}],cli:[{operation:`create`,name:`cart_create`},{operation:`delete`,name:`cart_delete`},{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:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!0},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!0}],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:`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,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:`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:`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:`Tax-exclusive base in integer minor units.`},{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:`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,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]`},{method:`DELETE`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts/[id]/isDraft`},{method:`POST`,path:`/contracts/[id]/isAccepted`},{method:`POST`,path:`/contracts/[id]/isCompleted`},{method:`POST`,path:`/contracts/[id]/isExpired`},{method:`POST`,path:`/contracts/[id]/isOverdue`},{method:`POST`,path:`/contracts/[id]/recalculateTotals`},{method:`POST`,path:`/contracts/[id]/saveDerived`}],mcp:[{operation:`create`,name:`estimate_create`},{operation:`delete`,name:`estimate_delete`},{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`}],cli:[{operation:`create`,name:`estimate_create`},{operation:`delete`,name:`estimate_delete`},{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:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!0},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!0}],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:Invoice`,name:`Invoice`,collection:`invoices`,description:`Invoice represents a bill sent to a customer for goods or services.`,fields:[{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:`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,description:`The date the invoice was issued.`},{name:`dueDate`,type:`datetime`,required:!1,description:`The date payment is expected.`},{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:`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:`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:`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,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]`},{method:`DELETE`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts/[id]/isDraft`},{method:`POST`,path:`/contracts/[id]/isAccepted`},{method:`POST`,path:`/contracts/[id]/isCompleted`},{method:`POST`,path:`/contracts/[id]/isExpired`},{method:`POST`,path:`/contracts/[id]/isOverdue`},{method:`POST`,path:`/contracts/[id]/recalculateTotals`},{method:`POST`,path:`/contracts/[id]/saveDerived`}],mcp:[{operation:`create`,name:`lease_create`},{operation:`delete`,name:`lease_delete`},{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`}],cli:[{operation:`create`,name:`lease_create`},{operation:`delete`,name:`lease_delete`},{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:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!0},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!0}],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:`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,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]`},{method:`DELETE`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts/[id]/isDraft`},{method:`POST`,path:`/contracts/[id]/isAccepted`},{method:`POST`,path:`/contracts/[id]/isCompleted`},{method:`POST`,path:`/contracts/[id]/isExpired`},{method:`POST`,path:`/contracts/[id]/isOverdue`},{method:`POST`,path:`/contracts/[id]/recalculateTotals`},{method:`POST`,path:`/contracts/[id]/saveDerived`},{method:`POST`,path:`/contracts/[id]/getRightsSnapshot`},{method:`POST`,path:`/contracts/[id]/revoke`}],mcp:[{operation:`create`,name:`licensesale_create`},{operation:`delete`,name:`licensesale_delete`},{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`}],cli:[{operation:`create`,name:`licensesale_create`},{operation:`delete`,name:`licensesale_delete`},{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:`getRightsSnapshot`,async:!1,parameters:[],returnType:`LicenseRightsSnapshot`,aiCallable:!0},{name:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!0},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`revoke`,async:!1,parameters:[],returnType:`void`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!0}],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:`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,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]`},{method:`DELETE`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts/[id]/isDraft`},{method:`POST`,path:`/contracts/[id]/isAccepted`},{method:`POST`,path:`/contracts/[id]/isCompleted`},{method:`POST`,path:`/contracts/[id]/isExpired`},{method:`POST`,path:`/contracts/[id]/isOverdue`},{method:`POST`,path:`/contracts/[id]/recalculateTotals`},{method:`POST`,path:`/contracts/[id]/saveDerived`}],mcp:[{operation:`create`,name:`order_create`},{operation:`delete`,name:`order_delete`},{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`}],cli:[{operation:`create`,name:`order_create`},{operation:`delete`,name:`order_delete`},{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:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!0},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!0}],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:`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:`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:`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:`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,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]`},{method:`DELETE`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts/[id]/isDraft`},{method:`POST`,path:`/contracts/[id]/isAccepted`},{method:`POST`,path:`/contracts/[id]/isCompleted`},{method:`POST`,path:`/contracts/[id]/isExpired`},{method:`POST`,path:`/contracts/[id]/isOverdue`},{method:`POST`,path:`/contracts/[id]/recalculateTotals`},{method:`POST`,path:`/contracts/[id]/saveDerived`}],mcp:[{operation:`create`,name:`productionorder_create`},{operation:`delete`,name:`productionorder_delete`},{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`}],cli:[{operation:`create`,name:`productionorder_create`},{operation:`delete`,name:`productionorder_delete`},{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:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!0},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!0}],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:`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,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:`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:`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,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]`},{method:`DELETE`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts/[id]/isDraft`},{method:`POST`,path:`/contracts/[id]/isAccepted`},{method:`POST`,path:`/contracts/[id]/isCompleted`},{method:`POST`,path:`/contracts/[id]/isExpired`},{method:`POST`,path:`/contracts/[id]/isOverdue`},{method:`POST`,path:`/contracts/[id]/recalculateTotals`},{method:`POST`,path:`/contracts/[id]/saveDerived`}],mcp:[{operation:`create`,name:`purchaseorder_create`},{operation:`delete`,name:`purchaseorder_delete`},{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`}],cli:[{operation:`create`,name:`purchaseorder_create`},{operation:`delete`,name:`purchaseorder_delete`},{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:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!0},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!0}],references:[`@happyvertical/smrt-commerce:Vendor`],exposed:!0},{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:`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,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:`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:`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,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]`},{method:`DELETE`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts/[id]/isDraft`},{method:`POST`,path:`/contracts/[id]/isAccepted`},{method:`POST`,path:`/contracts/[id]/isCompleted`},{method:`POST`,path:`/contracts/[id]/isExpired`},{method:`POST`,path:`/contracts/[id]/isOverdue`},{method:`POST`,path:`/contracts/[id]/recalculateTotals`},{method:`POST`,path:`/contracts/[id]/saveDerived`}],mcp:[{operation:`create`,name:`supplierquote_create`},{operation:`delete`,name:`supplierquote_delete`},{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`}],cli:[{operation:`create`,name:`supplierquote_create`},{operation:`delete`,name:`supplierquote_delete`},{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:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!0},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!0}],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:`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,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]`},{method:`DELETE`,path:`/contracts/[id]`},{method:`POST`,path:`/contracts/[id]/isDraft`},{method:`POST`,path:`/contracts/[id]/isAccepted`},{method:`POST`,path:`/contracts/[id]/isCompleted`},{method:`POST`,path:`/contracts/[id]/isExpired`},{method:`POST`,path:`/contracts/[id]/isOverdue`},{method:`POST`,path:`/contracts/[id]/recalculateTotals`},{method:`POST`,path:`/contracts/[id]/saveDerived`}],mcp:[{operation:`create`,name:`wholesaleorder_create`},{operation:`delete`,name:`wholesaleorder_delete`},{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`}],cli:[{operation:`create`,name:`wholesaleorder_create`},{operation:`delete`,name:`wholesaleorder_delete`},{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:`initialize`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`isAccepted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isCompleted`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isDraft`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isExpired`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isOverdue`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`rebindMoneyRead`,async:!1,parameters:[`capability: DocumentMoneyReadRebindCapability`,`db: DatabaseInterface`],returnType:`this`,aiCallable:!0},{name:`recalculateTotals`,async:!0,parameters:[],returnType:`Promise<void>`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`saveDerived`,async:!0,parameters:[`capability: DocumentMoneyWriteCapability`],returnType:`Promise<this>`,aiCallable:!0}],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:`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:{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.0`,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.0`,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.0`,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:`paidByName`,type:`text`,required:!1},{name:`refundOfId`,type:`foreignKey`,required:!1,related:`@happyvertical/smrt-expenses:Expense`},{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:`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:`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:`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:`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:`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`},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.0`,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.0`,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.0`,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.0`,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.0`,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.0`,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.0`,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:`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:`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`],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:`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:`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:`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:`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:`summarize`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!1},{name:`void`,async:!0,parameters:[`reason: string`],returnType:`Promise<void>`,aiCallable:!1}],references:[],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:`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:`getTotalsForDateRange`,name:`journalentrycollection_getTotalsForDateRange`},{operation:`getTrialBalance`,name:`journalentrycollection_getTrialBalance`},{operation:`listPostedMovements`,name:`journalentrycollection_listPostedMovements`}],methods:[{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:`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}],references:[`@happyvertical/smrt-ledgers:Account`,`@happyvertical/smrt-ledgers:Journal`],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`},voidedAt:{visibility:`hidden`},voidReason:{visibility:`hidden`},metadata:{visibility:`hidden`}}},"@happyvertical/smrt-ledgers:JournalEntry":{fields:{exchangeRate:{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.0`,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.0`,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.0`,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:`POST`,path:`/emailattachments/getByMessage`},{method:`POST`,path:`/emailattachments/getByContentType`},{method:`POST`,path:`/emailattachments/getImages`},{method:`POST`,path:`/emailattachments/getPdfs`},{method:`POST`,path:`/emailattachments/getInline`},{method:`POST`,path:`/emailattachments/getRegular`},{method:`POST`,path:`/emailattachments/getWithExternalFiles`},{method:`POST`,path:`/emailattachments/getTotalSize`},{method:`POST`,path:`/emailattachments/getLargest`},{method:`POST`,path:`/emailattachments/searchByFilename`},{method:`POST`,path:`/emailattachments/getByExtension`},{method:`POST`,path:`/emailattachments/getStats`},{method:`POST`,path:`/emailattachments/deleteByMessage`},{method:`POST`,path:`/emailattachments/findByTenant`},{method:`POST`,path:`/emailattachments/findGlobal`},{method:`POST`,path:`/emailattachments/findWithGlobals`},{method:`POST`,path:`/emailattachments/getByEmail`},{method:`POST`,path:`/emailattachments/deleteByEmail`},{method:`GET`,path:`/emailattachments`},{method:`GET`,path:`/emailattachments/[id]`},{method:`POST`,path:`/emailattachments`},{method:`PATCH`,path:`/emailattachments/[id]`},{method:`DELETE`,path:`/emailattachments/[id]`},{method:`POST`,path:`/emailattachments/[id]/getMessage`},{method:`POST`,path:`/emailattachments/[id]/isImage`},{method:`POST`,path:`/emailattachments/[id]/isPdf`},{method:`POST`,path:`/emailattachments/[id]/isInline`},{method:`POST`,path:`/emailattachments/[id]/getExtension`},{method:`POST`,path:`/emailattachments/[id]/getFormattedSize`},{method:`POST`,path:`/emailattachments/[id]/hasExternalFile`},{method:`POST`,path:`/emailattachments/[id]/readContent`},{method:`POST`,path:`/emailattachments/[id]/getEmail`}],mcp:[{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`}],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:!0},{name:`deleteByMessage`,async:!0,parameters:[`messageId: string`],returnType:`Promise<number>`,aiCallable:!0},{name:`findByTenant`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!0},{name:`findGlobal`,async:!0,parameters:[],returnType:`Promise<EmailAttachment[]>`,aiCallable:!0},{name:`findWithGlobals`,async:!0,parameters:[`tenantId: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!0},{name:`getByContentType`,async:!0,parameters:[`contentType: string`],returnType:`Promise<Attachment[]>`,aiCallable:!0},{name:`getByEmail`,async:!0,parameters:[`emailId: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!0},{name:`getByExtension`,async:!0,parameters:[`extension: string`],returnType:`Promise<Attachment[]>`,aiCallable:!0},{name:`getByMessage`,async:!0,parameters:[`messageId: string`],returnType:`Promise<Attachment[]>`,aiCallable:!0},{name:`getEmail`,async:!0,parameters:[],returnType:`any`,aiCallable:!0},{name:`getExtension`,async:!1,parameters:[],returnType:`string`,aiCallable:!0},{name:`getFormattedSize`,async:!1,parameters:[],returnType:`string`,aiCallable:!0},{name:`getImages`,async:!0,parameters:[`emailId?: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!0},{name:`getInline`,async:!0,parameters:[`emailId: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!0},{name:`getLargest`,async:!0,parameters:[`limit?: any`],returnType:`Promise<Attachment[]>`,aiCallable:!0},{name:`getMessage`,async:!0,parameters:[],returnType:`any`,aiCallable:!0},{name:`getPdfs`,async:!0,parameters:[`emailId?: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!0},{name:`getRegular`,async:!0,parameters:[`emailId: string`],returnType:`Promise<EmailAttachment[]>`,aiCallable:!0},{name:`getStats`,async:!0,parameters:[],returnType:`Promise<object>`,aiCallable:!0},{name:`getTotalSize`,async:!0,parameters:[`messageId: string`],returnType:`Promise<number>`,aiCallable:!0},{name:`getWithExternalFiles`,async:!0,parameters:[],returnType:`Promise<Attachment[]>`,aiCallable:!0},{name:`hasExternalFile`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isImage`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isInline`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`isPdf`,async:!1,parameters:[],returnType:`boolean`,aiCallable:!0},{name:`readContent`,async:!0,parameters:[],returnType:`Promise<Buffer | null>`,aiCallable:!0},{name:`searchByFilename`,async:!0,parameters:[`query: string`],returnType:`Promise<Attachment[]>`,aiCallable:!0}],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.0`,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.0`,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.0`,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.0`,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]`},{method:`POST`,path:`/profiles/[id]/getTypeSlug`},{method:`POST`,path:`/profiles/[id]/setTypeBySlug`},{method:`POST`,path:`/profiles/[id]/addMetadata`},{method:`POST`,path:`/profiles/[id]/getMetadata`},{method:`POST`,path:`/profiles/[id]/updateMetadata`},{method:`POST`,path:`/profiles/[id]/removeMetadata`},{method:`POST`,path:`/profiles/[id]/getLinks`},{method:`POST`,path:`/profiles/[id]/getAssets`},{method:`POST`,path:`/profiles/[id]/addAsset`},{method:`POST`,path:`/profiles/[id]/removeAsset`},{method:`POST`,path:`/profiles/[id]/getRelationships`},{method:`POST`,path:`/profiles/[id]/getRelatedProfiles`},{method:`POST`,path:`/profiles/[id]/generateBio`},{method:`POST`,path:`/profiles/[id]/matches`},{method:`POST`,path:`/profiles/findByMetadata`},{method:`POST`,path:`/profiles/findByType`},{method:`POST`,path:`/profiles/findRelated`},{method:`POST`,path:`/profiles/searchByEmail`},{method:`POST`,path:`/profiles/[id]/getApiKeys`},{method:`POST`,path:`/profiles/[id]/getActiveApiKeys`},{method:`POST`,path:`/profiles/[id]/getOidcIdentities`},{method:`POST`,path:`/profiles/[id]/linkOidcIdentity`},{method:`POST`,path:`/profiles/[id]/getNostrIdentities`},{method:`POST`,path:`/profiles/[id]/linkNostrIdentity`},{method:`POST`,path:`/profiles/[id]/getAuditLogs`}],mcp:[{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`}],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:!0},{name:`addMetadata`,async:!0,parameters:[`metafieldSlug: string`,`value: unknown`],returnType:`Promise<void>`,aiCallable:!0},{name:`addRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`,`contextProfile?: Profile`],returnType:`Promise<void>`,aiCallable:!0},{name:`generateApiKey`,async:!0,parameters:[`options: object`],returnType:`Promise<GenerateKeyResult>`,aiCallable:!0},{name:`generateBio`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!0},{name:`getActiveApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!0},{name:`getApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!0},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!0},{name:`getAuditLogs`,async:!0,parameters:[`limit?: number`],returnType:`Promise<AuditLog[]>`,aiCallable:!0},{name:`getLinks`,async:!0,parameters:[],returnType:`Promise<ProfileLink[]>`,aiCallable:!0},{name:`getMetadata`,async:!0,parameters:[],returnType:`Promise<Record<string, string>>`,aiCallable:!0},{name:`getNostrIdentities`,async:!0,parameters:[],returnType:`Promise<NostrIdentity[]>`,aiCallable:!0},{name:`getOidcIdentities`,async:!0,parameters:[],returnType:`Promise<OidcIdentity[]>`,aiCallable:!0},{name:`getRelatedProfiles`,async:!0,parameters:[`relationshipSlug?: string`],returnType:`Promise<Profile[]>`,aiCallable:!0},{name:`getRelationships`,async:!0,parameters:[`options?: object`],returnType:`Promise<ProfileRelationship[]>`,aiCallable:!0},{name:`getTypeSlug`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!0},{name:`linkNostrIdentity`,async:!0,parameters:[`nostrData: object`],returnType:`Promise<NostrIdentity>`,aiCallable:!0},{name:`linkOidcIdentity`,async:!0,parameters:[`oidcData: object`],returnType:`Promise<OidcIdentity>`,aiCallable:!0},{name:`matches`,async:!0,parameters:[`criteria: string`],returnType:`Promise<boolean>`,aiCallable:!0},{name:`recordAction`,async:!0,parameters:[`options: object`],returnType:`Promise<AuditLog>`,aiCallable:!0},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!0},{name:`removeMetadata`,async:!0,parameters:[`metafieldSlug: string`],returnType:`Promise<void>`,aiCallable:!0},{name:`removeRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`],returnType:`Promise<void>`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`links: any`],returnType:`Promise<ProfileLink[]>`,aiCallable:!0},{name:`setTypeBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<void>`,aiCallable:!0},{name:`updateMetadata`,async:!0,parameters:[`metadata: Record<string, unknown>`],returnType:`Promise<void>`,aiCallable:!0}],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]`},{method:`POST`,path:`/profiles/[id]/getTypeSlug`},{method:`POST`,path:`/profiles/[id]/setTypeBySlug`},{method:`POST`,path:`/profiles/[id]/addMetadata`},{method:`POST`,path:`/profiles/[id]/getMetadata`},{method:`POST`,path:`/profiles/[id]/updateMetadata`},{method:`POST`,path:`/profiles/[id]/removeMetadata`},{method:`POST`,path:`/profiles/[id]/getLinks`},{method:`POST`,path:`/profiles/[id]/getAssets`},{method:`POST`,path:`/profiles/[id]/addAsset`},{method:`POST`,path:`/profiles/[id]/removeAsset`},{method:`POST`,path:`/profiles/[id]/getRelationships`},{method:`POST`,path:`/profiles/[id]/getRelatedProfiles`},{method:`POST`,path:`/profiles/[id]/generateBio`},{method:`POST`,path:`/profiles/[id]/matches`},{method:`POST`,path:`/profiles/findByMetadata`},{method:`POST`,path:`/profiles/findByType`},{method:`POST`,path:`/profiles/findRelated`},{method:`POST`,path:`/profiles/searchByEmail`},{method:`POST`,path:`/profiles/[id]/getApiKeys`},{method:`POST`,path:`/profiles/[id]/getActiveApiKeys`},{method:`POST`,path:`/profiles/[id]/getOidcIdentities`},{method:`POST`,path:`/profiles/[id]/linkOidcIdentity`},{method:`POST`,path:`/profiles/[id]/getNostrIdentities`},{method:`POST`,path:`/profiles/[id]/linkNostrIdentity`},{method:`POST`,path:`/profiles/[id]/getAuditLogs`}],mcp:[{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`}],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:!0},{name:`addMetadata`,async:!0,parameters:[`metafieldSlug: string`,`value: unknown`],returnType:`Promise<void>`,aiCallable:!0},{name:`addRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`,`contextProfile?: Profile`],returnType:`Promise<void>`,aiCallable:!0},{name:`generateApiKey`,async:!0,parameters:[`options: object`],returnType:`Promise<GenerateKeyResult>`,aiCallable:!0},{name:`generateBio`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!0},{name:`getActiveApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!0},{name:`getApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!0},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!0},{name:`getAuditLogs`,async:!0,parameters:[`limit?: number`],returnType:`Promise<AuditLog[]>`,aiCallable:!0},{name:`getLinks`,async:!0,parameters:[],returnType:`Promise<ProfileLink[]>`,aiCallable:!0},{name:`getMetadata`,async:!0,parameters:[],returnType:`Promise<Record<string, string>>`,aiCallable:!0},{name:`getNostrIdentities`,async:!0,parameters:[],returnType:`Promise<NostrIdentity[]>`,aiCallable:!0},{name:`getOidcIdentities`,async:!0,parameters:[],returnType:`Promise<OidcIdentity[]>`,aiCallable:!0},{name:`getRelatedProfiles`,async:!0,parameters:[`relationshipSlug?: string`],returnType:`Promise<Profile[]>`,aiCallable:!0},{name:`getRelationships`,async:!0,parameters:[`options?: object`],returnType:`Promise<ProfileRelationship[]>`,aiCallable:!0},{name:`getTypeSlug`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!0},{name:`linkNostrIdentity`,async:!0,parameters:[`nostrData: object`],returnType:`Promise<NostrIdentity>`,aiCallable:!0},{name:`linkOidcIdentity`,async:!0,parameters:[`oidcData: object`],returnType:`Promise<OidcIdentity>`,aiCallable:!0},{name:`matches`,async:!0,parameters:[`criteria: string`],returnType:`Promise<boolean>`,aiCallable:!0},{name:`recordAction`,async:!0,parameters:[`options: object`],returnType:`Promise<AuditLog>`,aiCallable:!0},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!0},{name:`removeMetadata`,async:!0,parameters:[`metafieldSlug: string`],returnType:`Promise<void>`,aiCallable:!0},{name:`removeRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`],returnType:`Promise<void>`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`links: any`],returnType:`Promise<ProfileLink[]>`,aiCallable:!0},{name:`setTypeBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<void>`,aiCallable:!0},{name:`updateMetadata`,async:!0,parameters:[`metadata: Record<string, unknown>`],returnType:`Promise<void>`,aiCallable:!0}],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]`},{method:`POST`,path:`/profiles/[id]/getTypeSlug`},{method:`POST`,path:`/profiles/[id]/setTypeBySlug`},{method:`POST`,path:`/profiles/[id]/addMetadata`},{method:`POST`,path:`/profiles/[id]/getMetadata`},{method:`POST`,path:`/profiles/[id]/updateMetadata`},{method:`POST`,path:`/profiles/[id]/removeMetadata`},{method:`POST`,path:`/profiles/[id]/getLinks`},{method:`POST`,path:`/profiles/[id]/getAssets`},{method:`POST`,path:`/profiles/[id]/addAsset`},{method:`POST`,path:`/profiles/[id]/removeAsset`},{method:`POST`,path:`/profiles/[id]/getRelationships`},{method:`POST`,path:`/profiles/[id]/getRelatedProfiles`},{method:`POST`,path:`/profiles/[id]/generateBio`},{method:`POST`,path:`/profiles/[id]/matches`},{method:`POST`,path:`/profiles/findByMetadata`},{method:`POST`,path:`/profiles/findByType`},{method:`POST`,path:`/profiles/findRelated`},{method:`POST`,path:`/profiles/searchByEmail`},{method:`POST`,path:`/profiles/[id]/getApiKeys`},{method:`POST`,path:`/profiles/[id]/getActiveApiKeys`},{method:`POST`,path:`/profiles/[id]/getOidcIdentities`},{method:`POST`,path:`/profiles/[id]/linkOidcIdentity`},{method:`POST`,path:`/profiles/[id]/getNostrIdentities`},{method:`POST`,path:`/profiles/[id]/linkNostrIdentity`},{method:`POST`,path:`/profiles/[id]/getAuditLogs`}],mcp:[{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`}],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:!0},{name:`addMetadata`,async:!0,parameters:[`metafieldSlug: string`,`value: unknown`],returnType:`Promise<void>`,aiCallable:!0},{name:`addRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`,`contextProfile?: Profile`],returnType:`Promise<void>`,aiCallable:!0},{name:`generateApiKey`,async:!0,parameters:[`options: object`],returnType:`Promise<GenerateKeyResult>`,aiCallable:!0},{name:`generateBio`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!0},{name:`getActiveApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!0},{name:`getApiKeys`,async:!0,parameters:[],returnType:`Promise<ApiKey[]>`,aiCallable:!0},{name:`getAssets`,async:!0,parameters:[`relationship?: string`],returnType:`Promise<Asset[]>`,aiCallable:!0},{name:`getAuditLogs`,async:!0,parameters:[`limit?: number`],returnType:`Promise<AuditLog[]>`,aiCallable:!0},{name:`getLinks`,async:!0,parameters:[],returnType:`Promise<ProfileLink[]>`,aiCallable:!0},{name:`getMetadata`,async:!0,parameters:[],returnType:`Promise<Record<string, string>>`,aiCallable:!0},{name:`getNostrIdentities`,async:!0,parameters:[],returnType:`Promise<NostrIdentity[]>`,aiCallable:!0},{name:`getOidcIdentities`,async:!0,parameters:[],returnType:`Promise<OidcIdentity[]>`,aiCallable:!0},{name:`getRelatedProfiles`,async:!0,parameters:[`relationshipSlug?: string`],returnType:`Promise<Profile[]>`,aiCallable:!0},{name:`getRelationships`,async:!0,parameters:[`options?: object`],returnType:`Promise<ProfileRelationship[]>`,aiCallable:!0},{name:`getTypeSlug`,async:!0,parameters:[],returnType:`Promise<string>`,aiCallable:!0},{name:`linkNostrIdentity`,async:!0,parameters:[`nostrData: object`],returnType:`Promise<NostrIdentity>`,aiCallable:!0},{name:`linkOidcIdentity`,async:!0,parameters:[`oidcData: object`],returnType:`Promise<OidcIdentity>`,aiCallable:!0},{name:`matches`,async:!0,parameters:[`criteria: string`],returnType:`Promise<boolean>`,aiCallable:!0},{name:`recordAction`,async:!0,parameters:[`options: object`],returnType:`Promise<AuditLog>`,aiCallable:!0},{name:`removeAsset`,async:!0,parameters:[`assetId: string`,`relationship?: string`],returnType:`Promise<void>`,aiCallable:!0},{name:`removeMetadata`,async:!0,parameters:[`metafieldSlug: string`],returnType:`Promise<void>`,aiCallable:!0},{name:`removeRelationship`,async:!0,parameters:[`toProfile: Profile`,`relationshipSlug: string`],returnType:`Promise<void>`,aiCallable:!0},{name:`save`,async:!0,parameters:[],returnType:`Promise<this>`,aiCallable:!1},{name:`setLinks`,async:!0,parameters:[`links: any`],returnType:`Promise<ProfileLink[]>`,aiCallable:!0},{name:`setTypeBySlug`,async:!0,parameters:[`slug: string`],returnType:`Promise<void>`,aiCallable:!0},{name:`updateMetadata`,async:!0,parameters:[`metadata: Record<string, unknown>`],returnType:`Promise<void>`,aiCallable:!0}],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.0`,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:`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.0`,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.0`,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:`Reports`,summary:`Keep totals and trends ready to read, refreshed on a schedule and open to the assistant.`,synonyms:[`reports`,`totals`,`summaries`,`rollups`,`kpis`,`trends`,`dashboards`],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:[],models:[`@happyvertical/smrt-reports:RuntimeReport`],nav:[{label:`Reports`,model:`@happyvertical/smrt-reports:RuntimeReport`,icon:`fileText`}],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 and are unavailable in offline
|
|
867
|
+
previews. Scheduling, renaming, and exporting reports are not available yet.
|
|
868
|
+
`,fieldRefs:[]},surfaces:[{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.0`,description:`Modular sales for the SMRT framework: agreement execution, CRM, referral intake, neutral commissions, and reusable Svelte surfaces`,models:[{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:`currency`,type:`text`,required:!1,default:`USD`},{name:`components`,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:`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:`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:`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:`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.0`,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.0`,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.0`,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:`externalProvider`,type:`text`,required:!1,default:`stripe`},{name:`stripeProductId`,type:`text`,required:!1,default:``},{name:`stripePriceId`,type:`text`,required:!1,default:``},{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:`findByStripePriceId`,name:`subscriptionplancollection_findByStripePriceId`}],methods:[{name:`findActive`,async:!0,parameters:[],returnType:`Promise<SubscriptionPlan[]>`,aiCallable:!1},{name:`findByPlanKey`,async:!0,parameters:[`planKey: 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:`externalProvider`,type:`text`,required:!1,default:`stripe`},{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.0`,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.0`,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.0`,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:`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-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.0`,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: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:`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.0`,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.0`,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.0`,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).`]}}]}]}),Je=new Map(qe.packages.map(e=>[e.id,e]));function Ye(e){return Je.get(e)}function Xe(e,t){return Je.get(e)?.models.find(e=>e.name===t)}function Ze(e){let t=e.lastIndexOf(`:`);if(t<0)return;let n=e.slice(0,t),r=qe.packages.find(e=>e.packageName===n),i=r?.models.find(t=>t.id===e);return r&&i?{pkg:r,model:i}:void 0}function Qe(e){return e.models.filter(e=>e.exposed)}function $e(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 et(e){return e.models.reduce((e,t)=>e+t.rest.length+t.mcp.length+t.cli.length,0)}function tt(e,t){let n=e<0n?-e:e,r=t<0n?-t:t;for(;r!==0n;)[n,r]=[r,n%r];return n}function nt(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 rt(e,t){let n=e.numerator%e.denominator*t.denominator-t.numerator%t.denominator*e.denominator;return n<0n?-1:+(n>0n)}function it(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=tt(n,e.denominator),a=e.denominator/i,o=n/i;t=t*a+e.numerator*o,n*=a;let s=tt(t,n);return s>1n&&(t/=s,n/=s),{...e,value:e.numerator/e.denominator}}),a=nt(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=rt(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 at=class extends Error{constructor(e,t){super(t),this.code=e,this.publicMessage=t}code;name=`MoneyValidationError`;publicMessage},ot=1000000n,st=100n*ot,ct=BigInt(2**53-1),lt=/^\S(?:.*\S)?$/;function H(e,t){throw new at(e,t)}function ut(e,t){(typeof e!=`string`||!lt.test(e))&&H(`INVALID_MONEY_INPUT`,`${t} must be a nonempty string`)}function U(e){return(e>ct||e<-ct)&&H(`UNSAFE_MONEY`,`Money exceeds safe integer minor units`),Number(e)}function dt(e){return Number.isSafeInteger(e)||H(`UNSAFE_MONEY`,`Money must be safe integer minor units`),BigInt(e)}function ft(e,t){(!Number.isFinite(e)||e<0||e>2**53-1)&&H(`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&&H(`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 pt(e){(typeof e!=`string`||!/^(?:0|[1-9]\d{0,2})(?:\.\d{1,6})?$/.test(e))&&H(`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)*ot+BigInt(n.padEnd(6,`0`));return r>st&&H(`PERCENT_OUT_OF_RANGE`,`Percent exceeds 100`),r}function mt(e,t){(!e||typeof e!=`object`)&&H(`INVALID_MONEY_INPUT`,`Tax code must be an object`),ut(e.id,`Tax code ID`),e.kind!==`taxable`&&e.kind!==`zero-rated`&&e.kind!==`exempt`&&e.kind!==`out-of-scope`&&H(`TAX_CODE_KIND`,`Unknown tax code kind`),Array.isArray(e.components)||H(`INVALID_MONEY_INPUT`,`Tax code components must be an array`),e.kind===`taxable`&&e.components.length===0&&H(`TAX_CODE_TAXABLE_EMPTY`,`Taxable codes require at least one component`),e.kind!==`taxable`&&e.components.length!==0&&H(`TAX_CODE_NON_TAXABLE_COMPONENTS`,`Non-taxable codes cannot contain components`);let n=new Set;return e.components.map(e=>{(!e||typeof e!=`object`)&&H(`INVALID_MONEY_INPUT`,`Tax component must be an object`),ut(e.taxComponentId,`Tax component ID`),n.has(e.taxComponentId)&&H(`TAX_CODE_DUPLICATE_COMPONENT`,`Duplicate tax component within code`),n.add(e.taxComponentId),typeof e.compound!=`boolean`&&H(`INVALID_MONEY_INPUT`,`Tax component compound must be boolean`),e.compound&&H(`COMPOUND_UNSUPPORTED`,`Compound tax components are not supported`);let r=pt(e.percent),i=t.get(e.taxComponentId);return i!==void 0&&i!==r&&H(`TAX_COMPONENT_RATE_CONFLICT`,`Shared tax component has conflicting percentages`),t.set(e.taxComponentId,r),{taxComponentId:e.taxComponentId,rate:r}})}function ht(e,t){(!t||typeof t!=`object`)&&H(`INVALID_MONEY_INPUT`,`Discount must be a tagged object`);let n=t;n.rate!==void 0&&n.minor!==void 0&&H(`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)&&H(`DISCOUNT_BOTH_FORMS`,`A none discount cannot include percent or amount values`),r=0n):t.kind===`percent`?r=nt(e*pt(t.rate),st):t.kind===`amount`?r=dt(t.minor):H(`INVALID_MONEY_INPUT`,`Unknown discount kind`),r!==0n&&e!==0n&&r<0n!=e<0n&&H(`DISCOUNT_SIGN`,`Discount amount must carry the sign of gross`),e===0n&&r!==0n&&H(`DISCOUNT_SIGN`,`A zero gross cannot carry a discount`);let i=e=>e<0n?-e:e;return i(r)>i(e)&&H(`DISCOUNT_EXCEEDS_GROSS`,`Discount cannot exceed gross`),r}function gt(e){(!e||typeof e!=`object`)&&H(`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)&&H(`CURRENCY_MISMATCH`,`Currency must be a supported uppercase ISO 4217 code with minor units`),e.lineAmountType!==`exclusive`&&e.lineAmountType!==`inclusive`&&e.lineAmountType!==`none`&&H(`INVALID_MONEY_INPUT`,`Unknown line amount type`),e.roundingScope!==`line`&&e.roundingScope!==`document`&&H(`INVALID_MONEY_INPUT`,`Unknown tax rounding scope`),Array.isArray(e.lines)||H(`INVALID_MONEY_INPUT`,`Lines must be an array`)}function _t(e){gt(e);let t=new Set,n=new Map,r=e.lines.map(r=>{(!r||typeof r!=`object`)&&H(`INVALID_MONEY_INPUT`,`Money line must be an object`),ut(r.id,`Line ID`),t.has(r.id)&&H(`INVALID_MONEY_INPUT`,`Duplicate money line ID`),t.add(r.id);let i=r.netAmountMinor===void 0?null:dt(r.netAmountMinor),a=ft(r.quantity,6),o=i??nt(a.coefficient*dt(r.unitPrice),a.scale);U(o);let s=i===null?ht(o,r.discount):0n,c=o-s;U(c),e.lineAmountType===`none`&&!r.taxCode&&H(`TAX_CODE_NOT_FOUND`,`None pricing requires an out-of-scope tax code`),e.lineAmountType===`none`&&r.taxCode?.kind!==`out-of-scope`&&H(`TAX_CODE_KIND`,`None pricing requires an out-of-scope tax code`);let l=r.taxCode?mt(r.taxCode,n):[],u=l.reduce((e,t)=>e+t.rate,0n),d=i===null&&e.lineAmountType===`inclusive`?st+u:st;return{input:r,gross:o,discount:s,amount:c,explicitNet:i,exact:e.lineAmountType===`none`?[]:l.map(e=>({taxComponentId:e.taxComponentId,numerator:c*e.rate,denominator:d})),taxes:new Map}});if(e.roundingScope===`line`)for(let e of r)for(let t of e.exact)e.taxes.set(t.taxComponentId,nt(t.numerator,t.denominator));else for(let e of[...n.keys()].sort()){let t=r.flatMap(t=>{let n=t.exact.find(t=>t.taxComponentId===e);return n?[{line:t,exact:n}]:[]}),n=it(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 i=r.map(t=>{let n=t.exact.map(e=>({taxComponentId:e.taxComponentId,taxMinor:U(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),a=t.explicitNet!==null&&e.lineAmountType===`inclusive`?i+r:t.amount;return{id:t.input.id,grossMinor:U(t.gross),discountMinor:U(t.discount),amountMinor:U(a),components:n,taxMinor:U(r),netMinor:U(i)}}),a=new Map;for(let t=0;t<r.length;t++){let n=r[t].input,o=i[t];if(!n.taxCode||n.taxCode.components.length===0||e.lineAmountType===`none`){let e=`${n.taxCode?.id??``}\0`,t=a.get(e)??{taxCodeId:n.taxCode?.id??null,taxComponentId:null,taxableMinor:0,taxMinor:0};t.taxableMinor=U(BigInt(t.taxableMinor)+BigInt(o.netMinor)),a.set(e,t);continue}for(let e of o.components){n.taxCode||H(`INVALID_MONEY_INPUT`,`Tax component requires a tax code`);let t=`${n.taxCode.id}\0${e.taxComponentId}`,r=a.get(t)??{taxCodeId:n.taxCode.id,taxComponentId:e.taxComponentId,taxableMinor:0,taxMinor:0};r.taxableMinor=U(BigInt(r.taxableMinor)+BigInt(o.netMinor)),r.taxMinor=U(BigInt(r.taxMinor)+BigInt(e.taxMinor)),a.set(t,r)}}let o=[...a.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)}),s=i.reduce((e,t)=>e+BigInt(t.netMinor),0n),c=i.reduce((e,t)=>e+BigInt(t.discountMinor),0n),l=i.reduce((e,t)=>e+BigInt(t.taxMinor),0n);return{lines:i,subtotalMinor:U(s),discountTotalMinor:U(c),taxMinor:U(l),totalMinor:U(s+l),taxes:o}}function vt(e,t,n){if(!e)return null;let r=n.codes[e];return r||H(`TAX_CODE_NOT_FOUND`,`Unknown tax code: ${e}`),typeof r.active!=`boolean`&&H(`INVALID_MONEY_INPUT`,`Tax code ${e} has invalid state`),r.active||H(`TAX_CODE_INACTIVE`,`Tax code ${e} is inactive`),r.appliesTo!==`sales`&&r.appliesTo!==`purchases`&&r.appliesTo!==`both`&&H(`INVALID_MONEY_INPUT`,`Tax code ${e} has invalid applicability`),r.appliesTo!==`both`&&r.appliesTo!==n.direction&&H(`TAX_CODE_SCOPE`,`Tax code ${e} does not apply to ${n.direction}`),{taxCode:r,source:t}}function yt(e,t){if((!e||typeof e!=`object`||!t||typeof t!=`object`)&&H(`INVALID_MONEY_INPUT`,`Tax-code resolution inputs must be objects`),(!t.codes||typeof t.codes!=`object`)&&H(`INVALID_MONEY_INPUT`,`Tax-code map must be an object`),e.lineAmountType!==`exclusive`&&e.lineAmountType!==`inclusive`&&e.lineAmountType!==`none`&&H(`INVALID_MONEY_INPUT`,`Unknown line amount type`),t.direction!==`sales`&&t.direction!==`purchases`&&H(`INVALID_MONEY_INPUT`,`Unknown tax-code direction`),e.lineAmountType===`none`){t.outOfScopeCodeId||H(`TAX_CODE_NOT_FOUND`,`None mode requires an out-of-scope tax code`);let e=vt(t.outOfScopeCodeId,`none`,t);return e?.taxCode?.kind!==`out-of-scope`&&H(`TAX_CODE_KIND`,`None mode requires an out-of-scope tax code`),e}if(t.customerTaxExempt&&!e.lineOverride){t.exemptCodeId||H(`TAX_CODE_NOT_FOUND`,`An exempt customer requires an exempt tax code`);let e=vt(t.exemptCodeId,`exempt-customer`,t);return e?.taxCode?.kind!==`exempt`&&H(`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=vt(e,r,t);if(n)return n}return{taxCode:null,source:`none`}}function bt(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 W=(e,t,n,r=[])=>({id:bt(`tax-code:${e}`),code:e,name:t,kind:n,appliesTo:`both`,active:!0,components:r}),xt=[W(`exempt`,`Exempt`,`exempt`),W(`zero-rated`,`Zero-rated`,`zero-rated`),W(`out-of-scope`,`Out of scope`,`out-of-scope`)],St={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`]}]},Ct=(e,t,n,r)=>({id:bt(`tax-component:${e}`),key:e,name:t,percent:n,recoverable:r}),wt=new Map(St.components.map(e=>[e.key,Ct(e.key,e.name,e.percent,e.recoverable)])),Tt=St.codes.map(e=>({...W(e.code,e.name,`taxable`,e.componentKeys.flatMap(e=>{let t=wt.get(e);return t?[t]:[]})),appliesTo:e.appliesTo})),Et={"ca-gst":`CAD`,"ca-gst-pst-bc":`CAD`,"ca-hst-on":`CAD`,"uk-vat-standard":`GBP`,"au-gst":`AUD`,"nz-gst":`NZD`};function Dt(e){return String(Number((e*100).toFixed(6)))}function Ot(e){let t=xt.find(e=>e.kind===`out-of-scope`);if(!(e>0)&&t)return t;let n=Dt(e);return W(`default-${n.replace(`.`,`_`)}`,`Default ${n}%`,`taxable`,[Ct(`cookbook-${n}`,`Cookbook ${n}%`,n,!1)])}function kt(e){return Tt.filter(t=>Et[t.code]===e.toUpperCase()).sort((e,t)=>t.components.length-e.components.length)[0]}function At(e){let t=Ot(e),n=[...xt,t,...Tt];return n.filter((e,t)=>n.findIndex(t=>t.id===e.id)===t)}function jt(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 Mt=e=>{let t=Number(e??0);return Number.isFinite(t)?t:0},G=e=>Math.round(Mt(e));function Nt(e){if(e.discountType===`percent`){let t=String(e.discountRate??``).trim();return t&&Number(t)!==0?{kind:`percent`,rate:Pt(t)}:{kind:`none`}}if(e.discountType===`amount`){let t=G(e.discount);return t?{kind:`amount`,minor:t}:{kind:`none`}}return{kind:`none`}}function Pt(e){let t=Number(e);return Number.isFinite(t)?String(Number(t.toFixed(6))):`0`}function Ft(e,t=`USD`){let n=typeof e==`string`?e.trim().toUpperCase():``;return n in z?n:t}var It=e=>{let t=Mt(e);return t<0?0:Number(t.toFixed(6))};function Lt(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 Rt(e,t){let n=Object.fromEntries(t.codes.map(e=>[e.id,Lt(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 yt({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=_t({currency:t.currency,lineAmountType:t.lineAmountType,roundingScope:t.roundingScope,lines:e.map((e,t)=>({id:o[t],quantity:It(e.quantity),unitPrice:G(e.unitPrice),discount:Nt(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 zt(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 Bt(e,t){let n=new Map;for(let r of e){let e=t===`inclusive`?G(r.amount)-G(r.taxAmount):G(r.amount);for(let t of zt(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 Vt(e){try{return Rt([e],{lineAmountType:`exclusive`,roundingScope:`line`,currency:`USD`,codes:[],appDefaultCodeId:null}).lines[0]?.amount??0}catch{return Math.round(It(e.quantity)*G(e.unitPrice))}}var Ht=e=>{let t=Number(e??0);return Number.isFinite(t)?t:0},K=(e,t)=>e.fields.some(e=>e.name===t);function Ut(e){return[`quantity`,`unitPrice`,`amount`].every(t=>K(e,t))}var Wt=[`subtotal`,`taxAmount`,`totalAmount`],Gt=[...Wt,`discountTotal`],Kt=[`amount`,`taxAmount`,`taxRate`,`taxCodeCode`,`taxCodeName`],qt=[`exclusive`,`inclusive`,`none`];function Jt(e,t){let n=e.lineAmountType;return typeof n==`string`&&qt.includes(n)?n:t}function Yt(e,t){let n=e.taxRoundingScope;return n===`line`||n===`document`?n:t}function Xt(e,t,n,r){let i=Rt(n,r),a={...t};for(let t of Gt)K(e,t)&&(a[t]=i[t]);return{row:a,lines:i.lines}}function Zt(e){return[`totalAmount`,`amountPaid`,`status`].every(t=>K(e,t))}var Qt=e=>e.type===`foreignKey`||e.type===`crossPackageRef`;function $t(e){return e.fields.find(e=>Qt(e)&&/^payment/i.test(e.name))}function en(e){return e.fields.find(e=>Qt(e)&&/^invoice/i.test(e.name))}function tn(e){return K(e,`amount`)&&!!$t(e)&&!!en(e)}var nn=`completed`;function rn(e,t,n){let r=t.reduce((e,t)=>e+Ht(t.amount),0),i=Ht(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 an(e,t,n=!1){let r=new Set;if(Ut(e))for(let t of Kt)K(e,t)&&r.add(t);if(t)for(let t of Gt)K(e,t)&&r.add(t);if(n&&Zt(e))for(let t of[`amountPaid`,`paidDate`])K(e,t)&&r.add(t);return r}function on(e){return Qt(e)&&(e.related?.endsWith(`:Product`)===!0||/^product(Id)?$/i.test(e.name))}function sn(e,t){let n={};return t?(K(e,`description`)&&typeof t.name==`string`&&t.name&&(n.description=t.name),K(e,`unitPrice`)&&typeof t.price==`number`&&(n.unitPrice=t.price),n):n}var cn={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`}]},ln={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}}},un={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}}},dn={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}}},fn={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}}},pn={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}}},mn={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}}},hn={id:`roaster`,taxRate:0,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}}},gn={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}}},_n={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}}},vn={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}}},yn={[ln.id]:ln,[un.id]:un,[dn.id]:dn,[fn.id]:fn,[pn.id]:pn,[mn.id]:mn,[hn.id]:hn,[gn.id]:gn,[_n.id]:_n,[vn.id]:vn},bn=cn;function q(){return bn}function xn(e){return bn=(e?yn[e]:void 0)??cn,bn}var Sn;function Cn(e){Sn=e}function wn(){return Sn??bn.taxRate}var Tn={pricesIncludeTax:!1,taxRounding:`line`,currency:`USD`},En=Tn;function Dn(e){En={...Tn,...e}}function On(){return En}function J(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 Y(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 kn=/(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,An=/((?<!dis)count|quantity|qty|percent|ratio|level)/i;function jn(e){if(e.type!==`integer`)return!1;let t=e.ui?.format;return t===void 0?!e.system&&kn.test(e.name)&&!An.test(e.name):t===`money`}var Mn=[`Harbor`,`Maple`,`Summit`,`Cedar`,`Willow`,`Copper`,`Juniper`,`Atlas`,`Meadow`,`Granite`,`Lantern`,`Orchard`,`Saffron`,`Timber`,`Velvet`,`Beacon`],Nn=[`Goods`,`Supply`,`Studio`,`Works`,`Market`,`Collective`,`Trading`,`Labs`];cn.products;var Pn=[`Ada`,`Grace`,`Alan`,`Linus`,`Mae`,`Jun`,`Priya`,`Omar`],Fn=[`Nguyen`,`Garcia`,`Okafor`,`Silva`,`Kim`,`Haddad`,`Rossi`],In=[`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.`],Ln=Date.UTC(2026,0,1),Rn=31536e6;function X(e,t){return t[Math.floor(e()*t.length)]}function zn(e,t,n){let r=t.reduce((e,t)=>e+(n[t]??0),0);if(r<=0)return X(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 Bn(e){let t=J(Y(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 Vn=[`Net 30`,`Net 15`,`Net 60`,`Due on receipt`,`50% deposit, balance on delivery`],Hn=[`web`,`retail`,`phone`,`marketplace`,`wholesale`],Un=[`monthly`,`quarterly`,`annual`],Wn=.05;function Gn(e,t,n=``){let r=e.name.toLowerCase();if(/terms/.test(r))return X(t,q().terms??Vn);if(/channel/.test(r))return X(t,Hn);if(/period/.test(r))return X(t,Un);if(/^(unit|uom)$/.test(r))return X(t,[`each`,`hour`,`box`]);if(/email/.test(r))return`${X(t,Pn).toLowerCase()}@example.com`;if(/(^|_)(url|link|website|href)/.test(r)||/url$/.test(r))return`https://example.com/${X(t,Mn).toLowerCase()}`;if(/phone/.test(r))return`+1-555-01${Math.floor(t()*90+10)}`;if(/(notes?|comment|message)/.test(r)){let e=q();return X(t,(n===`Customer`?e.customerNotes:n===`Vendor`?e.vendorNotes:void 0)??e.notes??In)}return/(description|summary|body|content|bio)/.test(r)?X(t,q().descriptions?.[n]??In):/(firstname|first_name)/.test(r)?X(t,Pn):/(lastname|last_name|surname)/.test(r)?X(t,Fn):/(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)?`${X(t,Mn).slice(0,3).toUpperCase()}-${Math.floor(t()*9e3+1e3)}`:/(status|state|stage)/.test(r)?X(t,[`active`,`pending`,`archived`,`draft`]):/(currency)/.test(r)?On().currency:/(person|owner|author|contact|assignee|worker)/.test(r)?`${X(t,Pn)} ${X(t,Fn)}`:`${X(t,Mn)} ${X(t,Nn)}`}var Kn=`@happyvertical/smrt-profiles:Profile`,qn={"@happyvertical/smrt-profiles:Profile":13,"@happyvertical/smrt-commerce:Vendor":5},Jn=`@happyvertical/smrt-commerce:Customer`;function Yn(e){let t=Xn.get(e);if(t)return t;let n=Array.from({length:e},(e,t)=>3+Y(`customer-rows:${t}`)%4),r=[];for(let e=0;e<6;e++)n.forEach((t,n)=>{t>e&&r.push(n)});return Xn.set(e,r),r}var Xn=new Map;function Zn(e){return(Ze(e)?.model)?.fields.some(e=>(e.type===`foreignKey`||e.type===`crossPackageRef`)&&e.related===Jn)??!1}function Qn(e,t){return e===Kn?(q().rowCounts?.[e]??qn[e]??t)+(q().instructors?.length??0):q().rowCounts?.[e]??qn[e]??(Zn(e)?Yn(Qn(Jn,t)).length:t)}function $n(e,t){let n=t.rows??8,r=q().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===Jn){let e=Yn(Qn(Jn,n));return e[t.index%e.length]??0}return t.index%(i.includes(`:`)?Qn(i,n):n)}function er(e,t,n){if(e.enum&&e.enum.length>0){let r=q().weights?.[`${n.modelId.split(`:`).pop()}.${e.name}`];return r?zn(t,e.enum,r):X(t,e.enum)}switch(e.type){case`boolean`:return t()<.7;case`integer`:return jn(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)?wn()??.05:/discountrate/i.test(e.name)?X(t,[`5`,`10`]):/(quantity|qty)/i.test(e.name)?1+Math.floor(t()*5):Math.round(t()*1e4)/100;case`datetime`:return new Date(Ln-Math.floor(t()*Rn)).toISOString();case`json`:return Array.isArray(e.default)?[]:{};case`foreignKey`:case`crossPackageRef`:return Bn(`${e.related??e.name}:${$n(e,n)}`);default:return Gn(e,t,n.modelId.split(`:`).pop())}}function tr(e){return e.fields.filter(e=>!e.system)}var Z=864e5;function nr(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 rr(e,t,n){let r=e.fields.filter(e=>!e.system&&e.type===`datetime`&&!e.enum).flatMap(e=>{let t=nr(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])):Ln-Math.floor(n()*Rn),o=Math.min(a+(1+Math.floor(n()*20))*Z,Ln),s=Math.max(o,a)+(14+Math.floor(n()*32))*Z,c={start:a,event:o,due:s,end:s+(30+Math.floor(n()*150))*Z};for(let{field:e,stage:n}of r)t[e.name]=new Date(c[n]).toISOString()}var Q=(e,t)=>e.fields.some(e=>e.name===t);function ir(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=q();ar(e,t,n,a);let o=a.products[n%a.products.length];if(o){if(/:(Product|Sku)$/.test(e.id)){if(Q(e,`name`)&&(t.name=o.name),Q(e,`price`)&&(t.price=o.price),e.id.endsWith(`:Product`)){if(Q(e,`description`)){let e=a.id===cn.id?`${o.name}, made in small batches.`:o.name;t.description=o.description??e}o.category&&Q(e,`category`)&&(t.category=o.category),o.productType&&Q(e,`productType`)&&(t.productType=o.productType)}return}if(Ut(e)&&Q(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 ar(e,t,n,r){let i=(e,t)=>e?.length?e[t%e.length]:void 0;if(e.id.endsWith(`:Profile`)&&Q(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,Q(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;Q(e,`profileId`)&&(t.profileId=Bn(`${Kn}:${a&&i?13+Math.floor(n/5)%i.length:n%8}`)),Q(e,`role`)&&(t.role=a?`instructor`:`attendee`);return}if(Q(e,`allDay`)&&typeof t.startDate==`string`){let r=Date.parse(t.startDate)-Date.parse(t.startDate)%Z+(6+n%15)*60*60*1e3;t.startDate=new Date(r).toISOString(),Q(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&&Q(e,`name`)&&(t.name=s);let c=i(r.descriptions?.[a],n);c&&o&&Q(e,`description`)&&(t.description=c)}function or(e){let t=q().lines;return t?.length?t[e%t.length]:void 0}function sr(e,t,n,r){let i=J(Y(`${n}:${e.id}:${t}`)),a={id:Bn(`${e.id}:${t}`)};for(let n of e.fields)n.system||(a[n.name]=er(n,i,{modelId:e.id,index:t,rows:r}));return rr(e,a,J(Y(`${n}:${e.id}:${t}:dates`))),ir(e,a,t,i),lr(e,a,t),a}var cr=`@happyvertical/smrt-commerce:`;function lr(e,t,n){let r=(n,r)=>{Q(e,n)&&(t[n]=r)};for(let e of[`defaultTaxCodeId`,`defaultSalesTaxCodeId`,`defaultPurchaseTaxCodeId`])r(e,null);if(!e.id.startsWith(cr))return;let i=On();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),Ut(e)&&r(`taxAmount`,0),r(`taxMode`,`inherit`),r(`taxCodeId`,null),r(`taxCodeCode`,null),r(`taxCodeName`,null),Q(e,`discountType`)&&(r(`discountType`,`none`),r(`discountRate`,null),r(`discount`,0)),e.name===`Customer`&&r(`taxExempt`,n%8==7)}function ur(e,t,n=1,r){return Array.from({length:t},(t,i)=>sr(e,i,n,r))}var dr=new Intl.NumberFormat(`en-US`,{style:`currency`,currency:`USD`});function fr(e){return dr.format(e/100)}var pr=(e,t)=>`${e}:${String(t)}`;function mr(e,t,n){if(t==null||t===``)return``;if(jn(e)&&typeof t==`number`)return fr(t);if(e.enum?.includes(String(t)))return wr(String(t));if(Cr(e)&&typeof t==`number`)return Sr(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(pr(e.related,t))||String(t).slice(0,8);case`json`:return JSON.stringify(t);default:return String(t)}}function hr(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 gr(e){return/[^aeiou]y$/i.test(e)?`${e.slice(0,-1)}ies`:/(s|x|z|ch|sh)$/i.test(e)?`${e}es`:`${e}s`}function _r(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 vr(e,t){return(t?.trim()||_r(e)).toLowerCase()}function yr(e,t,n){return n&&t?.trim()?t.trim():e.toLowerCase()}function br(e){return`${e} ${e===1?`record`:`records`}`}function xr(e){return hr((e.type===`foreignKey`||e.type===`crossPackageRef`)&&/[a-z]Id$/.test(e.name)?e.name.slice(0,-2):e.name)}function Sr(e){return`${Number((e*100).toFixed(2))}%`}var Cr=e=>e.type===`decimal`&&/^(tax|discount|vat)Rate$/.test(e.name);function wr(e){return/^[a-z]{1,3}$/.test(e)?e.toUpperCase():hr(e)}function Tr(e,t){return Er((new URLSearchParams(e).get(`p`)??``).split(`,`).filter(e=>t.has(e)))}function Er(e){return[...new Set(e)].sort()}function Dr(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 Er(n)}function Or(e,t,n){return t.filter(t=>t!==e&&n.get(t)?.dependencies.includes(e))}function kr(e){return e.packages.length?`?p=${[...e.packages].sort().join(`,`)}`:``}function Ar(e){return new URLSearchParams(e).has(`p`)}function jr(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 $=new Map(qe.packages.map(e=>[e.id,e])),Mr=new Set($.keys()),Nr=new class{#e=S(D([]));get ids(){return e(this.#e)}set ids(e){I(this.#e,e,!0)}has(e){return this.ids.includes(e)}requiredBy(e){return Or(e,this.ids,$)}fromSearch(e){this.ids=Dr(Tr(e,Mr),$)}add(...e){this.ids=Dr([...this.ids,...e],$)}remove(...e){let t=new Set(e),n=this.ids.filter(e=>!t.has(e));n=Dr(n,$),this.ids=Er(n)}toggle(e){this.has(e)?this.remove(e):this.add(e)}apply(e){this.add(...(e.add??[]).filter(e=>Mr.has(e))),this.remove(...e.remove??[])}clear(){this.ids=[]}},Pr=``,Fr=`path`;function Ir(e,t=`path`){Pr=e.replace(/\/+$/,``),Fr=t}function Lr(){return Pr}function Rr(){return kr({packages:Nr.ids})}function zr(e){if(Fr===`hash`)return`#${e}`;let t=Rr(),n=t&&e.includes(`?`)?`${e}&${t.slice(1)}`:e+t;return`${Pr}${n}`}export{xt as $,$n as A,en as B,tr as C,Y as D,ur as E,xn as F,tn as G,an as H,Dn as I,sn as J,Ut as K,Cn as L,q as M,On as N,jn as O,wn as P,Tt as Q,nn as R,J as S,oe as St,sr as T,Jt as U,$t as V,Yt as W,Xt as X,rn as Y,Zt as Z,gr as _,Le as _t,Nr as a,jt as at,Wn as b,me as bt,yr as c,at as ct,fr as d,Xe as dt,Ot as et,mr as f,Ze as ft,vr as g,Ve as gt,pr as h,et as ht,Ir as i,At as it,Qn as j,or as k,wr as l,qe as lt,Cr as m,$e as mt,Rr as n,Vt as nt,Ar as o,Rt as ot,hr as p,Ye as pt,on as q,Lr as r,Ft as rt,jr as s,Bt as st,zr as t,kt as tt,xr as u,Qe as ut,br as v,Pe as vt,Bn as w,Ln as x,le as xt,Z as y,ge as yt,Wt as z};
|