@happyvertical/smrt-planner 0.0.0-stage → 0.0.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/LICENSE +21 -0
- package/README.md +170 -2
- package/app/404.html +80 -0
- package/app/_app/immutable/assets/0.B5zXkXe_.css +1 -0
- package/app/_app/immutable/assets/10.hpcnxvK1.css +1 -0
- package/app/_app/immutable/assets/11.D7zoXfVV.css +1 -0
- package/app/_app/immutable/assets/12.CPobm1ED.css +1 -0
- package/app/_app/immutable/assets/2.CyaWdRdI.css +1 -0
- package/app/_app/immutable/assets/3.BlPQOes8.css +1 -0
- package/app/_app/immutable/assets/8.2gQeKBp_.css +1 -0
- package/app/_app/immutable/assets/9.HOPT4xtg.css +1 -0
- package/app/_app/immutable/assets/AiSetup.Cb22AigN.css +1 -0
- package/app/_app/immutable/assets/Button.DkP0qkG9.css +1 -0
- package/app/_app/immutable/assets/ConnectTools.BgIJOOGW.css +1 -0
- package/app/_app/immutable/assets/FieldMapForm.BCU-4pO4.css +1 -0
- package/app/_app/immutable/assets/ModelPage.Dd3LcMta.css +1 -0
- package/app/_app/immutable/assets/SectionActions.CTkVuNMF.css +1 -0
- package/app/_app/immutable/assets/SectionIcons.5Udq9vN-.css +1 -0
- package/app/_app/immutable/assets/SegmentedControl.B8SrQacd.css +1 -0
- package/app/_app/immutable/assets/dist.C5nHBk_O.css +1 -0
- package/app/_app/immutable/assets/feedback.BVKAwFck.css +1 -0
- package/app/_app/immutable/assets/forms.BChZ2RWM.css +1 -0
- package/app/_app/immutable/assets/inter-latin-ext.B_-bZUTo.woff2 +0 -0
- package/app/_app/immutable/assets/inter-latin.8kRkwJBP.woff2 +0 -0
- package/app/_app/immutable/assets/jetbrains-mono-latin-ext.Bnd2h4Br.woff2 +0 -0
- package/app/_app/immutable/assets/jetbrains-mono-latin.Db4Uuiha.woff2 +0 -0
- package/app/_app/immutable/assets/ort-wasm-simd-threaded.asyncify.CxOG5pUO.wasm +0 -0
- package/app/_app/immutable/assets/percent.LH0z-ozZ.css +1 -0
- package/app/_app/immutable/assets/space-grotesk-latin-ext.wJGaI8U0.woff2 +0 -0
- package/app/_app/immutable/assets/space-grotesk-latin.DPT1xrvW.woff2 +0 -0
- package/app/_app/immutable/assets/store.CGDwHkkF.css +1 -0
- package/app/_app/immutable/assets/ui.B1A1Zl2p.css +1 -0
- package/app/_app/immutable/assets/workspace.BIMkuZDb.css +1 -0
- package/app/_app/immutable/chunks/1okeBSoq.js +1 -0
- package/app/_app/immutable/chunks/B32EWqI8.js +9 -0
- package/app/_app/immutable/chunks/B4Kevpe0.js +1 -0
- package/app/_app/immutable/chunks/BJfAXhak.js +3 -0
- package/app/_app/immutable/chunks/BKwRT_1p.js +1 -0
- package/app/_app/immutable/chunks/BQxY8kkL.js +1 -0
- package/app/_app/immutable/chunks/BS4h9ES-.js +1 -0
- package/app/_app/immutable/chunks/BWPhGFHl.js +1 -0
- package/app/_app/immutable/chunks/BYcBM-fh.js +1 -0
- package/app/_app/immutable/chunks/BYde9M_U.js +1 -0
- package/app/_app/immutable/chunks/BegKiy2G.js +1 -0
- package/app/_app/immutable/chunks/Bjy-W4x2.js +81 -0
- package/app/_app/immutable/chunks/C7zBd-pD.js +1 -0
- package/app/_app/immutable/chunks/CA-A9Ngs.js +1 -0
- package/app/_app/immutable/chunks/CMhpRMKg.js +1 -0
- package/app/_app/immutable/chunks/CPRHZZeW.js +1 -0
- package/app/_app/immutable/chunks/CRQ1Pmzr.js +1 -0
- package/app/_app/immutable/chunks/CV-2zt0K.js +2 -0
- package/app/_app/immutable/chunks/CWtfVMDz.js +1 -0
- package/app/_app/immutable/chunks/CgAkqYsL.js +1 -0
- package/app/_app/immutable/chunks/Chyo8rdT.js +3 -0
- package/app/_app/immutable/chunks/CmmuWmp6.js +2 -0
- package/app/_app/immutable/chunks/CrFNLK0f.js +1 -0
- package/app/_app/immutable/chunks/CrO3W89x.js +1 -0
- package/app/_app/immutable/chunks/CyUMm_Wp.js +1 -0
- package/app/_app/immutable/chunks/CygC84VT.js +2 -0
- package/app/_app/immutable/chunks/D0VgZnk1.js +1 -0
- package/app/_app/immutable/chunks/D333l2GL.js +2 -0
- package/app/_app/immutable/chunks/D71UrO5c.js +1 -0
- package/app/_app/immutable/chunks/D7hhQvDO.js +1 -0
- package/app/_app/immutable/chunks/DD7gpKb2.js +1 -0
- package/app/_app/immutable/chunks/DJtH-lRi.js +3 -0
- package/app/_app/immutable/chunks/DNRgqfTx.js +1 -0
- package/app/_app/immutable/chunks/DRByVC-c.js +1 -0
- package/app/_app/immutable/chunks/DVRKjN-E.js +1 -0
- package/app/_app/immutable/chunks/D_J_XtJy.js +846 -0
- package/app/_app/immutable/chunks/Dbjm4OuC.js +1 -0
- package/app/_app/immutable/chunks/Dc4q22LH.js +42 -0
- package/app/_app/immutable/chunks/Dd_uD5pT.js +1 -0
- package/app/_app/immutable/chunks/Dp9GVO-9.js +1 -0
- package/app/_app/immutable/chunks/DqcD-WtP.js +1 -0
- package/app/_app/immutable/chunks/Dt-HX3Vu.js +1 -0
- package/app/_app/immutable/chunks/DyGfbRG-.js +1 -0
- package/app/_app/immutable/chunks/FbOxj-PF.js +69 -0
- package/app/_app/immutable/chunks/OJ_lLTHH.js +1 -0
- package/app/_app/immutable/chunks/QukgIHDX.js +1 -0
- package/app/_app/immutable/chunks/WxSPP8QW.js +4 -0
- package/app/_app/immutable/chunks/iET62IRm.js +2 -0
- package/app/_app/immutable/chunks/leQCwW2d.js +1 -0
- package/app/_app/immutable/chunks/p6bgzXiY.js +1 -0
- package/app/_app/immutable/chunks/uBIymjUX.js +1 -0
- package/app/_app/immutable/chunks/ufuM4XBq.js +33 -0
- package/app/_app/immutable/chunks/xihTtKlq.js +1 -0
- package/app/_app/immutable/entry/app.D5JJain6.js +2 -0
- package/app/_app/immutable/entry/start.CH9DJLgI.js +1 -0
- package/app/_app/immutable/nodes/0.CL1MxOva.js +10 -0
- package/app/_app/immutable/nodes/1.BO731RRg.js +1 -0
- package/app/_app/immutable/nodes/10.1nQxyH9H.js +4 -0
- package/app/_app/immutable/nodes/11.Cw0JnQF3.js +1 -0
- package/app/_app/immutable/nodes/12.BmZyLHbM.js +1 -0
- package/app/_app/immutable/nodes/2.BEw046av.js +17 -0
- package/app/_app/immutable/nodes/3.DvwpTAQA.js +1 -0
- package/app/_app/immutable/nodes/4.qrT4bnmS.js +1 -0
- package/app/_app/immutable/nodes/5.DDLa2uhV.js +1 -0
- package/app/_app/immutable/nodes/6.DN0QTY6z.js +1 -0
- package/app/_app/immutable/nodes/7.C_8N82Wq.js +1 -0
- package/app/_app/immutable/nodes/8.D2Mszsua.js +3 -0
- package/app/_app/immutable/nodes/9.CLYsywul.js +1 -0
- package/app/_app/immutable/workers/assets/ort-wasm-simd-threaded.asyncify-CxOG5pUO.wasm +0 -0
- package/app/_app/immutable/workers/llm.worker-wfCOG_uk.js +69 -0
- package/app/_app/immutable/workers/local-speech.worker-DWbfmFUk.js +51 -0
- package/app/_app/version.json +1 -0
- package/app/ai/index.html +89 -0
- package/app/blueprint/index.html +87 -0
- package/app/cookbook/index.html +87 -0
- package/app/index.html +103 -0
- package/app/m/ads/AdDeliveryTier/index.html +96 -0
- package/app/m/ads/AdEvent/index.html +96 -0
- package/app/m/ads/AdFormat/index.html +96 -0
- package/app/m/ads/AdGroup/index.html +96 -0
- package/app/m/ads/AdVariation/index.html +96 -0
- package/app/m/analytics/AnalyticsDataStream/index.html +96 -0
- package/app/m/analytics/AnalyticsEvent/index.html +96 -0
- package/app/m/analytics/AnalyticsProperty/index.html +96 -0
- package/app/m/analytics/AnalyticsReport/index.html +96 -0
- package/app/m/approvals/ApprovalEvent/index.html +96 -0
- package/app/m/approvals/ApprovalPolicy/index.html +96 -0
- package/app/m/approvals/ApprovalRequest/index.html +96 -0
- package/app/m/assets/Asset/index.html +96 -0
- package/app/m/assets/AssetAssociation/index.html +97 -0
- package/app/m/assets/AssetMetafield/index.html +96 -0
- package/app/m/assets/AssetStatus/index.html +96 -0
- package/app/m/assets/AssetType/index.html +96 -0
- package/app/m/assets/Folder/index.html +96 -0
- package/app/m/chat/AgentSession/index.html +96 -0
- package/app/m/chat/ChatMessage/index.html +97 -0
- package/app/m/chat/ChatParticipant/index.html +97 -0
- package/app/m/chat/ChatReaction/index.html +96 -0
- package/app/m/chat/ChatRoom/index.html +96 -0
- package/app/m/chat/ChatThread/index.html +97 -0
- package/app/m/chat/VoiceGatewayTurn/index.html +96 -0
- package/app/m/chat/VoiceSession/index.html +96 -0
- package/app/m/commerce/Agreement/index.html +96 -0
- package/app/m/commerce/Cart/index.html +96 -0
- package/app/m/commerce/Contract/index.html +96 -0
- package/app/m/commerce/ContractLineItem/index.html +97 -0
- package/app/m/commerce/Customer/index.html +96 -0
- package/app/m/commerce/Estimate/index.html +96 -0
- package/app/m/commerce/Fulfillment/index.html +96 -0
- package/app/m/commerce/FulfillmentLineItem/index.html +97 -0
- package/app/m/commerce/Invoice/index.html +96 -0
- package/app/m/commerce/InvoiceLineItem/index.html +97 -0
- package/app/m/commerce/Lease/index.html +96 -0
- package/app/m/commerce/LicenseSale/index.html +96 -0
- package/app/m/commerce/Order/index.html +96 -0
- package/app/m/commerce/Payment/index.html +96 -0
- package/app/m/commerce/PaymentAllocation/index.html +97 -0
- package/app/m/commerce/PaymentInstrument/index.html +96 -0
- package/app/m/commerce/PaymentIntent/index.html +96 -0
- package/app/m/commerce/Payout/index.html +96 -0
- package/app/m/commerce/ProductionOrder/index.html +96 -0
- package/app/m/commerce/PurchaseOrder/index.html +96 -0
- package/app/m/commerce/Vendor/index.html +96 -0
- package/app/m/commerce/WholesaleOrder/index.html +96 -0
- package/app/m/content/Content/index.html +96 -0
- package/app/m/content/ContentContribution/index.html +96 -0
- package/app/m/content/ContentContributionAttachment/index.html +96 -0
- package/app/m/content/ContentContributionRevision/index.html +96 -0
- package/app/m/content/ContentContributionType/index.html +96 -0
- package/app/m/content/ContentContributor/index.html +96 -0
- package/app/m/content/ContentCorrection/index.html +96 -0
- package/app/m/content/ContentFeedSource/index.html +96 -0
- package/app/m/content/ContentGovernanceAssignment/index.html +96 -0
- package/app/m/content/ContentGovernancePolicy/index.html +96 -0
- package/app/m/content/ContentGovernanceProfile/index.html +96 -0
- package/app/m/content/ContentReference/index.html +96 -0
- package/app/m/content/ContentReview/index.html +96 -0
- package/app/m/content/ContentVersion/index.html +96 -0
- package/app/m/content/Contents/index.html +96 -0
- package/app/m/events/Event/index.html +96 -0
- package/app/m/events/EventParticipant/index.html +97 -0
- package/app/m/events/EventSeries/index.html +96 -0
- package/app/m/events/EventType/index.html +96 -0
- package/app/m/facts/Fact/index.html +96 -0
- package/app/m/facts/FactContent/index.html +96 -0
- package/app/m/facts/FactEvidence/index.html +96 -0
- package/app/m/facts/FactSource/index.html +96 -0
- package/app/m/facts/FactSubject/index.html +96 -0
- package/app/m/facts/FactTag/index.html +96 -0
- package/app/m/fields/FieldPolicy/index.html +96 -0
- package/app/m/fields/FieldPolicySuggestion/index.html +96 -0
- package/app/m/fields/FieldUsageCounter/index.html +96 -0
- package/app/m/images/Image/index.html +96 -0
- package/app/m/inventory/InventoryLocation/index.html +96 -0
- package/app/m/inventory/StockLevel/index.html +96 -0
- package/app/m/inventory/StockMovement/index.html +96 -0
- package/app/m/ledgers/Account/index.html +96 -0
- package/app/m/ledgers/Journal/index.html +96 -0
- package/app/m/ledgers/JournalEntry/index.html +97 -0
- package/app/m/manufacturing/Assembly/index.html +96 -0
- package/app/m/manufacturing/BillOfMaterials/index.html +96 -0
- package/app/m/manufacturing/BomLine/index.html +96 -0
- package/app/m/manufacturing/Operation/index.html +96 -0
- package/app/m/manufacturing/ProductionRun/index.html +96 -0
- package/app/m/manufacturing/ProductionRunCompletion/index.html +96 -0
- package/app/m/manufacturing/RoutingStep/index.html +96 -0
- package/app/m/marketing/Campaign/index.html +96 -0
- package/app/m/marketing/CampaignChannel/index.html +96 -0
- package/app/m/marketing/CampaignMetricSnapshot/index.html +96 -0
- package/app/m/messages/Account/index.html +96 -0
- package/app/m/messages/Attachment/index.html +96 -0
- package/app/m/messages/Blacklist/index.html +96 -0
- package/app/m/messages/Email/failed-sends/index.html +96 -0
- package/app/m/messages/Email/index.html +96 -0
- package/app/m/messages/Email/mailbox/index.html +96 -0
- package/app/m/messages/EmailAccount/index.html +96 -0
- package/app/m/messages/EmailFolder/index.html +96 -0
- package/app/m/messages/Message/index.html +96 -0
- package/app/m/messages/MessagingEndpoint/index.html +96 -0
- package/app/m/messages/PersonaMessageRoute/index.html +96 -0
- package/app/m/messages/SlackAccount/index.html +96 -0
- package/app/m/messages/SlackMessage/index.html +96 -0
- package/app/m/messages/TelegramAccount/index.html +96 -0
- package/app/m/messages/Tweet/index.html +96 -0
- package/app/m/messages/TwitterAccount/index.html +96 -0
- package/app/m/messages/Whitelist/index.html +96 -0
- package/app/m/messages/ZulipAccount/index.html +96 -0
- package/app/m/places/Place/index.html +96 -0
- package/app/m/places/PlaceType/index.html +96 -0
- package/app/m/preferences/UiPreferenceRecord/index.html +96 -0
- package/app/m/products/Category/index.html +96 -0
- package/app/m/products/Material/index.html +96 -0
- package/app/m/products/Product/index.html +96 -0
- package/app/m/products/Product/ingredients/index.html +96 -0
- package/app/m/products/ProductVariant/index.html +97 -0
- package/app/m/products/Sku/index.html +97 -0
- package/app/m/profiles/ApiKey/index.html +96 -0
- package/app/m/profiles/Bot/index.html +96 -0
- package/app/m/profiles/MagicLinkToken/index.html +96 -0
- package/app/m/profiles/NostrIdentity/index.html +96 -0
- package/app/m/profiles/OidcIdentity/index.html +96 -0
- package/app/m/profiles/Organization/index.html +96 -0
- package/app/m/profiles/Person/index.html +96 -0
- package/app/m/profiles/Profile/index.html +96 -0
- package/app/m/profiles/ProfileMetadata/index.html +96 -0
- package/app/m/profiles/ProfileMetafield/index.html +96 -0
- package/app/m/profiles/ProfileRelationship/index.html +96 -0
- package/app/m/profiles/ProfileRelationshipTerm/index.html +96 -0
- package/app/m/profiles/ProfileRelationshipType/index.html +96 -0
- package/app/m/profiles/ProfileType/index.html +96 -0
- package/app/m/projects/Comment/index.html +97 -0
- package/app/m/projects/Issue/index.html +96 -0
- package/app/m/projects/Label/index.html +96 -0
- package/app/m/projects/Project/index.html +96 -0
- package/app/m/projects/ProjectIntegration/index.html +96 -0
- package/app/m/projects/PullRequest/index.html +96 -0
- package/app/m/projects/Repository/index.html +96 -0
- package/app/m/properties/Property/index.html +96 -0
- package/app/m/properties/Zone/index.html +96 -0
- package/app/m/reports/RuntimeReport/index.html +96 -0
- package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +96 -0
- package/app/m/reports/SmrtReportLock/index.html +96 -0
- package/app/m/reports/SmrtReportRefreshTask/index.html +96 -0
- package/app/m/reports/SmrtReportRun/index.html +96 -0
- package/app/m/reports/SmrtReportSchedule/index.html +96 -0
- package/app/m/reports/SmrtReportWatermark/index.html +96 -0
- package/app/m/sales/AttributionException/index.html +96 -0
- package/app/m/sales/AttributionPolicy/index.html +96 -0
- package/app/m/sales/Commission/index.html +96 -0
- package/app/m/sales/CommissionAdjustment/index.html +96 -0
- package/app/m/sales/CommissionPayout/index.html +96 -0
- package/app/m/sales/CommissionPlan/index.html +96 -0
- package/app/m/sales/Earner/index.html +96 -0
- package/app/m/sales/EarnerSourceAttribution/index.html +96 -0
- package/app/m/sales/EarningEvent/index.html +96 -0
- package/app/m/sales/ExecutedAgreement/index.html +96 -0
- package/app/m/sales/Lead/index.html +96 -0
- package/app/m/sales/Opportunity/index.html +96 -0
- package/app/m/sales/OpportunityConversion/index.html +96 -0
- package/app/m/sales/PipelineDefinition/index.html +96 -0
- package/app/m/sales/PipelineStage/index.html +97 -0
- package/app/m/sales/Referral/index.html +96 -0
- package/app/m/sales/ReferralAgreement/index.html +96 -0
- package/app/m/sales/ReferralLink/index.html +96 -0
- package/app/m/sales/ReferralProgram/index.html +96 -0
- package/app/m/sales/ReferralTermSnapshot/index.html +96 -0
- package/app/m/sales/ReferralTouch/index.html +96 -0
- package/app/m/sales/Referrer/index.html +96 -0
- package/app/m/sales/SalesActivity/index.html +96 -0
- package/app/m/sales/SalesRepresentative/index.html +96 -0
- package/app/m/sites/Site/index.html +96 -0
- package/app/m/sites/SiteAgentBinding/index.html +96 -0
- package/app/m/social/OAuthState/index.html +96 -0
- package/app/m/social/SocialAccount/index.html +96 -0
- package/app/m/social/SocialPost/index.html +96 -0
- package/app/m/social/SocialPostAnalyticsSnapshot/index.html +96 -0
- package/app/m/subscriptions/BillingAdjustment/index.html +96 -0
- package/app/m/subscriptions/ClientCharge/index.html +96 -0
- package/app/m/subscriptions/CreditGrant/index.html +96 -0
- package/app/m/subscriptions/PricingRule/index.html +96 -0
- package/app/m/subscriptions/RetailCharge/index.html +96 -0
- package/app/m/subscriptions/SpendingPolicy/index.html +96 -0
- package/app/m/subscriptions/SubscriptionPlan/index.html +96 -0
- package/app/m/subscriptions/TenantSubscription/index.html +96 -0
- package/app/m/subscriptions/TenantUsageMetric/index.html +96 -0
- package/app/m/support/ServiceTimeEntry/index.html +96 -0
- package/app/m/support/SupportAiRun/index.html +96 -0
- package/app/m/support/SupportAvailability/index.html +96 -0
- package/app/m/support/SupportCase/index.html +96 -0
- package/app/m/support/SupportCaseEvent/index.html +96 -0
- package/app/m/support/SupportChannelBinding/index.html +96 -0
- package/app/m/support/SupportCharge/index.html +96 -0
- package/app/m/support/SupportCompensation/index.html +96 -0
- package/app/m/support/SupportCompensationPlan/index.html +96 -0
- package/app/m/support/SupportEscalation/index.html +96 -0
- package/app/m/support/SupportInteraction/index.html +96 -0
- package/app/m/support/SupportPlan/index.html +96 -0
- package/app/m/support/SupportPolicy/index.html +96 -0
- package/app/m/support/SupportQualification/index.html +96 -0
- package/app/m/support/SupportServiceTarget/index.html +96 -0
- package/app/m/support/SupportSpecialist/index.html +96 -0
- package/app/m/support/SupportWorkLink/index.html +96 -0
- package/app/m/tags/Tag/index.html +96 -0
- package/app/m/tags/TagAlias/index.html +96 -0
- package/app/m/timesheets/AttendanceBreak/index.html +96 -0
- package/app/m/timesheets/AttendancePunch/index.html +96 -0
- package/app/m/timesheets/ServiceChargeSnapshot/index.html +96 -0
- package/app/m/timesheets/ServiceCompensationSnapshot/index.html +96 -0
- package/app/m/timesheets/ServiceTimeEntry/index.html +96 -0
- package/app/m/users/AccessRequest/index.html +96 -0
- package/app/m/users/Group/index.html +96 -0
- package/app/m/users/GroupMember/index.html +96 -0
- package/app/m/users/GroupRole/index.html +96 -0
- package/app/m/users/Membership/index.html +97 -0
- package/app/m/users/MembershipOverride/index.html +96 -0
- package/app/m/users/Permission/index.html +96 -0
- package/app/m/users/ResourceGrant/index.html +96 -0
- package/app/m/users/Role/index.html +96 -0
- package/app/m/users/RolePermission/index.html +96 -0
- package/app/m/users/Session/index.html +96 -0
- package/app/m/users/Tenant/index.html +96 -0
- package/app/m/users/TenantIntegration/index.html +96 -0
- package/app/m/users/TenantPermissionOverride/index.html +96 -0
- package/app/m/users/User/index.html +96 -0
- package/app/m/users/UsersCliAuthRequest/index.html +96 -0
- package/app/m/users/UsersMagicLinkToken/index.html +96 -0
- package/app/m/video/Character/index.html +96 -0
- package/app/m/video/CharacterAsset/index.html +96 -0
- package/app/m/video/CompositeJob/index.html +96 -0
- package/app/m/video/Performer/index.html +96 -0
- package/app/m/video/PerformerAsset/index.html +96 -0
- package/app/m/video/Scene/index.html +96 -0
- package/app/m/video/SceneAsset/index.html +96 -0
- package/app/m/video/VideoComposition/index.html +96 -0
- package/app/m/video/VideoCompositionAsset/index.html +96 -0
- package/app/m/video/VideoSequence/index.html +96 -0
- package/app/m/video/VideoSequenceAsset/index.html +96 -0
- package/app/m/video/VideoShot/index.html +96 -0
- package/app/m/video/VideoShotAsset/index.html +96 -0
- package/app/m/video/VideoShotCharacter/index.html +96 -0
- package/app/m/video/VideoWorkflow/index.html +96 -0
- package/app/m/voice/VoiceOutput/index.html +96 -0
- package/app/m/voice/VoiceProfile/index.html +96 -0
- package/app/m/voice/VoiceSample/index.html +96 -0
- package/app/packages/ads/index.html +92 -0
- package/app/packages/analytics/index.html +92 -0
- package/app/packages/approvals/index.html +92 -0
- package/app/packages/assets/index.html +92 -0
- package/app/packages/chat/index.html +92 -0
- package/app/packages/comments/index.html +92 -0
- package/app/packages/commerce/index.html +92 -0
- package/app/packages/content/index.html +92 -0
- package/app/packages/events/index.html +92 -0
- package/app/packages/expenses/index.html +92 -0
- package/app/packages/facts/index.html +92 -0
- package/app/packages/fields/index.html +92 -0
- package/app/packages/human-resources/index.html +92 -0
- package/app/packages/images/index.html +92 -0
- package/app/packages/index.html +90 -0
- package/app/packages/inventory/index.html +92 -0
- package/app/packages/ledgers/index.html +92 -0
- package/app/packages/manufacturing/index.html +92 -0
- package/app/packages/marketing/index.html +92 -0
- package/app/packages/messages/index.html +92 -0
- package/app/packages/places/index.html +92 -0
- package/app/packages/preferences/index.html +92 -0
- package/app/packages/products/index.html +92 -0
- package/app/packages/profiles/index.html +92 -0
- package/app/packages/projects/index.html +92 -0
- package/app/packages/properties/index.html +92 -0
- package/app/packages/reports/index.html +92 -0
- package/app/packages/sales/index.html +92 -0
- package/app/packages/sites/index.html +92 -0
- package/app/packages/social/index.html +92 -0
- package/app/packages/subscriptions/index.html +92 -0
- package/app/packages/support/index.html +92 -0
- package/app/packages/tags/index.html +92 -0
- package/app/packages/timesheets/index.html +92 -0
- package/app/packages/users/index.html +92 -0
- package/app/packages/video/index.html +92 -0
- package/app/packages/voice/index.html +92 -0
- package/app/recipes/account-access/help/index.html +93 -0
- package/app/recipes/account-access/index.html +95 -0
- package/app/recipes/activity/help/index.html +93 -0
- package/app/recipes/activity/index.html +94 -0
- package/app/recipes/agreements/help/index.html +93 -0
- package/app/recipes/agreements/index.html +96 -0
- package/app/recipes/analytics.reports/help/index.html +93 -0
- package/app/recipes/analytics.reports/index.html +94 -0
- package/app/recipes/assets/help/index.html +93 -0
- package/app/recipes/assets/index.html +95 -0
- package/app/recipes/billing/help/index.html +93 -0
- package/app/recipes/billing/index.html +95 -0
- package/app/recipes/chat.assistant/help/index.html +93 -0
- package/app/recipes/chat.assistant/index.html +94 -0
- package/app/recipes/comments/help/index.html +93 -0
- package/app/recipes/comments/index.html +94 -0
- package/app/recipes/commerce.customers/help/index.html +93 -0
- package/app/recipes/commerce.customers/index.html +94 -0
- package/app/recipes/commerce.estimates/help/index.html +93 -0
- package/app/recipes/commerce.estimates/index.html +94 -0
- package/app/recipes/commerce.purchases/help/index.html +93 -0
- package/app/recipes/commerce.purchases/index.html +94 -0
- package/app/recipes/commerce.sales/help/index.html +93 -0
- package/app/recipes/commerce.sales/index.html +94 -0
- package/app/recipes/commerce.vendors/help/index.html +93 -0
- package/app/recipes/commerce.vendors/index.html +94 -0
- package/app/recipes/commerce.wholesale/help/index.html +93 -0
- package/app/recipes/commerce.wholesale/index.html +94 -0
- package/app/recipes/events.calendar/help/index.html +93 -0
- package/app/recipes/events.calendar/index.html +94 -0
- package/app/recipes/fields.form-customization/help/index.html +93 -0
- package/app/recipes/fields.form-customization/index.html +94 -0
- package/app/recipes/inventory.stock/help/index.html +93 -0
- package/app/recipes/inventory.stock/index.html +94 -0
- package/app/recipes/ledgers.bookkeeping/help/index.html +93 -0
- package/app/recipes/ledgers.bookkeeping/index.html +94 -0
- package/app/recipes/messages/help/index.html +93 -0
- package/app/recipes/messages/index.html +95 -0
- package/app/recipes/products/help/index.html +93 -0
- package/app/recipes/products/index.html +96 -0
- package/app/recipes/projects.tracker/help/index.html +93 -0
- package/app/recipes/projects.tracker/index.html +94 -0
- package/app/recipes/reports.materialized/help/index.html +93 -0
- package/app/recipes/reports.materialized/index.html +94 -0
- package/app/recipes/sales.pipeline/help/index.html +93 -0
- package/app/recipes/sales.pipeline/index.html +94 -0
- package/app/recipes/tags.taxonomy/help/index.html +93 -0
- package/app/recipes/tags.taxonomy/index.html +94 -0
- package/app/recipes/team-collaboration/help/index.html +93 -0
- package/app/recipes/team-collaboration/index.html +94 -0
- package/app/s/custom-billing/index.html +89 -0
- package/app/s/custom-buying/index.html +89 -0
- package/app/s/custom-classes/index.html +89 -0
- package/app/s/custom-jobs/index.html +89 -0
- package/app/s/custom-kitchen/index.html +89 -0
- package/app/s/custom-material/index.html +89 -0
- package/app/s/custom-members/index.html +89 -0
- package/app/s/custom-parts/index.html +89 -0
- package/app/s/custom-schedule/index.html +89 -0
- package/app/s/custom-shop/index.html +89 -0
- package/app/s/custom-wholesale/index.html +89 -0
- package/app/s/section-access-control/index.html +89 -0
- package/app/s/section-account-security/index.html +89 -0
- package/app/s/section-accounting/index.html +89 -0
- package/app/s/section-activity/index.html +89 -0
- package/app/s/section-agreements/index.html +89 -0
- package/app/s/section-analytics/index.html +89 -0
- package/app/s/section-assets/index.html +89 -0
- package/app/s/section-billing/index.html +89 -0
- package/app/s/section-calendar/index.html +89 -0
- package/app/s/section-catalog/index.html +89 -0
- package/app/s/section-chat.assistant/index.html +89 -0
- package/app/s/section-comments/index.html +89 -0
- package/app/s/section-fields.form-customization/index.html +89 -0
- package/app/s/section-messages/index.html +89 -0
- package/app/s/section-more/index.html +89 -0
- package/app/s/section-operations/index.html +89 -0
- package/app/s/section-projects/index.html +89 -0
- package/app/s/section-purchasing/index.html +89 -0
- package/app/s/section-reports.materialized/index.html +89 -0
- package/app/s/section-sales/index.html +89 -0
- package/app/s/section-taxonomy/index.html +89 -0
- package/app/s/section-team/index.html +89 -0
- package/dist/ai/echo-gate.d.ts +13 -0
- package/dist/ai/echo-gate.js +21 -0
- package/dist/ai/icons.d.ts +9 -0
- package/dist/ai/icons.js +9 -0
- package/dist/ai/instance.d.ts +3 -0
- package/dist/ai/instance.js +25 -0
- package/dist/ai/state.svelte.d.ts +125 -0
- package/dist/ai/state.svelte.js +286 -0
- package/dist/ai/status.d.ts +67 -0
- package/dist/ai/status.js +117 -0
- package/dist/assets/smrt-mark.svg +38 -0
- package/dist/assistant/change.d.ts +101 -0
- package/dist/assistant/change.js +209 -0
- package/dist/assistant/engine.d.ts +20 -0
- package/dist/assistant/engine.js +43 -0
- package/dist/assistant/llm.worker.d.ts +1 -0
- package/dist/assistant/llm.worker.js +7 -0
- package/dist/assistant/match.d.ts +59 -0
- package/dist/assistant/match.js +271 -0
- package/dist/assistant/models.d.ts +38 -0
- package/dist/assistant/models.js +57 -0
- package/dist/assistant/offers.svelte.d.ts +36 -0
- package/dist/assistant/offers.svelte.js +59 -0
- package/dist/assistant/prefs.d.ts +14 -0
- package/dist/assistant/prefs.js +32 -0
- package/dist/assistant/prompt.d.ts +23 -0
- package/dist/assistant/prompt.js +163 -0
- package/dist/assistant/session.svelte.d.ts +73 -0
- package/dist/assistant/session.svelte.js +163 -0
- package/dist/assistant/theme-undo.svelte.d.ts +38 -0
- package/dist/assistant/theme-undo.svelte.js +50 -0
- package/dist/assistant/transport.d.ts +73 -0
- package/dist/assistant/transport.js +231 -0
- package/dist/assistant/voice-host.d.ts +10 -0
- package/dist/assistant/voice-host.js +17 -0
- package/dist/assistant/voice.svelte.d.ts +107 -0
- package/dist/assistant/voice.svelte.js +261 -0
- package/dist/catalog/catalog.json +89663 -0
- package/dist/catalog/generate/build.d.ts +33 -0
- package/dist/catalog/generate/build.js +131 -0
- package/dist/catalog/generate/exclusions.d.ts +18 -0
- package/dist/catalog/generate/exclusions.js +33 -0
- package/dist/catalog/generate/extract.d.ts +90 -0
- package/dist/catalog/generate/extract.js +326 -0
- package/dist/catalog/generate/local.d.ts +8 -0
- package/dist/catalog/generate/local.js +45 -0
- package/dist/catalog/generate/recipe-demo.d.ts +11 -0
- package/dist/catalog/generate/recipe-demo.js +29 -0
- package/dist/catalog/generate/recipe-metadata.d.ts +12 -0
- package/dist/catalog/generate/recipe-metadata.js +138 -0
- package/dist/catalog/generate/registry.d.ts +14 -0
- package/dist/catalog/generate/registry.js +83 -0
- package/dist/catalog/index.d.ts +21 -0
- package/dist/catalog/index.js +53 -0
- package/dist/catalog/types.d.ts +141 -0
- package/dist/catalog/types.js +8 -0
- package/dist/components/AiSetup.svelte +499 -0
- package/dist/components/AiSetup.svelte.d.ts +8 -0
- package/dist/components/AiStatusIcons.svelte +86 -0
- package/dist/components/AiStatusIcons.svelte.d.ts +18 -0
- package/dist/components/AppSettings.svelte +100 -0
- package/dist/components/AppSettings.svelte.d.ts +10 -0
- package/dist/components/BrowserAssistant.svelte +314 -0
- package/dist/components/BrowserAssistant.svelte.d.ts +8 -0
- package/dist/components/ChildRecords.svelte +331 -0
- package/dist/components/ChildRecords.svelte.d.ts +15 -0
- package/dist/components/ConnectTools.svelte +145 -0
- package/dist/components/ConnectTools.svelte.d.ts +8 -0
- package/dist/components/CookbooksPanel.svelte +308 -0
- package/dist/components/CookbooksPanel.svelte.d.ts +3 -0
- package/dist/components/ExportPanel.svelte +217 -0
- package/dist/components/ExportPanel.svelte.d.ts +3 -0
- package/dist/components/FeatureCard.svelte +197 -0
- package/dist/components/FeatureCard.svelte.d.ts +13 -0
- package/dist/components/FeaturesPanel.svelte +155 -0
- package/dist/components/FeaturesPanel.svelte.d.ts +3 -0
- package/dist/components/FieldInput.svelte +307 -0
- package/dist/components/FieldInput.svelte.d.ts +24 -0
- package/dist/components/FieldMapForm.svelte +173 -0
- package/dist/components/FieldMapForm.svelte.d.ts +18 -0
- package/dist/components/FormWorkspace.svelte +274 -0
- package/dist/components/FormWorkspace.svelte.d.ts +19 -0
- package/dist/components/HelpView.svelte +129 -0
- package/dist/components/HelpView.svelte.d.ts +12 -0
- package/dist/components/ModelOptions.svelte +239 -0
- package/dist/components/ModelOptions.svelte.d.ts +12 -0
- package/dist/components/ModelPage.svelte +295 -0
- package/dist/components/ModelPage.svelte.d.ts +9 -0
- package/dist/components/ModelWorkspace.svelte +488 -0
- package/dist/components/ModelWorkspace.svelte.d.ts +32 -0
- package/dist/components/PlannerEditBridge.svelte +36 -0
- package/dist/components/PlannerEditBridge.svelte.d.ts +3 -0
- package/dist/components/PlannerPalette.svelte +38 -0
- package/dist/components/PlannerPalette.svelte.d.ts +18 -0
- package/dist/components/RecipeCards.svelte +145 -0
- package/dist/components/RecipeCards.svelte.d.ts +3 -0
- package/dist/components/RecipeHelp.svelte +54 -0
- package/dist/components/RecipeHelp.svelte.d.ts +9 -0
- package/dist/components/RecipeOptions.svelte +160 -0
- package/dist/components/RecipeOptions.svelte.d.ts +9 -0
- package/dist/components/RecordFeatures.svelte +240 -0
- package/dist/components/RecordFeatures.svelte.d.ts +3 -0
- package/dist/components/RelationField.svelte +175 -0
- package/dist/components/RelationField.svelte.d.ts +16 -0
- package/dist/components/SectionActions.svelte +91 -0
- package/dist/components/SectionActions.svelte.d.ts +12 -0
- package/dist/components/SectionIcons.svelte +98 -0
- package/dist/components/SectionIcons.svelte.d.ts +15 -0
- package/dist/components/SectionOverview.svelte +65 -0
- package/dist/components/SectionOverview.svelte.d.ts +14 -0
- package/dist/components/SectionPage.svelte +230 -0
- package/dist/components/SectionPage.svelte.d.ts +7 -0
- package/dist/components/SettingsPanel.svelte +60 -0
- package/dist/components/SettingsPanel.svelte.d.ts +7 -0
- package/dist/components/ThemeBridge.svelte +56 -0
- package/dist/components/ThemeBridge.svelte.d.ts +3 -0
- package/dist/components/ThemeSection.svelte +167 -0
- package/dist/components/ThemeSection.svelte.d.ts +11 -0
- package/dist/components/VariantGridForm.svelte +309 -0
- package/dist/components/VariantGridForm.svelte.d.ts +12 -0
- package/dist/components/VoiceTyping.svelte +108 -0
- package/dist/components/VoiceTyping.svelte.d.ts +7 -0
- package/dist/cookbook/assemble.d.ts +16 -0
- package/dist/cookbook/assemble.js +29 -0
- package/dist/cookbook/file.d.ts +7 -0
- package/dist/cookbook/file.js +25 -0
- package/dist/cookbook/legacy.d.ts +9 -0
- package/dist/cookbook/legacy.js +87 -0
- package/dist/cookbook/migrate.d.ts +22 -0
- package/dist/cookbook/migrate.js +106 -0
- package/dist/cookbook/parse.d.ts +16 -0
- package/dist/cookbook/parse.js +246 -0
- package/dist/cookbook/storage.d.ts +45 -0
- package/dist/cookbook/storage.js +98 -0
- package/dist/cookbook/store.svelte.d.ts +94 -0
- package/dist/cookbook/store.svelte.js +231 -0
- package/dist/cookbook/types.d.ts +76 -0
- package/dist/cookbook/types.js +11 -0
- package/dist/cookbook/validate.d.ts +14 -0
- package/dist/cookbook/validate.js +29 -0
- package/dist/core/app.d.ts +12 -0
- package/dist/core/app.js +15 -0
- package/dist/core/catalog.d.ts +19 -0
- package/dist/core/catalog.js +9 -0
- package/dist/core/headless.d.ts +52 -0
- package/dist/core/headless.js +39 -0
- package/dist/core/index.d.ts +28 -0
- package/dist/core/index.js +28 -0
- package/dist/core/prompt.d.ts +38 -0
- package/dist/core/prompt.js +95 -0
- package/dist/core/reply.d.ts +60 -0
- package/dist/core/reply.js +89 -0
- package/dist/core/request.d.ts +15 -0
- package/dist/core/request.js +55 -0
- package/dist/data/children.d.ts +20 -0
- package/dist/data/children.js +80 -0
- package/dist/data/columns.d.ts +56 -0
- package/dist/data/columns.js +150 -0
- package/dist/data/context.d.ts +8 -0
- package/dist/data/context.js +19 -0
- package/dist/data/derived.d.ts +79 -0
- package/dist/data/derived.js +139 -0
- package/dist/data/display.d.ts +23 -0
- package/dist/data/display.js +84 -0
- package/dist/data/fakes.d.ts +52 -0
- package/dist/data/fakes.js +443 -0
- package/dist/data/format.d.ts +48 -0
- package/dist/data/format.js +121 -0
- package/dist/data/labels.d.ts +45 -0
- package/dist/data/labels.js +179 -0
- package/dist/data/packs.d.ts +95 -0
- package/dist/data/packs.js +830 -0
- package/dist/data/payments.d.ts +17 -0
- package/dist/data/payments.js +60 -0
- package/dist/data/planner-source.d.ts +7 -0
- package/dist/data/planner-source.js +32 -0
- package/dist/data/source.d.ts +119 -0
- package/dist/data/source.js +432 -0
- package/dist/features/catalogue.d.ts +96 -0
- package/dist/features/catalogue.js +225 -0
- package/dist/features/demo.d.ts +36 -0
- package/dist/features/demo.js +66 -0
- package/dist/features/palette.d.ts +39 -0
- package/dist/features/palette.js +53 -0
- package/dist/fields/address.d.ts +23 -0
- package/dist/fields/address.js +39 -0
- package/dist/fields/invalid.d.ts +2 -0
- package/dist/fields/invalid.js +8 -0
- package/dist/fields/modal.d.ts +7 -0
- package/dist/fields/modal.js +14 -0
- package/dist/fields/percent.d.ts +8 -0
- package/dist/fields/percent.js +16 -0
- package/dist/fields/renderer.d.ts +17 -0
- package/dist/fields/renderer.js +43 -0
- package/dist/forms/active.d.ts +16 -0
- package/dist/forms/active.js +24 -0
- package/dist/forms/fieldMap.d.ts +44 -0
- package/dist/forms/fieldMap.js +134 -0
- package/dist/forms/shared.d.ts +41 -0
- package/dist/forms/shared.js +138 -0
- package/dist/forms/stock.d.ts +28 -0
- package/dist/forms/stock.js +104 -0
- package/dist/forms/variantGrid.d.ts +83 -0
- package/dist/forms/variantGrid.js +283 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +16 -0
- package/dist/inference/byo.svelte.d.ts +86 -0
- package/dist/inference/byo.svelte.js +267 -0
- package/dist/inference/config.d.ts +70 -0
- package/dist/inference/config.js +149 -0
- package/dist/inference/host.d.ts +40 -0
- package/dist/inference/host.js +57 -0
- package/dist/inference/openai.d.ts +59 -0
- package/dist/inference/openai.js +202 -0
- package/dist/inference/presets.d.ts +5 -0
- package/dist/inference/presets.js +46 -0
- package/dist/kitchen/client.d.ts +39 -0
- package/dist/kitchen/client.js +109 -0
- package/dist/kitchen/fragment.d.ts +30 -0
- package/dist/kitchen/fragment.js +49 -0
- package/dist/kitchen/state.svelte.d.ts +26 -0
- package/dist/kitchen/state.svelte.js +45 -0
- package/dist/library/apply.d.ts +17 -0
- package/dist/library/apply.js +32 -0
- package/dist/library/document.d.ts +12 -0
- package/dist/library/document.js +27 -0
- package/dist/library/icons.d.ts +6 -0
- package/dist/library/icons.js +26 -0
- package/dist/library/index.d.ts +8 -0
- package/dist/library/index.js +12 -0
- package/dist/library/library.json +788 -0
- package/dist/library/menu.d.ts +18 -0
- package/dist/library/menu.js +72 -0
- package/dist/library/state.svelte.d.ts +10 -0
- package/dist/library/state.svelte.js +28 -0
- package/dist/library/types.d.ts +57 -0
- package/dist/library/types.js +1 -0
- package/dist/overviews/definitions.d.ts +24 -0
- package/dist/overviews/definitions.js +97 -0
- package/dist/overviews/page.d.ts +21 -0
- package/dist/overviews/page.js +36 -0
- package/dist/overviews/registry.d.ts +44 -0
- package/dist/overviews/registry.js +191 -0
- package/dist/overviews/validate.d.ts +32 -0
- package/dist/overviews/validate.js +91 -0
- package/dist/planner/Planner.svelte +204 -0
- package/dist/planner/Planner.svelte.d.ts +4 -0
- package/dist/planner/app.svelte.d.ts +6 -0
- package/dist/planner/app.svelte.js +23 -0
- package/dist/planner/assistant.d.ts +46 -0
- package/dist/planner/assistant.js +122 -0
- package/dist/planner/commands/adapter.d.ts +121 -0
- package/dist/planner/commands/adapter.js +597 -0
- package/dist/planner/commands/catalog.d.ts +19 -0
- package/dist/planner/commands/catalog.js +54 -0
- package/dist/planner/commands/controller.svelte.d.ts +13 -0
- package/dist/planner/commands/controller.svelte.js +77 -0
- package/dist/planner/commands/index.d.ts +15 -0
- package/dist/planner/commands/index.js +15 -0
- package/dist/planner/commands/schemas.d.ts +25 -0
- package/dist/planner/commands/schemas.js +67 -0
- package/dist/planner/commands/slices.d.ts +18 -0
- package/dist/planner/commands/slices.js +49 -0
- package/dist/planner/commands/types.d.ts +80 -0
- package/dist/planner/commands/types.js +18 -0
- package/dist/planner/create.d.ts +4 -0
- package/dist/planner/create.js +22 -0
- package/dist/planner/instance.d.ts +15 -0
- package/dist/planner/instance.js +22 -0
- package/dist/planner/query.d.ts +16 -0
- package/dist/planner/query.js +28 -0
- package/dist/planner/selection.d.ts +15 -0
- package/dist/planner/selection.js +38 -0
- package/dist/planner/selection.svelte.d.ts +29 -0
- package/dist/planner/selection.svelte.js +54 -0
- package/dist/planner/tab.svelte.d.ts +11 -0
- package/dist/planner/tab.svelte.js +22 -0
- package/dist/planner/types.d.ts +41 -0
- package/dist/planner/types.js +1 -0
- package/dist/recipes/cards.d.ts +55 -0
- package/dist/recipes/cards.js +80 -0
- package/dist/recipes/features.d.ts +53 -0
- package/dist/recipes/features.js +97 -0
- package/dist/recipes/help/descriptions.json +373 -0
- package/dist/recipes/help.d.ts +121 -0
- package/dist/recipes/help.js +262 -0
- package/dist/recipes/index.d.ts +65 -0
- package/dist/recipes/index.js +95 -0
- package/dist/recipes/merge.d.ts +26 -0
- package/dist/recipes/merge.js +21 -0
- package/dist/recipes/overlay.json +409 -0
- package/dist/recipes/plan-data.d.ts +41 -0
- package/dist/recipes/plan-data.js +97 -0
- package/dist/recipes/plumbing.d.ts +70 -0
- package/dist/recipes/plumbing.js +185 -0
- package/dist/recipes/policy.d.ts +118 -0
- package/dist/recipes/policy.js +268 -0
- package/dist/recipes/resolve.d.ts +19 -0
- package/dist/recipes/resolve.js +65 -0
- package/dist/recipes/scope.d.ts +25 -0
- package/dist/recipes/scope.js +31 -0
- package/dist/recipes/sections.d.ts +49 -0
- package/dist/recipes/sections.js +84 -0
- package/dist/recipes/state.svelte.d.ts +67 -0
- package/dist/recipes/state.svelte.js +112 -0
- package/dist/recipes/types.d.ts +322 -0
- package/dist/recipes/types.js +8 -0
- package/dist/sections/entries.d.ts +30 -0
- package/dist/sections/entries.js +57 -0
- package/dist/sections/info.d.ts +16 -0
- package/dist/sections/info.js +39 -0
- package/dist/sections/path.d.ts +12 -0
- package/dist/sections/path.js +18 -0
- package/dist/settings/app-settings.d.ts +44 -0
- package/dist/settings/app-settings.js +138 -0
- package/dist/settings/currencies.d.ts +2 -0
- package/dist/settings/currencies.js +8 -0
- package/dist/theme/runtime.d.ts +14 -0
- package/dist/theme/runtime.js +27 -0
- package/dist/theme/theme.d.ts +47 -0
- package/dist/theme/theme.js +122 -0
- package/dist/upstream/CustomerSelect.svelte +60 -0
- package/dist/upstream/CustomerSelect.svelte.d.ts +17 -0
- package/dist/upstream/VendorSelect.svelte +60 -0
- package/dist/upstream/VendorSelect.svelte.d.ts +17 -0
- package/dist/upstream/overlay.d.ts +10 -0
- package/dist/upstream/overlay.js +49 -0
- package/dist/upstream/partySelect.d.ts +8 -0
- package/dist/upstream/partySelect.js +21 -0
- package/dist/upstream/partyTypes.d.ts +64 -0
- package/dist/upstream/partyTypes.js +8 -0
- package/dist/upstream/relations.d.ts +2 -0
- package/dist/upstream/relations.js +24 -0
- package/dist/upstream/selects.d.ts +26 -0
- package/dist/upstream/selects.js +20 -0
- package/dist/upstream/widgets.d.ts +20 -0
- package/dist/upstream/widgets.js +30 -0
- package/package.json +80 -3
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export const isThemeUndoRef = (value) => !!value &&
|
|
2
|
+
typeof value === 'object' &&
|
|
3
|
+
value.kind === 'theme-undo' &&
|
|
4
|
+
typeof value.undoId === 'string';
|
|
5
|
+
/**
|
|
6
|
+
* Theme changes the assistant made. They apply at once (they are cheap to
|
|
7
|
+
* reverse), and each keeps the theme it replaced so the chat can offer Undo.
|
|
8
|
+
*/
|
|
9
|
+
export class ThemeUndos {
|
|
10
|
+
store;
|
|
11
|
+
controller;
|
|
12
|
+
undos = $state({});
|
|
13
|
+
counter = 0;
|
|
14
|
+
/**
|
|
15
|
+
* With a controller, Undo first goes through its undo command (the path
|
|
16
|
+
* every other client uses). That undoes the whole document, so it is only
|
|
17
|
+
* tried while nothing else changed since (no `force`); otherwise, or when
|
|
18
|
+
* the controller no longer holds the entry, the theme the change replaced is
|
|
19
|
+
* put back on its own, leaving later edits alone.
|
|
20
|
+
*/
|
|
21
|
+
constructor(store, controller) {
|
|
22
|
+
this.store = store;
|
|
23
|
+
this.controller = controller;
|
|
24
|
+
}
|
|
25
|
+
record(previous, commandUndoId) {
|
|
26
|
+
const id = `theme-undo-${++this.counter}`;
|
|
27
|
+
this.undos[id] = {
|
|
28
|
+
id,
|
|
29
|
+
previous: previous
|
|
30
|
+
? structuredClone($state.snapshot(previous))
|
|
31
|
+
: undefined,
|
|
32
|
+
status: 'available',
|
|
33
|
+
...(commandUndoId ? { commandUndoId } : {}),
|
|
34
|
+
};
|
|
35
|
+
return { kind: 'theme-undo', undoId: id };
|
|
36
|
+
}
|
|
37
|
+
undo(id) {
|
|
38
|
+
const entry = this.undos[id];
|
|
39
|
+
if (entry?.status !== 'available')
|
|
40
|
+
return;
|
|
41
|
+
const undone = entry.commandUndoId &&
|
|
42
|
+
this.controller?.run({
|
|
43
|
+
name: 'undo',
|
|
44
|
+
input: { undoId: entry.commandUndoId },
|
|
45
|
+
}).ok;
|
|
46
|
+
if (!undone)
|
|
47
|
+
this.store.write(entry.previous);
|
|
48
|
+
entry.status = 'undone';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { AssistantTransport } from '@happyvertical/smrt-chat/svelte';
|
|
2
|
+
import { type PlannerController } from '../planner/commands/index.ts';
|
|
3
|
+
import type { Recipe } from '../recipes/types.ts';
|
|
4
|
+
import type { ThemeSetting } from '../theme/theme.ts';
|
|
5
|
+
import { type RecipeStore, type SettingsStore, type ThemeStore } from './change.ts';
|
|
6
|
+
import type { OfferRef } from './offers.svelte.ts';
|
|
7
|
+
import { type CookbookBrief } from './prompt.ts';
|
|
8
|
+
import type { ThemeUndoRef } from './theme-undo.svelte.ts';
|
|
9
|
+
/** The slice of `@happyvertical/ai`'s provider the transport uses. */
|
|
10
|
+
export interface ChatModel {
|
|
11
|
+
message(text: string, options?: {
|
|
12
|
+
history?: {
|
|
13
|
+
role: 'system' | 'user' | 'assistant';
|
|
14
|
+
content: string;
|
|
15
|
+
}[];
|
|
16
|
+
responseSchema?: Record<string, unknown> | string;
|
|
17
|
+
temperature?: number;
|
|
18
|
+
maxTokens?: number;
|
|
19
|
+
signal?: AbortSignal;
|
|
20
|
+
}): Promise<string>;
|
|
21
|
+
}
|
|
22
|
+
export interface BrowserTransportOptions {
|
|
23
|
+
/** The loaded model; null until the visitor has downloaded one. */
|
|
24
|
+
model: () => ChatModel | null;
|
|
25
|
+
store: RecipeStore;
|
|
26
|
+
recipes: readonly Recipe[];
|
|
27
|
+
/** Cookbooks the assistant may offer (id, name, summary). */
|
|
28
|
+
cookbooks?: readonly CookbookBrief[];
|
|
29
|
+
/** Proposes a cookbook; the person's click applies it. Null: already pending. */
|
|
30
|
+
offers?: {
|
|
31
|
+
offer(cookbookId: string): OfferRef | null;
|
|
32
|
+
/** True when a cookbook is applied or pending; omit to never back up. */
|
|
33
|
+
engaged?(): boolean;
|
|
34
|
+
};
|
|
35
|
+
/** The app settings the assistant may read and change. */
|
|
36
|
+
settings?: SettingsStore;
|
|
37
|
+
/** The app theme the assistant may change; each change can be undone. */
|
|
38
|
+
theme?: ThemeStore;
|
|
39
|
+
themeUndos?: {
|
|
40
|
+
record(previous: ThemeSetting | undefined, commandUndoId?: string): ThemeUndoRef;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* The planner controller every change goes through. Omitted, one is made
|
|
44
|
+
* over `store`, `settings` and `theme`, so the assistant needs no more than
|
|
45
|
+
* it did before; the app passes its own so manual edits and the assistant
|
|
46
|
+
* share one Undo history and one snapshot.
|
|
47
|
+
*/
|
|
48
|
+
controller?: PlannerController;
|
|
49
|
+
/**
|
|
50
|
+
* Apply `commands` a reply carries, through the controller. Only for a
|
|
51
|
+
* server the host chose (host mode); a local or bring-your-own model's
|
|
52
|
+
* reply is held to the schema's recipes, settings and theme.
|
|
53
|
+
*/
|
|
54
|
+
acceptCommands?: boolean | (() => boolean);
|
|
55
|
+
/** Said when `model()` is null; the default asks for a download. */
|
|
56
|
+
unavailable?: string | (() => string);
|
|
57
|
+
now?: () => number;
|
|
58
|
+
/** Called with each reply the model produced (not errors), e.g. to read it aloud. */
|
|
59
|
+
onReply?: (text: string) => void;
|
|
60
|
+
}
|
|
61
|
+
export interface BrowserAssistantTransport extends AssistantTransport {
|
|
62
|
+
/** Stop the turn in flight, if any. */
|
|
63
|
+
abort(): void;
|
|
64
|
+
}
|
|
65
|
+
/** The one line the chat opens with. */
|
|
66
|
+
export declare const GREETING = "What would you like to build?";
|
|
67
|
+
/**
|
|
68
|
+
* An `AssistantTransport` that runs entirely in the browser: one thread, kept
|
|
69
|
+
* in memory, whose turns go to the on-device model with the recipes as a
|
|
70
|
+
* constrained schema. The model's `add`/`remove` are applied through the same
|
|
71
|
+
* recipe store the Planner cards drive. It never navigates.
|
|
72
|
+
*/
|
|
73
|
+
export declare function createBrowserAssistantTransport(options: BrowserTransportOptions): BrowserAssistantTransport;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { createSliceController, } from "../planner/commands/index.js";
|
|
2
|
+
import { buildResponseSchema, describeChange, parseChange, } from "./change.js";
|
|
3
|
+
import { buildMatchIndex, matchText } from "./match.js";
|
|
4
|
+
import { buildSystemPrompt } from "./prompt.js";
|
|
5
|
+
const THREAD_TITLE = 'Plan your app';
|
|
6
|
+
/** The one line the chat opens with. */
|
|
7
|
+
export const GREETING = 'What would you like to build?';
|
|
8
|
+
/** Earlier turns sent back to the model; a small model needs a short context. */
|
|
9
|
+
const HISTORY_TURNS = 6;
|
|
10
|
+
/** A turn's JSON fits well inside this; a looping model is cut off, not left running. */
|
|
11
|
+
const MAX_REPLY_TOKENS = 400;
|
|
12
|
+
const hasKeys = (value) => Object.keys(value).length > 0;
|
|
13
|
+
/** Run one command; what it said, or nothing when it was refused. */
|
|
14
|
+
function runCommand(controller, name, input) {
|
|
15
|
+
const result = controller.run({ name, input });
|
|
16
|
+
return result.ok
|
|
17
|
+
? { summary: result.receipt.summary, undoId: result.receipt.undoId }
|
|
18
|
+
: { summary: '' };
|
|
19
|
+
}
|
|
20
|
+
const runSummary = (controller, name, input) => runCommand(controller, name, input).summary;
|
|
21
|
+
/**
|
|
22
|
+
* Command calls from a host server, in order. A refused one is said once and
|
|
23
|
+
* stops the rest, so a half-applied sequence never looks complete.
|
|
24
|
+
*/
|
|
25
|
+
function runCommands(controller, calls) {
|
|
26
|
+
const lines = [];
|
|
27
|
+
for (const call of calls) {
|
|
28
|
+
const result = controller.run(call);
|
|
29
|
+
if (!result.ok) {
|
|
30
|
+
lines.push(`The server's ${call.name} was refused: ${result.error.message}`);
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
if (result.receipt.summary)
|
|
34
|
+
lines.push(result.receipt.summary);
|
|
35
|
+
}
|
|
36
|
+
return lines.join(' ');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The model's `add` and `remove` as commands, reported as one change: what
|
|
40
|
+
* really ended up on or off, after `requires`, and what was kept because
|
|
41
|
+
* another recipe needs it.
|
|
42
|
+
*/
|
|
43
|
+
function applyRecipes(controller, change) {
|
|
44
|
+
const added = change.add.length
|
|
45
|
+
? controller.run({ name: 'add_recipes', input: { ids: change.add } })
|
|
46
|
+
: null;
|
|
47
|
+
const removed = change.remove.length
|
|
48
|
+
? controller.run({ name: 'remove_recipes', input: { ids: change.remove } })
|
|
49
|
+
: null;
|
|
50
|
+
const on = added?.ok ? (added.receipt.changes?.added ?? []) : [];
|
|
51
|
+
const off = removed?.ok ? (removed.receipt.changes?.removed ?? []) : [];
|
|
52
|
+
return {
|
|
53
|
+
// A recipe added and removed in one turn (one pulled in by the other) is neither.
|
|
54
|
+
added: on.filter((id) => !off.includes(id)),
|
|
55
|
+
removed: off.filter((id) => !on.includes(id)),
|
|
56
|
+
kept: removed?.ok ? (removed.receipt.changes?.kept ?? []) : [],
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* An `AssistantTransport` that runs entirely in the browser: one thread, kept
|
|
61
|
+
* in memory, whose turns go to the on-device model with the recipes as a
|
|
62
|
+
* constrained schema. The model's `add`/`remove` are applied through the same
|
|
63
|
+
* recipe store the Planner cards drive. It never navigates.
|
|
64
|
+
*/
|
|
65
|
+
export function createBrowserAssistantTransport(options) {
|
|
66
|
+
const now = options.now ?? (() => Date.now());
|
|
67
|
+
let counter = 0;
|
|
68
|
+
const id = (prefix) => `${prefix}-${++counter}`;
|
|
69
|
+
const thread = {
|
|
70
|
+
id: 'planner',
|
|
71
|
+
title: THREAD_TITLE,
|
|
72
|
+
isResolved: false,
|
|
73
|
+
messageCount: 0,
|
|
74
|
+
lastMessageAt: null,
|
|
75
|
+
};
|
|
76
|
+
const messages = [];
|
|
77
|
+
const seen = new Map();
|
|
78
|
+
let controller = null;
|
|
79
|
+
const push = (role, content, clientRequestId, toolCallData) => {
|
|
80
|
+
const message = {
|
|
81
|
+
id: id('m'),
|
|
82
|
+
threadId: thread.id,
|
|
83
|
+
content,
|
|
84
|
+
role,
|
|
85
|
+
createdAt: new Date(now()),
|
|
86
|
+
...(clientRequestId ? { clientRequestId } : {}),
|
|
87
|
+
};
|
|
88
|
+
if (toolCallData)
|
|
89
|
+
message.toolCallData = toolCallData;
|
|
90
|
+
messages.push(message);
|
|
91
|
+
thread.messageCount = messages.length;
|
|
92
|
+
thread.lastMessageAt = message.createdAt;
|
|
93
|
+
return message;
|
|
94
|
+
};
|
|
95
|
+
const planner = options.controller ??
|
|
96
|
+
createSliceController({
|
|
97
|
+
store: options.store,
|
|
98
|
+
settings: options.settings,
|
|
99
|
+
theme: options.theme,
|
|
100
|
+
});
|
|
101
|
+
const index = buildMatchIndex(options.recipes, options.cookbooks ?? [], {
|
|
102
|
+
theme: !!options.theme,
|
|
103
|
+
});
|
|
104
|
+
const greeting = push('assistant', GREETING);
|
|
105
|
+
async function turn(text) {
|
|
106
|
+
const model = options.model();
|
|
107
|
+
if (!model) {
|
|
108
|
+
return {
|
|
109
|
+
content: (typeof options.unavailable === 'function'
|
|
110
|
+
? options.unavailable()
|
|
111
|
+
: options.unavailable) ??
|
|
112
|
+
'Download a model first, then I can help. The cards on the Planner page work without one.',
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
controller = new AbortController();
|
|
116
|
+
try {
|
|
117
|
+
const cookbooks = options.cookbooks ?? [];
|
|
118
|
+
const prior = messages
|
|
119
|
+
.filter((m) => m !== greeting)
|
|
120
|
+
.slice(0, -1)
|
|
121
|
+
.slice(-HISTORY_TURNS)
|
|
122
|
+
.map((m) => ({
|
|
123
|
+
role: m.role,
|
|
124
|
+
content: m.content,
|
|
125
|
+
}));
|
|
126
|
+
const matches = matchText(index, text);
|
|
127
|
+
const raw = await model.message(text, {
|
|
128
|
+
history: [
|
|
129
|
+
{
|
|
130
|
+
role: 'system',
|
|
131
|
+
content: buildSystemPrompt(options.recipes, options.store.ids, cookbooks, options.settings?.read(), matches, options.theme ? { current: options.theme.read() } : undefined),
|
|
132
|
+
},
|
|
133
|
+
...prior,
|
|
134
|
+
],
|
|
135
|
+
responseSchema: buildResponseSchema(options.recipes, cookbooks, !!options.settings, !!options.theme),
|
|
136
|
+
temperature: 0,
|
|
137
|
+
maxTokens: MAX_REPLY_TOKENS,
|
|
138
|
+
signal: controller.signal,
|
|
139
|
+
});
|
|
140
|
+
const change = parseChange(raw, options.recipes, cookbooks, {
|
|
141
|
+
commands: typeof options.acceptCommands === 'function'
|
|
142
|
+
? options.acceptCommands()
|
|
143
|
+
: options.acceptCommands,
|
|
144
|
+
});
|
|
145
|
+
const applied = applyRecipes(planner, change);
|
|
146
|
+
const settingsText = options.settings && hasKeys(change.settings)
|
|
147
|
+
? runSummary(planner, 'set_settings', change.settings)
|
|
148
|
+
: '';
|
|
149
|
+
const previousTheme = options.theme?.read();
|
|
150
|
+
const themed = options.theme && hasKeys(change.theme)
|
|
151
|
+
? runCommand(planner, 'set_theme', change.theme)
|
|
152
|
+
: null;
|
|
153
|
+
const undo = themed?.undoId && options.themeUndos
|
|
154
|
+
? options.themeUndos.record(previousTheme, themed.undoId)
|
|
155
|
+
: undefined;
|
|
156
|
+
const commandText = (change.commands ?? []).length
|
|
157
|
+
? runCommands(planner, change.commands ?? [])
|
|
158
|
+
: '';
|
|
159
|
+
const summary = [
|
|
160
|
+
describeChange(applied, options.recipes),
|
|
161
|
+
settingsText,
|
|
162
|
+
themed?.summary ?? '',
|
|
163
|
+
commandText,
|
|
164
|
+
]
|
|
165
|
+
.filter(Boolean)
|
|
166
|
+
.join(' ');
|
|
167
|
+
// Backstop: a small model sometimes misses a plain "I run a bakery".
|
|
168
|
+
// A strong cookbook match is offered anyway (never applied without the
|
|
169
|
+
// click) when the model offered none and none is applied or pending.
|
|
170
|
+
// Strong recipe matches are only hinted, never added.
|
|
171
|
+
const strongCookbook = matches.find((m) => m.kind === 'cookbook' && m.confidence === 'strong')?.id;
|
|
172
|
+
const cookbookId = change.cookbook ??
|
|
173
|
+
(strongCookbook && options.offers?.engaged?.() === false
|
|
174
|
+
? strongCookbook
|
|
175
|
+
: null);
|
|
176
|
+
const offer = cookbookId
|
|
177
|
+
? (options.offers?.offer(cookbookId) ?? undefined)
|
|
178
|
+
: undefined;
|
|
179
|
+
const offered = offer
|
|
180
|
+
? cookbooks.find((c) => c.id === cookbookId)
|
|
181
|
+
: undefined;
|
|
182
|
+
const line = change.reply || (offered ? `Set up ${offered.name}?` : '');
|
|
183
|
+
const reply = [line, summary].filter(Boolean).join(' ');
|
|
184
|
+
if (line)
|
|
185
|
+
options.onReply?.(line);
|
|
186
|
+
// One ref renders as is; a cookbook offer and a theme Undo in one turn ride together.
|
|
187
|
+
const refs = offer && undo ? [offer, undo] : (offer ?? undo);
|
|
188
|
+
return { content: reply || 'Done.', refs };
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
if (controller?.signal.aborted)
|
|
192
|
+
return { content: 'Stopped.' };
|
|
193
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
194
|
+
return { content: `Sorry, the model could not answer: ${detail}` };
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
controller = null;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
async listThreads() {
|
|
202
|
+
return [thread];
|
|
203
|
+
},
|
|
204
|
+
async createThread() {
|
|
205
|
+
return thread;
|
|
206
|
+
},
|
|
207
|
+
async loadMessages() {
|
|
208
|
+
return [...messages];
|
|
209
|
+
},
|
|
210
|
+
async sendMessage(input) {
|
|
211
|
+
const cached = seen.get(input.clientRequestId);
|
|
212
|
+
if (cached)
|
|
213
|
+
return cached;
|
|
214
|
+
const userMessage = push('user', input.content, input.clientRequestId);
|
|
215
|
+
const reply = await turn(input.content);
|
|
216
|
+
const result = {
|
|
217
|
+
inProgress: false,
|
|
218
|
+
userMessage,
|
|
219
|
+
assistantMessage: push('assistant', reply.content, undefined, reply.refs),
|
|
220
|
+
};
|
|
221
|
+
seen.set(input.clientRequestId, result);
|
|
222
|
+
return result;
|
|
223
|
+
},
|
|
224
|
+
async uploadAttachment(file) {
|
|
225
|
+
throw new Error(`The assistant cannot take attachments (${file.name}).`);
|
|
226
|
+
},
|
|
227
|
+
abort() {
|
|
228
|
+
controller?.abort();
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { LocalSpeechModel, SpeechModelId } from './voice.svelte.ts';
|
|
2
|
+
export { createHandsFreeCapture } from '@happyvertical/smrt-ui/forms/hands-free';
|
|
3
|
+
/**
|
|
4
|
+
* The real speech model: Moonshine or Whisper in a Web Worker, built by this
|
|
5
|
+
* app because the worker is the one module that imports
|
|
6
|
+
* `@huggingface/transformers`, and the engine (`@happyvertical/speech`) is
|
|
7
|
+
* loaded here too, so only this app's bundler pulls those libraries in. Kept
|
|
8
|
+
* apart from the voice logic so tests never load a worker.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createSpeechModel(model: SpeechModelId): LocalSpeechModel;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createLocalSpeechModel } from '@happyvertical/smrt-svelte/browser-ai';
|
|
2
|
+
import SpeechWorker from '@happyvertical/smrt-svelte/browser-ai/whisper-worker?worker';
|
|
3
|
+
export { createHandsFreeCapture } from '@happyvertical/smrt-ui/forms/hands-free';
|
|
4
|
+
/**
|
|
5
|
+
* The real speech model: Moonshine or Whisper in a Web Worker, built by this
|
|
6
|
+
* app because the worker is the one module that imports
|
|
7
|
+
* `@huggingface/transformers`, and the engine (`@happyvertical/speech`) is
|
|
8
|
+
* loaded here too, so only this app's bundler pulls those libraries in. Kept
|
|
9
|
+
* apart from the voice logic so tests never load a worker.
|
|
10
|
+
*/
|
|
11
|
+
export function createSpeechModel(model) {
|
|
12
|
+
return createLocalSpeechModel({
|
|
13
|
+
model,
|
|
14
|
+
createWorker: () => new SpeechWorker(),
|
|
15
|
+
loadSpeech: () => import('@happyvertical/speech/local'),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { type BrowserSpeechSupport, type LocalSpeechModel as SpeechModelHandle, type STTAdapter } from '@happyvertical/smrt-svelte/browser-ai';
|
|
2
|
+
/**
|
|
3
|
+
* Voice typing for the assistant. The browser's own speech recognition is
|
|
4
|
+
* used where it works (Chrome, Edge, Safari). Where it does not (Firefox has
|
|
5
|
+
* none; Brave has the API with no speech service behind it), the visitor is
|
|
6
|
+
* offered a one-time download of a small speech model that then runs on their
|
|
7
|
+
* own device. Nothing is downloaded without their say-so.
|
|
8
|
+
*/
|
|
9
|
+
/** The downloadable model the offer drives (smrt-svelte's `LocalSpeechModel`). */
|
|
10
|
+
export type LocalSpeechModel = SpeechModelHandle;
|
|
11
|
+
/** The speech models the visitor can pick (smrt-svelte's short names). */
|
|
12
|
+
export type SpeechModelId = 'moonshine-base' | 'moonshine-tiny' | 'whisper-tiny.en';
|
|
13
|
+
export interface SpeechModelChoice {
|
|
14
|
+
id: SpeechModelId;
|
|
15
|
+
label: string;
|
|
16
|
+
/** One line on what it is good for. */
|
|
17
|
+
note: string;
|
|
18
|
+
/** smrt-svelte adapter type that runs it. */
|
|
19
|
+
adapter: 'moonshine' | 'whisper-local';
|
|
20
|
+
/** First-download size in bytes (smrt-svelte's estimate). */
|
|
21
|
+
bytes: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Moonshine base first: it is accurate enough for plain talking, where the
|
|
25
|
+
* tiny model garbled words. Tiny stays for the quickest, least exact option.
|
|
26
|
+
*/
|
|
27
|
+
export declare const SPEECH_MODELS: readonly SpeechModelChoice[];
|
|
28
|
+
export declare const DEFAULT_SPEECH_MODEL: SpeechModelId;
|
|
29
|
+
export declare function speechModelChoice(id: SpeechModelId): SpeechModelChoice;
|
|
30
|
+
export type VoiceStatus =
|
|
31
|
+
/** Probing the browser. */
|
|
32
|
+
'checking'
|
|
33
|
+
/** The browser's own speech recognition works; nothing to offer. */
|
|
34
|
+
| 'browser'
|
|
35
|
+
/** Not usable here: offer the local model (or turn on a cached one). */
|
|
36
|
+
| 'offer' | 'downloading' | 'ready' | 'error'
|
|
37
|
+
/** The visitor said "not now" for this visit. */
|
|
38
|
+
| 'dismissed';
|
|
39
|
+
export type DictationSource = () => Promise<STTAdapter>;
|
|
40
|
+
export interface VoiceOptions {
|
|
41
|
+
storage: Storage | null;
|
|
42
|
+
/** Makes the downloadable model. Not called when the browser's works. */
|
|
43
|
+
createModel: (model: SpeechModelId) => LocalSpeechModel;
|
|
44
|
+
probe?: () => Promise<BrowserSpeechSupport>;
|
|
45
|
+
/** Builds the dictation source for the browser's own recogniser. */
|
|
46
|
+
browserSource?: () => DictationSource;
|
|
47
|
+
/** Builds the dictation source that records and transcribes locally. */
|
|
48
|
+
localSource?: (model: LocalSpeechModel, choice: SpeechModelChoice) => DictationSource;
|
|
49
|
+
}
|
|
50
|
+
export declare const VOICE_PREFS_KEY = "smrt-planner:voice:v1";
|
|
51
|
+
/** Whether the visitor has downloaded (and so accepted) the local model. */
|
|
52
|
+
export declare function loadVoiceConsent(storage: Storage | null): boolean;
|
|
53
|
+
export declare function saveVoiceConsent(storage: Storage | null, local: boolean): void;
|
|
54
|
+
/** Whether the visitor chose the downloadable model over the browser's own. */
|
|
55
|
+
export declare function loadPreferLocal(storage: Storage | null): boolean;
|
|
56
|
+
/** The speech model the visitor chose (Moonshine base until they say). */
|
|
57
|
+
export declare function loadSpeechModel(storage: Storage | null): SpeechModelId;
|
|
58
|
+
/** What to do for a probe result, given what is on the device. */
|
|
59
|
+
export type VoicePlan = 'browser' | 'offer' | 'enable-cached';
|
|
60
|
+
export declare function planVoice(support: BrowserSpeechSupport, consented: boolean, cached: boolean): VoicePlan;
|
|
61
|
+
export declare class VoiceSession {
|
|
62
|
+
status: VoiceStatus;
|
|
63
|
+
/** Whether the model files are already on this device. */
|
|
64
|
+
cached: boolean;
|
|
65
|
+
/** Download progress, 0 to 1. */
|
|
66
|
+
progress: number;
|
|
67
|
+
error: string;
|
|
68
|
+
/** Whether the browser's own recogniser works here (whatever is in use). */
|
|
69
|
+
browserWorks: boolean;
|
|
70
|
+
/** The visitor chose the downloadable model even where the browser's works. */
|
|
71
|
+
preferLocal: boolean;
|
|
72
|
+
/** The size the offer shows, in bytes. */
|
|
73
|
+
size: number;
|
|
74
|
+
/** The chosen downloadable model. */
|
|
75
|
+
model: SpeechModelId;
|
|
76
|
+
/** Every byte is in and the model is being prepared ("Getting ready"). */
|
|
77
|
+
preparing: boolean;
|
|
78
|
+
/** The dictation source for the composer, or null when voice is off. */
|
|
79
|
+
dictation: DictationSource | null;
|
|
80
|
+
private handle;
|
|
81
|
+
private abort;
|
|
82
|
+
private readonly options;
|
|
83
|
+
/**
|
|
84
|
+
* Bumped by every init, enable and restart. Async work captures the value
|
|
85
|
+
* it started under and drops its result when a newer one has begun, so a
|
|
86
|
+
* superseded probe or download cannot overwrite the current status or
|
|
87
|
+
* dictation source.
|
|
88
|
+
*/
|
|
89
|
+
private generation;
|
|
90
|
+
constructor(options: VoiceOptions);
|
|
91
|
+
/** Probe the browser and decide what to offer. Call once. */
|
|
92
|
+
init(): Promise<void>;
|
|
93
|
+
private probeAndOffer;
|
|
94
|
+
/** Download (or read from the cache) and turn voice typing on. */
|
|
95
|
+
enable(): Promise<void>;
|
|
96
|
+
/** Switch between the browser's recogniser and the downloadable model. */
|
|
97
|
+
setPreferLocal(on: boolean): Promise<void>;
|
|
98
|
+
/** Pick the downloadable model; the new one is offered (or turned on if cached). */
|
|
99
|
+
setModel(id: SpeechModelId): Promise<void>;
|
|
100
|
+
/** Save a changed choice, let go of the current model, and decide again. */
|
|
101
|
+
private restart;
|
|
102
|
+
/** Stop a download in progress. */
|
|
103
|
+
cancel(): void;
|
|
104
|
+
/** "Not now": hide the offer for this visit. */
|
|
105
|
+
dismiss(): void;
|
|
106
|
+
dispose(): void;
|
|
107
|
+
}
|