@happyvertical/smrt-planner 0.57.3 → 0.57.4

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.
Files changed (537) hide show
  1. package/agents/assistant.md +8 -1
  2. package/agents/cookbook.md +8 -2
  3. package/app/404.html +21 -21
  4. package/app/_app/immutable/assets/2.CdEXvRg0.css +1 -0
  5. package/app/_app/immutable/assets/{feedback.DePeap37.css → feedback.qFktqYFY.css} +1 -1
  6. package/app/_app/immutable/chunks/{2l76O8yg.js → 8vF2REci.js} +1 -1
  7. package/app/_app/immutable/chunks/{C-DLpfU4.js → A_IpJrNN.js} +1 -1
  8. package/app/_app/immutable/chunks/{U6_OBRq_.js → B6GaAylQ.js} +1 -1
  9. package/app/_app/immutable/chunks/{DsY7g8iJ.js → BMRtN-eN.js} +3 -3
  10. package/app/_app/immutable/chunks/Bc_SIIIS.js +1 -0
  11. package/app/_app/immutable/chunks/{DveAWx7t.js → BhsxCKaI.js} +1 -1
  12. package/app/_app/immutable/chunks/Burj9UYU.js +1 -0
  13. package/app/_app/immutable/chunks/{Bb0f-PWY.js → BvRNePGN.js} +1 -1
  14. package/app/_app/immutable/chunks/C7z2g6fG.js +1 -0
  15. package/app/_app/immutable/chunks/CQ13lq7J.js +1 -0
  16. package/app/_app/immutable/chunks/{Dq8aYheE.js → CUAfmRua.js} +1 -1
  17. package/app/_app/immutable/chunks/{EZsakmZX.js → CVcfTI5P.js} +1 -1
  18. package/app/_app/immutable/chunks/{CZwkvsZI.js → CdPJK-gf.js} +1 -1
  19. package/app/_app/immutable/chunks/{BfPYbnRI.js → Ckc_1feF.js} +1 -1
  20. package/app/_app/immutable/chunks/{DR_9YSDq.js → CztFAhpp.js} +1 -1
  21. package/app/_app/immutable/chunks/D76yH9OO.js +24 -0
  22. package/app/_app/immutable/chunks/D7t4xFw6.js +4 -0
  23. package/app/_app/immutable/chunks/{Bz0ybtg3.js → D8D_RStZ.js} +1 -1
  24. package/app/_app/immutable/chunks/DCr75fDJ.js +1 -0
  25. package/app/_app/immutable/chunks/DEwvWTFM.js +1 -0
  26. package/app/_app/immutable/chunks/{BAeyjCL_.js → DTWraE40.js} +1 -1
  27. package/app/_app/immutable/chunks/{CF503c7E.js → VCg3x54j.js} +1 -1
  28. package/app/_app/immutable/chunks/{BJKoxDbG.js → XlsfHlOd.js} +1 -1
  29. package/app/_app/immutable/chunks/{rkUL-DlL.js → gnVUq1Tr.js} +25 -25
  30. package/app/_app/immutable/chunks/{Cfd9dmBM.js → h1rof478.js} +1 -1
  31. package/app/_app/immutable/chunks/{PJY04JNF.js → ukqw0V0Z.js} +1 -1
  32. package/app/_app/immutable/entry/{app.BOdcGXnx.js → app.C-mGsUDb.js} +2 -2
  33. package/app/_app/immutable/entry/start.DnB4rZdO.js +1 -0
  34. package/app/_app/immutable/nodes/0.CG8nFTeW.js +9 -0
  35. package/app/_app/immutable/nodes/{1.CULLAAlp.js → 1.BY2zPWBD.js} +1 -1
  36. package/app/_app/immutable/nodes/{10.D3aS_KZl.js → 10.y59vLZOY.js} +1 -1
  37. package/app/_app/immutable/nodes/{11.C92xaiTE.js → 11.HBRO8fTE.js} +1 -1
  38. package/app/_app/immutable/nodes/{12.D1Lzt56L.js → 12.DiV3I_fX.js} +1 -1
  39. package/app/_app/immutable/nodes/{13.Bx4rov-F.js → 13.f4cxyt4f.js} +1 -1
  40. package/app/_app/immutable/nodes/{14.CEBy0En2.js → 14.DnBBJxxq.js} +1 -1
  41. package/app/_app/immutable/nodes/2.DR5lKFBV.js +24 -0
  42. package/app/_app/immutable/nodes/{3.C8f09BsJ.js → 3.gu2TJwhp.js} +1 -1
  43. package/app/_app/immutable/nodes/{4.Z1MwZ_rU.js → 4.CU9BPw5o.js} +1 -1
  44. package/app/_app/immutable/nodes/{5.BnknP-NB.js → 5.CD78hESs.js} +1 -1
  45. package/app/_app/immutable/nodes/{6.B0InO4bR.js → 6.B5LspHdV.js} +1 -1
  46. package/app/_app/immutable/nodes/{7.CLnj1BGB.js → 7.lSo_04_4.js} +1 -1
  47. package/app/_app/immutable/nodes/{8.BmZYIUmz.js → 8.OVIZi4uJ.js} +1 -1
  48. package/app/_app/immutable/nodes/{9.BKWSHjz-.js → 9.BLNgntah.js} +1 -1
  49. package/app/_app/version.json +1 -1
  50. package/app/advanced-styles/index.html +24 -24
  51. package/app/ai/index.html +28 -33
  52. package/app/blueprint/index.html +22 -22
  53. package/app/cookbook/index.html +22 -22
  54. package/app/index.html +38 -38
  55. package/app/m/ads/AdDeliveryTier/index.html +25 -25
  56. package/app/m/ads/AdEvent/index.html +25 -25
  57. package/app/m/ads/AdFormat/index.html +25 -25
  58. package/app/m/ads/AdGroup/index.html +25 -25
  59. package/app/m/ads/AdVariation/index.html +25 -25
  60. package/app/m/analytics/AnalyticsDataStream/index.html +25 -25
  61. package/app/m/analytics/AnalyticsEvent/index.html +25 -25
  62. package/app/m/analytics/AnalyticsProperty/index.html +25 -25
  63. package/app/m/analytics/AnalyticsReport/index.html +25 -25
  64. package/app/m/approvals/ApprovalEvent/index.html +25 -25
  65. package/app/m/approvals/ApprovalPolicy/index.html +25 -25
  66. package/app/m/approvals/ApprovalRequest/index.html +25 -25
  67. package/app/m/assets/Asset/attachments/index.html +26 -26
  68. package/app/m/assets/Asset/index.html +25 -25
  69. package/app/m/assets/AssetAssociation/index.html +25 -25
  70. package/app/m/assets/AssetMetafield/index.html +25 -25
  71. package/app/m/assets/AssetStatus/index.html +25 -25
  72. package/app/m/assets/AssetType/index.html +25 -25
  73. package/app/m/assets/Folder/index.html +25 -25
  74. package/app/m/chat/AgentSession/index.html +25 -25
  75. package/app/m/chat/ChatMessage/index.html +25 -25
  76. package/app/m/chat/ChatParticipant/index.html +25 -25
  77. package/app/m/chat/ChatReaction/index.html +25 -25
  78. package/app/m/chat/ChatRoom/index.html +25 -25
  79. package/app/m/chat/ChatThread/index.html +25 -25
  80. package/app/m/chat/VoiceGatewayTurn/index.html +25 -25
  81. package/app/m/chat/VoiceSession/index.html +25 -25
  82. package/app/m/commerce/Agreement/index.html +25 -25
  83. package/app/m/commerce/Cart/index.html +25 -25
  84. package/app/m/commerce/Contract/index.html +25 -25
  85. package/app/m/commerce/ContractLineItem/index.html +26 -26
  86. package/app/m/commerce/Customer/index.html +25 -25
  87. package/app/m/commerce/DocumentTax/index.html +25 -25
  88. package/app/m/commerce/Estimate/index.html +25 -25
  89. package/app/m/commerce/Fulfillment/index.html +25 -25
  90. package/app/m/commerce/FulfillmentLineItem/index.html +25 -25
  91. package/app/m/commerce/HistoricalCustomerFunds/index.html +89 -0
  92. package/app/m/commerce/HistoricalCustomerFundsAllocation/index.html +89 -0
  93. package/app/m/commerce/HistoricalSalesLine/index.html +89 -0
  94. package/app/m/commerce/Invoice/index.html +25 -25
  95. package/app/m/commerce/InvoiceLineItem/index.html +25 -25
  96. package/app/m/commerce/Lease/index.html +25 -25
  97. package/app/m/commerce/LicenseSale/index.html +25 -25
  98. package/app/m/commerce/Order/index.html +25 -25
  99. package/app/m/commerce/Payment/index.html +25 -25
  100. package/app/m/commerce/PaymentAllocation/index.html +25 -25
  101. package/app/m/commerce/PaymentInstrument/index.html +25 -25
  102. package/app/m/commerce/PaymentIntent/index.html +25 -25
  103. package/app/m/commerce/Payout/index.html +25 -25
  104. package/app/m/commerce/ProductionOrder/index.html +25 -25
  105. package/app/m/commerce/PurchaseContract/index.html +25 -25
  106. package/app/m/commerce/PurchaseOrder/index.html +25 -25
  107. package/app/m/commerce/SalesContract/index.html +25 -25
  108. package/app/m/commerce/SupplierQuote/index.html +25 -25
  109. package/app/m/commerce/TaxCode/index.html +25 -25
  110. package/app/m/commerce/TaxComponent/index.html +25 -25
  111. package/app/m/commerce/TaxSettings/index.html +25 -25
  112. package/app/m/commerce/TaxSummaryReport/index.html +25 -25
  113. package/app/m/commerce/Vendor/index.html +25 -25
  114. package/app/m/commerce/WholesaleOrder/index.html +25 -25
  115. package/app/m/content/Content/index.html +25 -25
  116. package/app/m/content/ContentContribution/index.html +25 -25
  117. package/app/m/content/ContentContributionAttachment/index.html +25 -25
  118. package/app/m/content/ContentContributionRevision/index.html +25 -25
  119. package/app/m/content/ContentContributionType/index.html +25 -25
  120. package/app/m/content/ContentContributor/index.html +25 -25
  121. package/app/m/content/ContentCorrection/index.html +25 -25
  122. package/app/m/content/ContentFeedSource/index.html +25 -25
  123. package/app/m/content/ContentGovernanceAssignment/index.html +25 -25
  124. package/app/m/content/ContentGovernancePolicy/index.html +25 -25
  125. package/app/m/content/ContentGovernanceProfile/index.html +25 -25
  126. package/app/m/content/ContentReference/index.html +25 -25
  127. package/app/m/content/ContentReview/index.html +25 -25
  128. package/app/m/content/ContentVersion/index.html +25 -25
  129. package/app/m/events/Event/index.html +25 -25
  130. package/app/m/events/EventParticipant/index.html +25 -25
  131. package/app/m/events/EventSeries/index.html +26 -26
  132. package/app/m/events/EventType/index.html +25 -25
  133. package/app/m/expenses/Expense/index.html +25 -25
  134. package/app/m/facts/Fact/index.html +25 -25
  135. package/app/m/facts/FactContent/index.html +25 -25
  136. package/app/m/facts/FactEvidence/index.html +25 -25
  137. package/app/m/facts/FactSource/index.html +25 -25
  138. package/app/m/facts/FactSubject/index.html +25 -25
  139. package/app/m/facts/FactTag/index.html +25 -25
  140. package/app/m/fields/FieldPolicy/index.html +25 -25
  141. package/app/m/fields/FieldPolicySuggestion/index.html +25 -25
  142. package/app/m/fields/FieldUsageCounter/index.html +25 -25
  143. package/app/m/images/Image/index.html +25 -25
  144. package/app/m/inventory/InventoryLocation/index.html +25 -25
  145. package/app/m/inventory/StockLevel/index.html +25 -25
  146. package/app/m/inventory/StockMovement/index.html +25 -25
  147. package/app/m/ledgers/Account/index.html +25 -25
  148. package/app/m/ledgers/Journal/index.html +25 -25
  149. package/app/m/ledgers/JournalEntry/index.html +25 -25
  150. package/app/m/ledgers/Ledger/index.html +25 -25
  151. package/app/m/manufacturing/Assembly/index.html +25 -25
  152. package/app/m/manufacturing/BillOfMaterials/index.html +25 -25
  153. package/app/m/manufacturing/BomLine/index.html +25 -25
  154. package/app/m/manufacturing/Operation/index.html +25 -25
  155. package/app/m/manufacturing/ProductionRun/index.html +25 -25
  156. package/app/m/manufacturing/ProductionRunCompletion/index.html +25 -25
  157. package/app/m/manufacturing/RoutingStep/index.html +25 -25
  158. package/app/m/marketing/Campaign/index.html +25 -25
  159. package/app/m/marketing/CampaignChannel/index.html +25 -25
  160. package/app/m/marketing/CampaignMetricSnapshot/index.html +25 -25
  161. package/app/m/messages/Account/index.html +25 -25
  162. package/app/m/messages/Attachment/index.html +25 -25
  163. package/app/m/messages/Blacklist/index.html +25 -25
  164. package/app/m/messages/Email/failed-sends/index.html +26 -26
  165. package/app/m/messages/Email/index.html +25 -25
  166. package/app/m/messages/Email/mailbox/index.html +26 -26
  167. package/app/m/messages/EmailAccount/index.html +25 -25
  168. package/app/m/messages/EmailAttachment/index.html +25 -25
  169. package/app/m/messages/EmailFolder/index.html +25 -25
  170. package/app/m/messages/Message/index.html +25 -25
  171. package/app/m/messages/MessagingEndpoint/index.html +25 -25
  172. package/app/m/messages/PersonaMessageRoute/index.html +25 -25
  173. package/app/m/messages/SlackAccount/index.html +25 -25
  174. package/app/m/messages/SlackMessage/index.html +25 -25
  175. package/app/m/messages/TelegramAccount/index.html +25 -25
  176. package/app/m/messages/Tweet/index.html +25 -25
  177. package/app/m/messages/TwitterAccount/index.html +25 -25
  178. package/app/m/messages/Whitelist/index.html +25 -25
  179. package/app/m/messages/ZulipAccount/index.html +25 -25
  180. package/app/m/places/Place/index.html +25 -25
  181. package/app/m/places/PlaceType/index.html +25 -25
  182. package/app/m/products/Category/index.html +25 -25
  183. package/app/m/products/Material/index.html +25 -25
  184. package/app/m/products/Product/index.html +25 -25
  185. package/app/m/products/Product/ingredients/index.html +26 -26
  186. package/app/m/products/ProductVariant/index.html +25 -25
  187. package/app/m/products/Sku/index.html +25 -25
  188. package/app/m/profiles/ApiKey/index.html +25 -25
  189. package/app/m/profiles/Bot/index.html +25 -25
  190. package/app/m/profiles/MagicLinkToken/index.html +25 -25
  191. package/app/m/profiles/NostrIdentity/index.html +25 -25
  192. package/app/m/profiles/OidcIdentity/index.html +25 -25
  193. package/app/m/profiles/Organization/index.html +25 -25
  194. package/app/m/profiles/Person/index.html +25 -25
  195. package/app/m/profiles/Profile/index.html +25 -25
  196. package/app/m/profiles/ProfileMetadata/index.html +25 -25
  197. package/app/m/profiles/ProfileMetafield/index.html +25 -25
  198. package/app/m/profiles/ProfileRelationship/index.html +25 -25
  199. package/app/m/profiles/ProfileRelationshipTerm/index.html +25 -25
  200. package/app/m/profiles/ProfileRelationshipType/index.html +25 -25
  201. package/app/m/profiles/ProfileType/index.html +25 -25
  202. package/app/m/projects/Comment/index.html +25 -25
  203. package/app/m/projects/Issue/index.html +25 -25
  204. package/app/m/projects/Label/index.html +25 -25
  205. package/app/m/projects/Project/index.html +25 -25
  206. package/app/m/projects/ProjectIntegration/index.html +25 -25
  207. package/app/m/projects/PullRequest/index.html +25 -25
  208. package/app/m/projects/Repository/index.html +25 -25
  209. package/app/m/properties/Property/index.html +25 -25
  210. package/app/m/properties/Zone/index.html +25 -25
  211. package/app/m/reports/RuntimeReport/index.html +25 -25
  212. package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +26 -26
  213. package/app/m/reports/SmrtReportLock/index.html +26 -26
  214. package/app/m/reports/SmrtReportRefreshTask/index.html +26 -26
  215. package/app/m/reports/SmrtReportRun/index.html +26 -26
  216. package/app/m/reports/SmrtReportSchedule/index.html +26 -26
  217. package/app/m/reports/SmrtReportWatermark/index.html +26 -26
  218. package/app/m/sales/Agreement/index.html +25 -25
  219. package/app/m/sales/AttributionException/index.html +25 -25
  220. package/app/m/sales/AttributionPolicy/index.html +25 -25
  221. package/app/m/sales/Commission/index.html +25 -25
  222. package/app/m/sales/CommissionAdjustment/index.html +25 -25
  223. package/app/m/sales/CommissionPayout/index.html +25 -25
  224. package/app/m/sales/CommissionPlan/index.html +25 -25
  225. package/app/m/sales/Earner/index.html +25 -25
  226. package/app/m/sales/EarnerSourceAttribution/index.html +25 -25
  227. package/app/m/sales/EarningEvent/index.html +25 -25
  228. package/app/m/sales/ExecutedAgreement/index.html +25 -25
  229. package/app/m/sales/Lead/index.html +25 -25
  230. package/app/m/sales/Opportunity/index.html +25 -25
  231. package/app/m/sales/OpportunityConversion/index.html +25 -25
  232. package/app/m/sales/PipelineDefinition/index.html +25 -25
  233. package/app/m/sales/PipelineStage/index.html +25 -25
  234. package/app/m/sales/Referral/index.html +25 -25
  235. package/app/m/sales/ReferralAgreement/index.html +25 -25
  236. package/app/m/sales/ReferralLink/index.html +25 -25
  237. package/app/m/sales/ReferralProgram/index.html +25 -25
  238. package/app/m/sales/ReferralTermSnapshot/index.html +25 -25
  239. package/app/m/sales/ReferralTouch/index.html +25 -25
  240. package/app/m/sales/Referrer/index.html +25 -25
  241. package/app/m/sales/SalesActivity/index.html +25 -25
  242. package/app/m/sales/SalesRepresentative/index.html +25 -25
  243. package/app/m/sites/Site/index.html +25 -25
  244. package/app/m/sites/SiteAgentBinding/index.html +25 -25
  245. package/app/m/social/OAuthState/index.html +25 -25
  246. package/app/m/social/SocialAccount/index.html +25 -25
  247. package/app/m/social/SocialPost/index.html +25 -25
  248. package/app/m/social/SocialPostAnalyticsSnapshot/index.html +25 -25
  249. package/app/m/subscriptions/BillingAdjustment/index.html +25 -25
  250. package/app/m/subscriptions/ClientCharge/index.html +25 -25
  251. package/app/m/subscriptions/CreditGrant/index.html +25 -25
  252. package/app/m/subscriptions/PricingRule/index.html +25 -25
  253. package/app/m/subscriptions/RetailCharge/index.html +25 -25
  254. package/app/m/subscriptions/SpendingPolicy/index.html +25 -25
  255. package/app/m/subscriptions/SubscriptionPlan/index.html +25 -25
  256. package/app/m/subscriptions/TenantSubscription/index.html +25 -25
  257. package/app/m/subscriptions/TenantUsageMetric/index.html +25 -25
  258. package/app/m/support/ServiceTimeEntry/index.html +25 -25
  259. package/app/m/support/SupportAiRun/index.html +25 -25
  260. package/app/m/support/SupportAvailability/index.html +25 -25
  261. package/app/m/support/SupportCase/index.html +25 -25
  262. package/app/m/support/SupportCaseEvent/index.html +25 -25
  263. package/app/m/support/SupportChannelBinding/index.html +25 -25
  264. package/app/m/support/SupportCharge/index.html +25 -25
  265. package/app/m/support/SupportCompensation/index.html +25 -25
  266. package/app/m/support/SupportCompensationPlan/index.html +25 -25
  267. package/app/m/support/SupportEscalation/index.html +25 -25
  268. package/app/m/support/SupportInteraction/index.html +25 -25
  269. package/app/m/support/SupportPlan/index.html +25 -25
  270. package/app/m/support/SupportPolicy/index.html +25 -25
  271. package/app/m/support/SupportQualification/index.html +25 -25
  272. package/app/m/support/SupportServiceTarget/index.html +25 -25
  273. package/app/m/support/SupportSpecialist/index.html +25 -25
  274. package/app/m/support/SupportWorkLink/index.html +25 -25
  275. package/app/m/tags/Tag/index.html +25 -25
  276. package/app/m/tags/TagAlias/index.html +25 -25
  277. package/app/m/timesheets/AttendanceBreak/index.html +25 -25
  278. package/app/m/timesheets/AttendancePunch/index.html +25 -25
  279. package/app/m/timesheets/AttendanceSegment/index.html +25 -25
  280. package/app/m/timesheets/ServiceChargeSnapshot/index.html +25 -25
  281. package/app/m/timesheets/ServiceCompensationSnapshot/index.html +25 -25
  282. package/app/m/timesheets/ServiceTimeEntry/index.html +25 -25
  283. package/app/m/users/Group/index.html +25 -25
  284. package/app/m/users/GroupMember/index.html +25 -25
  285. package/app/m/users/GroupRole/index.html +25 -25
  286. package/app/m/users/Membership/index.html +25 -25
  287. package/app/m/users/MembershipOverride/index.html +25 -25
  288. package/app/m/users/Permission/index.html +25 -25
  289. package/app/m/users/Role/index.html +25 -25
  290. package/app/m/users/RolePermission/index.html +25 -25
  291. package/app/m/users/Session/index.html +25 -25
  292. package/app/m/users/Tenant/index.html +25 -25
  293. package/app/m/users/TenantIntegration/index.html +25 -25
  294. package/app/m/users/TenantPermissionOverride/index.html +25 -25
  295. package/app/m/users/User/index.html +25 -25
  296. package/app/m/video/Character/index.html +25 -25
  297. package/app/m/video/CharacterAsset/index.html +25 -25
  298. package/app/m/video/CompositeJob/index.html +25 -25
  299. package/app/m/video/Performer/index.html +25 -25
  300. package/app/m/video/PerformerAsset/index.html +25 -25
  301. package/app/m/video/Scene/index.html +25 -25
  302. package/app/m/video/SceneAsset/index.html +25 -25
  303. package/app/m/video/VideoComposition/index.html +25 -25
  304. package/app/m/video/VideoCompositionAsset/index.html +25 -25
  305. package/app/m/video/VideoSequence/index.html +25 -25
  306. package/app/m/video/VideoSequenceAsset/index.html +25 -25
  307. package/app/m/video/VideoShot/index.html +25 -25
  308. package/app/m/video/VideoShotAsset/index.html +25 -25
  309. package/app/m/video/VideoShotCharacter/index.html +25 -25
  310. package/app/m/video/VideoWorkflow/index.html +25 -25
  311. package/app/m/voice/VoiceOutput/index.html +25 -25
  312. package/app/m/voice/VoiceProfile/index.html +25 -25
  313. package/app/m/voice/VoiceSample/index.html +25 -25
  314. package/app/mcp.html +2 -2
  315. package/app/packages/ads/index.html +24 -24
  316. package/app/packages/analytics/index.html +24 -24
  317. package/app/packages/approvals/index.html +24 -24
  318. package/app/packages/assets/index.html +24 -24
  319. package/app/packages/chat/index.html +24 -24
  320. package/app/packages/comments/index.html +24 -24
  321. package/app/packages/commerce/index.html +25 -25
  322. package/app/packages/content/index.html +24 -24
  323. package/app/packages/events/index.html +24 -24
  324. package/app/packages/expenses/index.html +25 -25
  325. package/app/packages/facts/index.html +24 -24
  326. package/app/packages/fields/index.html +24 -24
  327. package/app/packages/human-resources/index.html +24 -24
  328. package/app/packages/images/index.html +24 -24
  329. package/app/packages/index.html +24 -24
  330. package/app/packages/ingestion/index.html +24 -24
  331. package/app/packages/inventory/index.html +24 -24
  332. package/app/packages/ledgers/index.html +24 -24
  333. package/app/packages/manufacturing/index.html +24 -24
  334. package/app/packages/marketing/index.html +24 -24
  335. package/app/packages/messages/index.html +24 -24
  336. package/app/packages/places/index.html +24 -24
  337. package/app/packages/preferences/index.html +24 -24
  338. package/app/packages/products/index.html +24 -24
  339. package/app/packages/profiles/index.html +24 -24
  340. package/app/packages/projects/index.html +24 -24
  341. package/app/packages/properties/index.html +24 -24
  342. package/app/packages/reports/index.html +24 -24
  343. package/app/packages/sales/index.html +24 -24
  344. package/app/packages/sites/index.html +24 -24
  345. package/app/packages/social/index.html +24 -24
  346. package/app/packages/subscriptions/index.html +24 -24
  347. package/app/packages/support/index.html +24 -24
  348. package/app/packages/tags/index.html +24 -24
  349. package/app/packages/timesheets/index.html +24 -24
  350. package/app/packages/users/index.html +24 -24
  351. package/app/packages/video/index.html +24 -24
  352. package/app/packages/voice/index.html +24 -24
  353. package/app/packages/webhooks/index.html +24 -24
  354. package/app/recipes/account-access/help/index.html +24 -24
  355. package/app/recipes/account-access/index.html +26 -26
  356. package/app/recipes/activity/help/index.html +24 -24
  357. package/app/recipes/activity/index.html +26 -26
  358. package/app/recipes/agreements/help/index.html +26 -26
  359. package/app/recipes/agreements/index.html +27 -27
  360. package/app/recipes/analytics.reports/help/index.html +24 -24
  361. package/app/recipes/analytics.reports/index.html +26 -26
  362. package/app/recipes/assets/help/index.html +24 -24
  363. package/app/recipes/assets/index.html +27 -27
  364. package/app/recipes/billing/help/index.html +26 -26
  365. package/app/recipes/billing/index.html +26 -26
  366. package/app/recipes/chat.assistant/help/index.html +24 -24
  367. package/app/recipes/chat.assistant/index.html +26 -26
  368. package/app/recipes/comments/help/index.html +24 -24
  369. package/app/recipes/comments/index.html +26 -26
  370. package/app/recipes/commerce.customers/help/index.html +24 -24
  371. package/app/recipes/commerce.customers/index.html +26 -26
  372. package/app/recipes/commerce.estimates/help/index.html +26 -26
  373. package/app/recipes/commerce.estimates/index.html +26 -26
  374. package/app/recipes/commerce.purchases/help/index.html +26 -26
  375. package/app/recipes/commerce.purchases/index.html +26 -26
  376. package/app/recipes/commerce.sales/help/index.html +26 -26
  377. package/app/recipes/commerce.sales/index.html +26 -26
  378. package/app/recipes/commerce.vendors/help/index.html +24 -24
  379. package/app/recipes/commerce.vendors/index.html +26 -26
  380. package/app/recipes/commerce.wholesale/help/index.html +26 -26
  381. package/app/recipes/commerce.wholesale/index.html +26 -26
  382. package/app/recipes/events.calendar/help/index.html +24 -24
  383. package/app/recipes/events.calendar/index.html +26 -26
  384. package/app/recipes/expenses.tracking/help/index.html +26 -26
  385. package/app/recipes/expenses.tracking/index.html +26 -26
  386. package/app/recipes/fields.form-customization/help/index.html +24 -24
  387. package/app/recipes/fields.form-customization/index.html +26 -26
  388. package/app/recipes/ingestion/help/index.html +24 -24
  389. package/app/recipes/ingestion/index.html +26 -26
  390. package/app/recipes/integrations/help/index.html +24 -24
  391. package/app/recipes/integrations/index.html +26 -26
  392. package/app/recipes/inventory.stock/help/index.html +24 -24
  393. package/app/recipes/inventory.stock/index.html +26 -26
  394. package/app/recipes/ledgers.bookkeeping/help/index.html +24 -24
  395. package/app/recipes/ledgers.bookkeeping/index.html +26 -26
  396. package/app/recipes/messages/help/index.html +24 -24
  397. package/app/recipes/messages/index.html +26 -26
  398. package/app/recipes/products/help/index.html +24 -24
  399. package/app/recipes/products/index.html +26 -26
  400. package/app/recipes/projects.tracker/help/index.html +24 -24
  401. package/app/recipes/projects.tracker/index.html +27 -27
  402. package/app/recipes/reports.materialized/help/index.html +26 -26
  403. package/app/recipes/reports.materialized/index.html +29 -29
  404. package/app/recipes/reports.runtime/help/index.html +24 -24
  405. package/app/recipes/reports.runtime/index.html +27 -27
  406. package/app/recipes/sales.pipeline/help/index.html +24 -24
  407. package/app/recipes/sales.pipeline/index.html +26 -26
  408. package/app/recipes/tags.taxonomy/help/index.html +24 -24
  409. package/app/recipes/tags.taxonomy/index.html +26 -26
  410. package/app/recipes/team-collaboration/help/index.html +24 -24
  411. package/app/recipes/team-collaboration/index.html +26 -26
  412. package/app/recipes/timesheets.time-entries/help/index.html +24 -24
  413. package/app/recipes/timesheets.time-entries/index.html +26 -26
  414. package/app/s/custom-accounts/index.html +22 -22
  415. package/app/s/custom-appointments/index.html +22 -22
  416. package/app/s/custom-billing/index.html +22 -22
  417. package/app/s/custom-buying/index.html +22 -22
  418. package/app/s/custom-checkout/index.html +22 -22
  419. package/app/s/custom-classes/index.html +22 -22
  420. package/app/s/custom-clients/index.html +22 -22
  421. package/app/s/custom-events/index.html +22 -22
  422. package/app/s/custom-fleet/index.html +22 -22
  423. package/app/s/custom-giving/index.html +22 -22
  424. package/app/s/custom-jobs/index.html +22 -22
  425. package/app/s/custom-kitchen/index.html +22 -22
  426. package/app/s/custom-material/index.html +22 -22
  427. package/app/s/custom-meetings/index.html +22 -22
  428. package/app/s/custom-members/index.html +22 -22
  429. package/app/s/custom-paint/index.html +82 -0
  430. package/app/s/custom-parts/index.html +22 -22
  431. package/app/s/custom-rentals/index.html +22 -22
  432. package/app/s/custom-roastery/index.html +22 -22
  433. package/app/s/custom-schedule/index.html +22 -22
  434. package/app/s/custom-shelf/index.html +22 -22
  435. package/app/s/custom-shop/index.html +22 -22
  436. package/app/s/custom-wholesale/index.html +22 -22
  437. package/app/s/custom-work/index.html +22 -22
  438. package/app/s/custom-yard/index.html +22 -22
  439. package/app/s/section-access-control/index.html +22 -22
  440. package/app/s/section-account-security/index.html +22 -22
  441. package/app/s/section-accounting/index.html +22 -22
  442. package/app/s/section-activity/index.html +22 -22
  443. package/app/s/section-agreements/index.html +22 -22
  444. package/app/s/section-analytics/index.html +22 -22
  445. package/app/s/section-assets/index.html +22 -22
  446. package/app/s/section-billing/index.html +22 -22
  447. package/app/s/section-calendar/index.html +22 -22
  448. package/app/s/section-catalog/index.html +22 -22
  449. package/app/s/section-chat.assistant/index.html +22 -22
  450. package/app/s/section-comments/index.html +22 -22
  451. package/app/s/section-fields.form-customization/index.html +22 -22
  452. package/app/s/section-ingestion/index.html +22 -22
  453. package/app/s/section-integrations/index.html +22 -22
  454. package/app/s/section-messages/index.html +22 -22
  455. package/app/s/section-more/index.html +22 -22
  456. package/app/s/section-operations/index.html +22 -22
  457. package/app/s/section-projects/index.html +22 -22
  458. package/app/s/section-purchasing/index.html +22 -22
  459. package/app/s/section-reports.materialized/index.html +22 -22
  460. package/app/s/section-reports.runtime/index.html +22 -22
  461. package/app/s/section-sales/index.html +22 -22
  462. package/app/s/section-taxonomy/index.html +22 -22
  463. package/app/s/section-team/index.html +22 -22
  464. package/app/s/section-work/index.html +22 -22
  465. package/dist/ai/instance.d.ts.map +1 -1
  466. package/dist/ai/instance.js +9 -1
  467. package/dist/assistant/change.d.ts +13 -3
  468. package/dist/assistant/change.d.ts.map +1 -1
  469. package/dist/assistant/change.js +18 -3
  470. package/dist/assistant/prompt.d.ts +6 -1
  471. package/dist/assistant/prompt.d.ts.map +1 -1
  472. package/dist/assistant/prompt.js +13 -1
  473. package/dist/assistant/session.svelte.d.ts +5 -0
  474. package/dist/assistant/session.svelte.d.ts.map +1 -1
  475. package/dist/assistant/session.svelte.js +1 -0
  476. package/dist/assistant/transport.d.ts +24 -1
  477. package/dist/assistant/transport.d.ts.map +1 -1
  478. package/dist/assistant/transport.js +57 -8
  479. package/dist/catalog/catalog.json +1354 -51
  480. package/dist/components/BrowserAssistant.svelte +0 -2
  481. package/dist/components/BrowserAssistant.svelte.d.ts.map +1 -1
  482. package/dist/components/CookbooksPanel.svelte +101 -21
  483. package/dist/components/CookbooksPanel.svelte.d.ts.map +1 -1
  484. package/dist/data/format.d.ts.map +1 -1
  485. package/dist/data/format.js +3 -0
  486. package/dist/data/money.d.ts +1 -1
  487. package/dist/data/money.js +2 -2
  488. package/dist/data/packs.d.ts +0 -1
  489. package/dist/data/packs.d.ts.map +1 -1
  490. package/dist/data/packs.js +835 -1
  491. package/dist/library/apply.d.ts +7 -3
  492. package/dist/library/apply.d.ts.map +1 -1
  493. package/dist/library/apply.js +19 -6
  494. package/dist/library/document.d.ts +9 -0
  495. package/dist/library/document.d.ts.map +1 -1
  496. package/dist/library/document.js +29 -0
  497. package/dist/library/icons.d.ts.map +1 -1
  498. package/dist/library/icons.js +15 -0
  499. package/dist/library/index.d.ts +4 -1
  500. package/dist/library/index.d.ts.map +1 -1
  501. package/dist/library/index.js +9 -2
  502. package/dist/library/library.json +919 -14
  503. package/dist/library/state.svelte.d.ts +5 -1
  504. package/dist/library/state.svelte.d.ts.map +1 -1
  505. package/dist/library/state.svelte.js +12 -1
  506. package/dist/library/view.svelte.d.ts +41 -0
  507. package/dist/library/view.svelte.d.ts.map +1 -0
  508. package/dist/library/view.svelte.js +67 -0
  509. package/dist/planner/Planner.svelte +79 -2
  510. package/dist/planner/Planner.svelte.d.ts.map +1 -1
  511. package/dist/planner/PlannerControls.svelte +21 -2
  512. package/dist/planner/PlannerControls.svelte.d.ts.map +1 -1
  513. package/dist/planner/assistant.d.ts.map +1 -1
  514. package/dist/planner/assistant.js +9 -0
  515. package/dist/planner/commands/adapter.d.ts.map +1 -1
  516. package/dist/planner/commands/adapter.js +10 -3
  517. package/dist/planner/commands/controller.svelte.d.ts.map +1 -1
  518. package/dist/planner/commands/controller.svelte.js +2 -1
  519. package/dist/recipes/scope.d.ts +23 -0
  520. package/dist/recipes/scope.d.ts.map +1 -1
  521. package/dist/recipes/scope.js +20 -0
  522. package/dist/smrt-version.d.ts +1 -1
  523. package/dist/smrt-version.js +1 -1
  524. package/package.json +56 -56
  525. package/app/_app/immutable/assets/2.Djk1H2wk.css +0 -1
  526. package/app/_app/immutable/chunks/BV_A2GBw.js +0 -24
  527. package/app/_app/immutable/chunks/CbCYY1ps.js +0 -1
  528. package/app/_app/immutable/chunks/DD4mX3od.js +0 -1
  529. package/app/_app/immutable/chunks/DgkBKeKW.js +0 -4
  530. package/app/_app/immutable/chunks/DvUWb_GS.js +0 -1
  531. package/app/_app/immutable/chunks/M81UeXT1.js +0 -1
  532. package/app/_app/immutable/chunks/g7M7feZg.js +0 -1
  533. package/app/_app/immutable/chunks/r7IFcw-O.js +0 -1
  534. package/app/_app/immutable/entry/start.BixveMT0.js +0 -1
  535. package/app/_app/immutable/nodes/0._WFh95JB.js +0 -9
  536. package/app/_app/immutable/nodes/2.D3Lg90Nn.js +0 -24
  537. /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.BixveMT0.js" rel="modulepreload">
7
- <link href="../../_app/immutable/chunks/g7M7feZg.js" rel="modulepreload">
6
+ <link href="../../_app/immutable/entry/start.DnB4rZdO.js" rel="modulepreload">
7
+ <link href="../../_app/immutable/chunks/Burj9UYU.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.BOdcGXnx.js" rel="modulepreload">
11
+ <link href="../../_app/immutable/entry/app.C-mGsUDb.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._WFh95JB.js" rel="modulepreload">
15
- <link href="../../_app/immutable/chunks/DVQPWAnI.js" rel="modulepreload">
14
+ <link href="../../_app/immutable/nodes/0.CG8nFTeW.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/rkUL-DlL.js" rel="modulepreload">
17
+ <link href="../../_app/immutable/chunks/gnVUq1Tr.js" rel="modulepreload">
18
18
  <link href="../../_app/immutable/chunks/DK8Blf1Y.js" rel="modulepreload">
19
- <link href="../../_app/immutable/chunks/DsY7g8iJ.js" rel="modulepreload">
19
+ <link href="../../_app/immutable/chunks/BMRtN-eN.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/DD4mX3od.js" rel="modulepreload">
22
+ <link href="../../_app/immutable/chunks/DEwvWTFM.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/BJKoxDbG.js" rel="modulepreload">
27
- <link href="../../_app/immutable/chunks/DvUWb_GS.js" rel="modulepreload">
28
- <link href="../../_app/immutable/chunks/r7IFcw-O.js" rel="modulepreload">
29
- <link href="../../_app/immutable/chunks/CZwkvsZI.js" rel="modulepreload">
26
+ <link href="../../_app/immutable/chunks/XlsfHlOd.js" rel="modulepreload">
27
+ <link href="../../_app/immutable/chunks/C7z2g6fG.js" rel="modulepreload">
28
+ <link href="../../_app/immutable/chunks/Bc_SIIIS.js" rel="modulepreload">
29
+ <link href="../../_app/immutable/chunks/CdPJK-gf.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/CbCYY1ps.js" rel="modulepreload">
33
- <link href="../../_app/immutable/chunks/2l76O8yg.js" rel="modulepreload">
34
- <link href="../../_app/immutable/chunks/Bz0ybtg3.js" rel="modulepreload">
35
- <link href="../../_app/immutable/chunks/BfPYbnRI.js" rel="modulepreload">
36
- <link href="../../_app/immutable/chunks/CF503c7E.js" rel="modulepreload">
32
+ <link href="../../_app/immutable/chunks/DCr75fDJ.js" rel="modulepreload">
33
+ <link href="../../_app/immutable/chunks/8vF2REci.js" rel="modulepreload">
34
+ <link href="../../_app/immutable/chunks/D8D_RStZ.js" rel="modulepreload">
35
+ <link href="../../_app/immutable/chunks/Ckc_1feF.js" rel="modulepreload">
36
+ <link href="../../_app/immutable/chunks/VCg3x54j.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.CEBy0En2.js" rel="modulepreload">
39
+ <link href="../../_app/immutable/nodes/14.DnBBJxxq.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.DePeap37.css" rel="stylesheet">
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
- __sveltekit_1rqc3rz = {
61
+ __sveltekit_1y8xily = {
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.BixveMT0.js"),
69
- import("../../_app/immutable/entry/app.BOdcGXnx.js")
68
+ import("../../_app/immutable/entry/start.DnB4rZdO.js"),
69
+ import("../../_app/immutable/entry/app.C-mGsUDb.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.BixveMT0.js" rel="modulepreload">
7
- <link href="../../_app/immutable/chunks/g7M7feZg.js" rel="modulepreload">
6
+ <link href="../../_app/immutable/entry/start.DnB4rZdO.js" rel="modulepreload">
7
+ <link href="../../_app/immutable/chunks/Burj9UYU.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.BOdcGXnx.js" rel="modulepreload">
11
+ <link href="../../_app/immutable/entry/app.C-mGsUDb.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._WFh95JB.js" rel="modulepreload">
15
- <link href="../../_app/immutable/chunks/DVQPWAnI.js" rel="modulepreload">
14
+ <link href="../../_app/immutable/nodes/0.CG8nFTeW.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/rkUL-DlL.js" rel="modulepreload">
17
+ <link href="../../_app/immutable/chunks/gnVUq1Tr.js" rel="modulepreload">
18
18
  <link href="../../_app/immutable/chunks/DK8Blf1Y.js" rel="modulepreload">
19
- <link href="../../_app/immutable/chunks/DsY7g8iJ.js" rel="modulepreload">
19
+ <link href="../../_app/immutable/chunks/BMRtN-eN.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/DD4mX3od.js" rel="modulepreload">
22
+ <link href="../../_app/immutable/chunks/DEwvWTFM.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/BJKoxDbG.js" rel="modulepreload">
27
- <link href="../../_app/immutable/chunks/DvUWb_GS.js" rel="modulepreload">
28
- <link href="../../_app/immutable/chunks/r7IFcw-O.js" rel="modulepreload">
29
- <link href="../../_app/immutable/chunks/CZwkvsZI.js" rel="modulepreload">
26
+ <link href="../../_app/immutable/chunks/XlsfHlOd.js" rel="modulepreload">
27
+ <link href="../../_app/immutable/chunks/C7z2g6fG.js" rel="modulepreload">
28
+ <link href="../../_app/immutable/chunks/Bc_SIIIS.js" rel="modulepreload">
29
+ <link href="../../_app/immutable/chunks/CdPJK-gf.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/CbCYY1ps.js" rel="modulepreload">
33
- <link href="../../_app/immutable/chunks/2l76O8yg.js" rel="modulepreload">
34
- <link href="../../_app/immutable/chunks/Bz0ybtg3.js" rel="modulepreload">
35
- <link href="../../_app/immutable/chunks/BfPYbnRI.js" rel="modulepreload">
36
- <link href="../../_app/immutable/chunks/CF503c7E.js" rel="modulepreload">
32
+ <link href="../../_app/immutable/chunks/DCr75fDJ.js" rel="modulepreload">
33
+ <link href="../../_app/immutable/chunks/8vF2REci.js" rel="modulepreload">
34
+ <link href="../../_app/immutable/chunks/D8D_RStZ.js" rel="modulepreload">
35
+ <link href="../../_app/immutable/chunks/Ckc_1feF.js" rel="modulepreload">
36
+ <link href="../../_app/immutable/chunks/VCg3x54j.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.CEBy0En2.js" rel="modulepreload">
39
+ <link href="../../_app/immutable/nodes/14.DnBBJxxq.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.DePeap37.css" rel="stylesheet">
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
- __sveltekit_1rqc3rz = {
61
+ __sveltekit_1y8xily = {
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.BixveMT0.js"),
69
- import("../../_app/immutable/entry/app.BOdcGXnx.js")
68
+ import("../../_app/immutable/entry/start.DnB4rZdO.js"),
69
+ import("../../_app/immutable/entry/app.C-mGsUDb.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,SAgBlB,CAAC"}
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"}
@@ -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
- /** A sentence for the chat saying what changed, by recipe label. */
112
- export declare function describeChange(applied: AppliedChange, recipes: readonly Pick<Recipe, 'id' | 'label'>[]): string;
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":"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"}
1
+ {"version":3,"file":"change.d.ts","sourceRoot":"","sources":["../../src/lib/assistant/change.ts"],"names":[],"mappings":"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"}
@@ -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
- /** A sentence for the chat saying what changed, by recipe label. */
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 label = (id) => recipes.find((recipe) => recipe.id === id)?.label ?? id;
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
- }): string;
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,GAChD,MAAM,CA2GR"}
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"}
@@ -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;CAClC;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;IAgCnC;;;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"}
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 never navigates.
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,EAAqB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,sEAAsE;AACtE,MAAM,WAAW,SAAS;IACxB,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE;YAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACvE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;QAClD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GACA,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,KAAK,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACrC,iFAAiF;IACjF,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;QAC3C,yEAAyE;QACzE,OAAO,CAAC,IAAI,OAAO,CAAC;KACrB,CAAC;IACF,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,yEAAyE;IACzE,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE;QACX,MAAM,CACJ,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,aAAa,CAAC,EAAE,MAAM,GACrB,YAAY,CAAC;KACjB,CAAC;IACF;;;;;OAKG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IAC3C,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,qFAAqF;IACrF,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,uCAAuC;IACvC,KAAK,IAAI,IAAI,CAAC;CACf;AAGD,wCAAwC;AACxC,eAAO,MAAM,QAAQ,kCAAkC,CAAC;AAyExD;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,uBAAuB,GAC/B,yBAAyB,CAsM3B"}
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 never navigates.
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 = [line, summary].filter(Boolean).join(' ');
184
- if (line)
185
- options.onReply?.(line);
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 || 'Done.', refs };
237
+ return { content: reply, refs };
189
238
  }
190
239
  catch (error) {
191
240
  if (controller?.signal.aborted)