@happyvertical/smrt-planner 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -8
- package/app/404.html +42 -49
- package/app/_app/immutable/assets/0.BvXq1Svw.css +1 -0
- package/app/_app/immutable/assets/10.CdYxvH4G.css +1 -0
- package/app/_app/immutable/assets/11.nOT5Z4Fv.css +1 -0
- package/app/_app/immutable/assets/12.F7A7zP4J.css +1 -0
- package/app/_app/immutable/assets/13.JoySu8W5.css +1 -0
- package/app/_app/immutable/assets/14.nsp62-4b.css +1 -0
- package/app/_app/immutable/assets/2.CbPiqdz5.css +1 -0
- package/app/_app/immutable/assets/3.D518dbB5.css +1 -0
- package/app/_app/immutable/assets/4.B3vt1gMJ.css +1 -0
- package/app/_app/immutable/assets/AiSetup.4fXjMpTZ.css +1 -0
- package/app/_app/immutable/assets/AppShell.DKPbJFmw.css +1 -0
- package/app/_app/immutable/assets/ConnectTools.DTleL8YA.css +1 -0
- package/app/_app/immutable/assets/FieldMapForm.C8SZ3t4N.css +1 -0
- package/app/_app/immutable/assets/ModelPage.DzDhJQz3.css +1 -0
- package/app/_app/immutable/assets/SectionActions.BE1CPmxk.css +1 -0
- package/app/_app/immutable/assets/SectionIcons.BGFcFuOf.css +1 -0
- package/app/_app/immutable/assets/SegmentedControl.T_hJQXHk.css +1 -0
- package/app/_app/immutable/assets/app.BS7nbUi0.css +1 -0
- package/app/_app/immutable/assets/currency-metadata.CJIy0Dzm.css +1 -0
- package/app/_app/immutable/assets/data.DQcbQG_b.css +1 -0
- package/app/_app/immutable/assets/feedback.FjY5wqsa.css +1 -0
- package/app/_app/immutable/assets/forms.DA06CFM9.css +1 -0
- package/app/_app/immutable/assets/labels.Dny6zd23.css +1 -0
- package/app/_app/immutable/assets/percent.CBivq97O.css +1 -0
- package/app/_app/immutable/assets/state.C9Put0ur.css +1 -0
- package/app/_app/immutable/assets/webmcp-ui-context.CC5pQLNE.css +1 -0
- package/app/_app/immutable/assets/workspace.Dtoe2fRU.css +1 -0
- package/app/_app/immutable/chunks/3ouNUakh.js +1 -0
- package/app/_app/immutable/chunks/B3FAegW4.js +4 -0
- package/app/_app/immutable/chunks/B8iReL-r.js +1 -0
- package/app/_app/immutable/chunks/BCmdRE3j.js +4 -0
- package/app/_app/immutable/chunks/BV3NwM01.js +1 -0
- package/app/_app/immutable/chunks/BVicq_6F.js +1 -0
- package/app/_app/immutable/chunks/Ba1g71Sq.js +1 -0
- package/app/_app/immutable/chunks/BdjvgMW6.js +1 -0
- package/app/_app/immutable/chunks/BiO_bqNH.js +2 -0
- package/app/_app/immutable/chunks/{DyGfbRG-.js → BrorvU4B.js} +1 -1
- package/app/_app/immutable/chunks/By-QJdbA.js +980 -0
- package/app/_app/immutable/chunks/{CyUMm_Wp.js → BzITuwgY.js} +1 -1
- package/app/_app/immutable/chunks/BzMfoxBk.js +1 -0
- package/app/_app/immutable/chunks/C-AoRalq.js +1 -0
- package/app/_app/immutable/chunks/CGKL_Nlh.js +1 -0
- package/app/_app/immutable/chunks/CNj-_B0j.js +1 -0
- package/app/_app/immutable/chunks/CU8cbxOZ.js +1 -0
- package/app/_app/immutable/chunks/CZGhPAoL.js +2 -0
- package/app/_app/immutable/chunks/CaEdOwVf.js +1 -0
- package/app/_app/immutable/chunks/Cas1hq-y.js +1 -0
- package/app/_app/immutable/chunks/CfOMUCNN.js +1 -0
- package/app/_app/immutable/chunks/Cm0VMWZu.js +1 -0
- package/app/_app/immutable/chunks/CsmXMAyE.js +1 -0
- package/app/_app/immutable/chunks/{BWPhGFHl.js → D0FW0z6R.js} +1 -1
- package/app/_app/immutable/chunks/D3nyL-ZK.js +1 -0
- package/app/_app/immutable/chunks/DEe2Vsu9.js +1 -0
- package/app/_app/immutable/chunks/DTs3DOB0.js +10 -0
- package/app/_app/immutable/chunks/Dm6R8q7G.js +1 -0
- package/app/_app/immutable/chunks/Dreozana.js +1 -0
- package/app/_app/immutable/chunks/Dx8H44Wq.js +2 -0
- package/app/_app/immutable/chunks/DxR35SQx.js +24 -0
- package/app/_app/immutable/chunks/EcFojPiU.js +11 -0
- package/app/_app/immutable/chunks/JBS2nHGN.js +1 -0
- package/app/_app/immutable/chunks/TjbilXEg.js +1 -0
- package/app/_app/immutable/chunks/ZLqixH7j.js +9 -0
- package/app/_app/immutable/chunks/auwiz8v4.js +1 -0
- package/app/_app/immutable/chunks/dbZ3U29n.js +1 -0
- package/app/_app/immutable/chunks/{D333l2GL.js → gHjidpzw.js} +2 -2
- package/app/_app/immutable/chunks/vNEnXNLV.js +3 -0
- package/app/_app/immutable/entry/app.vuScBcN4.js +2 -0
- package/app/_app/immutable/entry/start.C_vMied2.js +1 -0
- package/app/_app/immutable/nodes/0.BeNJfVow.js +9 -0
- package/app/_app/immutable/nodes/1.huiLmf4w.js +1 -0
- package/app/_app/immutable/nodes/10.B3buyRS-.js +3 -0
- package/app/_app/immutable/nodes/11.FNeDQehr.js +1 -0
- package/app/_app/immutable/nodes/12.umrKgKLQ.js +4 -0
- package/app/_app/immutable/nodes/13.DFr7i0IY.js +1 -0
- package/app/_app/immutable/nodes/14.BNgJ8cEq.js +1 -0
- package/app/_app/immutable/nodes/2.B3v0JtfB.js +24 -0
- package/app/_app/immutable/nodes/3.FLW3AkwU.js +1 -0
- package/app/_app/immutable/nodes/4.50B7EkB9.js +1 -0
- package/app/_app/immutable/nodes/5.Din7W_Et.js +1 -0
- package/app/_app/immutable/nodes/6.7dOUE7nr.js +1 -0
- package/app/_app/immutable/nodes/7.C4XsW0qI.js +1 -0
- package/app/_app/immutable/nodes/8.D_MREd8V.js +1 -0
- package/app/_app/immutable/nodes/9.cn87hhI-.js +1 -0
- package/app/_app/version.json +1 -1
- package/app/advanced-styles/index.html +84 -0
- package/app/ai/index.html +60 -52
- package/app/blueprint/index.html +46 -53
- package/app/cookbook/index.html +46 -53
- package/app/index.html +92 -64
- package/app/m/ads/AdDeliveryTier/index.html +52 -59
- package/app/m/ads/AdEvent/index.html +52 -59
- package/app/m/ads/AdFormat/index.html +52 -59
- package/app/m/ads/AdGroup/index.html +52 -59
- package/app/m/ads/AdVariation/index.html +52 -59
- package/app/m/analytics/AnalyticsDataStream/index.html +52 -59
- package/app/m/analytics/AnalyticsEvent/index.html +52 -59
- package/app/m/analytics/AnalyticsProperty/index.html +52 -59
- package/app/m/analytics/AnalyticsReport/index.html +52 -59
- package/app/m/approvals/ApprovalEvent/index.html +52 -59
- package/app/m/approvals/ApprovalPolicy/index.html +52 -59
- package/app/m/approvals/ApprovalRequest/index.html +52 -59
- package/app/m/assets/Asset/attachments/index.html +91 -0
- package/app/m/assets/Asset/index.html +52 -59
- package/app/m/assets/AssetAssociation/index.html +53 -60
- package/app/m/assets/AssetMetafield/index.html +52 -59
- package/app/m/assets/AssetStatus/index.html +52 -59
- package/app/m/assets/AssetType/index.html +52 -59
- package/app/m/assets/Folder/index.html +52 -59
- package/app/m/chat/AgentSession/index.html +52 -59
- package/app/m/chat/ChatMessage/index.html +53 -60
- package/app/m/chat/ChatParticipant/index.html +53 -60
- package/app/m/chat/ChatReaction/index.html +52 -59
- package/app/m/chat/ChatRoom/index.html +52 -59
- package/app/m/chat/ChatThread/index.html +53 -60
- package/app/m/chat/VoiceGatewayTurn/index.html +52 -59
- package/app/m/chat/VoiceSession/index.html +52 -59
- package/app/m/commerce/Agreement/index.html +52 -59
- package/app/m/commerce/Cart/index.html +52 -59
- package/app/m/commerce/Contract/index.html +52 -59
- package/app/m/commerce/ContractLineItem/index.html +53 -60
- package/app/m/commerce/Customer/index.html +52 -59
- package/app/m/commerce/DocumentTax/index.html +89 -0
- package/app/m/commerce/Estimate/index.html +52 -59
- package/app/m/commerce/Fulfillment/index.html +52 -59
- package/app/m/commerce/FulfillmentLineItem/index.html +53 -60
- package/app/m/commerce/Invoice/index.html +52 -59
- package/app/m/commerce/InvoiceLineItem/index.html +53 -60
- package/app/m/commerce/Lease/index.html +52 -59
- package/app/m/commerce/LicenseSale/index.html +52 -59
- package/app/m/commerce/Order/index.html +52 -59
- package/app/m/commerce/Payment/index.html +52 -59
- package/app/m/commerce/PaymentAllocation/index.html +53 -60
- package/app/m/commerce/PaymentInstrument/index.html +52 -59
- package/app/m/commerce/PaymentIntent/index.html +52 -59
- package/app/m/commerce/Payout/index.html +52 -59
- package/app/m/commerce/ProductionOrder/index.html +52 -59
- package/app/m/commerce/PurchaseContract/index.html +89 -0
- package/app/m/commerce/PurchaseOrder/index.html +52 -59
- package/app/m/commerce/SalesContract/index.html +89 -0
- package/app/m/commerce/SupplierQuote/index.html +89 -0
- package/app/m/commerce/TaxCode/index.html +89 -0
- package/app/m/commerce/TaxComponent/index.html +89 -0
- package/app/m/commerce/TaxSettings/index.html +89 -0
- package/app/m/commerce/TaxSummaryReport/index.html +89 -0
- package/app/m/commerce/Vendor/index.html +52 -59
- package/app/m/commerce/WholesaleOrder/index.html +52 -59
- package/app/m/content/Content/index.html +52 -59
- package/app/m/content/ContentContribution/index.html +52 -59
- package/app/m/content/ContentContributionAttachment/index.html +52 -59
- package/app/m/content/ContentContributionRevision/index.html +52 -59
- package/app/m/content/ContentContributionType/index.html +52 -59
- package/app/m/content/ContentContributor/index.html +52 -59
- package/app/m/content/ContentCorrection/index.html +52 -59
- package/app/m/content/ContentFeedSource/index.html +52 -59
- package/app/m/content/ContentGovernanceAssignment/index.html +52 -59
- package/app/m/content/ContentGovernancePolicy/index.html +52 -59
- package/app/m/content/ContentGovernanceProfile/index.html +52 -59
- package/app/m/content/ContentReference/index.html +52 -59
- package/app/m/content/ContentReview/index.html +52 -59
- package/app/m/content/ContentVersion/index.html +52 -59
- package/app/m/events/Event/index.html +52 -59
- package/app/m/events/EventParticipant/index.html +53 -60
- package/app/m/events/EventSeries/index.html +52 -59
- package/app/m/events/EventType/index.html +52 -59
- package/app/m/expenses/Expense/index.html +89 -0
- package/app/m/facts/Fact/index.html +52 -59
- package/app/m/facts/FactContent/index.html +52 -59
- package/app/m/facts/FactEvidence/index.html +52 -59
- package/app/m/facts/FactSource/index.html +52 -59
- package/app/m/facts/FactSubject/index.html +52 -59
- package/app/m/facts/FactTag/index.html +52 -59
- package/app/m/fields/FieldPolicy/index.html +52 -59
- package/app/m/fields/FieldPolicySuggestion/index.html +52 -59
- package/app/m/fields/FieldUsageCounter/index.html +52 -59
- package/app/m/images/Image/index.html +52 -59
- package/app/m/inventory/InventoryLocation/index.html +52 -59
- package/app/m/inventory/StockLevel/index.html +52 -59
- package/app/m/inventory/StockMovement/index.html +52 -59
- package/app/m/ledgers/Account/index.html +52 -59
- package/app/m/ledgers/Journal/index.html +52 -59
- package/app/m/ledgers/JournalEntry/index.html +53 -60
- package/app/m/manufacturing/Assembly/index.html +52 -59
- package/app/m/manufacturing/BillOfMaterials/index.html +52 -59
- package/app/m/manufacturing/BomLine/index.html +52 -59
- package/app/m/manufacturing/Operation/index.html +52 -59
- package/app/m/manufacturing/ProductionRun/index.html +52 -59
- package/app/m/manufacturing/ProductionRunCompletion/index.html +52 -59
- package/app/m/manufacturing/RoutingStep/index.html +52 -59
- package/app/m/marketing/Campaign/index.html +52 -59
- package/app/m/marketing/CampaignChannel/index.html +52 -59
- package/app/m/marketing/CampaignMetricSnapshot/index.html +52 -59
- package/app/m/messages/Account/index.html +52 -59
- package/app/m/messages/Attachment/index.html +52 -59
- package/app/m/messages/Blacklist/index.html +52 -59
- package/app/m/messages/Email/failed-sends/index.html +54 -59
- package/app/m/messages/Email/index.html +52 -59
- package/app/m/messages/Email/mailbox/index.html +54 -59
- package/app/m/messages/EmailAccount/index.html +52 -59
- package/app/m/messages/EmailAttachment/index.html +89 -0
- package/app/m/messages/EmailFolder/index.html +52 -59
- package/app/m/messages/Message/index.html +52 -59
- package/app/m/messages/MessagingEndpoint/index.html +52 -59
- package/app/m/messages/PersonaMessageRoute/index.html +52 -59
- package/app/m/messages/SlackAccount/index.html +52 -59
- package/app/m/messages/SlackMessage/index.html +52 -59
- package/app/m/messages/TelegramAccount/index.html +52 -59
- package/app/m/messages/Tweet/index.html +52 -59
- package/app/m/messages/TwitterAccount/index.html +52 -59
- package/app/m/messages/Whitelist/index.html +52 -59
- package/app/m/messages/ZulipAccount/index.html +52 -59
- package/app/m/places/Place/index.html +52 -59
- package/app/m/places/PlaceType/index.html +52 -59
- package/app/m/products/Category/index.html +52 -59
- package/app/m/products/Material/index.html +52 -59
- package/app/m/products/Product/index.html +52 -59
- package/app/m/products/Product/ingredients/index.html +54 -59
- package/app/m/products/ProductVariant/index.html +53 -60
- package/app/m/products/Sku/index.html +53 -60
- package/app/m/profiles/ApiKey/index.html +52 -59
- package/app/m/profiles/Bot/index.html +52 -59
- package/app/m/profiles/MagicLinkToken/index.html +52 -59
- package/app/m/profiles/NostrIdentity/index.html +52 -59
- package/app/m/profiles/OidcIdentity/index.html +52 -59
- package/app/m/profiles/Organization/index.html +52 -59
- package/app/m/profiles/Person/index.html +52 -59
- package/app/m/profiles/Profile/index.html +52 -59
- package/app/m/profiles/ProfileMetadata/index.html +52 -59
- package/app/m/profiles/ProfileMetafield/index.html +52 -59
- package/app/m/profiles/ProfileRelationship/index.html +52 -59
- package/app/m/profiles/ProfileRelationshipTerm/index.html +52 -59
- package/app/m/profiles/ProfileRelationshipType/index.html +52 -59
- package/app/m/profiles/ProfileType/index.html +52 -59
- package/app/m/projects/Comment/index.html +53 -60
- package/app/m/projects/Issue/index.html +52 -59
- package/app/m/projects/Label/index.html +52 -59
- package/app/m/projects/Project/index.html +52 -59
- package/app/m/projects/ProjectIntegration/index.html +52 -59
- package/app/m/projects/PullRequest/index.html +52 -59
- package/app/m/projects/Repository/index.html +52 -59
- package/app/m/properties/Property/index.html +52 -59
- package/app/m/properties/Zone/index.html +52 -59
- package/app/m/reports/RuntimeReport/index.html +52 -59
- package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +52 -59
- package/app/m/reports/SmrtReportLock/index.html +52 -59
- package/app/m/reports/SmrtReportRefreshTask/index.html +52 -59
- package/app/m/reports/SmrtReportRun/index.html +52 -59
- package/app/m/reports/SmrtReportSchedule/index.html +52 -59
- package/app/m/reports/SmrtReportWatermark/index.html +52 -59
- package/app/m/sales/AttributionException/index.html +52 -59
- package/app/m/sales/AttributionPolicy/index.html +52 -59
- package/app/m/sales/Commission/index.html +52 -59
- package/app/m/sales/CommissionAdjustment/index.html +52 -59
- package/app/m/sales/CommissionPayout/index.html +52 -59
- package/app/m/sales/CommissionPlan/index.html +52 -59
- package/app/m/sales/Earner/index.html +52 -59
- package/app/m/sales/EarnerSourceAttribution/index.html +52 -59
- package/app/m/sales/EarningEvent/index.html +52 -59
- package/app/m/sales/ExecutedAgreement/index.html +52 -59
- package/app/m/sales/Lead/index.html +52 -59
- package/app/m/sales/Opportunity/index.html +52 -59
- package/app/m/sales/OpportunityConversion/index.html +52 -59
- package/app/m/sales/PipelineDefinition/index.html +52 -59
- package/app/m/sales/PipelineStage/index.html +53 -60
- package/app/m/sales/Referral/index.html +52 -59
- package/app/m/sales/ReferralAgreement/index.html +52 -59
- package/app/m/sales/ReferralLink/index.html +52 -59
- package/app/m/sales/ReferralProgram/index.html +52 -59
- package/app/m/sales/ReferralTermSnapshot/index.html +52 -59
- package/app/m/sales/ReferralTouch/index.html +52 -59
- package/app/m/sales/Referrer/index.html +52 -59
- package/app/m/sales/SalesActivity/index.html +52 -59
- package/app/m/sales/SalesRepresentative/index.html +52 -59
- package/app/m/sites/Site/index.html +52 -59
- package/app/m/sites/SiteAgentBinding/index.html +52 -59
- package/app/m/social/OAuthState/index.html +52 -59
- package/app/m/social/SocialAccount/index.html +52 -59
- package/app/m/social/SocialPost/index.html +52 -59
- package/app/m/social/SocialPostAnalyticsSnapshot/index.html +52 -59
- package/app/m/subscriptions/BillingAdjustment/index.html +52 -59
- package/app/m/subscriptions/ClientCharge/index.html +52 -59
- package/app/m/subscriptions/CreditGrant/index.html +52 -59
- package/app/m/subscriptions/PricingRule/index.html +52 -59
- package/app/m/subscriptions/RetailCharge/index.html +52 -59
- package/app/m/subscriptions/SpendingPolicy/index.html +52 -59
- package/app/m/subscriptions/SubscriptionPlan/index.html +52 -59
- package/app/m/subscriptions/TenantSubscription/index.html +52 -59
- package/app/m/subscriptions/TenantUsageMetric/index.html +52 -59
- package/app/m/support/ServiceTimeEntry/index.html +52 -59
- package/app/m/support/SupportAiRun/index.html +52 -59
- package/app/m/support/SupportAvailability/index.html +52 -59
- package/app/m/support/SupportCase/index.html +52 -59
- package/app/m/support/SupportCaseEvent/index.html +52 -59
- package/app/m/support/SupportChannelBinding/index.html +52 -59
- package/app/m/support/SupportCharge/index.html +52 -59
- package/app/m/support/SupportCompensation/index.html +52 -59
- package/app/m/support/SupportCompensationPlan/index.html +52 -59
- package/app/m/support/SupportEscalation/index.html +52 -59
- package/app/m/support/SupportInteraction/index.html +52 -59
- package/app/m/support/SupportPlan/index.html +52 -59
- package/app/m/support/SupportPolicy/index.html +52 -59
- package/app/m/support/SupportQualification/index.html +52 -59
- package/app/m/support/SupportServiceTarget/index.html +52 -59
- package/app/m/support/SupportSpecialist/index.html +52 -59
- package/app/m/support/SupportWorkLink/index.html +52 -59
- package/app/m/tags/Tag/index.html +52 -59
- package/app/m/tags/TagAlias/index.html +52 -59
- package/app/m/timesheets/AttendanceBreak/index.html +52 -59
- package/app/m/timesheets/AttendancePunch/index.html +52 -59
- package/app/m/timesheets/AttendanceSegment/index.html +89 -0
- package/app/m/timesheets/ServiceChargeSnapshot/index.html +52 -59
- package/app/m/timesheets/ServiceCompensationSnapshot/index.html +52 -59
- package/app/m/timesheets/ServiceTimeEntry/index.html +52 -59
- package/app/m/users/Group/index.html +52 -59
- package/app/m/users/GroupMember/index.html +52 -59
- package/app/m/users/GroupRole/index.html +52 -59
- package/app/m/users/Membership/index.html +53 -60
- package/app/m/users/MembershipOverride/index.html +52 -59
- package/app/m/users/Permission/index.html +52 -59
- package/app/m/users/Role/index.html +52 -59
- package/app/m/users/RolePermission/index.html +52 -59
- package/app/m/users/Session/index.html +52 -59
- package/app/m/users/Tenant/index.html +52 -59
- package/app/m/users/TenantIntegration/index.html +52 -59
- package/app/m/users/TenantPermissionOverride/index.html +52 -59
- package/app/m/users/User/index.html +52 -59
- package/app/m/video/Character/index.html +52 -59
- package/app/m/video/CharacterAsset/index.html +52 -59
- package/app/m/video/CompositeJob/index.html +52 -59
- package/app/m/video/Performer/index.html +52 -59
- package/app/m/video/PerformerAsset/index.html +52 -59
- package/app/m/video/Scene/index.html +52 -59
- package/app/m/video/SceneAsset/index.html +52 -59
- package/app/m/video/VideoComposition/index.html +52 -59
- package/app/m/video/VideoCompositionAsset/index.html +52 -59
- package/app/m/video/VideoSequence/index.html +52 -59
- package/app/m/video/VideoSequenceAsset/index.html +52 -59
- package/app/m/video/VideoShot/index.html +52 -59
- package/app/m/video/VideoShotAsset/index.html +52 -59
- package/app/m/video/VideoShotCharacter/index.html +52 -59
- package/app/m/video/VideoWorkflow/index.html +52 -59
- package/app/m/voice/VoiceOutput/index.html +52 -59
- package/app/m/voice/VoiceProfile/index.html +52 -59
- package/app/m/voice/VoiceSample/index.html +52 -59
- package/app/packages/ads/index.html +50 -57
- package/app/packages/analytics/index.html +50 -57
- package/app/packages/approvals/index.html +50 -57
- package/app/packages/assets/index.html +50 -57
- package/app/packages/chat/index.html +50 -57
- package/app/packages/comments/index.html +50 -57
- package/app/packages/commerce/index.html +50 -57
- package/app/packages/content/index.html +50 -57
- package/app/packages/events/index.html +50 -57
- package/app/packages/expenses/index.html +50 -57
- package/app/packages/facts/index.html +50 -57
- package/app/packages/fields/index.html +50 -57
- package/app/packages/human-resources/index.html +50 -57
- package/app/packages/images/index.html +50 -57
- package/app/packages/index.html +49 -55
- package/app/packages/ingestion/index.html +85 -0
- package/app/packages/inventory/index.html +50 -57
- package/app/packages/ledgers/index.html +50 -57
- package/app/packages/manufacturing/index.html +50 -57
- package/app/packages/marketing/index.html +50 -57
- package/app/packages/messages/index.html +50 -57
- package/app/packages/places/index.html +50 -57
- package/app/packages/preferences/index.html +50 -57
- package/app/packages/products/index.html +50 -57
- package/app/packages/profiles/index.html +50 -57
- package/app/packages/projects/index.html +50 -57
- package/app/packages/properties/index.html +50 -57
- package/app/packages/reports/index.html +50 -57
- package/app/packages/sales/index.html +50 -57
- package/app/packages/sites/index.html +50 -57
- package/app/packages/social/index.html +50 -57
- package/app/packages/subscriptions/index.html +50 -57
- package/app/packages/support/index.html +50 -57
- package/app/packages/tags/index.html +50 -57
- package/app/packages/timesheets/index.html +50 -57
- package/app/packages/users/index.html +50 -57
- package/app/packages/video/index.html +50 -57
- package/app/packages/voice/index.html +50 -57
- package/app/packages/webhooks/index.html +85 -0
- package/app/recipes/account-access/help/index.html +52 -57
- package/app/recipes/account-access/index.html +57 -59
- package/app/recipes/activity/help/index.html +52 -57
- package/app/recipes/activity/index.html +57 -59
- package/app/recipes/agreements/help/index.html +52 -57
- package/app/recipes/agreements/index.html +57 -59
- package/app/recipes/analytics.reports/help/index.html +52 -57
- package/app/recipes/analytics.reports/index.html +57 -59
- package/app/recipes/assets/help/index.html +52 -57
- package/app/recipes/assets/index.html +57 -59
- package/app/recipes/billing/help/index.html +52 -57
- package/app/recipes/billing/index.html +57 -59
- package/app/recipes/chat.assistant/help/index.html +52 -57
- package/app/recipes/chat.assistant/index.html +57 -59
- package/app/recipes/comments/help/index.html +52 -57
- package/app/recipes/comments/index.html +57 -59
- package/app/recipes/commerce.customers/help/index.html +52 -57
- package/app/recipes/commerce.customers/index.html +57 -59
- package/app/recipes/commerce.estimates/help/index.html +52 -57
- package/app/recipes/commerce.estimates/index.html +57 -59
- package/app/recipes/commerce.purchases/help/index.html +52 -57
- package/app/recipes/commerce.purchases/index.html +57 -59
- package/app/recipes/commerce.sales/help/index.html +52 -57
- package/app/recipes/commerce.sales/index.html +57 -59
- package/app/recipes/commerce.vendors/help/index.html +52 -57
- package/app/recipes/commerce.vendors/index.html +57 -59
- package/app/recipes/commerce.wholesale/help/index.html +52 -57
- package/app/recipes/commerce.wholesale/index.html +57 -59
- package/app/recipes/events.calendar/help/index.html +52 -57
- package/app/recipes/events.calendar/index.html +57 -59
- package/app/recipes/expenses.tracking/help/index.html +88 -0
- package/app/recipes/expenses.tracking/index.html +92 -0
- package/app/recipes/fields.form-customization/help/index.html +52 -57
- package/app/recipes/fields.form-customization/index.html +57 -59
- package/app/recipes/ingestion/help/index.html +88 -0
- package/app/recipes/ingestion/index.html +93 -0
- package/app/recipes/integrations/help/index.html +88 -0
- package/app/recipes/integrations/index.html +92 -0
- package/app/recipes/inventory.stock/help/index.html +52 -57
- package/app/recipes/inventory.stock/index.html +57 -59
- package/app/recipes/ledgers.bookkeeping/help/index.html +52 -57
- package/app/recipes/ledgers.bookkeeping/index.html +57 -59
- package/app/recipes/messages/help/index.html +52 -57
- package/app/recipes/messages/index.html +57 -59
- package/app/recipes/products/help/index.html +52 -57
- package/app/recipes/products/index.html +57 -59
- package/app/recipes/projects.tracker/help/index.html +52 -57
- package/app/recipes/projects.tracker/index.html +57 -59
- package/app/recipes/reports.materialized/help/index.html +52 -57
- package/app/recipes/reports.materialized/index.html +57 -59
- package/app/recipes/reports.runtime/help/index.html +88 -0
- package/app/recipes/reports.runtime/index.html +92 -0
- package/app/recipes/sales.pipeline/help/index.html +52 -57
- package/app/recipes/sales.pipeline/index.html +57 -59
- package/app/recipes/tags.taxonomy/help/index.html +52 -57
- package/app/recipes/tags.taxonomy/index.html +57 -59
- package/app/recipes/team-collaboration/help/index.html +52 -57
- package/app/recipes/team-collaboration/index.html +57 -59
- package/app/recipes/timesheets.time-entries/help/index.html +88 -0
- package/app/recipes/timesheets.time-entries/index.html +92 -0
- package/app/s/custom-accounts/index.html +82 -0
- package/app/s/custom-appointments/index.html +82 -0
- package/app/s/custom-billing/index.html +47 -54
- package/app/s/custom-buying/index.html +47 -54
- package/app/s/custom-checkout/index.html +82 -0
- package/app/s/custom-classes/index.html +47 -54
- package/app/s/custom-clients/index.html +82 -0
- package/app/s/custom-events/index.html +82 -0
- package/app/s/custom-fleet/index.html +82 -0
- package/app/s/custom-giving/index.html +82 -0
- package/app/s/custom-jobs/index.html +47 -54
- package/app/s/custom-kitchen/index.html +47 -54
- package/app/s/custom-material/index.html +47 -54
- package/app/s/custom-meetings/index.html +82 -0
- package/app/s/custom-members/index.html +47 -54
- package/app/s/custom-parts/index.html +47 -54
- package/app/s/custom-rentals/index.html +82 -0
- package/app/s/custom-roastery/index.html +82 -0
- package/app/s/custom-schedule/index.html +47 -54
- package/app/s/custom-shelf/index.html +82 -0
- package/app/s/custom-shop/index.html +47 -54
- package/app/s/custom-wholesale/index.html +47 -54
- package/app/s/custom-work/index.html +82 -0
- package/app/s/custom-yard/index.html +82 -0
- package/app/s/section-access-control/index.html +47 -54
- package/app/s/section-account-security/index.html +47 -54
- package/app/s/section-accounting/index.html +47 -54
- package/app/s/section-activity/index.html +47 -54
- package/app/s/section-agreements/index.html +47 -54
- package/app/s/section-analytics/index.html +47 -54
- package/app/s/section-assets/index.html +47 -54
- package/app/s/section-billing/index.html +47 -54
- package/app/s/section-calendar/index.html +47 -54
- package/app/s/section-catalog/index.html +47 -54
- package/app/s/section-chat.assistant/index.html +47 -54
- package/app/s/section-comments/index.html +47 -54
- package/app/s/section-fields.form-customization/index.html +47 -54
- package/app/s/section-ingestion/index.html +82 -0
- package/app/s/section-integrations/index.html +82 -0
- package/app/s/section-messages/index.html +47 -54
- package/app/s/section-more/index.html +47 -54
- package/app/s/section-operations/index.html +47 -54
- package/app/s/section-projects/index.html +47 -54
- package/app/s/section-purchasing/index.html +47 -54
- package/app/s/section-reports.materialized/index.html +47 -54
- package/app/s/section-reports.runtime/index.html +82 -0
- package/app/s/section-sales/index.html +47 -54
- package/app/s/section-taxonomy/index.html +47 -54
- package/app/s/section-team/index.html +47 -54
- package/app/s/section-work/index.html +82 -0
- package/dist/ai/state.svelte.d.ts +22 -4
- package/dist/ai/state.svelte.js +78 -15
- package/dist/ai/status.js +8 -0
- package/dist/assistant/change.d.ts +14 -3
- package/dist/assistant/change.js +26 -3
- package/dist/assistant/engine.js +5 -1
- package/dist/assistant/prompt.js +7 -3
- package/dist/assistant/session.svelte.d.ts +1 -0
- package/dist/assistant/session.svelte.js +22 -4
- package/dist/catalog/catalog.json +11244 -14189
- package/dist/catalog/generate/exclusions.d.ts +8 -0
- package/dist/catalog/generate/exclusions.js +29 -0
- package/dist/catalog/generate/extract.js +29 -8
- package/dist/catalog/types.d.ts +7 -0
- package/dist/components/AdvancedStyles.svelte +138 -0
- package/dist/components/AdvancedStyles.svelte.d.ts +6 -0
- package/dist/components/AiModelsPage.svelte +40 -0
- package/dist/components/AiModelsPage.svelte.d.ts +7 -0
- package/dist/components/AiSetup.svelte +40 -8
- package/dist/components/AiStatusIcons.svelte +8 -5
- package/dist/components/AppSettings.svelte +105 -1
- package/dist/components/BrowserAssistant.svelte +25 -22
- package/dist/components/BrowserAssistant.svelte.d.ts +2 -0
- package/dist/components/ChildRecords.svelte +61 -14
- package/dist/components/ChildRecords.svelte.d.ts +1 -0
- package/dist/components/ConnectTools.svelte +5 -2
- package/dist/components/CookbooksPanel.svelte +56 -33
- package/dist/components/CopyButton.svelte +65 -0
- package/dist/components/CopyButton.svelte.d.ts +24 -0
- package/dist/components/ExportPanel.svelte +292 -57
- package/dist/components/ExportPanel.svelte.d.ts +10 -1
- package/dist/components/FeatureCard.svelte +21 -10
- package/dist/components/FeaturesPanel.svelte +4 -1
- package/dist/components/FieldInput.svelte +6 -3
- package/dist/components/FieldMapForm.svelte +6 -10
- package/dist/components/FieldMapForm.svelte.d.ts +1 -0
- package/dist/components/FormWorkspace.svelte +80 -9
- package/dist/components/FormWorkspace.svelte.d.ts +1 -0
- package/dist/components/HeaderIconLink.svelte +86 -0
- package/dist/components/HeaderIconLink.svelte.d.ts +14 -0
- package/dist/components/HelpView.svelte +3 -0
- package/dist/components/ModelOptions.svelte +13 -2
- package/dist/components/ModelPage.svelte +33 -5
- package/dist/components/ModelPage.svelte.d.ts +4 -0
- package/dist/components/ModelWorkspace.svelte +148 -50
- package/dist/components/ModelWorkspace.svelte.d.ts +4 -0
- package/dist/components/PackagePage.svelte +96 -0
- package/dist/components/PackagePage.svelte.d.ts +9 -0
- package/dist/components/ProductMedia.svelte +95 -0
- package/dist/components/ProductMedia.svelte.d.ts +10 -0
- package/dist/components/RecipeCards.svelte +13 -1
- package/dist/components/RecipeHelp.svelte +3 -0
- package/dist/components/RecipeOptions.svelte +13 -1
- package/dist/components/RecordFeatures.svelte +22 -8
- package/dist/components/RecordView.svelte +354 -0
- package/dist/components/RecordView.svelte.d.ts +14 -0
- package/dist/components/RelationField.svelte +5 -2
- package/dist/components/SectionActions.svelte +8 -5
- package/dist/components/SectionHeading.svelte +63 -0
- package/dist/components/SectionHeading.svelte.d.ts +11 -0
- package/dist/components/SectionIcons.svelte +15 -3
- package/dist/components/SectionOverview.svelte +33 -3
- package/dist/components/SectionOverview.svelte.d.ts +4 -0
- package/dist/components/SectionPage.svelte +25 -165
- package/dist/components/SectionView.svelte +172 -0
- package/dist/components/SectionView.svelte.d.ts +18 -0
- package/dist/components/SettingsPanel.svelte +3 -9
- package/dist/components/SettingsPanel.svelte.d.ts +1 -5
- package/dist/components/ThemeBridge.svelte +80 -4
- package/dist/components/ThemeBridge.svelte.d.ts +5 -1
- package/dist/components/ThemeSection.svelte +208 -117
- package/dist/components/ThemeSection.svelte.d.ts +3 -7
- package/dist/components/VariantGridForm.svelte +9 -13
- package/dist/components/VariantGridForm.svelte.d.ts +1 -0
- package/dist/components/VoiceTyping.svelte +3 -0
- package/dist/cookbook/describe.d.ts +29 -0
- package/dist/cookbook/describe.js +164 -0
- package/dist/cookbook/file.d.ts +6 -0
- package/dist/cookbook/file.js +18 -4
- package/dist/cookbook/prompt.d.ts +49 -0
- package/dist/cookbook/prompt.js +100 -0
- package/dist/cookbook/store.svelte.d.ts +13 -0
- package/dist/cookbook/store.svelte.js +36 -8
- package/dist/core/app.d.ts +33 -8
- package/dist/core/app.js +112 -8
- package/dist/core/prompt.js +10 -1
- package/dist/core/reply.d.ts +6 -1
- package/dist/data/children.d.ts +50 -6
- package/dist/data/children.js +146 -16
- package/dist/data/derived.d.ts +37 -29
- package/dist/data/derived.js +49 -30
- package/dist/data/display.d.ts +21 -8
- package/dist/data/display.js +74 -11
- package/dist/data/fakes.d.ts +48 -9
- package/dist/data/fakes.js +146 -22
- package/dist/data/labels.d.ts +7 -2
- package/dist/data/labels.js +12 -2
- package/dist/data/list-sort.d.ts +8 -0
- package/dist/data/list-sort.js +45 -0
- package/dist/data/money.d.ts +227 -0
- package/dist/data/money.js +413 -0
- package/dist/data/packs.d.ts +13 -0
- package/dist/data/packs.js +1224 -0
- package/dist/data/planner-source.js +123 -3
- package/dist/data/source.d.ts +13 -2
- package/dist/data/source.js +274 -40
- package/dist/features/palette.d.ts +2 -0
- package/dist/features/palette.js +1 -1
- package/dist/forms/stock.d.ts +1 -1
- package/dist/forms/stock.js +3 -1
- package/dist/index.d.ts +8 -3
- package/dist/index.js +6 -1
- package/dist/inference/byo.svelte.d.ts +8 -4
- package/dist/inference/byo.svelte.js +36 -8
- package/dist/inference/config.d.ts +12 -5
- package/dist/inference/config.js +96 -40
- package/dist/inference/openai.js +5 -0
- package/dist/kitchen/LiveKitchenBridge.svelte +73 -0
- package/dist/kitchen/LiveKitchenBridge.svelte.d.ts +8 -0
- package/dist/kitchen/client.js +10 -4
- package/dist/kitchen/live.d.ts +7 -0
- package/dist/kitchen/live.js +51 -0
- package/dist/library/icons.js +34 -0
- package/dist/library/library.json +1546 -15
- package/dist/library/pending.json +5 -0
- package/dist/library/types.d.ts +4 -0
- package/dist/motion/tokens.d.ts +6 -0
- package/dist/motion/tokens.js +32 -0
- package/dist/motion/view-transition.d.ts +13 -0
- package/dist/motion/view-transition.js +17 -0
- package/dist/overviews/definitions.d.ts +41 -2
- package/dist/overviews/definitions.js +111 -4
- package/dist/overviews/models.d.ts +10 -0
- package/dist/overviews/models.js +19 -0
- package/dist/overviews/registry.d.ts +92 -5
- package/dist/overviews/registry.js +468 -58
- package/dist/overviews/validate.js +2 -2
- package/dist/planner/Planner.svelte +374 -166
- package/dist/planner/PlannerControls.svelte +255 -0
- package/dist/planner/PlannerControls.svelte.d.ts +17 -0
- package/dist/planner/PlannerLifecycle.svelte +73 -0
- package/dist/planner/PlannerLifecycle.svelte.d.ts +9 -0
- package/dist/planner/app.svelte.d.ts +12 -2
- package/dist/planner/app.svelte.js +13 -3
- package/dist/planner/assistant.js +21 -3
- package/dist/planner/commands/adapter.js +9 -2
- package/dist/planner/commands/types.d.ts +1 -1
- package/dist/planner/commands/types.js +1 -0
- package/dist/planner/header-icons.d.ts +12 -0
- package/dist/planner/header-icons.js +12 -0
- package/dist/planner/host/HostPlanner.svelte +70 -0
- package/dist/planner/host/HostPlanner.svelte.d.ts +17 -0
- package/dist/planner/host/session.svelte.d.ts +28 -0
- package/dist/planner/host/session.svelte.js +186 -0
- package/dist/planner/routes.d.ts +49 -0
- package/dist/planner/routes.js +64 -0
- package/dist/planner/shell.d.ts +40 -0
- package/dist/planner/shell.js +56 -0
- package/dist/planner/tab.svelte.d.ts +6 -3
- package/dist/planner/tab.svelte.js +11 -4
- package/dist/planner/title.d.ts +15 -0
- package/dist/planner/title.js +21 -0
- package/dist/planner/title.svelte.d.ts +6 -0
- package/dist/planner/title.svelte.js +11 -0
- package/dist/planner/types.d.ts +39 -7
- package/dist/products/media.d.ts +20 -0
- package/dist/products/media.js +65 -0
- package/dist/recipes/help/descriptions.json +1 -3
- package/dist/recipes/index.d.ts +2 -0
- package/dist/recipes/index.js +6 -0
- package/dist/recipes/plumbing.d.ts +35 -1
- package/dist/recipes/plumbing.js +74 -0
- package/dist/screens/definition.d.ts +35 -0
- package/dist/screens/definition.js +132 -0
- package/dist/screens/relations.d.ts +17 -0
- package/dist/screens/relations.js +98 -0
- package/dist/screens/totals.d.ts +37 -0
- package/dist/screens/totals.js +65 -0
- package/dist/sections/info.d.ts +1 -1
- package/dist/sections/info.js +2 -2
- package/dist/settings/app-settings.d.ts +17 -1
- package/dist/settings/app-settings.js +40 -3
- package/dist/smrt-version.d.ts +2 -0
- package/dist/smrt-version.js +4 -0
- package/dist/styles/planner-forms.css +53 -0
- package/dist/styles/planner-lists.css +43 -0
- package/dist/theme/css-highlight.d.ts +6 -0
- package/dist/theme/css-highlight.js +34 -0
- package/dist/theme/custom-css.svelte.d.ts +34 -0
- package/dist/theme/custom-css.svelte.js +246 -0
- package/dist/theme/runtime.js +25 -5
- package/dist/theme/theme.d.ts +26 -3
- package/dist/theme/theme.js +70 -2
- package/dist/upstream/overlay.d.ts +14 -5
- package/dist/upstream/overlay.js +20 -2
- package/package.json +13 -6
- package/app/_app/immutable/assets/0.B5zXkXe_.css +0 -1
- package/app/_app/immutable/assets/10.hpcnxvK1.css +0 -1
- package/app/_app/immutable/assets/11.D7zoXfVV.css +0 -1
- package/app/_app/immutable/assets/12.CPobm1ED.css +0 -1
- package/app/_app/immutable/assets/2.CyaWdRdI.css +0 -1
- package/app/_app/immutable/assets/3.BlPQOes8.css +0 -1
- package/app/_app/immutable/assets/8.2gQeKBp_.css +0 -1
- package/app/_app/immutable/assets/9.HOPT4xtg.css +0 -1
- package/app/_app/immutable/assets/AiSetup.Cb22AigN.css +0 -1
- package/app/_app/immutable/assets/Button.DkP0qkG9.css +0 -1
- package/app/_app/immutable/assets/ConnectTools.BgIJOOGW.css +0 -1
- package/app/_app/immutable/assets/FieldMapForm.BCU-4pO4.css +0 -1
- package/app/_app/immutable/assets/ModelPage.Dd3LcMta.css +0 -1
- package/app/_app/immutable/assets/SectionActions.CTkVuNMF.css +0 -1
- package/app/_app/immutable/assets/SectionIcons.5Udq9vN-.css +0 -1
- package/app/_app/immutable/assets/SegmentedControl.B8SrQacd.css +0 -1
- package/app/_app/immutable/assets/dist.C5nHBk_O.css +0 -1
- package/app/_app/immutable/assets/feedback.BVKAwFck.css +0 -1
- package/app/_app/immutable/assets/forms.BChZ2RWM.css +0 -1
- package/app/_app/immutable/assets/percent.LH0z-ozZ.css +0 -1
- package/app/_app/immutable/assets/store.CGDwHkkF.css +0 -1
- package/app/_app/immutable/assets/ui.B1A1Zl2p.css +0 -1
- package/app/_app/immutable/assets/workspace.BIMkuZDb.css +0 -1
- package/app/_app/immutable/chunks/1okeBSoq.js +0 -1
- package/app/_app/immutable/chunks/B32EWqI8.js +0 -9
- package/app/_app/immutable/chunks/B4Kevpe0.js +0 -1
- package/app/_app/immutable/chunks/BKwRT_1p.js +0 -1
- package/app/_app/immutable/chunks/BS4h9ES-.js +0 -1
- package/app/_app/immutable/chunks/BYde9M_U.js +0 -1
- package/app/_app/immutable/chunks/CMhpRMKg.js +0 -1
- package/app/_app/immutable/chunks/CPRHZZeW.js +0 -1
- package/app/_app/immutable/chunks/CRQ1Pmzr.js +0 -1
- package/app/_app/immutable/chunks/CV-2zt0K.js +0 -2
- package/app/_app/immutable/chunks/CWtfVMDz.js +0 -1
- package/app/_app/immutable/chunks/Chyo8rdT.js +0 -3
- package/app/_app/immutable/chunks/CmmuWmp6.js +0 -2
- package/app/_app/immutable/chunks/CrFNLK0f.js +0 -1
- package/app/_app/immutable/chunks/CygC84VT.js +0 -2
- package/app/_app/immutable/chunks/D0VgZnk1.js +0 -1
- package/app/_app/immutable/chunks/DD7gpKb2.js +0 -1
- package/app/_app/immutable/chunks/DJtH-lRi.js +0 -3
- package/app/_app/immutable/chunks/DNRgqfTx.js +0 -1
- package/app/_app/immutable/chunks/DVRKjN-E.js +0 -1
- package/app/_app/immutable/chunks/D_J_XtJy.js +0 -846
- package/app/_app/immutable/chunks/Dp9GVO-9.js +0 -1
- package/app/_app/immutable/chunks/DqcD-WtP.js +0 -1
- package/app/_app/immutable/chunks/OJ_lLTHH.js +0 -1
- package/app/_app/immutable/chunks/QukgIHDX.js +0 -1
- package/app/_app/immutable/chunks/WxSPP8QW.js +0 -4
- package/app/_app/immutable/chunks/leQCwW2d.js +0 -1
- package/app/_app/immutable/chunks/p6bgzXiY.js +0 -1
- package/app/_app/immutable/chunks/ufuM4XBq.js +0 -33
- package/app/_app/immutable/entry/app.D5JJain6.js +0 -2
- package/app/_app/immutable/entry/start.CH9DJLgI.js +0 -1
- package/app/_app/immutable/nodes/0.CL1MxOva.js +0 -10
- package/app/_app/immutable/nodes/1.BO731RRg.js +0 -1
- package/app/_app/immutable/nodes/10.1nQxyH9H.js +0 -4
- package/app/_app/immutable/nodes/11.Cw0JnQF3.js +0 -1
- package/app/_app/immutable/nodes/12.BmZyLHbM.js +0 -1
- package/app/_app/immutable/nodes/2.BEw046av.js +0 -17
- package/app/_app/immutable/nodes/3.DvwpTAQA.js +0 -1
- package/app/_app/immutable/nodes/4.qrT4bnmS.js +0 -1
- package/app/_app/immutable/nodes/5.DDLa2uhV.js +0 -1
- package/app/_app/immutable/nodes/6.DN0QTY6z.js +0 -1
- package/app/_app/immutable/nodes/7.C_8N82Wq.js +0 -1
- package/app/_app/immutable/nodes/8.D2Mszsua.js +0 -3
- package/app/_app/immutable/nodes/9.CLYsywul.js +0 -1
- package/app/m/content/Contents/index.html +0 -96
- package/app/m/preferences/UiPreferenceRecord/index.html +0 -96
- package/app/m/users/AccessRequest/index.html +0 -96
- package/app/m/users/ResourceGrant/index.html +0 -96
- package/app/m/users/UsersCliAuthRequest/index.html +0 -96
- package/app/m/users/UsersMagicLinkToken/index.html +0 -96
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<link href="../../_app/immutable/entry/start.C_vMied2.js" rel="modulepreload">
|
|
7
|
+
<link href="../../_app/immutable/chunks/D3nyL-ZK.js" rel="modulepreload">
|
|
8
|
+
<link href="../../_app/immutable/chunks/vNEnXNLV.js" rel="modulepreload">
|
|
9
|
+
<link href="../../_app/immutable/chunks/Dd_uD5pT.js" rel="modulepreload">
|
|
10
|
+
<link href="../../_app/immutable/chunks/Dt-HX3Vu.js" rel="modulepreload">
|
|
11
|
+
<link href="../../_app/immutable/entry/app.vuScBcN4.js" rel="modulepreload">
|
|
12
|
+
<link href="../../_app/immutable/chunks/uBIymjUX.js" rel="modulepreload">
|
|
13
|
+
<link href="../../_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
|
|
14
|
+
<link href="../../_app/immutable/nodes/0.BeNJfVow.js" rel="modulepreload">
|
|
15
|
+
<link href="../../_app/immutable/chunks/Dreozana.js" rel="modulepreload">
|
|
16
|
+
<link href="../../_app/immutable/chunks/D0FW0z6R.js" rel="modulepreload">
|
|
17
|
+
<link href="../../_app/immutable/chunks/By-QJdbA.js" rel="modulepreload">
|
|
18
|
+
<link href="../../_app/immutable/chunks/C-AoRalq.js" rel="modulepreload">
|
|
19
|
+
<link href="../../_app/immutable/chunks/B3FAegW4.js" rel="modulepreload">
|
|
20
|
+
<link href="../../_app/immutable/chunks/BVicq_6F.js" rel="modulepreload">
|
|
21
|
+
<link href="../../_app/immutable/chunks/CNj-_B0j.js" rel="modulepreload">
|
|
22
|
+
<link href="../../_app/immutable/chunks/Cm0VMWZu.js" rel="modulepreload">
|
|
23
|
+
<link href="../../_app/immutable/chunks/BzMfoxBk.js" rel="modulepreload">
|
|
24
|
+
<link href="../../_app/immutable/chunks/CZGhPAoL.js" rel="modulepreload">
|
|
25
|
+
<link href="../../_app/immutable/chunks/BYcBM-fh.js" rel="modulepreload">
|
|
26
|
+
<link href="../../_app/immutable/chunks/TjbilXEg.js" rel="modulepreload">
|
|
27
|
+
<link href="../../_app/immutable/chunks/CGKL_Nlh.js" rel="modulepreload">
|
|
28
|
+
<link href="../../_app/immutable/chunks/dbZ3U29n.js" rel="modulepreload">
|
|
29
|
+
<link href="../../_app/immutable/chunks/BrorvU4B.js" rel="modulepreload">
|
|
30
|
+
<link href="../../_app/immutable/chunks/BV3NwM01.js" rel="modulepreload">
|
|
31
|
+
<link href="../../_app/immutable/chunks/Ba1g71Sq.js" rel="modulepreload">
|
|
32
|
+
<link href="../../_app/immutable/chunks/JBS2nHGN.js" rel="modulepreload">
|
|
33
|
+
<link href="../../_app/immutable/chunks/CsmXMAyE.js" rel="modulepreload">
|
|
34
|
+
<link href="../../_app/immutable/chunks/auwiz8v4.js" rel="modulepreload">
|
|
35
|
+
<link href="../../_app/immutable/chunks/CU8cbxOZ.js" rel="modulepreload">
|
|
36
|
+
<link href="../../_app/immutable/chunks/B8iReL-r.js" rel="modulepreload">
|
|
37
|
+
<link href="../../_app/immutable/chunks/BiO_bqNH.js" rel="modulepreload">
|
|
38
|
+
<link href="../../_app/immutable/chunks/CgAkqYsL.js" rel="modulepreload">
|
|
39
|
+
<link href="../../_app/immutable/nodes/14.BNgJ8cEq.js" rel="modulepreload">
|
|
40
|
+
<link href="../../_app/immutable/chunks/D71UrO5c.js" rel="modulepreload">
|
|
41
|
+
<!--e4gtxy--><!----><style id="smrt-cascade-layers">@layer smrt.reset, smrt.structure, smrt.theme;</style><!----><!----><!--sp05yg--><!----><title>Planner · smrt planner</title>
|
|
42
|
+
<link href="../../_app/immutable/assets/feedback.FjY5wqsa.css" rel="stylesheet">
|
|
43
|
+
<link href="../../_app/immutable/assets/currency-metadata.CJIy0Dzm.css" rel="stylesheet">
|
|
44
|
+
<link href="../../_app/immutable/assets/app.BS7nbUi0.css" rel="stylesheet">
|
|
45
|
+
<link href="../../_app/immutable/assets/SegmentedControl.T_hJQXHk.css" rel="stylesheet">
|
|
46
|
+
<link href="../../_app/immutable/assets/webmcp-ui-context.CC5pQLNE.css" rel="stylesheet">
|
|
47
|
+
<link href="../../_app/immutable/assets/data.DQcbQG_b.css" rel="stylesheet">
|
|
48
|
+
<link href="../../_app/immutable/assets/forms.DA06CFM9.css" rel="stylesheet">
|
|
49
|
+
<link href="../../_app/immutable/assets/AppShell.DKPbJFmw.css" rel="stylesheet">
|
|
50
|
+
<link href="../../_app/immutable/assets/workspace.Dtoe2fRU.css" rel="stylesheet">
|
|
51
|
+
<link href="../../_app/immutable/assets/SectionIcons.BGFcFuOf.css" rel="stylesheet">
|
|
52
|
+
<link href="../../_app/immutable/assets/SectionActions.BE1CPmxk.css" rel="stylesheet">
|
|
53
|
+
<link href="../../_app/immutable/assets/0.BvXq1Svw.css" rel="stylesheet">
|
|
54
|
+
<link href="../../_app/immutable/assets/14.nsp62-4b.css" rel="stylesheet">
|
|
55
|
+
</head>
|
|
56
|
+
<body data-sveltekit-preload-data="hover">
|
|
57
|
+
<div style="display: contents"><!--[--><!--[0--><!--[--><!--[-1--><!--]--> <div class="shell-host svelte-12qhfyh"><!--[-1--><!--]--> <!----> <div class="smrt-theme-root svelte-e4gtxy" data-theme="smrt" data-color-scheme="light" data-contrast="standard" data-smrt-component="ThemeProvider"><!--[-1--><div class="smrt-admin-shell svelte-t0v968" data-top-state="collapsed" data-left-state="expanded" data-right-state="collapsed" data-bottom-state="hidden" data-viewport="desktop" data-bottom-bar="none" style="--smrt-admin-shell-left-track: 16rem; --smrt-admin-shell-right-track: 0rem; --smrt-admin-shell-top-track: 3.5rem; --smrt-admin-shell-bottom-track: 0rem; --smrt-admin-shell-left-collapsed: 4.25rem; --smrt-admin-shell-right-collapsed: 0rem; --smrt-admin-shell-left-expanded: 16rem; --smrt-admin-shell-right-expanded: 20rem; --smrt-admin-shell-top-expanded: 18rem; --smrt-admin-shell-bottom-expanded: 18rem; --smrt-admin-shell-bottom-track: 0rem; --smrt-admin-shell-right-track: 0rem; --smrt-admin-shell-header-track: 0rem; --smrt-admin-shell-phone-bar-track: 0rem; --smrt-shell-floating-reserve-inline: 0px; --smrt-shell-floating-reserve-block: 0px; --smrt-shell-floating-reserve-main: 0px" data-smrt-component="AdminShell"><!--[-1--><!--]--> <!--[-1--><!--]--><!----> <!--[0--><header id="smrt-admin-shell-top-panel" class="smrt-admin-shell__edge smrt-admin-shell__edge--top svelte-t0v968" data-state="collapsed" data-presentation="overlay" style="--smrt-admin-shell-edge-columns: 0px minmax(0, 1fr) 0px;"><!--[-1--><!--]--> <div class="smrt-admin-shell__band smrt-admin-shell__band--top svelte-t0v968" style="--smrt-admin-shell-band-column: 2;"><!--[-1--><!--[-1--><!--]--> <!--[-1--><!--]--><!--]--> <!--[0--><div class="smrt-admin-shell__tenant-opener svelte-t0v968"><button type="button" class="smrt-admin-shell__chrome-button svelte-t0v968" data-smrt-part="trigger" aria-label="Menu" title="Menu" aria-expanded="true" aria-controls="smrt-admin-shell-left-panel"><svg viewBox="0 0 24 24" width="20" height="20" fill="currentColor" aria-hidden="true" focusable="false"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"></path></svg></button><!----></div><!--]--> <!--[1--><div class="smrt-admin-shell__slot smrt-admin-shell__slot--header-start svelte-t0v968" data-slot="header.start"><!--[--><!--[--><!--[1--><!--[0--><a class="smrt-admin-shell__brand smrt-admin-shell__brand-link svelte-rxwpms" href="../../" aria-label="Planner"><!--[-1--><!--[0--><img class="smrt-admin-shell__logo svelte-rxwpms" src="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20128%20128'%20role='img'%3e%3cdefs%3e%3clinearGradient%20id='flame'%20x1='26'%20y1='16'%20x2='101'%20y2='112'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23f05b2b'/%3e%3cstop%20offset='1'%20stop-color='%23c9381e'/%3e%3c/linearGradient%3e%3clinearGradient%20id='heat'%20x1='51'%20y1='49'%20x2='72'%20y2='111'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23ffd33d'/%3e%3cstop%20offset='1'%20stop-color='%23f2a817'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20fill='url(%23flame)'%20d='M64%205c-3%2018-15%2026-13%2043-9-5-13-13-13-22C20%2043%2015%2062%2022%2082c7%2022%2023%2037%2042%2041%2022-4%2039-21%2043-43%203-17-3-32-18-45%202%2011%200%2018-6%2025C84%2036%2075%2019%2064%205Z'%20/%3e%3cpath%20fill='url(%23heat)'%20d='M64%2045c-2%2015-14%2022-13%2038-5-4-8-9-9-15-7%2010-8%2020-4%2030%205%2012%2014%2020%2026%2023%2013-3%2023-12%2027-25%203-11%200-20-8-29%200%207-2%2012-6%2016%201-16-5-27-13-38Z'%20/%3e%3c!--%20The%20glasses%20render%20as%20two%20stacked%20stroke%20groups:%20a%20pale%20warm%20casing%20under%20a%20dark%20warm-charcoal%20stroke.%20The%20casing%20keeps%20the%20dark%20strokes%20legible%20where%20they%20leave%20the%20flame%20body%20(temple%20tips,%20lower%20rims)%20on%20dark%20backgrounds,%20and%20reads%20as%20a%20rim%20light%20against%20the%20flame%20on%20light%20ones.%20--%3e%3cg%20fill='none'%20stroke='%23ffe3ae'%20stroke-opacity='0.85'%20stroke-linecap='round'%20stroke-linejoin='round'%3e%3cpath%20stroke-width='14'%20d='M7%2063c12-4%2027-5%2043-1M78%2062c16-4%2031-3%2043%201'/%3e%3crect%20x='12'%20y='58'%20width='46'%20height='35'%20rx='13'%20stroke-width='14'/%3e%3crect%20x='70'%20y='58'%20width='46'%20height='35'%20rx='13'%20stroke-width='14'/%3e%3cpath%20stroke-width='13'%20d='M57%2066c5-4%209-4%2014%200'/%3e%3c/g%3e%3cg%20fill='none'%20stroke='%2333221b'%20stroke-linecap='round'%20stroke-linejoin='round'%3e%3cpath%20stroke-width='8'%20d='M7%2063c12-4%2027-5%2043-1M78%2062c16-4%2031-3%2043%201'/%3e%3crect%20x='12'%20y='58'%20width='46'%20height='35'%20rx='13'%20stroke-width='8'/%3e%3crect%20x='70'%20y='58'%20width='46'%20height='35'%20rx='13'%20stroke-width='8'/%3e%3cpath%20stroke-width='7'%20d='M57%2066c5-4%209-4%2014%200'/%3e%3c/g%3e%3c/svg%3e" alt=""/><!--]--> <!--[-1--><div class="smrt-admin-shell__brand-text svelte-rxwpms wordmark"><strong class="svelte-rxwpms">Planner</strong><!--[-1--><!--]--></div><!--]--><!--]--><!----></a><!--]--><!----><!--]--><!--[1--><span class="smrt-layout-toggle svelte-veyjiz" data-testid="layout-edit-toggle"><button type="button" class="smrt-shell-icon-button svelte-14vbk8m" aria-label="Edit layout" title="Edit layout" aria-pressed="false" data-smrt-component="ShellIconButton"><!--[1--><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true" focusable="false"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04a1 1 0 0 0 0-1.41l-2.34-2.34a1 1 0 0 0-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"></path></svg><!--]--></button><!----></span><!----><!--]--><!--]--><!----><!--]--></div><!--]--><!----> <!--[1--><div class="smrt-admin-shell__slot smrt-admin-shell__slot--header-center svelte-t0v968" data-slot="header.center"><!--[--><!--[--><!--[1--><!--[0--><!--[-1--><button type="button" aria-busy="false" class="smrt-button__root smrt-button__ghost smrt-button__sm smrt-command-palette-trigger svelte-mp1nah" aria-label="Search" aria-haspopup="dialog" aria-expanded="false" aria-keyshortcuts="Control+K Meta+K" data-smrt-component="Button"><!--[-1--><!--]--> <span class="smrt-button__content svelte-mp1nah" data-smrt-part="label"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg> <!--[0--><span class="smrt-command-palette-trigger__label svelte-uygfuo">Search</span> <!--[0--><kbd class="smrt-command-palette-trigger__hint svelte-uygfuo">Ctrl+K</kbd><!--]--><!--]--><!----></span></button><!--]--><!--]--> <!--$s1--><dialog class="modal modal--md modal--center svelte-lxsqox" aria-label="Search" data-smrt-component="Modal"><div class="modal__container svelte-lxsqox"><!--[-1--><!--]--> <div class="modal__body svelte-lxsqox" data-smrt-part="body"><!--[0--><div class="smrt-command-palette svelte-1rrp2qc"><div class="smrt-command-palette__field svelte-1rrp2qc"><svg class="smrt-command-palette__search-icon svelte-1rrp2qc" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg> <input type="text" value="" placeholder="Search or run a command" aria-label="Search" class="smrt-input__root smrt-command-palette__input svelte-yn4wbg" role="combobox" aria-expanded="false" aria-controls="smrt-palette-list-s1" aria-autocomplete="list" autocomplete="off" autocapitalize="off" spellcheck="false" enterkeyhint="go" data-smrt-component="Input"/><!----></div> <div class="smrt-command-palette__list svelte-1rrp2qc" id="smrt-palette-list-s1" role="listbox" aria-label="Results" aria-busy="false"><!--[--><!--]--></div> <!--[0--><p class="smrt-command-palette__empty svelte-1rrp2qc"></p><!--]--> <div class="smrt-command-palette__hints svelte-1rrp2qc" aria-hidden="true"><span><kbd class="svelte-1rrp2qc">↑</kbd><kbd class="svelte-1rrp2qc">↓</kbd> to move</span> <span><kbd class="svelte-1rrp2qc">↵</kbd> to select</span> <span><kbd class="svelte-1rrp2qc">Esc</kbd> to close</span></div> <div class="smrt-command-palette__live svelte-1rrp2qc" role="status" aria-live="polite"></div></div><!----><!--]--></div> <!--[-1--><!--]--></div></dialog><!----><!----><!--]--><!--]--><!----><!--]--></div><!--]--><!----> <!--[-1--><!--]--> <!--[1--><div class="smrt-admin-shell__slot smrt-admin-shell__slot--header-end svelte-t0v968" data-slot="header.end"><!--[--><!--[--><!--[1--><a class="header-link svelte-d0fjw8" href="../../" aria-label="Plan the app" title="Plan the app" style="--planner-transition-name: planner-customize;"><svg xmlns="http://www.w3.org/2000/svg" width="18px" height="18px" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-smrt-component="Icon" class="svelte-1vidiye"><path d="M4 9.5a3.5 3.5 0 1 1 7 0a3.5 3.5 0 1 1-7 0zM13 9.5a3.5 3.5 0 1 1 7 0a3.5 3.5 0 1 1-7 0zM8 7a4 4 0 1 1 8 0a4 4 0 1 1-8 0zM6 9.5h12V15H6zM7 16.5h10a1 1 0 0 1 1 1V19a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1v-1.5a1 1 0 0 1 1-1z"></path></svg><!----></a><!----><!--]--><!--[1--><a class="header-link svelte-d0fjw8" href="../../?tab=export" aria-label="Export the app" title="Export the app" style="--planner-transition-name: planner-export;"><svg xmlns="http://www.w3.org/2000/svg" width="18px" height="18px" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-smrt-component="Icon" class="svelte-1vidiye"><path d="M11 3h2v9l4-4 1.5 1.5L12 16l-6.5-6.5L7 8l4 4V3zM3 18h18v3H3v-3z"></path></svg><!----></a><!----><!--]--><!--[0--><!--[0--><div class="smrt-dock-toggles svelte-1bderho" data-testid="dock-toggles"><!--[--><!--[0--><a class="smrt-dock-toggles__button svelte-1bderho" href="../../ai/" data-dock-tool="assistant" aria-label="Set up the assistant" title="Set up the assistant"><!--[0--><svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 11.5a8.5 8.5 0 0 1-12.4 7.5L3 20.5l1.6-5A8.5 8.5 0 1 1 21 11.5z"></path></svg><!--]--><!----></a><!--]--><!--]--></div><!--]--><!--]--><!--[1--><span class="smrt-app-shell-color-scheme svelte-veyjiz"><div class="smrt-color-scheme-toggle switch svelte-nk1tr9" data-smrt-component="ColorSchemeToggle"><!--[0--><button class="smrt-color-scheme-toggle__switch svelte-nk1tr9" type="button" aria-label="Toggle color scheme" title="Light"><!--[-1--><span class="smrt-color-scheme-toggle__icon svelte-nk1tr9">☀️</span><!--]--> <!--[0--><span class="smrt-color-scheme-toggle__label svelte-nk1tr9">Light</span><!--]--></button><!--]--></div><!----></span><!----><!--]--><!--]--><!----><!--]--></div><!--]--><!----> <!--[-1--><!--]--> <!--[-1--><!--]--><!----></div> <!--[-1--><!--]--> <!--[-1--><!--]--></header><!--]--> <!--[-1--><!--]--><!----> <!--[0--><aside id="smrt-admin-shell-left-panel" class="smrt-admin-shell__edge smrt-admin-shell__edge--left svelte-t0v968" data-state="expanded" data-presentation="push" aria-label="Left sidebar"><!--[-1--><!--]--><!----> <div class="smrt-admin-shell__rail svelte-t0v968"><!--[-1--><!--]--><!----> <!--[-1--><!--]--> <!--[0--><div class="smrt-admin-shell__tenant-stack svelte-t0v968"><!--[-1--><!--]--><!----> <div class="smrt-admin-shell__tenant-content svelte-t0v968"><!--[0--><!--[-1--><!--]--><!----><!--]--></div> <!--[0--><!--[0--><!--[-1--><button type="button" aria-busy="false" class="smrt-button__root smrt-button__ghost smrt-button__sm smrt-admin-shell__edge-toggle smrt-admin-shell__edge-toggle--left svelte-mp1nah" aria-label="Collapse sidebar" title="Collapse sidebar" aria-expanded="true" aria-controls="smrt-admin-shell-left-panel" data-smrt-component="Button"><!--[-1--><!--]--> <span class="smrt-button__content svelte-mp1nah" data-smrt-part="label"><svg class="smrt-admin-shell__edge-toggle-chevron" viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"></path></svg><!--[-1--><!--]--><!----><!----></span></button><!--]--><!--]--><!--]--> <!--[-1--><!--]--> <!--[1--><div class="smrt-admin-shell__slot smrt-admin-shell__slot--leftSidebar-footer svelte-t0v968" data-slot="leftSidebar.footer"><!--[--><!--[--><!--[1--><div class="ai-status svelte-nioco2" role="group" aria-label="AI models"><!--[--><a href="../../ai/" class="cap svelte-nioco2" data-state="available" aria-label="Think: not set up" title="Think: not set up"><svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-smrt-component="Icon" class="svelte-1vidiye"><path d="M11 4.2C10.4 3 8.6 2.8 7.6 3.8C6.2 3.6 5 4.8 5.2 6.1C3.8 6.6 3.3 8.2 4.1 9.3C3 10.2 3 11.9 4 12.8C3.6 14.2 4.4 15.6 5.8 15.9C6.2 17.3 7.6 18.2 9 17.9C9.7 19.2 11 19.6 11 19.6ZM13 4.2 C13.6 3 15.4 2.8 16.4 3.8 C17.8 3.6 19 4.8 18.8 6.1 C20.2 6.6 20.7 8.2 19.9 9.3 C21 10.2 21 11.9 20 12.8 C20.4 14.2 19.6 15.6 18.2 15.9 C17.8 17.3 16.4 18.2 15 17.9 C14.3 19.2 13 19.6 13 19.6 ZM10.2 7.4C8.6 7.8 7.5 7 7 6.2L7.7 5.8C8.2 6.5 9 6.8 10 6.5ZM10.3 11C8.4 11.6 6.6 10.8 5.9 9.6L6.6 9.2C7.2 10.2 8.6 10.7 10.1 10.2ZM10.2 15C8.5 15.6 6.8 15 6 13.9L6.7 13.5C7.4 14.3 8.6 14.6 10 14.2ZM13.8 7.4 C15.4 7.8 16.5 7 17 6.2 L16.3 5.8 C15.8 6.5 15 6.8 14 6.5 ZM13.7 11 C15.6 11.6 17.4 10.8 18.1 9.6 L17.4 9.2 C16.8 10.2 15.4 10.7 13.9 10.2 ZM13.8 15 C15.5 15.6 17.2 15 18 13.9 L17.3 13.5 C16.6 14.3 15.4 14.6 14 14.2 Z"></path></svg><!----></a><a href="../../ai/" class="cap svelte-nioco2" data-state="available" aria-label="Hear: not set up" title="Hear: not set up"><svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-smrt-component="Icon" class="svelte-1vidiye"><path d="M17 20c-.29 0-.56-.06-.76-.15-.71-.37-1.21-.88-1.71-2.38-.51-1.56-1.47-2.29-2.39-3-.79-.61-1.61-1.24-2.32-2.53C9.29 10.98 9 9.93 9 9c0-2.8 2.2-5 5-5s5 2.2 5 5h2c0-3.93-3.07-7-7-7S7 5.07 7 9c0 1.26.38 2.65 1.07 3.9.91 1.65 1.98 2.48 2.85 3.15.81.62 1.39 1.07 1.71 2.05.6 1.82 1.37 2.84 2.73 3.55.51.23 1.07.35 1.64.35 2.21 0 4-1.79 4-4h-2c0 1.1-.9 2-2 2zM7.64 2.64L6.22 1.22C4.23 3.21 3 5.96 3 9s1.23 5.79 3.22 7.78l1.41-1.41C6.01 13.74 5 11.49 5 9s1.01-4.74 2.64-6.36zM11.5 9c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5-1.12-2.5-2.5-2.5-2.5 1.12-2.5 2.5z"></path></svg><!----></a><a href="../../ai/" class="cap svelte-nioco2" data-state="available" aria-label="Speak: not switched on" title="Speak: not switched on"><svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-smrt-component="Icon" class="svelte-1vidiye"><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"></path></svg><!----></a><!--]--></div><!----><!--]--><!--[1--><!--$s2--><div class="smrt-workspace-account-menu svelte-1xvol4w" title="You" data-smrt-component="WorkspaceAccountMenu"><button type="button" class="smrt-workspace-account-menu__trigger svelte-1xvol4w" data-smrt-part="trigger" aria-haspopup="menu" aria-expanded="false" disabled=""><span class="smrt-workspace-account-menu__open svelte-1xvol4w">Open account menu</span> <span class="avatar sm svelte-1itig4m" aria-hidden="true" data-smrt-component="Avatar"><!--[-1--><span class="avatar__initials svelte-1itig4m" role="img" aria-label="You">YO</span><!--]--> <!--[-1--><!--]--></span><!----> <span class="smrt-workspace-account-menu__identity svelte-1xvol4w"><span class="smrt-workspace-account-menu__summary svelte-1xvol4w">You</span> <!--[-1--><!--]--></span> <span class="smrt-workspace-account-menu__indicator svelte-1xvol4w" aria-hidden="true">•••</span></button> <!--[-1--><!--]--></div><!----><!--]--><!--]--><!----><!--]--></div><!--]--><!----></div><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--></div></aside><!--]--> <main id="smrt-admin-shell-main" class="smrt-admin-shell__main svelte-t0v968"><div class="smrt-layout-live svelte-veyjiz" role="status" aria-live="polite"></div> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[0--><!--[0--><!----><!--]--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--> <!----> <span hidden="" data-smrt-planner-anchor=""></span><!----> <!--[--><!--[-1--><!--]--><!--]--><!----><!----><!----></main> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--><!----> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--><!----> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--></div><!--]--><!----></div><!----><!----><!----></div><!--]--><!--]--> <!--[-1--><!--]--><!--]-->
|
|
58
|
+
|
|
59
|
+
<script>
|
|
60
|
+
{
|
|
61
|
+
__sveltekit_1uquhsn = {
|
|
62
|
+
base: new URL("../..", location).pathname.slice(0, -1)
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const element = document.currentScript.parentElement;
|
|
66
|
+
|
|
67
|
+
Promise.all([
|
|
68
|
+
import("../../_app/immutable/entry/start.C_vMied2.js"),
|
|
69
|
+
import("../../_app/immutable/entry/app.vuScBcN4.js")
|
|
70
|
+
]).then(([kit, app]) => {
|
|
71
|
+
kit.start(app, element, {
|
|
72
|
+
node_ids: [0, 14],
|
|
73
|
+
data: [null,null],
|
|
74
|
+
form: null,
|
|
75
|
+
error: null
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
</script>
|
|
80
|
+
</div>
|
|
81
|
+
</body>
|
|
82
|
+
</html>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { AssistantSession, type SessionOptions } from '../assistant/session.svelte.ts';
|
|
2
|
+
import type { ChatModel } from '../assistant/transport.ts';
|
|
2
3
|
import { type VoiceOptions, VoiceSession } from '../assistant/voice.svelte.ts';
|
|
3
4
|
import { ByoModel } from '../inference/byo.svelte.ts';
|
|
4
|
-
import { type ConfigResult, type InferenceConfig } from '../inference/config.ts';
|
|
5
|
+
import { type ConfigResult, type InferenceConfig, type InferenceMode } from '../inference/config.ts';
|
|
5
6
|
import { type CapabilitySummary } from './status.ts';
|
|
6
7
|
/** UI choices that are not part of the cookbook. */
|
|
7
8
|
export interface AiPrefs {
|
|
@@ -59,7 +60,9 @@ export declare class AiState {
|
|
|
59
60
|
speaking: boolean;
|
|
60
61
|
/** Where the model runs, from `planner.config.json` or the `inference` prop. */
|
|
61
62
|
inference: InferenceConfig;
|
|
62
|
-
/**
|
|
63
|
+
/** Modes this policy exposes. Manual is always available for a multi-mode policy. */
|
|
64
|
+
availableModes: InferenceMode[];
|
|
65
|
+
/** Set when the config was unusable and inference fails closed to manual. */
|
|
63
66
|
notice: string;
|
|
64
67
|
/** The visitor's own endpoint (byo mode only). */
|
|
65
68
|
byo: ByoModel | null;
|
|
@@ -84,10 +87,25 @@ export declare class AiState {
|
|
|
84
87
|
/**
|
|
85
88
|
* Apply the inference config. `host` is ready at once (nothing to download);
|
|
86
89
|
* `byo` is ready once the visitor has connected an endpoint on the AI page;
|
|
87
|
-
* `browser` is today's WebLLM. An unusable config arrives as `
|
|
88
|
-
*
|
|
90
|
+
* `browser` is today's WebLLM. An unusable config arrives as `manual` with a
|
|
91
|
+
* `notice`.
|
|
89
92
|
*/
|
|
90
93
|
configure(result: ConfigResult): void;
|
|
94
|
+
/**
|
|
95
|
+
* A host's own model (a mounted `Planner`'s `inference.chat`): the host
|
|
96
|
+
* chose and loaded it, so nothing is downloaded and no mode is offered. A
|
|
97
|
+
* function is read on every turn, so a model that loads later still answers.
|
|
98
|
+
*/
|
|
99
|
+
useChat(chat: ChatModel | (() => ChatModel | null), label: string): void;
|
|
100
|
+
/**
|
|
101
|
+
* The assistant can answer now: a loaded browser model, the host's server,
|
|
102
|
+
* or a connected endpoint of the visitor's own. Until then the header icon
|
|
103
|
+
* leads to the AI models page instead of an empty chat.
|
|
104
|
+
*/
|
|
105
|
+
get assistantReady(): boolean;
|
|
106
|
+
/** Change providers only after a visitor selects one from the configured policy. */
|
|
107
|
+
selectInference(mode: InferenceMode): void;
|
|
108
|
+
private applyMode;
|
|
91
109
|
private syncByo;
|
|
92
110
|
private decideFirstRun;
|
|
93
111
|
/** Before hydration every capability reads as not set up, as on the server. */
|
package/dist/ai/state.svelte.js
CHANGED
|
@@ -63,7 +63,9 @@ export class AiState {
|
|
|
63
63
|
speaking = $state(false);
|
|
64
64
|
/** Where the model runs, from `planner.config.json` or the `inference` prop. */
|
|
65
65
|
inference = $state(DEFAULT_INFERENCE);
|
|
66
|
-
/**
|
|
66
|
+
/** Modes this policy exposes. Manual is always available for a multi-mode policy. */
|
|
67
|
+
availableModes = $state(['browser']);
|
|
68
|
+
/** Set when the config was unusable and inference fails closed to manual. */
|
|
67
69
|
notice = $state('');
|
|
68
70
|
/** The visitor's own endpoint (byo mode only). */
|
|
69
71
|
byo = $state(null);
|
|
@@ -119,36 +121,93 @@ export class AiState {
|
|
|
119
121
|
/**
|
|
120
122
|
* Apply the inference config. `host` is ready at once (nothing to download);
|
|
121
123
|
* `byo` is ready once the visitor has connected an endpoint on the AI page;
|
|
122
|
-
* `browser` is today's WebLLM. An unusable config arrives as `
|
|
123
|
-
*
|
|
124
|
+
* `browser` is today's WebLLM. An unusable config arrives as `manual` with a
|
|
125
|
+
* `notice`.
|
|
124
126
|
*/
|
|
125
127
|
configure(result) {
|
|
126
128
|
const { config, notice } = result;
|
|
127
129
|
this.pendingConfig = false;
|
|
128
130
|
this.inference = config;
|
|
129
131
|
this.notice = notice ?? '';
|
|
130
|
-
|
|
132
|
+
const configured = [config.mode, ...(config.alternatives ?? [])];
|
|
133
|
+
this.availableModes = [
|
|
134
|
+
...configured,
|
|
135
|
+
...(config.alternatives?.length && !configured.includes('manual')
|
|
136
|
+
? ['manual']
|
|
137
|
+
: []),
|
|
138
|
+
];
|
|
139
|
+
this.byo = configured.includes('byo')
|
|
140
|
+
? new ByoModel({
|
|
141
|
+
storage: this.options.storage,
|
|
142
|
+
credentialPersistence: config.credentialPersistence,
|
|
143
|
+
presets: config.byo?.presets,
|
|
144
|
+
fetch: this.options.fetch,
|
|
145
|
+
onChange: () => this.syncByo(),
|
|
146
|
+
})
|
|
147
|
+
: null;
|
|
148
|
+
this.applyMode(config.mode);
|
|
149
|
+
if (this.hydrated)
|
|
150
|
+
this.decideFirstRun();
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* A host's own model (a mounted `Planner`'s `inference.chat`): the host
|
|
154
|
+
* chose and loaded it, so nothing is downloaded and no mode is offered. A
|
|
155
|
+
* function is read on every turn, so a model that loads later still answers.
|
|
156
|
+
*/
|
|
157
|
+
useChat(chat, label) {
|
|
158
|
+
this.pendingConfig = false;
|
|
159
|
+
this.inference = { mode: 'host' };
|
|
160
|
+
this.notice = '';
|
|
161
|
+
this.availableModes = ['host'];
|
|
131
162
|
this.byo = null;
|
|
132
|
-
|
|
163
|
+
this.session.setMode('host');
|
|
164
|
+
const read = () => (typeof chat === 'function' ? chat() : chat);
|
|
165
|
+
this.session.useRemote({
|
|
166
|
+
message: (text, options) => {
|
|
167
|
+
const model = read();
|
|
168
|
+
if (!model) {
|
|
169
|
+
throw new Error('The host has not connected a model yet.');
|
|
170
|
+
}
|
|
171
|
+
return model.message(text, options);
|
|
172
|
+
},
|
|
173
|
+
}, label);
|
|
174
|
+
if (this.hydrated)
|
|
175
|
+
this.decideFirstRun();
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* The assistant can answer now: a loaded browser model, the host's server,
|
|
179
|
+
* or a connected endpoint of the visitor's own. Until then the header icon
|
|
180
|
+
* leads to the AI models page instead of an empty chat.
|
|
181
|
+
*/
|
|
182
|
+
get assistantReady() {
|
|
183
|
+
return this.hydrated && this.session.status === 'ready';
|
|
184
|
+
}
|
|
185
|
+
/** Change providers only after a visitor selects one from the configured policy. */
|
|
186
|
+
selectInference(mode) {
|
|
187
|
+
if (!this.availableModes.includes(mode) || mode === this.inference.mode) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
this.inference = { ...this.inference, mode };
|
|
191
|
+
this.notice = '';
|
|
192
|
+
this.applyMode(mode);
|
|
193
|
+
}
|
|
194
|
+
applyMode(mode) {
|
|
195
|
+
this.session.setMode(mode);
|
|
196
|
+
if (mode === 'host' && this.inference.host) {
|
|
133
197
|
const { controller, store, settings, theme } = this.options.session;
|
|
134
198
|
const plan = controller ?? createSliceController({ store, settings, theme });
|
|
135
199
|
this.session.useRemote(createHostChat({
|
|
136
|
-
endpoint:
|
|
200
|
+
endpoint: this.inference.host.endpoint,
|
|
137
201
|
snapshot: () => plan.snapshot(),
|
|
138
202
|
fetch: this.options.fetch,
|
|
139
203
|
}), 'Server');
|
|
140
204
|
}
|
|
141
|
-
else if (
|
|
142
|
-
this.byo = new ByoModel({
|
|
143
|
-
storage: this.options.storage,
|
|
144
|
-
presets: config.byo?.presets,
|
|
145
|
-
fetch: this.options.fetch,
|
|
146
|
-
onChange: () => this.syncByo(),
|
|
147
|
-
});
|
|
205
|
+
else if (mode === 'byo') {
|
|
148
206
|
this.syncByo();
|
|
149
207
|
}
|
|
150
|
-
if (
|
|
151
|
-
this.
|
|
208
|
+
else if (mode === 'manual') {
|
|
209
|
+
this.session.useRemote(null, '');
|
|
210
|
+
}
|
|
152
211
|
}
|
|
153
212
|
syncByo() {
|
|
154
213
|
const byo = this.byo;
|
|
@@ -160,6 +219,7 @@ export class AiState {
|
|
|
160
219
|
// A host's server needs nothing set up, so the form has nothing to ask for.
|
|
161
220
|
this.firstRun =
|
|
162
221
|
this.inference.mode !== 'host' &&
|
|
222
|
+
this.inference.mode !== 'manual' &&
|
|
163
223
|
needsFirstRunSetup({
|
|
164
224
|
thinkDownloaded: this.session.prefs.consented.length > 0 ||
|
|
165
225
|
this.session.status === 'ready',
|
|
@@ -194,6 +254,9 @@ export class AiState {
|
|
|
194
254
|
}
|
|
195
255
|
/** One sentence on where what the visitor types goes, for the AI page. */
|
|
196
256
|
get privacyNote() {
|
|
257
|
+
if (this.inference.mode === 'manual') {
|
|
258
|
+
return 'Inference is off. Planning, validation and export still work without a model.';
|
|
259
|
+
}
|
|
197
260
|
if (this.inference.mode === 'host') {
|
|
198
261
|
return "Your messages and a short summary of your plan go to this site's server. Voice typing and reading aloud stay on this device.";
|
|
199
262
|
}
|
package/dist/ai/status.js
CHANGED
|
@@ -7,6 +7,14 @@ export function deriveCapabilities(input) {
|
|
|
7
7
|
}
|
|
8
8
|
function thinkSummary(t) {
|
|
9
9
|
const base = { id: 'think', name: 'Think' };
|
|
10
|
+
if (t.mode === 'manual') {
|
|
11
|
+
return {
|
|
12
|
+
...base,
|
|
13
|
+
state: 'off',
|
|
14
|
+
label: 'Think: inference off',
|
|
15
|
+
where: 'Off',
|
|
16
|
+
};
|
|
17
|
+
}
|
|
10
18
|
if (t.mode === 'host') {
|
|
11
19
|
return {
|
|
12
20
|
...base,
|
|
@@ -7,16 +7,24 @@ export interface SettingsPatch {
|
|
|
7
7
|
/** Percent, 0 to 100. */
|
|
8
8
|
taxRate?: number;
|
|
9
9
|
paymentTerms?: string;
|
|
10
|
+
/** New documents' prices include tax. */
|
|
11
|
+
pricesIncludeTax?: boolean;
|
|
12
|
+
/** Tax rounds per line or once per document. */
|
|
13
|
+
taxRounding?: 'line' | 'document';
|
|
10
14
|
}
|
|
11
15
|
/**
|
|
12
16
|
* A look as the model states it: a preset, or a brand colour (hex), and
|
|
13
|
-
* optionally light or dark
|
|
17
|
+
* optionally light or dark, corner radius, density and contrast. Tokens only;
|
|
18
|
+
* there is no way to ask for CSS. The names are `set_theme`'s.
|
|
14
19
|
*/
|
|
15
20
|
export interface ThemePatch {
|
|
16
21
|
preset?: string;
|
|
17
22
|
/** `#rrggbb`. */
|
|
18
23
|
primary?: string;
|
|
19
24
|
colorScheme?: ColorSchemeSetting;
|
|
25
|
+
borderRadius?: ThemeSetting['borderRadius'];
|
|
26
|
+
density?: ThemeSetting['density'];
|
|
27
|
+
contrast?: ThemeSetting['contrast'];
|
|
20
28
|
}
|
|
21
29
|
/** Longest payment terms the assistant will write. */
|
|
22
30
|
export declare const MAX_TERMS_LENGTH = 40;
|
|
@@ -79,9 +87,12 @@ export interface AppliedChange {
|
|
|
79
87
|
export declare function buildResponseSchema(recipes: readonly Pick<Recipe, 'id'>[], cookbooks?: readonly {
|
|
80
88
|
id: string;
|
|
81
89
|
}[], withSettings?: boolean, withTheme?: boolean): Record<string, unknown>;
|
|
82
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* Keep only valid settings: circulating currency, tax 0-100, short terms, a
|
|
92
|
+
* yes/no on prices including tax and line or document rounding.
|
|
93
|
+
*/
|
|
83
94
|
export declare function parseSettings(value: unknown): SettingsPatch;
|
|
84
|
-
/** Keep only a known preset, a hex colour
|
|
95
|
+
/** Keep only a known preset, a hex colour, light or dark and known radius, density and contrast values. */
|
|
85
96
|
export declare function parseThemePatch(value: unknown): ThemePatch;
|
|
86
97
|
/** Remove Qwen3-style thinking, including a block cut off before it closed. */
|
|
87
98
|
export declare function stripThinking(raw: string): string;
|
package/dist/assistant/change.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CURRENCY_CODES } from "../settings/currencies.js";
|
|
2
|
-
import { normalizeHex, THEME_PRESETS, } from "../theme/theme.js";
|
|
2
|
+
import { BORDER_RADII, CONTRASTS, DENSITIES, normalizeHex, THEME_PRESETS, } from "../theme/theme.js";
|
|
3
3
|
/** Longest payment terms the assistant will write. */
|
|
4
4
|
export const MAX_TERMS_LENGTH = 40;
|
|
5
5
|
/** Longest reply the schema allows; bounds a model that starts to loop. */
|
|
@@ -30,6 +30,8 @@ export function buildResponseSchema(recipes, cookbooks = [], withSettings = fals
|
|
|
30
30
|
currency: { type: 'string', pattern: '^[A-Z]{3}$' },
|
|
31
31
|
taxRate: { type: 'number', minimum: 0, maximum: 100 },
|
|
32
32
|
paymentTerms: { type: 'string', maxLength: MAX_TERMS_LENGTH },
|
|
33
|
+
pricesIncludeTax: { type: 'boolean' },
|
|
34
|
+
taxRounding: { enum: ['line', 'document'] },
|
|
33
35
|
},
|
|
34
36
|
additionalProperties: false,
|
|
35
37
|
};
|
|
@@ -41,6 +43,9 @@ export function buildResponseSchema(recipes, cookbooks = [], withSettings = fals
|
|
|
41
43
|
preset: { enum: [...THEME_PRESETS] },
|
|
42
44
|
primary: { type: 'string', pattern: '^#[0-9a-fA-F]{6}$' },
|
|
43
45
|
colorScheme: { enum: ['light', 'dark'] },
|
|
46
|
+
borderRadius: { enum: [...BORDER_RADII] },
|
|
47
|
+
density: { enum: [...DENSITIES] },
|
|
48
|
+
contrast: { enum: [...CONTRASTS] },
|
|
44
49
|
},
|
|
45
50
|
additionalProperties: false,
|
|
46
51
|
};
|
|
@@ -52,7 +57,10 @@ export function buildResponseSchema(recipes, cookbooks = [], withSettings = fals
|
|
|
52
57
|
additionalProperties: false,
|
|
53
58
|
};
|
|
54
59
|
}
|
|
55
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* Keep only valid settings: circulating currency, tax 0-100, short terms, a
|
|
62
|
+
* yes/no on prices including tax and line or document rounding.
|
|
63
|
+
*/
|
|
56
64
|
export function parseSettings(value) {
|
|
57
65
|
const out = {};
|
|
58
66
|
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
@@ -78,9 +86,15 @@ export function parseSettings(value) {
|
|
|
78
86
|
if (terms && terms.length <= MAX_TERMS_LENGTH)
|
|
79
87
|
out.paymentTerms = terms;
|
|
80
88
|
}
|
|
89
|
+
if (typeof object.pricesIncludeTax === 'boolean') {
|
|
90
|
+
out.pricesIncludeTax = object.pricesIncludeTax;
|
|
91
|
+
}
|
|
92
|
+
if (object.taxRounding === 'line' || object.taxRounding === 'document') {
|
|
93
|
+
out.taxRounding = object.taxRounding;
|
|
94
|
+
}
|
|
81
95
|
return out;
|
|
82
96
|
}
|
|
83
|
-
/** Keep only a known preset, a hex colour
|
|
97
|
+
/** Keep only a known preset, a hex colour, light or dark and known radius, density and contrast values. */
|
|
84
98
|
export function parseThemePatch(value) {
|
|
85
99
|
const out = {};
|
|
86
100
|
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
@@ -98,6 +112,15 @@ export function parseThemePatch(value) {
|
|
|
98
112
|
object.colorScheme === 'system') {
|
|
99
113
|
out.colorScheme = object.colorScheme;
|
|
100
114
|
}
|
|
115
|
+
if (BORDER_RADII.includes(object.borderRadius)) {
|
|
116
|
+
out.borderRadius = object.borderRadius;
|
|
117
|
+
}
|
|
118
|
+
if (DENSITIES.includes(object.density)) {
|
|
119
|
+
out.density = object.density;
|
|
120
|
+
}
|
|
121
|
+
if (CONTRASTS.includes(object.contrast)) {
|
|
122
|
+
out.contrast = object.contrast;
|
|
123
|
+
}
|
|
101
124
|
return out;
|
|
102
125
|
}
|
|
103
126
|
/** Remove Qwen3-style thinking, including a block cut off before it closed. */
|
package/dist/assistant/engine.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/** The real host: a module worker running WebLLM. */
|
|
2
2
|
export const browserHost = {
|
|
3
|
-
createWorker: () =>
|
|
3
|
+
createWorker: () =>
|
|
4
|
+
// Extensionless on purpose: Vite resolves it to `.ts` here and to the
|
|
5
|
+
// `.js` svelte-package emits in `dist/`, so a host bundling the package
|
|
6
|
+
// finds the worker (`./llm.worker.ts` broke the host's build).
|
|
7
|
+
new Worker(new URL('./llm.worker', import.meta.url), { type: 'module' }),
|
|
4
8
|
createEngine: async (worker, modelId, onProgress) => {
|
|
5
9
|
const { CreateWebWorkerMLCEngine } = await import('@mlc-ai/web-llm');
|
|
6
10
|
return CreateWebWorkerMLCEngine(worker, modelId, {
|
package/dist/assistant/prompt.js
CHANGED
|
@@ -104,10 +104,10 @@ export function buildSystemPrompt(recipes, current, cookbooks = [], settings, ma
|
|
|
104
104
|
out.push('"cookbook": id only if their business clearly fits, else null.');
|
|
105
105
|
}
|
|
106
106
|
if (settings) {
|
|
107
|
-
out.push('"settings": only what they state: currency (ISO), taxRate (percent), paymentTerms; else omit, and do not mention them otherwise.');
|
|
107
|
+
out.push('"settings": only what they state: currency (ISO), taxRate (percent), paymentTerms, pricesIncludeTax (true when their prices include tax), taxRounding (line|document); else omit, and do not mention them otherwise.');
|
|
108
108
|
}
|
|
109
109
|
if (themeInfo) {
|
|
110
|
-
out.push('"theme": only if they ask for a look: {"preset": material|glass|studio|smrt|happyvertical} or {"primary": "#rrggbb"}, optional "colorScheme": light|dark; else omit.');
|
|
110
|
+
out.push('"theme": only if they ask for a look: {"preset": material|glass|studio|smrt|happyvertical} or {"primary": "#rrggbb"}, optional "colorScheme": light|dark, "borderRadius": none|sm|md|lg|xl|full, "density": comfortable|touch, "contrast": auto|standard|more; else omit.');
|
|
111
111
|
}
|
|
112
112
|
const shown = examples(new Set(recipes.map((r) => r.id)), new Set(cookbooks.map((c) => c.id)), Boolean(settings), Boolean(themeInfo));
|
|
113
113
|
if (shown.length)
|
|
@@ -154,7 +154,11 @@ export function buildSystemPrompt(recipes, current, cookbooks = [], settings, ma
|
|
|
154
154
|
const terms = settings.paymentTerms
|
|
155
155
|
? `, terms ${settings.paymentTerms}`
|
|
156
156
|
: '';
|
|
157
|
-
|
|
157
|
+
const pricing = settings.pricesIncludeTax
|
|
158
|
+
? ', prices include tax'
|
|
159
|
+
: ', prices exclude tax';
|
|
160
|
+
const rounding = settings.taxRounding === 'document' ? ', tax rounded per document' : '';
|
|
161
|
+
out.push(`Settings: currency ${settings.currency}, tax ${formatTaxPercent(settings.taxRate)}${terms}${pricing}${rounding}.`);
|
|
158
162
|
}
|
|
159
163
|
if (themeInfo) {
|
|
160
164
|
out.push(`Theme: ${describeTheme(themeInfo.current)}.`);
|
|
@@ -40,6 +40,7 @@ export class AssistantSession {
|
|
|
40
40
|
loaded = null;
|
|
41
41
|
chat = null;
|
|
42
42
|
abort = null;
|
|
43
|
+
loadGeneration = 0;
|
|
43
44
|
options;
|
|
44
45
|
constructor(options) {
|
|
45
46
|
this.options = options;
|
|
@@ -65,7 +66,9 @@ export class AssistantSession {
|
|
|
65
66
|
? 'Connect your model on the AI page first, then I can help. The cards on the Planner page work without one.'
|
|
66
67
|
: this.mode === 'host'
|
|
67
68
|
? 'The assistant is not available right now. The cards on the Planner page work without it.'
|
|
68
|
-
:
|
|
69
|
+
: this.mode === 'manual'
|
|
70
|
+
? 'Inference is off. The cards on the Planner page work without it.'
|
|
71
|
+
: 'Download a model first, then I can help. The cards on the Planner page work without one.',
|
|
69
72
|
onReply: (text) => options.onReply?.(text),
|
|
70
73
|
});
|
|
71
74
|
}
|
|
@@ -74,14 +77,18 @@ export class AssistantSession {
|
|
|
74
77
|
* download; the chat is set with `useRemote`.
|
|
75
78
|
*/
|
|
76
79
|
setMode(mode) {
|
|
80
|
+
if (mode !== this.mode)
|
|
81
|
+
this.unload();
|
|
77
82
|
this.mode = mode;
|
|
78
83
|
if (mode !== 'browser') {
|
|
79
|
-
this.unload();
|
|
80
84
|
this.status = 'idle';
|
|
81
85
|
}
|
|
82
86
|
else if (!(this.options.webgpu ?? isWebGPUAvailable)()) {
|
|
83
87
|
this.status = 'unsupported';
|
|
84
88
|
}
|
|
89
|
+
else {
|
|
90
|
+
this.status = 'idle';
|
|
91
|
+
}
|
|
85
92
|
}
|
|
86
93
|
/** The remote chat model, or null when none is connected (byo, before setup). */
|
|
87
94
|
useRemote(chat, label) {
|
|
@@ -112,11 +119,16 @@ export class AssistantSession {
|
|
|
112
119
|
this.error = '';
|
|
113
120
|
this.progress = { progress: 0, text: 'Starting' };
|
|
114
121
|
const abort = new AbortController();
|
|
122
|
+
const generation = ++this.loadGeneration;
|
|
115
123
|
this.abort = abort;
|
|
116
124
|
try {
|
|
117
125
|
const loaded = await loadModel(modelId, (report) => {
|
|
118
126
|
this.progress = report;
|
|
119
127
|
}, abort.signal, this.options.host ?? browserHost);
|
|
128
|
+
if (generation !== this.loadGeneration || this.mode !== 'browser') {
|
|
129
|
+
loaded.dispose();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
120
132
|
this.loaded = loaded;
|
|
121
133
|
// Consent is recorded only once the download completed: a cancelled or
|
|
122
134
|
// failed attempt must show the size and memory warning again.
|
|
@@ -133,6 +145,8 @@ export class AssistantSession {
|
|
|
133
145
|
this.status = 'ready';
|
|
134
146
|
}
|
|
135
147
|
catch (error) {
|
|
148
|
+
if (generation !== this.loadGeneration)
|
|
149
|
+
return;
|
|
136
150
|
if (abort.signal.aborted) {
|
|
137
151
|
this.status = 'idle';
|
|
138
152
|
}
|
|
@@ -142,7 +156,8 @@ export class AssistantSession {
|
|
|
142
156
|
}
|
|
143
157
|
}
|
|
144
158
|
finally {
|
|
145
|
-
this.
|
|
159
|
+
if (generation === this.loadGeneration)
|
|
160
|
+
this.abort = null;
|
|
146
161
|
}
|
|
147
162
|
}
|
|
148
163
|
/** Stop a download in progress. */
|
|
@@ -152,7 +167,10 @@ export class AssistantSession {
|
|
|
152
167
|
/** Free the model, for example to choose another. */
|
|
153
168
|
unload() {
|
|
154
169
|
// A load in progress is aborted too, which terminates its worker.
|
|
155
|
-
this.
|
|
170
|
+
this.loadGeneration += 1;
|
|
171
|
+
const abort = this.abort;
|
|
172
|
+
this.abort = null;
|
|
173
|
+
abort?.abort();
|
|
156
174
|
this.transport.abort();
|
|
157
175
|
this.loaded?.dispose();
|
|
158
176
|
this.loaded = null;
|