@happyvertical/smrt-planner 0.57.12 → 0.57.13

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 (619) hide show
  1. package/README.md +136 -0
  2. package/agents/assistant.md +49 -0
  3. package/agents/commands.md +2 -2
  4. package/agents/cookbook.md +3 -1
  5. package/agents/shell.md +9 -7
  6. package/app/404.html +21 -21
  7. package/app/_app/immutable/assets/2.D3Ee82Nk.css +1 -0
  8. package/app/_app/immutable/assets/AppShell.Y0ysizZK.css +1 -0
  9. package/app/_app/immutable/assets/{icons.BDx21rPt.css → icons.DFiHs25V.css} +1 -1
  10. package/app/_app/immutable/chunks/3dpUaAuL.js +1 -0
  11. package/app/_app/immutable/chunks/{BxyJ_Q7v.js → B7IsOdeU.js} +1 -1
  12. package/app/_app/immutable/chunks/{8MGlmWc0.js → BErRmq61.js} +1 -1
  13. package/app/_app/immutable/chunks/BFzGVZ83.js +1 -0
  14. package/app/_app/immutable/chunks/{DU3stPaX.js → BLDa0UGj.js} +1 -1
  15. package/app/_app/immutable/chunks/BMXU0KTB.js +1 -0
  16. package/app/_app/immutable/chunks/{B88mVEob.js → B_D0zDev.js} +1 -1
  17. package/app/_app/immutable/chunks/{2dmW8nz3.js → BmSVFsOo.js} +2 -2
  18. package/app/_app/immutable/chunks/{CsaWd8kG.js → Bs5WxZDd.js} +1 -1
  19. package/app/_app/immutable/chunks/By9nPosf.js +1 -0
  20. package/app/_app/immutable/chunks/CB9iikrD.js +4 -0
  21. package/app/_app/immutable/chunks/{pEiNEXSh.js → CBxjHrPs.js} +1 -1
  22. package/app/_app/immutable/chunks/CO-Ek-HE.js +1 -0
  23. package/app/_app/immutable/chunks/{oV81RcfI.js → COQfu_Wm.js} +1 -1
  24. package/app/_app/immutable/chunks/{DDtOXC2p.js → CQ3bytDT.js} +1 -1
  25. package/app/_app/immutable/chunks/{D4791-Ex.js → CQOJdp0U.js} +1 -1
  26. package/app/_app/immutable/chunks/{CQFoqqzT.js → CT1UgNrl.js} +1 -1
  27. package/app/_app/immutable/chunks/CrMrQCWf.js +1 -0
  28. package/app/_app/immutable/chunks/{BTm4M8Ke.js → CwTLkgbW.js} +1 -1
  29. package/app/_app/immutable/chunks/{BCvXlTRf.js → CyuTEXp6.js} +1 -1
  30. package/app/_app/immutable/chunks/CzqXjCHa.js +16 -0
  31. package/app/_app/immutable/chunks/DMDdJExi.js +10 -0
  32. package/app/_app/immutable/chunks/{_CcVkMEQ.js → DPbSjNti.js} +1 -1
  33. package/app/_app/immutable/chunks/{BgtC60Dj.js → DSKWzY3b.js} +2 -2
  34. package/app/_app/immutable/chunks/{ByKA-VaR.js → DcYfN1RJ.js} +1 -1
  35. package/app/_app/immutable/chunks/KILEpkAY.js +26 -0
  36. package/app/_app/immutable/chunks/Uwmgg65i.js +1 -0
  37. package/app/_app/immutable/chunks/XcCBLn0p.js +2 -0
  38. package/app/_app/immutable/chunks/{bBI0F4nt.js → aqYPhamJ.js} +1 -1
  39. package/app/_app/immutable/chunks/{38SS-Q6Y.js → c4Y8im5f.js} +22 -22
  40. package/app/_app/immutable/chunks/{DbH3RuTE.js → gObjQOc6.js} +1 -1
  41. package/app/_app/immutable/chunks/{BQgbhyQu.js → jY83yXmZ.js} +1 -1
  42. package/app/_app/immutable/chunks/k-HWowNp.js +2 -0
  43. package/app/_app/immutable/entry/{app.C8En00Ny.js → app.BFvVYIAu.js} +2 -2
  44. package/app/_app/immutable/entry/start.CjnnBAhi.js +1 -0
  45. package/app/_app/immutable/nodes/0.BV0A9Ub7.js +7 -0
  46. package/app/_app/immutable/nodes/{1.CoV_40km.js → 1.B8lnDjjl.js} +1 -1
  47. package/app/_app/immutable/nodes/10.Dga6nV_M.js +3 -0
  48. package/app/_app/immutable/nodes/{11.Csg6XAcG.js → 11.SN8IoTqm.js} +1 -1
  49. package/app/_app/immutable/nodes/{12.CuTHLuEu.js → 12.CmhheIVU.js} +1 -1
  50. package/app/_app/immutable/nodes/{13.CNdfx5uO.js → 13.Eh2aPgMP.js} +1 -1
  51. package/app/_app/immutable/nodes/14.ReLktgLz.js +1 -0
  52. package/app/_app/immutable/nodes/2.Dc32ZcWd.js +22 -0
  53. package/app/_app/immutable/nodes/{3.DC8-sgUI.js → 3.CuIErDvM.js} +1 -1
  54. package/app/_app/immutable/nodes/{4.DcX0DIX9.js → 4.62S4SMa5.js} +1 -1
  55. package/app/_app/immutable/nodes/{5.Opk77twi.js → 5.DZx2uQQp.js} +1 -1
  56. package/app/_app/immutable/nodes/{6.Uk9tXC7t.js → 6.Dzh2j8Eu.js} +1 -1
  57. package/app/_app/immutable/nodes/7.BndE5mEj.js +1 -0
  58. package/app/_app/immutable/nodes/{8.CacSxuCP.js → 8.B79dJpLW.js} +1 -1
  59. package/app/_app/immutable/nodes/{9.z7vXbrbH.js → 9.Di1DpDGF.js} +1 -1
  60. package/app/_app/version.json +1 -1
  61. package/app/advanced-styles/index.html +24 -24
  62. package/app/ai/index.html +28 -28
  63. package/app/blueprint/index.html +22 -22
  64. package/app/cookbook/index.html +22 -22
  65. package/app/index.html +38 -40
  66. package/app/m/ads/AdDeliveryTier/index.html +27 -27
  67. package/app/m/ads/AdEvent/index.html +27 -27
  68. package/app/m/ads/AdFormat/index.html +27 -27
  69. package/app/m/ads/AdGroup/index.html +27 -27
  70. package/app/m/ads/AdVariation/index.html +27 -27
  71. package/app/m/analytics/AnalyticsDataStream/index.html +27 -27
  72. package/app/m/analytics/AnalyticsEvent/index.html +27 -27
  73. package/app/m/analytics/AnalyticsProperty/index.html +27 -27
  74. package/app/m/analytics/AnalyticsReport/index.html +27 -27
  75. package/app/m/approvals/ApprovalEvent/index.html +27 -27
  76. package/app/m/approvals/ApprovalPolicy/index.html +27 -27
  77. package/app/m/approvals/ApprovalRequest/index.html +27 -27
  78. package/app/m/assets/Asset/attachments/index.html +28 -28
  79. package/app/m/assets/Asset/index.html +27 -27
  80. package/app/m/assets/AssetAssociation/index.html +27 -27
  81. package/app/m/assets/AssetMetafield/index.html +27 -27
  82. package/app/m/assets/AssetStatus/index.html +27 -27
  83. package/app/m/assets/AssetType/index.html +27 -27
  84. package/app/m/assets/Folder/index.html +27 -27
  85. package/app/m/chat/AgentSession/index.html +27 -27
  86. package/app/m/chat/ChatMessage/index.html +27 -27
  87. package/app/m/chat/ChatParticipant/index.html +27 -27
  88. package/app/m/chat/ChatReaction/index.html +27 -27
  89. package/app/m/chat/ChatRoom/index.html +27 -27
  90. package/app/m/chat/ChatThread/index.html +27 -27
  91. package/app/m/chat/VoiceGatewayTurn/index.html +27 -27
  92. package/app/m/chat/VoiceSession/index.html +27 -27
  93. package/app/m/commerce/Agreement/index.html +27 -27
  94. package/app/m/commerce/Cart/index.html +27 -27
  95. package/app/m/commerce/Contract/index.html +27 -27
  96. package/app/m/commerce/ContractLineItem/index.html +27 -27
  97. package/app/m/commerce/Customer/index.html +27 -27
  98. package/app/m/commerce/DocumentTax/index.html +27 -27
  99. package/app/m/commerce/Estimate/index.html +27 -27
  100. package/app/m/commerce/Fulfillment/index.html +27 -27
  101. package/app/m/commerce/FulfillmentLineItem/index.html +27 -27
  102. package/app/m/commerce/HistoricalCustomerFunds/index.html +27 -27
  103. package/app/m/commerce/HistoricalCustomerFundsAllocation/index.html +27 -27
  104. package/app/m/commerce/HistoricalSalesLine/index.html +27 -27
  105. package/app/m/commerce/Invoice/index.html +27 -27
  106. package/app/m/commerce/InvoiceLineItem/index.html +27 -27
  107. package/app/m/commerce/Lease/index.html +27 -27
  108. package/app/m/commerce/LicenseSale/index.html +27 -27
  109. package/app/m/commerce/Order/index.html +27 -27
  110. package/app/m/commerce/Payment/index.html +27 -27
  111. package/app/m/commerce/PaymentAllocation/index.html +27 -27
  112. package/app/m/commerce/PaymentInstrument/index.html +27 -27
  113. package/app/m/commerce/PaymentIntent/index.html +27 -27
  114. package/app/m/commerce/Payout/index.html +27 -27
  115. package/app/m/commerce/ProductionOrder/index.html +27 -27
  116. package/app/m/commerce/PurchaseContract/index.html +27 -27
  117. package/app/m/commerce/PurchaseOrder/index.html +27 -27
  118. package/app/m/commerce/SalesContract/index.html +27 -27
  119. package/app/m/commerce/SupplierQuote/index.html +27 -27
  120. package/app/m/commerce/TaxCode/index.html +27 -27
  121. package/app/m/commerce/TaxComponent/index.html +27 -27
  122. package/app/m/commerce/TaxSettings/index.html +27 -27
  123. package/app/m/commerce/TaxSummaryReport/index.html +27 -27
  124. package/app/m/commerce/TenantPaymentAccount/index.html +27 -27
  125. package/app/m/commerce/Vendor/index.html +27 -27
  126. package/app/m/commerce/WholesaleOrder/index.html +27 -27
  127. package/app/m/content/Content/index.html +27 -27
  128. package/app/m/content/ContentContribution/index.html +27 -27
  129. package/app/m/content/ContentContributionAttachment/index.html +27 -27
  130. package/app/m/content/ContentContributionRevision/index.html +27 -27
  131. package/app/m/content/ContentContributionType/index.html +27 -27
  132. package/app/m/content/ContentContributor/index.html +27 -27
  133. package/app/m/content/ContentCorrection/index.html +27 -27
  134. package/app/m/content/ContentFeedSource/index.html +27 -27
  135. package/app/m/content/ContentGovernanceAssignment/index.html +27 -27
  136. package/app/m/content/ContentGovernancePolicy/index.html +27 -27
  137. package/app/m/content/ContentGovernanceProfile/index.html +27 -27
  138. package/app/m/content/ContentReference/index.html +27 -27
  139. package/app/m/content/ContentReview/index.html +27 -27
  140. package/app/m/content/ContentVersion/index.html +27 -27
  141. package/app/m/events/Event/index.html +27 -27
  142. package/app/m/events/EventParticipant/index.html +27 -27
  143. package/app/m/events/EventSeries/index.html +27 -27
  144. package/app/m/events/EventType/index.html +27 -27
  145. package/app/m/expenses/Expense/index.html +27 -27
  146. package/app/m/facts/Fact/index.html +27 -27
  147. package/app/m/facts/FactContent/index.html +27 -27
  148. package/app/m/facts/FactEvidence/index.html +27 -27
  149. package/app/m/facts/FactSource/index.html +27 -27
  150. package/app/m/facts/FactSubject/index.html +27 -27
  151. package/app/m/facts/FactTag/index.html +27 -27
  152. package/app/m/fields/FieldPolicy/index.html +27 -27
  153. package/app/m/fields/FieldPolicySuggestion/index.html +27 -27
  154. package/app/m/fields/FieldUsageCounter/index.html +27 -27
  155. package/app/m/images/Image/index.html +27 -27
  156. package/app/m/inventory/InventoryLocation/index.html +27 -27
  157. package/app/m/inventory/StockLevel/index.html +27 -27
  158. package/app/m/inventory/StockMovement/index.html +27 -27
  159. package/app/m/ledgers/Account/index.html +27 -27
  160. package/app/m/ledgers/Journal/index.html +27 -27
  161. package/app/m/ledgers/JournalEntry/index.html +27 -27
  162. package/app/m/ledgers/Ledger/index.html +27 -27
  163. package/app/m/manufacturing/Assembly/index.html +27 -27
  164. package/app/m/manufacturing/BillOfMaterials/index.html +27 -27
  165. package/app/m/manufacturing/BomLine/index.html +27 -27
  166. package/app/m/manufacturing/Operation/index.html +27 -27
  167. package/app/m/manufacturing/ProductionRun/index.html +27 -27
  168. package/app/m/manufacturing/ProductionRunCompletion/index.html +27 -27
  169. package/app/m/manufacturing/RoutingStep/index.html +27 -27
  170. package/app/m/marketing/Campaign/index.html +27 -27
  171. package/app/m/marketing/CampaignChannel/index.html +27 -27
  172. package/app/m/marketing/CampaignMetricSnapshot/index.html +27 -27
  173. package/app/m/messages/Account/index.html +27 -27
  174. package/app/m/messages/Attachment/index.html +27 -27
  175. package/app/m/messages/Blacklist/index.html +27 -27
  176. package/app/m/messages/Email/failed-sends/index.html +28 -28
  177. package/app/m/messages/Email/index.html +27 -27
  178. package/app/m/messages/Email/mailbox/index.html +28 -28
  179. package/app/m/messages/EmailAccount/index.html +27 -27
  180. package/app/m/messages/EmailAttachment/index.html +27 -27
  181. package/app/m/messages/EmailFolder/index.html +27 -27
  182. package/app/m/messages/Message/index.html +27 -27
  183. package/app/m/messages/MessagingEndpoint/index.html +27 -27
  184. package/app/m/messages/PersonaMessageRoute/index.html +27 -27
  185. package/app/m/messages/SlackAccount/index.html +27 -27
  186. package/app/m/messages/SlackMessage/index.html +27 -27
  187. package/app/m/messages/TelegramAccount/index.html +27 -27
  188. package/app/m/messages/Tweet/index.html +27 -27
  189. package/app/m/messages/TwitterAccount/index.html +27 -27
  190. package/app/m/messages/Whitelist/index.html +27 -27
  191. package/app/m/messages/ZulipAccount/index.html +27 -27
  192. package/app/m/places/Place/index.html +27 -27
  193. package/app/m/places/PlaceType/index.html +27 -27
  194. package/app/m/products/Category/index.html +27 -27
  195. package/app/m/products/Material/index.html +27 -27
  196. package/app/m/products/Product/index.html +27 -27
  197. package/app/m/products/Product/ingredients/index.html +28 -28
  198. package/app/m/products/ProductVariant/index.html +27 -27
  199. package/app/m/products/Sku/index.html +27 -27
  200. package/app/m/profiles/ApiKey/index.html +27 -27
  201. package/app/m/profiles/Bot/index.html +27 -27
  202. package/app/m/profiles/MagicLinkToken/index.html +27 -27
  203. package/app/m/profiles/NostrIdentity/index.html +27 -27
  204. package/app/m/profiles/OidcIdentity/index.html +27 -27
  205. package/app/m/profiles/Organization/index.html +27 -27
  206. package/app/m/profiles/Person/index.html +27 -27
  207. package/app/m/profiles/Profile/index.html +27 -27
  208. package/app/m/profiles/ProfileMetadata/index.html +27 -27
  209. package/app/m/profiles/ProfileMetafield/index.html +27 -27
  210. package/app/m/profiles/ProfileRelationship/index.html +27 -27
  211. package/app/m/profiles/ProfileRelationshipTerm/index.html +27 -27
  212. package/app/m/profiles/ProfileRelationshipType/index.html +27 -27
  213. package/app/m/profiles/ProfileType/index.html +27 -27
  214. package/app/m/projects/Comment/index.html +27 -27
  215. package/app/m/projects/Issue/index.html +27 -27
  216. package/app/m/projects/Label/index.html +27 -27
  217. package/app/m/projects/Project/index.html +27 -27
  218. package/app/m/projects/ProjectIntegration/index.html +27 -27
  219. package/app/m/projects/PullRequest/index.html +27 -27
  220. package/app/m/projects/Repository/index.html +27 -27
  221. package/app/m/properties/Property/index.html +27 -27
  222. package/app/m/properties/Zone/index.html +27 -27
  223. package/app/m/reports/RuntimeReport/index.html +27 -27
  224. package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +27 -27
  225. package/app/m/reports/SmrtReportLock/index.html +27 -27
  226. package/app/m/reports/SmrtReportRefreshTask/index.html +27 -27
  227. package/app/m/reports/SmrtReportRun/index.html +27 -27
  228. package/app/m/reports/SmrtReportSchedule/index.html +27 -27
  229. package/app/m/reports/SmrtReportWatermark/index.html +27 -27
  230. package/app/m/sales/Agreement/index.html +27 -27
  231. package/app/m/sales/AttributionException/index.html +27 -27
  232. package/app/m/sales/AttributionPolicy/index.html +27 -27
  233. package/app/m/sales/Commission/index.html +27 -27
  234. package/app/m/sales/CommissionAdjustment/index.html +27 -27
  235. package/app/m/sales/CommissionPayout/index.html +27 -27
  236. package/app/m/sales/CommissionPlan/index.html +27 -27
  237. package/app/m/sales/Earner/index.html +27 -27
  238. package/app/m/sales/EarnerSourceAttribution/index.html +27 -27
  239. package/app/m/sales/EarningEvent/index.html +27 -27
  240. package/app/m/sales/ExecutedAgreement/index.html +27 -27
  241. package/app/m/sales/Lead/index.html +27 -27
  242. package/app/m/sales/Opportunity/index.html +27 -27
  243. package/app/m/sales/OpportunityConversion/index.html +27 -27
  244. package/app/m/sales/PipelineDefinition/index.html +27 -27
  245. package/app/m/sales/PipelineStage/index.html +27 -27
  246. package/app/m/sales/Referral/index.html +27 -27
  247. package/app/m/sales/ReferralAgreement/index.html +27 -27
  248. package/app/m/sales/ReferralLink/index.html +27 -27
  249. package/app/m/sales/ReferralProgram/index.html +27 -27
  250. package/app/m/sales/ReferralTermSnapshot/index.html +27 -27
  251. package/app/m/sales/ReferralTouch/index.html +27 -27
  252. package/app/m/sales/Referrer/index.html +27 -27
  253. package/app/m/sales/SalesActivity/index.html +27 -27
  254. package/app/m/sales/SalesRepresentative/index.html +27 -27
  255. package/app/m/sites/Site/index.html +27 -27
  256. package/app/m/sites/SiteAgentBinding/index.html +27 -27
  257. package/app/m/social/OAuthState/index.html +27 -27
  258. package/app/m/social/SocialAccount/index.html +27 -27
  259. package/app/m/social/SocialPost/index.html +27 -27
  260. package/app/m/social/SocialPostAnalyticsSnapshot/index.html +27 -27
  261. package/app/m/subscriptions/BillingAdjustment/index.html +27 -27
  262. package/app/m/subscriptions/ClientCharge/index.html +27 -27
  263. package/app/m/subscriptions/CreditGrant/index.html +27 -27
  264. package/app/m/subscriptions/PricingRule/index.html +27 -27
  265. package/app/m/subscriptions/RetailCharge/index.html +27 -27
  266. package/app/m/subscriptions/SpendingPolicy/index.html +27 -27
  267. package/app/m/subscriptions/SubscriptionPlan/index.html +27 -27
  268. package/app/m/subscriptions/SubscriptionPlanVersion/index.html +27 -27
  269. package/app/m/subscriptions/TenantSubscription/index.html +27 -27
  270. package/app/m/subscriptions/TenantUsageMetric/index.html +27 -27
  271. package/app/m/support/ServiceTimeEntry/index.html +27 -27
  272. package/app/m/support/SupportAiRun/index.html +27 -27
  273. package/app/m/support/SupportAvailability/index.html +27 -27
  274. package/app/m/support/SupportCase/index.html +27 -27
  275. package/app/m/support/SupportCaseEvent/index.html +27 -27
  276. package/app/m/support/SupportChannelBinding/index.html +27 -27
  277. package/app/m/support/SupportCharge/index.html +27 -27
  278. package/app/m/support/SupportCompensation/index.html +27 -27
  279. package/app/m/support/SupportCompensationPlan/index.html +27 -27
  280. package/app/m/support/SupportEscalation/index.html +27 -27
  281. package/app/m/support/SupportInteraction/index.html +27 -27
  282. package/app/m/support/SupportPlan/index.html +27 -27
  283. package/app/m/support/SupportPolicy/index.html +27 -27
  284. package/app/m/support/SupportQualification/index.html +27 -27
  285. package/app/m/support/SupportServiceTarget/index.html +27 -27
  286. package/app/m/support/SupportSpecialist/index.html +27 -27
  287. package/app/m/support/SupportWorkLink/index.html +27 -27
  288. package/app/m/tags/Tag/index.html +27 -27
  289. package/app/m/tags/TagAlias/index.html +27 -27
  290. package/app/m/timesheets/AttendanceBreak/index.html +27 -27
  291. package/app/m/timesheets/AttendancePunch/index.html +27 -27
  292. package/app/m/timesheets/AttendanceSegment/index.html +27 -27
  293. package/app/m/timesheets/ServiceChargeSnapshot/index.html +27 -27
  294. package/app/m/timesheets/ServiceCompensationSnapshot/index.html +27 -27
  295. package/app/m/timesheets/ServiceTimeEntry/index.html +27 -27
  296. package/app/m/users/Group/index.html +27 -27
  297. package/app/m/users/GroupMember/index.html +27 -27
  298. package/app/m/users/GroupRole/index.html +27 -27
  299. package/app/m/users/Membership/index.html +27 -27
  300. package/app/m/users/MembershipOverride/index.html +27 -27
  301. package/app/m/users/Permission/index.html +27 -27
  302. package/app/m/users/Role/index.html +27 -27
  303. package/app/m/users/RolePermission/index.html +27 -27
  304. package/app/m/users/Session/index.html +27 -27
  305. package/app/m/users/Tenant/index.html +27 -27
  306. package/app/m/users/TenantIntegration/index.html +27 -27
  307. package/app/m/users/TenantPermissionOverride/index.html +27 -27
  308. package/app/m/users/User/index.html +27 -27
  309. package/app/m/video/Character/index.html +27 -27
  310. package/app/m/video/CharacterAsset/index.html +27 -27
  311. package/app/m/video/CompositeJob/index.html +27 -27
  312. package/app/m/video/Performer/index.html +27 -27
  313. package/app/m/video/PerformerAsset/index.html +27 -27
  314. package/app/m/video/Scene/index.html +27 -27
  315. package/app/m/video/SceneAsset/index.html +27 -27
  316. package/app/m/video/VideoComposition/index.html +27 -27
  317. package/app/m/video/VideoCompositionAsset/index.html +27 -27
  318. package/app/m/video/VideoSequence/index.html +27 -27
  319. package/app/m/video/VideoSequenceAsset/index.html +27 -27
  320. package/app/m/video/VideoShot/index.html +27 -27
  321. package/app/m/video/VideoShotAsset/index.html +27 -27
  322. package/app/m/video/VideoShotCharacter/index.html +27 -27
  323. package/app/m/video/VideoWorkflow/index.html +27 -27
  324. package/app/m/voice/VoiceOutput/index.html +27 -27
  325. package/app/m/voice/VoiceProfile/index.html +27 -27
  326. package/app/m/voice/VoiceSample/index.html +27 -27
  327. package/app/mcp.html +2 -2
  328. package/app/packages/ads/index.html +24 -24
  329. package/app/packages/analytics/index.html +24 -24
  330. package/app/packages/approvals/index.html +24 -24
  331. package/app/packages/assets/index.html +24 -24
  332. package/app/packages/chat/index.html +24 -24
  333. package/app/packages/comments/index.html +24 -24
  334. package/app/packages/commerce/index.html +24 -24
  335. package/app/packages/content/index.html +24 -24
  336. package/app/packages/events/index.html +24 -24
  337. package/app/packages/expenses/index.html +24 -24
  338. package/app/packages/facts/index.html +24 -24
  339. package/app/packages/fields/index.html +24 -24
  340. package/app/packages/human-resources/index.html +24 -24
  341. package/app/packages/images/index.html +24 -24
  342. package/app/packages/index.html +23 -23
  343. package/app/packages/ingestion/index.html +24 -24
  344. package/app/packages/inventory/index.html +24 -24
  345. package/app/packages/ledgers/index.html +24 -24
  346. package/app/packages/manufacturing/index.html +24 -24
  347. package/app/packages/marketing/index.html +24 -24
  348. package/app/packages/messages/index.html +24 -24
  349. package/app/packages/places/index.html +24 -24
  350. package/app/packages/preferences/index.html +24 -24
  351. package/app/packages/products/index.html +24 -24
  352. package/app/packages/profiles/index.html +24 -24
  353. package/app/packages/projects/index.html +24 -24
  354. package/app/packages/properties/index.html +24 -24
  355. package/app/packages/reports/index.html +24 -24
  356. package/app/packages/sales/index.html +24 -24
  357. package/app/packages/sites/index.html +24 -24
  358. package/app/packages/social/index.html +24 -24
  359. package/app/packages/subscriptions/index.html +24 -24
  360. package/app/packages/support/index.html +24 -24
  361. package/app/packages/tags/index.html +24 -24
  362. package/app/packages/timesheets/index.html +24 -24
  363. package/app/packages/users/index.html +24 -24
  364. package/app/packages/video/index.html +24 -24
  365. package/app/packages/voice/index.html +24 -24
  366. package/app/packages/webhooks/index.html +24 -24
  367. package/app/recipes/account-access/help/index.html +24 -24
  368. package/app/recipes/account-access/index.html +26 -26
  369. package/app/recipes/activity/help/index.html +24 -24
  370. package/app/recipes/activity/index.html +26 -26
  371. package/app/recipes/agreements/help/index.html +24 -24
  372. package/app/recipes/agreements/index.html +26 -26
  373. package/app/recipes/analytics.reports/help/index.html +24 -24
  374. package/app/recipes/analytics.reports/index.html +26 -26
  375. package/app/recipes/assets/help/index.html +24 -24
  376. package/app/recipes/assets/index.html +26 -26
  377. package/app/recipes/billing/help/index.html +24 -24
  378. package/app/recipes/billing/index.html +26 -26
  379. package/app/recipes/chat.assistant/help/index.html +24 -24
  380. package/app/recipes/chat.assistant/index.html +26 -26
  381. package/app/recipes/comments/help/index.html +24 -24
  382. package/app/recipes/comments/index.html +26 -26
  383. package/app/recipes/commerce.customers/help/index.html +24 -24
  384. package/app/recipes/commerce.customers/index.html +26 -26
  385. package/app/recipes/commerce.estimates/help/index.html +24 -24
  386. package/app/recipes/commerce.estimates/index.html +26 -26
  387. package/app/recipes/commerce.purchases/help/index.html +24 -24
  388. package/app/recipes/commerce.purchases/index.html +26 -26
  389. package/app/recipes/commerce.sales/help/index.html +24 -24
  390. package/app/recipes/commerce.sales/index.html +26 -26
  391. package/app/recipes/commerce.vendors/help/index.html +24 -24
  392. package/app/recipes/commerce.vendors/index.html +26 -26
  393. package/app/recipes/commerce.wholesale/help/index.html +24 -24
  394. package/app/recipes/commerce.wholesale/index.html +26 -26
  395. package/app/recipes/events.calendar/help/index.html +24 -24
  396. package/app/recipes/events.calendar/index.html +26 -26
  397. package/app/recipes/expenses.tracking/help/index.html +24 -24
  398. package/app/recipes/expenses.tracking/index.html +26 -26
  399. package/app/recipes/fields.form-customization/help/index.html +24 -24
  400. package/app/recipes/fields.form-customization/index.html +26 -26
  401. package/app/recipes/ingestion/help/index.html +24 -24
  402. package/app/recipes/ingestion/index.html +26 -26
  403. package/app/recipes/integrations/help/index.html +24 -24
  404. package/app/recipes/integrations/index.html +26 -26
  405. package/app/recipes/inventory.stock/help/index.html +24 -24
  406. package/app/recipes/inventory.stock/index.html +26 -26
  407. package/app/recipes/ledgers.bookkeeping/help/index.html +24 -24
  408. package/app/recipes/ledgers.bookkeeping/index.html +26 -26
  409. package/app/recipes/messages/help/index.html +24 -24
  410. package/app/recipes/messages/index.html +26 -26
  411. package/app/recipes/products/help/index.html +24 -24
  412. package/app/recipes/products/index.html +26 -26
  413. package/app/recipes/projects.tracker/help/index.html +24 -24
  414. package/app/recipes/projects.tracker/index.html +26 -26
  415. package/app/recipes/reports.materialized/help/index.html +24 -24
  416. package/app/recipes/reports.materialized/index.html +26 -26
  417. package/app/recipes/reports.runtime/help/index.html +24 -24
  418. package/app/recipes/reports.runtime/index.html +26 -26
  419. package/app/recipes/sales.pipeline/help/index.html +24 -24
  420. package/app/recipes/sales.pipeline/index.html +26 -26
  421. package/app/recipes/tags.taxonomy/help/index.html +24 -24
  422. package/app/recipes/tags.taxonomy/index.html +26 -26
  423. package/app/recipes/team-collaboration/help/index.html +24 -24
  424. package/app/recipes/team-collaboration/index.html +26 -26
  425. package/app/recipes/timesheets.time-entries/help/index.html +24 -24
  426. package/app/recipes/timesheets.time-entries/index.html +26 -26
  427. package/app/s/custom-accounts/index.html +23 -23
  428. package/app/s/custom-appointments/index.html +23 -23
  429. package/app/s/custom-billing/index.html +23 -23
  430. package/app/s/custom-bookings/index.html +23 -23
  431. package/app/s/custom-buying/index.html +23 -23
  432. package/app/s/custom-checkout/index.html +23 -23
  433. package/app/s/custom-classes/index.html +23 -23
  434. package/app/s/custom-clients/index.html +23 -23
  435. package/app/s/custom-events/index.html +23 -23
  436. package/app/s/custom-fleet/index.html +23 -23
  437. package/app/s/custom-gigs/index.html +23 -23
  438. package/app/s/custom-giving/index.html +23 -23
  439. package/app/s/custom-instruments/index.html +23 -23
  440. package/app/s/custom-jobs/index.html +23 -23
  441. package/app/s/custom-kitchen/index.html +23 -23
  442. package/app/s/custom-lessons/index.html +23 -23
  443. package/app/s/custom-material/index.html +23 -23
  444. package/app/s/custom-meetings/index.html +23 -23
  445. package/app/s/custom-members/index.html +23 -23
  446. package/app/s/custom-merch/index.html +23 -23
  447. package/app/s/custom-money/index.html +23 -23
  448. package/app/s/custom-paint/index.html +23 -23
  449. package/app/s/custom-parts/index.html +23 -23
  450. package/app/s/custom-rentals/index.html +23 -23
  451. package/app/s/custom-roastery/index.html +23 -23
  452. package/app/s/custom-schedule/index.html +23 -23
  453. package/app/s/custom-shelf/index.html +23 -23
  454. package/app/s/custom-shop/index.html +23 -23
  455. package/app/s/custom-students/index.html +23 -23
  456. package/app/s/custom-wholesale/index.html +23 -23
  457. package/app/s/custom-work/index.html +23 -23
  458. package/app/s/custom-yard/index.html +23 -23
  459. package/app/s/section-access-control/index.html +23 -23
  460. package/app/s/section-account-security/index.html +23 -23
  461. package/app/s/section-accounting/index.html +23 -23
  462. package/app/s/section-activity/index.html +23 -23
  463. package/app/s/section-agreements/index.html +23 -23
  464. package/app/s/section-analytics/index.html +23 -23
  465. package/app/s/section-assets/index.html +23 -23
  466. package/app/s/section-billing/index.html +23 -23
  467. package/app/s/section-calendar/index.html +23 -23
  468. package/app/s/section-catalog/index.html +23 -23
  469. package/app/s/section-chat.assistant/index.html +23 -23
  470. package/app/s/section-comments/index.html +23 -23
  471. package/app/s/section-fields.form-customization/index.html +23 -23
  472. package/app/s/section-ingestion/index.html +23 -23
  473. package/app/s/section-integrations/index.html +23 -23
  474. package/app/s/section-messages/index.html +23 -23
  475. package/app/s/section-more/index.html +23 -23
  476. package/app/s/section-operations/index.html +23 -23
  477. package/app/s/section-projects/index.html +23 -23
  478. package/app/s/section-purchasing/index.html +23 -23
  479. package/app/s/section-reports.materialized/index.html +23 -23
  480. package/app/s/section-reports.runtime/index.html +23 -23
  481. package/app/s/section-sales/index.html +23 -23
  482. package/app/s/section-taxonomy/index.html +23 -23
  483. package/app/s/section-team/index.html +23 -23
  484. package/app/s/section-work/index.html +23 -23
  485. package/dist/ai/instance.d.ts.map +1 -1
  486. package/dist/ai/instance.js +2 -0
  487. package/dist/assistant/change.d.ts +2 -0
  488. package/dist/assistant/change.d.ts.map +1 -1
  489. package/dist/assistant/change.js +5 -0
  490. package/dist/assistant/coaching.d.ts +7 -0
  491. package/dist/assistant/coaching.d.ts.map +1 -0
  492. package/dist/assistant/coaching.js +42 -0
  493. package/dist/assistant/prompt.d.ts.map +1 -1
  494. package/dist/assistant/prompt.js +1 -0
  495. package/dist/assistant/session.svelte.d.ts +4 -1
  496. package/dist/assistant/session.svelte.d.ts.map +1 -1
  497. package/dist/assistant/session.svelte.js +5 -1
  498. package/dist/assistant/starters.d.ts +7 -0
  499. package/dist/assistant/starters.d.ts.map +1 -0
  500. package/dist/assistant/starters.js +33 -0
  501. package/dist/assistant/transport.d.ts +37 -2
  502. package/dist/assistant/transport.d.ts.map +1 -1
  503. package/dist/assistant/transport.js +257 -56
  504. package/dist/catalog/catalog.json +38 -38
  505. package/dist/components/BrowserAssistant.svelte +20 -0
  506. package/dist/components/BrowserAssistant.svelte.d.ts.map +1 -1
  507. package/dist/components/ExportPanel.svelte +176 -118
  508. package/dist/components/ExportPanel.svelte.d.ts +8 -0
  509. package/dist/components/ExportPanel.svelte.d.ts.map +1 -1
  510. package/dist/components/HeaderIconLink.svelte +8 -0
  511. package/dist/components/HeaderIconLink.svelte.d.ts +1 -0
  512. package/dist/components/HeaderIconLink.svelte.d.ts.map +1 -1
  513. package/dist/components/ProjectControls.svelte +133 -0
  514. package/dist/components/ProjectControls.svelte.d.ts +15 -0
  515. package/dist/components/ProjectControls.svelte.d.ts.map +1 -0
  516. package/dist/components/SectionOverview.svelte +4 -5
  517. package/dist/components/SectionOverview.svelte.d.ts +1 -1
  518. package/dist/components/SectionOverview.svelte.d.ts.map +1 -1
  519. package/dist/components/SettingsPanel.svelte +37 -1
  520. package/dist/components/SettingsPanel.svelte.d.ts +7 -1
  521. package/dist/components/SettingsPanel.svelte.d.ts.map +1 -1
  522. package/dist/cookbook/file.d.ts +5 -0
  523. package/dist/cookbook/file.d.ts.map +1 -1
  524. package/dist/cookbook/file.js +9 -2
  525. package/dist/cookbook/store.svelte.d.ts +4 -1
  526. package/dist/cookbook/store.svelte.d.ts.map +1 -1
  527. package/dist/cookbook/store.svelte.js +9 -10
  528. package/dist/core/index.d.ts +1 -0
  529. package/dist/core/index.d.ts.map +1 -1
  530. package/dist/core/index.js +1 -0
  531. package/dist/core/prompt.d.ts.map +1 -1
  532. package/dist/core/prompt.js +10 -0
  533. package/dist/core/reply.d.ts +2 -0
  534. package/dist/core/reply.d.ts.map +1 -1
  535. package/dist/core/reply.js +4 -0
  536. package/dist/data/packs.d.ts.map +1 -1
  537. package/dist/data/packs.js +14 -7
  538. package/dist/data/planner-source.d.ts.map +1 -1
  539. package/dist/data/planner-source.js +4 -3
  540. package/dist/data/sample-context.d.ts +84 -0
  541. package/dist/data/sample-context.d.ts.map +1 -0
  542. package/dist/data/sample-context.js +106 -0
  543. package/dist/data/source.d.ts.map +1 -1
  544. package/dist/data/source.js +2 -0
  545. package/dist/index.d.ts +8 -1
  546. package/dist/index.d.ts.map +1 -1
  547. package/dist/index.js +3 -0
  548. package/dist/library/state.svelte.d.ts.map +1 -1
  549. package/dist/library/state.svelte.js +3 -3
  550. package/dist/overviews/definitions.d.ts +2 -2
  551. package/dist/overviews/definitions.d.ts.map +1 -1
  552. package/dist/overviews/definitions.js +19 -31
  553. package/dist/overviews/page.d.ts.map +1 -1
  554. package/dist/overviews/page.js +4 -1
  555. package/dist/overviews/registry.d.ts +1 -1
  556. package/dist/overviews/registry.js +3 -3
  557. package/dist/overviews/validate.d.ts.map +1 -1
  558. package/dist/overviews/validate.js +15 -2
  559. package/dist/planner/Planner.svelte +46 -4
  560. package/dist/planner/Planner.svelte.d.ts.map +1 -1
  561. package/dist/planner/PlannerControls.svelte +18 -2
  562. package/dist/planner/PlannerControls.svelte.d.ts +2 -0
  563. package/dist/planner/PlannerControls.svelte.d.ts.map +1 -1
  564. package/dist/planner/PlannerHostAction.svelte +61 -0
  565. package/dist/planner/PlannerHostAction.svelte.d.ts +12 -0
  566. package/dist/planner/PlannerHostAction.svelte.d.ts.map +1 -0
  567. package/dist/planner/PlannerLifecycle.svelte +75 -5
  568. package/dist/planner/PlannerLifecycle.svelte.d.ts +2 -1
  569. package/dist/planner/PlannerLifecycle.svelte.d.ts.map +1 -1
  570. package/dist/planner/bridge.d.ts +73 -0
  571. package/dist/planner/bridge.d.ts.map +1 -0
  572. package/dist/planner/bridge.js +303 -0
  573. package/dist/planner/commands/adapter.d.ts +2 -0
  574. package/dist/planner/commands/adapter.d.ts.map +1 -1
  575. package/dist/planner/commands/adapter.js +19 -0
  576. package/dist/planner/export-context.d.ts +6 -0
  577. package/dist/planner/export-context.d.ts.map +1 -0
  578. package/dist/planner/export-context.js +14 -0
  579. package/dist/planner/guide.d.ts +69 -0
  580. package/dist/planner/guide.d.ts.map +1 -0
  581. package/dist/planner/guide.js +115 -0
  582. package/dist/planner/host-reply.d.ts +22 -0
  583. package/dist/planner/host-reply.d.ts.map +1 -0
  584. package/dist/planner/host-reply.js +71 -0
  585. package/dist/planner/shell.d.ts +6 -0
  586. package/dist/planner/shell.d.ts.map +1 -1
  587. package/dist/planner/shell.js +2 -0
  588. package/dist/planner/types.d.ts +39 -1
  589. package/dist/planner/types.d.ts.map +1 -1
  590. package/dist/planner/workspace-storage.d.ts +29 -0
  591. package/dist/planner/workspace-storage.d.ts.map +1 -0
  592. package/dist/planner/workspace-storage.js +355 -0
  593. package/dist/planner/workspace.svelte.d.ts +19 -0
  594. package/dist/planner/workspace.svelte.d.ts.map +1 -0
  595. package/dist/planner/workspace.svelte.js +52 -0
  596. package/dist/smrt-version.d.ts +1 -1
  597. package/dist/smrt-version.js +1 -1
  598. package/package.json +54 -54
  599. package/app/_app/immutable/assets/2.CdEXvRg0.css +0 -1
  600. package/app/_app/immutable/assets/AppShell.BkKNrxND.css +0 -1
  601. package/app/_app/immutable/chunks/5TDxHd66.js +0 -1
  602. package/app/_app/immutable/chunks/9PL91wDk.js +0 -4
  603. package/app/_app/immutable/chunks/9iVbSlQr.js +0 -16
  604. package/app/_app/immutable/chunks/B-xSgl5J.js +0 -1
  605. package/app/_app/immutable/chunks/BDKUpjK6.js +0 -2
  606. package/app/_app/immutable/chunks/Bq35Wl4H.js +0 -2
  607. package/app/_app/immutable/chunks/Cu77BRmy.js +0 -1
  608. package/app/_app/immutable/chunks/CxZIUuYu.js +0 -1
  609. package/app/_app/immutable/chunks/CzHmSbsw.js +0 -1
  610. package/app/_app/immutable/chunks/D71UrO5c.js +0 -1
  611. package/app/_app/immutable/chunks/DF-0MxNw.js +0 -1
  612. package/app/_app/immutable/chunks/DaWOaOo5.js +0 -10
  613. package/app/_app/immutable/chunks/aDZBV4Ss.js +0 -26
  614. package/app/_app/immutable/entry/start.DQ2WMDJa.js +0 -1
  615. package/app/_app/immutable/nodes/0.CjivLsXS.js +0 -7
  616. package/app/_app/immutable/nodes/10.CRcxQ1FU.js +0 -3
  617. package/app/_app/immutable/nodes/14.CvNTiqf4.js +0 -1
  618. package/app/_app/immutable/nodes/2.D8ImYTF0.js +0 -24
  619. package/app/_app/immutable/nodes/7.Q7dzrAos.js +0 -1
@@ -1,13 +1,34 @@
1
1
  <script lang="ts">
2
+ import type { BrowserAssistantTransport } from '../assistant/transport.js';
2
3
  import { cookbookStore } from '../cookbook/store.svelte.js';
4
+ import type {
5
+ PlannerProjectPersistence,
6
+ PlannerProps,
7
+ } from '../planner/types.js';
8
+ import { workspacePersistence } from '../planner/workspace.svelte.js';
3
9
  import type { AppSettings as Settings } from '../settings/app-settings.js';
4
10
  import AppSettings from './AppSettings.svelte';
11
+ import ProjectControls from './ProjectControls.svelte';
12
+
13
+ interface Props
14
+ extends Pick<PlannerProps, 'controller' | 'onreset' | 'resetDisabledReason'> {
15
+ nativeAssistant?: BrowserAssistantTransport;
16
+ projectPersistence?: PlannerProjectPersistence | null;
17
+ }
18
+ let {
19
+ controller,
20
+ nativeAssistant,
21
+ onreset,
22
+ resetDisabledReason,
23
+ projectPersistence = workspacePersistence,
24
+ }: Props = $props();
5
25
 
6
26
  // The editor holds its own copy so typing is never fought by the store;
7
27
  // changes reach the cookbook after a short pause (and its save follows).
8
28
  const DELAY_MS = 300;
9
29
  let draft = $state<Settings>(cookbookStore.settings());
10
30
  let timer: ReturnType<typeof setTimeout> | undefined;
31
+ let generation = cookbookStore.replacementGeneration;
11
32
 
12
33
  function change(next: Settings) {
13
34
  draft = next;
@@ -16,6 +37,14 @@ function change(next: Settings) {
16
37
  }
17
38
 
18
39
  function commit() {
40
+ if (generation !== cookbookStore.replacementGeneration) {
41
+ clearTimeout(timer);
42
+ timer = undefined;
43
+ generation = cookbookStore.replacementGeneration;
44
+ draft = cookbookStore.settings();
45
+ return;
46
+ }
47
+ if (timer === undefined) return;
19
48
  clearTimeout(timer);
20
49
  timer = undefined;
21
50
  cookbookStore.setSettings(draft);
@@ -23,12 +52,19 @@ function commit() {
23
52
 
24
53
  // A cookbook, import or reset replaces the cookbook: show what it holds.
25
54
  $effect(() => {
55
+ const nextGeneration = cookbookStore.replacementGeneration;
26
56
  const stored = cookbookStore.settings();
27
- if (timer === undefined) draft = stored;
57
+ if (generation !== nextGeneration) {
58
+ clearTimeout(timer);
59
+ timer = undefined;
60
+ generation = nextGeneration;
61
+ draft = stored;
62
+ } else if (timer === undefined) draft = stored;
28
63
  });
29
64
  </script>
30
65
 
31
66
  <div class="pane">
67
+ <ProjectControls {projectPersistence} {controller} {nativeAssistant} {onreset} {resetDisabledReason} />
32
68
  <p class="meta">
33
69
  Defaults for this app. They apply to new records only; existing records
34
70
  keep their values.
@@ -1,4 +1,10 @@
1
- declare const SettingsPanel: import("svelte").Component<Record<string, never>, {}, "">;
1
+ import type { BrowserAssistantTransport } from '../assistant/transport.ts';
2
+ import type { PlannerProjectPersistence, PlannerProps } from '../planner/types.ts';
3
+ interface Props extends Pick<PlannerProps, 'controller' | 'onreset' | 'resetDisabledReason'> {
4
+ nativeAssistant?: BrowserAssistantTransport;
5
+ projectPersistence?: PlannerProjectPersistence | null;
6
+ }
7
+ declare const SettingsPanel: import("svelte").Component<Props, {}, "">;
2
8
  type SettingsPanel = ReturnType<typeof SettingsPanel>;
3
9
  export default SettingsPanel;
4
10
  //# sourceMappingURL=SettingsPanel.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsPanel.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/SettingsPanel.svelte.ts"],"names":[],"mappings":"AAmDA,QAAA,MAAM,aAAa,2DAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"SettingsPanel.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/SettingsPanel.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E,OAAO,KAAK,EACV,yBAAyB,EACzB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAO7B,UAAU,KACR,SAAQ,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,SAAS,GAAG,qBAAqB,CAAC;IAC5E,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,kBAAkB,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;CACvD;AAyED,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
@@ -11,4 +11,9 @@ export declare function formatSize(bytes: number): string;
11
11
  export declare function serializeCookbook(cookbook: Cookbook): string;
12
12
  /** Offer the cookbook as a `<name>.cookbook.json` download. */
13
13
  export declare function downloadCookbook(cookbook: Cookbook, name?: string): void;
14
+ /** Download an already serialized native export without changing its bytes. */
15
+ export declare function downloadCookbookFile(file: {
16
+ fileName: string;
17
+ text: string;
18
+ }): void;
14
19
  //# sourceMappingURL=file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/lib/cookbook/file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,sFAAsF;AACtF,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAO7C;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAEzD;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE5D;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAWxE"}
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/lib/cookbook/file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,sFAAsF;AACtF,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAO7C;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAEzD;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE5D;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAKxE;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAWP"}
@@ -28,10 +28,17 @@ export function serializeCookbook(cookbook) {
28
28
  }
29
29
  /** Offer the cookbook as a `<name>.cookbook.json` download. */
30
30
  export function downloadCookbook(cookbook, name) {
31
- const url = URL.createObjectURL(new Blob([serializeCookbook(cookbook)], { type: 'application/json' }));
31
+ downloadCookbookFile({
32
+ fileName: exportFileName(name),
33
+ text: serializeCookbook(cookbook),
34
+ });
35
+ }
36
+ /** Download an already serialized native export without changing its bytes. */
37
+ export function downloadCookbookFile(file) {
38
+ const url = URL.createObjectURL(new Blob([file.text], { type: 'application/json' }));
32
39
  const link = document.createElement('a');
33
40
  link.href = url;
34
- link.download = exportFileName(name);
41
+ link.download = file.fileName;
35
42
  document.body.append(link);
36
43
  link.click();
37
44
  link.remove();
@@ -20,6 +20,7 @@ export declare function followSettings(cookbook: Pick<Cookbook, 'policies'>): vo
20
20
  * Cookbook, whether it is saved, exported or compared.
21
21
  */
22
22
  export declare class CookbookStore {
23
+ replacementGeneration: number;
23
24
  /** The shell layout, owned here and passed to `AppShell`. */
24
25
  layout: ShellLayout | undefined;
25
26
  /** The app's name and description (`set_name`); not shown in the UI yet. */
@@ -88,7 +89,9 @@ export declare class CookbookStore {
88
89
  /** Replace on the visitor's say-so (an import): saving is allowed again. */
89
90
  replace(cookbook: Cookbook): void;
90
91
  /** Back to an empty cookbook, and the shell's own settings to defaults. */
91
- reset(): void;
92
+ reset(options?: {
93
+ preserveTheme?: boolean;
94
+ }): void;
92
95
  /** Validate and apply JSON text, e.g. a chosen file. Applies nothing on failure. */
93
96
  importText(text: string): CookbookResult;
94
97
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"store.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/cookbook/store.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,6CAA6C,CAAC;AAGrD,OAAO,EACL,KAAK,WAAW,EAKjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAYpE,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG3D,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AAEtD,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,iFAAiF;AACjF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,QAAQ,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,IAAI,CAgBzE;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,6DAA6D;IAC7D,MAAM,0BAAqC;IAC3C,4EAA4E;IAC5E,IAAI,qBAAgC;IACpC,WAAW,qBAAgC;IAC3C,4EAA4E;IAC5E,KAAK,2BAAsC;IAC3C;;;OAGG;IACH,SAAS,mCAAoD;IAC7D,OAAO,eAAmC;IAC1C,0EAA0E;IAC1E,MAAM,UAAiB;IACvB,6EAA6E;IAC7E,WAAW,UAAS;IACpB,0DAA0D;IAC1D,UAAU,SAAc;IAExB;;;;;OAKG;IACH,OAAO,CAAC,WAAW,CAAS;IAC5B,4EAA4E;IAC5E,aAAa,UAAiB;IAE9B,8EAA8E;IAC9E,OAAO,CAAC,kBAAkB,CAAS;IAEnC,8EAA8E;IAC9E,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,KAAK,CAA4C;IAEzD;;;;;OAKG;IACH,QAAQ,IAAI,QAAQ;IAapB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAI7C;;;OAGG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI;IAQhE,2EAA2E;IAC3E,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAIlC,oDAAoD;IACpD,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAU/B;;;OAGG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAQ9B;IAED,0EAA0E;IAC1E,iBAAiB,IAAI,IAAI;IAKzB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI;IAI9C,uFAAuF;IACvF,QAAQ,IAAI,WAAW;IAIvB,yEAAyE;IACzE,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAMxC,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAOjC,2EAA2E;IAC3E,KAAK,IAAI,IAAI;IAiBb,oFAAoF;IACpF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAMxC;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,IAAuB,GAAG,OAAO;IA0C5E,4EAA4E;IAC5E,IAAI,IAAI,OAAO;IAmBf,kDAAkD;IAClD,YAAY,IAAI,IAAI;IAMpB,+CAA+C;IAC/C,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
1
+ {"version":3,"file":"store.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/cookbook/store.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,6CAA6C,CAAC;AAIrD,OAAO,EACL,KAAK,WAAW,EAKjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWpE,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG3D,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AAEtD,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,iFAAiF;AACjF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,QAAQ,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,IAAI,CAgBzE;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,qBAAqB,SAAa;IAClC,6DAA6D;IAC7D,MAAM,0BAAqC;IAC3C,4EAA4E;IAC5E,IAAI,qBAAgC;IACpC,WAAW,qBAAgC;IAC3C,4EAA4E;IAC5E,KAAK,2BAAsC;IAC3C;;;OAGG;IACH,SAAS,mCAAoD;IAC7D,OAAO,eAAmC;IAC1C,0EAA0E;IAC1E,MAAM,UAAiB;IACvB,6EAA6E;IAC7E,WAAW,UAAS;IACpB,0DAA0D;IAC1D,UAAU,SAAc;IAExB;;;;;OAKG;IACH,OAAO,CAAC,WAAW,CAAS;IAC5B,4EAA4E;IAC5E,aAAa,UAAiB;IAE9B,8EAA8E;IAC9E,OAAO,CAAC,kBAAkB,CAAS;IAEnC,8EAA8E;IAC9E,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,KAAK,CAA4C;IAEzD;;;;;OAKG;IACH,QAAQ,IAAI,QAAQ;IAapB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAI7C;;;OAGG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI;IAQhE,2EAA2E;IAC3E,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAIlC,oDAAoD;IACpD,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAU/B;;;OAGG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAQ9B;IAED,0EAA0E;IAC1E,iBAAiB,IAAI,IAAI;IAKzB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI;IAI9C,uFAAuF;IACvF,QAAQ,IAAI,WAAW;IAIvB,yEAAyE;IACzE,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAMxC,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAQjC,2EAA2E;IAC3E,KAAK,CAAC,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI;IAatD,oFAAoF;IACpF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAMxC;;;;OAIG;IACH,OAAO,CACL,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAO,GAAG,IAAyB,GAC3C,OAAO;IA0CV,4EAA4E;IAC5E,IAAI,IAAI,OAAO;IAmBf,kDAAkD;IAClD,YAAY,IAAI,IAAI;IAMpB,+CAA+C;IAC/C,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -1,11 +1,12 @@
1
1
  import { isShellLayoutEmpty, } from '@happyvertical/smrt-svelte/workspace/layout';
2
2
  import { setSamplePricing, setSampleTaxRate } from "../data/packs.js";
3
+ import { workspaceStorage } from "../planner/workspace-storage.js";
3
4
  import { recipeState } from "../recipes/state.svelte.js";
4
5
  import { hasTaxRateRow, isSettingRow, readSettings, writeSettings, } from "../settings/app-settings.js";
5
6
  import { compactTheme } from "../theme/theme.js";
6
7
  import { assembleCookbook } from "./assemble.js";
7
8
  import { cookbookFromLegacySearch, hasLegacyState } from "./legacy.js";
8
- import { BACKUP_KEY, browserStorage, loadCookbook, PREVIOUS_STORAGE_KEY, removeKey, saveCookbook, writeKey, } from "./storage.js";
9
+ import { BACKUP_KEY, loadCookbook, PREVIOUS_STORAGE_KEY, removeKey, saveCookbook, writeKey, } from "./storage.js";
9
10
  import { parseCookbookText } from "./validate.js";
10
11
  /** Where the planner's AppShell keeps its own settings (panel states, sizes). */
11
12
  export const SHELL_STORAGE_KEY = 'smrt-planner:shell';
@@ -34,6 +35,7 @@ export function followSettings(cookbook) {
34
35
  * Cookbook, whether it is saved, exported or compared.
35
36
  */
36
37
  export class CookbookStore {
38
+ replacementGeneration = $state(0);
37
39
  /** The shell layout, owned here and passed to `AppShell`. */
38
40
  layout = $state();
39
41
  /** The app's name and description (`set_name`); not shown in the UI yet. */
@@ -146,6 +148,7 @@ export class CookbookStore {
146
148
  }
147
149
  /** Replace on the visitor's say-so (an import): saving is allowed again. */
148
150
  replace(cookbook) {
151
+ this.replacementGeneration++;
149
152
  this.apply(cookbook);
150
153
  if (!this.loaded)
151
154
  this.replacedBeforeLoad = true;
@@ -153,20 +156,16 @@ export class CookbookStore {
153
156
  this.keepLegacyUrl = false;
154
157
  }
155
158
  /** Back to an empty cookbook, and the shell's own settings to defaults. */
156
- reset() {
159
+ reset(options = {}) {
160
+ this.replacementGeneration++;
157
161
  recipeState.clear();
158
162
  followSettings({ policies: [] });
159
163
  this.layout = undefined;
160
- this.theme = undefined;
164
+ if (!options.preserveTheme)
165
+ this.theme = undefined;
161
166
  this.name = undefined;
162
167
  this.description = undefined;
163
168
  this.overviews = {};
164
- try {
165
- globalThis.localStorage?.removeItem(SHELL_STORAGE_KEY);
166
- }
167
- catch {
168
- // Storage may be unavailable (private mode); the cookbook still resets.
169
- }
170
169
  this.saveBlocked = false;
171
170
  this.keepLegacyUrl = false;
172
171
  }
@@ -182,7 +181,7 @@ export class CookbookStore {
182
181
  * Call once in the browser, before `loaded` lets saving start. Returns true
183
182
  * when a legacy link was imported, so the caller can clean the URL.
184
183
  */
185
- hydrate(search, storage = browserStorage()) {
184
+ hydrate(search, storage = workspaceStorage()) {
186
185
  this.storage = storage;
187
186
  const outcome = loadCookbook(storage);
188
187
  if (outcome.status === 'loaded')
@@ -18,6 +18,7 @@
18
18
  *
19
19
  * @module
20
20
  */
21
+ export { parseSampleContext, type SampleContext, sampleContextSchema, } from '../data/sample-context.ts';
21
22
  export { HOST_HISTORY_CHARS, HOST_HISTORY_TURNS, HOST_MESSAGE_CHARS, HOST_WIRE_VERSION, type HostRequest, } from '../inference/host.ts';
22
23
  export { buildCommandTools, COMMAND_NAMES, type CommandTool, checkSchema, commandSchemas, commandTools, type JsonSchema, } from '../planner/commands/schemas.ts';
23
24
  export { type BatchResult, type CommandError, type CommandErrorCode, type CommandInputs, type CommandName, type CommandReceipt, type CommandResult, type ExportData, PLANNER_COMMANDS_VERSION, PLANNER_TAB_IDS, type PlannerCommand, type PlannerTabId, type PlanSnapshot, type RecipeChanges, type RunOptions, } from '../planner/commands/types.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,WAAW,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,KAAK,WAAW,EAChB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,KAAK,UAAU,GAChB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,wBAAwB,EACxB,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,aAAa,EAClB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,KAAK,eAAe,EACpB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,OAAO,EACP,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,QAAQ,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAClB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,WAAW,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,KAAK,WAAW,EAChB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,KAAK,UAAU,GAChB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,wBAAwB,EACxB,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,aAAa,EAClB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,KAAK,eAAe,EACpB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,OAAO,EACP,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,QAAQ,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -18,6 +18,7 @@
18
18
  *
19
19
  * @module
20
20
  */
21
+ export { parseSampleContext, sampleContextSchema, } from "../data/sample-context.js";
21
22
  export { HOST_HISTORY_CHARS, HOST_HISTORY_TURNS, HOST_MESSAGE_CHARS, HOST_WIRE_VERSION, } from "../inference/host.js";
22
23
  export { buildCommandTools, COMMAND_NAMES, checkSchema, commandSchemas, commandTools, } from "../planner/commands/schemas.js";
23
24
  export { PLANNER_COMMANDS_VERSION, PLANNER_TAB_IDS, } from "../planner/commands/types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/lib/core/prompt.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAElE,4CAA4C;AAC5C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,QAAQ,EAAE,YAAY,CAAC;IACvB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvD,qFAAqF;IACrF,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,wFAAwF;AACxF,MAAM,WAAW,UAAU;IACzB,uHAAuH;IACvH,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AA4ED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CA0ClE"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/lib/core/prompt.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAElE,4CAA4C;AAC5C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,QAAQ,EAAE,YAAY,CAAC;IACvB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvD,qFAAqF;IACrF,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,wFAAwF;AACxF,MAAM,WAAW,UAAU;IACzB,uHAAuH;IACvH,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAiFD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CA8ClE"}
@@ -1,5 +1,6 @@
1
1
  import { buildMatchIndex, matchText, } from "../assistant/match.js";
2
2
  import { buildSystemPrompt } from "../assistant/prompt.js";
3
+ import { sampleContextSchema } from "../data/sample-context.js";
3
4
  import { HOST_HISTORY_CHARS, HOST_HISTORY_TURNS, HOST_MESSAGE_CHARS, } from "../inference/host.js";
4
5
  import { commandTools } from "../planner/commands/schemas.js";
5
6
  import { plannerReportSources, REPORTS_RECIPE } from "../reports/sources.js";
@@ -51,6 +52,11 @@ function commandSection(snapshot) {
51
52
  '',
52
53
  '"commands": optional, at most 8 {"name", "input"} run in order, only for what add/remove/settings/theme cannot do. Commands:',
53
54
  ...commandTools.map((tool) => `- ${signature(tool)}: ${tool.description}`),
55
+ '',
56
+ '"sampleContext": TOP-LEVEL sibling of "reply" and "commands". REQUIRED when building an initial custom product-backed business app on an empty project (no recipes enabled), so its product records match the business. Omit for questions, no-ops, followups, or library cookbooks with their own canonical sample pack. Never fabricate a product assortment for a non-product app. NEVER put sampleContext inside commands[].input. Exact shape:',
57
+ '{"reply":"...","commands":[{"name":"add_recipes","input":{"ids":["<published recipe id>"]}}],"sampleContext":{"provenance":"fictional","products":[{"name":"<invented relevant product>","description":"<fictional sample description>","price":1200,"category":"<relevant category>"}],"customers":["<invented customer name>"],"vendors":["<invented vendor name>"]}}',
58
+ `sampleContext: provenance must be "fictional"; products ${sampleContextSchema.properties.products.minItems}–${sampleContextSchema.properties.products.maxItems} objects with required name, description, price and optional category; customers ${sampleContextSchema.properties.customers.minItems}–${sampleContextSchema.properties.customers.maxItems} strings; vendors ${sampleContextSchema.properties.vendors.minItems}–${sampleContextSchema.properties.vendors.maxItems} strings. Names/category: nonblank, max ${sampleContextSchema.properties.products.items.properties.name.maxLength} characters; description max ${sampleContextSchema.properties.products.items.properties.description.maxLength}. Price: integer minor units (1200 = 12.00), ${sampleContextSchema.properties.products.items.properties.price.minimum}–${sampleContextSchema.properties.products.items.properties.price.maximum}. No other fields.`,
59
+ 'For an initial custom build, choose 5–6 relevant fictional products and a few fictional customers/vendors, not the maximum counts. Represent the business assortment: core goods, replacement parts/accessories and related merchandise/apparel where appropriate. Infer vocabulary from this business in any domain; never invent real company facts. Omit sampleContext on followups: never regenerate, reset or overwrite existing samples or manual edits.',
54
60
  ];
55
61
  const menu = snapshot.sections
56
62
  .filter((section) => !section.hidden)
@@ -97,6 +103,10 @@ export function buildHostPrompt(input) {
97
103
  ? plannerReportSources(snapshot.recipes.map((recipe) => recipe.id), catalog.recipes).map(({ id, label }) => ({ id, label }))
98
104
  : []),
99
105
  ...commandSection(snapshot),
106
+ snapshot.recipes.length > 0 &&
107
+ commandTools.some((tool) => tool.name === 'export_cookbook')
108
+ ? 'Completion: only when the visitor is clearly satisfied or wrapping up, offer Export > Download cookbook or Copy prompt once per wrap-up. Keep Build it primary where present. Brainstorming, not-ready statements, negation and thanks alone are not completion intent. Do not repeat an earlier export offer without renewed intent. Never emit export_cookbook merely because they seem done; suggest the UI action, never claim export or submission happened.'
109
+ : 'Completion: there is no verified nonempty exportable plan. Do not suggest export based on a visitor claim or completion language alone.',
100
110
  ].join('\n');
101
111
  const history = (input.history ?? [])
102
112
  .filter((turn) => (turn.role === 'user' || turn.role === 'assistant') &&
@@ -1,3 +1,4 @@
1
+ import { type SampleContext } from '../data/sample-context.ts';
1
2
  import { type ReportIntent } from '../reports/intent.ts';
2
3
  import { type PromptCatalog } from './catalog.ts';
3
4
  /**
@@ -6,6 +7,7 @@ import { type PromptCatalog } from './catalog.ts';
6
7
  * model. Only `reply` is required; empty parts are left out.
7
8
  */
8
9
  export interface HostReply {
10
+ sampleContext?: SampleContext;
9
11
  /** The sentence shown to the visitor. */
10
12
  reply: string;
11
13
  /** Recipe ids to switch on. */
@@ -1 +1 @@
1
- {"version":3,"file":"reply.d.ts","sourceRoot":"","sources":["../../src/lib/core/reply.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAElE;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;KACnC,CAAC;IACF,+FAA+F;IAC/F,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,6DAA6D;IAC7D,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC9C;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,aAA8B,GACtC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0BzB;AAED,sDAAsD;AACtD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAsB,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,gGAAgG;IAChG,EAAE,EAAE,OAAO,CAAC;IACZ,6DAA6D;IAC7D,KAAK,EAAE,SAAS,CAAC;IACjB,sFAAsF;IACtF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAiBD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,aAA8B,GACtC,eAAe,CA4CjB"}
1
+ {"version":3,"file":"reply.d.ts","sourceRoot":"","sources":["../../src/lib/core/reply.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,2BAA2B,CAAC;AAMnC,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAElE;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;KACnC,CAAC;IACF,+FAA+F;IAC/F,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,6DAA6D;IAC7D,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC9C;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,aAA8B,GACtC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4BzB;AAED,sDAAsD;AACtD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAsB,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,gGAAgG;IAChG,EAAE,EAAE,OAAO,CAAC;IACZ,6DAA6D;IAC7D,KAAK,EAAE,SAAS,CAAC;IACjB,sFAAsF;IACtF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAkBD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,aAA8B,GACtC,eAAe,CA4CjB"}
@@ -1,4 +1,5 @@
1
1
  import { buildResponseSchema, FALLBACK_REPLY, MAX_COMMANDS, parseChange, stripThinking, } from "../assistant/change.js";
2
+ import { sampleContextSchema, } from "../data/sample-context.js";
2
3
  import { checkSchema, commandSchemas, commandTools, } from "../planner/commands/schemas.js";
3
4
  import { reportIntentSchema } from "../reports/intent.js";
4
5
  import { REPORTS_RECIPE } from "../reports/sources.js";
@@ -28,6 +29,8 @@ export function buildReplySchema(catalog = defaultCatalog) {
28
29
  if (catalog.recipes.some((recipe) => recipe.id === REPORTS_RECIPE)) {
29
30
  schema.properties.report = reportIntentSchema([]);
30
31
  }
32
+ schema.properties.sampleContext =
33
+ sampleContextSchema;
31
34
  return schema;
32
35
  }
33
36
  /** The reply schema for the planner's own library. */
@@ -36,6 +39,7 @@ const nonEmpty = (value) => Object.keys(value).length > 0;
36
39
  function toHostReply(change) {
37
40
  return {
38
41
  reply: change.reply,
42
+ ...(change.sampleContext ? { sampleContext: change.sampleContext } : {}),
39
43
  ...(change.add.length ? { add: change.add } : {}),
40
44
  ...(change.remove.length ? { remove: change.remove } : {}),
41
45
  ...(change.cookbook ? { cookbook: change.cookbook } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"packs.d.ts","sourceRoot":"","sources":["../../src/lib/data/packs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"packs.d.ts","sourceRoot":"","sources":["../../src/lib/data/packs.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,4 @@
1
- /**
2
- * Sample-data packs. The generator draws names, prices, descriptions and the
3
- * like from the ACTIVE pack: the generic one until a cookbook is applied, then
4
- * that cookbook's (same id). Every value is fixed text, so a pack is as
5
- * deterministic as the seed. Money is integer minor units (cents).
6
- */
1
+ import { getSampleContext } from "./sample-context.js";
7
2
  export const GENERIC_PACK = {
8
3
  id: 'generic',
9
4
  products: [
@@ -3266,7 +3261,19 @@ export const COOKBOOK_PACKS = {
3266
3261
  let active = GENERIC_PACK;
3267
3262
  /** The pack the generator reads right now. */
3268
3263
  export function getSamplePack() {
3269
- return active;
3264
+ const context = getSampleContext();
3265
+ return active === GENERIC_PACK && context
3266
+ ? {
3267
+ ...GENERIC_PACK,
3268
+ id: 'contextual',
3269
+ rowCounts: {
3270
+ '@happyvertical/smrt-products:Product': context.products.length,
3271
+ },
3272
+ products: context.products,
3273
+ customers: context.customers,
3274
+ vendors: context.vendors,
3275
+ }
3276
+ : active;
3270
3277
  }
3271
3278
  /**
3272
3279
  * Switch the pack to a cookbook's (unknown or null: the generic one). Rows
@@ -1 +1 @@
1
- {"version":3,"file":"planner-source.d.ts","sourceRoot":"","sources":["../../src/lib/data/planner-source.ts"],"names":[],"mappings":"AAkBA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AA+BtE;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,UAAU,CA4GpD"}
1
+ {"version":3,"file":"planner-source.d.ts","sourceRoot":"","sources":["../../src/lib/data/planner-source.ts"],"names":[],"mappings":"AAmBA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AA+BtE;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,UAAU,CA4GpD"}
@@ -1,9 +1,10 @@
1
1
  import { catalog } from "../catalog/index.js";
2
- import { browserStorage, STORAGE_KEY } from "../cookbook/storage.js";
2
+ import { STORAGE_KEY } from "../cookbook/storage.js";
3
3
  import { followSettings } from "../cookbook/store.svelte.js";
4
4
  import { parseCookbookText } from "../cookbook/validate.js";
5
5
  import { catalogModels } from "../forms/shared.js";
6
6
  import { PROFILE_TYPE, stockSamples, VARIANT } from "../forms/stock.js";
7
+ import { workspaceStorage } from "../planner/workspace-storage.js";
7
8
  import { ASSET, PRODUCT_ASSET } from "../products/media.js";
8
9
  import { recipes } from "../recipes/index.js";
9
10
  import { childLinks } from "../recipes/plumbing.js";
@@ -48,9 +49,9 @@ function primeSampleSettings(storage) {
48
49
  * objects: swap this for a collection-backed `DataSource`.
49
50
  */
50
51
  export function createPlannerDataSource() {
51
- primeSampleSettings(browserStorage());
52
+ primeSampleSettings(workspaceStorage());
52
53
  return createMemoryDataSource({
53
- storage: browserStorage(),
54
+ storage: workspaceStorage(),
54
55
  // Fields the views hide still carry their policy default, e.g. the
55
56
  // `contractType` that tells an Order from a PurchaseOrder.
56
57
  defaults: (model) => recipeState.apply(model).background,
@@ -0,0 +1,84 @@
1
+ /** Fictional vocabulary for a custom app's demo records; never cookbook data. */
2
+ export interface SampleContext {
3
+ provenance: 'fictional';
4
+ products: {
5
+ name: string;
6
+ description: string;
7
+ price: number;
8
+ category?: string;
9
+ }[];
10
+ customers: string[];
11
+ vendors: string[];
12
+ }
13
+ export declare const sampleContextSchema: {
14
+ readonly type: "object";
15
+ readonly properties: {
16
+ readonly provenance: {
17
+ readonly enum: readonly ["fictional"];
18
+ };
19
+ readonly products: {
20
+ readonly type: "array";
21
+ readonly minItems: 1;
22
+ readonly maxItems: 16;
23
+ readonly items: {
24
+ readonly type: "object";
25
+ readonly properties: {
26
+ readonly name: {
27
+ type: string;
28
+ minLength: number;
29
+ maxLength: number;
30
+ };
31
+ readonly description: {
32
+ readonly maxLength: 400;
33
+ readonly type: string;
34
+ readonly minLength: number;
35
+ };
36
+ readonly price: {
37
+ readonly type: "integer";
38
+ readonly minimum: 0;
39
+ readonly maximum: 1000000000;
40
+ };
41
+ readonly category: {
42
+ type: string;
43
+ minLength: number;
44
+ maxLength: number;
45
+ };
46
+ };
47
+ readonly required: readonly ["name", "description", "price"];
48
+ readonly additionalProperties: false;
49
+ };
50
+ };
51
+ readonly customers: {
52
+ readonly type: "array";
53
+ readonly minItems: 1;
54
+ readonly maxItems: 8;
55
+ readonly items: {
56
+ type: string;
57
+ minLength: number;
58
+ maxLength: number;
59
+ };
60
+ };
61
+ readonly vendors: {
62
+ readonly type: "array";
63
+ readonly minItems: 1;
64
+ readonly maxItems: 5;
65
+ readonly items: {
66
+ type: string;
67
+ minLength: number;
68
+ maxLength: number;
69
+ };
70
+ };
71
+ };
72
+ readonly required: readonly ["provenance", "products", "customers", "vendors"];
73
+ readonly additionalProperties: false;
74
+ };
75
+ /** Reject the entire vocabulary when any part is invalid. */
76
+ export declare function parseSampleContext(value: unknown): SampleContext | undefined;
77
+ export declare const SAMPLE_CONTEXT_KEY = "smrt-planner:sample-context:v1";
78
+ /** Read before generating rows, including a direct record-page reload. */
79
+ export declare function getSampleContext(): SampleContext | undefined;
80
+ /** Install once. Retries and feature followups never replace vocabulary or rows. */
81
+ export declare function applySampleContext(value: unknown): boolean;
82
+ /** Explicit full data reset starts a new demo context, matching the data source's origin scope. */
83
+ export declare function clearSampleContext(): void;
84
+ //# sourceMappingURL=sample-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample-context.d.ts","sourceRoot":"","sources":["../../src/lib/data/sample-context.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,WAAW,CAAC;IACxB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAGD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyBtB,CAAC;AAMX,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAuC5E;AAED,eAAO,MAAM,kBAAkB,mCAAmC,CAAC;AASnE,0EAA0E;AAC1E,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAW5D;AACD,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAU1D;AAED,mGAAmG;AACnG,wBAAgB,kBAAkB,IAAI,IAAI,CAOzC"}
@@ -0,0 +1,106 @@
1
+ import { workspaceStorage } from "../planner/workspace-storage.js";
2
+ const text = { type: 'string', minLength: 1, maxLength: 160 };
3
+ export const sampleContextSchema = {
4
+ type: 'object',
5
+ properties: {
6
+ provenance: { enum: ['fictional'] },
7
+ products: {
8
+ type: 'array',
9
+ minItems: 1,
10
+ maxItems: 16,
11
+ items: {
12
+ type: 'object',
13
+ properties: {
14
+ name: text,
15
+ description: { ...text, maxLength: 400 },
16
+ price: { type: 'integer', minimum: 0, maximum: 1000000000 },
17
+ category: text,
18
+ },
19
+ required: ['name', 'description', 'price'],
20
+ additionalProperties: false,
21
+ },
22
+ },
23
+ customers: { type: 'array', minItems: 1, maxItems: 8, items: text },
24
+ vendors: { type: 'array', minItems: 1, maxItems: 5, items: text },
25
+ },
26
+ required: ['provenance', 'products', 'customers', 'vendors'],
27
+ additionalProperties: false,
28
+ };
29
+ const object = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
30
+ const words = (v, max = 160) => typeof v === 'string' && v.trim().length > 0 && v.length <= max;
31
+ /** Reject the entire vocabulary when any part is invalid. */
32
+ export function parseSampleContext(value) {
33
+ if (!object(value) ||
34
+ Object.keys(value).some((k) => !['provenance', 'products', 'customers', 'vendors'].includes(k)) ||
35
+ value.provenance !== 'fictional')
36
+ return;
37
+ const names = (v, max) => Array.isArray(v) &&
38
+ v.length > 0 &&
39
+ v.length <= max &&
40
+ v.every((n) => words(n));
41
+ if (!names(value.customers, 8) ||
42
+ !names(value.vendors, 5) ||
43
+ !Array.isArray(value.products) ||
44
+ !value.products.length ||
45
+ value.products.length > 16)
46
+ return;
47
+ for (const p of value.products) {
48
+ if (!object(p) ||
49
+ Object.keys(p).some((k) => !['name', 'description', 'price', 'category'].includes(k)) ||
50
+ !words(p.name) ||
51
+ !words(p.description, 400) ||
52
+ typeof p.price !== 'number' ||
53
+ !Number.isSafeInteger(p.price) ||
54
+ p.price < 0 ||
55
+ p.price > 1000000000 ||
56
+ (p.category !== undefined && !words(p.category)))
57
+ return;
58
+ }
59
+ return JSON.parse(JSON.stringify(value));
60
+ }
61
+ export const SAMPLE_CONTEXT_KEY = 'smrt-planner:sample-context:v1';
62
+ let active;
63
+ function storage() {
64
+ try {
65
+ return workspaceStorage();
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ /** Read before generating rows, including a direct record-page reload. */
72
+ export function getSampleContext() {
73
+ if (!active) {
74
+ try {
75
+ active = parseSampleContext(JSON.parse(storage()?.getItem(SAMPLE_CONTEXT_KEY) ?? 'null'));
76
+ }
77
+ catch {
78
+ /* Unreadable context never replaces records. */
79
+ }
80
+ }
81
+ return active;
82
+ }
83
+ /** Install once. Retries and feature followups never replace vocabulary or rows. */
84
+ export function applySampleContext(value) {
85
+ const context = parseSampleContext(value);
86
+ if (!context || getSampleContext())
87
+ return false;
88
+ active = context;
89
+ try {
90
+ storage()?.setItem(SAMPLE_CONTEXT_KEY, JSON.stringify(context));
91
+ }
92
+ catch {
93
+ /* In-memory previews still work without browser storage. */
94
+ }
95
+ return true;
96
+ }
97
+ /** Explicit full data reset starts a new demo context, matching the data source's origin scope. */
98
+ export function clearSampleContext() {
99
+ active = undefined;
100
+ try {
101
+ storage()?.removeItem(SAMPLE_CONTEXT_KEY);
102
+ }
103
+ catch {
104
+ /* Storage may be unavailable. */
105
+ }
106
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/lib/data/source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/lib/data/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,KAAK,OAAO,EAKb,MAAM,eAAe,CAAC;AAavB,OAAO,EAML,KAAK,WAAW,EAEjB,MAAM,YAAY,CAAC;AAepB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;GAIG;AACH;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uEAAuE;AACvE,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,UAAU,CAAC;AAEf,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAM9D;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB;IACE,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,YAAY,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACvC,GACD;IACE,EAAE,EAAE,QAAQ,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACpC,CAAC;AAEN,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD;;;OAGG;IACH,SAAS,CACP,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1B,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IACvE,MAAM,CACJ,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,MAAM,CACJ,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D;;;;OAIG;IACH,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5E,+EAA+E;IAC/E,KAAK,CAAC,IAAI,IAAI,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAkB3D,6CAA6C;AAC7C,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAYzE;AAED,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;QAC9B,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;KACjE,CACF,CAAC;IACF;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;QAChC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;KACvC,CAAC;IACF;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,iGAAiG;IACjG,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,uBAA4B,GACpC,UAAU,CAgrBZ"}