@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,231 @@
|
|
|
1
|
+
import { isShellLayoutEmpty, } from '@happyvertical/smrt-svelte/workspace/layout';
|
|
2
|
+
import { setSampleTaxRate } from "../data/packs.js";
|
|
3
|
+
import { recipeState } from "../recipes/state.svelte.js";
|
|
4
|
+
import { hasTaxRateRow, readSettings, writeSettings, } from "../settings/app-settings.js";
|
|
5
|
+
import { compactTheme } from "../theme/theme.js";
|
|
6
|
+
import { assembleCookbook } from "./assemble.js";
|
|
7
|
+
import { cookbookFromLegacySearch, hasLegacyState } from "./legacy.js";
|
|
8
|
+
import { BACKUP_KEY, browserStorage, loadCookbook, PREVIOUS_STORAGE_KEY, removeKey, saveCookbook, writeKey, } from "./storage.js";
|
|
9
|
+
import { parseCookbookText } from "./validate.js";
|
|
10
|
+
/** Where the planner's AppShell keeps its own settings (panel states, sizes). */
|
|
11
|
+
export const SHELL_STORAGE_KEY = 'smrt-planner:shell';
|
|
12
|
+
export const SAVE_DELAY_MS = 300;
|
|
13
|
+
/**
|
|
14
|
+
* The single source of truth for what a visitor has built. Recipes and
|
|
15
|
+
* options stay in `recipeState` (the one store views read); this adds the
|
|
16
|
+
* `layout` field and the persistence around both. `snapshot()` is the
|
|
17
|
+
* Cookbook, whether it is saved, exported or compared.
|
|
18
|
+
*/
|
|
19
|
+
export class CookbookStore {
|
|
20
|
+
/** The shell layout, owned here and passed to `AppShell`. */
|
|
21
|
+
layout = $state();
|
|
22
|
+
/** The app's name and description (`set_name`); not shown in the UI yet. */
|
|
23
|
+
name = $state();
|
|
24
|
+
description = $state();
|
|
25
|
+
/** The app's theme; undefined is the default. The shell applies it live. */
|
|
26
|
+
theme = $state();
|
|
27
|
+
/**
|
|
28
|
+
* Customised overview pages by overview id, canonical overrides only. Each
|
|
29
|
+
* page's `createOverview` reads its entry and writes edits back here.
|
|
30
|
+
*/
|
|
31
|
+
overviews = $state.raw({});
|
|
32
|
+
persist = $state('unknown');
|
|
33
|
+
/** False until the saved cookbook has been read; nothing saves before. */
|
|
34
|
+
loaded = $state(false);
|
|
35
|
+
/** Why the saved cookbook was not used, if it was not. */
|
|
36
|
+
loadNotice = $state('');
|
|
37
|
+
/**
|
|
38
|
+
* True when saving would destroy the only copy of something (an unreadable
|
|
39
|
+
* value that could not be kept aside, or a saved cookbook a legacy link
|
|
40
|
+
* replaced without a backup). Nothing is written until the visitor imports
|
|
41
|
+
* or resets.
|
|
42
|
+
*/
|
|
43
|
+
saveBlocked = false;
|
|
44
|
+
/** A migrated legacy link whose data is not safely stored: keep the URL. */
|
|
45
|
+
keepLegacyUrl = $state(false);
|
|
46
|
+
/** A cookbook was chosen (cookbook, import) before the saved one was read. */
|
|
47
|
+
replacedBeforeLoad = false;
|
|
48
|
+
/** The pre-rename key still holds a backup; the next good save removes it. */
|
|
49
|
+
previousKept = false;
|
|
50
|
+
storage = null;
|
|
51
|
+
timer;
|
|
52
|
+
snapshot() {
|
|
53
|
+
return assembleCookbook(recipeState.data, {
|
|
54
|
+
layout: this.layout,
|
|
55
|
+
theme: $state.snapshot(this.theme),
|
|
56
|
+
overviews: this.overviews,
|
|
57
|
+
name: this.name,
|
|
58
|
+
description: this.description,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/** A page's stored override, or `null` when it is on its defaults. */
|
|
62
|
+
overview(id) {
|
|
63
|
+
return Object.hasOwn(this.overviews, id) ? this.overviews[id] : null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* An edit from an overview page: the controller's canonical override, or
|
|
67
|
+
* `null` (back to the defaults), which removes the page's key.
|
|
68
|
+
*/
|
|
69
|
+
setOverview(id, override) {
|
|
70
|
+
const next = Object.fromEntries(Object.entries(this.overviews).filter(([key]) => key !== id));
|
|
71
|
+
if (override)
|
|
72
|
+
next[id] = override;
|
|
73
|
+
this.overviews = next;
|
|
74
|
+
}
|
|
75
|
+
/** An edit from the shell or its layout editor; an empty one clears it. */
|
|
76
|
+
setLayout(next) {
|
|
77
|
+
this.layout = isShellLayoutEmpty(next) ? undefined : next;
|
|
78
|
+
}
|
|
79
|
+
/** Replace everything from a validated cookbook. */
|
|
80
|
+
apply(cookbook) {
|
|
81
|
+
recipeState.load(cookbook);
|
|
82
|
+
this.layout = cookbook.layout;
|
|
83
|
+
this.theme = cookbook.theme;
|
|
84
|
+
this.name = cookbook.name;
|
|
85
|
+
this.description = cookbook.description;
|
|
86
|
+
this.overviews = { ...(cookbook.overviews ?? {}) };
|
|
87
|
+
setSampleTaxRate(hasTaxRateRow(cookbook) ? readSettings(cookbook).taxRate : undefined);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* A sentence naming recipes and features the loaded cookbook has that this
|
|
91
|
+
* version does not know (they are kept, not applied), or ''.
|
|
92
|
+
*/
|
|
93
|
+
get unavailableNotice() {
|
|
94
|
+
const ids = [
|
|
95
|
+
...recipeState.unavailableRecipes,
|
|
96
|
+
...recipeState.unavailableFeatures,
|
|
97
|
+
];
|
|
98
|
+
if (!ids.length)
|
|
99
|
+
return '';
|
|
100
|
+
const n = ids.length;
|
|
101
|
+
return `${n} ${n === 1 ? 'recipe' : 'recipes'} in this cookbook ${n === 1 ? "isn't" : "aren't"} available in this version: ${ids.join(', ')}. They are kept when you save or export.`;
|
|
102
|
+
}
|
|
103
|
+
/** Remove the unavailable ids from the cookbook, on the visitor's say. */
|
|
104
|
+
removeUnavailable() {
|
|
105
|
+
recipeState.removeUnavailable();
|
|
106
|
+
this.scheduleSave();
|
|
107
|
+
}
|
|
108
|
+
/** Change the theme; the default (or an empty one) clears it. */
|
|
109
|
+
setTheme(next) {
|
|
110
|
+
this.theme = compactTheme(next);
|
|
111
|
+
}
|
|
112
|
+
/** The app settings (currency, tax rate, payment terms), read from the policy rows. */
|
|
113
|
+
settings() {
|
|
114
|
+
return readSettings(this.snapshot());
|
|
115
|
+
}
|
|
116
|
+
/** Write the settings as policy rows. Existing records are untouched. */
|
|
117
|
+
setSettings(settings) {
|
|
118
|
+
const next = writeSettings(this.snapshot(), settings);
|
|
119
|
+
recipeState.rows = next.policies.map((row) => ({ ...row }));
|
|
120
|
+
setSampleTaxRate(hasTaxRateRow(next) ? readSettings(next).taxRate : undefined);
|
|
121
|
+
}
|
|
122
|
+
/** Replace on the visitor's say-so (an import): saving is allowed again. */
|
|
123
|
+
replace(cookbook) {
|
|
124
|
+
this.apply(cookbook);
|
|
125
|
+
if (!this.loaded)
|
|
126
|
+
this.replacedBeforeLoad = true;
|
|
127
|
+
this.saveBlocked = false;
|
|
128
|
+
this.keepLegacyUrl = false;
|
|
129
|
+
}
|
|
130
|
+
/** Back to an empty cookbook, and the shell's own settings to defaults. */
|
|
131
|
+
reset() {
|
|
132
|
+
recipeState.clear();
|
|
133
|
+
this.layout = undefined;
|
|
134
|
+
this.theme = undefined;
|
|
135
|
+
this.name = undefined;
|
|
136
|
+
this.description = undefined;
|
|
137
|
+
this.overviews = {};
|
|
138
|
+
try {
|
|
139
|
+
globalThis.localStorage?.removeItem(SHELL_STORAGE_KEY);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Storage may be unavailable (private mode); the cookbook still resets.
|
|
143
|
+
}
|
|
144
|
+
this.saveBlocked = false;
|
|
145
|
+
this.keepLegacyUrl = false;
|
|
146
|
+
}
|
|
147
|
+
/** Validate and apply JSON text, e.g. a chosen file. Applies nothing on failure. */
|
|
148
|
+
importText(text) {
|
|
149
|
+
const result = parseCookbookText(text);
|
|
150
|
+
if (result.ok)
|
|
151
|
+
this.replace(result.cookbook);
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Read the saved cookbook, then migrate a legacy `?r=` / `?o=` link into it.
|
|
156
|
+
* Call once in the browser, before `loaded` lets saving start. Returns true
|
|
157
|
+
* when a legacy link was imported, so the caller can clean the URL.
|
|
158
|
+
*/
|
|
159
|
+
hydrate(search, storage = browserStorage()) {
|
|
160
|
+
this.storage = storage;
|
|
161
|
+
const outcome = loadCookbook(storage);
|
|
162
|
+
if (outcome.status === 'loaded')
|
|
163
|
+
this.previousKept = outcome.previousKept;
|
|
164
|
+
// What the visitor chose a moment ago (before the first navigation settled)
|
|
165
|
+
// wins over what was saved; the next save keeps it.
|
|
166
|
+
if (outcome.status === 'loaded' && !this.replacedBeforeLoad) {
|
|
167
|
+
this.apply(outcome.cookbook);
|
|
168
|
+
if (outcome.dropped?.length) {
|
|
169
|
+
this.loadNotice = `Some saved page customisations could not be used and were removed: ${outcome.dropped.join(' ')}`;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else if (outcome.status === 'unreadable') {
|
|
173
|
+
this.saveBlocked = !outcome.keptAside;
|
|
174
|
+
this.loadNotice = outcome.keptAside
|
|
175
|
+
? `The saved cookbook could not be read (${outcome.reason}) and was kept aside; starting empty.`
|
|
176
|
+
: `The saved cookbook could not be read (${outcome.reason}). Starting empty without overwriting it; import or reset to save again.`;
|
|
177
|
+
}
|
|
178
|
+
let migrated = false;
|
|
179
|
+
if (hasLegacyState(search)) {
|
|
180
|
+
// An explicit link wins, but what it replaces is backed up first.
|
|
181
|
+
if (outcome.status === 'loaded' &&
|
|
182
|
+
!writeKey(storage, BACKUP_KEY, JSON.stringify(outcome.cookbook))) {
|
|
183
|
+
this.saveBlocked = true;
|
|
184
|
+
}
|
|
185
|
+
this.apply(cookbookFromLegacySearch(search));
|
|
186
|
+
migrated = true;
|
|
187
|
+
}
|
|
188
|
+
this.persist = outcome.status === 'unavailable' ? 'memory' : 'unknown';
|
|
189
|
+
this.loaded = true;
|
|
190
|
+
// Persist a migration at once: the URL is about to lose its copy.
|
|
191
|
+
if (migrated) {
|
|
192
|
+
const saved = this.save();
|
|
193
|
+
// The URL held the only copy unless it is now safely stored.
|
|
194
|
+
this.keepLegacyUrl = !saved;
|
|
195
|
+
}
|
|
196
|
+
return migrated;
|
|
197
|
+
}
|
|
198
|
+
/** Save now. Falls back to memory-only (and says so) if storage refuses. */
|
|
199
|
+
save() {
|
|
200
|
+
clearTimeout(this.timer);
|
|
201
|
+
this.timer = undefined;
|
|
202
|
+
if (!this.loaded)
|
|
203
|
+
return false;
|
|
204
|
+
if (this.saveBlocked) {
|
|
205
|
+
this.persist = 'memory';
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
const saved = saveCookbook(this.storage, this.snapshot());
|
|
209
|
+
this.persist = saved ? 'ok' : 'memory';
|
|
210
|
+
if (saved && this.previousKept) {
|
|
211
|
+
this.previousKept = !removeKey(this.storage, PREVIOUS_STORAGE_KEY);
|
|
212
|
+
}
|
|
213
|
+
// Once stored, the legacy parameters are redundant and may be cleaned.
|
|
214
|
+
if (saved)
|
|
215
|
+
this.keepLegacyUrl = false;
|
|
216
|
+
return saved;
|
|
217
|
+
}
|
|
218
|
+
/** Save soon; many quick edits make one write. */
|
|
219
|
+
scheduleSave() {
|
|
220
|
+
if (!this.loaded)
|
|
221
|
+
return;
|
|
222
|
+
clearTimeout(this.timer);
|
|
223
|
+
this.timer = setTimeout(() => this.save(), SAVE_DELAY_MS);
|
|
224
|
+
}
|
|
225
|
+
/** Save any pending change now (page hide). */
|
|
226
|
+
flush() {
|
|
227
|
+
if (this.timer !== undefined)
|
|
228
|
+
this.save();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
export const cookbookStore = new CookbookStore();
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { OverviewOverride } from '@happyvertical/smrt-svelte/overview/server';
|
|
2
|
+
import type { ShellLayout } from '@happyvertical/smrt-svelte/workspace/layout';
|
|
3
|
+
import type { FieldPolicyRow } from '../recipes/policy.ts';
|
|
4
|
+
import type { ExposureSurface } from '../recipes/types.ts';
|
|
5
|
+
import type { ThemeSetting } from '../theme/theme.ts';
|
|
6
|
+
/**
|
|
7
|
+
* Placeholder until happyvertical/smrt#3604 publishes the real schema URL.
|
|
8
|
+
* The planner writes it so a file says what it is; it does not fetch it.
|
|
9
|
+
*/
|
|
10
|
+
export declare const COOKBOOK_SCHEMA = "https://s-m-r-t.dev/schemas/cookbook/v1.json";
|
|
11
|
+
/**
|
|
12
|
+
* The URL files carried while the document was called a blueprint. Import
|
|
13
|
+
* still accepts it; nothing writes it.
|
|
14
|
+
*/
|
|
15
|
+
export declare const PREVIOUS_SCHEMA = "https://s-m-r-t.dev/schemas/blueprint/v1.json";
|
|
16
|
+
export declare const COOKBOOK_VERSION = 1;
|
|
17
|
+
/**
|
|
18
|
+
* Everything a visitor builds, in one portable document. This is the first
|
|
19
|
+
* concrete instance of the format happyvertical/smrt#3604 will pin; the
|
|
20
|
+
* planner's saved state, its JSON export and the localStorage value are all
|
|
21
|
+
* this one shape.
|
|
22
|
+
*
|
|
23
|
+
* Sample or created records are NOT part of it: they are demo data the
|
|
24
|
+
* in-memory `DataSource` reseeds, not something that scaffolds an app.
|
|
25
|
+
*/
|
|
26
|
+
export interface Cookbook {
|
|
27
|
+
$schema: string;
|
|
28
|
+
version: typeof COOKBOOK_VERSION;
|
|
29
|
+
/** The app's name (`set_name`); absent means the applied cookbook's, else `my-app`. */
|
|
30
|
+
name?: string;
|
|
31
|
+
/** A line about the app (`set_name`). */
|
|
32
|
+
description?: string;
|
|
33
|
+
/** Added recipe ids, sorted; requirements are already included. */
|
|
34
|
+
recipes: string[];
|
|
35
|
+
/**
|
|
36
|
+
* Added feature models (qualified names), sorted and unique: exposed
|
|
37
|
+
* catalog models no recipe covers. Absent in older files, read as `[]`.
|
|
38
|
+
*/
|
|
39
|
+
features: string[];
|
|
40
|
+
/** App-scope smrt-fields policy rows (the recipe options). */
|
|
41
|
+
policies: FieldPolicyRow[];
|
|
42
|
+
/**
|
|
43
|
+
* Surfaces switched off per model, keyed by qualified model name. Omitted
|
|
44
|
+
* when nothing is narrowed.
|
|
45
|
+
*/
|
|
46
|
+
exposure?: Record<string, ExposureSurface[]>;
|
|
47
|
+
/** The shell layout (smrt-svelte `ShellLayout`), applied by `AppShell`. */
|
|
48
|
+
layout?: ShellLayout;
|
|
49
|
+
/**
|
|
50
|
+
* The app's look: a smrt-ui preset, colour scheme and optional brand colour.
|
|
51
|
+
* Absent in older files, read as the default theme.
|
|
52
|
+
*/
|
|
53
|
+
theme?: ThemeSetting;
|
|
54
|
+
/**
|
|
55
|
+
* Customised overview pages (smrt#3727), keyed by overview id: a section
|
|
56
|
+
* page's id is its layout id (`section:sales`, `custom:shop-2`). Each value
|
|
57
|
+
* is smrt-svelte's sparse `OverviewOverride` exactly, stored canonical (as
|
|
58
|
+
* `checkOverviewOverride` returns it) and validated against the page's
|
|
59
|
+
* definition on every load and import. Omitted when no page is customised;
|
|
60
|
+
* a page on its defaults has no key. Additive in version 1: older readers
|
|
61
|
+
* ignore unknown keys.
|
|
62
|
+
*/
|
|
63
|
+
overviews?: Record<string, OverviewOverride>;
|
|
64
|
+
}
|
|
65
|
+
export type CookbookResult = {
|
|
66
|
+
ok: true;
|
|
67
|
+
cookbook: Cookbook;
|
|
68
|
+
/**
|
|
69
|
+
* What was dropped while reading (an invalid or unknown overview
|
|
70
|
+
* widget), one sentence each. Absent when nothing was.
|
|
71
|
+
*/
|
|
72
|
+
dropped?: string[];
|
|
73
|
+
} | {
|
|
74
|
+
ok: false;
|
|
75
|
+
error: string;
|
|
76
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Placeholder until happyvertical/smrt#3604 publishes the real schema URL.
|
|
3
|
+
* The planner writes it so a file says what it is; it does not fetch it.
|
|
4
|
+
*/
|
|
5
|
+
export const COOKBOOK_SCHEMA = 'https://s-m-r-t.dev/schemas/cookbook/v1.json';
|
|
6
|
+
/**
|
|
7
|
+
* The URL files carried while the document was called a blueprint. Import
|
|
8
|
+
* still accepts it; nothing writes it.
|
|
9
|
+
*/
|
|
10
|
+
export const PREVIOUS_SCHEMA = 'https://s-m-r-t.dev/schemas/blueprint/v1.json';
|
|
11
|
+
export const COOKBOOK_VERSION = 1;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ParseCookbookOptions } from './parse.ts';
|
|
2
|
+
import type { CookbookResult } from './types.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Check an unknown value (a parsed file or stored JSON) and return a
|
|
5
|
+
* normalised cookbook, or one clear sentence saying why not. Strict on
|
|
6
|
+
* purpose: nothing is silently dropped, so a bad file never half-applies.
|
|
7
|
+
* Page customisations are checked against the planner's widget registry; a
|
|
8
|
+
* host without it uses `parseCookbookWith` (`./parse.ts`).
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseCookbook(input: unknown, options?: Omit<ParseCookbookOptions, 'overviews'>): CookbookResult;
|
|
11
|
+
/** Parse JSON text, then `parseCookbook` it. */
|
|
12
|
+
export declare function parseCookbookText(text: string, options?: {
|
|
13
|
+
dropUnknownRecipes?: boolean;
|
|
14
|
+
}): CookbookResult;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { parseOverviews } from "../overviews/validate.js";
|
|
2
|
+
import { parseCookbookWith } from "./parse.js";
|
|
3
|
+
const fail = (error) => ({ ok: false, error });
|
|
4
|
+
/**
|
|
5
|
+
* Check an unknown value (a parsed file or stored JSON) and return a
|
|
6
|
+
* normalised cookbook, or one clear sentence saying why not. Strict on
|
|
7
|
+
* purpose: nothing is silently dropped, so a bad file never half-applies.
|
|
8
|
+
* Page customisations are checked against the planner's widget registry; a
|
|
9
|
+
* host without it uses `parseCookbookWith` (`./parse.ts`).
|
|
10
|
+
*/
|
|
11
|
+
export function parseCookbook(input, options = {}) {
|
|
12
|
+
return parseCookbookWith(input, { ...options, overviews: parseOverviews });
|
|
13
|
+
}
|
|
14
|
+
/** Parse JSON text, then `parseCookbook` it. */
|
|
15
|
+
export function parseCookbookText(text, options = {}) {
|
|
16
|
+
let value;
|
|
17
|
+
try {
|
|
18
|
+
value = JSON.parse(text);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return fail('This file is not valid JSON.');
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
return parseCookbook(value, options);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return fail('This file is not a valid cookbook.');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Absolute path of the prerendered static planner app inside this package
|
|
3
|
+
* (`app/`, built with the planner's relative base, so it works at `/` and at
|
|
4
|
+
* any sub-path). Node only; kept out of `./core` so that entry stays free of
|
|
5
|
+
* Node built-ins.
|
|
6
|
+
*
|
|
7
|
+
* Serve the files from here, and write your own `planner.config.json` next to
|
|
8
|
+
* its `index.html` (copy the directory, or answer that one path yourself).
|
|
9
|
+
*/
|
|
10
|
+
export declare const appDir: string;
|
|
11
|
+
/** Absolute path of one file in the app, e.g. `appFile('planner.config.json')`. */
|
|
12
|
+
export declare function appFile(relativePath: string): string;
|
package/dist/core/app.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
/**
|
|
3
|
+
* Absolute path of the prerendered static planner app inside this package
|
|
4
|
+
* (`app/`, built with the planner's relative base, so it works at `/` and at
|
|
5
|
+
* any sub-path). Node only; kept out of `./core` so that entry stays free of
|
|
6
|
+
* Node built-ins.
|
|
7
|
+
*
|
|
8
|
+
* Serve the files from here, and write your own `planner.config.json` next to
|
|
9
|
+
* its `index.html` (copy the directory, or answer that one path yourself).
|
|
10
|
+
*/
|
|
11
|
+
export const appDir = fileURLToPath(new URL('../../app/', import.meta.url));
|
|
12
|
+
/** Absolute path of one file in the app, e.g. `appFile('planner.config.json')`. */
|
|
13
|
+
export function appFile(relativePath) {
|
|
14
|
+
return fileURLToPath(new URL(relativePath, new URL('../../app/', import.meta.url)));
|
|
15
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CookbookBrief } from '../assistant/prompt.ts';
|
|
2
|
+
import type { Recipe } from '../recipes/types.ts';
|
|
3
|
+
/**
|
|
4
|
+
* What the assistant's prompt and reply schema are built from: the recipes it
|
|
5
|
+
* may add and the cookbooks it may offer. A host with its own subset passes
|
|
6
|
+
* one to `buildHostPrompt` / `buildReplySchema`; the default is the planner's
|
|
7
|
+
* own library.
|
|
8
|
+
*/
|
|
9
|
+
export interface PromptCatalog {
|
|
10
|
+
recipes: readonly Recipe[];
|
|
11
|
+
cookbooks: readonly CookbookBrief[];
|
|
12
|
+
}
|
|
13
|
+
/** Every recipe and every library cookbook, as the browser assistant sees them. */
|
|
14
|
+
export declare const defaultCatalog: PromptCatalog;
|
|
15
|
+
export type { CookbookBrief } from '../assistant/prompt.ts';
|
|
16
|
+
export { getLibraryCookbook, libraryCookbooks } from '../library/index.ts';
|
|
17
|
+
export type { LibraryCookbook } from '../library/types.ts';
|
|
18
|
+
export { getRecipe, recipes, recipesById } from '../recipes/index.ts';
|
|
19
|
+
export type { Recipe } from '../recipes/types.ts';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { libraryCookbooks } from "../library/index.js";
|
|
2
|
+
import { recipes } from "../recipes/index.js";
|
|
3
|
+
/** Every recipe and every library cookbook, as the browser assistant sees them. */
|
|
4
|
+
export const defaultCatalog = {
|
|
5
|
+
recipes,
|
|
6
|
+
cookbooks: libraryCookbooks,
|
|
7
|
+
};
|
|
8
|
+
export { getLibraryCookbook, libraryCookbooks } from "../library/index.js";
|
|
9
|
+
export { getRecipe, recipes, recipesById } from "../recipes/index.js";
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Cookbook } from '../cookbook/types.ts';
|
|
2
|
+
import type { CommandTool } from '../planner/commands/schemas.ts';
|
|
3
|
+
import type { BatchResult, CommandResult, PlannerCommand, PlanSnapshot, RunOptions } from '../planner/commands/types.ts';
|
|
4
|
+
import type { PromptCatalog } from './catalog.ts';
|
|
5
|
+
export interface HeadlessPlannerOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Restrict the recipes and library cookbooks this plan may name (the same
|
|
8
|
+
* shape `buildHostPrompt` takes). Ids outside it fail validation as
|
|
9
|
+
* `invalid_input`, exactly as a bad enum value does. Default: the whole
|
|
10
|
+
* library.
|
|
11
|
+
*/
|
|
12
|
+
catalog?: PromptCatalog;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* One plan held in plain objects, driven by the same commands as the browser
|
|
16
|
+
* planner. Runs in plain Node; any number may coexist.
|
|
17
|
+
*/
|
|
18
|
+
export interface HeadlessPlanner {
|
|
19
|
+
/**
|
|
20
|
+
* Run one command: same names, input schemas, validation, error codes and
|
|
21
|
+
* receipts as the browser controller. Never throws.
|
|
22
|
+
*/
|
|
23
|
+
run(command: PlannerCommand, options?: RunOptions): CommandResult;
|
|
24
|
+
/** Untyped form for commands that arrive as data (a model's tool call). */
|
|
25
|
+
run(command: unknown, options?: RunOptions): CommandResult;
|
|
26
|
+
/** Several commands, all or nothing (the engine's `batch`). */
|
|
27
|
+
batch(batch: unknown): BatchResult;
|
|
28
|
+
/** The current plan, read-only and compact. */
|
|
29
|
+
snapshot(): PlanSnapshot;
|
|
30
|
+
/** The plan as a cookbook document (what `export_cookbook` writes). */
|
|
31
|
+
cookbook(): Cookbook;
|
|
32
|
+
/**
|
|
33
|
+
* Undo the most recent undoable change. `not_found` when there is none; the
|
|
34
|
+
* command `undo` with an explicit `undoId` is available through `run`.
|
|
35
|
+
*/
|
|
36
|
+
undo(): CommandResult;
|
|
37
|
+
/** Call `listener` with the snapshot now and after every command. */
|
|
38
|
+
subscribe(listener: (snapshot: PlanSnapshot) => void): () => void;
|
|
39
|
+
/** The command tools this plan validates against (a restricted catalog narrows the enums). */
|
|
40
|
+
readonly tools: readonly CommandTool[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* A planner with no UI, no runes and no module state: the command set over a
|
|
44
|
+
* plain-object plan, for a Node server (an MCP server holds one per plan id).
|
|
45
|
+
* It is smrt's cookbook command engine (`createCookbookEngine`) behind the
|
|
46
|
+
* planner's names, plus `focus`.
|
|
47
|
+
*
|
|
48
|
+
* `cookbook` is the starting document; it goes through the strict import
|
|
49
|
+
* check and the call throws on a document that fails it. Everything after that
|
|
50
|
+
* reports errors through `run`'s result instead.
|
|
51
|
+
*/
|
|
52
|
+
export declare function createHeadlessPlanner(cookbook?: Cookbook, options?: HeadlessPlannerOptions): HeadlessPlanner;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { parseCookbookWith } from "../cookbook/parse.js";
|
|
2
|
+
import { createPlannerAdapter, } from "../planner/commands/adapter.js";
|
|
3
|
+
import { engineCatalog, restrictCatalog } from "../planner/commands/catalog.js";
|
|
4
|
+
/**
|
|
5
|
+
* A planner with no UI, no runes and no module state: the command set over a
|
|
6
|
+
* plain-object plan, for a Node server (an MCP server holds one per plan id).
|
|
7
|
+
* It is smrt's cookbook command engine (`createCookbookEngine`) behind the
|
|
8
|
+
* planner's names, plus `focus`.
|
|
9
|
+
*
|
|
10
|
+
* `cookbook` is the starting document; it goes through the strict import
|
|
11
|
+
* check and the call throws on a document that fails it. Everything after that
|
|
12
|
+
* reports errors through `run`'s result instead.
|
|
13
|
+
*/
|
|
14
|
+
export function createHeadlessPlanner(cookbook, options = {}) {
|
|
15
|
+
let initial;
|
|
16
|
+
if (cookbook !== undefined) {
|
|
17
|
+
const parsed = parseCookbookWith(cookbook);
|
|
18
|
+
if (!parsed.ok)
|
|
19
|
+
throw new Error(parsed.error);
|
|
20
|
+
initial = parsed.cookbook;
|
|
21
|
+
}
|
|
22
|
+
const base = engineCatalog();
|
|
23
|
+
const adapter = createPlannerAdapter({
|
|
24
|
+
catalog: options.catalog ? restrictCatalog(base, options.catalog) : base,
|
|
25
|
+
cookbook: initial,
|
|
26
|
+
port: { prepareImport: (document) => parseCookbookWith(document) },
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
run: adapter.run,
|
|
30
|
+
batch: adapter.batch,
|
|
31
|
+
snapshot: adapter.snapshot,
|
|
32
|
+
subscribe: adapter.subscribe,
|
|
33
|
+
cookbook: adapter.cookbook,
|
|
34
|
+
undo: adapter.undo,
|
|
35
|
+
get tools() {
|
|
36
|
+
return adapter.tools;
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The planner without a UI: what a Node server needs to implement the host
|
|
3
|
+
* contract (`docs/inference-host.md`). Rune-free and importable by plain Node,
|
|
4
|
+
* no Vite and no Svelte compiler.
|
|
5
|
+
*
|
|
6
|
+
* - command tool schemas and input types, and the `PlanSnapshot` type;
|
|
7
|
+
* - `buildHostPrompt`: the system prompt and messages for one chat call;
|
|
8
|
+
* - `replySchema` / `buildReplySchema`: the JSON Schema of the model's answer;
|
|
9
|
+
* - `parseHostReply`: validate that answer into the response body;
|
|
10
|
+
* - `parseHostRequest`: validate the request body;
|
|
11
|
+
* - the library catalog (recipes and cookbooks) the prompt is built from;
|
|
12
|
+
* - `createHeadlessPlanner`: the command set over a plain-object plan (many may
|
|
13
|
+
* coexist): smrt's cookbook command engine behind the planner's names, the
|
|
14
|
+
* same commands, validation and snapshots as the browser controller.
|
|
15
|
+
*
|
|
16
|
+
* The browser controller (`createPlannerController`) is not here: it drives
|
|
17
|
+
* the UI's stores and lives in `./commands` (Svelte source).
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
export { HOST_HISTORY_CHARS, HOST_HISTORY_TURNS, HOST_MESSAGE_CHARS, HOST_WIRE_VERSION, type HostRequest, } from '../inference/host.ts';
|
|
22
|
+
export { buildCommandTools, COMMAND_NAMES, type CommandTool, checkSchema, commandSchemas, commandTools, type JsonSchema, } from '../planner/commands/schemas.ts';
|
|
23
|
+
export { type BatchResult, type CommandError, type CommandErrorCode, type CommandInputs, type CommandName, type CommandReceipt, type CommandResult, type ExportData, PLANNER_COMMANDS_VERSION, PLANNER_TAB_IDS, type PlannerCommand, type PlannerTabId, type PlanSnapshot, type RecipeChanges, type RunOptions, } from '../planner/commands/types.ts';
|
|
24
|
+
export { type CookbookBrief, defaultCatalog, getLibraryCookbook, getRecipe, type LibraryCookbook, libraryCookbooks, type PromptCatalog, type Recipe, recipes, recipesById, } from './catalog.ts';
|
|
25
|
+
export { createHeadlessPlanner, type HeadlessPlanner, type HeadlessPlannerOptions, } from './headless.ts';
|
|
26
|
+
export { buildHostPrompt, type HostPrompt, type HostPromptInput, type HostTurn, } from './prompt.ts';
|
|
27
|
+
export { buildReplySchema, type HostReply, type ParsedHostReply, parseHostReply, replySchema, } from './reply.ts';
|
|
28
|
+
export { type HostRequestParse, parseHostRequest } from './request.ts';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The planner without a UI: what a Node server needs to implement the host
|
|
3
|
+
* contract (`docs/inference-host.md`). Rune-free and importable by plain Node,
|
|
4
|
+
* no Vite and no Svelte compiler.
|
|
5
|
+
*
|
|
6
|
+
* - command tool schemas and input types, and the `PlanSnapshot` type;
|
|
7
|
+
* - `buildHostPrompt`: the system prompt and messages for one chat call;
|
|
8
|
+
* - `replySchema` / `buildReplySchema`: the JSON Schema of the model's answer;
|
|
9
|
+
* - `parseHostReply`: validate that answer into the response body;
|
|
10
|
+
* - `parseHostRequest`: validate the request body;
|
|
11
|
+
* - the library catalog (recipes and cookbooks) the prompt is built from;
|
|
12
|
+
* - `createHeadlessPlanner`: the command set over a plain-object plan (many may
|
|
13
|
+
* coexist): smrt's cookbook command engine behind the planner's names, the
|
|
14
|
+
* same commands, validation and snapshots as the browser controller.
|
|
15
|
+
*
|
|
16
|
+
* The browser controller (`createPlannerController`) is not here: it drives
|
|
17
|
+
* the UI's stores and lives in `./commands` (Svelte source).
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
export { HOST_HISTORY_CHARS, HOST_HISTORY_TURNS, HOST_MESSAGE_CHARS, HOST_WIRE_VERSION, } from "../inference/host.js";
|
|
22
|
+
export { buildCommandTools, COMMAND_NAMES, checkSchema, commandSchemas, commandTools, } from "../planner/commands/schemas.js";
|
|
23
|
+
export { PLANNER_COMMANDS_VERSION, PLANNER_TAB_IDS, } from "../planner/commands/types.js";
|
|
24
|
+
export { defaultCatalog, getLibraryCookbook, getRecipe, libraryCookbooks, recipes, recipesById, } from "./catalog.js";
|
|
25
|
+
export { createHeadlessPlanner, } from "./headless.js";
|
|
26
|
+
export { buildHostPrompt, } from "./prompt.js";
|
|
27
|
+
export { buildReplySchema, parseHostReply, replySchema, } from "./reply.js";
|
|
28
|
+
export { parseHostRequest } from "./request.js";
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { PlanSnapshot } from '../planner/commands/types.ts';
|
|
2
|
+
import { type PromptCatalog } from './catalog.ts';
|
|
3
|
+
/** One earlier turn of the conversation. */
|
|
4
|
+
export interface HostTurn {
|
|
5
|
+
role: 'user' | 'assistant';
|
|
6
|
+
content: string;
|
|
7
|
+
}
|
|
8
|
+
export interface HostPromptInput {
|
|
9
|
+
/** The visitor's text (clipped to the contract's 2000 characters). */
|
|
10
|
+
message: string;
|
|
11
|
+
/** The plan as the planner reports it. */
|
|
12
|
+
snapshot: PlanSnapshot;
|
|
13
|
+
/** Recent turns, oldest first. Anything but user or assistant is ignored. */
|
|
14
|
+
history?: readonly {
|
|
15
|
+
role: string;
|
|
16
|
+
content: string;
|
|
17
|
+
}[];
|
|
18
|
+
/** The recipes and cookbooks the model may use; the planner's library by default. */
|
|
19
|
+
catalog?: PromptCatalog;
|
|
20
|
+
}
|
|
21
|
+
/** A chat call's input: `system` apart, so it fits OpenAI- and Anthropic-style APIs. */
|
|
22
|
+
export interface HostPrompt {
|
|
23
|
+
/** The system prompt. OpenAI-style: send it as a leading `system` message. Anthropic-style: the `system` parameter. */
|
|
24
|
+
system: string;
|
|
25
|
+
/** The conversation, oldest first; the last entry is the visitor's message. */
|
|
26
|
+
messages: HostTurn[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The chat call for one host-mode turn. The system prompt is the browser
|
|
30
|
+
* assistant's own (`buildSystemPrompt`: same wording, worked examples, focused
|
|
31
|
+
* recipe lines for what the message matches, settings and theme from the
|
|
32
|
+
* snapshot), plus the host-only `commands` section. The messages are the recent
|
|
33
|
+
* history and then the visitor's message.
|
|
34
|
+
*
|
|
35
|
+
* Ask the model for JSON matching `buildReplySchema()` and read the answer with
|
|
36
|
+
* `parseHostReply`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildHostPrompt(input: HostPromptInput): HostPrompt;
|