@happyvertical/smrt-planner 0.57.3 → 0.57.5
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/agents/assistant.md +8 -1
- package/agents/cookbook.md +8 -2
- package/app/404.html +21 -21
- package/app/_app/immutable/assets/2.CdEXvRg0.css +1 -0
- package/app/_app/immutable/assets/{feedback.DePeap37.css → feedback.qFktqYFY.css} +1 -1
- package/app/_app/immutable/chunks/{DveAWx7t.js → 5ukUzDcw.js} +1 -1
- package/app/_app/immutable/chunks/{DR_9YSDq.js → BDbFl7UA.js} +1 -1
- package/app/_app/immutable/chunks/{rkUL-DlL.js → BG9Gz_25.js} +25 -25
- package/app/_app/immutable/chunks/{BfPYbnRI.js → Bal1oPZu.js} +1 -1
- package/app/_app/immutable/chunks/BhU_yBI_.js +1 -0
- package/app/_app/immutable/chunks/{CZwkvsZI.js → BiEOJeYb.js} +1 -1
- package/app/_app/immutable/chunks/{DsY7g8iJ.js → Bsn3IIve.js} +3 -3
- package/app/_app/immutable/chunks/{PJY04JNF.js → BybfWt-B.js} +1 -1
- package/app/_app/immutable/chunks/{CF503c7E.js → C1VofLtR.js} +1 -1
- package/app/_app/immutable/chunks/{2l76O8yg.js → C3sRGrYK.js} +1 -1
- package/app/_app/immutable/chunks/{Bz0ybtg3.js → CTlMHIE6.js} +1 -1
- package/app/_app/immutable/chunks/C_3CJO_1.js +1 -0
- package/app/_app/immutable/chunks/Cga8zF3r.js +1 -0
- package/app/_app/immutable/chunks/Cr4byQts.js +24 -0
- package/app/_app/immutable/chunks/{U6_OBRq_.js → CtjBwCj8.js} +1 -1
- package/app/_app/immutable/chunks/CyUSxz1P.js +4 -0
- package/app/_app/immutable/chunks/{BAeyjCL_.js → DTWraE40.js} +1 -1
- package/app/_app/immutable/chunks/{Cfd9dmBM.js → DjJovMrk.js} +1 -1
- package/app/_app/immutable/chunks/{BJKoxDbG.js → DuZeZzOA.js} +1 -1
- package/app/_app/immutable/chunks/{C-DLpfU4.js → J9kOiFLO.js} +1 -1
- package/app/_app/immutable/chunks/NppCG--v.js +1 -0
- package/app/_app/immutable/chunks/{EZsakmZX.js → O8DAZ_le.js} +1 -1
- package/app/_app/immutable/chunks/{Dq8aYheE.js → YGONf0jr.js} +1 -1
- package/app/_app/immutable/chunks/d_dqmeIr.js +1 -0
- package/app/_app/immutable/chunks/{Bb0f-PWY.js → gCpxN2IC.js} +1 -1
- package/app/_app/immutable/chunks/nphy1MQF.js +1 -0
- package/app/_app/immutable/entry/{app.BOdcGXnx.js → app.B4gMiHwR.js} +2 -2
- package/app/_app/immutable/entry/start.BXkBl20Z.js +1 -0
- package/app/_app/immutable/nodes/0.2MYMg80l.js +9 -0
- package/app/_app/immutable/nodes/{1.CULLAAlp.js → 1.DKP901Gn.js} +1 -1
- package/app/_app/immutable/nodes/{10.D3aS_KZl.js → 10.DNN0cVai.js} +1 -1
- package/app/_app/immutable/nodes/{11.C92xaiTE.js → 11.DgbmegX3.js} +1 -1
- package/app/_app/immutable/nodes/{12.D1Lzt56L.js → 12.D5MtnJoE.js} +1 -1
- package/app/_app/immutable/nodes/{13.Bx4rov-F.js → 13._rY66Xa_.js} +1 -1
- package/app/_app/immutable/nodes/{14.CEBy0En2.js → 14.B6TD25VU.js} +1 -1
- package/app/_app/immutable/nodes/2.x9WyxQ1S.js +24 -0
- package/app/_app/immutable/nodes/{3.C8f09BsJ.js → 3.V5uGCpGb.js} +1 -1
- package/app/_app/immutable/nodes/{4.Z1MwZ_rU.js → 4.CCwzLrgu.js} +1 -1
- package/app/_app/immutable/nodes/{5.BnknP-NB.js → 5.CgHzwpns.js} +1 -1
- package/app/_app/immutable/nodes/{6.B0InO4bR.js → 6.CvQHLh_u.js} +1 -1
- package/app/_app/immutable/nodes/{7.CLnj1BGB.js → 7.7EIrly34.js} +1 -1
- package/app/_app/immutable/nodes/{8.BmZYIUmz.js → 8.DyyRBuTw.js} +1 -1
- package/app/_app/immutable/nodes/{9.BKWSHjz-.js → 9.DcURs0gN.js} +1 -1
- package/app/_app/version.json +1 -1
- package/app/advanced-styles/index.html +24 -24
- package/app/ai/index.html +28 -33
- package/app/blueprint/index.html +22 -22
- package/app/cookbook/index.html +22 -22
- package/app/index.html +38 -38
- package/app/m/ads/AdDeliveryTier/index.html +25 -25
- package/app/m/ads/AdEvent/index.html +25 -25
- package/app/m/ads/AdFormat/index.html +25 -25
- package/app/m/ads/AdGroup/index.html +25 -25
- package/app/m/ads/AdVariation/index.html +25 -25
- package/app/m/analytics/AnalyticsDataStream/index.html +25 -25
- package/app/m/analytics/AnalyticsEvent/index.html +25 -25
- package/app/m/analytics/AnalyticsProperty/index.html +25 -25
- package/app/m/analytics/AnalyticsReport/index.html +25 -25
- package/app/m/approvals/ApprovalEvent/index.html +25 -25
- package/app/m/approvals/ApprovalPolicy/index.html +25 -25
- package/app/m/approvals/ApprovalRequest/index.html +25 -25
- package/app/m/assets/Asset/attachments/index.html +26 -26
- package/app/m/assets/Asset/index.html +25 -25
- package/app/m/assets/AssetAssociation/index.html +25 -25
- package/app/m/assets/AssetMetafield/index.html +25 -25
- package/app/m/assets/AssetStatus/index.html +25 -25
- package/app/m/assets/AssetType/index.html +25 -25
- package/app/m/assets/Folder/index.html +25 -25
- package/app/m/chat/AgentSession/index.html +25 -25
- package/app/m/chat/ChatMessage/index.html +25 -25
- package/app/m/chat/ChatParticipant/index.html +25 -25
- package/app/m/chat/ChatReaction/index.html +25 -25
- package/app/m/chat/ChatRoom/index.html +25 -25
- package/app/m/chat/ChatThread/index.html +25 -25
- package/app/m/chat/VoiceGatewayTurn/index.html +25 -25
- package/app/m/chat/VoiceSession/index.html +25 -25
- package/app/m/commerce/Agreement/index.html +25 -25
- package/app/m/commerce/Cart/index.html +25 -25
- package/app/m/commerce/Contract/index.html +25 -25
- package/app/m/commerce/ContractLineItem/index.html +26 -26
- package/app/m/commerce/Customer/index.html +25 -25
- package/app/m/commerce/DocumentTax/index.html +25 -25
- package/app/m/commerce/Estimate/index.html +25 -25
- package/app/m/commerce/Fulfillment/index.html +25 -25
- package/app/m/commerce/FulfillmentLineItem/index.html +25 -25
- package/app/m/commerce/HistoricalCustomerFunds/index.html +89 -0
- package/app/m/commerce/HistoricalCustomerFundsAllocation/index.html +89 -0
- package/app/m/commerce/HistoricalSalesLine/index.html +89 -0
- package/app/m/commerce/Invoice/index.html +25 -25
- package/app/m/commerce/InvoiceLineItem/index.html +25 -25
- package/app/m/commerce/Lease/index.html +25 -25
- package/app/m/commerce/LicenseSale/index.html +25 -25
- package/app/m/commerce/Order/index.html +25 -25
- package/app/m/commerce/Payment/index.html +25 -25
- package/app/m/commerce/PaymentAllocation/index.html +25 -25
- package/app/m/commerce/PaymentInstrument/index.html +25 -25
- package/app/m/commerce/PaymentIntent/index.html +25 -25
- package/app/m/commerce/Payout/index.html +25 -25
- package/app/m/commerce/ProductionOrder/index.html +25 -25
- package/app/m/commerce/PurchaseContract/index.html +25 -25
- package/app/m/commerce/PurchaseOrder/index.html +25 -25
- package/app/m/commerce/SalesContract/index.html +25 -25
- package/app/m/commerce/SupplierQuote/index.html +25 -25
- package/app/m/commerce/TaxCode/index.html +25 -25
- package/app/m/commerce/TaxComponent/index.html +25 -25
- package/app/m/commerce/TaxSettings/index.html +25 -25
- package/app/m/commerce/TaxSummaryReport/index.html +25 -25
- package/app/m/commerce/Vendor/index.html +25 -25
- package/app/m/commerce/WholesaleOrder/index.html +25 -25
- package/app/m/content/Content/index.html +25 -25
- package/app/m/content/ContentContribution/index.html +25 -25
- package/app/m/content/ContentContributionAttachment/index.html +25 -25
- package/app/m/content/ContentContributionRevision/index.html +25 -25
- package/app/m/content/ContentContributionType/index.html +25 -25
- package/app/m/content/ContentContributor/index.html +25 -25
- package/app/m/content/ContentCorrection/index.html +25 -25
- package/app/m/content/ContentFeedSource/index.html +25 -25
- package/app/m/content/ContentGovernanceAssignment/index.html +25 -25
- package/app/m/content/ContentGovernancePolicy/index.html +25 -25
- package/app/m/content/ContentGovernanceProfile/index.html +25 -25
- package/app/m/content/ContentReference/index.html +25 -25
- package/app/m/content/ContentReview/index.html +25 -25
- package/app/m/content/ContentVersion/index.html +25 -25
- package/app/m/events/Event/index.html +25 -25
- package/app/m/events/EventParticipant/index.html +25 -25
- package/app/m/events/EventSeries/index.html +26 -26
- package/app/m/events/EventType/index.html +25 -25
- package/app/m/expenses/Expense/index.html +25 -25
- package/app/m/facts/Fact/index.html +25 -25
- package/app/m/facts/FactContent/index.html +25 -25
- package/app/m/facts/FactEvidence/index.html +25 -25
- package/app/m/facts/FactSource/index.html +25 -25
- package/app/m/facts/FactSubject/index.html +25 -25
- package/app/m/facts/FactTag/index.html +25 -25
- package/app/m/fields/FieldPolicy/index.html +25 -25
- package/app/m/fields/FieldPolicySuggestion/index.html +25 -25
- package/app/m/fields/FieldUsageCounter/index.html +25 -25
- package/app/m/images/Image/index.html +25 -25
- package/app/m/inventory/InventoryLocation/index.html +25 -25
- package/app/m/inventory/StockLevel/index.html +25 -25
- package/app/m/inventory/StockMovement/index.html +25 -25
- package/app/m/ledgers/Account/index.html +25 -25
- package/app/m/ledgers/Journal/index.html +25 -25
- package/app/m/ledgers/JournalEntry/index.html +25 -25
- package/app/m/ledgers/Ledger/index.html +25 -25
- package/app/m/manufacturing/Assembly/index.html +25 -25
- package/app/m/manufacturing/BillOfMaterials/index.html +25 -25
- package/app/m/manufacturing/BomLine/index.html +25 -25
- package/app/m/manufacturing/Operation/index.html +25 -25
- package/app/m/manufacturing/ProductionRun/index.html +25 -25
- package/app/m/manufacturing/ProductionRunCompletion/index.html +25 -25
- package/app/m/manufacturing/RoutingStep/index.html +25 -25
- package/app/m/marketing/Campaign/index.html +25 -25
- package/app/m/marketing/CampaignChannel/index.html +25 -25
- package/app/m/marketing/CampaignMetricSnapshot/index.html +25 -25
- package/app/m/messages/Account/index.html +25 -25
- package/app/m/messages/Attachment/index.html +25 -25
- package/app/m/messages/Blacklist/index.html +25 -25
- package/app/m/messages/Email/failed-sends/index.html +26 -26
- package/app/m/messages/Email/index.html +25 -25
- package/app/m/messages/Email/mailbox/index.html +26 -26
- package/app/m/messages/EmailAccount/index.html +25 -25
- package/app/m/messages/EmailAttachment/index.html +25 -25
- package/app/m/messages/EmailFolder/index.html +25 -25
- package/app/m/messages/Message/index.html +25 -25
- package/app/m/messages/MessagingEndpoint/index.html +25 -25
- package/app/m/messages/PersonaMessageRoute/index.html +25 -25
- package/app/m/messages/SlackAccount/index.html +25 -25
- package/app/m/messages/SlackMessage/index.html +25 -25
- package/app/m/messages/TelegramAccount/index.html +25 -25
- package/app/m/messages/Tweet/index.html +25 -25
- package/app/m/messages/TwitterAccount/index.html +25 -25
- package/app/m/messages/Whitelist/index.html +25 -25
- package/app/m/messages/ZulipAccount/index.html +25 -25
- package/app/m/places/Place/index.html +25 -25
- package/app/m/places/PlaceType/index.html +25 -25
- package/app/m/products/Category/index.html +25 -25
- package/app/m/products/Material/index.html +25 -25
- package/app/m/products/Product/index.html +25 -25
- package/app/m/products/Product/ingredients/index.html +26 -26
- package/app/m/products/ProductVariant/index.html +25 -25
- package/app/m/products/Sku/index.html +25 -25
- package/app/m/profiles/ApiKey/index.html +25 -25
- package/app/m/profiles/Bot/index.html +25 -25
- package/app/m/profiles/MagicLinkToken/index.html +25 -25
- package/app/m/profiles/NostrIdentity/index.html +25 -25
- package/app/m/profiles/OidcIdentity/index.html +25 -25
- package/app/m/profiles/Organization/index.html +25 -25
- package/app/m/profiles/Person/index.html +25 -25
- package/app/m/profiles/Profile/index.html +25 -25
- package/app/m/profiles/ProfileMetadata/index.html +25 -25
- package/app/m/profiles/ProfileMetafield/index.html +25 -25
- package/app/m/profiles/ProfileRelationship/index.html +25 -25
- package/app/m/profiles/ProfileRelationshipTerm/index.html +25 -25
- package/app/m/profiles/ProfileRelationshipType/index.html +25 -25
- package/app/m/profiles/ProfileType/index.html +25 -25
- package/app/m/projects/Comment/index.html +25 -25
- package/app/m/projects/Issue/index.html +25 -25
- package/app/m/projects/Label/index.html +25 -25
- package/app/m/projects/Project/index.html +25 -25
- package/app/m/projects/ProjectIntegration/index.html +25 -25
- package/app/m/projects/PullRequest/index.html +25 -25
- package/app/m/projects/Repository/index.html +25 -25
- package/app/m/properties/Property/index.html +25 -25
- package/app/m/properties/Zone/index.html +25 -25
- package/app/m/reports/RuntimeReport/index.html +25 -25
- package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +26 -26
- package/app/m/reports/SmrtReportLock/index.html +26 -26
- package/app/m/reports/SmrtReportRefreshTask/index.html +26 -26
- package/app/m/reports/SmrtReportRun/index.html +26 -26
- package/app/m/reports/SmrtReportSchedule/index.html +26 -26
- package/app/m/reports/SmrtReportWatermark/index.html +26 -26
- package/app/m/sales/Agreement/index.html +25 -25
- package/app/m/sales/AttributionException/index.html +25 -25
- package/app/m/sales/AttributionPolicy/index.html +25 -25
- package/app/m/sales/Commission/index.html +25 -25
- package/app/m/sales/CommissionAdjustment/index.html +25 -25
- package/app/m/sales/CommissionPayout/index.html +25 -25
- package/app/m/sales/CommissionPlan/index.html +25 -25
- package/app/m/sales/Earner/index.html +25 -25
- package/app/m/sales/EarnerSourceAttribution/index.html +25 -25
- package/app/m/sales/EarningEvent/index.html +25 -25
- package/app/m/sales/ExecutedAgreement/index.html +25 -25
- package/app/m/sales/Lead/index.html +25 -25
- package/app/m/sales/Opportunity/index.html +25 -25
- package/app/m/sales/OpportunityConversion/index.html +25 -25
- package/app/m/sales/PipelineDefinition/index.html +25 -25
- package/app/m/sales/PipelineStage/index.html +25 -25
- package/app/m/sales/Referral/index.html +25 -25
- package/app/m/sales/ReferralAgreement/index.html +25 -25
- package/app/m/sales/ReferralLink/index.html +25 -25
- package/app/m/sales/ReferralProgram/index.html +25 -25
- package/app/m/sales/ReferralTermSnapshot/index.html +25 -25
- package/app/m/sales/ReferralTouch/index.html +25 -25
- package/app/m/sales/Referrer/index.html +25 -25
- package/app/m/sales/SalesActivity/index.html +25 -25
- package/app/m/sales/SalesRepresentative/index.html +25 -25
- package/app/m/sites/Site/index.html +25 -25
- package/app/m/sites/SiteAgentBinding/index.html +25 -25
- package/app/m/social/OAuthState/index.html +25 -25
- package/app/m/social/SocialAccount/index.html +25 -25
- package/app/m/social/SocialPost/index.html +25 -25
- package/app/m/social/SocialPostAnalyticsSnapshot/index.html +25 -25
- package/app/m/subscriptions/BillingAdjustment/index.html +25 -25
- package/app/m/subscriptions/ClientCharge/index.html +25 -25
- package/app/m/subscriptions/CreditGrant/index.html +25 -25
- package/app/m/subscriptions/PricingRule/index.html +25 -25
- package/app/m/subscriptions/RetailCharge/index.html +25 -25
- package/app/m/subscriptions/SpendingPolicy/index.html +25 -25
- package/app/m/subscriptions/SubscriptionPlan/index.html +25 -25
- package/app/m/subscriptions/TenantSubscription/index.html +25 -25
- package/app/m/subscriptions/TenantUsageMetric/index.html +25 -25
- package/app/m/support/ServiceTimeEntry/index.html +25 -25
- package/app/m/support/SupportAiRun/index.html +25 -25
- package/app/m/support/SupportAvailability/index.html +25 -25
- package/app/m/support/SupportCase/index.html +25 -25
- package/app/m/support/SupportCaseEvent/index.html +25 -25
- package/app/m/support/SupportChannelBinding/index.html +25 -25
- package/app/m/support/SupportCharge/index.html +25 -25
- package/app/m/support/SupportCompensation/index.html +25 -25
- package/app/m/support/SupportCompensationPlan/index.html +25 -25
- package/app/m/support/SupportEscalation/index.html +25 -25
- package/app/m/support/SupportInteraction/index.html +25 -25
- package/app/m/support/SupportPlan/index.html +25 -25
- package/app/m/support/SupportPolicy/index.html +25 -25
- package/app/m/support/SupportQualification/index.html +25 -25
- package/app/m/support/SupportServiceTarget/index.html +25 -25
- package/app/m/support/SupportSpecialist/index.html +25 -25
- package/app/m/support/SupportWorkLink/index.html +25 -25
- package/app/m/tags/Tag/index.html +25 -25
- package/app/m/tags/TagAlias/index.html +25 -25
- package/app/m/timesheets/AttendanceBreak/index.html +25 -25
- package/app/m/timesheets/AttendancePunch/index.html +25 -25
- package/app/m/timesheets/AttendanceSegment/index.html +25 -25
- package/app/m/timesheets/ServiceChargeSnapshot/index.html +25 -25
- package/app/m/timesheets/ServiceCompensationSnapshot/index.html +25 -25
- package/app/m/timesheets/ServiceTimeEntry/index.html +25 -25
- package/app/m/users/Group/index.html +25 -25
- package/app/m/users/GroupMember/index.html +25 -25
- package/app/m/users/GroupRole/index.html +25 -25
- package/app/m/users/Membership/index.html +25 -25
- package/app/m/users/MembershipOverride/index.html +25 -25
- package/app/m/users/Permission/index.html +25 -25
- package/app/m/users/Role/index.html +25 -25
- package/app/m/users/RolePermission/index.html +25 -25
- package/app/m/users/Session/index.html +25 -25
- package/app/m/users/Tenant/index.html +25 -25
- package/app/m/users/TenantIntegration/index.html +25 -25
- package/app/m/users/TenantPermissionOverride/index.html +25 -25
- package/app/m/users/User/index.html +25 -25
- package/app/m/video/Character/index.html +25 -25
- package/app/m/video/CharacterAsset/index.html +25 -25
- package/app/m/video/CompositeJob/index.html +25 -25
- package/app/m/video/Performer/index.html +25 -25
- package/app/m/video/PerformerAsset/index.html +25 -25
- package/app/m/video/Scene/index.html +25 -25
- package/app/m/video/SceneAsset/index.html +25 -25
- package/app/m/video/VideoComposition/index.html +25 -25
- package/app/m/video/VideoCompositionAsset/index.html +25 -25
- package/app/m/video/VideoSequence/index.html +25 -25
- package/app/m/video/VideoSequenceAsset/index.html +25 -25
- package/app/m/video/VideoShot/index.html +25 -25
- package/app/m/video/VideoShotAsset/index.html +25 -25
- package/app/m/video/VideoShotCharacter/index.html +25 -25
- package/app/m/video/VideoWorkflow/index.html +25 -25
- package/app/m/voice/VoiceOutput/index.html +25 -25
- package/app/m/voice/VoiceProfile/index.html +25 -25
- package/app/m/voice/VoiceSample/index.html +25 -25
- package/app/mcp.html +2 -2
- package/app/packages/ads/index.html +24 -24
- package/app/packages/analytics/index.html +24 -24
- package/app/packages/approvals/index.html +24 -24
- package/app/packages/assets/index.html +24 -24
- package/app/packages/chat/index.html +24 -24
- package/app/packages/comments/index.html +24 -24
- package/app/packages/commerce/index.html +25 -25
- package/app/packages/content/index.html +24 -24
- package/app/packages/events/index.html +24 -24
- package/app/packages/expenses/index.html +25 -25
- package/app/packages/facts/index.html +24 -24
- package/app/packages/fields/index.html +24 -24
- package/app/packages/human-resources/index.html +24 -24
- package/app/packages/images/index.html +24 -24
- package/app/packages/index.html +24 -24
- package/app/packages/ingestion/index.html +24 -24
- package/app/packages/inventory/index.html +24 -24
- package/app/packages/ledgers/index.html +24 -24
- package/app/packages/manufacturing/index.html +24 -24
- package/app/packages/marketing/index.html +24 -24
- package/app/packages/messages/index.html +24 -24
- package/app/packages/places/index.html +24 -24
- package/app/packages/preferences/index.html +24 -24
- package/app/packages/products/index.html +24 -24
- package/app/packages/profiles/index.html +24 -24
- package/app/packages/projects/index.html +24 -24
- package/app/packages/properties/index.html +24 -24
- package/app/packages/reports/index.html +24 -24
- package/app/packages/sales/index.html +24 -24
- package/app/packages/sites/index.html +24 -24
- package/app/packages/social/index.html +24 -24
- package/app/packages/subscriptions/index.html +24 -24
- package/app/packages/support/index.html +24 -24
- package/app/packages/tags/index.html +24 -24
- package/app/packages/timesheets/index.html +24 -24
- package/app/packages/users/index.html +24 -24
- package/app/packages/video/index.html +24 -24
- package/app/packages/voice/index.html +24 -24
- package/app/packages/webhooks/index.html +24 -24
- package/app/recipes/account-access/help/index.html +24 -24
- package/app/recipes/account-access/index.html +26 -26
- package/app/recipes/activity/help/index.html +24 -24
- package/app/recipes/activity/index.html +26 -26
- package/app/recipes/agreements/help/index.html +26 -26
- package/app/recipes/agreements/index.html +27 -27
- package/app/recipes/analytics.reports/help/index.html +24 -24
- package/app/recipes/analytics.reports/index.html +26 -26
- package/app/recipes/assets/help/index.html +24 -24
- package/app/recipes/assets/index.html +27 -27
- package/app/recipes/billing/help/index.html +26 -26
- package/app/recipes/billing/index.html +26 -26
- package/app/recipes/chat.assistant/help/index.html +24 -24
- package/app/recipes/chat.assistant/index.html +26 -26
- package/app/recipes/comments/help/index.html +24 -24
- package/app/recipes/comments/index.html +26 -26
- package/app/recipes/commerce.customers/help/index.html +24 -24
- package/app/recipes/commerce.customers/index.html +26 -26
- package/app/recipes/commerce.estimates/help/index.html +26 -26
- package/app/recipes/commerce.estimates/index.html +26 -26
- package/app/recipes/commerce.purchases/help/index.html +26 -26
- package/app/recipes/commerce.purchases/index.html +26 -26
- package/app/recipes/commerce.sales/help/index.html +26 -26
- package/app/recipes/commerce.sales/index.html +26 -26
- package/app/recipes/commerce.vendors/help/index.html +24 -24
- package/app/recipes/commerce.vendors/index.html +26 -26
- package/app/recipes/commerce.wholesale/help/index.html +26 -26
- package/app/recipes/commerce.wholesale/index.html +26 -26
- package/app/recipes/events.calendar/help/index.html +24 -24
- package/app/recipes/events.calendar/index.html +26 -26
- package/app/recipes/expenses.tracking/help/index.html +26 -26
- package/app/recipes/expenses.tracking/index.html +26 -26
- package/app/recipes/fields.form-customization/help/index.html +24 -24
- package/app/recipes/fields.form-customization/index.html +26 -26
- package/app/recipes/ingestion/help/index.html +24 -24
- package/app/recipes/ingestion/index.html +26 -26
- package/app/recipes/integrations/help/index.html +24 -24
- package/app/recipes/integrations/index.html +26 -26
- package/app/recipes/inventory.stock/help/index.html +24 -24
- package/app/recipes/inventory.stock/index.html +26 -26
- package/app/recipes/ledgers.bookkeeping/help/index.html +24 -24
- package/app/recipes/ledgers.bookkeeping/index.html +26 -26
- package/app/recipes/messages/help/index.html +24 -24
- package/app/recipes/messages/index.html +26 -26
- package/app/recipes/products/help/index.html +24 -24
- package/app/recipes/products/index.html +26 -26
- package/app/recipes/projects.tracker/help/index.html +24 -24
- package/app/recipes/projects.tracker/index.html +27 -27
- package/app/recipes/reports.materialized/help/index.html +26 -26
- package/app/recipes/reports.materialized/index.html +29 -29
- package/app/recipes/reports.runtime/help/index.html +24 -24
- package/app/recipes/reports.runtime/index.html +27 -27
- package/app/recipes/sales.pipeline/help/index.html +24 -24
- package/app/recipes/sales.pipeline/index.html +26 -26
- package/app/recipes/tags.taxonomy/help/index.html +24 -24
- package/app/recipes/tags.taxonomy/index.html +26 -26
- package/app/recipes/team-collaboration/help/index.html +24 -24
- package/app/recipes/team-collaboration/index.html +26 -26
- package/app/recipes/timesheets.time-entries/help/index.html +24 -24
- package/app/recipes/timesheets.time-entries/index.html +26 -26
- package/app/s/custom-accounts/index.html +22 -22
- package/app/s/custom-appointments/index.html +22 -22
- package/app/s/custom-billing/index.html +22 -22
- package/app/s/custom-buying/index.html +22 -22
- package/app/s/custom-checkout/index.html +22 -22
- package/app/s/custom-classes/index.html +22 -22
- package/app/s/custom-clients/index.html +22 -22
- package/app/s/custom-events/index.html +22 -22
- package/app/s/custom-fleet/index.html +22 -22
- package/app/s/custom-giving/index.html +22 -22
- package/app/s/custom-jobs/index.html +22 -22
- package/app/s/custom-kitchen/index.html +22 -22
- package/app/s/custom-material/index.html +22 -22
- package/app/s/custom-meetings/index.html +22 -22
- package/app/s/custom-members/index.html +22 -22
- package/app/s/custom-paint/index.html +82 -0
- package/app/s/custom-parts/index.html +22 -22
- package/app/s/custom-rentals/index.html +22 -22
- package/app/s/custom-roastery/index.html +22 -22
- package/app/s/custom-schedule/index.html +22 -22
- package/app/s/custom-shelf/index.html +22 -22
- package/app/s/custom-shop/index.html +22 -22
- package/app/s/custom-wholesale/index.html +22 -22
- package/app/s/custom-work/index.html +22 -22
- package/app/s/custom-yard/index.html +22 -22
- package/app/s/section-access-control/index.html +22 -22
- package/app/s/section-account-security/index.html +22 -22
- package/app/s/section-accounting/index.html +22 -22
- package/app/s/section-activity/index.html +22 -22
- package/app/s/section-agreements/index.html +22 -22
- package/app/s/section-analytics/index.html +22 -22
- package/app/s/section-assets/index.html +22 -22
- package/app/s/section-billing/index.html +22 -22
- package/app/s/section-calendar/index.html +22 -22
- package/app/s/section-catalog/index.html +22 -22
- package/app/s/section-chat.assistant/index.html +22 -22
- package/app/s/section-comments/index.html +22 -22
- package/app/s/section-fields.form-customization/index.html +22 -22
- package/app/s/section-ingestion/index.html +22 -22
- package/app/s/section-integrations/index.html +22 -22
- package/app/s/section-messages/index.html +22 -22
- package/app/s/section-more/index.html +22 -22
- package/app/s/section-operations/index.html +22 -22
- package/app/s/section-projects/index.html +22 -22
- package/app/s/section-purchasing/index.html +22 -22
- package/app/s/section-reports.materialized/index.html +22 -22
- package/app/s/section-reports.runtime/index.html +22 -22
- package/app/s/section-sales/index.html +22 -22
- package/app/s/section-taxonomy/index.html +22 -22
- package/app/s/section-team/index.html +22 -22
- package/app/s/section-work/index.html +22 -22
- package/dist/ai/instance.d.ts.map +1 -1
- package/dist/ai/instance.js +9 -1
- package/dist/assistant/change.d.ts +13 -3
- package/dist/assistant/change.d.ts.map +1 -1
- package/dist/assistant/change.js +18 -3
- package/dist/assistant/prompt.d.ts +6 -1
- package/dist/assistant/prompt.d.ts.map +1 -1
- package/dist/assistant/prompt.js +13 -1
- package/dist/assistant/session.svelte.d.ts +5 -0
- package/dist/assistant/session.svelte.d.ts.map +1 -1
- package/dist/assistant/session.svelte.js +1 -0
- package/dist/assistant/transport.d.ts +24 -1
- package/dist/assistant/transport.d.ts.map +1 -1
- package/dist/assistant/transport.js +57 -8
- package/dist/catalog/catalog.json +1366 -51
- package/dist/components/BrowserAssistant.svelte +0 -2
- package/dist/components/BrowserAssistant.svelte.d.ts.map +1 -1
- package/dist/components/CookbooksPanel.svelte +101 -21
- package/dist/components/CookbooksPanel.svelte.d.ts.map +1 -1
- package/dist/data/format.d.ts.map +1 -1
- package/dist/data/format.js +3 -0
- package/dist/data/money.d.ts +1 -1
- package/dist/data/money.js +2 -2
- package/dist/data/packs.d.ts +0 -1
- package/dist/data/packs.d.ts.map +1 -1
- package/dist/data/packs.js +835 -1
- package/dist/library/apply.d.ts +7 -3
- package/dist/library/apply.d.ts.map +1 -1
- package/dist/library/apply.js +19 -6
- package/dist/library/document.d.ts +9 -0
- package/dist/library/document.d.ts.map +1 -1
- package/dist/library/document.js +29 -0
- package/dist/library/icons.d.ts.map +1 -1
- package/dist/library/icons.js +15 -0
- package/dist/library/index.d.ts +4 -1
- package/dist/library/index.d.ts.map +1 -1
- package/dist/library/index.js +9 -2
- package/dist/library/library.json +919 -14
- package/dist/library/state.svelte.d.ts +5 -1
- package/dist/library/state.svelte.d.ts.map +1 -1
- package/dist/library/state.svelte.js +12 -1
- package/dist/library/view.svelte.d.ts +41 -0
- package/dist/library/view.svelte.d.ts.map +1 -0
- package/dist/library/view.svelte.js +67 -0
- package/dist/planner/Planner.svelte +79 -2
- package/dist/planner/Planner.svelte.d.ts.map +1 -1
- package/dist/planner/PlannerControls.svelte +21 -2
- package/dist/planner/PlannerControls.svelte.d.ts.map +1 -1
- package/dist/planner/assistant.d.ts.map +1 -1
- package/dist/planner/assistant.js +9 -0
- package/dist/planner/commands/adapter.d.ts.map +1 -1
- package/dist/planner/commands/adapter.js +10 -3
- package/dist/planner/commands/controller.svelte.d.ts.map +1 -1
- package/dist/planner/commands/controller.svelte.js +2 -1
- package/dist/recipes/scope.d.ts +23 -0
- package/dist/recipes/scope.d.ts.map +1 -1
- package/dist/recipes/scope.js +20 -0
- package/dist/smrt-version.d.ts +1 -1
- package/dist/smrt-version.js +1 -1
- package/package.json +56 -56
- package/app/_app/immutable/assets/2.Djk1H2wk.css +0 -1
- package/app/_app/immutable/chunks/BV_A2GBw.js +0 -24
- package/app/_app/immutable/chunks/CbCYY1ps.js +0 -1
- package/app/_app/immutable/chunks/DD4mX3od.js +0 -1
- package/app/_app/immutable/chunks/DgkBKeKW.js +0 -4
- package/app/_app/immutable/chunks/DvUWb_GS.js +0 -1
- package/app/_app/immutable/chunks/M81UeXT1.js +0 -1
- package/app/_app/immutable/chunks/g7M7feZg.js +0 -1
- package/app/_app/immutable/chunks/r7IFcw-O.js +0 -1
- package/app/_app/immutable/entry/start.BixveMT0.js +0 -1
- package/app/_app/immutable/nodes/0._WFh95JB.js +0 -9
- package/app/_app/immutable/nodes/2.D3Lg90Nn.js +0 -24
- /package/app/_app/immutable/chunks/{DVQPWAnI.js → Bv5jGtB8.js} +0 -0
|
@@ -3,43 +3,43 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
-
<link href="../../_app/immutable/entry/start.
|
|
7
|
-
<link href="../../_app/immutable/chunks/
|
|
6
|
+
<link href="../../_app/immutable/entry/start.BXkBl20Z.js" rel="modulepreload">
|
|
7
|
+
<link href="../../_app/immutable/chunks/C_3CJO_1.js" rel="modulepreload">
|
|
8
8
|
<link href="../../_app/immutable/chunks/DG3qFFTE.js" rel="modulepreload">
|
|
9
9
|
<link href="../../_app/immutable/chunks/COiEfhsA.js" rel="modulepreload">
|
|
10
10
|
<link href="../../_app/immutable/chunks/Dt-HX3Vu.js" rel="modulepreload">
|
|
11
|
-
<link href="../../_app/immutable/entry/app.
|
|
11
|
+
<link href="../../_app/immutable/entry/app.B4gMiHwR.js" rel="modulepreload">
|
|
12
12
|
<link href="../../_app/immutable/chunks/uBIymjUX.js" rel="modulepreload">
|
|
13
13
|
<link href="../../_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
|
|
14
|
-
<link href="../../_app/immutable/nodes/0.
|
|
15
|
-
<link href="../../_app/immutable/chunks/
|
|
14
|
+
<link href="../../_app/immutable/nodes/0.2MYMg80l.js" rel="modulepreload">
|
|
15
|
+
<link href="../../_app/immutable/chunks/Bv5jGtB8.js" rel="modulepreload">
|
|
16
16
|
<link href="../../_app/immutable/chunks/YUSKx8_q.js" rel="modulepreload">
|
|
17
|
-
<link href="../../_app/immutable/chunks/
|
|
17
|
+
<link href="../../_app/immutable/chunks/BG9Gz_25.js" rel="modulepreload">
|
|
18
18
|
<link href="../../_app/immutable/chunks/DK8Blf1Y.js" rel="modulepreload">
|
|
19
|
-
<link href="../../_app/immutable/chunks/
|
|
19
|
+
<link href="../../_app/immutable/chunks/Bsn3IIve.js" rel="modulepreload">
|
|
20
20
|
<link href="../../_app/immutable/chunks/M-CuJzQN.js" rel="modulepreload">
|
|
21
21
|
<link href="../../_app/immutable/chunks/9pRTae44.js" rel="modulepreload">
|
|
22
|
-
<link href="../../_app/immutable/chunks/
|
|
22
|
+
<link href="../../_app/immutable/chunks/Cga8zF3r.js" rel="modulepreload">
|
|
23
23
|
<link href="../../_app/immutable/chunks/CUyVrfsu.js" rel="modulepreload">
|
|
24
24
|
<link href="../../_app/immutable/chunks/gMSmS-_y.js" rel="modulepreload">
|
|
25
25
|
<link href="../../_app/immutable/chunks/BYcBM-fh.js" rel="modulepreload">
|
|
26
|
-
<link href="../../_app/immutable/chunks/
|
|
27
|
-
<link href="../../_app/immutable/chunks/
|
|
28
|
-
<link href="../../_app/immutable/chunks/
|
|
29
|
-
<link href="../../_app/immutable/chunks/
|
|
26
|
+
<link href="../../_app/immutable/chunks/DuZeZzOA.js" rel="modulepreload">
|
|
27
|
+
<link href="../../_app/immutable/chunks/BhU_yBI_.js" rel="modulepreload">
|
|
28
|
+
<link href="../../_app/immutable/chunks/d_dqmeIr.js" rel="modulepreload">
|
|
29
|
+
<link href="../../_app/immutable/chunks/BiEOJeYb.js" rel="modulepreload">
|
|
30
30
|
<link href="../../_app/immutable/chunks/d934w91N.js" rel="modulepreload">
|
|
31
31
|
<link href="../../_app/immutable/chunks/D_U_DYjx.js" rel="modulepreload">
|
|
32
|
-
<link href="../../_app/immutable/chunks/
|
|
33
|
-
<link href="../../_app/immutable/chunks/
|
|
34
|
-
<link href="../../_app/immutable/chunks/
|
|
35
|
-
<link href="../../_app/immutable/chunks/
|
|
36
|
-
<link href="../../_app/immutable/chunks/
|
|
32
|
+
<link href="../../_app/immutable/chunks/NppCG--v.js" rel="modulepreload">
|
|
33
|
+
<link href="../../_app/immutable/chunks/C3sRGrYK.js" rel="modulepreload">
|
|
34
|
+
<link href="../../_app/immutable/chunks/CTlMHIE6.js" rel="modulepreload">
|
|
35
|
+
<link href="../../_app/immutable/chunks/Bal1oPZu.js" rel="modulepreload">
|
|
36
|
+
<link href="../../_app/immutable/chunks/C1VofLtR.js" rel="modulepreload">
|
|
37
37
|
<link href="../../_app/immutable/chunks/BMgzWMdF.js" rel="modulepreload">
|
|
38
38
|
<link href="../../_app/immutable/chunks/CgAkqYsL.js" rel="modulepreload">
|
|
39
|
-
<link href="../../_app/immutable/nodes/14.
|
|
39
|
+
<link href="../../_app/immutable/nodes/14.B6TD25VU.js" rel="modulepreload">
|
|
40
40
|
<link href="../../_app/immutable/chunks/D71UrO5c.js" rel="modulepreload">
|
|
41
41
|
<!--1vy8ks8--><!----><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.
|
|
42
|
+
<link href="../../_app/immutable/assets/feedback.qFktqYFY.css" rel="stylesheet">
|
|
43
43
|
<link href="../../_app/immutable/assets/currency-metadata.ksbBA8-C.css" rel="stylesheet">
|
|
44
44
|
<link href="../../_app/immutable/assets/app.4ScdTV_S.css" rel="stylesheet">
|
|
45
45
|
<link href="../../_app/immutable/assets/SegmentedControl.DMqHG5fn.css" rel="stylesheet">
|
|
@@ -58,15 +58,15 @@
|
|
|
58
58
|
|
|
59
59
|
<script>
|
|
60
60
|
{
|
|
61
|
-
|
|
61
|
+
__sveltekit_qeoaal = {
|
|
62
62
|
base: new URL("../..", location).pathname.slice(0, -1)
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
const element = document.currentScript.parentElement;
|
|
66
66
|
|
|
67
67
|
Promise.all([
|
|
68
|
-
import("../../_app/immutable/entry/start.
|
|
69
|
-
import("../../_app/immutable/entry/app.
|
|
68
|
+
import("../../_app/immutable/entry/start.BXkBl20Z.js"),
|
|
69
|
+
import("../../_app/immutable/entry/app.B4gMiHwR.js")
|
|
70
70
|
]).then(([kit, app]) => {
|
|
71
71
|
kit.start(app, element, {
|
|
72
72
|
node_ids: [0, 14],
|
|
@@ -3,43 +3,43 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
-
<link href="../../_app/immutable/entry/start.
|
|
7
|
-
<link href="../../_app/immutable/chunks/
|
|
6
|
+
<link href="../../_app/immutable/entry/start.BXkBl20Z.js" rel="modulepreload">
|
|
7
|
+
<link href="../../_app/immutable/chunks/C_3CJO_1.js" rel="modulepreload">
|
|
8
8
|
<link href="../../_app/immutable/chunks/DG3qFFTE.js" rel="modulepreload">
|
|
9
9
|
<link href="../../_app/immutable/chunks/COiEfhsA.js" rel="modulepreload">
|
|
10
10
|
<link href="../../_app/immutable/chunks/Dt-HX3Vu.js" rel="modulepreload">
|
|
11
|
-
<link href="../../_app/immutable/entry/app.
|
|
11
|
+
<link href="../../_app/immutable/entry/app.B4gMiHwR.js" rel="modulepreload">
|
|
12
12
|
<link href="../../_app/immutable/chunks/uBIymjUX.js" rel="modulepreload">
|
|
13
13
|
<link href="../../_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
|
|
14
|
-
<link href="../../_app/immutable/nodes/0.
|
|
15
|
-
<link href="../../_app/immutable/chunks/
|
|
14
|
+
<link href="../../_app/immutable/nodes/0.2MYMg80l.js" rel="modulepreload">
|
|
15
|
+
<link href="../../_app/immutable/chunks/Bv5jGtB8.js" rel="modulepreload">
|
|
16
16
|
<link href="../../_app/immutable/chunks/YUSKx8_q.js" rel="modulepreload">
|
|
17
|
-
<link href="../../_app/immutable/chunks/
|
|
17
|
+
<link href="../../_app/immutable/chunks/BG9Gz_25.js" rel="modulepreload">
|
|
18
18
|
<link href="../../_app/immutable/chunks/DK8Blf1Y.js" rel="modulepreload">
|
|
19
|
-
<link href="../../_app/immutable/chunks/
|
|
19
|
+
<link href="../../_app/immutable/chunks/Bsn3IIve.js" rel="modulepreload">
|
|
20
20
|
<link href="../../_app/immutable/chunks/M-CuJzQN.js" rel="modulepreload">
|
|
21
21
|
<link href="../../_app/immutable/chunks/9pRTae44.js" rel="modulepreload">
|
|
22
|
-
<link href="../../_app/immutable/chunks/
|
|
22
|
+
<link href="../../_app/immutable/chunks/Cga8zF3r.js" rel="modulepreload">
|
|
23
23
|
<link href="../../_app/immutable/chunks/CUyVrfsu.js" rel="modulepreload">
|
|
24
24
|
<link href="../../_app/immutable/chunks/gMSmS-_y.js" rel="modulepreload">
|
|
25
25
|
<link href="../../_app/immutable/chunks/BYcBM-fh.js" rel="modulepreload">
|
|
26
|
-
<link href="../../_app/immutable/chunks/
|
|
27
|
-
<link href="../../_app/immutable/chunks/
|
|
28
|
-
<link href="../../_app/immutable/chunks/
|
|
29
|
-
<link href="../../_app/immutable/chunks/
|
|
26
|
+
<link href="../../_app/immutable/chunks/DuZeZzOA.js" rel="modulepreload">
|
|
27
|
+
<link href="../../_app/immutable/chunks/BhU_yBI_.js" rel="modulepreload">
|
|
28
|
+
<link href="../../_app/immutable/chunks/d_dqmeIr.js" rel="modulepreload">
|
|
29
|
+
<link href="../../_app/immutable/chunks/BiEOJeYb.js" rel="modulepreload">
|
|
30
30
|
<link href="../../_app/immutable/chunks/d934w91N.js" rel="modulepreload">
|
|
31
31
|
<link href="../../_app/immutable/chunks/D_U_DYjx.js" rel="modulepreload">
|
|
32
|
-
<link href="../../_app/immutable/chunks/
|
|
33
|
-
<link href="../../_app/immutable/chunks/
|
|
34
|
-
<link href="../../_app/immutable/chunks/
|
|
35
|
-
<link href="../../_app/immutable/chunks/
|
|
36
|
-
<link href="../../_app/immutable/chunks/
|
|
32
|
+
<link href="../../_app/immutable/chunks/NppCG--v.js" rel="modulepreload">
|
|
33
|
+
<link href="../../_app/immutable/chunks/C3sRGrYK.js" rel="modulepreload">
|
|
34
|
+
<link href="../../_app/immutable/chunks/CTlMHIE6.js" rel="modulepreload">
|
|
35
|
+
<link href="../../_app/immutable/chunks/Bal1oPZu.js" rel="modulepreload">
|
|
36
|
+
<link href="../../_app/immutable/chunks/C1VofLtR.js" rel="modulepreload">
|
|
37
37
|
<link href="../../_app/immutable/chunks/BMgzWMdF.js" rel="modulepreload">
|
|
38
38
|
<link href="../../_app/immutable/chunks/CgAkqYsL.js" rel="modulepreload">
|
|
39
|
-
<link href="../../_app/immutable/nodes/14.
|
|
39
|
+
<link href="../../_app/immutable/nodes/14.B6TD25VU.js" rel="modulepreload">
|
|
40
40
|
<link href="../../_app/immutable/chunks/D71UrO5c.js" rel="modulepreload">
|
|
41
41
|
<!--1vy8ks8--><!----><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.
|
|
42
|
+
<link href="../../_app/immutable/assets/feedback.qFktqYFY.css" rel="stylesheet">
|
|
43
43
|
<link href="../../_app/immutable/assets/currency-metadata.ksbBA8-C.css" rel="stylesheet">
|
|
44
44
|
<link href="../../_app/immutable/assets/app.4ScdTV_S.css" rel="stylesheet">
|
|
45
45
|
<link href="../../_app/immutable/assets/SegmentedControl.DMqHG5fn.css" rel="stylesheet">
|
|
@@ -58,15 +58,15 @@
|
|
|
58
58
|
|
|
59
59
|
<script>
|
|
60
60
|
{
|
|
61
|
-
|
|
61
|
+
__sveltekit_qeoaal = {
|
|
62
62
|
base: new URL("../..", location).pathname.slice(0, -1)
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
const element = document.currentScript.parentElement;
|
|
66
66
|
|
|
67
67
|
Promise.all([
|
|
68
|
-
import("../../_app/immutable/entry/start.
|
|
69
|
-
import("../../_app/immutable/entry/app.
|
|
68
|
+
import("../../_app/immutable/entry/start.BXkBl20Z.js"),
|
|
69
|
+
import("../../_app/immutable/entry/app.B4gMiHwR.js")
|
|
70
70
|
]).then(([kit, app]) => {
|
|
71
71
|
kit.start(app, element, {
|
|
72
72
|
node_ids: [0, 14],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/lib/ai/instance.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,oFAAoF;AACpF,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/lib/ai/instance.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,oFAAoF;AACpF,eAAO,MAAM,OAAO,SAyBlB,CAAC"}
|
package/dist/ai/instance.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createSpeechModel } from "../assistant/voice-host.js";
|
|
2
2
|
import { browserStorage } from "../cookbook/storage.js";
|
|
3
3
|
import { cookbookStore } from "../cookbook/store.svelte.js";
|
|
4
|
-
import { plannerController } from "../planner/instance.js";
|
|
4
|
+
import { plannerController, plannerRuntime } from "../planner/instance.js";
|
|
5
5
|
import { recipes } from "../recipes/index.js";
|
|
6
6
|
import { recipeState } from "../recipes/state.svelte.js";
|
|
7
7
|
import { AiState } from "./state.svelte.js";
|
|
@@ -20,6 +20,14 @@ export const aiState = new AiState({
|
|
|
20
20
|
read: () => cookbookStore.snapshot().theme,
|
|
21
21
|
write: (theme) => cookbookStore.setTheme(theme),
|
|
22
22
|
},
|
|
23
|
+
// Only where the running app can open a section (the static layout and
|
|
24
|
+
// the mount set `openSection`), the visible ones.
|
|
25
|
+
menu: () => plannerRuntime.openSection
|
|
26
|
+
? plannerController
|
|
27
|
+
.snapshot()
|
|
28
|
+
.sections.filter((section) => !section.hidden)
|
|
29
|
+
.map(({ id, label }) => ({ id, label }))
|
|
30
|
+
: [],
|
|
23
31
|
},
|
|
24
32
|
voice: { createModel: createSpeechModel },
|
|
25
33
|
});
|
|
@@ -52,6 +52,11 @@ export interface AssistantChange {
|
|
|
52
52
|
name: string;
|
|
53
53
|
input: unknown;
|
|
54
54
|
}[];
|
|
55
|
+
/**
|
|
56
|
+
* A menu section to open (`parseChange` with `sections`): only ids the
|
|
57
|
+
* running app can navigate to. Absent otherwise.
|
|
58
|
+
*/
|
|
59
|
+
open?: string;
|
|
55
60
|
}
|
|
56
61
|
/** Most command calls one reply may carry. */
|
|
57
62
|
export declare const MAX_COMMANDS = 8;
|
|
@@ -86,7 +91,7 @@ export interface AppliedChange {
|
|
|
86
91
|
*/
|
|
87
92
|
export declare function buildResponseSchema(recipes: readonly Pick<Recipe, 'id'>[], cookbooks?: readonly {
|
|
88
93
|
id: string;
|
|
89
|
-
}[], withSettings?: boolean, withTheme?: boolean): Record<string, unknown>;
|
|
94
|
+
}[], withSettings?: boolean, withTheme?: boolean, sections?: readonly string[]): Record<string, unknown>;
|
|
90
95
|
/**
|
|
91
96
|
* Keep only valid settings: circulating currency, tax 0-100, short terms, a
|
|
92
97
|
* yes/no on prices including tax and line or document rounding.
|
|
@@ -107,7 +112,12 @@ export declare function parseChange(input: string, recipes: readonly Pick<Recipe
|
|
|
107
112
|
id: string;
|
|
108
113
|
}[], options?: {
|
|
109
114
|
commands?: boolean;
|
|
115
|
+
sections?: readonly string[];
|
|
110
116
|
}): AssistantChange;
|
|
111
|
-
/**
|
|
112
|
-
|
|
117
|
+
/**
|
|
118
|
+
* A sentence for the chat saying what changed, by recipe label. A recipe that
|
|
119
|
+
* puts nothing in the menu says so, so an "Added" the visitor cannot see is
|
|
120
|
+
* not taken for one that failed.
|
|
121
|
+
*/
|
|
122
|
+
export declare function describeChange(applied: AppliedChange, recipes: readonly (Pick<Recipe, 'id' | 'label'> & Partial<Pick<Recipe, 'nav'>>)[]): string;
|
|
113
123
|
//# sourceMappingURL=change.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change.d.ts","sourceRoot":"","sources":["../../src/lib/assistant/change.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAGL,KAAK,kBAAkB,EAIvB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAE3B,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;CACrC;AAED,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,0EAA0E;AAC1E,eAAO,MAAM,cAAc,2BAA2B,CAAC;AAEvD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,UAAU,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"change.d.ts","sourceRoot":"","sources":["../../src/lib/assistant/change.ts"],"names":[],"mappings":"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"}
|
package/dist/assistant/change.js
CHANGED
|
@@ -12,7 +12,7 @@ export const MAX_COMMANDS = 8;
|
|
|
12
12
|
* The JSON Schema for one turn. `add` and `remove` are enums of recipe ids,
|
|
13
13
|
* so grammar-constrained decoding cannot produce an id that does not exist.
|
|
14
14
|
*/
|
|
15
|
-
export function buildResponseSchema(recipes, cookbooks = [], withSettings = false, withTheme = false) {
|
|
15
|
+
export function buildResponseSchema(recipes, cookbooks = [], withSettings = false, withTheme = false, sections = []) {
|
|
16
16
|
const ids = recipes.map((recipe) => recipe.id);
|
|
17
17
|
const list = { type: 'array', items: { enum: ids }, maxItems: ids.length };
|
|
18
18
|
const properties = {
|
|
@@ -50,6 +50,8 @@ export function buildResponseSchema(recipes, cookbooks = [], withSettings = fals
|
|
|
50
50
|
additionalProperties: false,
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
|
+
if (sections.length)
|
|
54
|
+
properties.open = { enum: [...sections, null] };
|
|
53
55
|
return {
|
|
54
56
|
type: 'object',
|
|
55
57
|
properties,
|
|
@@ -197,6 +199,10 @@ export function parseChange(input, recipes, cookbooks = [], options = {}) {
|
|
|
197
199
|
settings: parseSettings(object.settings),
|
|
198
200
|
theme: parseThemePatch(object.theme),
|
|
199
201
|
...(commands.length ? { commands } : {}),
|
|
202
|
+
...(typeof object.open === 'string' &&
|
|
203
|
+
options.sections?.includes(object.open)
|
|
204
|
+
? { open: object.open }
|
|
205
|
+
: {}),
|
|
200
206
|
};
|
|
201
207
|
}
|
|
202
208
|
/** `{ name, input }` entries; the controller rejects unknown names and bad input. */
|
|
@@ -216,13 +222,22 @@ function pickCommands(value) {
|
|
|
216
222
|
}
|
|
217
223
|
return out;
|
|
218
224
|
}
|
|
219
|
-
/**
|
|
225
|
+
/**
|
|
226
|
+
* A sentence for the chat saying what changed, by recipe label. A recipe that
|
|
227
|
+
* puts nothing in the menu says so, so an "Added" the visitor cannot see is
|
|
228
|
+
* not taken for one that failed.
|
|
229
|
+
*/
|
|
220
230
|
export function describeChange(applied, recipes) {
|
|
221
|
-
const
|
|
231
|
+
const recipe = (id) => recipes.find((r) => r.id === id);
|
|
232
|
+
const label = (id) => recipe(id)?.label ?? id;
|
|
222
233
|
const names = (ids) => ids.map(label).join(', ');
|
|
223
234
|
const parts = [];
|
|
224
235
|
if (applied.added.length)
|
|
225
236
|
parts.push(`Added ${names(applied.added)}.`);
|
|
237
|
+
const unseen = applied.added.filter((id) => recipe(id)?.nav?.length === 0);
|
|
238
|
+
if (unseen.length) {
|
|
239
|
+
parts.push(`${names(unseen)} ${unseen.length === 1 ? 'adds' : 'add'} nothing to the menu.`);
|
|
240
|
+
}
|
|
226
241
|
if (applied.removed.length)
|
|
227
242
|
parts.push(`Removed ${names(applied.removed)}.`);
|
|
228
243
|
if (applied.kept.length) {
|
|
@@ -5,6 +5,8 @@ import { type ThemeSetting } from '../theme/theme.ts';
|
|
|
5
5
|
import type { Match } from './match.ts';
|
|
6
6
|
/** The slice of a cookbook the model needs to pick one. */
|
|
7
7
|
export type CookbookBrief = Pick<LibraryCookbook, 'id' | 'name' | 'summary'> & Partial<Pick<LibraryCookbook, 'keywords'>>;
|
|
8
|
+
/** The recipe a request for a report or a summary of the app's data needs. */
|
|
9
|
+
export declare const REPORTS_RECIPE = "reports.runtime";
|
|
8
10
|
/** Tax is shown as a percent, the unit the person says it in. */
|
|
9
11
|
export declare function formatTaxPercent(fraction: number): string;
|
|
10
12
|
/**
|
|
@@ -20,5 +22,8 @@ export declare function formatTaxPercent(fraction: number): string;
|
|
|
20
22
|
*/
|
|
21
23
|
export declare function buildSystemPrompt(recipes: readonly Recipe[], current: readonly string[], cookbooks?: readonly CookbookBrief[], settings?: AppSettings, matches?: readonly Match[], themeInfo?: {
|
|
22
24
|
current: ThemeSetting | undefined;
|
|
23
|
-
}
|
|
25
|
+
}, menu?: readonly {
|
|
26
|
+
id: string;
|
|
27
|
+
label: string;
|
|
28
|
+
}[]): string;
|
|
24
29
|
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/lib/assistant/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,2DAA2D;AAC3D,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,GAC1E,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC;AA4F7C,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,SAAS,GAAE,SAAS,aAAa,EAAO,EACxC,QAAQ,CAAC,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,SAAS,KAAK,EAAE,EAC1B,SAAS,CAAC,EAAE;IAAE,OAAO,EAAE,YAAY,GAAG,SAAS,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/lib/assistant/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,2DAA2D;AAC3D,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,GAC1E,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC;AA4F7C,8EAA8E;AAC9E,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAEhD,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,SAAS,GAAE,SAAS,aAAa,EAAO,EACxC,QAAQ,CAAC,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,SAAS,KAAK,EAAE,EAC1B,SAAS,CAAC,EAAE;IAAE,OAAO,EAAE,YAAY,GAAG,SAAS,CAAA;CAAE,EACjD,IAAI,GAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAO,GAClD,MAAM,CA2HR"}
|
package/dist/assistant/prompt.js
CHANGED
|
@@ -62,6 +62,8 @@ function examples(recipeIds, cookbookIds, withSettings, withTheme) {
|
|
|
62
62
|
(!e.settings || withSettings) &&
|
|
63
63
|
(!e.theme || withTheme)).map((e) => `"${e.says}" -> ${JSON.stringify(e.answer)}`);
|
|
64
64
|
}
|
|
65
|
+
/** The recipe a request for a report or a summary of the app's data needs. */
|
|
66
|
+
export const REPORTS_RECIPE = 'reports.runtime';
|
|
65
67
|
/** Tax is shown as a percent, the unit the person says it in. */
|
|
66
68
|
export function formatTaxPercent(fraction) {
|
|
67
69
|
return `${Number((fraction * 100).toFixed(4))}%`;
|
|
@@ -77,7 +79,7 @@ export function formatTaxPercent(fraction) {
|
|
|
77
79
|
* and a hint line naming what looks relevant. Without it every item gets a
|
|
78
80
|
* full line. The response schema lists every id either way.
|
|
79
81
|
*/
|
|
80
|
-
export function buildSystemPrompt(recipes, current, cookbooks = [], settings, matches, themeInfo) {
|
|
82
|
+
export function buildSystemPrompt(recipes, current, cookbooks = [], settings, matches, themeInfo, menu = []) {
|
|
81
83
|
const focused = matches !== undefined;
|
|
82
84
|
const matchedRecipes = (matches ?? [])
|
|
83
85
|
.filter((m) => m.kind === 'recipe')
|
|
@@ -109,6 +111,13 @@ export function buildSystemPrompt(recipes, current, cookbooks = [], settings, ma
|
|
|
109
111
|
if (themeInfo) {
|
|
110
112
|
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
113
|
}
|
|
114
|
+
if (menu.length) {
|
|
115
|
+
out.push('"open": a menu section id only when they ask to see or go to one, else null.');
|
|
116
|
+
}
|
|
117
|
+
out.push('"reply" never claims anything beyond add, remove, cookbook, settings, theme and open: the app reports what changed.');
|
|
118
|
+
if (recipes.some((r) => r.id === REPORTS_RECIPE)) {
|
|
119
|
+
out.push(`A report or summary of their data needs ${REPORTS_RECIPE} (Reports): add it, and open only its section, never another. You cannot build the report itself yet.`);
|
|
120
|
+
}
|
|
112
121
|
const shown = examples(new Set(recipes.map((r) => r.id)), new Set(cookbooks.map((c) => c.id)), Boolean(settings), Boolean(themeInfo));
|
|
113
122
|
if (shown.length)
|
|
114
123
|
out.push('', 'Examples:', ...shown);
|
|
@@ -163,5 +172,8 @@ export function buildSystemPrompt(recipes, current, cookbooks = [], settings, ma
|
|
|
163
172
|
if (themeInfo) {
|
|
164
173
|
out.push(`Theme: ${describeTheme(themeInfo.current)}.`);
|
|
165
174
|
}
|
|
175
|
+
if (menu.length) {
|
|
176
|
+
out.push(`Menu: ${menu.map((s) => `${s.id} (${s.label})`).join(', ')}.`);
|
|
177
|
+
}
|
|
166
178
|
return out.join('\n');
|
|
167
179
|
}
|
|
@@ -29,6 +29,11 @@ export interface SessionOptions {
|
|
|
29
29
|
host?: EngineHost;
|
|
30
30
|
/** Called with each reply the model produced, e.g. to read it aloud. */
|
|
31
31
|
onReply?: (text: string) => void;
|
|
32
|
+
/** The menu sections the assistant may open; see the transport's `menu`. */
|
|
33
|
+
menu?: () => readonly {
|
|
34
|
+
id: string;
|
|
35
|
+
label: string;
|
|
36
|
+
}[];
|
|
32
37
|
}
|
|
33
38
|
/**
|
|
34
39
|
* The assistant's lifecycle: nothing is downloaded until the visitor accepts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/assistant/session.svelte.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAEL,KAAK,UAAU,EAEf,KAAK,YAAY,EAElB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAC;AAExB;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAK3E;AAED,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,MAAM,GACN,SAAS,GACT,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,gFAAgF;IAChF,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,0FAA0F;IAC1F,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"session.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/assistant/session.svelte.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAEL,KAAK,UAAU,EAEf,KAAK,YAAY,EAElB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAC;AAExB;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAK3E;AAED,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,MAAM,GACN,SAAS,GACT,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,gFAAgF;IAChF,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,0FAA0F;IAC1F,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,MAAM,gBAAiC;IACvC,KAAK,iBAA0D;IAC/D,QAAQ,eAAmD;IAC3D,KAAK,SAAc;IACnB,gFAAgF;IAChF,IAAI,gBAAoC;IACxC,4EAA4E;IAC5E,WAAW,SAAc;IAEzB,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,iBAA0C;IACzD,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACvC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;gBAE7B,OAAO,EAAE,cAAc;IAiCnC;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAYlC,iFAAiF;IACjF,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOtD,0EAA0E;IAC1E,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM7B,8EAA8E;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqD5B,mCAAmC;IACnC,MAAM,IAAI,IAAI;IAId,qDAAqD;IACrD,MAAM,IAAI,IAAI;CAYf"}
|
|
@@ -70,6 +70,7 @@ export class AssistantSession {
|
|
|
70
70
|
? 'Inference is off. The cards on the Planner page work without it.'
|
|
71
71
|
: 'Download a model first, then I can help. The cards on the Planner page work without one.',
|
|
72
72
|
onReply: (text) => options.onReply?.(text),
|
|
73
|
+
menu: options.menu,
|
|
73
74
|
});
|
|
74
75
|
}
|
|
75
76
|
/**
|
|
@@ -57,6 +57,15 @@ export interface BrowserTransportOptions {
|
|
|
57
57
|
now?: () => number;
|
|
58
58
|
/** Called with each reply the model produced (not errors), e.g. to read it aloud. */
|
|
59
59
|
onReply?: (text: string) => void;
|
|
60
|
+
/**
|
|
61
|
+
* The menu sections the assistant may open (`focus` with a `section`):
|
|
62
|
+
* only where the running app navigates to them. Omitted or empty, the
|
|
63
|
+
* assistant cannot navigate and the schema has no `open`.
|
|
64
|
+
*/
|
|
65
|
+
menu?: () => readonly {
|
|
66
|
+
id: string;
|
|
67
|
+
label: string;
|
|
68
|
+
}[];
|
|
60
69
|
}
|
|
61
70
|
export interface BrowserAssistantTransport extends AssistantTransport {
|
|
62
71
|
/** Stop the turn in flight, if any. */
|
|
@@ -64,11 +73,25 @@ export interface BrowserAssistantTransport extends AssistantTransport {
|
|
|
64
73
|
}
|
|
65
74
|
/** The one line the chat opens with. */
|
|
66
75
|
export declare const GREETING = "What would you like to build?";
|
|
76
|
+
/** Said when a turn changed nothing and the model's sentence was not a question. */
|
|
77
|
+
export declare const NOTHING_CHANGED = "Nothing in the app changed.";
|
|
78
|
+
/** Said after a report request: the planner cannot build one yet (smrt#4100). */
|
|
79
|
+
export declare const REPORTS_PENDING = "Building the report itself is not available in the planner yet; it will live under Reports.";
|
|
80
|
+
/**
|
|
81
|
+
* What the chat says for a turn. When something ran, the commands' own
|
|
82
|
+
* summaries ("Added Invoicing.", "Opened Billing."), never the model's
|
|
83
|
+
* sentence, which may claim more than ran ("Added a sales report"). When
|
|
84
|
+
* nothing ran, the model's sentence (an answer or a question), plus a plain
|
|
85
|
+
* note that nothing changed unless it asks something or offers a cookbook.
|
|
86
|
+
*/
|
|
87
|
+
export declare function honestReply(line: string, summary: string, offered: boolean): string;
|
|
67
88
|
/**
|
|
68
89
|
* An `AssistantTransport` that runs entirely in the browser: one thread, kept
|
|
69
90
|
* in memory, whose turns go to the on-device model with the recipes as a
|
|
70
91
|
* constrained schema. The model's `add`/`remove` are applied through the same
|
|
71
|
-
* recipe store the Planner cards drive. It
|
|
92
|
+
* recipe store the Planner cards drive. It navigates only to a menu section
|
|
93
|
+
* `menu` offers. What it says it did is what the commands' results say: the
|
|
94
|
+
* model's own sentence stands only when nothing changed, and then says so.
|
|
72
95
|
*/
|
|
73
96
|
export declare function createBrowserAssistantTransport(options: BrowserTransportOptions): BrowserAssistantTransport;
|
|
74
97
|
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/lib/assistant/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/lib/assistant/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createSliceController, } from "../planner/commands/index.js";
|
|
2
2
|
import { buildResponseSchema, describeChange, parseChange, } from "./change.js";
|
|
3
3
|
import { buildMatchIndex, matchText } from "./match.js";
|
|
4
|
-
import { buildSystemPrompt } from "./prompt.js";
|
|
4
|
+
import { buildSystemPrompt, REPORTS_RECIPE, } from "./prompt.js";
|
|
5
5
|
const THREAD_TITLE = 'Plan your app';
|
|
6
6
|
/** The one line the chat opens with. */
|
|
7
7
|
export const GREETING = 'What would you like to build?';
|
|
@@ -35,6 +35,34 @@ function runCommands(controller, calls) {
|
|
|
35
35
|
}
|
|
36
36
|
return lines.join(' ');
|
|
37
37
|
}
|
|
38
|
+
/** Said when a turn changed nothing and the model's sentence was not a question. */
|
|
39
|
+
export const NOTHING_CHANGED = 'Nothing in the app changed.';
|
|
40
|
+
/** Said after a report request: the planner cannot build one yet (smrt#4100). */
|
|
41
|
+
export const REPORTS_PENDING = 'Building the report itself is not available in the planner yet; it will live under Reports.';
|
|
42
|
+
/** The Reports menu entry (reports.runtime's RuntimeReport). */
|
|
43
|
+
const REPORTS_ITEM = 'item:reports:RuntimeReport';
|
|
44
|
+
/**
|
|
45
|
+
* What the chat says for a turn. When something ran, the commands' own
|
|
46
|
+
* summaries ("Added Invoicing.", "Opened Billing."), never the model's
|
|
47
|
+
* sentence, which may claim more than ran ("Added a sales report"). When
|
|
48
|
+
* nothing ran, the model's sentence (an answer or a question), plus a plain
|
|
49
|
+
* note that nothing changed unless it asks something or offers a cookbook.
|
|
50
|
+
*/
|
|
51
|
+
export function honestReply(line, summary, offered) {
|
|
52
|
+
if (summary)
|
|
53
|
+
return summary;
|
|
54
|
+
if (offered || line.trim().endsWith('?'))
|
|
55
|
+
return line;
|
|
56
|
+
return [line, NOTHING_CHANGED].filter(Boolean).join(' ');
|
|
57
|
+
}
|
|
58
|
+
/** Open a menu section through `focus`; what happened, failure included. */
|
|
59
|
+
function openSection(controller, id, menu) {
|
|
60
|
+
const label = menu.find((section) => section.id === id)?.label ?? id;
|
|
61
|
+
const result = controller.run({ name: 'focus', input: { section: id } });
|
|
62
|
+
return result.ok
|
|
63
|
+
? `Opened ${label}.`
|
|
64
|
+
: `Could not open ${label}: ${result.error.message}`;
|
|
65
|
+
}
|
|
38
66
|
/**
|
|
39
67
|
* The model's `add` and `remove` as commands, reported as one change: what
|
|
40
68
|
* really ended up on or off, after `requires`, and what was kept because
|
|
@@ -60,7 +88,9 @@ function applyRecipes(controller, change) {
|
|
|
60
88
|
* An `AssistantTransport` that runs entirely in the browser: one thread, kept
|
|
61
89
|
* in memory, whose turns go to the on-device model with the recipes as a
|
|
62
90
|
* constrained schema. The model's `add`/`remove` are applied through the same
|
|
63
|
-
* recipe store the Planner cards drive. It
|
|
91
|
+
* recipe store the Planner cards drive. It navigates only to a menu section
|
|
92
|
+
* `menu` offers. What it says it did is what the commands' results say: the
|
|
93
|
+
* model's own sentence stands only when nothing changed, and then says so.
|
|
64
94
|
*/
|
|
65
95
|
export function createBrowserAssistantTransport(options) {
|
|
66
96
|
const now = options.now ?? (() => Date.now());
|
|
@@ -124,15 +154,16 @@ export function createBrowserAssistantTransport(options) {
|
|
|
124
154
|
content: m.content,
|
|
125
155
|
}));
|
|
126
156
|
const matches = matchText(index, text);
|
|
157
|
+
const menu = options.menu?.() ?? [];
|
|
127
158
|
const raw = await model.message(text, {
|
|
128
159
|
history: [
|
|
129
160
|
{
|
|
130
161
|
role: 'system',
|
|
131
|
-
content: buildSystemPrompt(options.recipes, options.store.ids, cookbooks, options.settings?.read(), matches, options.theme ? { current: options.theme.read() } : undefined),
|
|
162
|
+
content: buildSystemPrompt(options.recipes, options.store.ids, cookbooks, options.settings?.read(), matches, options.theme ? { current: options.theme.read() } : undefined, menu),
|
|
132
163
|
},
|
|
133
164
|
...prior,
|
|
134
165
|
],
|
|
135
|
-
responseSchema: buildResponseSchema(options.recipes, cookbooks, !!options.settings, !!options.theme),
|
|
166
|
+
responseSchema: buildResponseSchema(options.recipes, cookbooks, !!options.settings, !!options.theme, menu.map((section) => section.id)),
|
|
136
167
|
temperature: 0,
|
|
137
168
|
maxTokens: MAX_REPLY_TOKENS,
|
|
138
169
|
signal: controller.signal,
|
|
@@ -141,6 +172,7 @@ export function createBrowserAssistantTransport(options) {
|
|
|
141
172
|
commands: typeof options.acceptCommands === 'function'
|
|
142
173
|
? options.acceptCommands()
|
|
143
174
|
: options.acceptCommands,
|
|
175
|
+
sections: menu.map((section) => section.id),
|
|
144
176
|
});
|
|
145
177
|
const applied = applyRecipes(planner, change);
|
|
146
178
|
const settingsText = options.settings && hasKeys(change.settings)
|
|
@@ -156,11 +188,23 @@ export function createBrowserAssistantTransport(options) {
|
|
|
156
188
|
const commandText = (change.commands ?? []).length
|
|
157
189
|
? runCommands(planner, change.commands ?? [])
|
|
158
190
|
: '';
|
|
191
|
+
// A request for a report or a summary of the data (the keyword match
|
|
192
|
+
// finds reports.runtime) goes to Reports or nowhere: an `open` of any
|
|
193
|
+
// other section (the product catalogue, say) is dropped.
|
|
194
|
+
const reportRequest = matches.some((m) => m.kind === 'recipe' && m.id === REPORTS_RECIPE);
|
|
195
|
+
const reportsSection = planner
|
|
196
|
+
.snapshot()
|
|
197
|
+
.sections.find((s) => s.items.some((i) => i.id === REPORTS_ITEM))?.id;
|
|
198
|
+
const open = change.open && (!reportRequest || change.open === reportsSection)
|
|
199
|
+
? change.open
|
|
200
|
+
: undefined;
|
|
201
|
+
const openText = open ? openSection(planner, open, menu) : '';
|
|
159
202
|
const summary = [
|
|
160
203
|
describeChange(applied, options.recipes),
|
|
161
204
|
settingsText,
|
|
162
205
|
themed?.summary ?? '',
|
|
163
206
|
commandText,
|
|
207
|
+
openText,
|
|
164
208
|
]
|
|
165
209
|
.filter(Boolean)
|
|
166
210
|
.join(' ');
|
|
@@ -180,12 +224,17 @@ export function createBrowserAssistantTransport(options) {
|
|
|
180
224
|
? cookbooks.find((c) => c.id === cookbookId)
|
|
181
225
|
: undefined;
|
|
182
226
|
const line = change.reply || (offered ? `Set up ${offered.name}?` : '');
|
|
183
|
-
const reply = [
|
|
184
|
-
|
|
185
|
-
|
|
227
|
+
const reply = [
|
|
228
|
+
honestReply(line, summary, !!offer),
|
|
229
|
+
reportRequest ? REPORTS_PENDING : '',
|
|
230
|
+
]
|
|
231
|
+
.filter(Boolean)
|
|
232
|
+
.join(' ');
|
|
233
|
+
if (reply)
|
|
234
|
+
options.onReply?.(reply);
|
|
186
235
|
// One ref renders as is; a cookbook offer and a theme Undo in one turn ride together.
|
|
187
236
|
const refs = offer && undo ? [offer, undo] : (offer ?? undo);
|
|
188
|
-
return { content: reply
|
|
237
|
+
return { content: reply, refs };
|
|
189
238
|
}
|
|
190
239
|
catch (error) {
|
|
191
240
|
if (controller?.signal.aborted)
|